前言

这个小demo是为了练手,把2018年我和我五个好朋友的群聊天记录进行分析挖掘,以及可视化。
python3.6
pandas
numpy
pyecharts

预处理:

首先从QQ消息管理器里导出聊天记录:

2019-01-12 20:04:30 秋非凡(100****042)
没定级赛啊

可以看出构成成份是

yyyy-mm-dd hh:mm:ss username(userid)\ntext

所以把txt规范为csv文件:

属性 解释
year
month
day
hour
minute
second
userid 昵称(脱敏把真实QQ号隐藏了)
text 聊天文本

从QQ导出的聊天记录的时间是2018-01-01 11:47:04格式的
手贱就把他分成这样的了:

year mon day hour min sec userid text
2018 1 1 11 47 4 大头

于是又另起三列(df[“xxx”] = xxx的赋值方式是在dataframe最右边添加列)

df["date"]  = pd.PeriodIndex(year=df["year"], month=df["month"], day=df["day"], freq="D")df["time"] = df["hour"].astype("str").str.cat(df["minute"].astype("str"),sep=":").str.cat(df["second"].astype("str"),sep=":")df["datetime"] = df["date"].astype("str").str.cat(df["time"].astype("str"),sep=" ")

变成

year month day hour minute second userid text date time datetime
2018 1 1 11 47 4 大头 2018-01-01 11:47:4 2018-01-01 11:47:4

参考:
Pandas详解七之DatetimeIndex、PeriodIndex和TimedeltaIndex时间序列

pandas的多列拼接成一列函数

时间

人发言次数和发图占比

在jupyter环境下:获取发言次数和发图次数

df.groupby("userid")["text"].size()#获取发言次数
df[df["text"] == "[图片]"].groupby("userid").size()#获取发图次数

然后绘图:

from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Grid
from pyecharts.globals import ThemeType
userid_list = ['栓二',"二大爷",'摇摆', '大头', '秋豪', '蓝鸡']
pic_num_list = [1264,2793,1810,3823,4660,7314]
word_num_list = sorted([14290, 18716, 14456, 10417, 25606, 38361])
bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add_xaxis(userid_list).add_yaxis("发图次数",pic_num_list,stack = "1").add_yaxis("发言次数",list(map(lambda x: x[0]-x[1], zip(word_num_list,pic_num_list))),stack = "1").reversal_axis()#坐标翻转.set_global_opts(title_opts=opts.TitleOpts(title="Bar-发言次数和发图占比"),legend_opts=opts.LegendOpts(pos_top="80%",pos_right = "10%"),).set_series_opts(label_opts=opts.LabelOpts(position = "inside",color = "white"))
)
bar.render("bar_user.html")
bar.render_notebook()


(考研也不能阻止我水群

month

总览2018年聊天情况:

from pyecharts import options as opts
from pyecharts.charts import Bar,Line,Grid
from pyecharts.globals import ThemeType
#数据准备
bar_data = df.groupby(['userid','month']).size()
x_data = ["{}月".format(i) for i in range(1, 13)]
y_data_yb = bar_data['摇摆']
y_data_dt = bar_data['大头']
y_data_lj = bar_data['蓝鸡']
y_data_qh = bar_data['秋豪']
y_data_se = bar_data['栓二']
y_data_edy = bar_data['二大爷']
#绘图
bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add_xaxis(x_data)# 系列数据yaxis_data: Sequence[Numeric, opts.BarItem, dict],这里我们用dict.add_yaxis("月总数1",list(df.groupby('month')['text'].size()),color = "blue").set_global_opts(title_opts=opts.TitleOpts(title="Bar-2018聊天情况")#legend_opts=opts.LegendOpts(pos_top="48%"),).set_series_opts(label_opts=opts.LabelOpts(position = "top"),)
)
line = (Line().add_xaxis(x_data).add_yaxis("平均数", [int(df["text"].count()/12)]*12).add_yaxis("月总数",list(y_data_yb+y_data_dt+y_data_lj+y_data_qh+y_data_se+y_data_edy)).set_series_opts(label_opts=opts.LabelOpts(is_show=False),)
)
bar.overlap(line)#line覆盖在bar上
bar.render("bar_month.html")
bar.render_notebook()


可以看到下半年明显比上半年多,估计是大三下半年都没什么事闲了(但是我不是应该在考研么
十月是巅峰,平均数达到了10167条发言/月

week:

df.groupby("week")["text"].count().index#x轴
df.groupby("dayofweek")["text"].count()#y轴
from pyecharts import options as opts
from pyecharts.charts import Bardef bar_base() -> Bar:c = (Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)).add_xaxis(['Sunday','Monday','Tuesday', 'Wednesday', 'Thursday','Friday', 'Saturday']).add_yaxis("", [19574,15819,14125,13825,20841,17272,20552]).set_global_opts(title_opts=opts.TitleOpts(title="Bar-星期聊天情况")))return c
bar_base().render("bar-week.html")
bar_base().render_notebook()
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
15819 14125 13825 20841 17272 20552 19574

热衷于在星期4聊天

day

参考Github
获取Github日历颜色:

色表:

#ebedf0
#c6e48b
#7bc96f
#239a3b
#196127
import datetime
from pyecharts import options as opts
from pyecharts.charts import Calendardef calendar_base() -> Calendar:#起止时间begin = datetime.date(2018, 1, 1)end = datetime.date(2018, 12, 31)#颜色和数据calendar_color=["#ebedf0","#c6e48b","#7bc96f","#239a3b","#196127"]calendar_data = [[df.groupby("date").size().index[i],list(df.groupby("date").size())[i]]for i in range(len(df.groupby("date").size()))]data = daily_datac = (Calendar(init_opts = opts.InitOpts(width = "1200px",height = "500px")).add("", data, calendar_opts=opts.CalendarOpts(range_=[begin,end]))#全局配置项.set_global_opts(#画幅配置,必须大,不然显示不全#init_opts = opts.InitOpts(),#标题配置title_opts=opts.TitleOpts(title="Calendar-2018年聊天记录情况"),#视觉映射配置visualmap_opts=opts.VisualMapOpts(max_=1200,min_=0,orient="horizontal",pos_top="middle",pos_left="center",is_piecewise=True,pieces = [{"min": 1000,"color":color[4]},{"min": 600, "max": 1000,"color":color[3]},{"min": 300, "max": 600,"color":color[2]},{"min": 100, "max": 300,"color":color[1]},{"max": 100,"color":color[0]}]),))return c
c.render("calendar.png")
c.render("calendar.html")
c.render_notebook()

聊的最多的一天,2018-07-08,1522条消息=253条/人=3篇高考作文/人

hour

from pyecharts import options as opts
from pyecharts.charts import Barhour_data_list = list(df.groupby("hour")["text"].size())#获取每个小时段的聊天记录数量
hour_data_list.insert(5,0)#凌晨5点无记录def bar_base() -> Bar:c = (Bar().add_xaxis([i for i in range(24)]).add_yaxis("", hour_data_list).set_global_opts(title_opts=opts.TitleOpts(title="Bar-时段聊天情况")))return c
bar_base().render("bar-hour.html")
bar_base().render_notebook()


