Directorio de artículos
Recientemente (el artículo fue escrito a las 18:40 el 2020/6/1), la situación de la epidemia ha mejorado en China, pero ha sido violenta en los Estados Unidos.
Este artículo rastreará y tabulará los datos de la epidemia de EE. UU. Proporcionados por Tencent .
1. Rastrear datos
Llamar a la interfaz de API
Interfaz: https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=FAutoCountryMerge
Datos observados:
{
...,
"data": {
"FAutoCountryMerge": {
...,
"美国": {
"showDash":false,
"list": [
{
"date":"01.28","confirm_add":0,"confirm":5,"heal":0,"dead":0},
...,
{
"date":"05.29","confirm_add":25069,"confirm":1768461,"heal":510713,"dead":103330},
{
"date":"05.30","confirm_add":23290,"confirm":1793530,"heal":519569,"dead":104542},
{
"date":"05.31","confirm_add":20350,"confirm":1816820,"heal":535238,"dead":105557},
{
"date":"06.01","confirm_add":20350,"confirm":1837170,"heal":599867,"dead":106195}
]
},
...
}
}
}
Como se muestra en el código anterior, para un país, para obtener sus datos epidémicos solo es necesario utilizar:
json['data']['FAutoCountryMerge']['<国名>']['list']
Para datos de EE. UU., Use:
json['data']['FAutoCountryMerge']['美国']['list']
Código
Los anteriores son todos productos secos, pero el siguiente es el real code
:
from requests import get
url = 'https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=FAutoCountryMerge'
data = get(url).json()['data']['FAutoCountryMerge']['美国']['list']
Procesamiento de datos
En python
, el resultado es un list
objeto:
[
{
"date":"01.28","confirm_add":0,"confirm":5,"heal":0,"dead":0},
...,
{
"date":"05.29","confirm_add":25069,"confirm":1768461,"heal":510713,"dead":103330},
{
"date":"05.30","confirm_add":23290,"confirm":1793530,"heal":519569,"dead":104542},
{
"date":"05.31","confirm_add":20350,"confirm":1816820,"heal":535238,"dead":105557},
{
"date":"06.01","confirm_add":20350,"confirm":1837170,"heal":599867,"dead":106195}
]
El objeto almacena los datos diarios de la epidemia en los Estados Unidos
date
,: la fecha desde el 28 de enero hasta el presente ;: el
confirm_add
diagnóstico recién confirmado en
confirm
este día ;: el diagnóstico acumulativo en
heal
este día ;: la cura acumulada en
dead
este día ;: el muerte en este día.
Filtrar datos
El filtrado de datos es muy importante.
confirm_add
(Recién diagnosticado ese día) Obviamente inútil, elimine- Se debe agregar uno
now_confirm
(diagnósticos existentes ese día), para que podamos ver claramente la cantidad de personas en tratamiento en los Estados Unidos.
Este valor se puedeconfirm - heal - head
obtener mediante .
fecha: la fecha del 28 de enero al presente
confirm_add: diagnósticos recién confirmados en este día
confirmar: diagnósticos acumulados en
ese día sanar: curas acumulativas en
ese día muerto: muertes acumuladas en
ese día now_confirm: diagnósticos confirmados existentes en ese día
Código
Debido a que el número de personas en el frente es demasiado pequeño, los datos afectarán la calidad del dibujo final.
Entonces, guardo los datos del día 35, por supuesto, si quieres usar todos los datos, puedes data[35:]
cambiarlos data
.
dates = []
confirms = []
now_confirms = []
heals = []
deads = []
for day_data in data[35:]:
dates.append(day_data['date'])
confirms.append(day_data['confirm'])
heals.append(day_data['heal'])
deads.append(day_data['dead'])
now_confirms.append(confirms[-1] - heals[-1] - deads[-1])
2. Dibujo
Artículo de referencia: https://www.cnblogs.com/lone5wolf/p/10870200.html
Como todavía soy un novato en el dibujo, publico el código directamente, por favor, comprenda. . .
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 绘制文本
plt.figure(figsize=(11.4, 7.7))
confirm_line, = plt.plot(dates, confirms, color='#8B0000')
now_confirm_line, = plt.plot(dates, now_confirms, color='red', linestyle=':')
heal_line, = plt.plot(dates, heals, color='green', linestyle='--')
dead_line, = plt.plot(dates, deads, color='black', linestyle='-.')
# 绘制图形
my_font = FontProperties(fname=r'fonts\msyh.ttc')
plt.legend(handles=[confirm_line, now_confirm_line, heal_line, dead_line], labels=['累计确诊', '现存确诊', '治愈', '死亡'], prop=my_font)
plt.xlabel('日期', fontproperties=my_font)
plt.ylabel('人数', fontproperties=my_font)
plt.title('美国2019-nCov疫情情况', fontproperties=my_font)
plt.gca().xaxis.set_major_locator(plt.MultipleLocator(7))
# 保存并显示统计图
plt.savefig('AmericaNCovData.png')
plt.show()
Imagen de resultado
3. Código completo
# -*- coding: utf-8 -*-
from requests import get
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
url = 'https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=FAutoCountryMerge'
data = get(url).json()['data']['FAutoCountryMerge']['美国']['list']
dates = []
confirms = []
now_confirms = []
heals = []
deads = []
for day_data in data[35:]:
dates.append(day_data['date'])
confirms.append(day_data['confirm'])
heals.append(day_data['heal'])
deads.append(day_data['dead'])
now_confirms.append(confirms[-1] - heals[-1] - deads[-1])
# 绘制文本
plt.figure(figsize=(11.4, 7.7))
confirm_line, = plt.plot(dates, confirms, color='#8B0000')
now_confirm_line, = plt.plot(dates, now_confirms, color='red', linestyle=':')
heal_line, = plt.plot(dates, heals, color='green', linestyle='--')
dead_line, = plt.plot(dates, deads, color='black', linestyle='-.')
# 绘制图形
my_font = FontProperties(fname=r'fonts\msyh.ttc')
plt.legend(handles=[confirm_line, now_confirm_line, heal_line, dead_line], labels=['累计确诊', '现存确诊', '治愈', '死亡'], prop=my_font)
plt.xlabel('日期', fontproperties=my_font)
plt.ylabel('人数', fontproperties=my_font)
plt.title('美国2019-nCov疫情情况', fontproperties=my_font)
plt.gca().xaxis.set_major_locator(plt.MultipleLocator(7))
# 保存并显示统计图
plt.savefig('AmericaNCovData.png')
plt.show()
Descarga de código: GitHub