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%')
|