Как собрать данные по оси Y и построить линейный график в Python - PullRequest
0 голосов
/ 02 мая 2018

У меня есть данные, как показано ниже. Я хочу построить простой линейный график в Python, где позиции на оси X и общий объем продаж на оси Y. Общий объем продаж - это совокупный объем продаж на уровне позиции.

Кто-нибудь может помочь с этим?

Item    Date    Sales
Item1   4/25/2018   55
Item2   4/25/2018   21
Item3   4/25/2018   50
Item4   4/25/2018   58
Item5   4/25/2018   81
Item6   4/25/2018   79
Item7   4/25/2018   61
Item8   4/25/2018   37
Item9   4/25/2018   51
Item10  4/25/2018   53
Item1   4/26/2018   27
Item2   4/26/2018   28
Item3   4/26/2018   26
Item4   4/26/2018   95
Item5   4/26/2018   15
Item6   4/26/2018   89
Item7   4/26/2018   42
Item8   4/26/2018   21
Item9   4/26/2018   39
Item10  4/26/2018   67
Item1   4/27/2018   14
Item2   4/27/2018   45
Item3   4/27/2018   35
Item4   4/27/2018   68
Item5   4/27/2018   76
Item6   4/27/2018   63
Item7   4/27/2018   73
Item8   4/27/2018   61
Item9   4/27/2018   59
Item10  4/27/2018   93
Item1   4/28/2018   27
Item2   4/28/2018   63
Item3   4/28/2018   55
Item4   4/28/2018   73
Item5   4/28/2018   58
Item6   4/28/2018   90
Item7   4/28/2018   67
Item8   4/28/2018   72
Item9   4/28/2018   64
Item10  4/28/2018   98

С уважением, Филип

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Используйте панд,

import pandas as pd

df = pd.read_csv('yourfile.csv')

df_grp = df.groupby('Item')['Sales'].sum()
df_grp = df_grp[df_grp.index.str.split('Item').str[1].astype(int).argsort()]
df_grp.plot()
plt.xticks(np.arange(df_grp.shape[0]), df_grp.index, rotation=90)

Выход:

enter image description here

0 голосов
/ 06 мая 2018

Существует также возможность делать это без панд, только с помощью numpy. Начиная с массива items, содержащего информацию о столбце Item и sales для продажи, код будет выглядеть следующим образом:

u, f = np.unique(items, return_inverse=True) # returns unique array of occurences and the indices to retrieve the original items array.
# i.e. u, f = np.unique([1,2,3,1,1,2,1], return_inverse=True) returns
# u: [1,2,3]
# f: [0 1 2 0 0 1 0] such that u[f]==[1,2,3,1,1,2,1]
imgs = np.bincount(f, sales) 
inds = np.argsort(np.char.lstrip(u,'Item').astype(int))
plt.plot(np.arange(len(u)),imgs[inds])
plt.xticks(np.arange(len(u)),u[inds])

Примечание. Предполагается, что входные массивы имеют тип dpper с проппером. Если это не так, то они должны быть преобразованы в правильный тип d с помощью .astype()

0 голосов
/ 03 мая 2018

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

# df['Date'] = pd.to_datetime(df['Date']) # For the desired plot it is not necessary but
                                          # it is a good idea, and allow plots by date too 
df.groupby(by='Item').sum().plot.bar(y='Sales',color='g')

, который генерирует следующий график:

enter image description here

Чтобы отсортировать элементы от 1 до 10 по цифре, этот ответ можно использовать перед построением графика.

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