{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Проект по анализу данных\n", "\n", "## Общая информация\n", "\n", "Дата выдачи: 15.03.2016\n", "\n", "Срок сдачи: 27.03.2016 09:00MSK\n", "\n", "### О задании\n", "В рамках курса \"Интеллектуальный анализ данных\" помимо выполнения контрольных и практических заданий вам также нужно выполнить проект. За каждый модуль ставится отдельная оценка. В этом модуле вам предстоит познакомиться с данными, сделать их описание, поискать закономерности. В следующем модуле вы продолжите работу с этими данными, но уже будете строить непосредственные модели, работающие с ними. \n", "\n", "Там, где требуется написать код, будет указано:\n", " \n", " ######################\n", " ### YOUR CODE HERE ###\n", " ######################\n", "\n", "### Оценивание и штрафы\n", "Каждая из задач имеет определенную «стоимость» (указана в скобках около задачи). Максимально допустимая оценка за работу — 10 баллов. Помимо кода вам также требуется написать развернутые ответы на вопросы.\n", "\n", "Сдавать задание после указанного срока сдачи нельзя. При выставлении неполного балла за задание в связи с наличием ошибок на усмотрение проверяющего предусмотрена возможность исправить задание на указанных в ответном письме условиях.\n", "\n", "Задание выполняется САМОСТОЯТЕЛЬНО. «Похожие» решения считаются плагиатом и все задействованные студенты (в том числе те, у кого списали) не могут получить за него больше 0 баллов. Если вы нашли решение какого-то из заданий в открытом источнике, необходимо прислать ссылку на этот источник (скорее всего вы будете не единственным, кто это нашел, поэтому чтобы исключить подозрение в плагиате, необходима ссылка на источник).\n", "\n", "Если вы будете решать задание на виртуальной машине, учтите, что его могут видеть все. К тому же недоступность виртуальной машины не является уважительной причиной для продления дедлайна.\n", "\n", "Обратите внимание, что на устном зачете в конце семестра некотоые вопросы могут быть связаны с проектом.\n", "\n", "### Доп. баллы\n", "В данном проекте вам будет предложено рассмотреть некоторые интересные закономерности в данных. Если вы обнаружите что-то интересное (например, в последнем пункте), либо у вас есть идеи как можно работать с данным датасетом — присылайте, это будет поощряться дополнительными баллами. Кроме того, вы можете выступить со своим личным исследованием на семинаре, это также не останется незамеченным.\n", "\n", "### Формат сдачи\n", "Для сдачи задания переименуйте получившийся файл *.ipynb в соответствии со следующим форматом: Username_(group)_Project.ipynb, где Username — ваша фамилия на латинице, group — название группы (например, Kozlova_IAD-11_Project.ipynb). Далее отправьте этот файл на используемую в Вашей группе почту курса (hse.minor.dm@gmail.com) c темой письма [ИАД-NN] - Проект - Фамилия Имя Отчество." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Определение итоговой оценки студента" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В качестве данных мы будем рассматривать два датасета, а именно предсказание оценки по португальскому языку или математике. С какими именно данными нужно будет работать вам можно узнать вызвав функцию *get_dataset_name*, на вход ей передав ваш адрес электронной почты." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def get_dataset_name(email):\n", " return 'student-mat.csv' if sum(ord(c) for c in email) % 2 else 'student-por.csv'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Выполните код ниже, передав на вход строку с адресом электронной почты:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "get_dataset_name('')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "По набору и типу признаков эти даннык никак не отличаются, поэтому на все вопросы ниже вам нужно ответить в рамках вашего датасета." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import scipy as sp\n", "import pylab as plt\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Для начала загрузите данные. Обратите внимание, чтобы данные были загружены верно (был указан верный разделитель, а так же корректно отображались названия столбцов). Чтобы это проверить, а также посмотреть что представляют из себя данные, можно вывести первые несколько строк загруженного датасета на экран." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "######################\n", "### YOUR CODE HERE ###\n", "######################" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(0.5 балла)** Что в данной задаче является объектом?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Как можно видеть, признаков много и они все разной природы. Вот более подробная расшифровка признаков:\n", "\n", " - school - тип школы (\"GP\" - Gabriel Pereira или \"MS\" - Mousinho da Silveira)\n", " - sex - пол (\"F\" - female или \"M\" - male)\n", " - age - возраст (от 15 до 22)\n", " - address - откуда студент (\"U\" - urban или \"R\" - rural)\n", " - famsize - размер семьи (\"LE3\" - меньше или равно 3 или \"GT3\" - больше 3)\n", " - Pstatus - в каких отношениях родители (\"T\" - живут вместе \"A\" - раздельно)\n", " - Medu - образование матери (0 - никакого, 1 - начальное образование (4 класса), 2 – от 5 до 9 классов, 3 – среднеспециальное или 4 – высшее)\n", " - Fedu - образование отца (0 - никакого, 1 - начальное образование (4 класса), 2 – от 5 до 9 классов, 3 – среднеспециальное или 4 – высшее)\n", " - Mjob - работа матери (\"teacher\", \"health\" care related, civil \"services\" (e.g. administrative or police), \"at_home\" or \"other\")\n", " - Fjob - работа отца (\"teacher\", \"health\" care related, civil \"services\" (e.g. administrative or police), \"at_home\" or \"other\")\n", " - reason - причина выбора школы (близко к дому — \"home\", репутация школы — \"reputation\", \"course\" предпочтение некоторым предметам или \"other\")\n", " - guardian - опекун (\"mother\", \"father\" или \"other\")\n", " - traveltime - время от дома до школы (1 - меньше 15 мин., 2 - 15 до 30 мин., 3 - 30 мин. до 1 часа, или 4 - больше 1 часа)\n", " - studytime - количество часов обучения в неделю (1 - меньше 2 часов, 2 - от 2 до 5 часов, 3 - от 5 до 10 часов, или 4 - больше 10 часов)\n", " - failures - колисечтво ранее не сданных предметов (n if 1 <= n < 3, else 4)\n", " - schoolsup - дополнительные занятия (yes or no)\n", " - famsup - помощь от семьи при выполнении заданий (yes or no)\n", " - paid - дополнительные платные занятия (yes or no)\n", " - activities - внеклассная деятельность (yes or no)\n", " - nursery - посещал детский сад (yes or no)\n", " - higher - желание высшего образования (yes or no)\n", " - internet - домашний интернет (yes or no)\n", " - romantic - состоит в романтических отношениях (yes or no)\n", " - famrel - насколько хорошо отношения в семье (от 1 - очень плохие до 5 - превосходные)\n", " - freetime - наличие свободного времени после школы (от 1 - очень мало до 5 - очень много)\n", " - goout - гуляет с друзьями (от 1 - редко до 5 - очень часто)\n", " - Dalc - употребление алкоголя в будние дни (от 1 - очень редко до 5 - очень часто)\n", " - Walc - употребление алкоголя в выходные (от 1 - очень редко до 5 - очень часто)\n", " - health - текущее состояние здоровья (от 1 - очень плохое до 5 - очень хорошее)\n", " - absences - количество школьных пропусков (от 0 до 93)\n", "\n", "Признаки ниже связаны с курсом (математика/португальский)\n", " - G1 - оценка за первый семестр (от 0 до 20)\n", " - G2 - оценка за второй семестр (от 0 до 20)\n", " - [целевая переменная] G3 - итоговая оценка (от 0 до 20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(0.5 балла)** Какое количество признаков есть в данной задаче (целевая переменная не является признаком)?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "######################\n", "### YOUR CODE HERE ###\n", "######################" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(1 балл)** Определите к какому из указанных ниже типов относится каждый признак:\n", " - бинарный\n", " - числовой\n", " - категориальный\n", " - порядковый\n", " - множественный\n", "\n", "Если признаков некоторого типа нет, укажите это." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "######################\n", "### YOUR CODE HERE ###\n", "######################" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(0.5 балла)** Есть ли в данных пропуски? Если да, назовите какие признаки имеют пропуски и удалите все объекты с пропусками. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(1 балл)** Теперь посмотрите на целевую переменную. К какому типу задач относится данная? Поясните свой ответ." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(1 балл)** Постройте гистограмму значений целевой переменной с количеством бинов (bins) равным 20. Какое самое частое значение? Есть ли студенты, получисшие 0? 20? Постройте аналогичный гистограммы для признаков G1 и G2. Есть ли различие между ними и целевой переменной и в чем оно состоит?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "######################\n", "### YOUR CODE HERE ###\n", "######################" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(1 балл)** Посчитайте корреляцию Пирсона между целевой переменной и значениями G1 и G2. Можно ли сказать, что между ними есть линейная зависимость? Для вычисления корреляции Пирсона можно воспользоваться функцией [pearsonr](http://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.pearsonr.html) из модуля scipy.stats или методом [corr](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.corr.html) датафрейма." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "######################\n", "### YOUR CODE HERE ###\n", "######################" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(0.5 балла)** Найдите самую частую причину выбора школы." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "######################\n", "### YOUR CODE HERE ###\n", "######################" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(1 балл)** В данных есть несколько интересных признаков. Например, школа. Постройте на одной гистограмме распределение целевой переменной в зависимости от школы. Верно или нет, что у студенты одной школы имеют оценки выше, чем другой? Кроме того, интересно также узнать, сказывается ли причина выборка школы на оценках. Постройте аналогичную гистограмму для тех, у кого в поле причины указана самая частая причина (она должна быть найдена в предыдущем пункте) и всех остальных. Верно ли, что студентны, выбравшие данную школу по этой причине более успешны?\n", "\n", "(Примеры как можно строить такие гистограммы можно посмотреть в материалах к семинарам или [здесь](http://matplotlib.org/examples/statistics/histogram_demo_multihist.html) и [здесь](http://stackoverflow.com/questions/6871201/plot-two-histograms-at-the-same-time-with-matplotlib)). " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "######################\n", "### YOUR CODE HERE ###\n", "######################" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(0.5 балла)** Сделайте описание числовых признаков: какое среднее, медиана, дисперсия, минимальное и максимальное значение. Для всех ли признаков эти величины имеют смысл? Если нашлись такие признаки, то поясните почему." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "######################\n", "### YOUR CODE HERE ###\n", "######################" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(0.75 балла)** Верно ли, что студенты имеющие больше 10 пропусков учатся хуже, чем все остальные? На этот вопрос вы можете ответить, посмотрев на данные любым удобным для вас способом (например, аналогично предыдущим пунктам, либо сравнив средние оценки и т.д.). " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "######################\n", "### YOUR CODE HERE ###\n", "######################" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(0.75 балла)** Верно ли, что студенты желающие получить высшее образование учатся лучше, чем все остальные? " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "######################\n", "### YOUR CODE HERE ###\n", "######################" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**(1 балл)** Выберете признаки из не рассмотренных ранее. Какие на ваш взгляд влияют на итоговую оценку? Попробуйте найти закономерности, аналогичные рассмотренным (\"студенты желающие получить высшее образование учатся лучше, чем все остальные\")." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "######################\n", "### YOUR CODE HERE ###\n", "######################" ] } ], "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 }