ArmDISC / app.py
JimMorrison's picture
Update app.py
3bc79b7
Raw History Blame Contribute Delete
11.6 kB
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%')