Что мы имеем в багаже перед началом изучения Python.

Скажу вам коротко из языка Python на сегодняшний момент не знаю команд.

В тоже самое время в свое время изучил Fortran, Basic и было это очень давно. Потом на дипломном проекте переложил работу ЕС ЭВМ, а конкретнее EC-1055 (да да я еще видел таких монстров) на СУБД Предприятие 7.7 и познакомился с языком программирования где команды пишутся на русском. Потом примерно в 2004 году нашел задачу про Битрикс и решил её только для своего интереса (как получать обновления системы если пробный период закончился). Была такая задача на конкурсе для айтишников по безопасности в самом Битриксе никто решить не смог, но решение лежало на поверхности, как говориться: "Подойди и возьми". Возможно еще не устранили, не проверял. Пробовал писать сайты в конструкторе Joomla не зашло. Изучал команды MySQL. Не пригодились за ненадобностью. Осваивал проект ZenoPoster на нем написал систему прогнозирования ставок на тотализаторе (футбол, хоккей, теннис). Система работала 6 месяцев, разогнала начальный банк в 7 раз а потом рухнула, в НОЛЬ.

Вот что я делал и изучал до открытия раздела: "Основы Python и анализа Данных".

Курс "Основы Python и анализа данных" состоит из 7 тем на 8 часов. Разжеван для ребят начинающих с НУЛЯ и понятен, освоил его часа за 4.

Содержит:

1. ОРу. Moscow Catnamycs

2. ОРу. Ошибки в коде.

3. ОРУ. Переменные и типы данных.

4. ОРу. Как выдвигать гипотезы.

5. ОРу. Что делают специалисты в области данных.

6. ОРу. Машинное обучение.

7. ОРу. Финальный проект.

 

Следующий раздел:  Полезные инструкции для учебы

Вернуться в оглавление: Я.Практикум

1. Moscow Catnamycs

Вернуться в Начало статьи

   1.1 Вводный урок: Что и как?

   1.2 Первый код. Знакомство.

Познакомились с командой: print('Хочу стать крутым специалистом в сфере данных!')

   1.3 Гоша, коты и роботы.

   1.4 Ключ к CSV таблице.          

import pandas

           pandas.set_option('display.max_columns', None)
           pandas.set_option('display.max_rows', None)

           data = pandas.read_csv('polomki.csv', index_col='Магазин')
          print(data)

   1.5 Что вы только что написали.

      Подробный разбор команд из раздела 1.4

   1.6 Как превратить мысли в код.

   1.7 Зачем виалюзировать данные.

   1.8 Seaborn() и Heatmap().

     Необходимо вспомнить код из предыдущего уроков и познакомиться с пакетом matplotlib.pyplot для создания тепловой карты

    

 import matplotlib.pyplot as plt
     plt.rcParams['figure.figsize'] = (4, 8) # указываем размер визуализации
     import pandas
    data = pandas.read_csv('polomki.csv', index_col='Магазин')
     import seaborn
    seaborn.heatmap(data)

   1.9 Как понять что не так?

   1.10 Как умножить столбец на 100.

   1.11 Почините данные о поломках.

    Знакомство с умножением   

  import pandas
     data = pandas.read_csv('polomki.csv', index_col='Магазин')
     data['Неделя 14'] = data['Неделя 14'] * 100
     print (data) 

   1.12 Сообщение от Серёги.

   1.13 Новый Heatmap.

     Вывод тепловой карты при этом умножение последнего столбца на 100    

 import matplotlib.pyplot as plt
     import pandas
     import seaborn

    plt.rcParams['figure.figsize'] = (4, 8) # указываем размер визуализации
    data = pandas.read_csv('polomki.csv' , index_col = 'Магазин' )
    data['Неделя 14'] = data['Неделя 14'] * 100
    seaborn.heatmap(data)

   1.14 Выводы.

   1.15 Заключение.

2. Ошибки в коде.

