Python: наклонить диаграмму Pyplot с помощью панд pivot_table - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть CSV, выступающий в качестве файла журнала / дБ. Он структурирован так:

User1,Client3,Ops/Admin,19:33:46,19:33:57,178.054662,Notes,05/09/2018
User1,Client2,Ops/Admin,20:33:46,20:33:57,449.272576,Notes,05/09/2018
User1,Client3,Support Management,21:33:46,21:33:57,1073.425258,Notes,05/09/2018
User1,Client2,Support Management,22:33:46,22:33:57,290.640219,Notes,05/09/2018
User1,Client3,Ops/Admin,23:33:46,23:33:57,402.223927,Notes,05/09/2018
User1,Client1,Support Management,00:33:46,00:33:57,761.266062,Notes,05/09/2018
User1,Client1,Business Developement,01:33:46,01:33:57,1623.303656,Notes,05/09/2018

Я хочу составить линейный график, используя matplotlib.pyplot, который суммирует общую сумму col [5] для каждого клиента, для каждой даты. То есть другая линия на том же графике, где ось x - это дата (col [7]), а ось y - сумма значения для этой даты (col [5]).

Я пользуюсь пандами, это моя отправная точка:

import matplotlib.pyplot as plt
import pandas as pd
import datetime, csv

csv_file = pd.read_csv("file.csv",
                           names = ['USER',
                                   'CLIENT',
                                   'TYPE',
                                   'START',
                                   'END',
                                   'DURATION',
                                   'NOTES',
                                   'DATE'])

Затем я попытался сделать таблицу в виде сводной таблицы:

date_pivot = csv_file.pivot_table('DURATION', index='CLIENT', columns='DATE')

или с помощью функции .groupby ():

dategroup = csv_file.groupby(['CLIENT','DATE'], as_index = False).sum()

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

Проблема заключается в том, что из-за отсутствия попыток (...) я не могу понять, как отобразить суммированные значения CLIENT по DATE на matplotlib.pyplot.plot () ... Вы можете помочь?

Мои единственные мысли, которые у меня есть до сих пор:

  • Должен ли я каким-то образом переставить таблицы так, чтобы вместо них клиенты проходили по оси Y (/ index) и датировали вдоль оси x (/ header)?
  • Требуется ли какая-либо функция определения итерации с использованием .loc ()?

Любая помощь по этому вопросу будет принята с благодарностью, поэтому спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018
import numpy as np
csv_file=pd.read_csv('file.csv',names =   ['USER',
                               'CLIENT',
                               'TYPE',
                               'START',
                               'END',
                               'DURATION',
                               'NOTES',
                               'DATE'],parse_dates=['DATE'])
csv_file.pivot_table('DURATION',index='DATE',columns='CLIENT',aggfunc=np.sum)
  • Ось X / индекс / ДАТА
  • Несколько осей Y / столбцы / КЛИЕНТ
  • Функция агрегирования = сумма
0 голосов
/ 09 сентября 2018

Это делит результаты суммирования по клиенту и дате на группы, основанные на клиенте, и отображает отдельную строку для каждого клиента:

import matplotlib.pyplot as plt
import pandas as pd

df['DATE'] = pd.to_datetime(df['DATE'])
aggregated = df.groupby(['CLIENT', 'DATE']).sum().reset_index()

fig, ax = plt.subplots()

for key, group in aggregated.groupby(['CLIENT']):
    ax = group.plot(ax=ax, kind='line', x='DATE', y='DURATION', label=key)

plt.show()

Это основано на уловке группового черчения из этого ответа.

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