Чтобы получить график временных рядов в pandas, ваш индекс должен быть дата-время, а не столбцы. И поскольку их исходные данные поступили с датами в виде столбцов, необходимо изменить их форму:
melt
, чтобы преобразовать исходные данные из широкого в длинный формат с Дата в качестве столбца; pivot_table
для агрегирования и преобразования в ширину для страны в виде столбцов с Дата в качестве индекса.
Затем вызовите DataFrame.plot
, как и предполагалось:
df_deaths = pd.read_csv("https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/"
"csse_covid_19_time_series/time_series_covid19_deaths_global.csv")
# MELT WIDE DATA TO LONG
df_deaths = (df_deaths.melt(id_vars = ['Province/State', 'Country/Region', 'Lat', 'Long'],
var_name = 'Date', value_name = 'Deaths')
.assign(Date = lambda x: pd.to_datetime(x['Date'])))
# PIVOT AGGREGATION TO GENERATE DATE INDEX BY COUNTRY COLUMNS
df_pvt = df_deaths.pivot_table(index='Date', columns='Country/Region',
values='Deaths', aggfunc='sum')
df_pvt.plot(kind='line')
plt.show()
И поскольку выше приведен такой ошеломляющий заговор почти со всеми странами мира, рассмотрите возможность нарезки только нескольких стран, таких как затронутые топ-10, и интеграции объектов matplotlib Axes
для лучшего контроля над выход:
top_countries = (df_deaths.groupby('Country/Region')['Deaths'].sum()
.sort_values(ascending=False))
fig, ax = plt.subplots(figsize=(15,6))
(df_pvt.reindex(top_countries.index.values[:10], axis = 'columns')
.plot(kind='line', ax = ax))
plt.show()