Я изучал различные наборы данных COVID-19 и проводил анализ. Ниже приведена «очищенная» версия моего кода. Я работал в Google Colab, но должен работать на любом компьютере с доступными (проверенными) модулями.
Вопросы заранее:
Как создать функцию моей методики извлечения данных, как я делаю ниже для каждой страны или штата США? Моя техника обозначена ниже с помощью Моя техника
Как отобразить (пузырьковый график) данные на географических pandas картах? Я хотел бы создать новую карту для каждой даты. Затем создайте mov ie, но у меня не так уж далеко.
Импорт модулей
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
#%matplotlib inline
import plotly.express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots
from IPython import display
from ipywidgets import interact, widgets
from datetime import datetime, timedelta
#from google.colab import files
Некоторые параметры настройки
chartcol='red'
plt.rcParams['figure.figsize'] = [15, 5]
Я использую набор данных Центра системной науки и техники Университета Джона Хопкинса (JHU CSSE), который обновляется каждую ночь (ежедневно?).
# Get the data
#Read Data for Cases, Deaths and Recoveries
ConfirmedCases_raw=pd.read_csv('https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Confirmed.csv')
Deaths_raw=pd.read_csv('https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Deaths.csv')
Recoveries_raw=pd.read_csv('https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_19-covid-Recovered.csv')
plt.rcParams['figure.figsize'] = [15, 5]
Здесь я создаю список строк даты, которые соответствуют именам столбцов данных временных рядов. Список заканчивается «вчера», потому что набор данных не обновляется до «сегодня».
#This produces a list of strings that matches the column names in the COVID-10 time series.
# Will use it to extract data to build country and state data later.
today = datetime.now()
today2=date.today()
yesterday = today2 - timedelta(days = 1)
covid_epoch=date(2020, 1, 22)
delta = yesterday - covid_epoch
timeline=[]
for i in range(delta.days + 1):
#day = sdate + timedelta(days=i)
day = covid_epoch + timedelta(days=i)
timeline.append(day.strftime("%-m/%-d/%y"))
Теперь я использую свою «технику», чтобы извлечь данные временных рядов так, как я могу их использовать. Я хотел бы иметь возможность сделать это с помощью функции.
#Extracts data from csv file into time column and value column
#Creates a list of values from each time column
#Consider using melt to do this. How?
#Create a function to do this. How?
Моя техника: Блок ниже - это то, что я хочу превратить в функцию
time = [];value = [];country=[];province= []
col_value = list(ConfirmedCases_raw.columns)
for i in timeline:
time.append(i)
value.append(ConfirmedCases_raw[i].sum())
Создание базы данных для всех случаев по всему миру. Я заполняю фрейм данных значениями сумм для всех стран для «мировых» фреймов данных, «времени» и «значения».
world = pd.DataFrame({'Timeline':time,'Covid-19 impact':value})
#Plot the world data
plt.plot(world['Timeline'],world['Covid-19 impact'])
plt.xticks(rotation=45);
plt.suptitle('World COVID-19 Confirmed Cases', fontsize=20)
plt.xlabel('Date', fontsize=18);
plt.ylabel('Count', fontsize=16);
plt.grid(color='b', ls = '-.', lw = 0.25)
Снова , сделайте это, чтобы создать американский фрейм данных. Отфильтрованные Подтвержденные случаи для Соединенных Штатов
us_confirmed_raw=ConfirmedCases_raw[ConfirmedCases_raw['Country/Region']=='US']
Вот мой блок извлечения данных снова:
time = [];value = [];country=[];province= []
col_value = list(us_confirmed_raw.columns)
for i in timeline:
time.append(i)
value.append(us_confirmed[i].sum())
И создание кадра данных и нанесение данных США
us_confirmed = pd.DataFrame({'Timeline':time,'Covid-19 impact':value})
plt.plot(us_confirmed['Timeline'],us_confirmed['Covid-19 impact'])
plt.xticks(rotation=45);
plt.suptitle('USA COVID-19 Confirmed Cases', fontsize=20)
plt.xlabel('Date', fontsize=18);
plt.ylabel('Count', fontsize=16);
plt.grid(color='r', ls = '-.', lw = 0.55)
![enter image description here](https://i.stack.imgur.com/h4nuz.png)
И снова для Нью-Мексико.
nm_confirmed=us_confirmed_raw[us_confirmed_raw['Province/State']=='New Mexico']
time = [];value = [];country=[];province= []
col_value = list(nm_confirmed.columns)
for i in timeline:
time.append(i)
value.append(nm_confirmed[i].sum())
nm = pd.DataFrame({'Timeline':time,'Covid-19 impact':value})
plt.plot(nm['Timeline'],nm['Covid-19 impact'],linestyle='--', marker='o')
plt.xticks(rotation=45);
plt.suptitle('New Mexico COVID-19 Confirmed Cases', fontsize=20)
plt.xlabel('Date', fontsize=18);
plt.ylabel('Count', fontsize=16);
plt.grid(color='r', ls = '-.', lw = 0.25)
Ваше право, может быть, слишком много примеров.
Моя следующая проблема - создание карт. Ниже я использую geo pandas, чтобы создать карту и нанести данные.
!pip install geopandas;
import geopandas
поместите данные Нью-Мексико в географический pandas фрейм данных:
gdf = geopandas.GeoDataFrame(
nm_confirmed, geometry=geopandas.points_from_xy(nm_confirmed.Long, nm_confirmed.Lat))
и нанесите местоположение Нью-Мексико. Я не могу понять, как отобразить данные COVID-19 на этой карте.
# Creates a map of the world
# Show the location of new mexico
world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))
ax = world[world.continent == 'North America'].plot(
color='white', edgecolor='black')
gdf.plot(ax=ax, color='red')
![enter image description here](https://i.stack.imgur.com/0fVsf.png)