боке год за годом линейный график процедура

как лучше всего делать годовые линейные графики с ежедневными данными в боке?

в настоящее время я добавляю строку даты (произвольно для 2016 года) и столбец года в исходный фрейм данных ежедневных значений. Затем переходим к широким данным по годам, заполняя NA (отсутствующие данные различаются по годам), а затем строим график боке построчно по столбцам года:

Скажем, у меня есть таблица данных за три года:

Столбец: Дата и значение

df = df.set_index('Date')

df['dateline'] = df.index.to_series().dt.strftime('%d-%b-2016')
df['year'] = df.index.to_series().dt.strftime('%Y')

pv = pd.pivot_table(df, index=df['dateline'], columns=df.index.year,
                    values='value', aggfunc='sum')

pv.index = pd.to_datetime(pv.index, format = '%d-%b-%Y' )
pv.sort_index(inplace=True)
pv = pv.apply(lambda x: x.fillna(method = 'ffill' , limit = 4))


p.line(x= pv.index , y = pv[2017], line_width=1.5, line_color = "red" ,legend = '2017')
p.line(x= pv.index , y = pv[2016], line_width=1.5, line_color = "blue" ,legend = '2016')
p.line(x= pv.index , y = pv[2015], line_width=1.5, line_color = "green" , legend = '2015')
p.line(x= pv.index , y = pv[2014], line_width=1.5, line_color = "orange" ,legend = '2014')

У меня есть вопрос, можно ли это еще оптимизировать? Я хотел бы использовать зависание в будущем, так что было бы лучше всего настроить? Следующим шагом будет столбец циклов по годам, но нужно ли мне идти по этому пути?

Исходя из R, я хотел бы сохранить данные в длинном формате и сделать что-то вроде:

p.line(df, x='dateline' , y = 'value' , color = 'year')

Спасибо за советы.


person python_analysis    schedule 17.04.2017    source источник


Ответы (1)


Одним из решений является взять ваши даты и создать столбец года и столбец дня года, используя средства доступа .dt.

Убедитесь, что df['date'] является столбцом даты и времени.

df['year'] = df['date'].dt.year
df['dayofyear'] = df['date'].dt.dayofyear

df.head()

            year     value  dayofyear
date                                 
2014-01-31  2014  1.964372         31
2014-02-28  2014  2.386228         59
2014-03-31  2014  2.695743         90
2014-04-30  2014  2.712133        120
2014-05-31  2014  2.033271        150


from bokeh.charts import Line
p = Line(df,x='dayofyear', y='value',color='year')
show(p)

введите здесь описание изображения

person Scott Boston    schedule 18.04.2017
comment
отлично, спасибо. Можно ли было бы тогда отформатировать ось x от dayofyear до «% d-% b» (день, месяц) и сделать тот же формат доступным для инструмента наведения? - person python_analysis; 18.04.2017
comment
Да, вы должны иметь возможность маркировать эти галочки по своему усмотрению. Если вы не возражаете и нашли это полезным, не могли бы вы принять этот ответ. - person Scott Boston; 18.04.2017
comment
@python_analysis см. этот пост SO . - person Scott Boston; 18.04.2017
comment
после принятия ответа я вижу следующую ошибку: строка () получила несколько значений для аргумента «x». Та же ошибка, которую я получил, когда попробовал то же решение, что и ваше, но с линией даты (% d-% b) вместо дня года. Это потому, что у меня нет одинакового количества значений для каждой группы? В этом случае мне нужно пройти маршрут сводной таблицы и построить график по столбцам - person python_analysis; 18.04.2017
comment
извините, линия даты (%d-%b-2016) вместо дня года - person python_analysis; 18.04.2017
comment
плохо начинать новый вопрос - person python_analysis; 18.04.2017