Вернуться в Начало статьи

   2.1 Введение.

   2.2 Знакомство с ошибками.

   2.3 Как читать ошибки.

    Знакомство с ошибками:

    SyntaxError: invalid syntax, NameError: name 'dayz' is not defined, FileNotFoundError: [Errno 2] File b'polomki' does not exist: b'polomki'

    и вывод: 

  • Длинные сообщения об ошибках — это не только нормально, но и очень полезно. Мы ещё не раз вернёмся к теме ошибок в Python. В следующем уроке вы научитесь исправлять код, добывая нужную для этого информацию из сообщений об ошибках.
  • Ошибиться можно где и как угодно. Запоминать все существующие в Python ошибки совсем не обязательно: рядом с названием ошибки — будь то SyntaxError, NameError или что-нибудь ещё — Python всегда описывает суть проблемы.

   2.4 Лаборатория ошибок.

    Ошибки в числах    

china_population = 1393000000
    united_states_population = 328200000
    russia_population = 144500000

   2.5 Ошибки, еще больше ошибок. 

   2.6 Заключение.

    Подведём итоги

    Перед тем как пойти дальше, сделаем основные выводы:
  • Python строг: нельзя произвольно поменять буквы в названии переменной, оставить незакрытую кавычку или забыть запятую.
  • Python доступно объясняет, где сделана ошибка и в чём она состоит.
  • Важно читать название и описание ошибки. Например, NameError говорит, что проблема возникла в названии переменной, а SyntaxError — что не закрыта скобка или забыт какой-то знак.
  • Исправлять ошибки нетрудно, если понять логику сообщений Python и немного попрактиковаться.
     Теперь ошибки выглядят не так страшно. Можно идти дальше — впереди знакомство с переменными и типами данных.

3. Переменные и типы данных.

Вернуться в Начало статьи

   3.1 Введение

   3.2 Переменные.

   3.3 Лаборатория переменных.

   3.4 Больше переменных.

   3.5 Математика в Python.

   3.6 Типы данных.

   3.7 Лаборатория данных.

   3.8 Больше данных, больше типов.

   3.9 Заключение.

     

   Заключение

    Соберём все находки вместе:

   Строки

  • Если сложить два объекта типа string, они склеятся. Такая операция называется конкатенацией.
  • Строки нельзя вычитать.
  • При возведении строки в степень Python выдаст ошибку.

   Числа

  • Если складывать или вычитать целые числа типа int, получится целое число.
  • Если делить целое число int или число с плавающей точкой float на целое число, получится число с плавающей точкой.
  • От перемены мест слагаемых, как и множителей, результат не меняется.

    Разные типы данных

  • Можно применять как одинарные, так и двойные кавычки — это не влияет на результат. Главное — не смешивать их в рамках одного элемента: 'вот так не надо".
  • Если умножить строку str на целое число int, получится строка, повторённая int раз. Но если сделать то же самое с дробным числом float, Python выдаст ошибку.
  • Нельзя сложить str и число — неважно, целое или дробное.
  • Вывести на экран пустую строку можно так: print('').

4. Как выдвигать гипотезы.

Вернуться в Начало статьи

   4.1 Введение.

   Введение

    Специалисты по работе с данными — почти детективы. Они строят гипотезы и проверяют их на данных. Если же в данных нашлись ошибки —           разбираются, в чём дело.
    В этой теме вы узнаете:
  • как выдвигать гипотезы и аналитически рассуждать;
  • чем могут быть вызваны ошибки в данных;
  • что могут рассказать графики.

   4.2 Как выдвигать гипотезы.

   4.3 Лаборатория аналитического мышления.

   4.4 Почему в данных бывают ошибки.

   4.5 Как читать графики.

   4.6 Заключение.    

    Заключение

    Вы многому научились. Узнали про переменные, разные типы данных и математические операции в Python. А ещё вы теперь умеете читать графики и формулировать гипотезы — как самый настоящий специалист по анализу данных. Начало положено!

Вообще то стоит иногда повторять материал из данной темы, это важно.

5. Что делают специалисты в области данных.

