博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Python来可视化微信好友
阅读量:4130 次
发布时间:2019-05-25

本文共 4390 字,大约阅读时间需要 14 分钟。

前言

最近在研究 pyecharts 的用法,它是 python 的一个可视化工具,然后就想着结合微信来一起玩不多说,直接看效果:

全国分布图.gif

条形图.gif

环境配置

pip install pyechartspip install snapshot_seleniumpip install echarts-countries-pypkgpip install echarts-china-provinces-pypkgpip install echarts-china-cities-pypkgpip install echarts-china-counties-pypkgpip install wxpy

获取好友

主要是获取好友基本数据,用来做数据可视化代码如下:

from wxpy import Bot, Chatclass Demo(Chat):    @staticmethod    def get_friend():        bot = Bot()        friends = bot.friends(update=True)        friend_data = []        for friend in friends:            if friend.sex == 1:                sex = "男"            elif friend.sex == 2:                sex = "女"            else:                sex = ""            friend_dict = {                "city": friend.city,                "province": friend.province,                "sex": sex,                "signature": friend.signature,            }            friend_data.append(friend_dict)        return friend_data

返回的是微信好友列表,包含好友城市,省份,性别和个性签名等数据。

地理坐标图

地理坐标系组件用于地图的绘制,支持在地理坐标系上绘制散点图,线集。

在 pyecharts 中地理坐标图主要是基于 Geo 模块

def geo_base():    city_data = get_data()    geo = Geo(init_opts=opts.InitOpts(theme="vintage"))    for city in city_data:        try:            geo.add_schema(maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="gray"))            geo.add("微信好友分布地图", [city], type_="effectScatter", symbol_size=10)            geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))            geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="微信好友分布地图"), )        except Exception as e:            print(e)            pass    # geo.render("geo.html")    make_snapshot(driver, geo.render(), "geo.png")

运行完之后会在当前目录生成一个 geo.png 的图片

geo.png

该图片就是微信好友中国分布地图

热力图

热力图也是基于 Geo 模块唯一的区别在 add 函数中 type 的为 heatmap

代码如下:

def heat_map():    city_data = get_data()    geo = Geo(init_opts=opts.InitOpts(theme="vintage"))    for city in city_data:        try:            geo.add_schema(maptype="广东", itemstyle_opts=opts.ItemStyleOpts(color="gray"))            geo.add("广东好友热力图", [city], type_="heatmap", symbol_size=10)            geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))            geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title="热力图"), toolbox_opts=opts.ToolboxOpts())        except :            pass    geo.render("heat.html")

运行之后的效果:

热力图.png

以上就是微信中的广东好友分布热力图,当然省份可以自主选择。

全国分布图

地图是基于 Map 模块进行扩展主要用到函数是 add

def add(    # 系列名称,用于 tooltip 的显示,legend 的图例筛选。    series_name: str,    # 数据项 (坐标点名称,坐标点值)    data_pair: Sequence,    # 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件    maptype: str = "china",    # 是否选中图例    is_selected: bool = True,    # 是否开启鼠标缩放和平移漫游。    is_roam: bool = True,    # 当前视角的中心点,用经纬度表示    center: Optional[Sequence] = None,    # 当前视角的缩放比例。    zoom: Optional[Numeric] = 1,    # 自定义地区的名称映射    name_map: Optional[dict] = None,    # 标记图形形状    symbol: Optional[str] = None,    # 是否显示标记图形    is_map_symbol_show: bool = True,    # 标签配置项,参考 `series_options.LabelOpts`    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),    # 提示框组件配置项,参考 `series_options.TooltipOpts`    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,    # 图元样式配置项,参考 `series_options.ItemStyleOpts`    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,)

代码如下:

def map_base():    province_data = province_list()    maps = Map()    maps.add("", province_data, "china")    maps.set_global_opts(title_opts=opts.TitleOpts(title="微信好友分布图"), visualmap_opts=opts.VisualMapOpts())    make_snapshot(driver, geo.render(), "map.png")

运行之后,就是生成文章开头所示的图片,是不是很有趣呀!

词云图

好友城市分布词云图

c = (            WordCloud()            .add("", city_list, word_size_range=[15, 50], shape="diamond", word_gap=10)            .set_global_opts(title_opts=opts.TitleOpts(title="diamond"))        )        make_snapshot(driver, c.render(), "world.png")

效果如下:

条形图

先来看下效果:

条形图.gif

代码如下:

def bar_datazoom_slider() -> Bar:    city_data = get_data()    c = (        Bar(init_opts=opts.InitOpts(page_title="条形图"))        .add_xaxis([city[0] for city in city_data])        .add_yaxis("城市人数", [city[1] for city in city_data])        .set_global_opts(            title_opts=opts.TitleOpts(title="好友城市分布条形图"),            datazoom_opts=[opts.DataZoomOpts(orient="vertical")]        )    )    return c

最后,再提供大家微信头像另一种好玩的方式:

先看图:

文字图

除此之外,还能定制文字,将自己想制作的文字,输入即可!

后台回复 “image” 获取源码公众号:Python编程与实战。欢迎关注!

欢迎关注

了解更多内容,烦请关注公众号 Python编程与实战

转载地址:http://hzzvi.baihongyu.com/

你可能感兴趣的文章
Electron-Vue项目中遇到fs.rm is not a function问题的解决过程
查看>>
飞机换乘次数最少问题的两种解决方案
查看>>
有向无回路图的理解
查看>>
设计模式中英文汇总分类
查看>>
WPF实现蜘蛛纸牌游戏
查看>>
单例模式
查看>>
工厂方法模式
查看>>
模板方法模式
查看>>
数据结构之队列、栈
查看>>
数据结构之树
查看>>
数据结构之二叉树
查看>>
二叉树非递归遍历算法思悟
查看>>
红黑树算法思悟
查看>>
从山寨Spring中学习Spring IOC原理-自动装配注解
查看>>
实例区别BeanFactory和FactoryBean
查看>>
Spring后置处理器BeanPostProcessor的应用
查看>>
Spring框架的ImportSelector到底可以干嘛
查看>>
Mysql中下划线问题
查看>>
微信小程序中使用npm过程中提示:npm WARN saveError ENOENT: no such file or directory
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>