利用Python画出你微信好友地理分布图
微信是我们日常生活中非常重要的社交工具,那么大家想不想了解自己微信好友的地理分布呢?话不多说,先上图
(一)介绍所需包pyecharts、itchat、xlwt
itchat是一个开源的微信个人号接口,使开发者可以用Python调用微信。使用不到三十行的代码,你就可以完成一个能够处理所有信息的微信机器人。当然,该api的使用远不止一个机器人。该接口与公众号接口itchatmp共享类似的操作方式,学习一次掌握两个工具。如今微信已经成为了个人社交的很大一部分,对于技术宅们熟练使用itchat能够帮助你扩展你的个人的微信号、方便自己的生活。
pyecharts是一个用于生成Echarts图表的类库.Echarts是百度开源的一个数据可视化JS库。用Echarts生成的图可视化效果非常棒,pyecharts是为了与Python进行对接,方便在Python中直接使用数据生成图。
xlwt是Python语言中,写入Excel文件的扩展工具。
(二)具体过程
我们想要导出好友基本信息至Excel表格中,首先设置Excel导出格式
import xlwt style = xlwt.XFStyle() font = xlwt.Font()#字体基本设置 font.name = u'楷体' font.color = 'black' alignment = xlwt.Alignment() # 设置字体在单元格的位置 alignment.horz = xlwt.Alignment.HORZ_CENTER #水平方向 alignment.vert = xlwt.Alignment.VERT_CENTER #竖直方向 style.alignment = alignment style.font = font workbook=xlwt.Workbook(encoding='utf-8') sheet1=workbook.add_sheet("fr") #设置Excel抬头 sheet1.write(0,0,u'昵称',style) sheet1.write(0,1,u'备注名',style) sheet1.write(0,2,u'省份',style) sheet1.write(0,3,u'城市',style) sheet1.write(0,4,u'签名',style)
然后 利用itchat包登录微信,获取好友信息
import itchat
itchat.login()#登录微信 friends=itchat.get_friends(update=True)[0:]#获取好友列表
将好友信息写至EXCEL中
a=0#设置计数变量 Province=[]#把省份单独提取,以备后面画图使用 for i in friends: sheet1.write(a+1,0,i['NickName'],style) sheet1.write(a+1,1,i['RemarkName'],style) sheet1.write(a+1,2,i['Province'],style) if u'\u4e00' <= i['Province'] <= u'\u9fff':#排除省份为英文的 Province.append(i['Province']) sheet1.write(a+1,3,i['City'],style) sheet1.write(a+1,4,i['Signature'],style) sheet1.write(a+1,5,i['UniFriend'],style) a=a+1 workbook.save(r'C:\Users\LYB\Desktop\friend.xls')# 设置保存路径
做出一个列表,每一个元素包含省份和在该省份的人数
pr_set=set(Province) data=[] for item in pr_set: data.append((item,Province.count(item)))
接下来,开始使用pyecharts画图。由于pyecharts包为了保持轻量化运行,地图文件不在包中,我们需要额外安装,在Cmd中,使用pip命令
pip install echarts-countries-pypkg pip install echarts-china-provinces-pypkg pip install echarts-china-cities-pypkg
导入相对应模块并画图。pyeachrts上针对可图可视化的基本图表有Map和Geo这两个,Map可理解为实现地图区域可视化,Geo可理解为地图散点图可视化。
from pyecharts import Geo,Map geo = Geo("微信好友城市分布", "data from wechat made by Gatsby-zhong", title_color="#fff", title_pos="center", width=1000,height=600, background_color='#404a59')#对画布进行设置 attr, value = geo.cast(data)#使用函数分为两个list geo.add("", attr, value, visual_range=[0, 40], maptype='china',visual_text_color="#fff", symbol_size=10, is_visualmap=True)#画图 geo.render(r'C:\Users\LYB\Desktop\friend.html')#设置保存路径 map = Map("微信好友城市分布",'data from wechat made by Gatsby-zhong', width=1000, height=600) map.add("", attr, value, visual_range=[0, 40], maptype='china', is_visualmap=True, visual_text_color='#000') map.render(r'C:\Users\LYB\Desktop\2friend.html') geo = Geo("微信好友城市分布热力图", "data from wechat made by Gatsby-zhong", title_color="#fff", title_pos="center", width=1200, height=600, background_color='#404a59') geo.add("", attr, value, visual_range=[0, 30], type='heatmap',visual_text_color="#fff", symbol_size=15, is_visualmap=True, is_roam=False) geo.render(r'C:\Users\LYB\Desktop\3friend.html') geo = Geo("微信好友城市分布", "data from wechat made by Gatsby-zhong", title_color="#fff", title_pos="center", width=1200, height=600, background_color='#404a59') geo.add("", attr, value, type="effectScatter", is_random=True, effect_scale=5, visual_range=[0, 40],visual_text_color="#fff", symbol_size=15, is_visualmap=True, is_roam=False) geo.render(r'C:\Users\LYB\Desktop\4friend.html')
画出来的图还有
微信好友分布热力图(3friend.html)
微信好友城市分布(2friend.html)
friend.html
此外,利用basemap包也能画出中国地图。需要安装basemap 和 pypro。具体不再赘述,仅展示用其画的一幅中国地图, 可以看出,经放大后,连海岸线都十分清楚。