上午两节课睡过了,就没去了,吃了个早饭,还有一堆事情没有做,就开始先把昨晚没弄完的python词频分析的代码给写完了。做一个记录吧,防止以后用得着

工具

工具:python3.7 Vscode wordcloud jieba 等

获取数据源

点击Tim左上角头像

2.png 1.png

要用txt导出到任意盘,接下来就是要对导出的文件进行数据分析

下载对应库

到官方网站下载对应包 传送门 重要提醒:通过cmd中输入 Python -V 来查看python版本并下载相应的安装包,同时注意python是32位的还是64位的,我这里是32位的 下载完成后,进入刚刚下载该文件的路径,使用pip3 install wordcloud-1.3.3-cp-37-cp-37-win_amd32-whl命令开始安装, 这样 wordcloud就安装完成了。 接下来还要安装jieba matplotlib scipy 均使用 pip3 install xxx 即可

代码

  1. 首先过滤掉txt文件中无用的信息,比如时间,以及聊天的名片,避免词云中都是无效信息,并用jieba进行分词
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import jieba
 
newtext = []
# 打开E盘下的聊天记录文件qq.txt
for word in open('E:\\qq.txt', 'r', encoding='utf-8'):
    tmp = word[0:4]
    if (tmp == "2017" or tmp == "===="or tmp == "2018"):  # 过滤掉聊天记录的时间和qq名称
        continue
    tmp = word[0:2]
    if (tmp[0] == '[' or tmp[0] == '/'or tmp[0] == '@'):  # 过滤掉图片和表情,例如[图片],/滑稽
        continue
    newtext.append(word)
# 将过滤掉图片和表情和时间信息和qq名称剩下的文字重新写入E盘下的q1.txt文件中去
with open('E:\\q1.txt', 'w', encoding='utf-8') as f:
    for i in newtext:
        f.write(i)
 # 打开新生成的聊天记录文件
text = open('E:\\q1.txt', 'r', encoding='utf-8').read()
word_jieba = jieba.cut(text, cut_all=True)
word_split = " ".join(word_jieba)

通过这步在E盘中得到了一个q1.txt文件,打开会发现变的整洁干净了许多.

2.再新建一个.py文件,用到wordcloud库来绘制词云图

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
from wordcloud import WordCloud,STOPWORDS,ImageColorGenerator
import matplotlib.pyplot as plt
from scipy.misc import imread
 
 
text = open('E:\\q1.txt', 'r', encoding='utf-8').read()  # 打开过滤好的txt文件
print(text)
bg_pic = imread('E:\\sjt.jpg')     # 导入词云背景
wordcloud = WordCloud(mask=bg_pic, background_color='white', scale=1.5, font_path='C:/Windows/Fonts/simhei.ttf', width=1000,height=600,stopwords={'表情','糊脸','拍桌','拍头'},min_font_size=10,max_font_size=36,font_step=4,
).generate(text)    # 定义词云的各种变量,可以控制词云的形式,这里的控制变量可以去网上查找,stopwords={'表情','糊脸','拍桌','拍头''是为了过滤掉里面的部分表情信息
image_colors = ImageColorGenerator(bg_pic)
plt.imshow(wordcloud)
plt.axis('off')
plt.show()
wordcloud.to_file('E:\\text.jpg')   # 输出词云

做出的结果图

安工程失物招领群1词频分析.png 失物招领交流群词频分析.png 第三届千寻失物招领群词云分析.png 校园淘淘旧词频分析.png 异步读者群词频分析.png

挺好玩的,就多测试了几个群,就这样

对词频出现次数进行统计,并生成统计表

直接上代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import jieba
 
fr=open('q1.txt','r',encoding='utf-8')   //打开上面经过分词后的txt文件
 
s=""
data={}
for line in fr:
    line=line.strip()
    if len(line)==0:
        continue
    if line[0]=='2':
        continue
    for x in range(0,len(line)):
        if line[x] in [' ','\t','\n','。',',','[', ']', '(', ')', ':', '-',
'?', '!', '《', '》', '、', ';', '“', '”', '……','0','1','2','3','4','5','6','7','8','9','=','~','…']: //去除一些不希望被统计的东西
            continue
        s+=str(line[x])
print(s)
 
seg_list = jieba.cut(s, cut_all=False, HMM=True)
for word in seg_list:
    if len(word)>=2:
        if not data.__contains__(word):
            data[word]=0
        data[word]+=1
    
data=sorted(data.items(),key=lambda d:d[1],reverse=True)
 
fw=open('安工程失物招领群1词频统计.csv','w',encoding='utf-8')     //生成词频统计表
fw.write(str(len(data))+'\n')
for item in data:
    fw.write(item[0]+','+str(item[1])+'\n')
fr.close()
fw.close()

这段代码结合上面分词的代码,即可生成统计表,近期来群里关键字出现的字眼一目了然 失物招领群1词频统计.png 失物招领群1词频统计 谢谢的次数即代表我们一个月发过的消息总数,因为我们要求每条消息后面必须加个谢谢 由图可见,我们一个月发了1910条消息 其中校园卡类876条 寻物消息585条 失物消息526条 身份证消息41条 等等