之前,写了这篇文章,用python提取全部群成员的发言时间,并简单做了下分析。先补充一下,针对特定单个群成员(这里以  小小白   为例)消息记录的获取。

代码比较简单,主要是正则表达式的书写。(附:聊天文件记录的导出请参考上面提到的文章)

    代码如下:

#//
#从QQ聊天数据导出特定人发言的日期时间和发言内容 import re
import xlsxwriter # 小小白 这里代指你要获取数据的对象的昵称
# 方便起见,见数据导出的文件名也明明为此
workbook = xlsxwriter.Workbook('小小白.xlsx')
worksheet = workbook.add_worksheet()
worksheet.set_column('A:A', )
worksheet.set_column('B:B', )
worksheet.set_column('C:C', ) with open('高等数学.txt',encoding='utf-8') as f:
s = f.read()
# 正则,跨行匹配
pa = re.compile(r'^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}) 小小白\(小小白的QQ号\)\n(.*?)\n$',re.DOTALL+re.MULTILINE)
ma = re.findall(pa,s)
# print(len(ma))
for i in range(len(ma)):
# print(ma[i][])
date = ma[i][]
time = ma[i][]
word = ma[i][] worksheet.write(int(i),,date)
worksheet.write(int(i),,time)
worksheet.write(int(i),,word) workbook.close()
print("处理完毕,快去看看文件夹下面新建的.xlsx文件吧")

  ###########2016/10/18补更###############

  小岛台风,待在宿舍无聊,就优化了之前分析QQ聊天记录的代码,综合上文和之前写的那篇文章,做了个私人订制。实现从聊天记录对特定人的发言信息进行提取,并用matplotlib作图,终于不想用excel...

  代码比较简单,核心的提取都和之前的一样,这里直接贴出来:

import re
import matplotlib.pyplot as plt # 解决matplotlib显示中文的问题
import matplotlib as mpl
mpl.rcParams["font.sans-serif"] = ["Microsoft YaHei"]
mpl.rcParams['axes.unicode_minus'] = False # 获取24个时间段----->periods
# 用于之后时间的分段
def get_periods():
periods = []
for i in range(0,24):
# 这里的判断用于将类似的‘8’ 转化为 ‘08’ 便于和导出数据匹配
if i < 10:
i = '0'+str(i)
else:
i = str(i)
periods.append(i)
return periods '''
对QQ群而言的时间提取 # 获取聊天文件的“小时”数据
def get_times(filename):
with open(filename, encoding='utf-8') as f:
data = f.read()
# 例如20:50:52,要匹配其中的20
pa = re.compile(r"(\d\d):\d\d:\d\d")
times = re.findall(pa, data) return times
''' # 对每一个时间段进行计数
def classification(times,period):
num = 0
for time in times:
if time == period:
num += 1
period_time.append([period,num])
# print(period, '--->', num) # 作图 def plot_time(period_time,name):
time = []
num = []
for i in period_time:
time.append(i[0])
num.append(i[1])
time = time[6:24]+time[0:6]
num = num[6:24]+num[0:6]
# print(time,'\n',num)
labels = time
x = [i for i in range(0,24)]
plt.plot(num, 'g')
num_max = max(num)
plt.xticks(x,labels)
plt.axis([00, 24, 0, num_max*(1.2)])
plt.grid(True)
plt.title(name)
plt.ylabel('发言量')
plt.xlabel('时间')
plt.show() def get_person_data(filename,name,qqnumber):
person_data = {'date':[],'time':[],'word':[]}
with open(filename,encoding='utf-8') as f:
s = f.read()
# 正则,跨行匹配
pa = re.compile(r'^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}) '+name+r'\('+qqnumber+'\)\n(.*?)\n$',re.DOTALL+re.MULTILINE)
ma = re.findall(pa,s)
# print(len(ma))
for i in range(len(ma)):
# print(ma[i][0])
date = ma[i][0]
time = ma[i][1]
word = ma[i][2]
person_data['date'].append(date)
person_data['time'].append(time[0:2])
person_data['word'].append(word)
return person_data if __name__=="__main__":
filename = input('请输入聊天记录文件名:')
name = input('准备提取个人信息就绪,请输入要提取人的群名片:')
qqnumber = input('请输入要提取人的QQ号:')
period_time = []
person_data = get_person_data(filename,name,qqnumber)
times = person_data['time'] periods = get_periods()
for period in periods:
classification(times,period)
plot_time(period_time,name)
# print(person_data['word'])

  关于matplotlib作图指定坐标标签的,看这里

  运行结果如下:

