Как мне сопоставить данные временных рядов с датами в виде столбцов, используя matplotlib в Python? - PullRequest
0 голосов
/ 27 марта 2020

В настоящее время я пытаюсь построить некоторые данные CSSEGISandData / COVID-19 , используя matplotlib / Python. У меня есть следующее:

#!/usr/bin/env python3

from pandas import read_csv, to_datetime
from matplotlib import pyplot

if __name__ == '__main__':

    data_file = 'COVID-19/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv'

    headers = [*read_csv(data_file, nrows=1)]

    global_fatal = read_csv(data_file, header=0, index_col=[0,1],
                            infer_datetime_format=1, parse_dates=True,
                            usecols=[c for c in headers if c != 'Long' and c != 'Lat'])

    columns = {}
    for col in global_fatal.columns:
        try:
            columns[col] = to_datetime(col, infer_datetime_format=True)
        except ValueError:
            pass
    global_fatal.rename(columns=columns, inplace=True)

    print(global_fatal.head())
    global_fatal.plot()
    pyplot.show()

Но я получаю даты в виде отдельных строк вместо регионов. Я пытался использовать другие посты в этом учебнике, чтобы либо переназначить ось, когда я строю график, либо изменить способ их перетаскивания с помощью аргументов на pandas.read_csv, но мне не удается получить данные, которые отображаются разумно (с указанием Стран в качестве линий, временных рядов / дат внизу / оси x и номера слева / оси y.

Screenshot of plot from above code

Здесь вывод из функции head(), поэтому похоже, что данные импортируются правильно:

python3 charts.py
                               2020-01-22  2020-01-23  2020-01-24  ...  2020-03-23  2020-03-24  2020-03-25
Province/State Country/Region                                      ...                                    
NaN            Afghanistan              0           0           0  ...           1           1           2
               Albania                  0           0           0  ...           4           5           5
               Algeria                  0           0           0  ...          17          19          21
               Andorra                  0           0           0  ...           1           1           1
               Angola                   0           0           0  ...           0           0           0

[5 rows x 64 columns]

1 Ответ

0 голосов
/ 27 марта 2020

По умолчанию вызов метода DataFrame.plot() приведет к тому, что каждый столбец будет иметь свою собственную серию на графике. Чтобы обойти это, вы можете просто переместить фрейм данных так, чтобы столбцы стали странами, а ваша новая ось X - это дата:

df = pd.read_csv('covid19-deaths.csv')

# Select subset of columns with dtype=int (all death columns)
df = df.set_index(['Country/Region', 'Province/State']).select_dtypes(int)

# Plot the first 10 regions
df.head(10).T.plot()

Covid-19 deaths plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...