微信好友信息統計-圖、詞雲和熱圖


一、背景

    上一篇文章我們講解了微信機器人,主要使用了wxpy這個庫,如果還不會登錄機器人的話可以可以快速瀏覽上一篇文章,微信聊天機器人-存儲好友分享消息。這篇文章我們繼續使用wxpy統計微信賬號好友信息。主要包括:好友信息詞雲、好友所在省份分布、城市分布、好友性別和好友地理位置熱力圖等

二、效果展示

1、好友信息:男女比例柱狀圖、好友省份餅圖、好友城市餅圖

2、好友個性簽名詞雲

3、好友所在位置熱力圖

三、wordcloud

wordcloud是生成詞雲的包,使用起來也是比較簡單

1、安裝wordcloud包

1 pip install wordcloud

2、導入詞雲包

1 from wordcloud import WordCloud, ImageColorGenerator

3、構造WordCloud對象

 1 wc = WordCloud(
 2     background_color = p_background
 3     , max_words = p_max_words #顯示最大詞數
 4     , font_path = "msyh.ttf"
 5     , min_font_size = p_min_font_size
 6     , max_font_size = p_max_font_size
 7     , width = p_width  #圖幅寬度
 8     , height = p_height
 9     , mask = cloud_mask 
10     )

4、生成詞雲結果

1 result = wc.generate(cloud_text)

5、保存詞雲結果為圖片

1 wordCloudFile = os.getcwd() + "\\wordCloud.png"
2 if os.path.exists(wordCloudFile) : 
3     os.remove(wordCloudFile)
4 result.to_file(wordCloudFile)

四、jieba

jieba是一個分詞工具,可以把已知文本串進行分詞,分詞的結果是一個列表,wordcloud正好需要這么一個列表

1、安裝jieba包

1 pip install jieba

2、導入分詞工具包

1 import jieba

3、添加建議詞組,即不被分割的詞組

1 jieba.suggest_freq(('微博'), True)

4、加載用戶自定義詞組

1 jieba.load_userdict(os.getcwd() + "\\jieba_user_dict.txt")

5、分詞

1 segs = jieba.cut(text)

五、matplotlib

matplotlib是一個python圖表包,包含各種圖表控件,本文中主要使用了餅圖和柱狀圖

1、安裝matplotlib

1 pip install matplotlib

2、導入圖表控件

1 import matplotlib.pyplot as plt

3、構造一個figure對象

1 fig = plt.figure(num = bot.self.name + u'的好友簽名詞雲', figsize=(6.5, 6))

4、添加plot

1 plt.plot()
2 plt.axis('off')
3 plt.title(bot.self.name + u"的好友個性簽名詞雲")
4 plt.imshow(result)

5、為了解決亂碼問題,需要在構造figure前設置下編碼

1 plt.rcParams['font.sans-serif'] = ['SimHei']

6、顯示

1 plt.show() 

六、pyecharts

pyecharts是熱力圖包,需要在瀏覽器中查看

1、安裝pyecharts包

1 pip install pyecharts

2、導入

1 from pyecharts import Map, Page

3、構造一個Map對象

1 friends_map = Map("微信好友全國分布圖", width = 1200, height=600)

4、添加好友省份數據

 1 friends_map.add(
 2 ""
 3 , province_dict.keys()
 4 , province_dict.values()
 5 , is_label_show = True
 6 , is_visualmap = True
 7 , maptype='china'
 8 , visual_range = [0, max(province_dict.values())]
 9 , visual_text_color = 'red'
10 , visual_range_text = ['', '']
11 , visual_range_color = ['#FFFF00', '#D6292B'] # [黃,紅]由低到高
12 )

5、渲染,會生成一個index.html文件在同目錄下,使用瀏覽器打開即可

6、如果發現地圖上沒有數據,需要下載地圖數據包

1 echarts-countries-pypkg 是全球國家地圖,echarts-china-provinces-pypkg是中國省級地圖, echarts-china-cities-pypkg是中國城市地圖
2 
3 pip install echarts-countries-pypkg
4 
5 pip install echarts-china-provinces-pypkg
6 
7 pip install echarts-china-cities-pypkg

七、關鍵步驟

1、獲取好友男女信息

 1 #獲取好友性別、省份
 2 def generateInfo():
 3     male = female = other = 0
 4     for sex, count in friends_stat["sex"].items():
 5         # 1代表MALE, 2代表FEMALE
 6         if sex == 1:
 7             male = count
 8             print ("MALE %d" % count)
 9         elif sex == 2:
10             female = count
11             print ("FEMALE %d" % count)
12         else :
13             other = count
14             print ("other %d" % count)
15 
16     total = male + female + other
17     print ("男性朋友:%.2f%%" % (float(male) / total * 100))
18     print ("女性朋友:%.2f%%" % (float(female) / total * 100))
19     print ("其他:%.2f%%" % (float(other) / total * 100))

2、好友省份

1 province_dict = {}
2 friend_privince = []
3 for province, count in friends_stat["province"].items():
4     if province != "":
5         friend_privince.append([province, count])
6         province_dict[province] = count

3、好友城市

1 friend_city = []
2 for city, count in friends_stat["city"].items():
3     if city != "":
4         friend_city.append([city, count])

4、簽名數據清洗

1 fs = bot.friends()
2 for f in fs :
3     pattern = re.compile(r'[一-龥]+')
4     filterdata = re.findall(pattern, f.signature)
5     text = text + ''.join(filterdata)

八、打包成exe時遇到的問題

1、jieba包在打包成exe,運行時可能會報找不到dict.txt文件,因此導入jieba包時執行以下代碼,並將dict.txt文件拷貝到exe目錄下

1 import jieba
2 jieba.set_dictionary(".\dict.txt")
3 jieba.initialize()

或者看源碼目錄里的log.txt文件解決方案

2、wordcloud打包時,也會遇到stopwords文件缺失,解決辦法是修改源碼

wordcloud.py文件中30行代碼修改

to :STOPWORDS = set(map(str.strip, open(os.path.join(os.path.dirname(sys.executable), 'stopwords')).readlines()))

from :STOPWORDS = set(map(str.strip, open(os.path.join(FILE, 'stopwords')).readlines()))

打包完畢,開發時需要還原

九、demo下載

需要完整源碼的可以下載:微信好友信息統計-圖、詞雲和熱圖

 

如果您覺得文章不錯,不妨給個打賞,寫作不易,感謝各位的支持。您的支持是我最大的動力,謝謝!!! 

 

  


很重要--轉載聲明

  1. 本站文章無特別說明,皆為原創,版權所有,轉載時請用鏈接的方式,給出原文出處。同時寫上原作者:朝十晚八 or Twowords
  2. 如要轉載,請原文轉載,如在轉載時修改本文,請事先告知,謝絕在轉載時通過修改本文達到有利於轉載者的目的。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM