1. 程式人生 > >統計QQ聊天記錄進階版(分詞+統計關鍵字出現的次數+根據詞頻製作詞雲)

統計QQ聊天記錄進階版(分詞+統計關鍵字出現的次數+根據詞頻製作詞雲)

繼上個部落格統計關鍵字次數的進階,將關鍵詞的次數製作成詞雲儲存到圖片。之前說過的部分現在就不說了,這裡主要講根據詞頻製作詞雲。

1.安裝wordcloud(這裡要注意坑)

這個安裝的過程比jieba複雜,因為直接用pip install wordcloud會安裝失敗,要先下載對應的python版本對應的wordcloud。這裡因為我之前有單獨裝過python3.7所以第一次我是下載了python3.7對應的wordcloud,然後它提示平臺不支援。後來我想起來我的Anaconda3用的不是python3.7,在Anaconda Navigator中檢視python對應的版本為3.6下載如下


用pip install安裝

2.檔案配置

1.txt為聊天記錄檔案,SimHei.ttf為字型格式、r.jpg為圖片樣式


3.詞雲

詞雲的生成可以按照詞頻以及以通常的方式生成。

詞頻使用 .generate_from_frequencies(字典型別)

通常方法使用.generate(關鍵字字串)

可以設定詞雲的相關屬性:

font_path : string //字型路徑,需要展現什麼字型就把該字型路徑+字尾名寫上,如:font_path = '黑體.ttf'
width : int (default=400) //輸出的畫布寬度,預設為400畫素
height : int (default=200) //輸出的畫布高度,預設為200畫素
prefer_horizontal : float (default=0.90) //詞語水平方向排版出現的頻率,預設 0.9 (所以詞語垂直方向排版出現頻率為 0.1 )
mask : nd-array or None (default=None) //如果引數為空,則使用二維遮罩繪製詞雲。如果 mask 非空,設定的寬高值將被忽略,遮罩形狀被 mask 取代。除全白(#FFFFFF)的部分將不會繪製,其餘部分會用於繪製詞雲。如:bg_pic = imread('讀取一張圖片.png'),背景圖片的畫布一定要設定為白色(#FFFFFF),然後顯示的形狀為不是白色的其他顏色。可以用ps工具將自己要顯示的形狀複製到一個純白色的畫布上再儲存,就ok了。
scale : float (default=1) //按照比例進行放大畫布,如設定為1.5,則長和寬都是原來畫布的1.5倍。
min_font_size : int (default=4) //顯示的最小的字型大小
font_step : int (default=1) //字型步長,如果步長大於1,會加快運算但是可能導致結果出現較大的誤差。
max_words : number (default=200) //要顯示的詞的最大個數
stopwords : set of strings or None //設定需要遮蔽的詞,如果為空,則使用內建的STOPWORDS
background_color : color value (default=”black”) //背景顏色,如background_color='white',背景顏色為白色。
max_font_size : int or None (default=None) //顯示的最大的字型大小
mode : string (default=”RGB”) //當引數為“RGBA”並且background_color不為空時,背景為透明。
relative_scaling : float (default=.5) //詞頻和字型大小的關聯性
color_func : callable, default=None //生成新顏色的函式,如果為空,則使用 self.color_func
regexp : string or None (optional) //使用正則表示式分隔輸入的文字
collocations : bool, default=True //是否包括兩個詞的搭配
colormap : string or matplotlib colormap, default=”viridis” //給每個單詞隨機分配顏色,若指定color_func,則忽略該方法。
fit_words(frequencies)  //根據詞頻生成詞雲
generate(text)  //根據文字生成詞雲
generate_from_frequencies(frequencies[, ...])   //根據詞頻生成詞雲
generate_from_text(text)    //根據文字生成詞雲
process_text(text)  //將長文字分詞並去除遮蔽詞(此處指英語,中文分詞還是需要自己用別的庫先行實現,使用上面的 fit_words(frequencies) )
recolor([random_state, color_func, colormap])   //對現有輸出重新著色。重新上色會比重新生成整個詞雲快很多。
to_array()  //轉化為 numpy array

to_file(filename)   //輸出到檔案

