#!/usr/bin/env python # coding: utf-8 # # Pandas # Тьюториалы: # - http://byumcl.bitbucket.org/bootcamp2013/labs/pandas.html # - http://pandas.pydata.org/pandas-docs/stable/10min.html # - https://www.kaggle.com/c/titanic/details/getting-started-with-python-ii # # Примеры: # - http://pandas.pydata.org/pandas-docs/stable/cookbook.html#cookbook # # Если нужно что-то более специальное -- смотрите в документации # - http://pandas.pydata.org/pandas-docs/stable/index.html # Рассмотрим сэмпл из данных по авиарейсам в США за январь-апрель 2008 года. # # # Полный датасет можно найти здесь: http://stat-computing.org/dataexpo/2009/2008.csv.bz2 # # Описание: http://stat-computing.org/dataexpo/2009/the-data.html # In[9]: import pandas as pd # In[10]: data = pd.read_csv('flights.csv') data.head() # In[3]: data.columns # In[4]: data.shape # In[14]: data['Distance'].head() # In[15]: data['CancellationCode'].unique() # In[19]: data[['DepDelay', 'ArrDelay']][:10] # Слайсы по столбцам и строкам: # In[26]: data.iloc[:10, 1:4] # #### Группировка данных # In[31]: data.groupby('UniqueCarrier') # In[36]: data.groupby('Cancelled')['Origin'].describe() # In[43]: data.groupby('Cancelled')['CancellationCode'].value_counts() # #### Объединение данных # In[45]: carrier = data[data['CancellationCode'] == 'A'] weather = data[data['CancellationCode'] == 'B'] # In[46]: pd.concat([carrier, weather]).head() # In[47]: pd.concat([carrier[:3], weather]).head() # #### Пропуски в данных # In[62]: data['CarrierDelay'][:10] # In[53]: data['CarrierDelay'].describe() # In[54]: data['CarrierDelay'].isnull()[:10] # In[63]: data[data['CarrierDelay'].isnull()][:10] # Избавляемся от пропусков: # In[65]: new_data = data.dropna(subset=['CarrierDelay']) new_data.shape # In[66]: new_data = data.dropna() new_data.shape # In[67]: new_data.to_csv('has_carrier_delay.csv') # # Matplotlib # Тьюториалы: # - http://matplotlib.org/users/pyplot_tutorial.html # - http://nbviewer.jupyter.org/github/jrjohansson/scientific-python-lectures/blob/master/Lecture-4-Matplotlib.ipynb # - http://matplotlib.org/users/beginner.html # # Примеры (просто делайте ctrl+f тип нужного графика): # - http://matplotlib.org/examples/pylab_examples/index.html # # Документация: # - http://matplotlib.org/contents.html # # Matplotlib + Pandas: # - http://pandas.pydata.org/pandas-docs/stable/visualization.html # In[13]: get_ipython().run_line_magic('pylab', 'inline') import matplotlib.pyplot as plt # In[69]: x = linspace(1, 10, 20) y = np.log(x) # In[70]: plot(x, y) # In[71]: scatter(x, y) # In[72]: plot(x, y, 'bo-') # In[82]: data['AirTime'].hist() # In[81]: data['AirTime'].hist(bins=30) # С группировкой: # In[15]: cmp_data = pd.concat([data[data['Origin'] == 'ATL'], data[data['Origin'] == 'ORD']]) cmp_data['AirTime'].hist(by=cmp_data['Origin'], bins=30) # In[16]: cmp_data['AirTime'].hist(by=cmp_data['Origin'], bins=30, sharey=True, sharex=True) # Как сделать то же самое в Matplotlib? # In[23]: bins = 30 fig, axis = plt.subplots(1, 2, sharey=True, sharex=True) axis[0].hist(cmp_data[cmp_data['Origin'] == 'ATL']['AirTime'].dropna(), bins=bins) axis[0].set_xlabel('AirTime') axis[0].set_ylabel('Scores') axis[1].hist(cmp_data[cmp_data['Origin'] == 'ORD']['AirTime'].dropna(), bins=bins) axis[1].set_xlabel('AirTime') # In[24]: fig.clf() # In[17]: bins = 30 index = np.arange(bins) plt.hist(cmp_data[cmp_data['Origin'] == 'ATL']['AirTime'].dropna(), bins=bins, alpha=0.6) plt.hist(cmp_data[cmp_data['Origin'] == 'ORD']['AirTime'].dropna(), bins=bins, alpha=0.6) plt.xlabel('AirTime') plt.ylabel('Scores') plt.title('Comparison of ATL and ORD airports') plt.legend(['ATL', 'ORD']) plt.show() # In[130]: bins = 30 index = np.arange(bins) plt.hist(cmp_data[cmp_data['Origin'] == 'ATL']['AirTime'].dropna(), bins=bins, alpha=0.6, normed=True) plt.hist(cmp_data[cmp_data['Origin'] == 'ORD']['AirTime'].dropna(), bins=bins, alpha=0.6, normed=True) plt.xlabel('AirTime') plt.ylabel('Scores') plt.title('Comparison of ATL and ORD airports') plt.legend(['ATL', 'ORD']) plt.show() # In[143]: plt.scatter(data['DepDelay'], data['ArrDelay']) plt.xlabel('DepDelay') plt.ylabel('ArrDelay') # In[183]: from sklearn.decomposition import PCA pca = PCA(n_components = 2) data_new = pca.fit_transform(data[['DepDelay', 'ArrDelay']].dropna()) print 'Component 1 explains %.2f of total variance'%pca.explained_variance_ratio_[0] print 'Component 2 explains %.2f of total variance'%pca.explained_variance_ratio_[1] plt.scatter(data['DepDelay'], data['ArrDelay']) tg = pca.components_[0,1]/pca.components_[0,0] plt.plot([data['DepDelay'].min(), data['DepDelay'].max()], [data['DepDelay'].min() * tg, data['DepDelay'].max() * tg], color='green') plt.plot([data['DepDelay'].min(), data['DepDelay'].max()], [data['ArrDelay'].min(), data['ArrDelay'].max()], color = 'red') plt.legend(['Regression that accounts variance', 'Obvious regression'], loc=4) # # Задания # По векторным операциям: # 1. Найдите несколькими способами диагональ матричного произведения # 2. Вставьте между каждым числом в заданном векторе четыре нуля # 3. Найдите ближайшее значение в массиве к заданному # 4. Найдите ближайшую строчку в массиве к заданной # # По датасету flights: # 1. Найдите рейс (FlightNum) с максимальной длиной перелетов. Уникален ли такой рейс? # 2. Найдите для каждого аэропорта среднее время полета (AirTime) по всем вылетевшим из него рейсам. Какой аэропорт имеет наибольшее значение этого показателя? # 3. Найдите аэропорт, у которого наибольшая доля задержанных (DepDelay > 0) рейсов. Исключите при этом из рассмотрения аэропорты, из которых было отправлено меньше 1000 рейсов (используйте функцию filter после groupby).