一、效果展示:
可视化图表有日历图,饼图,折线图,中国地图和表图。然后利用page将其组合在一起。
二、数据获取:
1、数据来源
本次可视化数据来源为百度,网址为https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_aladin_banner
import requests
import json
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
}
with open('data.csv', mode='a', encoding='utf-8', newline='') as f:
csv_writer = csv.writer(f)
csv_writer.writerow(['area', 'curConfirm', 'curConfirmRelative', 'confirmed', 'crued', 'died'])
url = 'https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_aladin_banner'
response = requests.get(url=url, headers=headers)
html_data = response.text
# print(html_data)
json_str = re.findall('"component":\[(.*)\],', html_data)[0]
json_dict = json.loads(json_str)
caseList = json_dict['caseList']
for case in caseList:
area = case['area'] # 省份
curConfirm = case['curConfirm'] # 确诊人数
curConfirmRelative = case['curConfirmRelative'] # 当前确诊
confirmed = case['confirmed'] # 累计确诊
crued = case['crued'] # 治愈人数
died = case['died'] # 死亡人数
print(area, curConfirm, curConfirmRelative, confirmed, crued, died)
with open('data.csv', mode='a', encoding='utf-8', newline='') as f:
csv_writer = csv.writer(f)
csv_writer.writerow([area, curConfirm, curConfirmRelative, confirmed, crued, died])
2、部分爬取数据展示
三、可视化图表制作:
1、疫情地图绘制,对中国各省治愈人数进行地图展示。
df = pd.read_csv('data.csv', encoding='utf-8')
china_map = (
Map(init_opts=opts.InitOpts(theme=theme_config))
.add('', [list(i) for i in zip(df['area'].values.tolist(), df['curConfirm'].values.tolist())], zoom=1,
maptype='china', is_map_symbol_show=False)
.set_series_opts(
label_opts=opts.LabelOpts(
),
)
.set_global_opts(
title_opts=opts.TitleOpts(title='各地区确诊人数', pos_right
='center', pos_top='2%', title_textstyle_opts=opts.TextStyleOpts(
font_size=24, font_family="Microsoft YaHei",
)),
legend_opts=opts.LegendOpts(is_show=True),
visualmap_opts=opts.VisualMapOpts(
dimension=0,
pos_left="10",
pos_top="center",
is_piecewise=True,
max_=1000, is_inverse=True)
)
)
china_map.render("map.html")
2、日历图,展示近日确诊人数
begin = datetime.date(2022, 3, 20) # 设置起始日期
end = datetime.date(2022, 5, 20) # 设置终止日期
data = pd.read_csv("中国疫情.csv")
date_list = list(data['日期'])
date_list = list(map(lambda x: str(x), date_list))
confirm_list = list(data['新增确诊'])
data_0 = [
[str(begin + datetime.timedelta(days=i)), confirm_list[i]] # 设置日期间隔,步数范围
for i in range((end - begin).days - 3)
]
datatime = (
Calendar(init_opts=opts.InitOpts(theme=theme_config))
.add('', data_0, calendar_opts=opts.CalendarOpts(range_=['2022-4', '2022-6'])) # 添加到日历图,指定显示2022年数据
.set_global_opts( # 设置底部显示条,解释数据
title_opts=opts.TitleOpts(title='',pos_right
='center', pos_top='2%', title_textstyle_opts=opts.TextStyleOpts(
font_size=24, font_family="Microsoft YaHei")),
visualmap_opts=opts.VisualMapOpts(
pieces=[
{'min': 13000, 'color': '#7f1818'}, # 不指定 max
{'min': 1000, 'max': 10000},
{'min': 500, 'max': 999},
{'min': 100, 'max': 499},
{'min': 10, 'max': 99},
{'min': 0, 'max': 9}],
# orient='vertical', # 设置垂直显示
# pos_top='230px',
# pos_left='100px',
# is_piecewise=True # 是否连续
)
)
)