利用Python画出你微信好友地理分布图

时间:2024-01-22 13:07:30

        微信是我们日常生活中非常重要的社交工具,那么大家想不想了解自己微信好友的地理分布呢?话不多说,先上图 

(一)介绍所需包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。具体不再赘述,仅展示用其画的一幅中国地图, 可以看出,经放大后,连海岸线都十分清楚。