my_wordcloud = WordCloud(  
        background_color='white',  #設定背景顏色
        max_words=200,  #設定最大實現的字數
        font_path=r'SimHei.ttf',  #設定字型格式,如不設定顯示不了中文
        mask=imread('timg.jpg'),  #設定圖片樣式
        width=800,
        height=800,
    ).generate_from_frequencies(data)
    plt.figure()
    plt.imshow(my_wordcloud)
    plt.axis('off')
    plt.show()  # 展示詞雲
    my_wordcloud.to_file('z.jpg')

4.完整程式碼

import jieba
from wordcloud import WordCloud
from scipy.misc import imread
from collections import Counter
import matplotlib.pyplot as plt

def main():
    fr=open('1.txt','r',encoding='utf-8')
    
    frequencies=[]  
    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])

    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) 這裡必須要註釋,不然會報錯
    #print(data) 
   
    my_wordcloud = WordCloud(  
        background_color='white',  #設定背景顏色
        max_words=200,  #設定最大實現的字數
        font_path=r'SimHei.ttf',  #設定字型格式,如不設定顯示不了中文
        mask=imread('r.jpg'),  #設定圖片樣式
        width=800,
        height=800,
    ).generate_from_frequencies(data)
    plt.figure()
    plt.imshow(my_wordcloud)
    plt.axis('off')
    plt.show()  # 展示詞雲
    my_wordcloud.to_file('z.jpg')
    fr.close()
  
  
main()

5.實現結果

類似的統計十九大關鍵字 已上傳github ,用jupyter Notebook

效果圖:


相關推薦

統計QQ聊天記錄+統計關鍵字出現次數+根據詞頻製作

繼上個部落格統計關鍵字次數的進階,將關鍵詞的次數製作成詞雲儲存到圖片。之前說過的部分現在就不說了,這裡主要講根據詞頻製作詞雲。1.安裝wordcloud(這裡要注意坑)這個安裝的過程比jieba複雜,因為直接用pip install wordcloud會安裝失敗,要先下載對應

[html之rem]手機端頁面自適應解決方案—rem佈局附原始碼示例

手機端頁面自適應解決方案—rem佈局進階版(附原始碼示例) 一年前筆者寫了一篇 《手機端頁面自適應解決方案—rem佈局》,意外受到很多朋友的關注和喜歡。但隨著時間的推移,該方案已然過時,故為大家介紹一個目前我極力推薦使用的,更加完美的方案——rem佈局(進階版) 另

手機端頁面自適應解決方案—rem佈局附原始碼示例

但隨著時間的推移,該方案已然過時,故為大家介紹一個目前我極力推薦使用的,更加完美的方案——rem佈局(進階版) 地址:http://www.jianshu.com/p/985d26b40199點選開啟連結 該方案使用相當簡單,把下面這段已壓縮過的 原生JS(原始碼

SQL Server調優系列深入剖析統計資訊

前言 經過前幾篇的分析,其實大體已經初窺到SQL Server統計資訊的重要性了,所以本篇就要祭出這個神器了。 該篇內容會很長,坐好板凳,瓜子零食之類... 不廢話,進正題 技術準備 資料庫版本為SQL Server2008R2,利用微軟的以前的案例庫(Northwind)進行分析,部分內容也會應用

計蒜客 密碼安全性 不可重疊重複子串的個數

 可以列舉子串公共字首長度進行求解 #include<stdio.h> #include<algorithm> #include<cstring> #include<iostream> const int MAXN =

MMM架構實現MySQL高可用讀寫分離,包含Amoeba

meid _id status mysqld 服務無法啟動 flush 忽略 kit pri 前兩天逛博客偶然發現了某大神寫的關於MMM的文章,看完就迫不及待的自己試了一下,大神寫的很順暢,以為自己也能操作的很順暢,但是實際情況是手腳太不麻利,碰到很多坑,如果大神的

