У меня есть 8 лет ежедневных данных. Я хочу построить график всех значений за день недели, за недели в году и за месяц в году. Как я могу это сделать? - PullRequest
0 голосов
/ 04 января 2019

Я хочу иметь возможность визуализировать свои данные по дням недели, по неделям в году и по месяцам. Я был в состоянии визуализировать свои данные в год. Но когда я настраиваю код для Ежемесячно и еженедельно, ось X остается на уровне года.

У меня 8 лет больничных записей. Мои данные организованы в 2 столбца. Столбец № 1 - это мой столбец «даты», начиная с 2010-03-10 и заканчивая 2017-12-31. Столбец № 2 - это мой столбец значений. В этой колонке указано, приходил ли мне пациент на лечение или нет. Значения в столбце 2 - это 0 или x чисел. Например, 0 означает, что у меня нет пациентов x означает, что у меня было x количество пациентов. Когда я пытаюсь графически представить эти данные, он учитывает только самое большое число х, которое у меня было за неделю.

df=pd.read_csv('Data 3.csv', parse_dates=["Dates"], index_col="Dates")
# create the plot space upon which to plot the data
fig, ax = plt.subplots(figsize = (10,10))

# add the x-axis and the y-axis to the plot
ax.plot(df.resample('Y').sum()['Total # Events'],color = 'blue')

# rotate tick labels
plt.setp(ax.get_xticklabels(), rotation=45)

# set title and labels for axes
ax.set(xlabel="Years",
ylabel="Total # of Events",
title="Yearly Treatment Events from 2010-2017");

График результата

Итак, я получаю правильную графическую фигуру. Но когда я меняю (df.resample ('Y'). Sum () на ('M') с ('Y') для месячных, я получаю график, который отображает годовую ось X и значения. Как я могу изменить это, чтобы получить ежемесячные оси X и еженедельные оси X?

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Итак, как я и предполагал, это было легко, учитывая доступные даты.

Итак, сначала создайте новые столбцы, обозначающие, к какой неделе, году и месяцу относится дата. Для этого вам нужно установить Dates в качестве индекса и parse_dates при чтении CSV:

data=pd.read_csv('Data 3.csv',index_col='Dates',parse_dates=True)

Теперь вы можете создать три столбца:

data['Week']=data.index.week
data['Month']=data.index.month
data['Year']=data.index.year

Это даст вам такие данные, как:

            Total # Events  Week  Year  Month
Dates                                        
2010-03-10               0    10  2010      3
2010-03-11               4    10  2010      3
2010-03-12               0    10  2010      3
2010-03-13               0    10  2010      3
2010-03-14               0    10  2010      3
2010-03-15               0    11  2010      3
2010-03-16               0    11  2010      3
2010-03-17               0    11  2010      3
2010-03-18               2    11  2010      3
2010-03-19               0    11  2010      3

Вместо того, чтобы делиться для вас целым кодом, я просто покажу результаты Года и как это работает, отдохните, я надеюсь, что вы можете сделать это самостоятельно, иначе вы ничего не узнаете.

Итак, следующий шаг:

Yearwise=data.groupby(by=('Year')).sum()['Total # Events']

И это все, сюжет:

plt.figure(figsize=(14,10))
Yearwise.plot()

И график, которым вы поделились, тоже: enter image description here

Помните, что для Месяца вам понадобится год и месяц для группировки, иначе будет сгруппировано все месяцы с одинаковыми номерами. Я имею в виду что-то вроде этого -

by=('Year','Month'))

Отдохни, я уверен, ты сможешь понять это самостоятельно. Тем не менее, если вы получаете ошибку, дайте мне знать.

0 голосов
/ 04 января 2019

Следуя руководству на matplotlib.org, озаглавленному «Метки меток даты» , я предлагаю поиграться с этими параметрами:

# format the ticks
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(yearsFmt)
ax.xaxis.set_minor_locator(months)

Попробуйте, например, добавить в код только эту строку после ax.plot():

ax.xaxis.set_major_locator(months)

Имейте в виду, что, хотя вы производите повторную выборку своих данных, они не изменяют даты начала или окончания. Ваш график будет выглядеть очень похоже, за исключением того, что теперь он будет более плавным; у него будет не 7 баллов, а 7 * 12 баллов.

...