File size: 11,570 Bytes
0afc8d5
 
 
 
 
 
 
7d23ed2
0afc8d5
 
 
 
1095c66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
279dfa4
3bc79b7
1095c66
 
 
 
 
 
 
 
 
 
 
 
 
 
 
279dfa4
 
1095c66
0afc8d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a2f18ea
0afc8d5
279dfa4
a2f18ea
0afc8d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a2f18ea
0afc8d5
 
 
a2f18ea
0afc8d5
 
 
 
 
 
 
 
a2f18ea
0afc8d5
 
 
 
 
 
 
 
 
 
 
 
 
 
a2f18ea
0afc8d5
 
 
 
 
 
 
 
 
 
 
 
 
279dfa4
a2f18ea
279dfa4
1095c66
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
import streamlit as st
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt


dataset = dataset=pd.read_excel(r'Скидка ДП 2022 _23.xlsx')
dataset= dataset.loc[dataset['Тип скидки']!="Менеджер ОЦДС"]
dataset.dropna()
dataset['% скидки']= abs(dataset['% скидки'] *100)
dataset['РТУ'] = pd.to_datetime(dataset['РТУ'])
dataset['СГЦО'] = abs(1-dataset['Сумма базовая']/dataset['Сумма озвученная'])*100
dataset['Общая скидка'] = abs(1-dataset["Сумма базовая"]/dataset['Сумма итого'])*100



st.header('Аналитика АРМ-скидок')
st.sidebar.title('Выберите анализируемый период')
choice = st.sidebar.selectbox('Какой период вы хотите выбрать ? ',('Январь 22',"Февраль 22","Март 22","Апрель 22","Май 22","Июнь 22","Июль 22","Август 22", "Сентябрь 22", "Октябрь 22","Ноябрь 22","Декабрь 22", "Январь 23","Февраль 23"))
st.sidebar.write('Вы выбрали: ', choice)

jan22 = dataset.loc[dataset['РТУ']< '2022-02-01']
feb22 = dataset.loc[(dataset['РТУ']>= '2022-02-01')&(dataset['РТУ']< '2022-03-01')]
march22 = dataset.loc[(dataset['РТУ']>= '2022-03-01')&(dataset['РТУ']< '2022-04-01')]
apr22 = dataset.loc[(dataset['РТУ']>= '2022-04-01')&(dataset['РТУ']< '2022-05-01')]
may22 = dataset.loc[(dataset['РТУ']>= '2022-05-01')&(dataset['РТУ']< '2022-06-01')]
jun22 =dataset.loc[(dataset['РТУ']>= '2022-06-01')&(dataset['РТУ']< '2022-07-01')]
jul22 = dataset.loc[(dataset['РТУ']>= '2022-07-01')&(dataset['РТУ']< '2022-08-01')]
aug22 = dataset.loc[(dataset['РТУ']>= '2022-08-01')&(dataset['РТУ']< '2022-09-01')]
sep22 = dataset.loc[(dataset['РТУ']>= '2022-09-01')&(dataset['РТУ']< '2022-10-01')]
oct22 = dataset.loc[(dataset['РТУ']>= '2022-10-01')&(dataset['РТУ']< '2022-11-01')]
nov22 = dataset.loc[(dataset['РТУ']>= '2022-11-01')&(dataset['РТУ']< '2022-12-01')]
dec22 =dataset.loc[(dataset['РТУ']>= '2022-12-01')&(dataset['РТУ']< '2023-01-01')]
jan23 = dataset.loc[(dataset['РТУ']>= '2023-01-01')&(dataset['РТУ']< '2023-02-01')]
feb23 =dataset.loc[((dataset['РТУ']>= '2023-02-01'))&(dataset['РТУ']< '2023-03-01')]

year_data  = {}
month_list = ['Январь 22',"Февраль 22","Март 22","Апрель 22","Май 22","Июнь 22","Июль 22","Август 22", "Сентябрь 22", "Октябрь 22","Ноябрь 22","Декабрь 22", "Январь 23","Февраль 23"]
month_var_list = [jan22,feb22,march22,apr22,may22,jun22,jul22,aug22,sep22,oct22,nov22,dec22,jan23,feb23]
for i in range(len(month_list)):
    year_data.update({month_list[i]:(month_var_list[i].shape[0],month_var_list[i]['Общая скидка'].median())})
correct_dict = {}
pers,qnts,meds = [],[],[]
for k,v in year_data.items():
    pers.append(k)
    qnts.append(v[0])
    meds.append(v[1]*10)
