Python COVID-19 2.0 (with a simple visualization added)

1.0 with a little explanation

only code

import requests
import pandas as pd
import time
from matplotlib import pyplot as plt
import numpy as np


# 获取疫情数据
url = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=statisGradeCityDetail,diseaseh5Shelf'
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 Edg/100.0.1185.50"
}
data = requests.get(url, headers=headers)

# print(data.json())

# 寻找累计数据
china_data = data.json()['data']['diseaseh5Shelf']['areaTree'][0]['children']

# 存放数据
data_li = []

# 从url 中提取数据
for child in china_data:

    data_dict={}
    data_dict['地区名称'] = child['name']
    data_dict['统计时间'] = child['date']
    data_dict['新增确认'] = child['total']['nowConfirm']
    data_dict['死亡人数'] = child['total']['dead']
    data_dict['治愈人数'] = child['total']['heal']
    data_dict['累计确诊'] = child['total']['confirm']
    data_dict['本土确诊'] = child['total']['provinceLocalConfirm']
    data_dict['无症状'] = child['total']['wzz']
    # print(data_dict)
    data_li.append(data_dict)


# 保存文件
df = pd.DataFrame(data_li)
today = time.strftime('%Y年%m月%d日', time.localtime())
df.to_csv(today+'全国疫情累计数据.csv', mode="w", encoding="utf-8")

# 可视化
# matplotlib设置默认字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 随便搞个 我也不是很会
df = pd.read_csv('2022年04月26日全国疫情累计数据.csv')
df = df.sort_values(by='新增确认', ascending=False)

x_label = np.array(df["地区名称"])

# 可视化数据 数量
x = np.arange(5)
# 数据情况 运行一下就懂了
y1 = np.array(df["新增确认"][:5])
y2 = np.array(df["治愈人数"][:5])
y3 = np.array(df['死亡人数'][:5])

# 表格参数(长宽高 那些)
fig = plt.figure(figsize=(10, 10))
plt.subplots_adjust(left=0.1, right=0.8, top=0.8, bottom=0.1)
plt.bar(x, y1, width=0.2, color='red', label='新增确认', edgecolor='k', linewidth=0.50)
plt.bar(x + 0.3, y2, width=0.2, color='yellow', label='治愈人数', edgecolor='k', linewidth=0.50)
plt.bar(x + 0.6, y3, width=0.2, color='blue', label='死亡人数', edgecolor='k', linewidth=0.50)
plt.xticks(x + 0.15, x_label[:5], size=12)
plt.yticks(size=12)
plt.legend(loc=(1, 0.5), ncol=1, frameon=False)
plt.grid(axis="y", c=(217 / 256, 217 / 256, 217 / 256))

# 启动
plt.show()

Guess you like

Origin blog.csdn.net/qq_25976859/article/details/125712016