饼图 label显示前几个 echarts_python微信好友信息统计-图、词云和热图

一、背景

上一篇文章我们讲解了微信机器人,主要使用了wxpy这个库,如果还不会登录机器人的话可以可以快速浏览上一篇文章,微信聊天机器人-存储好友分享消息。这篇文章我们继续使用wxpy统计微信账号好友信息。主要包括:好友信息词云、好友所在省份分布、城市分布、好友性别和好友地理位置热力图等

二、效果展示

1、好友信息:男女比例柱状图、好友省份饼图、好友城市饼图

7dc9a50c5dd9c074e6690d414d83b444.png

2、好友个性签名词云

0f15f5f5e3eb9a03639daeaae2272435.png

3、好友所在位置热力图

aaa9fb717a7770b1c8b691c56b625490.png

三、wordcloud

wordcloud是生成词云的包,使用起来也是比较简单

1、安装wordcloud包

pip install wordcloud

2、导入词云包

from wordcloud import WordCloud, ImageColorGenerator

3、构造WordCloud对象

wc = WordCloud(
    background_color = p_background
    , max_words = p_max_words #显示最大词数
    , font_path = "msyh.ttf"
    , min_font_size = p_min_font_size
    , max_font_size = p_max_font_size
    , width = p_width  #图幅宽度
    , height = p_height
    , mask = cloud_mask 
    )

4、生成词云结果

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包

pip install jieba

2、导入分词工具包

import jieba

3、添加建议词组,即不被分割的词组

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

4、加载用户自定义词组

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

5、分词

segs = jieba.cut(text)

五、matplotlib

matplotlib是一个python图表包,包含各种图表控件,本文中主要使用了饼图和柱状图

1、安装matplotlib

pip install matplotlib

2、导入图表控件

import matplotlib.pyplot as plt

3、构造一个figure对象

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包

pip install pyecharts

2、导入

from pyecharts import Map, Page

3、构造一个Map对象

friends_map = Map("微信好友全国分布图", width = 1200, height=600)

4、添加好友省份数据

friends_map.add(
""
, province_dict.keys()
, province_dict.values()
, is_label_show = True
, is_visualmap = True
, maptype='china'
, visual_range = [0, max(province_dict.values())]
, visual_text_color = 'red'
, visual_range_text = ['少', '多']
, visual_range_color = ['#FFFF00', '#D6292B'] # [黄,红]由低到高
)

5、渲染,会生成一个index.html文件在同目录下,使用浏览器打开即可

6、如果发现地图上没有数据,需要下载地图数据包

echarts-countries-pypkg 是全球国家地图,echarts-china-provinces-pypkg是中国省级地图, echarts-china-cities-pypkg是中国城市地图

pip install echarts-countries-pypkg

pip install echarts-china-provinces-pypkg

pip install echarts-china-cities-pypkg

七、关键步骤

1、获取好友男女信息

#获取好友性别、省份
def generateInfo():
    male = female = other = 0
    for sex, count in friends_stat["sex"].items():
        # 1代表MALE, 2代表FEMALE
        if sex == 1:
            male = count
            print ("MALE %d" % count)
        elif sex == 2:
            female = count
            print ("FEMALE %d" % count)
        else :
            other = count
            print ("other %d" % count)

    total = male + female + other
    print ("男性朋友:%.2f%%" % (float(male) / total * 100))
    print ("女性朋友:%.2f%%" % (float(female) / total * 100))
    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()))

打包完毕,开发时需要还原

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值