我是程序员小小叶,为大家带来原创精彩技术内容。
疫情无论是对于个体还是企业都是无法承受之重。希望疫情早日过去,这是作为一个普通人一个的小小心愿。
我们身边的亲朋好友也或多或少受到了疫情的影响,让我们来通过python找出朋友圈的武汉朋友给予关怀。
第一步,首先还是先安装wxpy,其次就是安装本文中地图绘制所用到的pyecharts模块
pip install wxpy # 支持微信相关功能
pip install pyecharts # 支持地图绘制功能
pip install pyecharts_snapshot
第二步,根据需要下载所需要的地图数据包,pyecharts v0.3.2以后,pyecharts 将不再自带地图 js 文件。如用户需要用到地图图表,可自行安装对应的地图文件包。这里我们选择中国省级地图: echarts-china-provinces-pypkg进行下载,用于显示湖北省的地图
全球国家地图: echarts-countries-pypkg:世界地图和 213 个国家,包括中国
中国省级地图: echarts-china-provinces-pypkg:23 个省,5 个自治区
中国市级地图: echarts-china-cities-pypkg:370 个中国城市
中国县区级地图:echarts-china-counties-pypkg:2882 个中国县·区
中国区域地图:echarts-china-misc-pypkg:11 个中国区域地图,比如华南、华北。
除此之外,英国2016选区图: echarts-united-kingdom-pypkg:英国选区图可以用来画与政治经济相关的数据
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 echarts-china-misc-pypkg
环境准备好之后,紧接着设计策略。
1.通过Bot(cache_path=True).friends()函数获取好友信息,从中找到我们寻找的湖北朋友;
2.向eCharts添加自定义geojson数据实现地图展示;
3.自定义祝福话术,随机发送给湖北好友列表;
完整代码:
# encoding: utf-8
"""
@author: 程序员小小叶
@contact: 3203636266@qq.com
@微信公众号:程序员小小叶
@time: 2020/2/19 13:03
@file: case4.py
@desc: 疫情当前,python帮你找出朋友圈的武汉朋友给予关怀
"""
from wxpy import *
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType
from pyecharts.globals import ThemeType
import webbrowser
import random
def is_Chinese(word): # 由于存在国外友人,所以这里要滤除国外英文地名以及不填地区的好友
for ch in word:
if '\u4e00' <= ch <= '\u9fff':
return True
return False
bot = Bot(cache_path=True)
# 获取所有好友的信息
friends = bot.friends()
# 获取省份信息,并过滤出湖北的好友
china_friends_sum = {}
hubei_friends_sum = {}
hubei_friends = []
for f in friends:
province = f.province
if is_Chinese(province):
if province in china_friends_sum:
china_friends_sum[province] += 1
if province == '湖北':
city = f.city
print(f.remark_name)
print(f.city)
hubei_friends.append(f)
if city in hubei_friends_sum:
hubei_friends_sum[city] += 1
else:
hubei_friends_sum[city] = 1
else:
china_friends_sum[province] = 1
# 由于微信内的城市名称不带“市”,且部分自治州也是简称,所以要进行补全,如恩施土家族苗族自治州
hubei_citys = ['黄冈市', '黄石市', '鄂州市', '武汉市', '咸宁市', '孝感市', '随州市', '天门市', '仙桃市', '荆州市', '荆门市', '潜江市', '襄阳市', '宜昌市', '十堰市',
'神农架林区', '恩施土家族苗族自治州']
echart_data = []
max = 0
for m in hubei_friends_sum:
for city in hubei_citys:
if m in city:
item = (city, hubei_friends_sum[m])
echart_data.append(item)
if hubei_friends_sum[m] > max:
max = hubei_friends_sum[m]
print(echart_data)
print(max)
print(china_friends_sum)
# 绘制分布地图
def geo_guangdong() -> Geo:
c = (
Geo(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_schema(maptype="湖北") # 也可以是其他省,那么对应的城市名也是需要修改的
.add("", echart_data, ChartType.EFFECT_SCATTER,
is_selected=True, symbol=None, symbol_size=6, color="red")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_piecewise=True, max_=max, ),
title_opts=opts.TitleOpts(title="微信好友湖北分布图", pos_left="300")
)
)
return c
g = geo_guangdong()
g.render('微信好友湖北分布图.html')
# 用浏览器打开生成的本地网页
# webbrowser.open("微信好友湖北分布图.html")
# 分别发送祝福给对方
# 祝福语录集
wishes = ["出门戴口罩哦!勤洗手勤通风,少出门不聚集!",
"保持好心态、重防护、勤消毒,减少出门和聚会,保护好自己和家人。",
"但行好事,莫问前程,共渡难关。"]
print(len(wishes)-1)
for hf in hubei_friends:
print(hf.remark_name)
target = bot.search(hf.remark_name)[0] # 这里‘’填入微信好友昵称
target.send(wishes[random.randint(0, len(wishes)-1)])
# 进入Python命令行,让程序保持运行
embed()
如果你在学习Python,不妨关注点赞收藏一下!
同名公众号:程序员小小叶,关注发送“数据分析”,赠送《利用 Python 进行数据分析》(中文带书签)电子书(学习 Python 基础库最好的书。)
程序员小小叶 发布了2 篇原创文章 · 获赞 0 · 访问量 21 私信 关注