Вернуться в Начало статьи

   5.1 Введение.

   5.2 Ева из геймдева.

   5.3 А чем ты занимаешься?

   5.4 Сыграем в МЕМТРИС.

   5.5 Настоящий специалист.

   5.6 Как уточнять задачи.

   5.7 Уточняем задачи.

   5.8 Декомпозиция.

   5.9 Jupiter Notebook.

   5.10 Проект Евы.

   5.11 Стадии проекта.

   5.12 Чем дело закончилось.

   5.13 проблемы и возможности.

   5.14 А я смогу?

   5.15 Заключение.    

    Заключение

     Прошли стандартный путь решения аналитической задачи и познакомились с новым инструментом — Jupyter Notebook.
Теперь вы знаете о работе аналитика ещё больше.
    По мере того, как вы будете изучать анализ данных, вы будете всё больше и больше узнавать Python.

6. Машинное обучение.

Вернуться в Начало статьи

   6.1 Введение.

     В этой теме вы изучите основы профессии «Специалист по Data Science». Вам предстоит построить свою первую модель машинного обучения для классификации клиентов и узнать:
  • Что такое задачи классификации.
  • Для чего нужна целевая переменная.
  • Как рассчитывается метрика Евклида.
  • Как применять метод ближайших соседей для решения задач классификации.
     В этой теме вы пройдёте через весь рабочий процесс специалиста по Data Science: предобработаете данные, проведёте исследовательский анализ и построите модель машинного обучения.

   6.2 Кто такой специалист по Data Science.

   6.3 И роботы учатся.

   6.4 Как обучить машину.

   6.5 Классифицируем клиентов.

   6.6 Введение в машинное обучение.

   6.7 Базовые термины машинного обучения.

   6.8 Метрика евклида.

    Метрика Евклида

    Уже в следующем уроке вы изучите алгоритм машинного обучения, который в ходе обучения вычисляет расстояния между разными объектами.     Чтобы его построить, нужно вспомнить, как вычислять расстояние на плоскости.
    Согласно Евклиду, чтобы найти расстояние между двумя точками на плоскости, нужно подставить их координаты в формулу:

   6.9 Алгоритм K ближайших соседей.

   6.10 Модель kNN. Применение.

    Реализация алгоритма и вывод результата

    import pandas
    from sklearn.neighbors import KNeighborsClassifier

    train_data = pandas.read_csv('Train.csv')  
    test_data = pandas.read_csv('Test.csv')

    X_train = train_data.drop('Segmentation', axis=1)
    y_train = train_data['Segmentation']

    X_test = test_data.drop('Segmentation', axis=1)
    y_test = test_data['Segmentation']

    knn = KNeighborsClassifier(n_neighbors=30)

    knn = knn.fit(X_train,y_train ) # обучите модель по обучающей выборке классифицировать классы

    y_pred =  knn.predict(X_test)# запустите модель строить прогнозы на тестовой выборке

    print(y_pred) # выведите на экран получившиеся предсказания

   Проверка доли правильных ответов

import pandas
from sklearn.neighbors import KNeighborsClassifier
 # импортируйте метрику доли правильных ответов accuracy_score из sklearn.metrics
from sklearn.metrics import accuracy_score

train_data = pandas.read_csv('Train.csv') 
test_data = pandas.read_csv('Test.csv') 

X_train = train_data.drop('Segmentation', axis=1)
y_train = train_data['Segmentation']

X_test = test_data.drop('Segmentation', axis=1)
y_test = test_data['Segmentation']

knn = KNeighborsClassifier(n_neighbors=30) 

knn.fit(X_train, y_train) 

y_pred = knn.predict(X_test) 
accuracy = accuracy_score (y_test,y_pred) # подсчитайте долю правильных ответов предсказанных значений целевой переменной с истинными ответами на тестовой выборке

print("Доля правильных ответов:", accuracy) # выведите на экран получившиеся предсказания

   6.11 Возвращение.

   6.12 Заключение.

    В этой теме вы познакомились с основами машинного обучения. Теперь вы сможете:
  • ориентироваться в терминологии машинного обучения: объекты, признаки, целевая переменная, модель, качество;
  • формулировать базовую постановку задачи машинного обучения;
  • объяснять, как устроен и обучается алгоритм ближайших соседей (kNN);
  • применять алгоритм kNN на данных, используя библиотеку sklearn;
  • замерять качество прогнозов обученной модели с помощью метрики accuracy.
    Впереди вас ждёт финальный проект, в котором вам предстоит применить все освоенные навыки в ходе изученного курса.

