干活,如何实现那种可视化地图
回顾3年疫情地图,进行数据可视化,首先看效果
实现地图热力显示,柱状图显示,最终实现动画效果
获取数据
使用api接口:
https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?province=xxx
把xxx换成某个省份即可。
使用python的requests包进行获取数据,在我的代码里只统计了每日的确诊数据,最后写入到csv文件中。
#数据爬取
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
response = requests.get("https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?province=湖北",headers = headers)
data=json.loads(response.text)
#处理爬取后的数据 只统计确诊数据
datalist=data['data']
datacsv=[['province','time','confirmed']]
for num in range(len(datalist)):
datacsv.append([datalist[num]['province'],str(datalist[num]['year'])+'.'+str(datalist[num]['date']),datalist[num]['newConfirm']])
df = pd.DataFrame(datacsv)
df.to_csv(r'output\湖北.csv',header=False,index=False,mode='a')
绘制地图
将所有数据爬取后进行整理,使用pyecharts进行绘制。示例代码
可以实现某个省份的热力图
from pyecharts import options as opts
from pyecharts.charts import Map
from pyecharts.faker import Faker
provinces=['内蒙古', '台湾', '上海', '澳门', '湖南', '浙江', '江苏']
value=[56, 22, 51, 112, 112, 40, 67]
c = (
#Map( init_opts=opts.InitOpts(width="1900px", height="900px", bg_color="#ADD8E6",page_title="4.15全球疫情确诊人数",theme="white"))
Map()
.add("",[list(z) for z in zip(provinces, value)], "china",label_opts=opts.LabelOpts(is_show=False),is_map_symbol_show=False,)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="2022.1.2"),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
#c.render("map_world.html") #输出为html
c.render_notebook() #jupyter显示
这里注意,如果你使用jupyter运行代码,那么可以使用c.render_notebook()显示结果,无需保存到本地显示。
绘制动画
使用了pyecharts的时间轴组件Timeline。示例:
from pyecharts import options as opts
from pyecharts.charts import Map, Timeline
from pyecharts.faker import Faker
time=['2020.01.20', '2020.01.21', '2020.01.22', '2020.01.23', '2020.01.24',
'2020.01.25', '2020.01.26', '2020.01.27', '2020.01.28', '2020.01.29']
tl = Timeline()
for i in time:
map0 = (
Map()
.add("", [list(z) for z in zip(Faker.provinces, Faker.values())], "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="{}数据".format(i)),
visualmap_opts=opts.VisualMapOpts(max_=200),
)
)
tl.add(map0, "{}".format(i))
#tl.render("timeline_map.html")
tl.render_notebook() #jupyter显示
公众号 52DATA 看看源码