Наука о данных/ДЗ№10

Материал из MathINFO
< Наука о данных
Версия от 21:56, 29 марта 2021; Ilya Schurov (обсуждение | вклад) (Новая страница: «В ДЗ№10 вам необходимо сделать небольшой индивидуальный проект по визуализации данных и...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

В ДЗ№10 вам необходимо сделать небольшой индивидуальный проект по визуализации данных и использованию библиотеки streamlit.

Работы оцениваются по принципу peer review, в режиме двойного слепого оценивания. Каждая работа должна получить как минимум три оценки от других студентов, при этом в качестве итоговой оценки используется медиана. При выставлении оценок они должны быть обоснованы. Лектор имеет право пересмотреть оценку, выставленную в ходе peer review, при наличии явных ошибок оценивания (например, рецензент не заметил функцию, которая на самом деле была реализована). Если вы по какой-то причине не можете участвовать в процедуре рецензирования, сообщите об этом до момента сдачи работы. Для получения оценки за проект каждый студент обязан отрецензировать по крайней мере три (можно больше) другие работы.

При сдаче работа должна быть анонимизирована, то есть в ней не должно быть указано имя или другая информация, идентифицирующая автора.

Любое использование чужого кода должно быть явно отмечено. Любой заимствованный код должен начинаться с комментария ### FROM: (адрес источника) и заканчиваться комментарием ### END FROM. Неправильно оформленная копипаста приравнивается к плагиату.

Инструкция

  • Ваше веб-приложение должно представлять собой интерактивный dashboard, то есть такую штуку, которая позволяет пользователю получать различную агрегированную информацию по данным — в основном, в виде визуализаций. При этом у пользователя должна быть возможность выбрать, например, способы фильтрации данных, или интересующие переменные, или интересующие типы визуализаций, то есть должна быть какая-то интерактивность (иначе нет смысла городить огород со streamlit).
  • Вы можете использовать любые публичные данные. Например, много датасетов есть на Kaggle, а у Google есть специальный сервис по поиску датасетов. Можно просто загрузить csv-файл, добавить его к своему репозиторию и открывать с помощью pandas как локальный файл, или просто передать pd.read URL-адрес файла. Другой способ: написать программу, обрабатывающую данные пользователя — в этом случае пользователь может сам загрузить свой файл и получить какой-то результат. (Но в этом случае хорошо иметь несколько примеров входных данных, на которых можно продмеонстрировать все возможности проекта.)
  • Типы визуализаций должны быть подобраны так, чтобы из них действительно можно было что-то понять про данные, получить ответы на какие-то естественные вопросы (по крайней мере, к этому следует стремиться).
  • Рекомендую попробовать разные библиотеки для визуализаций, в зависимости от того, какие именно визуализации нужны. Помимо базового matplotlib.pyplot и встроенных возможностей pandas, я рекомендую обратить внимание на seaborn и plotnine (для обычных, не интерактивных картинок, про интерактивные см. ниже). Если одну и ту же картинку можно построить с помощью разных библиотек, можно предложить пользователю выбрать. Для вдохновения можно посмотреть на этот сайт. Есть также вот такой сайт со сравнением библиотек визуализации.
  • Больше ценятся более «сложные» визуализации — например, содержащие несколько слоёв, какие-то дополнительные подписи, или несколько картинок, размещённых рядом осмысленным образом — но при этом визуализации должны быть понятными для читателя, не должны быть перегруженными.
  • Сами визуализации могут быть интерактивными (безотносительно той интерактивности, которую даёт streamlit) — например, для этого можно использовать библиотеки plotly, altair или bokeh (см. пример).
  • Можно делать анимации! Например, если вы используете matplotlib, есть простая библиотека celluloid, которая позволяет «снимать» анимацию по кадрам. Другие библиотеки тоже позволяют делать анимацию своими средствами — например, у plotly.express есть соответствующие функции.

Требования к реализации

  • Работа должна быть реализована в виде streamlit-приложения и размещена на хостинге heroku (или любом другом, если умеете). Если вы не размещаете работу на heroku, а сдаёте просто то максимум можете получить 8 баллов за работу. Если вы не используете streamlit, а делаете просто Jupyter Notebook, максимум за работу вы можете получить 6 баллов.
  • Сдаётся ссылка на ваше работающее приложение, а также исходный код (в виде zip-архива, или, если вы сдаёте просто jupyter notebook, одного ipynb-файла). Оценивается работающее приложение, к исходному коду мы будем обращаться в случае непредвиденных ситуаций (например, приложение работало-работало, да и сломалось).
  • Работа должна быть анонимизирована, нигде не должны упоминаться ваше имя, логины и т.д.
  • Весь код, кроме импортов, должен быть внутри блока with st.echo(code_location='below'):, чтобы он автоматически отображался при запуске веб-приложения.
  • Проще всего клонировать мой демо-репозиторий и дальше редактировать его — в нём всё готово для размещения на heroku. Чтобы не нарушать условие двойного слепого peer review, вместо того, чтобы делать форк, сделайте независимую копию моего репозитория. Для этого вам нужно нажать войти в свой аккаунт на Github, нажать на плюсик в правом верхнем углу, выбрать там 'Import repository', в поле "Your old repository’s clone URL" указать адрес https://github.com/ischurov/streamlit-demo-2021, а также придумать какое-нибудь имя (например, my-cool-project-2021), ввести его в поле Repository name и нажать Begin import. Через некоторое время репозиторий скопируется и всё будет готово к началу работы. Если вы используете библиотеки, которых не было изначально, их надо добавить в файл requirements.txt (можно использовать утилиту pipreqs, чтобы сформировать этот файл автоматически, или добавить нужный пакет вручную, например, просто вписав название пакета, и, при желании, номер версии после ==).

Критерии

Критерий Баллы
Осмысленность подбора визуализаций 0 — это просто какой-то набор картинок; 1 — визуализации подобраны таким образом, что позволяют увидеть какие-то интересные эффекты по данным, ответить на вопросы и т.д.
Разнообразие библиотек 1 — использовалась одна какая-то библиотека; 2 — использовалась парочка; 3 — три и больше. (Если какая-то библиотека использовалась «для галочки» — скажем, приведена ровно одна картинка, которую легко построить — можно такую библиотеку не учитывать при оценивании.)
Сложность реализации визуализаций 0 — просто одиноко стоящие картинки, каждая из которых строится одной строчкой в подходящей библиотеке; 1 — параметры визуализаций аккуратно подобраны, что потребовало дополнительных усилий (например, для обычных matplotlib'овских визуализаций подписаны оси и картинка целиком, подобраны пределы изменения переменных подходящим образом и т.д.); 2 — технически сложные визуализации, состоящие из различных слоёв или картинок, требующие ручного аннотирования и т.д.; 3 — есть визуализации, являющиеся произведением инженерного и визуального искусства (пример такой существенно нетривиальной визуализации — правда, с помощью R — можно найти тут); 4 — много технически сложных визуализаций, являющихся произведением инженерного и визуального искусства (этот бал должен выставляться в исключительных случаях).
Интерактивность 1 — среди визуализаций есть интерактивные (не средствами streamlit, а собственными средствами соответствующих библиотек)
Красота 0 — ну не очень; 1 — о-о, прямо красота!
Анимация 0 — нет; 0 — есть, но лучше бы не было; 1 — есть, и по делу.
Объём (см. ниже расшифровку) 0 — до 60 строк; 1 — от 60 и больше.
Общее впечатление 0 — ну ок; 1 — добротная работа; 2 — вау, прямо круто!

Оценка

Ваша оценка равна сумме набранных баллов, но не может превосходить 12 баллов (из 10).

Об объёме

Объём работы измеряется в «осмысленных самостоятельно написанных логических строках кода».

  • «Логических» означает, что если разделить строку на две с помощью кнопки Enter, нажимемой в нужных местах, то это всё равно одна строка.
  • «Осмысленного» означает, что если написать десять раз подряд строчку name = 'Alice', то это не считается.
  • «Самостоятельно написанного» означает, что вы можете копипастить код откуда-то ещё, если он вам нужен для работоспособности вашего проекта — например, со StackOverflow — но любая такая копипаста должна обязательно сопровождаться ссылкой на источник и в зачёт ваших строк не идёт. Такая копипаста должна начинаться с комментария ### FROM: (адрес источника) и заканчиваться комментарием ### END FROM. Неправильно оформленная копипаста приравнивается к плагиату.