correct_dict.update({'Период':pers,'Количество':qnts,'Медиана':meds})
df = pd.DataFrame(correct_dict)
plt.figure(1)
df[['Период', 'Количество', 'Медиана']].plot(x='Период', kind='bar')
plt.hlines(130,0,14,colors='red')
plt.savefig('QuantMed.png')
st.image('QuantMed.png', caption='Сопоставление количества единиц товара в запросе и размера скидки')
st.write('Красной линией обозначен максимально допустимый размер скидки 13% +- 2%. Примечание: Количество единиц - шт. Размер скидки - %')

plt.clf()
another_year_dict={}
for i in range(len(month_list)):
    another_year_dict.update({month_list[i]: (month_var_list[i].loc[month_var_list[i]['Минимальный объем'] > month_var_list[i]['Количество']].shape[0], month_var_list[i].loc[month_var_list[i]['Минимальный объем'] < month_var_list[i]['Количество']].shape[0])})
ancorrect_dict = {}
pers,qntsMin,qntsMax = [],[],[]
for k,v in another_year_dict.items():
    pers.append(k)
    qntsMin.append(v[0])
    qntsMax.append(v[1])
ancorrect_dict.update({'Период':pers,'Количество меньше мин. объема':qnts,'Количество больше мин. объема':meds})
andf = pd.DataFrame(ancorrect_dict)
andf[['Период', 'Количество меньше мин. объема', 'Количество больше мин. объема']].plot(x='Период', kind='bar')
plt.savefig('MinMaxVal.png')
st.image('MinMaxVal.png',caption='Соблюдение / Не соблюдение минимального объема для начисления скидки')
st.write ('Условие минимального объема не соблюдается при начислении скидок. Примечание: Синий столбец - количество скидок, в которых не соблюдено условие минимального объема, оранжевый столбец - количество скидок в которых соблюдено условие минимального объема.')
plt.clf()

if choice == 'Январь 22':
    jan22 = dataset.loc[dataset['РТУ'] < '2022-02-01']
    x = jan22
elif choice == "Февраль 22":
    feb22 = dataset.loc[(dataset['РТУ']>= '2022-02-01')&(dataset['РТУ']< '2022-03-01')]
    x = feb22
elif choice == "Март 22":
    march22 = dataset.loc[(dataset['РТУ']>= '2022-03-01')&(dataset['РТУ']< '2022-04-01')]
    x = march22
elif choice == "Апрель 22":
    apr22 = dataset.loc[(dataset['РТУ']>= '2022-04-01')&(dataset['РТУ']< '2022-05-01')]
    x = apr22
elif choice == "Май 22":
    may22 = dataset.loc[(dataset['РТУ']>= '2022-05-01')&(dataset['РТУ']< '2022-06-01')]
    x = may22
elif choice == "Июнь 22":
    jun22 =dataset.loc[(dataset['РТУ']>= '2022-06-01')&(dataset['РТУ']< '2022-07-01')]
    x = jun22
elif choice == "Июль 22":
    jul22 = dataset.loc[(dataset['РТУ']>= '2022-07-01')&(dataset['РТУ']< '2022-08-01')]
    x = jul22
elif choice ==  "Август 22":
    aug22 = dataset.loc[(dataset['РТУ']>= '2022-08-01')&(dataset['РТУ']< '2022-09-01')]
    x = aug22
elif choice == "Сентябрь 22":
    sep22 = dataset.loc[(dataset['РТУ']>= '2022-09-01')&(dataset['РТУ']< '2022-10-01')]
    x = sep22
elif choice == "Октябрь 22":
    oct22 = dataset.loc[(dataset['РТУ']>= '2022-10-01')&(dataset['РТУ']< '2022-11-01')]
    x = oct22
elif choice == "Ноябрь 22":
    nov22 = dataset.loc[(dataset['РТУ']>= '2022-11-01')&(dataset['РТУ']< '2022-12-01')]
    x = nov22
elif choice == "Декабрь 22":
    dec22 =dataset.loc[(dataset['РТУ']>= '2022-12-01')&(dataset['РТУ']< '2023-01-01')]
    x = dec22
elif choice == "Январь 23":
    jan23 = dataset.loc[(dataset['РТУ']>= '2023-01-01')&(dataset['РТУ']< '2023-02-01')]
    x = jan23
elif choice == "Февраль 23":
    feb23 = dataset.loc[((dataset['РТУ']>= '2023-02-01'))&(dataset['РТУ']< '2023-03-01')]
    x = feb23

x['СГЦО'] = abs(1-x['Сумма базовая']/x['Сумма озвученная'])*100
x['Общая скидка'] = abs(1-x["Сумма базовая"]/x['Сумма итого'])*100

