前言
最近在研究 pyecharts 的用法,它是 python 的一个可视化工具,然后就想着结合微信来一起玩
不多说,直接看效果:
环境配置
- pip install pyecharts
- pip install snapshot_selenium
- pip install echarts-countries-pypkg
- pip install echarts-china-provinces-pypkg
- pip install echarts-china-cities-pypkg
- pip install echarts-china-counties-pypkg
- pip install wxpy
获取好友
主要是获取好友基本数据,用来做数据可视化
代码如下:
- from wxpy import Bot, Chat
- class 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 模块
唯一的区别在 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")
比如可以选择某个省份的数据,运行之后的效果:
以上就是微信中的广东好友分布热力图
全国分布图
地图是基于 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")
效果如下:
条形图
先来看下效果:
代码如下:
- 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
最后,再提供大家微信头像另一种好玩的方式:
先看图:
除此之外,还能定制文字,将自己想制作的文字,输入即可!
源码下载:点击这里
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。
原文链接:https://juejin.im/post/5d1c63e96fb9a07ea9448ba5