微信,已经成为人们必不可少的社交工具。每个人的微信里都有形形色色的人,你了解他们吗?他们又来自哪呢?
今天我们就来编写一个关于好友分析的代码
下载依赖库
在此之前,我们需要下载七个库:Pillow、Pyecharts、Itchat、Jieba、Numpy、Pandas、wxpy
打开Anaconda Prompt,输入如下代码,分别安装不同库:(安装结果就不展示)
安装 wxpy: pip install wxpy
安装 PIL: pip install pillow
安装 pyecharts:pip install pyecharts
安装 Itchat: pip install itchat
安装 Jieba: pip install jieba
安装 Pandas:pip install Pandas
安装 Numpy:pip install Numpy
安装地图数据包:pip install echarts-china-provinces-pypkg ;pip install echarts-countries-pypkg
运行
1.登陆微信
输入此代码,会自动弹出二维码
#导入模块 from wxpy import * #初始化机器人,选择缓存模式(扫码)登录 bot = Bot(cache_path=True) #获取我的所有微信好友信息 friend_all = bot.friends()
手机同意,便可获取微信好友的相关信息(登陆成功如图)
2.获取信息
输入:
print(friend_all[0].raw) #friend_all[0]是我的微信昵称,.raw 则是获取我的全部信息
得到关于我的信息(如图)
如何获取好友信息,并做成表格,输入代码:
lis=[] for a_friend in friend_all: NickName = a_friend.raw.get(‘NickName‘,None) #Sex = a_friend.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) Signature = a_friend.raw.get(‘Signature‘,None) HeadImgUrl = a_friend.raw.get(‘HeadImgUrl‘,None) HeadImgFlag = a_friend.raw.get(‘HeadImgFlag‘,None) list_0=[NickName,Sex,City,Province,Signature,HeadImgUrl,HeadImgFlag] lis.append(list_0) #编写列表 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(‘pyq‘,lis)
结果:
3.数据分析
有这么多好友,想清楚知道自己的好友分布、性别占比等数据,现在输入如下代码,立刻明了:
Friends = bot.friends() data = Friends.stats_text(total=True, sex=True, top_provinces=30, top_cities=500) print(data) from pandas import read_excel df = read_excel(‘pyq.xlsx‘,sheet_name=‘list2excel07‘) df.tail(5) df.city.count() df.city.describe() 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()
滴~结果:
诶,可以做一个词云图哦~输入代码:
#利用 pyecharm 做词云 import pandas as pd #count = df.city.value_counts() #对 dataframe 进行全频率统计,排除了 nan city_list = df[‘city‘].fillna(‘NAN‘).tolist()#将 dataframe 的列转化为 list,其中的 nan 用“NAN” 替换 count_city = pd.value_counts(city_list)#对 list 进行全频率统计 import matplotlib.pyplot as plt from pandas import DataFrame from wordcloud 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‘c:\Users\HJY\.spyder-py3\wc1.html‘)
滴~
这张图展示了我的某些地方好友多
我也可以将微信好友分布在地图上,嘻嘻(代码如下)
#将这些好友在全国地图上做分布 province_list = df[‘province‘].fillna(‘NAN‘).tolist()#将 dataframe 的列转化为 list,其中的 nan 用 “NAN”替换 count_province = pd.value_counts(province_list)#对 list 进行全频率统计 from pyecharts import Map value =count_province.tolist() attr =count_province.index.tolist() map=Map("各省微信好友分布", width=1200, 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‘c:\Users\HJY\.spyder-py3\me\map1.html‘)
滴滴
The end......(下次邀请微信小机器人,嘿嘿嘿)