用python做些有意思的事——分析QQ聊天记录——私人订制的更多相关文章

  1. 用python做些有意思的事——分析QQ聊天记录

    ####################################### 已更新续集,戳这里. ######################################## 是这样的,有位学 ...

  2. 使用训练好的modle,做些有用的事(各层数据可视化)

    ---恢复内容开始--- 1. 加载必要的库: 2. 设置当前目录,判断模型是否训练好: 3. 利用提前训练好的模型,设置测试网络: 4. 加载测试图片,并显示: 5. 编写一个函数,将二进制的均值转 ...

  3. 安装 Kali Linux 后需要做的 20 件事

    安装 Kali Linux 后需要做的 20 件事 本文含有我觉得有用的每一件事情.本文分为三大部分: 专门针对Kali用户 Kali Linux是来自Debian的一个特殊版本,Kali Linux ...

  4. 拿Proxy可以做哪些有意思的事儿

    Proxy是什么 首先,我们要清楚,Proxy是什么意思,这个单词翻译过来,就是 代理.可以理解为,有一个很火的明星,开通了一个微博账号,这个账号非常活跃,回复粉丝.到处点赞之类的,但可能并不是真的由 ...

  5. spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情

    <spring扩展点之三:Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法,在spring启动后做些事情> <服务网关zu ...

  6. JavaScript的Proxy可以做哪些有意思的事儿

    摘要: 神奇而有趣的Proxy. 原文:拿Proxy可以做哪些有意思的事儿 作者:贾顺名 Fundebug经授权转载,版权归原作者所有. Proxy是什么 首先,我们要清楚,Proxy是什么意思,这个 ...

  7. 【转】用Python做股市量化策略投资数据分析

    金融量化分析介绍     本文摘要; 金融量化分析介绍 1.什么是金融量化分析 2.金融量化分析可以干什么 3.为什么将python运用于金融 4.常用库简介 1.什么是金融量化分析 从标题中我们可以 ...

  8. 曹工说Redis源码(7)-- redis server 的周期执行任务,到底要做些啥

    文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...

  9. 我用Python做了一个咖啡馆数据分析

    在做案例前,我还想回答大家一个疑问,就是excel做数据分析可以实现Python一样的效果,那用Python的意义在哪呢? 经过这段时间学习理解,我的回答是: (https://jq.qq.com/? ...

随机推荐

  1. 1029c语言文法2理解

    program → external_declaration | program external_declaration <程序>→ <外部声明>|<程序>< ...

  2. WMI远程访问问题解决方法

    WMI 全称为:Microsoft Windows Management Instrumentation (WMI)  按微软的介绍大致如下:      WMI 是 Microsoft 主要的针对 W ...

  3. openCV1

    openCV是一个提供有C++ , android , python的开源图像处理的类库 中文论坛的网址是http://www.opencv.org.cn/forum.php?mod=forumdis ...

  4. ARM中的总线

    ARM中的总线用于不同部件之间的通信.有两种不同类型的设备连接到总线:ARM处理器,它是总线的主设备,拥有对总线的仲裁权,可以通过同一总线主动发起数据传输请求:外围器件,是总线的从设备,在总线上是被动 ...

  5. LDM和STM指令

    LDM批量加载/STM批量存储指令可以实现一组寄存器和一块连续的内存单元之间传输数据. 允许一条指令传送16个寄存器的任意子集和所有寄存器,指令格式如下: LDM{cond}  mode  Rn{!} ...

  6. 为 Node.js 开发者准备的 8 本免费在线电子书(转)

    ode.js 是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设你是在POSIX环境下运行它 Linux 或 Mac OS X.如果你 ...

  7. H5网页动画制作(页面切换、效果等)

    网址 http://www.ih5.cn/#mine/home/194080 13482289820 视频教程 http://file.ih5.cn/?nid=713629&key=aef10 ...

  8. hibernate generator class=xxx id详解

    <id>元素中的<generator>用来为该持久化类的实例生成唯一的标识,hibernate提供了很多内置的实现.Increment:由hibernate自动递增生成标识符, ...

  9. regsvr32 注册.dll的用法

    Regsvr 32命令是Windows中控件文件(如扩展名为DLL.OCX.CPL的文件)的注册和反注册工具. 命令格式 Regsvr32 [/s] [/n] [/i[:cmdline]] dllna ...

  10. 百度上传android包:应用名解析失败!

    manifest 里面<application增加android:label="@string/app_name"