[Python crawler] rastrea datos epidémicos de EE. UU. + Tabulación de la API de Tencent

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 listobjeto:

[
	{
    
    "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_adddiagnóstico recién confirmado en
confirmeste día ;: el diagnóstico acumulativo en
healeste día ;: la cura acumulada en
deadeste 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 puede confirm - heal - headobtener 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

C nCov

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

Supongo que te gusta

Origin blog.csdn.net/write_1m_lines/article/details/106479530
Recomendado
Clasificación