предисловие
исследую недавноpyechartsИспользование , это инструмент визуализации Python, а потом я подумал о том, чтобы поиграть с WeChat. Нечего сказать, посмотрите прямо на эффект:
Конфигурация среды
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
Возвращается список друзей WeChat, который включает такие данные, как город друга, провинция, пол и личная подпись.
географические координаты
Компонент географической системы координат используется для рисования карты и поддерживает рисование точечных диаграмм и наборов линий в географической системе координат.
В диаграммах географические координаты в основном основаны на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картинка
Это изображение представляет собой карту распределения друзей WeChat в Китае.
Тепловая карта
Тепловая карта также основана на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")
Например, вы можете выбрать данные определенной провинции и эффект после запуска:
Выше показана тепловая карта распределения друзей из провинции Гуандун в WeChat.
Национальная карта распространения
Карта основана на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
Наконец, еще один интересный способ предоставить каждому аватар WeChat:
Сначала посмотрите на картинку:
Кроме того, вы также можете настроить текст и ввести текст, который хотите сделать!
Официальный аккаунт [Программирование и бой на Python] Ответьте "изображение" в фоновом режиме, чтобы получить исходный код
Рекомендуемое чтение
Введение в JS, обратный Python Crawler
Используйте python для создания стены аватара вашего друга WeChat одним щелчком мыши
Артефакт визуализации данных Python — быстрое начало работы с диаграммами