热衷于中午11-13点;晚上21-23点聊天(饭点睡点吹牛逼嗷

#我是今夜熬到最晚的王#

2018-08-02 02:03:05 在DNF下线后,蓝鸡和摇摆哥讨论海豹打团微信小程序

2018-12-05 02:27:09 二大爷因为没电放弃了肖秀荣视频的下载并说了句“吔屎啦!梁非凡!”

2018-09-07 02:41:44 摇摆哥在肚皮痛醒了之后喝了一杯热水睡下并说了句“nice”

2018-12-03 03:28:33 二大爷丝毫不接上下文,发了张图片

2018-12-07 03:47:50 二大爷丝毫不接上下文,又发了张图片

2018-07-07 03:59:09 估计失眠,蓝鸡发了句“哭了”

2018-02-12 04:58:36 二大爷因为头疼醒来

2018年QQ群聊天记录分析及可视化——时间线相关推荐

  1. 【Python】QQ群聊天记录提取

    [Python]QQ群聊天记录提取 没想到我的第一篇CSDN竟然是格式化QQ群聊天记录,反正就是要分析一些东西,导出的QQ群聊记录就很不方便,所以进行一下标准化处理,处理好是下面这样的. 下面就直接贴 ...

  2. Nonebot QQ机器人插件九:qq群聊天记录词云图

    QQ机器人插件九:qq群聊天记录词云图 1. 将实时聊天记录保存到数据库 安装数据库可自行到网上查找,本文仅使用mysql数据库为例.linux下mysql数据库安装可参考(59条消息) Linux安 ...

  3. 一梦江湖费六年——QQ群聊天分析

    本文结构: 一.那些年我们加过的QQ群 二.数据读入和整理(一)--来自蓝翔的挖掘机 二.数据读入和整理(二)--你不知道的事 三.聊天宏观(1)--寤寐思服 三.聊天宏观(2)日月篇 三.聊天宏观( ...

  4. 让QQ群聊天记录自动保存到群空间中(转)

    让QQ群聊天记录自动保存到群空间中(转) 笔者经常在不同的电脑登录QQ,所以经常出现群消息丢失的烦恼.现在可以把聊天记录保存到群空间里,就不麻烦了. 笔者加入了多个作者.编辑交流QQ群,在QQ群里共同 ...

  5. Python uiautomation使用---自动获取QQ群聊天记录

    使用uiautomation获取qq群聊天记录,后续可以拓展到消息自动回复.本章只简单介绍自动获取聊天记录,代码如下: import uiautomation as auto from time im ...

  6. 使用 R 语言挖掘 QQ 群聊天记录

    1.获取数据 从 QQ 消息管理器中导出消息记录,保存的文本类型选择 txt 文件.这里获取的是某群从 2016-04-18 到 2016-05-07 期间的聊天记录,记录样本如下所示. 消息记录(此 ...

  7. QQ群聊天记录分析器

    前几天闲来无聊,想清理一下自己建的一个QQ群.有些人长期不发言,着实无奈.突然想起来QQ导出的聊天记录有一定的格式,就试着用JAVA写了个小程序去分析.没想到几行代码就搞定了. 分析出来的效果和设想的 ...

  8. 用Python掌握QQ群聊天记录数据分析

    当你打开QQ群时,你是否想过如何用Python提取里面的数据呢?随着社交媒体的兴起,QQ群成为了人们交流的重要平台,而提取这些数据可以帮助我们了解用户喜好和行为.那么,如何使用Python提取QQ群数 ...

  9. 特定用户QQ群聊天记录导出的实现

    一.把QQ群的聊天记录txt格式导出 消息管理器 -> 选择要导出的群 -> 右击.导出 这里要注意 : 导出之后的 文本是 unicode 编码的,需要转换 ==|| 之前不知道,搞了大 ...

最新文章

  1. FD.io/VPP — VPP 的配置与运行
  2. ArcGIS 10.2 三维分析工具箱部分工具不能用
  3. python怎么变成竖行_python 处理文本 列变成行
  4. Spring是如何校验XML的
  5. mysql的高阶用法_MySQL的经典用法(十四)-高级优化
  6. maven添加本地包命令mvn install:install-file
  7. zynq文档阅读pg144-axi-gpio之AXI GPIO IP核
  8. session的基本原理
  9. linux 组态软件,基于嵌入式Linux的组态软件实时数据库的设计
  10. 【VRP问题】基于模拟退火算法改进狼群算法求解带时间窗的车辆路径VRPTW问题附matlab代码
  11. 守望先锋外挂(OWG)透视原理分析
  12. android接入华为推送
  13. 阿里云后台部署全过程-6-HTTPS原理及配置
  14. 数据结构实战-死磕王争
  15. Redis在京东到家的订单中的使用
  16. MSVC C/C++编译器选项 cl命令参数
  17. 2021为什么那么多人都在做亚马逊测评?2022年还能做吗?
  18. VS Code 使用火狐 FireFox 调试网页
  19. Few-NERD:小样本实体识别
  20. IOS开发之——硬件开发-蓝牙(07)

热门文章

  1. STM32的系统嘀嗒定时器(SysTick)实现简单计时功能
  2. wpf怎么让Textbox只能输入数字?
  3. html css表格透明度,【总结】CSS透明度大汇总_html/css_WEB-ITnose
  4. DOTween插件学习笔记
  5. python合并excel表数据_23.python之excel多表合并
  6. Final互评------《弹球学成语》---- 杨老师粉丝群
  7. 机器人上单神装_LOL无敌神钩机器人出装解析 钩到你怀疑人生
  8. Multisim验证性实验——两级阻容耦合放大器实验
  9. 重要统计公式及概率分布图
  10. 来自 LOL 营运商劲舞娱乐对于北捷事件的声明稿