Майнор по Анализу Данных, Группа ИАД-2

Введение, вспоминаем Python 18/01/2017

Этот Jupyter Notebook содержит вспомогательные указания для выполнения семинарских и домашних заданий. В течение курса мы будем преимущественно работать в подобных "тетрадках", но может быть иногда будем переключаться на другие среды\средства.

(Я использую Python версии 2.x.x, а не 3.x.x)

Как установить Jupyter Notebook у себя дома?!

Самый простой и надежный способ - воспользоваться готовым дистрибутивом Anaconda, включающий в себе практически все необходимые модули и утилиты, которые нам понадобятся - IPython, NumPy, SciPy, Matplotlib и Scikit-Learn. Просто следуйте указаниям установщика для вашей ОС.

Рекомендую ознакомиться с этим постом - там приводятся различные интересные возможности "тетрадок" о которых вы возможно не знали.

Можно ли писать на Python 3?

Пишите, ради бога. В нашем случае разница будет минимальна, поэтому код можно легко перевести из одной версии в другую.

Зачем мне нужен этот курс?

Данный курс должен дать вам:

  • Основные знания и навыки используемые при работе с данными
  • Понимание базовых методов прикладной статистики и (о боже!) машинного обучения
  • Умение поставить задачу и выбрать метод для ее решения

Я стану Data Scientist'ом?!

Фундамент будет заложен. А дальше нужна практика и ваша собственная мотивация.

Что желательно уметь делать, будучи DS:

  1. Data Exploration and Preparation
  2. Data Representation and Transformation
    1. Modern Databases
    2. Mathematical Representations
  3. Computing with Data
  4. Data Visualization and Presentation
  5. Data Modeling
    1. Generative Modelling (Applied Statistics)
    2. Predictive Modelling (ML)
  6. Domain Expertise (optional)

Вспоминаем pandas

In [ ]:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

plt.style.use('ggplot')
plt.rcParams['figure.figsize'] = (16,8)

Рождаемость в США

Загрузите два набора данных с информацией о рождаемости в США: Набор 1, Набор 2

In [ ]:
 

Чем они отличаются? Соедините 2 таблицы, так, чтобы соблюсти целостность информации.

In [ ]:
 

Найдите количество детей, рождающихся 6, 13 и 20 числа каждого месяца с учетом дня недели.

Выделяется ли как-то пятница 13?

In [ ]:
 

Качество вина

Загрузите датасет с информацией о характеристиках вина и его качестве.

In [ ]:
 
  • Что из себя представляет объект в этом наборе данных? Сколько их?
  • Какие признаки описывают объекты? Сколько их?
  • Какой признак является целевым?
  • Каковы их области значений?
  • Есть ли пропуски?
In [ ]:
 

Какие признаки больше всего влияют на целевую переменную?

In [ ]:
 

Создайте новый столбец quality_cat, которая будет иметь значение "good" если quality > 5 и "bad" - иначе.

In [ ]:
 

Нарисуйте гистрограммы признака alcohol в группах с quality_cat == "good" и quality_cat == "bad".

In [ ]:
 

Можете ли вы придумать правило для классификации вина на хорошее и плохое по рисунку выше? Пусть это будет нашей первой моделью)

Напишите функцию brute_clf_train() которая бы перебирала пороговое значение по признаку alcohol и находило бы "оптимальное" (кстати, что значит оптимальное?)

In [ ]:
 

Напишите функцию brute_clf_predict() которая бы по значению признака alcohol и найденному выше порогу говорила какое качество у вина.

А заодно выводила бы количество "ошибок" на текущем наборе данных

Проверим, как обобщается наша модель на другие данные.

  • Загрузите другой датасет
  • Выполните те же панипуляции с признаками
  • Используйте нашу простейшую модель для предсказания качества на новых данных
In [ ]:
 

Вспоминаем NumPy

Упражнения с векторами и матрицами

In [ ]:
 

Линейная регрессия

Загрузите файл 1 и файл 2 в папку с тетрадкой. С помощью функции loadtxt в модуле numpy загрузите табличные данные одного из файлов. Присвойте y = D[:,0] а X = D[:, 1:].

Сейчас мы воспользуемся одной магической формулой и построим модель линейной регрессии. Откуда эта формула берется мы узнаем на следующих занятиях.

Модель линейной регрессии в матричном виде выглядит так: $\hat{y} = X\hat{\beta}$, где

$$ \hat{\beta} = (X^T X)^{-1} X^T y $$

Остатки модели рассчитываются как $$ \text{res} = y - \hat{y} $$

Итак, еще раз:

  1. Загрузите данные
  2. Оцените веса $\beta$ с помощью формулы
  3. Постройте график, на котором по оси Y: остатки, а по оси X: $\hat{y}$
In [ ]:
# load data
D = np.loadtxt('tutorial_dataset_1.csv', 
               skiprows=1, 
               delimiter=',')
In [ ]:
# Write your code here
#
#
#