JimMorrison commited on
Commit
c073ee2
·
1 Parent(s): eac64ec

Upload 4 files

Browse files
Files changed (4) hide show
  1. Feb202222.xlsx +0 -0
  2. Feb202322.xlsx +0 -0
  3. app.py +106 -0
  4. requirements.txt +99 -0
Feb202222.xlsx ADDED
Binary file (28.9 kB). View file
 
Feb202322.xlsx ADDED
Binary file (39.9 kB). View file
 
app.py ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import numpy as np
4
+ import seaborn as sns
5
+ import matplotlib.pyplot as plt
6
+
7
+
8
+ st.sidebar.title('Выберите анализируемый период')
9
+ choice = st.sidebar.selectbox('Какой период вы хотите выбрать ? ', ("Февраль 2022","Февраль 2023"))
10
+ st.sidebar.write('Вы выбрали: ', choice)
11
+
12
+ if choice == 'Февраль 2022':
13
+ dataset=pd.read_excel(r'Feb202222.xlsx')
14
+ elif choice == 'Февраль 2023':
15
+ dataset = pd.read_excel(r'Feb202322.xlsx')
16
+ dataset = dataset.drop_duplicates()
17
+ dataset['Разница'] = dataset['Запрашиваемая скидка, %'] - dataset['Согласованная скидка, %']
18
+
19
+ st.header("Аналитика по КП")
20
+
21
+ st.write(f'Общее количество КП за анализируемый период - {dataset.shape[0]}')
22
+
23
+ men_array = dataset['Менеджер О.П.'].unique()
24
+ men_requests = {}
25
+ for i in men_array:
26
+ men_requests.update({f"{i}":dataset.loc[dataset["Менеджер О.П."]==i].shape[0]})
27
+ men_requests=dict(sorted(men_requests.items(), key=lambda item: item[1]))
28
+ bar_list = list(men_requests.keys())
29
+ bar_vals = list(men_requests.values())
30
+ sns.set(rc={'figure.figsize':(19,10)},font_scale=0.65)
31
+ y = sns.barplot(x=bar_list,y=bar_vals)
32
+ y.bar_label(y.containers[0])
33
+ fig = y.get_figure()
34
+ fig.savefig(f'{choice}firstdraw.png')
35
+ st.image(f'{choice}firstdraw.png',caption='Количество КП отправленных менеджером Отдела продаж за месяц')
36
+
37
+ plt.clf()
38
+ dataset.loc[dataset['Обратная связь от клиента']!="Клиент позицию взял"].shape[0]
39
+ pie_data = [dataset.loc[dataset['Обратная связь от клиента']=="Клиент позицию взял"].shape[0],dataset.loc[dataset['Обратная связь от клиента']!="Клиент позицию взял"].shape[0]]
40
+ pie_lables = ['Клиент взял позицию','Клиент не взял позицию']
41
+ colors_pie= sns.color_palette('bright')[1:5]
42
+ plt.rcParams.update({'font.size': 22})
43
+ plt.pie(pie_data,labels=pie_lables,colors=colors_pie,autopct='%.0f%%',textprops={'fontsize': 22})
44
+ plt.savefig(f'{choice}seconddraw.png')
45
+ st.image(f'{choice}seconddraw.png',caption='Реакция клиентов на КП')
46
+
47
+ plt.clf()
48
+ data_discount = dataset.loc[(dataset['Обратная связь от клиента']=="Клиент позицию взял")&(dataset['Согласованная скидка, %']!=0)]
49
+ data_discount = data_discount[['Менеджер О.П.','Согласованная скидка, %']].groupby(['Менеджер О.П.']).mean().dropna()
50
+ data_discount = data_discount.sort_values(by='Согласованная скидка, %',ascending=False)
51
+ data_discount = data_discount.to_dict()['Согласованная скидка, %']
52
+ discount_list = list(data_discount.keys())
53
+ discount_vals = list(data_discount.values())
54
+ x = sns.barplot(x=discount_list,y=discount_vals)
55
+ x.bar_label(x.containers[0])
56
+ thirdfig = x.get_figure()
57
+ thirdfig.savefig(f'{choice}thirddraw.png')
58
+ st.image(f'{choice}thirddraw.png', caption='Какой процент скидки в среднем запрашивает Менеджер О.П.')
59
+
60
+ plt.clf()
61
+ categories = dataset[['ТГ',"Количество в запросе, шт"]].groupby(['ТГ']).sum().sort_values(by='Количество в запросе, шт',ascending=False)
62
+ categories = categories.to_dict()['Количество в запросе, шт']
63
+ cats_list = list(categories.keys())
64
+ cats_vals = list(categories.values())
65
+ cols = ['red' if x >400 else 'green' for x in cats_vals]
66
+ sns.set(rc={'figure.figsize':(19,10)},font_scale=0.80)
67
+ z = sns.barplot(x=cats_vals, y=cats_list, estimator=np.sum,palette=cols)
68
+ z.bar_label(z.containers[0])
69
+ fourfig=z.get_figure()
70
+ fourfig.savefig(f'{choice}fourdraw.png')
71
+ st.image(f'{choice}fourdraw.png',caption='Суммарное количество позиций, поступивших по КП. Суммарно по товарным группам')
72
+
73
+ plt.clf()
74
+ men_array = dataset['ТГ'].unique()
75
+ men_requests = {}
76
+ for i in men_array:
77
+ men_requests.update({f"{i}":dataset.loc[dataset["ТГ"]==i].shape[0]})
78
+ men_requests=dict(sorted(men_requests.items(), key=lambda item: item[1]))
79
+ bar_list = list(men_requests.keys())
80
+ bar_vals = list(men_requests.values())
81
+ sns.set(rc={'figure.figsize':(19,10)},font_scale=0.65)
82
+ y = sns.barplot(x=bar_vals,y=bar_list,palette=['red'])
83
+ y.bar_label(y.containers[0])
84
+ fivefig = y.get_figure()
85
+ fivefig.savefig(f'{choice}fivedraw.png')
86
+ st.image(f'{choice}fivedraw.png', caption='Количество поступивших КП по товарным группам')
87
+
88
+ plt.clf()
89
+ ex = {}
90
+ for vb in dataset['Тип согласования'].unique():
91
+ ex.update({vb:dataset.loc[dataset['Тип согласования']==f'{vb}'].shape[0]})
92
+ bar_list = list(ex.keys())
93
+ bar_vals = list(ex.values())
94
+ q = sns.barplot(y=bar_vals,x=bar_list)
95
+ sixfig = q.get_figure()
96
+ sixfig.savefig(f'{choice}sixdraw.png')
97
+ st.image(f'{choice}sixdraw.png',caption='Типы КП на анализируемый период')
98
+
99
+ plt.clf()
100
+ dif_data = [dataset.loc[dataset['Разница']== 0 ].shape[0],dataset.shape[0]-dataset.loc[dataset['Разница']== 0 ].shape[0]]
101
+ dif_lables = ['Запрашиваемая и Согласованная скидки совпадают','Запрашиваемая и Согласованная скидки НЕ совпадают']
102
+ other_colors_pie = sns.color_palette('bright')[0:4]
103
+ plt.rcParams.update({'font.size': 22})
104
+ plt.pie(dif_data,labels=dif_lables,colors=other_colors_pie,autopct='%.0f%%',textprops={'fontsize': 22})
105
+ plt.savefig(f'{choice}sevendraw.png')
106
+ st.image(f'{choice}sevendraw.png',caption='Совпадение/ НЕ совпадение Согласованной и Запрашиваемой скидок')
requirements.txt ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ altair==4.2.2
2
+ asttokens==2.2.1
3
+ async-generator==1.10
4
+ attrs==22.2.0
5
+ backcall==0.2.0
6
+ beautifulsoup4==4.11.2
7
+ blinker==1.5
8
+ bs4==0.0.1
9
+ cachetools==5.3.0
10
+ certifi==2022.12.7
11
+ cffi==1.15.1
12
+ chardet==5.1.0
13
+ charset-normalizer==3.0.1
14
+ click==8.1.3
15
+ cloudscraper==1.2.68
16
+ colorama==0.4.6
17
+ comm==0.1.2
18
+ contourpy==1.0.7
19
+ cryptography==3.4.6
20
+ cycler==0.11.0
21
+ debugpy==1.6.6
22
+ decorator==5.1.1
23
+ entrypoints==0.4
24
+ et-xmlfile==1.1.0
25
+ exceptiongroup==1.1.0
26
+ executing==1.2.0
27
+ fake-useragent==1.1.1
28
+ fonttools==4.38.0
29
+ gitdb==4.0.10
30
+ GitPython==3.1.30
31
+ h11==0.14.0
32
+ idna==3.4
33
+ importlib-metadata==6.0.0
34
+ importlib-resources==5.10.2
35
+ ipykernel==6.21.2
36
+ ipython==8.10.0
37
+ jedi==0.18.2
38
+ Jinja2==3.1.2
39
+ jsonschema==4.17.3
40
+ jupyter-client==8.0.2
41
+ jupyter-core==5.2.0
42
+ keyring==23.0.0
43
+ kiwisolver==1.4.4
44
+ markdown-it-py==2.1.0
45
+ MarkupSafe==2.1.2
46
+ matplotlib==3.7.0
47
+ matplotlib-inline==0.1.6
48
+ mdurl==0.1.2
49
+ nest-asyncio==1.5.6
50
+ numpy==1.24.2
51
+ openpyxl==3.1.0
52
+ outcome==1.2.0
53
+ packaging==23.0
54
+ pandas==1.5.3
55
+ parso==0.8.3
56
+ pickleshare==0.7.5
57
+ Pillow==9.4.0
58
+ platformdirs==3.0.0
59
+ prompt-toolkit==3.0.36
60
+ protobuf==3.20.3
61
+ psutil==5.9.4
62
+ pure-eval==0.2.2
63
+ pyarrow==11.0.0
64
+ pycookiecheat==0.4.7
65
+ pycparser==2.21
66
+ pydeck==0.8.0
67
+ Pygments==2.14.0
68
+ Pympler==1.0.1
69
+ pyodbc==4.0.35
70
+ pyparsing==3.0.9
71
+ pyrsistent==0.19.3
72
+ requests==2.28.2
73
+ requests-toolbelt==0.10.1
74
+ rich==13.3.1
75
+ seaborn==0.12.2
76
+ selenium==4.8.0
77
+ semver==2.13.0
78
+ six==1.16.0
79
+ smmap==5.0.0
80
+ sniffio==1.3.0
81
+ sortedcontainers==2.4.0
82
+ soupsieve==2.3.2.post1
83
+ stack-data==0.6.2
84
+ streamlit==1.17.0
85
+ toml==0.10.2
86
+ toolz==0.12.0
87
+ tornado==6.2
88
+ traitlets==5.9.0
89
+ trio==0.22.0
90
+ trio-websocket==0.9.2
91
+ typing-extensions==4.4.0
92
+ tzdata==2022.7
93
+ tzlocal==4.2
94
+ urllib3==1.26.14
95
+ validators==0.20.0
96
+ watchdog==2.2.1
97
+ wcwidth==0.2.6
98
+ wsproto==1.2.0
99
+ zipp==3.12.1