Следующий раздел: Полезные инструкции для учебы
Вернуться в оглавление: Я.Практикум
7. Финальный проект.
7.1 Введение.
- проведёте полноценное исследование, пройдя весь путь — от изучения данных до проверки гипотез;
- напишете несколько инструкций, чтобы собрать нужные показатели;
- поупражняетесь в построении и анализе хитмэпов;
- примените алгоритм машинного обучения для задачи классификации.
7.2 Данные снова в деле.
7.3 Работа с уникальными значениями.
years_unique сохраните уникальные значения из столбца Year. Код для вывода значений на экран уже написан.Задача 2
intervalimport 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 Заключение.
Следующий раздел: Полезные инструкции для учебы
Вернуться в оглавление: Я.Практикум