Дата выдачи: 26.01.2016
Срок сдачи: 09.02.2016 09:00 MSK
Цель лабораторной работы №1 - познакомиться поближе с работой библиотек NumPy и Pandas путём решения набора задач. Для выполнения задания необходимо заполнить данный ipython notebook, решив поставленные задачи.
Каждая из задач имеет определенную «стоимость» (указана в скобках около задачи). Максимально допустимая оценка за работу — 10 баллов.
Сдавать задание после указанного срока сдачи нельзя. При выставлении неполного балла за задание в связи с наличием ошибок на усмотрение проверяющего предусмотрена возможность исправить задание на указанных в ответном письме условиях.
Задание выполняется САМОСТОЯТЕЛЬНО. «Похожие» решения считаются плагиатом и все задействованные студенты (в том числе те, у кого списали) не могут получить за него больше 0 баллов. Если вы нашли решение какого-то из заданий в открытом источнике, необходимо прислать ссылку на этот источник (скорее всего вы будете не единственным, кто это нашел, поэтому чтобы исключить подозрение в плагиате, необходима ссылка на источник).
Если вы будете решать задание на виртуальной машине, учтите, что его могут видеть все.
Для сдачи задания переименуйте получившийся файл *.ipynb в соответствии со следующим форматом: Username_(group)_Lab1.ipynb, где Username — ваша фамилия на латинице, group — название группы (например, Kozlova_IAD-11_Lab1.ipynb). Далее отправьте этот файл на используемую в Вашей группе почту курса (hse.minor.dm@gmail.com) c темой письма [ИАД-NN] - Лабораторная работа 1 - Фамилия Имя Отчество.
Во всех заданиях ниже крайне не рекомендуется использовать циклы.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
** 1. (0.5 балла) ** Написать функцию, принимающую на вход число $N$, которая возвращает матрицу размера $N \times N$, в которой нули и единицы расположены в шахматном порядке. Например:
>>> print(checker(2))
[[0 1] [1 0]]
def checker(N):
pass
** 2. (0.5 балла) ** Написать функцию, принимающую на вход число $N$, которая возвращает матрицу размера $N \times N$ с последовательностью чисел $1, 2, ..., N - 1$ под главной диагональю. Например: >>> print(sub_diagonal_matrix(3)) [[0 0 0 0] [1 0 0 0] [0 2 0 0] [0 0 3 0]]
def sub_diagonal_matrix(N):
pass
** 3. (0.5 балла) ** Написать функцию, которая получает на вход матрицу и масштабирует каждый её столбец, а именно вычитает из столбца его среднее значение и делит столбец на стандартное отклонение. Сгенерировать с помощью метода numpy.random.randint случайную матрицу и проверить на ней работу метода.
def scale(A):
pass
В следующей паре заданий используются данные о расположении в Москве камер видеонаблюдения. Данные можно найти по адресу https://github.com/611953/iad-20 в папке "Данные к домашнему заданию", а с помощью метода numpy.load() их можно загрузить в блокнот. Массив размера (27362, 3) представляет из себя 27362 записи о расположениях камер: количество камер в данной точке, ширина и долгота.
** 4. (1 балл) ** Согласно Википедии, координаты Кремля 55°45′06″ с. ш. 37°37′04″ в.д. Из тех же источников можно установить, что длина земного экватора составляет 40075 км. Для простоты предположим, что Москва плоская и расстояния в ней можно считать с помощью теоремы Пифагора. Написать функцию, которая преобразует массив с данными о расположении камер в массив выраженных в километрах расстояний от камеры до Кремя.
def distance(cameras):
pass
** 5. (1.5 балл) ** Построим более удобную для работы карту камер. Отобразим точки на карте в единичный квадрат: для этого поделим значения широты и долготы на соответствующие максимальные значения. Разобьем единичный квадрат на $N \times N$ маленьких одинаковых квадратов. Каждая из точек на карте попадет в один из маленьких квадратов разбиения. Требуется написать функцию, которая получает на вход массив данных о камерах, а на выходе выдает матрицу из $ N \times N$ целых чисел, равных количеству камер в соответствующем маленьком квадрате.
def cam_heatmap(cameras, N):
pass
Если функция написана правильно, этот код должен рисовать карту камер:
plt.clf()
plt.imshow(cam_heatmap(cameras, 100))
plt.show()
Далее предложено ответить на вопросы по данным об авиарейсах в США за январь-апрель 2008 года.
Загрузить данные можно здесь: http://stat-computing.org/dataexpo/2009/2008.csv.bz2 (обратите внимание, что распаковывать этот файл не обязательно — функция pandas.read_csv умеет читать из архивов автоматически)
Описание датасета: http://stat-computing.org/dataexpo/2009/the-data.html
** 1. (0.5 балла) ** Какая из причин отмены рейса (CancellationCode) была самой частой? (расшифровки кодов можно найти в описании данных)
** 2. (0.5 балла) ** Найдите среднее, минимальное и максимальное расстояние, пройденное самолетом.
** 3. (1 балл) ** Не выглядит ли подозрительным минимальное пройденное расстояние? В какие дни и на каких рейсах оно было? Какое расстояние было пройдено этими же рейсами в другие дни?
** 4. (1 балл) ** Из какого аэропорта было произведено больше всего вылетов? В каком городе он находится?
** 5. (1.5 балла) ** Найдите для каждого аэропорта среднее время полета (AirTime) по всем вылетевшим из него рейсам. Какой аэропорт имеет наибольшее значение этого показателя?
** 6. (1.5 балла) ** Найдите аэропорт, у которого наибольшая доля задержанных (DepDelay > 0) рейсов. Исключите при этом из рассмотрения аэропорты, из которых было отправлено меньше 1000 рейсов (используйте функцию filter после groupby).