【武漢加油??】基于Pyecharts的疫情數據可視化~
前言
??疫情終將過去,靜待春暖花開~
??本文使用的數據源來自https://lab.isaaclin.cn/nCoV/zh;
??運行本項目需要將pyecharts版本更新至v1.6.2,!pip install pyecharts == 1.6.2;
??更好的閱讀體驗訪問我的Kesci Lab:點我跳轉;
相關教程:
- ?Pyecharts教程:超詳細Pyecharts 1.x教程,讓你的圖表動起來~
獲取數據
- ??接口地址:https://lab.isaaclin.cn/nCoV/api/area
- ??請求方式:GET
- ??主要字段:
| 變量名 | 注釋 |
|---|---|
| currentConfirmedCount | 現存確診人數 |
| confirmedCount | 累計確診人數 |
| suspectedCount | 疑似感染人數 |
| curedCount | 治愈人數 |
| deadCount | 死亡人數 |
代碼 & 效果
??導庫 & 數據請求
import requests
import pyecharts
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
from datetime import date
# 數據來源于 Github DXY-COVID-19-Data, 原作者為 Isaac Lin
url = 'https://lab.isaaclin.cn/nCoV/api/area'
data = requests.get(url).json()
# 生成更新日期
update_date = date.today()
??全球疫情地圖
oversea_confirm = []
for item in data['results']:
if item['countryEnglishName']:
oversea_confirm.append((item['countryEnglishName'].replace('United States of America', 'United States')
.replace('United Kiongdom', 'United Kingdom'),
item['confirmedCount']))
_map = (
Map(init_opts=opts.InitOpts(theme='dark'))
.add("累計確診人數", oversea_confirm, "world",is_map_symbol_show=False)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="新型冠狀病毒全球疫情地圖",
subtitle="更新日期:{}".format(update_date)),
legend_opts=opts.LegendOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(is_show=True, max_=50,
is_piecewise=False,
range_color=['#FFFFE0', '#FFFFE0', '#FFA07A', '#CD5C5C', '#8B0000']),
graphic_opts=[
opts.GraphicGroup(
graphic_item=opts.GraphicItem(
bounding="raw",
right=150,
bottom=50,
z=100,
),
children=[
opts.GraphicRect(
graphic_item=opts.GraphicItem(
left="center", top="center", z=100
),
graphic_shape_opts=opts.GraphicShapeOpts(
width=200, height=50
),
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="rgba(0,0,0,0.3)"
),
),
opts.GraphicText(
graphic_item=opts.GraphicItem(
left="center", top="center", z=100
),
graphic_textstyle_opts=opts.GraphicTextStyleOpts(
text=JsCode("['鉆石號郵輪', '累計確診人數:{}人'].join('\\n')"
.format(dict(oversea_confirm)['Diamond Princess Cruise Ship'])),
font="bold 16px Microsoft YaHei",
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="#fff"
),
),
),
],
)
],
)
)
_map.render_notebook()

?? 全國疫情地圖
province_data = []
for item in data['results']:
if item['countryName'] == '中國':
province_data.append((item['provinceShortName'], item['confirmedCount']))
_map = (
Map(init_opts=opts.InitOpts(theme='dark'))
.add("累計確診人數", province_data, "china",is_map_symbol_show=False)
.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
.set_global_opts(
title_opts=opts.TitleOpts(title="新型冠狀病毒全國疫情地圖",
subtitle="更新日期:{}".format(update_date)),
legend_opts=opts.LegendOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(is_show=True, max_=1000,
is_piecewise=False,
range_color=['#FFFFE0', '#FFA07A', '#CD5C5C', '#8B0000'])
)
)
_map.render_notebook()

??湖北省內確診情況
for item in data['results']:
if item['provinceShortName'] == '湖北':
hubei_data = item['cities']
bar = (
Bar(init_opts=opts.InitOpts(theme='dark'))
.add_xaxis([x['cityName'] for x in hubei_data])
.add_yaxis("累計確診人數", [x['confirmedCount'] for x in hubei_data])
.add_yaxis("當前確診人數", [x['currentConfirmedCount'] for x in hubei_data])
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="新型冠狀病毒湖北省內確診情況",
subtitle="更新日期:{}".format(update_date)),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
legend_opts=opts.LegendOpts(is_show=True),
graphic_opts=[
opts.GraphicGroup(
graphic_item=opts.GraphicItem(
bounding="raw",
right=300,
top=120
),
children=[
opts.GraphicRect(
graphic_item=opts.GraphicItem(
left="center", top="center"
),
graphic_shape_opts=opts.GraphicShapeOpts(
width=200, height=60
),
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="rgba(0,0,0,0.3)"
),
),
opts.GraphicText(
graphic_item=opts.GraphicItem(
left="center", top="center", z=1
),
graphic_textstyle_opts=opts.GraphicTextStyleOpts(
text=JsCode("['當前確診人數:', '','累計確診人數-死亡人數-治愈人數'].join('\\n')"),
font="bold 12px Microsoft YaHei",
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill="#fff"
),
),
),
],
)
],
)
)
bar.render_notebook()

??全國確診熱力地圖
cities_data = []
for item in data['results']:
if item['countryName'] == '中國':
cities_data.extend((item['cities']))
geo = (
Geo(init_opts=opts.InitOpts(theme='dark'))
.add_schema(maptype="china", zoom=3, center=[114.31,30.52])
.add("累計確診人數",
[(i['cityName'], i['currentConfirmedCount']) for i in cities_data
if i['cityName'] in pyecharts.datasets.COORDINATES.keys()],
type_='heatmap',
symbol_size=3,
progressive=50)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="新型冠狀病毒全國疫情熱力圖",
subtitle="更新日期:{}".format(update_date),
pos_left='right'),
legend_opts=opts.LegendOpts(is_show=False),
visualmap_opts=opts.VisualMapOpts(is_show=True,
is_piecewise=False,
range_color=['blue', 'green', 'yellow', 'yellow', 'red'])
)
)
geo.render_notebook()

- ??Coding不易,歡迎點贊支持~
有任何問題歡迎添加微信:kinnnnngjames,備注博客園~
浙公網安備 33010602011771號