HardWorkingStation commited on
Commit
455282f
1 Parent(s): fccbfb8

Initial commit

Browse files
Files changed (3) hide show
  1. src/test.ipynb +0 -0
  2. src/tools.py +7 -6
  3. src/web_app.py +18 -10
src/test.ipynb CHANGED
The diff for this file is too large to render. See raw diff
 
src/tools.py CHANGED
@@ -56,7 +56,7 @@ def get_newbie_plot(data):
56
  )
57
 
58
  fig.update_yaxes(
59
- title='Количество'
60
  )
61
 
62
  fig.update_layout(
@@ -82,7 +82,7 @@ def get_zipcode_plot(data):
82
  )
83
 
84
  fig.update_yaxes(
85
- title='Количество'
86
  )
87
 
88
  fig.update_layout(
@@ -99,7 +99,7 @@ def get_channel_plot(data):
99
  fig = px.histogram(
100
  data['channel'],
101
  color=data['channel'],
102
- title='Распределение клиентов по флагу zip_code'
103
  )
104
 
105
  fig.update_xaxes(
@@ -108,7 +108,7 @@ def get_channel_plot(data):
108
  )
109
 
110
  fig.update_yaxes(
111
- title='Количество'
112
  )
113
 
114
  fig.update_layout(
@@ -130,11 +130,12 @@ def get_history_segment_plot(data):
130
 
131
  fig.update_xaxes(
132
  title='',
133
- categoryorder='total descending'
 
134
  )
135
 
136
  fig.update_yaxes(
137
- title='Количество'
138
  )
139
 
140
  fig.update_layout(
 
56
  )
57
 
58
  fig.update_yaxes(
59
+ title='Количество клиентов'
60
  )
61
 
62
  fig.update_layout(
 
82
  )
83
 
84
  fig.update_yaxes(
85
+ title='Количество клиентов'
86
  )
87
 
88
  fig.update_layout(
 
99
  fig = px.histogram(
100
  data['channel'],
101
  color=data['channel'],
102
+ title='Распределение клиентов по флагу Channel'
103
  )
104
 
105
  fig.update_xaxes(
 
108
  )
109
 
110
  fig.update_yaxes(
111
+ title='Количество клиентов'
112
  )
113
 
114
  fig.update_layout(
 
130
 
131
  fig.update_xaxes(
132
  title='',
133
+ categoryorder='total descending',
134
+ tickangle=45
135
  )
136
 
137
  fig.update_yaxes(
138
+ title='Количество клиентов'
139
  )
140
 
141
  fig.update_layout(
src/web_app.py CHANGED
@@ -18,9 +18,8 @@ st.markdown(
18
  Этот набор данных содержит 42 693 строк с данными клиентов, которые в последний раз совершали покупки в течение двенадцати месяцев.
19
 
20
  Среди клиентов была проведена рекламная кампания с помощью _email_ рассылки:
21
- - 1/3 клиентов были выбраны случайным образом для получения электронного письма, рекламирующего мужскую продукцию;
22
- - 1/3 клиентов были выбраны случайным образом для получения электронного письма, рекламирующего женскую продукцию;
23
- - С оставшейся 1/3 коммуникацию не проводили.
24
 
25
  Для каждого клиента из выборки замерили факт перехода по ссылке в письме, факт совершения покупки и сумму трат за
26
  две недели, следующими после получения письма.
@@ -41,13 +40,13 @@ st.markdown(
41
  | Колонка | Обозначение |
42
  |-------------------|------------------------------------------------------------------------|
43
  | _recency_ | Месяцев с момента последней покупки |
44
- | _history_Segment_ | Классификация долларов, потраченных в прошлом году |
45
  | _history_ | Фактическая стоимость в долларах, потраченная в прошлом году |
46
  | _mens_ | Флаг 1/0, 1 = клиент приобрел мужские товары в прошлом году |
47
  | _womens_ | Флаг 1/0, 1 = клиент приобрел женские товары в прошлом году |
48
  | _zip_code_ | Классифицирует почтовый индекс как городской, пригородный или сельский |
49
  | _newbie_ | Флаг 1/0, 1 = Новый клиент за последние двенадцать месяцев |
50
- | _channel_ | Описывает каналы, которые клиент приобрел в прошлом году |
51
 
52
  ---
53
  """
@@ -57,14 +56,23 @@ st.write("Для того, чтобы лучше понять на какую а
57
 
58
  with st.expander('Развернуть блок анализа данных'):
59
 
60
- st.plotly_chart(tools.get_newbie_plot(dataset))
61
  st.write(f'В данных примерно одинаковое количество новых и "старых клиентов". '
62
  f'Отношение новых клиентов к старым: {(dataset["newbie"] == 1).sum() / (dataset["newbie"] == 0).sum():.2f}')
63
 
64
- st.plotly_chart(tools.get_zipcode_plot(dataset))
65
- st.write(f'Большинство клиентов из пригорода: {(dataset["zip_code"] == "Surburban").sum()}')
 
66
 
67
- st.plotly_chart(tools.get_channel_plot(dataset))
 
 
 
68
 
69
- st.plotly_chart(tools.get_history_segment_plot(dataset))
 
 
 
 
 
70
 
 
18
  Этот набор данных содержит 42 693 строк с данными клиентов, которые в последний раз совершали покупки в течение двенадцати месяцев.
19
 
20
  Среди клиентов была проведена рекламная кампания с помощью _email_ рассылки:
21
+ - 1/2 клиентов были выбраны случайным образом для получения электронного письма, рекламирующего женскую продукцию;
22
+ - С оставшейся 1/2 коммуникацию не проводили.
 
23
 
24
  Для каждого клиента из выборки замерили факт перехода по ссылке в письме, факт совершения покупки и сумму трат за
25
  две недели, следующими после получения письма.
 
40
  | Колонка | Обозначение |
41
  |-------------------|------------------------------------------------------------------------|
42
  | _recency_ | Месяцев с момента последней покупки |
43
+ | _history_segment_ | Классификация клиентов в долларах, потраченных в прошлом году |
44
  | _history_ | Фактическая стоимость в долларах, потраченная в прошлом году |
45
  | _mens_ | Флаг 1/0, 1 = клиент приобрел мужские товары в прошлом году |
46
  | _womens_ | Флаг 1/0, 1 = клиент приобрел женские товары в прошлом году |
47
  | _zip_code_ | Классифицирует почтовый индекс как городской, пригородный или сельский |
48
  | _newbie_ | Флаг 1/0, 1 = Новый клиент за последние двенадцать месяцев |
49
+ | _channel_ | Описывает каналы, через которые клиент приобрел тоовар в прошлом году |
50
 
51
  ---
52
  """
 
56
 
57
  with st.expander('Развернуть блок анализа данных'):
58
 
59
+ st.plotly_chart(tools.get_newbie_plot(dataset), use_container_width=True)
60
  st.write(f'В данных примерно одинаковое количество новых и "старых клиентов". '
61
  f'Отношение новых клиентов к старым: {(dataset["newbie"] == 1).sum() / (dataset["newbie"] == 0).sum():.2f}')
62
 
63
+ st.plotly_chart(tools.get_zipcode_plot(dataset), use_container_width=True)
64
+ tmp_res = dataset.zip_code.value_counts(normalize=True) * 100
65
+ st.write(f'Большинство клиентов из пригорода: {tmp_res["Surburban"]:.2f}%, из города: {tmp_res["Urban"]:.2f}% и из села: {tmp_res["Rural"]:.2f}%')
66
 
67
+ tmp_res = dataset.channel.value_counts(normalize=True) * 100
68
+ st.plotly_chart(tools.get_channel_plot(dataset), use_container_width=True)
69
+ st.write(f'В прошлом году почти одинаковое количество клиентов покупало товары через телефон и сайт, {tmp_res["Phone"]:.2f}% и {tmp_res["Web"]:.2f}% соответственно,'
70
+ f' а {tmp_res["Multichannel"]:.2f}% клиентов покупали товары воспользовавшись двумя платформами.')
71
 
72
+ tmp_res = dataset.history_segment.value_counts(normalize=True) * 100
73
+ st.plotly_chart(tools.get_history_segment_plot(dataset), use_container_width=True)
74
+ st.write(f'Как мы видим, большинство пользователей относится к сегменту \$0-\$100 ({tmp_res[0]:.2f}%), второй и '
75
+ f'третий по количеству пользователей сегменты \$100-\$200 ({tmp_res[1]:.2f}%) и \$200-\$350 ({tmp_res[2]:.2f}%).')
76
+ st.write(f'К сегментам \$350-\$500 и \$500-\$750 относится {tmp_res[3]:.2f}% и {tmp_res[4]:.2f}% пользователей соответственно.')
77
+ st.write(f'Меньше всего пользователей в сегментах \$750-\$1.000 ({tmp_res[-2]:.2f}%) и \$1.000+ ({tmp_res[-1]:.2f}%).')
78