日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python可视化文本分析(1)—分析QQ班群聊天记录宏观

發布時間:2025/3/20 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python可视化文本分析(1)—分析QQ班群聊天记录宏观 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

公眾號文章鏈接

  • 前一段時間就想做簡單的可視化文本分析玩,今天就花點時間先對整體班級的QQ群聊天信息做一個簡單的分析。
  • 打算分兩步做,本文是最簡單的第一步過程
    • 1:分析整個聊天記錄的時間分配。并且用matplotlib展示出來。并把整個聊天的關鍵詞做成詞云。
    • 2:融入snownlp情感分析,分析每個同學的詞云分布,每個同學的發言次數情況,以及每個同學文本的情緒走勢以及展示。 等等
    • 總的來說就是先試試水,然后再做第二個。用到的庫有:jieba分詞,wordcloud詞云,numpy數組,matplotlib可視化,snownlp(第二個),re正則(很重要)。這些用不到深入的東西,只用到很簡單的一小部分,都可以直接 pip install xxx。
  • 言歸正傳,下面說一下我的學習歷程:
  • 首先,第一步就是導出群聊消息,再qq的資源管理器上選擇群可以導出群消息記錄成txt文本。
  • 要觀察聊天記錄的規則,了解文本結構。能夠解析下列方框標注的內容很重要。

    這部分主要的文本格式為:
  • 2018-05-05 15:55:40 2班某某(1315426911) 2018-05-07 13:48:39 2XXX<xxxx@qq.com>
  • 下一步就需要正則匹配獲取相應的內容。 這個地方的正則匹配規則也很簡單,因為格式固定. 但是我要分配各個聊天的時間,那么就要匹配"15:55:40"這段話,可以重寫一個正則或者在原來的正則上添加,我選擇重寫正則,對于正則取值前端時間簡單寫過取值兩個正則表達式為:
  • pattern=re.compile(r'(\d*)-(\d*)-(\d*) .* .*')#匹配 信息 pattern2=re.compile(r'(\d+):(\d+):\d+')#匹配 15:55:40
  • 既然能取到上一步驟人說的話,那么我們在下一步就需要對數據去噪。那些數據會對結果有影響但是我們不需要的,這里大致列了幾個(要注意的是文本換行符/n,每行無論是什么都有一個換行符):
    • 空格消息
    • 紅包
    • 表情
    • 撤回的消息
    • 圖片
    • @全體成員
    • 個別群復讀機嚴重適當處理
    • 其他
  • 這樣每次按行讀取,添加對應的次數和文本內容和水群次數。
  • 制作聊天時間分布圖。使用matplotlib展示坐標的一些坑點已經解決。保存圖片到本地。
  • 將各個文本合并生成班級主題詞云。保存圖片到本地。
  • 觀察詞云的詞是否有不該出現的詞語,分析原因對數據進行二次去噪。我當時就是因為第一次寫的正則沒有匹配"2018-05-07 13:48:39 2班xxxxxxx@qq.com"導致詞云出現一個同學的名字。。后來把正則改了就決絕了。你也可能會遇到特殊情況需要經常@某個人,,你可以自行處理。
  • 代碼開箱可用,你需要把你的文件名替換正確的路徑,還有要在同級目錄下創建img文件夾保存生成的兩張圖片。各種依賴環境很簡單,直接pip install xxx。
    附上核心代碼:

    import re import numpy as np import matplotlib.pyplot as plt ##繪圖庫 from wordcloud import WordCloud import jieba.analyse string="2018-05-05 15:55:40 2班某某(1315426911)" pattern=re.compile(r'(\d*)-(\d*)-(\d*) .* .*') #匹配 2018-05-05 15:55:40 2班某某(1315426911) 有一個坑點就是2018-05-07 13:48:39 2XXX<xxxx@qq.com>這種格式 pattern2=re.compile(r'(\d+):(\d+):\d+')#匹配 15:55:40 #pattern3=re.compile(r'(\()(.*?)(\))')#匹配 2班某某(1315426911)相關內容 f = open('E:/text.txt', 'r', encoding='utf-8') # 要進行分詞處理的文本文件 (統統按照utf8文件去處理,省得麻煩) lines = f.readlines() index=0 def getpicture(y):#matplotlib繪圖x=[]for i in range(0,24):x.append(str(i)+':00-'+str(i+1)+':00')Xi = np.array(x)Yi = np.array(y)plt.rcParams['font.sans-serif'] = ['SimHei'] # 用來正常顯示中文標簽plt.figure(figsize=(8, 6)) ##指定圖像比例: 8:6plt.subplots_adjust(bottom=0.2)plt.scatter(Xi, Yi, color="red", label="times")plt.xlabel("時間00:00—24:00")plt.ylabel("發言次數/次")plt.xticks(range(0,24),rotation=75,fontsize=10)#設置橫坐標顯示24次。plt.yticks(range(0,1000,50))# plt.legend(loc='lower right') # 繪制圖例# plt.show()plt.savefig("img/hour.png",format='png')plt.close() def getciyun(value):text=''for i in range(0,24):text+=str(value[i]['text'])args=jieba.analyse.extract_tags(text,topK=80)text=' '.join(args)wc = WordCloud(background_color="white",width=1500, height=1000,min_font_size=40,font_path="simhei.ttf",# max_font_size=300, # 設置字體最大值random_state=40, # 設置有多少種隨機生成狀態,即有多少種配色方案) # 字體這里有個坑,一定要設這個參數。否則會顯示一堆小方框wc.font_path="simhei.ttf" # 黑體# wc.font_path="simhei.ttf"my_wordcloud = wc.generate(text)plt.imshow(my_wordcloud)plt.axis("off")plt.show()wc.to_file('img/wordcloud.png') def analysebyhour(lines):value=[]y=[]index=0for i in range(0,24):value.append({})value[i]['time']=0value[i]['text']=''for line in lines:if line != "\n" and line.strip() != "\n" and line != None and not line.__contains__("撤回了"):line = line.replace("[表情]", " ").replace("@全體成員", " ").replace("[表情]", " ").\replace("[QQ紅包]我發了一個“專享紅包”,請使用新版手機QQ查收紅。", "").replace("\n", " ").replace("[圖片]",'')if(pattern.search(line)):#匹配到正確的對象date=pattern.search(line)hour=pattern2.search(line).group(1)#print(date.group(0),hour)value[int(hour)]['time']+=1index=hourelse:print(line)value[int(index)]['text']+=str(line)for i in range(0,24):print('time:',i,'time',value[i]['time'])y.append(value[i]['time'])getpicture(y)getciyun(value) analysebyhour(lines)

    然后兩張圖片就出來了:

    • 第一個點狀圖可以發現我們的聊天時間11:00-12:00突出,17:00-18:00突出,因為這個時間我們沒有課程在吃飯或者玩,有時候下午或者晚上或者其他的安排或者考試啥的可能會討論。而13:00-14:00這個點我們大部分在午休一般沒人聊天。但是醒了之后就會一直很活躍?。
    • 第二個詞云可以看的出我們最近在聊啥,因為我的記錄是5月十幾才開始,記錄不足,準備找一份記錄足的做下一個研究。你可能通過詞云發現我的其實還有挺大的不足就是QQ小冰沒有過濾掉。希望如果讀者有興趣嘗試可以處理一下。

    通過這些簡單的文本分析感覺很有趣,有興趣等有時間把第二種也做出來,那種可能做起來比較麻煩一些。但是難道還是不大的。這些東西看似高深,其實了解api做起來很簡單。

    希望一起加油。

    • 如果對后端、爬蟲、數據結構算法等感性趣歡迎關注我的個人公眾號交流:bigsai

    總結

    以上是生活随笔為你收集整理的python可视化文本分析(1)—分析QQ班群聊天记录宏观的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。