• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

微信小程序

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

所用库

1、pillow 2、pyecharts 3、itchat 4、jieba 5、numpy 6、pandas 7、wxpy

温馨提示:1、本篇博因需要所用pyecharts为0.5.X版本,anaconda所下载的是1.X.X版本

                  2、调用pyechart中的map模块需要安装地图数据包:

        pip install echarts-china-provinces-pypkg
        pip install echarts-countries-pypkg

一、登陆微信并获取我的好友相关信息

from wxpy import *
#初始化机器人,选择缓存模式(扫码)登录
bot=Bot(cache_path=True)
#获取我的所有微信好友信息
friend_all=bot.friends()
print(friend_all[0].raw)#friend_all[0]是我的微信昵称,.raw 则是获取我的全部信息
############运行后会自动弹出二维码页面,手机扫描登陆即可###########

运行结果

二、可以查看我们的列表中联系人的数量

print(len(friend_all)
>>>179

三、获取好友相关信息,并把它存放在一个excel表格

将获取的好友信息所需要的部分进行处理,每个好友的信息都是一个字典,对这几个 key 提取相应的值,放入一个列表 list_0 中,即每个好友的这些 key的值做成了一个列表,在对所有的好友使用 for 循环进行同样的操作,将所有好友的列表做成一个大列表lis的元素,即列表中的元素是列表。

lis=[]
for a_friend in friend_all:
    NickName=a_friend.raw.get(\'NickName\',None)
    #Sex=afriend.raw.get(\'Sex\',None)
    Sex={1:"",2:"",0:"其他"}.get(a_friend.raw.get(\'Sex\',None),None)
    City=a_friend.raw.get(\'City\',None)
    Province=a_friend.raw.get("Province",None)
    Sigenature=a_friend.raw.get("Signature",None)
    HeadImgFlagUrl=a_friend.raw.get("HeadImgFlagUrl",None)
    HeadImgFlag=a_friend.raw.get("HeadImgFlag",None)
    list_0=[NickName,Sex,City,Province,Sigenature,HeadImgFlagUrl,HeadImgFlag]
    lis.append(list_0)

然后再将列表放入创建的excel表格中

def lis2e07(filename,lis):
    import openpyxl
    wb = openpyxl.Workbook()
    sheet = wb.active
    sheet.title = \'list2excel07\'
    file_name = filename +\'.xlsx\'
    for i in range(0, len(lis)):
        for j in range(0, len(lis[i])):
                sheet.cell(row=i+1, column=j+1, value=str(lis[i][j]))
    wb.save(file_name)
    print("写入数据成功!")
lis2e07(\'list3\',lis)

结果显示

四、统计列表联系人所在城市占比

#######################粗略获取好友信息###############################
Friends=bot.friends() data=Friends.stats_text(total=True,sex=True,top_provinces=30,top_cities=300) print(data)
######可以从存储在本地的 excel 中读取数据进行分析在执行以
下代码之前,我们需要先把 excel 文件加一个列标题行。可直接另存为上面的excel表格
然后增加后续直接用另存为的表格########################
from pandas import read_excel df=read_excel(\'list4.xlsx\',sheet_name=\'list2excel07\') print(df.tail(7)) df.city.count() df.city.describe()

结果显示

 

五、对列表中联系人所在城市绘制词云

①利用PIL+WordCloud对列表联系人所在城市绘制词云

from wordcloud import WordCloud
import matplotlib.pyplot as plt
import pandas as pd
from pandas import DataFrame
word_list= df[\'city\'].fillna(\'0\').tolist()#将 dataframe 的列转化为 list,其中的 nan 用“0”替换
new_text = \' \'.join(word_list)
wordcloud = WordCloud(font_path=\'simhei.ttf\', background_color="black").generate(new_text)
plt.imshow(wordcloud)
plt.axis("off")
plt.show() 

结果显示

②用pyecharts绘制词云并将其保存为html文件

import pandas as pd
#count=df.city.value_count()#对dataframe对 dataframe 进行全频率统计,排除了 nan
city_list=df[\'city\'].fillna(\'NAN\').tolist()#将dataframe的列转化为list,其中nan用NAN替换
count_city=pd.value_counts(city_list)#对list进行全频率统计
from pyecharts import WordCloud
name=count_city.index.tolist()
value=count_city.tolist()
wordcloud=WordCloud(width=1300,height=620)
wordcloud.add("",name,value,word_size_range=[20,100])
wordcloud.show_config()
wordcloud.render(r\'cy.html\')

结果显示

六、列表联系人所在省份地图并保存为HTML文件

province_list=df[\'province\'].fillna(\'NAN\').tolist()
count_province=pd.value_counts(province_list)#对list进行全频率统计
from pyecharts import Map
value=count_province.tolist()
attr=count_province.index.tolist()
map=Map("各省微信好友分布",width=1000,height=600) 
map.add("",attr,value,maptype=\'china\',is_visualmap=True,visual_text_color=\'#000\',is_label_show=True)#显示地图上的省份
map.show_config()
map.render(r\'FriendMap.html\')

注:若地图显示不全或者只显示南海诸岛部分请安装map数据包(安装方法见本博开头)

显示结果

 

 

 OK,也同样可以查看各市的好友分布,就不贴图了,有兴趣可以试试。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#入门之软件应用及第一个小程序发布时间:2022-07-18
下一篇:
助力小程序生态发展 “小程序生态孵化社区”成立发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap