干活,如何实现那种可视化地图
回顾3年疫情地图,进行数据可视化,首先看效果
实现地图热力显示,柱状图显示,最终实现动画效果
获取数据
使用api接口:
https://api./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./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 optsfrom pyecharts.charts import Mapfrom pyecharts.faker import Fakerprovinces=['内蒙古', '台湾', '上海', '澳门', '湖南', '浙江', '江苏']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=".1.2"),visualmap_opts=opts.VisualMapOpts(max_=200),))#c.render("map_world.html") #输出为htmlc.render_notebook() #jupyter显示
这里注意,如果你使用jupyter运行代码,那么可以使用c.render_notebook()显示结果,无需保存到本地显示。
绘制动画
使用了pyecharts的时间轴组件Timeline。示例:
from pyecharts import options as optsfrom pyecharts.charts import Map, Timelinefrom pyecharts.faker import Fakertime=['.01.20', '.01.21', '.01.22', '.01.23', '.01.24','.01.25', '.01.26', '.01.27', '.01.28', '.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 看看源码