{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Введение в анализ данных\n", "## Домашнее задание 2. Простой анализ данных и ИИ-инструменты.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Правила, прочитайте внимательно:**\n", "\n", "* Выполненную работу нужно отправить телеграм-боту `@thetahat_ds25_bot`. Для начала работы с ботом каждый раз отправляйте `/start`. Дождитесь подтверждения от бота, что он принял файл. Если подтверждения нет, то что-то не так. **Работы, присланные иным способом, не принимаются.**\n", "* Дедлайн см. в боте. После дедлайна работы не принимаются кроме случаев наличия уважительной причины.\n", "* Прислать нужно **ноутбук в формате `ipynb`**. Если вы строите интерактивные графики, их стоит прислать в формате html.\n", "* Следите за размером файлов. **Бот не может принимать файлы весом более 20 Мб.** Если файл получается больше, заранее разделите его на несколько.\n", "* Выполнять задание необходимо полностью самостоятельно. **При обнаружении списывания всем участникам списывания дается штраф -2 балла к итоговой оценке за семестр.**\n", "* Решения, размещенные на каких-либо интернет-ресурсах, не принимаются. Кроме того, публикация решения в открытом доступе может быть приравнена к предоставлении возможности списать.\n", "* Обратите внимание на правила использования ИИ-инструментов при решении домашнего задания.\n", "* **Код из рассказанных на занятиях ноутбуков** можно использовать без ограничений.\n", "* Для выполнения задания используйте этот ноутбук в качестве основы, ничего не удаляя из него. Можно добавлять необходимое количество ячеек.\n", "* Комментарии к решению пишите в markdown-ячейках.\n", "* Выполнение задания (ход решения, выводы и пр.) должно быть осуществлено на русском языке.\n", "* Решение проверяется системой ИИ-проверки **ThetaGrader**. Результат проверки валидируется и исправляется человеком, после чего комментарии отправляются студентам.\n", "* Если код будет не понятен проверяющему, оценка может быть снижена.\n", "* Никакой код из данного задания при проверке запускаться не будет. *Если код студента не выполнен, недописан и т.д., то он не оценивается.*\n", "\n", "Важно!!! Правила заполнения ноутбука:\n", "* Запрещается удалять имеющиеся в ноутбуке ячейки, менять местами положения задач.\n", "* Сохраняйте естественный линейный порядок повествования в ноутбуке сверху-вниз.\n", "* Отвечайте на вопросы, а также добавляйте новые ячейки в предложенных местах, которые обозначены `<...>`.\n", "* В markdown-ячейка, содержащих описание задачи, находятся специальные отметки, которые запрещается модифицировать.\n", "* При нарушении данных правил работа может получить 0 баллов.\n", "\n", "\n", "**Перед выполнением задания посмотрите презентацию по выполнению и оформлению домашних заданий с занятия 2.**\n", "\n", "\n", "**Баллы за задание:**\n", "\n", "Легкая часть (достаточно на \"хор\"):\n", "* Задача 1 — 5 баллов\n", "* Задача 2 — 25 баллов\n", "\n", "Сложная часть (необходимо на \"отл\"):\n", "* Задача 3 — 80 баллов\n", "* Задача 4 — 50 баллов\n", "\n", "Баллы учитываются в обязательной части курса и не влияют на оценку по факультативной части.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Bot check\n", "\n", "# HW_ID: fpmi_ad2\n", "# Бот проверит этот ID и предупредит, если случайно сдать что-то не то\n", "\n", "# Status: not final\n", "# Перед отправкой в финальном решении удали \"not\" в строчке выше\n", "# Так бот проверит, что ты отправляешь финальную версию, а не промежуточную" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "sns.set(style='whitegrid', palette='Set2')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "На лекции мы рассмотрели, как можно использовать инструменты искусственного интеллекта в нашем курсе, чтобы повысить личную эффективность. В этом домашнем задании мы предлагаем вам две технические задачи, которые можно полностью доверить ИИ. Они относятся к легкой части задания. Бывает работа, которую делать просто не хочется: она долгая, рутинная, несодержательная, не несет какой-либо интеллектуальной ценности. Такую работу по возможности стоит спихнуть искусственному интеллекту.\n", "\n", "\n", "Также в сложной части вы найдёте задачу по работе с библиотеками и небольшой анализ научной статьи из списка на ваш выбор. Все эти задания можно выполнить самостоятельно, но мы рекомендуем воспользоваться помощью ИИ, чтобы облегчить процесс 😊" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "### Легкая часть" ] }, { "cell_type": "markdown", "metadata": { "id": "Wn9SzJJQxEKQ" }, "source": [ "### Задача 1.\n" ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "401c68baed5870bfd4cb4374e9a69caf", "snippet_label": "start" }, "id": "JEeY6c_VxEKS" }, "source": [ "\n", "\n", "Это задача для разминки всего на 5 баллов. Возможно, она покажется вам забавной, но это действительно так 😃\n", "\n", "Ниже представлен код на языке C++. Перепишите его на Python и запустите без ошибок. Поясните, что делает этот код?\n", "\n", "Если код не работает, обсудите проблему с моделью или используйте другую, эта задача гарантированно решается." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Hm37S7bpxEKS" }, "outputs": [], "source": [ "#include \n", "#include \n", "#include \n", "#include \n", "\n", "#define 😃 int\n", "#define 🎉 void\n", "#define 🍎 std::vector\n", "#define 🖨️ std::cout\n", "#define 🔢 rand()\n", "#define ⏰ time(0)\n", "#define 🔀 srand\n", "#define 🔁 for\n", "#define 🔄 while\n", "#define 🎲 if\n", "#define 🎈 else\n", "#define 🚀 return\n", "#define 🎯 main\n", "#define 🖥️ std::endl\n", "\n", "🎉 🎭(🍎& 🍏, 😃 🍌, 😃 🍍, 😃 🍇) {\n", " 😃 🍒 = 🍍 - 🍌 + 1;\n", " 😃 🍓 = 🍇 - 🍍;\n", "\n", " 🍎 🍑(🍒), 🍐(🍓);\n", "\n", " 🔁 (😃 🍔 = 0; 🍔 < 🍒; 🍔++)\n", " 🍑[🍔] = 🍏[🍌 + 🍔];\n", " 🔁 (😃 🍔 = 0; 🍔 < 🍓; 🍔++)\n", " 🍐[🍔] = 🍏[🍍 + 1 + 🍔];\n", "\n", " 😃 🍔 = 0, 🍕 = 0, 🍖 = 🍌;\n", " 🔄 (🍔 < 🍒 && 🍕 < 🍓) {\n", " 🎲 (🍑[🍔] <= 🍐[🍕]) {\n", " 🍏[🍖] = 🍑[🍔];\n", " 🍔++;\n", " } 🎈 {\n", " 🍏[🍖] = 🍐[🍕];\n", " 🍕++;\n", " }\n", " 🍖++;\n", " }\n", "\n", " 🔄 (🍔 < 🍒) {\n", " 🍏[🍖] = 🍑[🍔];\n", " 🍔++;\n", " 🍖++;\n", " }\n", "\n", " 🔄 (🍕 < 🍓) {\n", " 🍏[🍖] = 🍐[🍕];\n", " 🍕++;\n", " 🍖++;\n", " }\n", "}\n", "\n", "🎉 🍿(🍎& 🍏, 😃 🍌, 😃 🍇) {\n", " 🎲 (🍌 < 🍇) {\n", " 😃 🍍 = 🍌 + (🍇 - 🍌) / 2;\n", "\n", " 🍿(🍏, 🍌, 🍍);\n", " 🍿(🍏, 🍍 + 1, 🍇);\n", "\n", " 🎭(🍏, 🍌, 🍍, 🍇);\n", " }\n", "}\n", "\n", "🍎 🎲(😃 🎯, 😃 🎰, 😃 🎳) {\n", " 🍎 🎨(🎯);\n", " 🔁 (😃 🍔 = 0; 🍔 < 🎯; 🍔++) {\n", " 🎨[🍔] = 🔢 % (🎳 - 🎰 + 1) + 🎰;\n", " }\n", " 🚀 🎨;\n", "}\n", "\n", "🎉 🖨️(const 🍎& 🍏) {\n", " 🔁 (😃 🍔 : 🍏) {\n", " 🖨️ << 🍔 << \" \";\n", " }\n", " 🖨️ << 🖥️;\n", "}\n", "\n", "😃 🎯() {\n", " 🔀(⏰);\n", "\n", " 😃 🎯 = 20;\n", " 😃 🎰 = 0;\n", " 😃 🎳 = 100;\n", "\n", " 🍎 🍏 = 🎲(🎯, 🎰, 🎳);\n", "\n", " 🖨️ << \"?: \";\n", " 🖨️(🍏);\n", "\n", " 🍿(🍏, 0, 🍏.size() - 1);\n", "\n", " 🖨️ << \"??: \";\n", " 🖨️(🍏);\n", "\n", " 🚀 0;\n", "}" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Su2ndaqKyzbF" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "401c68baed5870bfd4cb4374e9a69caf", "snippet_label": "end" } }, "source": [ "**Пояснение к коду:** ..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "f29fb05ffea036749d60c61d0373738b", "snippet_label": "start" }, "id": "kEb_3oJQxEKR" }, "source": [ "\n", "\n", "---\n", "### Задача 2.\n", "\n", "**При использовании ИИ в этой задаче необходимо прислать файл `task_2_ai_promt.txt` с копией вашего диалога с ИИ-инструментом**\n", "\n", "В этой задаче вам предстоит поработать с библиотекой Plotly. Это полезный инструмент для создания привлекательных и удобных графиков, который вы наверняка будете использовать в своей работе. Мы рекомендуем заранее изучить его функции и возможности, чтобы вы могли уверенно использовать его в дальнейшем.\n", "\n", "Одна из главных особенностей этой библиотеки — возможность настраивать и украшать графики по своему вкусу. Именно этим мы и предлагаем вам заняться в рамках данной задачи.\n", "\n", "Ниже приведен код для построения 3D-графика функции с помощью Plotly." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "XwQN5iSZxEKR" }, "outputs": [], "source": [ "import plotly.graph_objects as go\n", "\n", "\n", "def plot_3d_surface():\n", " x = np.linspace(-10, 10, 200)\n", " y = np.linspace(-10, 10, 200)\n", " x, y = np.meshgrid(x, y)\n", " z = np.cos(np.sqrt(x**2 + y**2))\n", "\n", " fig = go.Figure(data=[go.Surface(z=z, x=x, y=y)])\n", " fig.update_layout(\n", " title='Cosine Function 3D Surface Plot',\n", " scene=dict(\n", " xaxis_title='X Axis',\n", " yaxis_title='Y Axis',\n", " zaxis_title='Z Axis',\n", " aspectmode='cube',\n", " ),\n", " margin=dict(l=0, r=0, b=0, t=0)\n", " )\n", "\n", "\n", " fig.show()\n", "\n", "plot_3d_surface()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Выполните следующие действия в ячейках ниже.\n", "\n", "1. Задокументируйте функцию и добавьте комментариев. Необходимо это сделать так, чтобы любой человек мог понять, какая у нее задача и что делают отдельные части кода." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "f29fb05ffea036749d60c61d0373738b", "snippet_label": "end" }, "id": "43qo7GOCytah" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "5cb0979db038779eea74747578c4bf85", "snippet_label": "start" } }, "source": [ "\n", "\n", "2. Напишите, что делают следующие функции и опции:\n", "\n", "\n", "* `meshgrid`\n", "\n", "* `Figure`\n", "\n", "* `Surface`\n", "\n", "* `update_layout`\n", "\n", "* `scene`\n", "\n", "* `margin`\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "5cb0979db038779eea74747578c4bf85", "snippet_label": "end" } }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "2b7cf6390aa01f97d4e01e8c39bb1c82", "snippet_label": "start" } }, "source": [ "\n", "\n", "3. Выясните, какой параметр отвечает за настройку цветовой палитры графика? Измените код так, чтобы палитра была от светло-розового до светло-голубого." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "2b7cf6390aa01f97d4e01e8c39bb1c82", "snippet_label": "end" } }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "fef35e7717db0ff880eb1f1ebf35cee3", "snippet_label": "start" } }, "source": [ "\n", "\n", "4. Измените функцию так, чтобы она могла получать любые параметры настройки графиков через `kwargs`. Это позволит пользователям гибко настраивать параметры графика.\n", "\n", "...И напишите подробную инструкцию для пользователя этой функции😃" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "fef35e7717db0ff880eb1f1ebf35cee3", "snippet_label": "end" } }, "source": [ "**Инструкция:**\n", "\n", "..." ] }, { "cell_type": "markdown", "metadata": { "id": "uqbL_wWWxEKS" }, "source": [ "\n", "\n", "---\n", "### Сложная часть" ] }, { "cell_type": "markdown", "metadata": { "id": "99K4z6B9xEKT" }, "source": [ "### Задача 3.\n", "\n", "Эта задача предназначена для развития навыков работы с библиотекой pandas и простого анализа табличных данных. В ней детально описаны все шаги, которые необходимо выполнить. Если что-то не понятно, спросите ИИ или в чате курса." ] }, { "cell_type": "markdown", "metadata": { "id": "EjO5VDeFxEKT" }, "source": [ "Yelp — веб-сайт для поиска на местном рынке услуг, например ресторанов или парикмахерских, с возможностью добавлять и просматривать рейтинги и обзоры этих услуг. Для популярных бизнесов имеются сотни обзоров. Для обозревателей на сайте предусмотрены элементы социальной сети.\n", "\n", "![Yelp](https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Yelp_Logo.svg/300px-Yelp_Logo.svg.png)\n", "\n", "_____________\n", "\n", "Вам предоставляется следующая информация о компаниях на Yelp:\n", "\n", "Файл `yelp_business.csv`:\n", "* `business_id` — уникальный идентификатор компании;\n", "* `name` — имя компании;\n", "* `address`, `city`, `state` — месторасположении компании;\n", "* `latitude`, `longitude` — географические координаты;\n", "* `categories` — категории услуг компании.\n", "\n", "Файл `yelp_review.csv`, содержащий оценки пользователей:\n", "* `business_id` — идентификатор компании, соответствующий файлу `yelp_business.csv`;\n", "* `stars` — поставленная пользователем оценка от 1 до 5.\n", "\n", "В целях сокращения объема файла, текстовые отзывы пользователей не были включены.\n", "\n", "Оригинальную версию датасета в формате `json` можно посмотреть по ссылке, но использовать нужно выданные данные.\n", "\n", "_____________\n", "\n", "**Что нужно сделать:**\n", "\n", "* Найти город с наибольшим количеством компаний;\n", "* Для этого города определить районы с наиболее качественными услугами. Пример с несколько другой задачей.\n", "* А также найти рестораны с наилучшими отзывами.\n", "\n", "\n", "*Далее в условии встречаются различные подсказки, как можно выполнить определенные части задачи. Вы можете их игнорировать и делать иным способом для получения **того же самого промежуточного результата**. Однако, если ваше решение окажется **значительно** менее эффективным (по скорости, количеству и красоте кода) по сравнению с предполагаемым, баллы могут быть снижены.*\n", "\n", "------" ] }, { "cell_type": "markdown", "metadata": { "id": "rWJoGokZxEKT" }, "source": [ "#### 1. Город с наибольшим количеством компаний\n", "\n", "Загрузите данные из файла `yelp_business.csv` с помощью функции `pd.read_csv`. Посмотрите на первые несколько строк с помощью метода `head`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "fA_w156JxEKU" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "FD8pWselxEKU" }, "source": [ "Найдите пять городов, по которым присутствует информация о наибольшем количестве компаний. В таблице должен быть указан город (название) и количество компаний в этом городе.\n", "\n", "*Подсказка.* Для выполнения стоит воспользоваться методами `groupby`, `count`, `sort_values`, `head`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "FXfgjeOUxEKU" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "e7cca0cc751f37cd60e6ee92b5464ba1", "snippet_label": "start" }, "id": "fhH1dum6xEKU" }, "source": [ "\n", "\n", "Пусть `N` — город с наибольшим количеством компаний. Оставьте в таблице только записи, соответствующие городу `N`. Нанесите все эти компании на график, в котором по оси $x$ отметьте долготу, а по оси $y$ — широту." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "5WMisMOixEKV" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "xZBne9QZxEKV" }, "source": [ "Сам город находится в сгустке точек. Есть какие-то компании, которые приписаны к этому городу, но находятся далеко от него. Избавьтесь от них, подобрав некоторые границы значений широты и долготы. Изобразите все компании на новом графике. На этом графике должны выделяться некоторые улицы." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "e7cca0cc751f37cd60e6ee92b5464ba1", "snippet_label": "end" }, "id": "DC7OJXJbxEKV" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "3886558247e1540e5610b13a0a5ff638", "snippet_label": "start" }, "id": "-QX2ILkkxEKV" }, "source": [ "\n", "\n", "Разберитесь с тем, как подгрузить интерактивную карту города в качестве фона графика. Можно пойти двумя следующими способами.\n", "1. Изучить материалы по библиотеке Plotly. Возможно, потребуется также заглянуть в документацию.\n", "1. Поразбираться с библиотекой Folium. Посмотрите множество примеров, может также помочь статья на русском.\n", "\n", "*Внимание!* Интерактивная карта может не сохраниться в ноутбуке, а если сохранится, то вес ноутбука может превзойти 20 Мб, и его не получится отправить боту. В любом случае **необходимо сохранить карту в html и отправить ее отдельным файлом в бот.** При этом каждый файл html должен не превышать 20 Мб, присылать файлы в архиве нельзя. Аналогично со всеми следующими интерактивными графиками в этом задании." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "3886558247e1540e5610b13a0a5ff638", "snippet_label": "end" }, "id": "cgxzP8VGxEKV" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "rhekFZ5cxEKW" }, "source": [ "\n", "\n", "Если все получилось, вы молодцы! Далее в этой задаче тоже стройте интерактивные карты. Если нет желания разбираться с интерактивными графиками, можно построить статичные, но баллы будут снижены." ] }, { "cell_type": "markdown", "metadata": { "id": "vgWhyW1KxEKW" }, "source": [ "#### 2. Оценки компаний\n", "\n", "Для выполнения задания нужно посчитать среднюю оценку каждой компании, а также количество выставленных оценок.\n", "\n", "Загрузите таблицу оценок `yelp_review.csv`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "IjFZSbwlxEKW" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "rbQrWn-lxEKW" }, "source": [ "В подгруженной таблице оценок оставьте только компании города `N`. Для этого установите значения `business_id` в качестве индекса у таблицы оценок и воспользуйтесь методом `loc`.\n", "\n", "*Подсказка.* Чтобы индекс снова сделать полем таблицы, можно воспользоваться методом `reset_index`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "YAa5MAQSxEKW" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "3aSk-OB9xEKX" }, "source": [ "Теперь посчитайте среднюю оценку каждой компании, а также количество выставленных компании оценок.\n", "\n", "*Подсказка.* Помочь в этом могут функции `groupby` и `aggregate([np.mean, np.size])`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Gwn92vaIxEKX" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "IwnkRf0UxEKX" }, "source": [ "Назовите колонки таблицы красивыми именами, изменив `<имя таблицы>.columns`, после чего напечатайте несколько строк полученной таблицы. Красивые имена — то, что будет понятно простому человеку при чтении ваших результатов. Как именно их назвать — задача аналитика, то есть в данном случае ваша :)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "dt3kQctNxEKX" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "pgjPwOQ9xEKY" }, "source": [ "Соедините две полученные ранее таблицы по компаниям города `N` в одну.\n", "Для этого сначала установите поле `business_id` в качестве индекса в обеих таблицах с помощью `set_index`. В одной из них это уже должно было быть сделано.\n", "В полученной таблице должны получится поля `latitude`, `longitude`, `categories`, `name`, а также две колонки со средней оценкой компаний и количеством оценок, которые вы посчитали выше.\n", "\n", "*Подсказка.* Соединение таблиц можно выполнить с помощью `join`.\n", "Индексы у этих таблиц одинаковые, так что тип джойна не имеет значения." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "QaUFaqVnxEKY" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "bba9ec349279ff7d3caf3717aabafe3e", "snippet_label": "start" }, "id": "O80wkzT3xEKY" }, "source": [ "\n", "\n", "Изобразите все компании на графике, раскрасив точку в цвет, оттенок которого соответствует средней оценке компании. Прозрачность точки выставляйте не более $0.3$. Если у одной компании несколько филиалов с разными адресами, наносите на график все адреса." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "bba9ec349279ff7d3caf3717aabafe3e", "snippet_label": "end" }, "id": "rsZoLgzTxEKY" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "id": "0U97PAINxEKZ" }, "source": [ "\n", "\n", "Чтобы получить районы города, то есть разделить город на \"клетки\", округлите значения широты и долготы, подобрав оптимальный размер района.\n", "\n", "*Подсказка.* Например, можно сделать так\n", "`np.round(долгота*4, decimals=1)*0.25`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "YMGfQxRhxEKZ" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "228c0524733d5289e94cde00fc9b704b", "snippet_label": "start" }, "id": "C7RWeI5dxEKa" }, "source": [ "\n", "\n", "Для получения средней оценки компаний по району постройте сводную таблицу при помощи `pd.pivot_table`, взяв в качестве индексов и колонок округленные широту и долготу, а в качестве значений — оценки. Аггрегирующей функцией является среднее.\n", "\n", "Изобразите полученную таблицу при помощи `sns.heatmap`.\n", "\n", "*Замечание.* В качестве среднего можно было бы посчитать как общее среднее по всем оценкам всех компаний, так и среднее по компаниям их средних оценок. В чем разница этих подходов? Какой из них необходимо использовать в данном случае?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "228c0524733d5289e94cde00fc9b704b", "snippet_label": "end" }, "id": "cm_C3qxUxEKa" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "b4c4e083ebff2a19367f2df3097fcc53", "snippet_label": "end" }, "id": "oX20j_RyxEKa" }, "source": [ "\n", "\n", "Полученный график имеет ряд недостатков. Во-первых, не очень правильно судить о районе, если в нем мало компаний. Во-вторых, на графике цветовая гамма автоматически подстроилась под минимальное и максимальное значения оценки.\n", "\n", "Почему эти недостатки могут быть существенными?\n", "\n", "**Ответ:** <...>" ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "e8acf0d523beb5602fbacb4f19b6e912", "snippet_label": "start" }, "id": "wAVBtslVxEKb" }, "source": [ "\n", "\n", "Оставьте районы, в которых имеется информация о не менее $30$ компаний. Постройте новый график районов, использовав параметры `vmin` и `vmax` у функции `sns.heatmap`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "DoQmHGOSxEKb" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "e8acf0d523beb5602fbacb4f19b6e912", "snippet_label": "end" }, "id": "5_FU0xEExEKc" }, "source": [ "Сравните полученный график с предыдущим и сделайте вывод.\n", "\n", "**Вывод:** <...>" ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "41f197dab9cc006425d5cbab8bcc12f8", "snippet_label": "start" }, "id": "mAkLWNoZxEKc" }, "source": [ "\n", "\n", "#### 3. Рестораны\n", "\n", "Будем считать компанию рестораном, если в поле `categories` *содержится* слово `restaurant`. Обратите внимание, что в анализе данных часто нет четкого формата данных. Например, данное слово может быть написано как с большой буквы, так и с маленькой; может как разделяться `;`, так и не разделяться. При возникновении недопонимания стоит посмотреть данные.\n", "\n", "Составьте таблицу, в которой будет информация о всех ресторанах города `N`, для которых имеется не менее $5$ отзывов. Далее постройте heatmap-график районов, в котором каждому району сопоставьте среднюю оценку по ресторанам этого района. Рассматривайте только те районы, в которых есть не менее $10$ ресторанов, для каждого из которых есть не менее $5$ отзывов." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "8lusog5LxEKc" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "41f197dab9cc006425d5cbab8bcc12f8", "snippet_label": "end" }, "id": "6W0q879WxEKc" }, "source": [ "Чем полезны ограничения снизу на количество отзывов для ресторана и количество ресторанов в районе?\n", "\n", "**Ответ:** <...>" ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "cae6db258b07ada817b6c441921e0cd8", "snippet_label": "start" }, "id": "7pxNI-aaxEKc" }, "source": [ "\n", "\n", "Кот Василий из города `N` очень придирчив к выбору ресторана. Он доверяет только ресторанам с высоким рейтингом, который основывается на большом количестве отзывов. Напечатайте в виде таблицы информацию $10$ ресторанах с самым большим рейтингом в порядке убывания рейтинга. Для каждого из этих ресторанов должно быть не менее $50$ отзывов. По каждому ресторану необходимо вывести следующую информации: название ресторана, средняя оценка, количество отзывов, географические координаты, категории." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "cae6db258b07ada817b6c441921e0cd8", "snippet_label": "end" }, "id": "pZRe0BexxEKc" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "3dfd6f8a8d445e64850dc7cb2d5beca9", "snippet_label": "start" }, "id": "Jq413K26xEKc" }, "source": [ "\n", "\n", "Нанесите на карту все рестораны со средней оценкой не менее $4.7$, которая посчитана по не менее $50$ отзывам. Отдельным цветом отметьте 10 ресторанов, которые вы получили ранее." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ai_eval_tool": { "snippet_hash": "3dfd6f8a8d445e64850dc7cb2d5beca9", "snippet_label": "end" }, "id": "x5TtsFSLxEKd" }, "outputs": [], "source": [ "..." ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "7ddef107ae40b08ee84032d80dbfe73c", "snippet_label": "end" }, "id": "v_SOsRfRxEKd" }, "source": [ "\n", "\n", "Охарактеризуйте кота Василия, а также сделайте общий вывод по задаче.\n", "\n", "**Вывод:** <...>" ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "50003c7e0087be3d9377b547465ce334", "snippet_label": "start" }, "id": "Pl9rquPBNRhX" }, "source": [ "\n", "\n", "---\n", "\n", "### Задача 4.\n", "\n", "**При использовании ИИ в этой задаче необходимо прислать файл `task_4_ai_promt.txt` с копией вашего диалога с ИИ-инструментом**\n", "\n", "Представьте ситуацию, вы занимаетесь своей научной работой, и вам попалась одна интересная статья. Прежде чем глубоко погружаться в решение авторов вам хотелось бы понять, какую задачу решают авторы, насколько успешно, какие у них данные, какие навыки нужны для понимания. Например, было бы очень не оптимально последовательно глубоко разбирать все статьи, на это нужно потратить очень много времени. Предварительный анализ позволяет понять, какие решения в статьях существуют, выделить для себя наиболее интересные. Благодаря изобретению ИИ вы можете ускорить анализ статьей, быстрее разбираться в научных статьях, которые вам действительно интересны.\n", "\n", "**Выполните следующие действия**\n", "\n", "* Выберите одну научную статью из списка ниже.\n", "\n", "* Опишите **постановку задачи:** 1). на простом языке, чтобы ее могли понять люди без технического образования, 2). на математическом языке. Возможно, некоторые моменты окажутся сложными, тем не менее, попробуйте выделить ключевые элементы, используя ИИ.\n", "\n", "* Разберите **структуру входных данных**, которые использует решение авторов. Опишите их тип, например, таблица признаков, изображения с метками, текстовые данные с категориями, а также формат представления. Например, случае метода KNN это матрица признаков размером $n \\times d$ и вектор меток размером $n$.\n", "\n", "* Определите **ограничения на данные**. Уточните, есть ли требования к их балансу, наличию пропущенных значений, допустимым диапазонам чисел и другим характеристикам.\n", "\n", "* Выясните, **решает ли предложенная модель поставленную задачу** по мнению авторов. Обратите внимание на используемые метрики и проанализируйте, насколько они подтверждают успешность решения. Погружаться в работу метрик не требуется, достаточно лишь кратко изложить основные результаты.\n", "\n", "* Опишите, **какими знаниями необходимо обладать** для понимания работы модели. Это могут быть основы математики, такие как линейная алгебра и теория вероятностей, а также навыки программирования, например, владение Python и библиотеками машинного обучения.\n", "\n", "*Примечание.*\n", "* Ожидаемый объем работы: 200-300 слов. \n", "* Расчетное время выполнения: 1 час." ] }, { "cell_type": "markdown", "metadata": { "id": "XqJQHx46UnmP" }, "source": [ "#### **Трансформеры и языковые модели** \n", "1. **Attention is All You Need** \n", " *Vaswani et al., NeurIPS 2017* \n", " [arXiv:1706.03762](https://arxiv.org/abs/1706.03762) \n", "\n", "2. **BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding** \n", " *Devlin et al., NAACL 2019* \n", " [arXiv:1810.04805](https://arxiv.org/abs/1810.04805) \n", "\n", "3. **Language Models are Few-Shot Learners** \n", " *Brown et al., NeurIPS 2020* \n", " [arXiv:2005.14165](https://arxiv.org/abs/2005.14165) \n", "\n", "4. **Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer** \n", " *Raffel et al., JMLR 2020* \n", " [arXiv:1910.10683](https://arxiv.org/abs/1910.10683) \n", "\n", "5. **Scaling Laws for Neural Language Models** \n", " *Kaplan et al., NeurIPS 2020* \n", " [arXiv:2001.08361](https://arxiv.org/abs/2001.08361) \n", "\n", "6. **Llama 2: Open Foundation and Fine-Tuned Chat Models** \n", " *Meta AI, 2023* \n", " [arXiv:2307.09288](https://arxiv.org/abs/2307.09288) \n", "\n", "7. **GPT-4 Technical Report** \n", " *OpenAI, 2023* \n", " [arXiv:2303.08774](https://arxiv.org/abs/2303.08774) \n", "\n", "8. **Gemini: A Family of Highly Capable Multimodal Models** \n", " *Google DeepMind, 2023* \n", " [arXiv:2312.11805](https://arxiv.org/abs/2312.11805) \n", "\n", "\n", "#### **Компьютерное зрение и визуальные модели** \n", "9. **An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale** \n", " *Dosovitskiy et al., ICLR 2021* \n", " [arXiv:2010.11929](https://arxiv.org/abs/2010.11929) \n", "\n", "10. **Learning Transferable Visual Models From Natural Language Supervision** \n", " *Radford et al., ICML 2021* \n", " [arXiv:2103.00020](https://arxiv.org/abs/2103.00020) \n", "\n", "11. **Segment Anything** \n", " *Kirillov et al., Meta AI, 2023* \n", " [arXiv:2304.02643](https://arxiv.org/abs/2304.02643) \n", "\n", "12. **Scaling Vision Transformers to 22 Billion Parameters** \n", " *Dehghani et al., Google DeepMind, 2023* \n", " [arXiv:2302.05442](https://arxiv.org/abs/2302.05442) \n", "\n", "#### **Self-Supervised and Contrastive Learning** \n", "13. **A Simple Framework for Contrastive Learning of Visual Representations** \n", " *Chen et al., CVPR 2020* \n", " [arXiv:2002.05709](https://arxiv.org/abs/2002.05709) \n", "\n", "14. **Self-Supervised Learning of Pretext-Invariant Representations** \n", " *Misra and Maaten, CVPR 2020* \n", " [arXiv:1912.01991](https://arxiv.org/abs/1912.01991) \n", "\n", "15. **Big Self-Supervised Models are Strong Semi-Supervised Learners** \n", " *Chen et al., NeurIPS 2020* \n", " [arXiv:2006.10029](https://arxiv.org/abs/2006.10029) \n", "\n", "16. **Unsupervised Learning of Visual Features by Contrasting Cluster Assignments** \n", " *Caron et al., NeurIPS 2020* \n", " [arXiv:2006.09882](https://arxiv.org/abs/2006.09882) \n", " \n", "#### **Обучение с подкреплением** \n", "17. **Reinforcement Learning with Augmented Data** \n", " *Laskin et al., NeurIPS 2020* \n", " [arXiv:2004.14990](https://arxiv.org/abs/2004.14990) \n", "\n", "18. **Neural Architecture Search with Reinforcement Learning** \n", " *Zoph and Le, ICLR 2017* \n", " [arXiv:1611.01578](https://arxiv.org/abs/1611.01578) \n", "\n", "\n", "#### **Архитектуры нейросетей и их масштабирование** \n", "19. **EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks** \n", " *Tan and Le, ICML 2019* \n", " [arXiv:1905.11946](https://arxiv.org/abs/1905.11946) \n", "\n", "20. **Emergent Abilities of Large Language Models** \n", " *Wei et al., 2023* \n", " [arXiv:2206.07682](https://arxiv.org/abs/2206.07682) \n", "\n", "21. **Scaling Data-Constrained Language Models** \n", " *Muennighoff et al., 2023* \n", " [arXiv:2305.16264](https://arxiv.org/abs/2305.16264) \n", "\n", "\n", "#### **Математика, байесовские методы и причинно-следственный анализ** \n", "22. **Deep Learning for Symbolic Mathematics** \n", " *Lample and Charton, ICLR 2020* \n", " [arXiv:1912.01412](https://arxiv.org/abs/1912.01412) \n", "\n", "23. **Causal Inference with a Functional Outcome** \n", " *Ecker et al., 2023* \n", " [arXiv:2304.07113](https://arxiv.org/abs/2304.07113) \n", "\n", "24. **General Bayesian Inference for Causal Effects Using Covariate Balancing Procedure** \n", " *Orihara et al., 2024* \n", " [arXiv:2404.09414](https://arxiv.org/abs/2404.09414) \n", "\n", "25. **A Deep-Learning Based Bayesian Approach to Seismic Imaging and Uncertainty Quantification** \n", " *Siahkoohi et al., 2020* \n", " [arXiv:2001.04567](https://arxiv.org/abs/2001.04567) \n", "\n", "26. **Robust Inference for High-Dimensional Linear Models** \n", " *Wang et al., 2021* \n", " [arXiv:2106.07717](https://arxiv.org/abs/2106.07717) \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Выбранная статья:** ..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Анализ статьи:**" ] }, { "cell_type": "markdown", "metadata": { "ai_eval_tool": { "snippet_hash": "50003c7e0087be3d9377b547465ce334", "snippet_label": "end" } }, "source": [ "..." ] } ], "metadata": { "colab": { "provenance": [] }, "hide_input": false, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 1 }