Найти в Дзене
PROКотики и не только

ABC анализ в Python + Pandas

Всем привет. Прошу строго не судить. Это моя первая публикация. Примерно год назад увлекся изучением ЯП Python, учился самостоятельно на онлайн курсах и бесплатно. Не буду скрывать, что хотел стать пусть не кодером, но каким-нибудь захудалым айтишником. Работаю в продажах и давно, сказать, что это мне надоело - это ничего не сказать. В итоге - я все еще учусь и выбрал курс на аналитику, тем более, что в продажах всегда есть, что проанализировать, развернуть, свернуть данные, отсортировать, отфильтровать, сгруппировать и агрегировать, вывести по итогу какие-то метрики. В общем, применение полученных навыков в аналитике - это, можно сказать, мое хобби в данный момент и, может быть, то чем я буду впоследствии профессионально заниматься. Естественно, что саму аналитику еще то же изучать и изучать. И так, решил я собрать данные по продажам за несколько лет и сделать ABC анализ клиентов, посмотреть как качественно менялись клиенты нашего отдела при существующей и навязанной руков

Всем привет. Прошу строго не судить. Это моя первая публикация.

Примерно год назад увлекся изучением ЯП Python, учился самостоятельно на онлайн курсах и бесплатно. Не буду скрывать, что хотел стать пусть не кодером, но каким-нибудь захудалым айтишником. Работаю в продажах и давно, сказать, что это мне надоело - это ничего не сказать. В итоге - я все еще учусь и выбрал курс на аналитику, тем более, что в продажах всегда есть, что проанализировать, развернуть, свернуть данные, отсортировать, отфильтровать, сгруппировать и агрегировать, вывести по итогу какие-то метрики. В общем, применение полученных навыков в аналитике - это, можно сказать, мое хобби в данный момент и, может быть, то чем я буду впоследствии профессионально заниматься. Естественно, что саму аналитику еще то же изучать и изучать.

И так, решил я собрать данные по продажам за несколько лет и сделать ABC анализ клиентов, посмотреть как качественно менялись клиенты нашего отдела при существующей и навязанной руководством ценовой благотвори... политике.

Как это сделать в Excel я нашел, но мне было важно написать скрипт, что бы в любой момент, выгруженный из 1С отчет, я мог быстро преобразовать в таблицу с группировкой клиентов по категориям.

Как сделать такую группировку в Excel, я нашел тут Применение ABC-анализа в Microsoft Excel и, применив эти сведения, сделал так:

продажи в 2015 г.
продажи в 2015 г.

Данные были предварительно отсортированы по сумме продаж от максимум к минимум. Отсортированный датафрейм сохранен как dfsale

dfsale = df.sort_values('sale', ascending=False)

вычислим долю суммы закупок каждого клиента в сумме общих продаж. Создадим колонку "dol" (ну, типа - доля )) и рассчитаем для нее значения, как указано в статье выше

dfsale['dol'] = dfsale['sale']/dfsale['sale'].sum()

Накопленную долю рассчитаем в колонке 'dolpr' в которой будет отражаться накопленная доля продаж, в несколько строк:

присвоим строкам колонки значения строк колонки 'dol'

dfsale['dolpr'] = dfsale['dol']

и, к моему сожалению, совсем "не пандовским" методом заполним значения строк, всех кроме нулевой

for i in range(1,len(dfsale.index)):
dfsale['dolpr'].iloc[i] = dfsale['dol'].iloc[i] + dfsale['dolpr'].iloc[i-1]

Буду рад, если кто то подскажет "пандовский" метод заполнения.

Ну, и наконец, создадим колонку 'group', в которой и будет отражен один из трех типов, характеризующий наших клиентов

Заполним, сначала, все строки колонки категорией С

dfsale['group'] = "C"

Затем, в соответствии заданным условиям, присвоим строкам категории А или В

dfsale['group'][dfsale.dolpr <= 0.8] = "A"
dfsale['group'][(dfsale.dolpr <= 0.95) & (dfsale.group != "A")] = "B"

Получили необходимую сегментацию

-2

Спасибо всем, кто дочитал и всем тем, кто начинал, но не осилил.

С уважением, Владимир.