疫情可视化分析

一、效果展示:

可视化图表有日历图,饼图,折线图,中国地图和表图。然后利用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  # 是否连续
            )
        )
    )

猜你喜欢

转载自blog.csdn.net/z_zzbty/article/details/125419834