WedX - журнал о программировании и компьютерных науках

Как построить линейчатую диаграмму с накоплением временных рядов с помощью plotly python

У меня есть следующий фрейм данных в pandas df_res, мы можем вызвать его с помощью нескольких строк, как показано.

   date       time      weekday      team    recipient
 2019-08-30 14:49:22    Friday      team1   [email protected]
 2019-08-30 05:57:51    Friday      team1   notification@listcom
 2019-08-29 22:54:58    Thursday    team1   [email protected]
 2019-08-29 22:54:58    Thursday    team1   [email protected]
 2019-08-30 06:26:12    Friday      team1   [email protected]
 2019-09-05 14:16:22    Thursday    team1   [email protected]
 2019-09-05 14:16:22    Thursday    team1   [email protected]
 2019-09-04 22:54:59    Wednesday   team1   [email protected]
 2019-09-04 22:54:59    Wednesday   team1   [email protected]

Я хочу построить диаграмму, на которой по оси X отложена дата с июня 2019 года по октябрь 2019 года. Ось Y - это количество раз, когда получатель получал электронное письмо в заданную дату. Поэтому я хотел бы сделать столбчатую диаграмму с накоплением, где каждая стопка будет получателем. Например: на дату «2019-08-30» есть 2 письма для «[email protected]» и 1 для «notification @ 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

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

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 = ['[email protected]','[email protected]','[email protected]','[email protected]']
data = pd.DataFrame({
         'date':date,
         'recipient':rec
         })

Пример фрейма данных:

data
               date             recipient date_extract
0 2019-08-30 14:49:22  [email protected]   2019-08-30
1 2019-08-30 05:57:51  [email protected]   2019-08-30
2 2019-08-29 22:54:58        [email protected]   2019-08-29
3 2019-08-29 22:54:58           [email protected]   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    [email protected]          1
              [email protected]             1
2019-08-30    [email protected]    2

Поскольку new_data - это серия, вы можете напрямую передать ее параметру x или y в графическом режиме.

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

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

# Recipient distribution
recipient_frequency
Out[]: 
[email protected]    2
[email protected]          1
[email protected]             1
Name: recipient, dtype: int64

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

если у вас есть проблема с plotly - plots, обратитесь к некоторым руководствам здесь: https://github.com/SayaliSonawane/Plotly_Offline_Python

11.10.2019
  • Большое спасибо! Самое полезное - все шаги и ссылка с учебными пособиями. Я не вижу учебника по гистограмме в вашем гитхабе. Возможно, вы могли бы сделать этот вариант использования и предоставить его, чтобы он был полезен. Я обновил свой код, чтобы отобразить значения, но, хотя я могу видеть диапазон дат по оси x и количество адресов электронной почты по оси Y, ничего не отображается. 11.10.2019
  • Я добавил учебник по гистограмме. Надеюсь, это поможет. 15.10.2019
  • Прошу прощения, если это не помогло. github.com/SayaliSonawane/Plotly_Offline_Python/tree/master/ У меня есть создал новый учебник. Надеюсь, это поможет. 17.10.2019
  • Спасибо, Саяли. Я ценю усилия. Я решил свою проблему на прошлой неделе другим способом, немного обновлю пост. Но я уверен, что ваше руководство будет полезно для людей, которые читают эту страницу в поисках помощи по сюжету. 17.10.2019
  • @py_noob К настоящему времени у вас накопилось достаточно репутации, чтобы наградить других пользователей вашими голосами за. Если вы сочли усилия Sayalis полезными, большинство пользователей высоко оценит голосование. Как новый пользователь, вы даже можете получить значок за использование своих голосов. 17.10.2019
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

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

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]