Что мы имеем в багаже перед началом изучения Python.
Скажу вам коротко из языка Python на сегодняшний момент не знаю команд.
В тоже самое время в свое время изучил Fortran, Basic и было это очень давно. Потом на дипломном проекте переложил работу ЕС ЭВМ, а конкретнее EC-1055 (да да я еще видел таких монстров) на СУБД Предприятие 7.7 и познакомился с языком программирования где команды пишутся на русском. Потом примерно в 2004 году нашел задачу про Битрикс и решил её только для своего интереса (как получать обновления системы если пробный период закончился). Была такая задача на конкурсе для айтишников по безопасности в самом Битриксе никто решить не смог, но решение лежало на поверхности, как говориться: "Подойди и возьми". Возможно еще не устранили, не проверял. Пробовал писать сайты в конструкторе Joomla не зашло. Изучал команды MySQL. Не пригодились за ненадобностью. Осваивал проект ZenoPoster на нем написал систему прогнозирования ставок на тотализаторе (футбол, хоккей, теннис). Система работала 6 месяцев, разогнала начальный банк в 7 раз а потом рухнула, в НОЛЬ.
Вот что я делал и изучал до открытия раздела: "Основы Python и анализа Данных".
Курс "Основы Python и анализа данных" состоит из 7 тем на 8 часов. Разжеван для ребят начинающих с НУЛЯ и понятен, освоил его часа за 4.
3. ОРУ. Переменные и типы данных.
4. ОРу. Как выдвигать гипотезы.
5. ОРу. Что делают специалисты в области данных.
Следующий раздел: Полезные инструкции для учебы
Вернуться в оглавление: Я.Практикум
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 Заключение.
Заключение
Вообще то стоит иногда повторять материал из данной темы, это важно.
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 Заключение.
Заключение
6. Машинное обучение.
Вернуться в Начало статьи
6.1 Введение.
- Что такое задачи классификации.
- Для чего нужна целевая переменная.
- Как рассчитывается метрика Евклида.
- Как применять метод ближайших соседей для решения задач классификации.
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 Работа с уникальными значениями.
years_unique
сохраните уникальные значения из столбца Year
. Код для вывода значений на экран уже написан.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
'До внедрения роботов'
и 'После внедрения роботов'
с помощью метода 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
Задача 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 Заключение.
Общий вывод по разделу
В итоге прохождения обучения желание учиться дальше не пропало. В итоге я поверил в свои силы, воспрял духом и оплатил курс Data Science, и стал студентом. При этом параллельно прочитал несколько статей в интернете. Установил себе на компьютер из репозитория Jupiter Netbook, попробовал запустить его и поработать в нем. Возникли некоторые проблемы с его запуском. Снес его полностью и установил полный пакет Anaconda с пакетом Jupiter Netbook. Вот этот пакет мне понравился, надеюсь пригодится в дальнейшем.
До новых встреч.
Вернуться в Начало статьи
Следующий раздел: Полезные инструкции для учебы
Вернуться в оглавление: Я.Практикум