ArmDISC / app.py
JimMorrison's picture
Update app.py
3bc79b7
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%')