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