Как построить линейчатую диаграмму с временными рядами, используя график Python - PullRequest
1 голос
/ 11 октября 2019

У меня есть следующий фрейм данных в pandas df_res, мы можем вызвать его с несколькими строками, как показано. до октября 2019 года. Ось Y - это количество раз, которое получатель получал по электронной почте за определенную дату. Поэтому я хотел бы сделать гистограмму с накоплением, где каждый стек будет получателем. Например: на дату «2019-08-30» есть 2 письма для «building308@list.com» и 1 для «уведомлений @ listcom». У меня будет два стека на этот день. Я также хочу иметь возможность предоставить список нескольких получателей, чьи адреса электронной почты меня интересуют. Я написал приведенный ниже код, чтобы сделать то же самое, но я пытаюсь понять, как подсчитать количество получателей. Вместо этого, если счет является списком или столбцом, я могу построить график, но это бесполезно для меня, так как массив данных огромен и содержит более тысячи строк.

import plotly.graph_objects as go
import datetime


x = [datetime.datetime(year=2019, month=06, day=4),
 datetime.datetime(year=2019, month=11, day=5),
 datetime.datetime(year=2019, month=13, day=6)]
y = [2, 2, 5]

 fig = go.Figure(data=[go.Bar(x=x, y=y)])
 # Use datetime objects to set xaxis range
 fig.update_layout(xaxis_range=[datetime.datetime(2019, 06, 17),
                           datetime.datetime(2019, 10, 7)])
 fig.show()

ОБНОВЛЕНО ДЛЯ ДОБАВЛЕНИЯ КОДА: 10/11/ 2019 # построение графиков значений

    trace = go.Bar(
           x=[datetime.datetime(year=2019, month=8, day=1),
              datetime.datetime(year=2019, month=10, day=1)],
           y=[res_test['recipients'].value_counts()],
           name='Plot the values '
          )

      data = [trace]
      layout = go.Layout(title="Emails per volunteer", xaxis= 
                 {'title':'Date'}, yaxis={'title':'Email count'},
               barmode='stack'
                )


       fig = go.Figure(data=data, layout=layout)
       py.iplot(fig)

Это как передать значение на ось Y?

1 Ответ

2 голосов
/ 11 октября 2019

Подготовка данных

date =['2019-08-30 14:49:22',
       '2019-08-30 05:57:51',
       '2019-08-29 22:54:58',
       '2019-08-29 22:54:58',
       ]
rec = ['building308@list.com','building308@list.com','emcor@list.com','pqr@xyz.com']
data = pd.DataFrame({
         'date':date,
         'recipient':rec
         })

Пример кадра данных:

data
               date             recipient date_extract
0 2019-08-30 14:49:22  building308@list.com   2019-08-30
1 2019-08-30 05:57:51  building308@list.com   2019-08-30
2 2019-08-29 22:54:58        emcor@list.com   2019-08-29
3 2019-08-29 22:54:58           pqr@xyz.com   2019-08-29

# Extract date from date_timestamp
data['date'] = pd.to_datetime(data['date'])
data = data.assign(date_extract = [str(i.date()) for i in data['date']])

Получить количество адресов электронной почты: Всего сообщений в день

new_data = data.groupby(by=['date_extract','recipient']).size()
print(new_data)

date_extract  recipient           
2019-08-29    emcor@list.com          1
              pqr@xyz.com             1
2019-08-30    building308@list.com    2

Поскольку новые_данные являются сериями, вы можете напрямуюпередать его параметру x или y в заговоре.

Всего получателей

recipient_frequency = data['recipient'].value_counts()

# Recipient distribution
recipient_frequency
Out[]: 
building308@list.com    2
emcor@list.com          1
pqr@xyz.com             1
Name: recipient, dtype: int64

# Total recipient count
len(recipient_frequency)
Out[]: 3

Если у вас есть проблема с сюжетными графиками, обратитесь к некоторым учебникам здесь: https://github.com/SayaliSonawane/Plotly_Offline_Python

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