From 3a3baa5f8ca311b74503cb734597f2e3578bd814 Mon Sep 17 00:00:00 2001 From: DzhiWang <2429634486@qq.com> Date: Thu, 7 Dec 2023 16:51:15 +0800 Subject: [PATCH 1/3] add calender_chart analysis --- app/DataBase/msg.py | 15 ++++++++++++++ app/analysis/analysis.py | 43 ++++++++++++++++++++++++++++++++++++++-- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/app/DataBase/msg.py b/app/DataBase/msg.py index 1b03ce7..76255f2 100644 --- a/app/DataBase/msg.py +++ b/app/DataBase/msg.py @@ -170,6 +170,21 @@ class Msg: return res + def get_messages_by_days(self, username_, year_='2023'): + sql = ''' + SELECT strftime('%Y-%m-%d',CreateTime,'unixepoch','localtime') as days,count(MsgSvrID) + from MSG + where StrTalker = ? and strftime('%Y',CreateTime,'unixepoch','localtime') = ? + group by days + ''' + try: + lock.acquire(True) + self.cursor.execute(sql, [username_, year_]) + result = self.cursor.fetchall() + finally: + lock.release() + return result + def get_first_time_of_message(self, username_): if not self.open_flag: return None diff --git a/app/analysis/analysis.py b/app/analysis/analysis.py index 56aba51..fa56a30 100644 --- a/app/analysis/analysis.py +++ b/app/analysis/analysis.py @@ -2,6 +2,9 @@ from collections import Counter from PyQt5.QtCore import QFile, QTextStream, QIODevice +import sys +sys.path.append('.') + from app.DataBase import msg_db, MsgType from app.person_pc import ContactPC import jieba @@ -76,11 +79,47 @@ def wordcloud(wxid): } +def calendar_chart(wxid, year): + calendar_data = msg_db.get_messages_by_days(wxid, year) + + if not calendar_data: + return False + min_ = min(map(lambda x: x[1], calendar_data)) + max_ = max(map(lambda x: x[1], calendar_data)) + + c = ( + Calendar(init_opts=opts.InitOpts(width=f"{charts_width}px", height=f"{charts_height}px")) + .add( + "", + calendar_data, + calendar_opts=opts.CalendarOpts(range_=year) + ) + .set_global_opts( + title_opts=opts.TitleOpts(title="2023年聊天情况"), + visualmap_opts=opts.VisualMapOpts( + max_=max_, + min_=min_, + orient="horizontal", + # is_piecewise=True, + # pos_top="200px", + pos_bottom="0px", + pos_left="0px", + ), + legend_opts=opts.LegendOpts(is_show=False) + ) + ) + return { + 'chart_data': c + } + + class Analysis: pass if __name__ == '__main__': msg_db.init_database(path='../DataBase/Msg/MSG.db') - w = wordcloud('wxid_0o18ef858vnu22') - print(w) + # w = wordcloud('wxid_0o18ef858vnu22') + c = calendar_chart('wxid_27hqbq7vx5hf22', '2023') + c['chart_data'].render("./data/聊天统计/calendar.html") + print('c:::', c) From 87f8646181e2178af89ca42f5416733207998cb1 Mon Sep 17 00:00:00 2001 From: DzhiWang <2429634486@qq.com> Date: Thu, 7 Dec 2023 17:22:44 +0800 Subject: [PATCH 2/3] add calendar_chart in analysis --- app/DataBase/msg.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/DataBase/msg.py b/app/DataBase/msg.py index 76255f2..32a6a69 100644 --- a/app/DataBase/msg.py +++ b/app/DataBase/msg.py @@ -177,6 +177,9 @@ class Msg: where StrTalker = ? and strftime('%Y',CreateTime,'unixepoch','localtime') = ? group by days ''' + result = None + if not self.open_flag: + return None try: lock.acquire(True) self.cursor.execute(sql, [username_, year_]) From f2124fa50676870b9307c4eced7905387a00b5b2 Mon Sep 17 00:00:00 2001 From: DzhiWang <2429634486@qq.com> Date: Thu, 7 Dec 2023 17:26:03 +0800 Subject: [PATCH 3/3] add calendar_chart in analysis --- app/DataBase/msg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/DataBase/msg.py b/app/DataBase/msg.py index 32a6a69..5fae88b 100644 --- a/app/DataBase/msg.py +++ b/app/DataBase/msg.py @@ -231,4 +231,4 @@ if __name__ == '__main__': pprint(msg.get_message_by_num('wxid_0o18ef858vnu22', local_id)) print(msg.get_messages_by_keyword(wxid, '干嘛')) pprint(msg.get_messages_by_keyword(wxid, '干嘛')[0]) - print(msg.get_first_time_of_message('wxid_fervbwign7m822')) + print(msg.get_first_time_of_message('wxid_0o18ef858vnu22')) \ No newline at end of file