Следующий раздел: Полезные инструкции для учебы
Вернуться в оглавление: Я.Практикум
7. Финальный проект.
7.1 Введение.
- проведёте полноценное исследование, пройдя весь путь — от изучения данных до проверки гипотез;
- напишете несколько инструкций, чтобы собрать нужные показатели;
- поупражняетесь в построении и анализе хитмэпов;
- примените алгоритм машинного обучения для задачи классификации.
7.2 Данные снова в деле.
7.3 Работа с уникальными значениями.
years_unique
сохраните уникальные значения из столбца Year
. Код для вывода значений на экран уже написан.Задача 2
interval
import pandas
data = pandas.read_csv('support_data_ds.csv')
#interval = data['internal'].unique() # примените метод unique() к столбцу data['interval']
interval = data['interval'].unique()
# выведите interval на экран
print (interval)
Задача 3
'До внедрения роботов'
и 'После внедрения роботов'
с помощью метода value_counts()
и сохраните результат в переменной interval_count
.import pandas
data = pandas.read_csv('support_data_ds.csv')
# посчитайте значения в столбце interval методом value_counts()
interval_count = data['interval'].value_counts()
print(interval_count)
Задача 4
segment
. Код для вывода списка значений уже написан.import pandas
data = pandas.read_csv('support_data_ds.csv')
# найдите уникальные значения столбца segment
unique_names = data['segment'].unique()
print(unique_names)
Оценим соотношение значений в датасете по сегментам пользователей. Для этого нужно посчитать строки, которые относятся к каждому сегменту: 'Segment 0'
, 'Segment 1'
, 'Segment 2'
. Сгруппируем значения по сегментам (один сегмент — одна группа) и в сгруппированных данных выберем столбец с номерами покупателей (customer_id
). Затем вызовем метод count()
, который посчитает строки в каждой группе.
import pandas
data = pandas.read_csv('support_data_ds.csv')
# группируем, выбираем столбец, считаем значения в каждой группе
segment_counts = data.groupby('segment')['customer_id'].count()
print(segment_counts)
Если не выбрать столбец customer_id
после группировки, метод count()
посчитает значения в группах для каждого столбца. Получилось бы много дубликатов, то есть повторяющихся значений. Убедитесь в этом сами, запустив код:
import pandas
data = pandas.read_csv('support_data_ds.csv')
# найдите уникальные значения столбца segment
segment_counts = data.groupby('segment').count()
print(segment_counts)
7.6 Сегментация пользователей.
Группируем значения
robocats
. Строчки, которые относятся к одному сегменту, формируют группу. Объединить данные в такие группы поможет метод groupby()
из библиотеки pandas.groupby()
чаще всего сочетают с другими командами, например с sum()
— этот метод посчитает сумму значений в каждой группе.- Сгруппировать данные по столбцу
segment
с помощьюgroupby()
. - Выбрать столбец
robocats
. - Суммировать число робокотов в каждом сегменте с помощью
sum()
.
import pandas
data = pandas.read_csv('support_data_ds.csv')
# сгруппируйте значения по столбцу segment,
# выберите столбец robocats
# и вызовите метод sum()
segment_counts = data.groupby('segment')['robocats'].sum()
print(segment_counts)
Задание 1
segment
, а не robocats
.import pandas
data = pandas.read_csv('support_data_ds.csv')
robocats_counts = data.groupby('segment')['robocats'].sum()
client_counts = data.groupby('segment')['segment'].count() # найдите количество обращений в каждом сегменте
segment_means = robocats_counts/ client_counts # разделите количество робокотов на количество обращений
print(segment_means)
7.7 Роботы и люди. Сравнение.
Чтобы сравнение было максимально наглядным, для каждого значимого показателя можно построить тепловую карту с дополнительными настройками:
import pandas
import seaborn
data = pandas.read_csv('support_data_ds.csv')
# списки со старыми и новыми названиями сегментов, а также периодами
segments_old = ['Segment 0', 'Segment 1', 'Segment 2']
segments_new = ['Потенциальные клиенты', 'Обычные клиенты', 'VIP-клиенты']
intervals = ['До внедрения роботов', 'После внедрения роботов']
# ненастоящие значения
mean_scores = [[1, 2],
[3, 4],
[5, 6]]
# настраиваем и строим хитмэп
seaborn.heatmap(mean_scores,
xticklabels=intervals,
yticklabels=segments_new,
annot=True,
cmap='RdYlGn')
heatmap()
:xticklabels=intervals
— для подписей на оси X взять значения изintervals
;yticklabels=segments_new
— для подписей на оси Y взять значения изsegments_new
;annot=True
— добавить на график аннотации, то есть отображать не только цвета «ячеек» хитмэпа, но также их значения;cmap='RdYlGn'
— цветовая схема для числовой шкалы, в варианте'RdYlGn'
красный соответствует минимальным значениям, а зелёный — максимальным.
Задача 1
import pandas
import seaborn
data = pandas.read_csv('support_data_ds.csv')
segments_new = ['Потенциальные клиенты', 'Обычные клиенты', 'VIP-клиенты']
intervals = ['До внедрения роботов', 'После внедрения роботов']
scores_sum = data.groupby(['segment', 'interval'])['score'].sum() # для каждой пары сегмент-интервал посчитайте сумму оценок
scores_count =data.groupby(['segment', 'interval'])['score'].count() # для каждой пары сегмент-интервал найдите количество записей
mean_scores = scores_sum/scores_count # посчитайте среднее: разделите сумму оценок на их количество
print(mean_scores)
Построим тепловую карту по настоящим значениям — средним пользовательским оценкам в каждом из сегментов до и после внедрения роботов.
import pandas
import seaborn
data = pandas.read_csv('support_data.csv')
segments_new = ['Потенциальные клиенты', 'Обычные клиенты', 'VIP-клиенты']
intervals = ['До внедрения роботов', 'После внедрения роботов']
# для каждой пары сегмент-интервал считаем сумму оценок
scores_sum = data.groupby(['segment', 'interval'])['score'].sum()
# для каждой пары сегмент-интервал считаем количество записей
scores_count = data.groupby(['segment', 'interval'])['score'].count()
mean_scores = scores_sum / scores_count
# строим тепловую карту для средних значений
# столбец mean_scores получился вложенным из-за группировки по двум столбцам,
# поэтому его нужно «развернуть» методом unstack()
seaborn.heatmap(mean_scores.unstack('interval'),
xticklabels=intervals,
yticklabels=segments_new,
annot=True,
cmap='RdYlGn')
Задача 2
score
нужно обращаться к столбцу duration
.import pandas
import seaborn
data = pandas.read_csv('support_data_ds.csv')
segments_new = ['Потенциальные клиенты', 'Обычные клиенты', 'VIP-клиенты']
intervals = ['До внедрения роботов', 'После внедрения роботов']
duration_sum = data.groupby(['segment', 'interval'])['duration'].sum() # для каждой пары сегмент-интервал посчитайте сумму продолжительности ответов
duration_count = data.groupby(['segment', 'interval'])['duration'].count() # для каждой пары сегмент-интервал найдите количество записей
mean_duration = duration_sum/duration_count # посчитайте среднее: разделите сумму продолжительности на количество записей
print(mean_duration)
import pandas
import seaborn
data = pandas.read_csv('support_data_ds.csv')
segments_new = ['Потенциальные клиенты', 'Обычные клиенты', 'VIP-клиенты']
intervals = ['До внедрения роботов', 'После внедрения роботов']
# для каждой пары сегмент-интервал считаем сумму продолжительностей
duration_sum = data.groupby(['segment', 'interval'])['duration'].sum()
# для каждой пары сегмент-интервал считаем количество записей
duration_count = data.groupby(['segment', 'interval'])['duration'].count()
# считаем среднее: делим сумму на количество
mean_duration = duration_sum / duration_count
print(mean_duration)
# строим тепловую карту для длительности ответов
# столбец mean_duration получился вложенным из-за группировки по двум столбцам,
# поэтому его нужно «развернуть» методом unstack()
seaborn.heatmap(mean_duration.unstack('interval'), xticklabels=intervals, yticklabels=segments_new, annot=True, cmap='RdYlGn')
Задача 3
'promo'
. В этом столбце записаны только 1
и 0
, поэтому сумма даст количество промокодов.import pandas
import seaborn
data = pandas.read_csv('support_data_ds.csv')
segments_new = ['Потенциальные клиенты', 'Обычные клиенты', 'VIP-клиенты']
intervals = ['До внедрения роботов', 'После внедрения роботов']
# для каждой пары сегмент-интервал посчитайте сумму выданных промокодов
# так как в столбце promo есть только значения 1 и 0, сумма даст количество промокодов
promo_sum = data.groupby(['segment', 'interval'])['promo'].sum()
# для каждой пары сегмент-интервал найдите количество записей
promo_count = data.groupby(['segment', 'interval'])['promo'].count()
mean_promo =promo_sum/promo_count # посчитайте среднее: разделите количество промокодов на количество записей
print(mean_promo)
Теперь посмотрите тепловую карту и проанализируйте среднее количество выданных промокодов.
import pandas
import seaborn
data = pandas.read_csv('support_data_ds.csv')
segments_new = ['Потенциальные клиенты', 'Обычные клиенты', 'VIP-клиенты']
intervals = ['До внедрения роботов', 'После внедрения роботов']
# для каждой пары сегмент-интервал считаем сумму выданных промокодов
# так как в столбце promo есть только значения 1 и 0, то сумма даст количество промокодов
promo_sum = data.groupby(['segment', 'interval'])['promo'].sum()
# для каждой пары сегмент-интервал считаем количество записей
promo_count = data.groupby(['segment', 'interval'])['promo'].count()
# считаем среднее: делим сумму на количество
mean_promo = promo_sum / promo_count
print(mean_promo)
# строим тепловую карту для количества промокодов
# столбец mean_promo получился вложенным из-за группировки по двум столбцам,
# поэтому его нужно «развернуть» методом unstack()
seaborn.heatmap(mean_promo.unstack('interval'),
xticklabels=intervals,
yticklabels=segments_new,
annot=True,
cmap='RdYlGn')
Задача 4
- найдите уникальные значения оценок из столбца score;
- посчитайте среднее количество промокодов для каждой оценки.
sorted()
— она расположит значения в правильном порядке. Поэтому напишите необходимый код в скобках рядом с названием функции. Оно уже в прекоде.import pandas
import seaborn
# считываем данные
data = pandas.read_csv('support_data_ds.csv')
# для каждой пары интервал-оценка считаем количество выданных промокодов
sum_promo = data.groupby(['interval', 'score'])['promo'].sum()
# для каждой пары интервал-оценка считаем количество записей
count_promo = data.groupby(['interval', 'score'])['promo'].count()
# формируем список интервалов
intervals = ['До внедрения роботов', 'После внедрения роботов']
scores = sorted(data['score'].unique()) # соберите все уникальные оценки из столбца score
promo_chance = sum_promo/count_promo # разделите количество промокодов на количество записей
print (promo_chance)
#seaborn.heatmap(unstack('promo_chance')) # постройте тепловую карту для среднего количества промокодов;
seaborn.heatmap(promo_chance.unstack('interval'),
xticklabels=intervals,
yticklabels=scores,
annot=True,
cmap='RdYlGn')
7.8 Каждому свое.
7.9 Рекомендации клиентам.
Задача 1
shape
.import pandas
# загрузите файл с данными для обучения 'train_data_cat.csv'
X_train =pandas.read_csv('train_data_cat.csv')
# загрузите файл с данными для теста 'test_data_cat.csv'
X_test = pandas.read_csv('test_data_cat.csv')
y_train = pandas.read_csv('train_target.csv') # целевая переменная target из обучающей выборки
y_test = pandas.read_csv('test_target.csv') # целевая переменная target из тестовой выборки
print (X_train.shape) # выведите на экран размер X_train
print (X_test.shape) # выведите на экран размер X_test
sklearn.neighbors
алгоритм � ближайших соседей для решения задачи классификации. Задайте ему 3 ближайших соседа в параметре n_neighbors
.import pandas
from sklearn.neighbors import KNeighborsClassifier # импортируйте KNeighborsClassifier из sklearn.neighbors
X_train = pandas.read_csv('train_data_cat.csv')
X_test = pandas.read_csv('test_data_cat.csv')
y_train = pandas.read_csv('train_target.csv')
y_test = pandas.read_csv('test_target.csv')
knn = KNeighborsClassifier(n_neighbors=3) # передайте KNeighborsClassifier в качестве аргумента 3 соседа
# напечатайте knn
print (knn)
import pandas
from sklearn.neighbors import KNeighborsClassifier
X_train = pandas.read_csv('train_data_cat.csv')
X_test = pandas.read_csv('test_data_cat.csv')
y_train = pandas.read_csv('train_target.csv')
y_test = pandas.read_csv('test_target.csv')
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train,y_train) # обучите алгоритм на тренировочных данных
y_pred = knn.predict(X_test) # предскажите целевую переменную на тестовой выборке при помощи обученного алгоритма
# напечатайте y_pred
print (y_pred)
import pandas
from sklearn.neighbors import KNeighborsClassifier
# импортируйте метрику доли правильных ответов accuracy_score из sklearn.metrics
from sklearn.metrics import accuracy_score
X_train = pandas.read_csv('train_data_cat.csv')
X_test = pandas.read_csv('test_data_cat.csv')
y_train = pandas.read_csv('train_target.csv')
y_test = pandas.read_csv('test_target.csv')
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test,y_pred) # подсчитайте долю правильных ответов предсказанных значений целевой переменной с истинными ответами на тестовой выборке
print("Accuracy is: ", accuracy)
7.10 Последствия.
7.11 Заключение.
Следующий раздел: Полезные инструкции для учебы
Вернуться в оглавление: Я.Практикум