7. Финальный проект.

Вернуться в Начало статьи

   7.1 Введение. 

     Добро пожаловать в завершающую тему этого курса! Чтобы решить финальный кейс, вам понадобятся почти все полученные до этого знания и навыки.
     В этой теме вы:
  • проведёте полноценное исследование, пройдя весь путь — от изучения данных до проверки гипотез;
  • напишете несколько инструкций, чтобы собрать нужные показатели;
  • поупражняетесь в построении и анализе хитмэпов;
  • примените алгоритм машинного обучения для задачи классификации.
      Мы будем рядом и подскажем нужный инструмент, если вы с ним ещё не знакомы. Самое необходимое вы уже умеете: искать уникальные значения, группировать данные, строить разные типы графиков, обучать алгоритм ближайших соседей и предсказывать целевую переменную. Если забудете что-нибудь из пройденного, обратитесь к материалам предыдущих тем и уроков.

   7.2 Данные снова в деле.

   7.3 Работа с уникальными значениями.

   7.5 Изучение данных.

Задача 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

Оценить изменения показателей после внедрения роботов можно только в том случае, если данные распределены более или менее равномерно: если из всех 32 тысяч значений на период «после» приходится всего 100, сделанные выводы нельзя будет считать корректными.
Узнайте, сколько строк приходится на каждый период — посчитайте количество значений 'До внедрения роботов' и 'После внедрения роботов' с помощью метода 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() — этот метод посчитает сумму значений в каждой группе.
Таким образом, чтобы посчитать робокотов в разных сегментах, нужно последовательно применить несколько инструментов в одной строчке кода:
  1. Сгруппировать данные по столбцу segment с помощью groupby().
  2. Выбрать столбец robocats.
  3. Суммировать число робокотов в каждом сегменте с помощью 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

Загрузите тренировочные и тестовые данные клиентов Moscow Catnamycs и выведите на экран их размеры с помощью атрибута 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

Задача 2

Импортируйте из модуля 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)

Задача 3

Обучите алгоритм ближайших соседей с тремя соседями на тренировочных данных. Затем предскажите на тестовых данных целевую переменную и выведите её на экран.
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)
Осталось оценить получившийся алгоритм. Для этого проще всего воспользоваться одной из самых известных метрик качества в классификации — подсчитать долю правильных ответов.

Задача 4

Выведите на экран долю правильных ответов, которую предсказывает алгоритм на тестовых данных клиентов.
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 Заключение.

Вы решили последний кейс вводного курса и помогли Гоше восстановить справедливость. Поздравляем! Образовательная часть этого курса завершена.
За время прохождения курса вы освоили базовые концепции Python, выучили множество полезных функций, научились строить несколько видов графиков, а также обучать свою первую модель машинного обучения. Кроме этого, вы приобрели важнейшие навыки: научились правильно уточнять задачи, выдвигать и проверять гипотезы, исследовать данные и формулировать выводы.
Вы решили четыре кейса и научились профессионально работать с данными — изучать, находить проблемы, связи и закономерности, визуализировать. Спасибо за вложенные в учёбу время и силы. Эти знания помогут вам успешно пройти дальнейшее обучение и полностью освоить профессию.
Поздравляем с завершением курса!
Будем рады видеть вас среди студентов нового потока.
Пожалуйста, ответьте на несколько вопросов.
 

Общий вывод по разделу

В итоге прохождения обучения желание учиться дальше не пропало. В итоге я поверил в свои силы, воспрял духом и оплатил курс Data Science, и стал студентом. При этом параллельно прочитал несколько статей в интернете. Установил себе на компьютер из репозитория Jupiter Netbook, попробовал запустить его и поработать в нем. Возникли некоторые проблемы с его запуском. Снес его полностью и установил полный пакет Anaconda с пакетом Jupiter Netbook. Вот этот пакет мне понравился, надеюсь пригодится в дальнейшем.

До новых встреч.

Вернуться в Начало статьи

Следующий раздел:  Полезные инструкции для учебы

Вернуться в оглавление: Я.Практикум