import streamlit as st import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt st.sidebar.title('Выберите анализируемый период') choice = st.sidebar.selectbox('Какой период вы хотите выбрать ? ', ("Февраль 2022","Февраль 2023",'Резюме')) st.sidebar.write('Вы выбрали: ', choice) if choice == 'Февраль 2022': dataset=pd.read_excel(r'Feb202222.xlsx') dataset = dataset.drop_duplicates() dataset['Разница'] = dataset['Запрашиваемая скидка, %'] - dataset['Согласованная скидка, %'] st.header("Аналитика по КП") st.write(f'Общее количество КП за анализируемый период - {dataset.shape[0]}') men_array = dataset['Менеджер О.П.'].unique() men_requests = {} for i in men_array: men_requests.update({f"{i}": dataset.loc[dataset["Менеджер О.П."] == i].shape[0]}) men_requests = dict(sorted(men_requests.items(), key=lambda item: item[1])) bar_list = list(men_requests.keys()) bar_vals = list(men_requests.values()) sns.set(rc={'figure.figsize': (19, 10)}, font_scale=0.65) y = sns.barplot(x=bar_list, y=bar_vals) y.bar_label(y.containers[0]) fig = y.get_figure() fig.savefig(f'{choice}firstdraw.png') st.image(f'{choice}firstdraw.png', caption='Количество КП отправленных менеджером Отдела продаж за месяц') plt.clf() dataset.loc[dataset['Обратная связь от клиента'] != "Клиент позицию взял"].shape[0] pie_data = [dataset.loc[dataset['Обратная связь от клиента'] == "Клиент позицию взял"].shape[0], dataset.loc[dataset['Обратная связь от клиента'] != "Клиент позицию взял"].shape[0]] pie_lables = ['Клиент взял позицию', 'Клиент не взял позицию'] colors_pie = sns.color_palette('bright')[1:5] plt.rcParams.update({'font.size': 22}) plt.pie(pie_data, labels=pie_lables, colors=colors_pie, autopct='%.0f%%', textprops={'fontsize': 22}) plt.savefig(f'{choice}seconddraw.png') st.image(f'{choice}seconddraw.png', caption='Реакция клиентов на КП') plt.clf() data_discount = dataset.loc[ (dataset['Обратная связь от клиента'] == "Клиент позицию взял") & (dataset['Согласованная скидка, %'] != 0)] data_discount = data_discount[['Менеджер О.П.', 'Согласованная скидка, %']].groupby( ['Менеджер О.П.']).mean().dropna() data_discount = data_discount.sort_values(by='Согласованная скидка, %', ascending=False) data_discount = data_discount.to_dict()['Согласованная скидка, %'] discount_list = list(data_discount.keys()) discount_vals = list(data_discount.values()) x = sns.barplot(x=discount_list, y=discount_vals) x.bar_label(x.containers[0]) thirdfig = x.get_figure() thirdfig.savefig(f'{choice}thirddraw.png') st.image(f'{choice}thirddraw.png', caption='Какой процент скидки в среднем запрашивает Менеджер О.П.') plt.clf() categories = dataset[['ТГ', "Количество в запросе, шт"]].groupby(['ТГ']).sum().sort_values( by='Количество в запросе, шт', ascending=False) categories = categories.to_dict()['Количество в запросе, шт'] cats_list = list(categories.keys()) cats_vals = list(categories.values()) cols = ['red' if x > 400 else 'green' for x in cats_vals] sns.set(rc={'figure.figsize': (19, 10)}, font_scale=0.80) z = sns.barplot(x=cats_vals, y=cats_list, estimator=np.sum, palette=cols) z.bar_label(z.containers[0]) fourfig = z.get_figure() fourfig.savefig(f'{choice}fourdraw.png') st.image(f'{choice}fourdraw.png', caption='Суммарное количество позиций, поступивших по КП. Суммарно по товарным группам') plt.clf() men_array = dataset['ТГ'].unique() men_requests = {} for i in men_array: men_requests.update({f"{i}": dataset.loc[dataset["ТГ"] == i].shape[0]}) men_requests = dict(sorted(men_requests.items(), key=lambda item: item[1])) bar_list = list(men_requests.keys()) bar_vals = list(men_requests.values()) sns.set(rc={'figure.figsize': (19, 10)}, font_scale=0.65) y = sns.barplot(x=bar_vals, y=bar_list, palette=['red']) y.bar_label(y.containers[0]) fivefig = y.get_figure() fivefig.savefig(f'{choice}fivedraw.png') st.image(f'{choice}fivedraw.png', caption='Количество поступивших КП по товарным группам') plt.clf() ex = {} for vb in dataset['Тип согласования'].unique(): ex.update({vb: dataset.loc[dataset['Тип согласования'] == f'{vb}'].shape[0]}) bar_list = list(ex.keys()) bar_vals = list(ex.values()) q = sns.barplot(y=bar_vals, x=bar_list) sixfig = q.get_figure() sixfig.savefig(f'{choice}sixdraw.png') st.image(f'{choice}sixdraw.png', caption='Типы КП на анализируемый период') plt.clf() dif_data = [dataset.loc[dataset['Разница'] == 0].shape[0], dataset.shape[0] - dataset.loc[dataset['Разница'] == 0].shape[0]] dif_lables = ['Запрашиваемая и Согласованная скидки совпадают', 'Запрашиваемая и Согласованная скидки НЕ совпадают'] other_colors_pie = sns.color_palette('bright')[0:4] plt.rcParams.update({'font.size': 22}) plt.pie(dif_data, labels=dif_lables, colors=other_colors_pie, autopct='%.0f%%', textprops={'fontsize': 22}) plt.savefig(f'{choice}sevendraw.png') st.image(f'{choice}sevendraw.png', caption='Совпадение/ НЕ совпадение Согласованной и Запрашиваемой скидок') elif choice == 'Февраль 2023': dataset = pd.read_excel(r'Feb202322.xlsx') dataset = dataset.drop_duplicates() dataset['Разница'] = dataset['Запрашиваемая скидка, %'] - dataset['Согласованная скидка, %'] st.header("Аналитика по КП") st.write(f'Общее количество КП за анализируемый период - {dataset.shape[0]}') men_array = dataset['Менеджер О.П.'].unique() men_requests = {} for i in men_array: men_requests.update({f"{i}": dataset.loc[dataset["Менеджер О.П."] == i].shape[0]}) men_requests = dict(sorted(men_requests.items(), key=lambda item: item[1])) bar_list = list(men_requests.keys()) bar_vals = list(men_requests.values()) sns.set(rc={'figure.figsize': (19, 10)}, font_scale=0.65) y = sns.barplot(x=bar_list, y=bar_vals) y.bar_label(y.containers[0]) fig = y.get_figure() fig.savefig(f'{choice}firstdraw.png') st.image(f'{choice}firstdraw.png', caption='Количество КП отправленных менеджером Отдела продаж за месяц') plt.clf() dataset.loc[dataset['Обратная связь от клиента'] != "Клиент позицию взял"].shape[0] pie_data = [dataset.loc[dataset['Обратная связь от клиента'] == "Клиент позицию взял"].shape[0], dataset.loc[dataset['Обратная связь от клиента'] != "Клиент позицию взял"].shape[0]] pie_lables = ['Клиент взял позицию', 'Клиент не взял позицию'] colors_pie = sns.color_palette('bright')[1:5] plt.rcParams.update({'font.size': 22}) plt.pie(pie_data, labels=pie_lables, colors=colors_pie, autopct='%.0f%%', textprops={'fontsize': 22}) plt.savefig(f'{choice}seconddraw.png') st.image(f'{choice}seconddraw.png', caption='Реакция клиентов на КП') plt.clf() data_discount = dataset.loc[ (dataset['Обратная связь от клиента'] == "Клиент позицию взял") & (dataset['Согласованная скидка, %'] != 0)] data_discount = data_discount[['Менеджер О.П.', 'Согласованная скидка, %']].groupby( ['Менеджер О.П.']).mean().dropna() data_discount = data_discount.sort_values(by='Согласованная скидка, %', ascending=False) data_discount = data_discount.to_dict()['Согласованная скидка, %'] discount_list = list(data_discount.keys()) discount_vals = list(data_discount.values()) x = sns.barplot(x=discount_list, y=discount_vals) x.bar_label(x.containers[0]) thirdfig = x.get_figure() thirdfig.savefig(f'{choice}thirddraw.png') st.image(f'{choice}thirddraw.png', caption='Какой процент скидки в среднем запрашивает Менеджер О.П.') plt.clf() categories = dataset[['ТГ', "Количество в запросе, шт"]].groupby(['ТГ']).sum().sort_values( by='Количество в запросе, шт', ascending=False) categories = categories.to_dict()['Количество в запросе, шт'] cats_list = list(categories.keys()) cats_vals = list(categories.values()) cols = ['red' if x > 400 else 'green' for x in cats_vals] sns.set(rc={'figure.figsize': (19, 10)}, font_scale=0.80) z = sns.barplot(x=cats_vals, y=cats_list, estimator=np.sum, palette=cols) z.bar_label(z.containers[0]) fourfig = z.get_figure() fourfig.savefig(f'{choice}fourdraw.png') st.image(f'{choice}fourdraw.png', caption='Суммарное количество позиций, поступивших по КП. Суммарно по товарным группам') plt.clf() men_array = dataset['ТГ'].unique() men_requests = {} for i in men_array: men_requests.update({f"{i}": dataset.loc[dataset["ТГ"] == i].shape[0]}) men_requests = dict(sorted(men_requests.items(), key=lambda item: item[1])) bar_list = list(men_requests.keys()) bar_vals = list(men_requests.values()) sns.set(rc={'figure.figsize': (19, 10)}, font_scale=0.65) y = sns.barplot(x=bar_vals, y=bar_list, palette=['red']) y.bar_label(y.containers[0]) fivefig = y.get_figure() fivefig.savefig(f'{choice}fivedraw.png') st.image(f'{choice}fivedraw.png', caption='Количество поступивших КП по товарным группам') plt.clf() ex = {} for vb in dataset['Тип согласования'].unique(): ex.update({vb: dataset.loc[dataset['Тип согласования'] == f'{vb}'].shape[0]}) bar_list = list(ex.keys()) bar_vals = list(ex.values()) q = sns.barplot(y=bar_vals, x=bar_list) sixfig = q.get_figure() sixfig.savefig(f'{choice}sixdraw.png') st.image(f'{choice}sixdraw.png', caption='Типы КП на анализируемый период') plt.clf() dif_data = [dataset.loc[dataset['Разница'] == 0].shape[0], dataset.shape[0] - dataset.loc[dataset['Разница'] == 0].shape[0]] dif_lables = ['Запрашиваемая и Согласованная скидки совпадают', 'Запрашиваемая и Согласованная скидки НЕ совпадают'] other_colors_pie = sns.color_palette('bright')[0:4] plt.rcParams.update({'font.size': 22}) plt.pie(dif_data, labels=dif_lables, colors=other_colors_pie, autopct='%.0f%%', textprops={'fontsize': 22}) plt.savefig(f'{choice}sevendraw.png') st.image(f'{choice}sevendraw.png', caption='Совпадение/ НЕ совпадение Согласованной и Запрашиваемой скидок') elif choice == 'Резюме': dataset1 = pd.read_excel(r'Feb202222.xlsx') dataset1 = dataset1.drop_duplicates() dataset1['Разница'] = dataset1['Запрашиваемая скидка, %'] - dataset1['Согласованная скидка, %'] dataset2 = pd.read_excel(r'Feb202322.xlsx') dataset2 = dataset2.drop_duplicates() dataset2['Разница'] = dataset2['Запрашиваемая скидка, %'] - dataset2['Согласованная скидка, %'] st.header("Резюме Аналитики по КП") st.text(f'Сравнение количества КП') quant_lables = ['2022', '2023'] quant_vals = [dataset1.shape[0], dataset2.shape[0]] quant_data = pd.DataFrame.from_dict({'names': quant_lables, 'values': quant_vals}) st.bar_chart(quant_data, x='names', y='values', height=0) st.text('По сравнению с февралем 2022 года, количество КП в 2023 году возрасло на 70 %') quant2_lables = ['2022', '2023'] quant2_vals = [dataset1['Количество в запросе, шт'].sum(), dataset2['Количество в запросе, шт'].sum()] quant2_data = pd.DataFrame.from_dict({'names': quant2_lables, 'values': quant2_vals}) st.bar_chart(quant2_data, x='names', y='values', height=0) st.text(f'Сравнение суммарного количества товаров запрошенных по КП за февраль 2022 и февраль 2023') def top_tg_zapros(): sp = plt.subplot(121) tg1_array = dataset1['ТГ'].unique() tg1_requests = {} for i in tg1_array: tg1_requests.update({f"{i}": dataset1.loc[dataset1["ТГ"] == i].shape[0]}) tg1_requests = dict(sorted(tg1_requests.items(), key=lambda item: item[1], reverse=True)) bar1_list = list(tg1_requests.keys())[0:5] bar_vals = list(tg1_requests.values())[0:5] y = sns.barplot(x=bar_vals, y=bar1_list, palette=['red']) y.bar_label(y.containers[0]) quan_tg_fig1 = y.get_figure() quan_tg_fig1.savefig(f'{choice}quan_tg_fig1draw.png') plt.title('2022', fontsize=15) sp = plt.subplot(122) tg2_array = dataset2['ТГ'].unique() tg2_requests = {} for i in tg2_array: tg2_requests.update({f"{i}": dataset2.loc[dataset2["ТГ"] == i].shape[0]}) tg2_requests = dict(sorted(tg2_requests.items(), key=lambda item: item[1], reverse=True)) bar2_list = list(tg2_requests.keys())[0:5] bar_vals = list(tg2_requests.values())[0:5] y = sns.barplot(x=bar_vals, y=bar2_list, palette=['blue']) y.bar_label(y.containers[0]) quan_tg_fig2 = y.get_figure() quan_tg_fig2.savefig(f'{choice}quan_tg_fig2draw.png') plt.title('2023', fontsize=15) plt.savefig('Something2.png') st.image('Something2.png', caption='ТОП-5 товарных групп по количеству КП') return bar1_list, bar2_list def pie_data_clientreact(): plt.clf() sp = plt.subplot(121) dataset1.loc[dataset1['Обратная связь от клиента'] != "Клиент позицию взял"].shape[0] pie1_data = [dataset1.loc[dataset1['Обратная связь от клиента'] == "Клиент позицию взял"].shape[0], dataset1.loc[dataset1['Обратная связь от клиента'] != "Клиент позицию взял"].shape[0]] pie1_lables = ['Клиент взял позицию', 'Клиент не взял позицию'] colors_pie = sns.color_palette('bright')[1:5] plt.rcParams.update({'font.size': 15}) plt.pie(pie1_data, labels=pie1_lables, colors=colors_pie, autopct='%.0f%%', textprops={'fontsize': 15}) plt.title('2022', fontsize=15) sp = plt.subplot(122) dataset2.loc[dataset2['Обратная связь от клиента'] != "Клиент позицию взял"].shape[0] pie2_data = [dataset2.loc[dataset2['Обратная связь от клиента'] == "Клиент позицию взял"].shape[0], dataset2.loc[dataset2['Обратная связь от клиента'] != "Клиент позицию взял"].shape[0]] pie2_lables = ['Клиент взял позицию', 'Клиент не взял позицию'] colors_pie = sns.color_palette('bright')[1:5] plt.rcParams.update({'font.size': 15}) plt.pie(pie2_data, labels=pie2_lables, colors=colors_pie, autopct='%.0f%%', textprops={'fontsize': 15}) plt.title('2023', fontsize=15) plt.savefig('SOMETHIG.png') st.image('SOMETHIG.png', caption='Реакция клиентов на КП') def quantTG(): sp = plt.subplot(121) new_cat1 = {} categories1 = dataset1[['ТГ', "Количество в запросе, шт"]].groupby(['ТГ']).sum().sort_values( by='Количество в запросе, шт', ascending=False) categories1 = categories1.to_dict()['Количество в запросе, шт'] for key, value in categories1.items(): if key in f1: new_cat1[key] = value cats_list = list(new_cat1.keys()) cats_vals = list(new_cat1.values()) cols = ['red'] sns.set(rc={'figure.figsize': (19, 10)}, font_scale=0.80) z1 = sns.barplot(x=cats_vals, y=cats_list, estimator=np.sum, palette=cols) z1.bar_label(z1.containers[0]) plt.title('2022', fontsize=15) sp = plt.subplot(122) new_cat2 = {} categories2 = dataset2[['ТГ', "Количество в запросе, шт"]].groupby(['ТГ']).sum().sort_values( by='Количество в запросе, шт', ascending=False) categories2 = categories2.to_dict()['Количество в запросе, шт'] for key, value in categories2.items(): if key in k2: new_cat2[key] = value cats_list = list(new_cat2.keys()) cats_vals = list(new_cat2.values()) cols = ['blue'] sns.set(rc={'figure.figsize': (19, 10)}, font_scale=0.80) z = sns.barplot(x=cats_vals, y=cats_list, estimator=np.sum, palette=cols) z.bar_label(z.containers[0]) plt.title('2022', fontsize=15) plt.savefig('KPquanTG.png') st.image('KPquanTG.png', caption='Количество позиций по ТОП-5 ТГ') def TGtype(): sp = plt.subplot(121) ex1 = {} for vb in dataset1['Тип согласования'].unique(): ex1.update({vb: dataset1.loc[dataset1['Тип согласования'] == f'{vb}'].shape[0]}) bar1_list = list(ex1.keys()) bar1_vals = list(ex1.values()) q = sns.barplot(y=bar1_vals, x=bar1_list) q.bar_label(q.containers[0]) plt.title('2022', fontsize=15) sp = plt.subplot(122) ex2 = {} for vb in dataset2['Тип согласования'].unique(): ex2.update({vb: dataset2.loc[dataset2['Тип согласования'] == f'{vb}'].shape[0]}) bar2_list = list(ex2.keys()) bar2_vals = list(ex2.values()) q2 = sns.barplot(y=bar2_vals, x=bar2_list) q2.bar_label(q2.containers[0]) plt.title('2023', fontsize=15) plt.savefig('SoglType.png') st.image('SoglType.png') def pricesovp(): sp = plt.subplot(121) dif1_data = [dataset1.loc[dataset1['Разница'] == 0].shape[0], dataset1.shape[0] - dataset1.loc[dataset1['Разница'] == 0].shape[0]] dif1_lables = ['Совпадают', 'НЕ совпадают'] other_colors_pie = sns.color_palette('bright')[0:4] plt.rcParams.update({'font.size': 13}) plt.pie(dif1_data, labels=dif1_lables, colors=other_colors_pie, autopct='%.0f%%', textprops={'fontsize': 13}) plt.title('2022', fontsize=20) sp = plt.subplot(122) dif2_data = [dataset2.loc[dataset2['Разница'] == 0].shape[0], dataset2.shape[0] - dataset2.loc[dataset2['Разница'] == 0].shape[0]] dif2_lables = ['Совпадают', 'НЕ совпадают'] other_colors_pie = sns.color_palette('bright')[0:4] plt.rcParams.update({'font.size': 20}) plt.pie(dif2_data, labels=dif2_lables, colors=other_colors_pie, autopct='%.0f%%', textprops={'fontsize': 13}) plt.title('2023', fontsize=20) plt.savefig('zaprsogl.png') st.image('zaprsogl.png') def fivequantpi(): sp = plt.subplot(121) dif1_data = [dataset1.loc[dataset1['Количество в запросе, шт'] <= 5 ].shape[0], dataset1.shape[0] - dataset1.loc[dataset1['Разница'] > 5].shape[0]] dif1_lables = ['Меньше 5 штук', 'Больше 5 штук'] other_colors_pie = sns.color_palette('bright')[0:4] plt.rcParams.update({'font.size': 13}) plt.pie(dif1_data, labels=dif1_lables, colors=other_colors_pie, autopct='%.0f%%', textprops={'fontsize': 13}) plt.title('2022', fontsize=20) sp = plt.subplot(122) dif2_data = [dataset2.loc[dataset2['Количество в запросе, шт'] <= 5 ].shape[0], dataset2.shape[0] - dataset2.loc[dataset2['Разница'] > 5].shape[0]] dif2_lables = ['Меньше 5 штук', 'Больше 5 штук'] other_colors_pie = sns.color_palette('bright')[0:4] plt.rcParams.update({'font.size': 20}) plt.pie(dif2_data, labels=dif2_lables, colors=other_colors_pie, autopct='%.0f%%', textprops={'fontsize': 13}) plt.title('2023', fontsize=20) plt.savefig('fiveqiantpi.png') st.image('fiveqiantpi.png') f1, k2 = top_tg_zapros() st.write( 'На графике мы можем видеть изменения в ТГ, по которым приходят КП. Можно заметить, что по состоянию на 2023 год в ТОП-5 групп выбились Накладки, Накладки Simpeco и Оптика. Стоит обратить внимание на то, что Рессоры и Барабаны Simpeco остались в ТОП-5, также как и в 2022.') plt.clf() quantTG() st.write( 'На основе это графика, не трудно сделать вывод, что с ростом количества КП, растет и количество позиций, на которые запрашивается скидка. Таким образом мы можем увидеть прирост по двум совпадающим ТГ - Рессоры и Барабаны Simpeco, если конкретнее то количество по Рессорам возросло на 34%, а по барабанам Simpeco на 239%') plt.clf() TGtype() st.write('Количество КП по типу "На Объем" по сравнению с февралем прошлого года возросло на 517%') plt.clf() fivequantpi() st.write('Можем заметить увеличение запросов, в которых количество товаров меньше 5 штук') plt.clf() pricesovp() st.write( 'Можем заметить что процент скидок в которых совпадает Цена Запрашиваемая и Цена Согласованная, увеличился. Это свидетельствует о том, что КП, которые поступают в ОЦДР, укладываются в текущую политику именно поэтому необходимо оценить поведение клиента.') plt.clf() pie_data_clientreact() st.write( 'Из этого графика можем заметить, что в относительных показателях процент клиентов, которые берут позиции с учетом скидок по КП увеличился на 1%. Этот показатель является незначительным, с учетом роста количества КП, а также роста запросов по типу скидки "На объем"') st.header('Благодарим за внимание !')