劍指offer——3斐波那契數列&&跳臺階&&瘋狂跳臺階&&矩形覆蓋

 這兩道題 其實相同。 public class Solution { /* 一看到題目就想到用遞迴,結果雖然能通過,但時間還是太長 */ public int Fibonacci(int target) { return hhh(ta

複雜度分析

本文是學習演算法的筆記,《資料結構與演算法之美》,極客時間的課程 上篇文章說了時間複雜度的問題,這篇文章主要說幾個概念 最好情況時間複雜度 (best case time complexity) 最壞情況時間複雜度(worst case time complexity) 平均情況時間複雜

Java多執行緒知識點總結—— 之 等待喚醒機制 Lock 鎖升級

JDK1.5 中提供了多執行緒升級解決方案。 將同步 Synchronized 替換成現實 Lock 操作。 將Object中的 wait、notify、notifyAll,替換成了C

Android懸浮窗-上篇思路篇

單位的APP想新增懸浮窗,去網上搜索了一圈。 發現能找到的程式碼,效果都實現了,但使用者體驗並不好。 那麼,最終生產的懸浮窗應該是什麼樣的呢? 拖拽懸浮窗,需要判斷拖拽距離後才會產生拖拽效果。 根據懸浮窗在手機螢幕的位置,自動判斷靠邊。

常見面試之機器學習演算法思想簡單梳理

//2015年5月1日 //參考http://blog.jobbole.com/74438/ 實際上在面試過程中,懂這些演算法的基本思想和大概流程是遠遠不夠的,那些面試官往往問的都是一些公司內部業務中的課題,往往要求你不僅要懂得這些演算法的理論過程,而且要非常熟悉怎樣使用

FFmpeg學習筆記-YUV以H264或H265編碼最後打包TS流過程

在學習了FFmpeg後,才發現其中美妙,之前發一個yuv轉ts的初學版,現在看看感覺不堪回首。所以一直在思考能不能直接用命令就完成整個過程。在請教大神後得出了命令。 YUV420_8bit->H264 還可以在引數中設定編碼位元速率。真是太舒服了。 E:\ffmp

Git常用命令區別於基礎命令的

# 常用gitlab命令1. 合併程式碼,並採用別人的版本```git merge --strategy-option=theirs <branch>```2. 合併程式碼,並採用自己的版本```git merge -s ours <branch>``

POST提交

adl .net stream lin tools charset connect tin buffer package com.jm.label.tools;import java.io.BufferedReader;import java.io.IOException;

Elasticsearch頂尖高手系列:高手最新第二

adp cli UNC 最小 matching 過濾 gate 總結 加載 課程大綱:第1節結構化搜索_IT技術論壇案例背景介紹 第2節結構化搜索_在案例中實戰使用term filter來搜索數據 第3節結構化搜索_filter執行原理深度剖析(bitset機制與c

Android自己定義組件系列【6】——實踐3

err ack XML @+ layout apk get ast edi 上一篇《Android自己定義組件系列【5】——進階實踐(2)》繼續對任老師的《可下拉的PinnedHeaderExpandableListView的實現》進行了分析,這一篇計劃中間插一段“知識點

Java學習筆記——排序算法之排序堆排序與分治並歸排序

進行 技術分享 ring http 沒有 oid 有序 重復 調整 春蠶到死絲方盡,蠟炬成灰淚始幹               ——無題 這裏介紹兩個比較難的算法: 1、堆排序 2、分治並歸排序 先說堆。 這裏請大家先自行了解完全二叉樹的數據結構。 堆是完全二叉樹。

【SSH之路】Struts + Spring + Hibernate 開端

height 一段 ioc 效率 陽光大道 面向對象的思想 text ase 們的 Long Long ago。就聽說過SSH。起初還以為是一個東東,詳細內容更是不詳,總認為高端大氣上檔次,經過學習之後才發現,不不過高大上,更是低調奢華有內涵,經過一段時間的

樹狀數組的運用Stars 數星星

p s 計算 right star http 復雜 一個 examine maps 英文原題 Problem Description Astronomers often examine star maps where stars are represented by poi

Android自己定義組件系列【5】——實踐2

col fonts tle 適配 pack tom ica void log 上一篇《Android自己定義組件系列【5】——進階實踐(1)》中對任老師的《可下拉的PinnedHeaderExpandableListView的實現》前一部分進行了實現,這一篇我們來看看Ex