#!/usr/bin/env python # coding: utf-8 # # Майнор по Анализу Данных, Группа ИАД-2 # ## Введение, вспоминаем Python 18/01/2017 # # Table of Contents #
# Этот [Jupyter Notebook](http://jupyter-notebook-beginner-guide.readthedocs.io/en/latest/what_is_jupyter.html) содержит вспомогательные указания для выполнения семинарских и домашних заданий. В течение курса мы будем преимущественно работать в подобных "тетрадках", но может быть иногда будем переключаться на другие среды\средства. # # (Я использую Python версии 2.x.x, а не 3.x.x) # ## Как установить Jupyter Notebook у себя дома?! # Самый простой и надежный способ - воспользоваться готовым дистрибутивом [Anaconda](https://store.continuum.io/cshop/anaconda/), включающий в себе практически все необходимые модули и утилиты, которые нам понадобятся - IPython, NumPy, SciPy, Matplotlib и **Scikit-Learn**. Просто следуйте указаниям установщика для вашей ОС. # # Рекомендую ознакомиться с этим [постом](https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/) - там приводятся различные интересные возможности "тетрадок" о которых вы возможно не знали. # ## Можно ли писать на 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[1]: import pandas as pd import numpy as np import matplotlib.pyplot as plt get_ipython().run_line_magic('matplotlib', 'inline') plt.style.use('ggplot') plt.rcParams['figure.figsize'] = (16,8) # ### Рождаемость в США # Загрузите два набора данных с информацией о рождаемости в США: [Набор 1](https://www.dropbox.com/s/4v743y3e25lz0an/US_births_1994-2003_CDC_NCHS.csv?dl=0), [Набор 2](https://www.dropbox.com/s/3aoulbiuomamay6/US_births_2000-2014_SSA.csv?dl=0) # In[2]: get_ipython().system('ls') # In[3]: df1 = pd.read_csv('US_births_1994-2003_CDC_NCHS.csv') df2 = pd.read_csv('US_births_2000-2014_SSA.csv') # In[6]: df1.tail() # In[5]: df2.head() # Чем они отличаются? Соедините 2 таблицы, так, чтобы соблюсти целостность информации. # In[7]: # 1) Проверьте, что данные за общий период почти # не отличаются # 2) Объедините таблицы, чтобы они охватывали период # 1994-2014 # In[9]: df1 = df1.rename(columns={'date_of_month': 'day'}) # In[11]: df1.loc[:, 'date'] = \ pd.to_datetime(df1.loc[:, ['year', 'month', 'day']]) df1.head() # In[19]: df2 = df2.rename(columns={'date_of_month': 'day'}) df2.loc[:, 'date'] = \ pd.to_datetime(df2.loc[:, ['year', 'month', 'day']]) df2.head() # In[22]: df1 = df1.set_index('date') df2 = df2.set_index('date') # In[27]: df1.head() # In[28]: df2.head() # In[30]: result = df1.join(df2, how='inner', lsuffix='_df1', rsuffix='_df2') # In[37]: result.tail() # In[35]: # Сравним рождаемости result.loc[:, ['births_df1', 'births_df2']] (result.births_df1 - result.births_df2).mean() # In[36]: (result.births_df1 - result.births_df2).describe() # In[38]: df3 = df1.append(df2.loc['2004-01-01':, :]) # In[41]: # Проверим, что даты не повторяются df3.index.value_counts().head() # Даты уникальны! # Найдите количество детей, рождающихся 6, 13 и 20 числа каждого месяца с учетом дня недели. # # Выделяется ли как-то пятница 13? # In[51]: # Сделаем таблицу для 6 числа idx = df3.loc[:, 'day'] == 6 b6 = df3.loc[idx, :].groupby('day_of_week').births.mean() # И для всех остальных idx = df3.loc[:, 'day'] == 13 b13 = df3.loc[idx, :].groupby('day_of_week').births.mean() idx = df3.loc[:, 'day'] == 20 b20 = df3.loc[idx, :].groupby('day_of_week').births.mean() # In[52]: b6-b20 # In[56]: b20-b13 # ### Качество вина # Загрузите [датасет](https://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv) с информацией о характеристиках вина и его качестве. # In[ ]: # * Что из себя представляет объект в этом наборе данных? Сколько их? # * Какие признаки описывают объекты? Сколько их? # * Какой признак является целевым? # * Каковы их области значений? # * Есть ли пропуски? # In[ ]: # Какие признаки больше всего влияют на целевую переменную? # In[ ]: # Создайте новый столбец `quality_cat`, которая будет иметь значение `"good"` если `quality > 5` и `"bad"` - иначе.