zeroproc = x.loc[(x["СГЦО"]<4)]
fiveproc = x.loc[(x["СГЦО"]>4)&(x["СГЦО"]<8)]
tenproc = x.loc[(x['СГЦО']>=10)]

SGCObar_list = ['Клиенты с СГЦО 0% ','Клиенты с СГЦО 5% ','Клиенты с СГЦО 10%']
SGCObar_vals = [zeroproc.shape[0],fiveproc.shape[0],tenproc.shape[0]]
sns.set(rc={'figure.figsize':(15,10)},font_scale=1)
pt = sns.barplot(y=SGCObar_vals,x = SGCObar_list)
pt.bar_label(pt.containers[0])
fig = pt.get_figure()
fig.savefig(f'{choice}firstdraw.png')
st.image(f'{choice}firstdraw.png',caption='Разделение кол-ва скидок по группам СГЦО')


choice2 = st.selectbox("Выберите группу клиентов", ("Клиенты с СГЦО 0%",'Клиенты с СГЦО 5% ','Клиенты с СГЦО 10%'))

if choice2 == "Клиенты с СГЦО 0%":
    x1 = zeroproc
elif choice2 == 'Клиенты с СГЦО 5% ':
    x1 = fiveproc
elif choice2 =='Клиенты с СГЦО 10%':
    x1 = tenproc

plt.clf()
ex = {}
for vb in x1['Тип скидки'].unique():
    ex.update({vb:x1.loc[x1['Тип скидки']==f'{vb}'].shape[0]})
bar_list = list(ex.keys())
bar_vals = list(ex.values())
sns.set(rc={'figure.figsize':(15,10)},font_scale=1)
pt = sns.barplot(y=bar_vals,x=bar_list,palette=['Green'])
pt.bar_label(pt.containers[0])
fig = pt.get_figure()
fig.savefig(f'{choice}{choice2}firstdraw.png')
st.image(f'{choice}{choice2}firstdraw.png',caption='Разделение по Типу скидки ')

plt.clf()
pie_data = [x1.loc[x1['Минимальный объем'] > x1['Количество']].shape[0],x1.loc[x1['Минимальный объем'] < x1['Количество']].shape[0]]
pie_lables = ['Количество меньше мин. объема','Количество больше мин. объема']
sns.set(rc={'figure.figsize':(15,10)},font_scale=1)
colors_pie= sns.color_palette('bright')[1:5]
plt.pie(pie_data,labels=pie_lables,colors=colors_pie,autopct='%.0f%%')
plt.savefig(f'{choice}{choice2}piefirsttdraw.png')
st.image(f'{choice}{choice2}piefirsttdraw.png', caption='Соотношение позиций в соотвествии с минимальным объемом')

plt.clf()
tg_array = x1['Номенклатура.Вид номенклатуры'].unique()
tg_requests = {}
for i in tg_array:
    tg_requests.update({f"{i}":x1.loc[x1['Номенклатура.Вид номенклатуры']==i].shape[0]})
tg_requests=dict(sorted(tg_requests.items(), key=lambda item: item[1]))
bar_list = list(tg_requests.keys())
bar_vals = list(tg_requests.values())
sns.set(rc={'figure.figsize':(15,10)},font_scale=0.65)
y = sns.barplot(y=bar_list,x=bar_vals)
y.bar_label(y.containers[0])
fig = y.get_figure()
fig.savefig(f'{choice}{choice2}secdraw.png')
st.image(f'{choice}{choice2}secdraw.png',caption='Количество скидок по товарным группам')

plt.clf()
tg_array = x1['Номенклатура.Вид номенклатуры'].unique()
tg_requests = {}
for i in tg_array:
    tg_requests.update({f'{i}':x1[x1['Номенклатура.Вид номенклатуры']==i]['Общая скидка'].median()})
bar_list = list(tg_requests.keys())
bar_vals = list(tg_requests.values())
sns.set(rc={'figure.figsize':(19,10)},font_scale=0.65)
y = sns.barplot(x=bar_vals,y=bar_list,palette=['blue'])
y.bar_label(y.containers[0])
fig = y.get_figure()
fig.savefig(f'{choice}{choice2}thirddraw.png')
st.image(f'{choice}{choice2}thirddraw.png',caption='Медиана процента общей скидки по ТГ '
                                                   '(Под общей скидкой понимается СГЦО + % скидки ДП)')
st.write('Для клиентов СГЦО 0% - допустимым является значение медианы в 5%. Для клиентов с СГЦО 5% - допустимое значение медианы 10% +- 1%. Для клиентов с СГЦО 10% - допустимое значение медианы 13% +- 2%')