微信好友信息统计-图、词云和热图

一、背景

    上一篇文章我们讲解了微信机器人,主要使用了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. 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。 

原文地址:https://www.cnblogs.com/swarmbees/p/10000884.html