che904 / ittensive

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Часть 1: анализ данных 1.1. Задание: импорт данных Исходные данные: Возьмите данные по вызовам пожарных служб в Москве за 2015-2019 годы: https://video.ittensive.com/python-advanced/data-5283-2019-10-04.utf.csv Получите из них фрейм данных (таблицу значений). По этому фрейму вычислите среднее значение вызовов пожарных машин в месяц в одном округе Москвы, округлив до целых. Примечание: найдите среднее значение вызовов, без учета года Вопрос: Какое среднее значение вызовов пожарных машин в месяц в одном округе Москвы в 2015-2019 годах с точностью до целых? Ответ: 493 Пояснение: загружу данные и вычислю среднее значение вызовов пожарных машин в месяц в одном округе Москвы, без учета года. Для этого воспользуюсь библиотекой Pandas в Python. Код для выполнения этой задачи 1.1.py. Код решения загружает данные, преобразует столбец с датой в формат datetime, добавляет столбец с месяцем вызова, группирует данные по округу и месяцу, подсчитывает число вызовов в каждом месяце, и затем вычисляет среднее значение вызовов в месяц для каждого округа, округляя его до целых. Результат будет выведен на экран.

1.2. Задание: данные из нескольких источников Исходные данные: Получите данные по безработице в Москве: https://video.ittensive.com/python-advanced/data-9753-2019-07-25.utf.csv Объедините эти данные индексами (Месяц/Год) с данными из предыдущего задания (вызовы пожарных) для Центральный административный округ: https://video.ittensive.com/python-advanced/data-5283-2019-10-04.utf.csv Найдите значение поля UnemployedMen в том месяце, когда было меньше всего вызовов в Центральном административном округе. Вопрос: Значение поля UnemployedMen Ответ: 13465 Пояснение: я загружу данные по безработице в Москве и данные по вызовам пожарных в Центральном административном округе, объединю их по индексам месяца и года, а затем найду значение поля "UnemployedMen" в месяце с наименьшим количеством вызовов в Центральном административном округе. Код для выполнения этой задачи 1.2.py. Код решения загружает данные по безработице в Москве и вызовам пожарных в Центральном административном округе, преобразует столбцы с датами в формат datetime и устанавливает их в качестве индексов. Затем данные объединяются по индексам месяца и года. После объединения находится месяц с наименьшим количеством вызовов в Центральном административном округе, и значение поля "UnemployedMen" из соответствующей строки полученного объединенного фрейма данных сохраняется в переменной unemployed_men_value. Это значение будет выведено на экран.

1.3. Задание: выделение данных Исходные данные: Получите данные по безработице в Москве: https://video.ittensive.com/python-advanced/data-9753-2019-07-25.utf.csv Найдите, с какого года процент людей с ограниченными возможностями (UnemployedDisabled) среди всех безработных (UnemployedTotal) стал меньше 2%. Вопрос: С какого года безработных инвалидов меньше 2% в Москве? Ответ: 2018 Пояснение: я загружу данные по безработице в Москве и найду год, с которого процент людей с ограниченными возможностями среди всех безработных стал меньше 2%. Код для выполнения этой задачи 1.3.py. Код решения загружает данные по безработице в Москве, преобразует столбец с датами в формат datetime и устанавливает его в качестве индекса. Затем данные фильтруются, чтобы оставить только строки, где процент людей с ограниченными возможностями (UnemployedDisabled) меньше 2%. После фильтрации находится минимальный год из индексов полученного фрейма данных, и этот год сохраняется в переменной min_year. Значение min_year будет выведено на экран.

1.4. Задание: предсказание на 2020 год Исходные данные: Возьмите данные по безработице в городе Москва: video.ittensive.com/python-advanced/data-9753-2019-07-25.utf.csv Сгруппируйте данные по годам, и, если в году меньше 6 значений, отбросьте эти годы. Постройте модель линейной регрессии по годам среднего значения отношения UnemployedDisabled к UnemployedTotal (процента людей с ограниченными возможностями) за месяц и ответьте, какое ожидается значение процента безработных инвалидов в 2020 году при сохранении текущей политики города Москвы? Ответ округлите до сотых. Например, 2,32 Вопрос: Какое ожидается значение в 2020 году при сохранении текущей политики города Москвы? Ответ: 1,52% Пояснение: Для решения данной задачи, я загружу данные по безработице в городе Москва и выполню группировку данных по годам. Затем, отброшу годы, в которых количество значений меньше 6. После этого, построю модель линейной регрессии, используя среднее значение отношения UnemployedDisabled к UnemployedTotal за месяц в качестве зависимой переменной. Наконец, буду использовать эту модель для предсказания значения процента безработных инвалидов в 2020 году. Код для выполнения этой задачи 1.4.py. В этом коде данные по безработице в городе Москва загружаются и обрабатываются. Затем группировка данных выполняется по годам, и отфильтрованные данные сохраняются, чтобы исключить годы с менее чем 6 значениями. Далее, модель линейной регрессии строится, используя среднее значение отношения UnemployedDisabled к UnemployedTotal в качестве зависимой переменной. Наконец, модель используется для предсказания значения процента безработных инвалидов в 2020 году, и результат округляется до сотых. Предсказанное значение выводится на экран.

Часть 2: импорт и парсинг данных 2.1. Задание: получение данных по API Исходные данные: Изучите API Геокодера Яндекса tech.yandex.ru/maps/geocoder/doc/desc/concepts/input_params-docpage/ и получите ключ API для него в кабинете разработчика. Выполните запрос к API и узнайте долготу точки на карте (Point) для города Самара. Внимание: активация ключа Геокодера Яндекса может занимать несколько часов (до суток). В качестве запасного варианта можно использовать этот ключ - 3f355b88-81e9-4bbf-a0a4-eb687fdea256 - он только для выполнения этого задания! Вопрос: Какая долгота у точки на карте для Самары? Ответ: 50.101783 Пояснение: Для получения ключа API Геокодера Яндекса необходимо зарегистрироваться в кабинете разработчика Яндекса и создать проект для получения ключа API. Далее, следуйте инструкциям для активации ключа. Процесс активации ключа может занимать несколько часов или до суток. Однако, мы можем использовать запасной ключ. Код для выполнения этой задачи 2.1.py. Этот код выполняет GET-запрос к API Геокодера Яндекса с использованием указанного ключа API и передает запрос для геокодирования города Самара. Затем полученный ответ парсится в формате JSON, и из него извлекается долгота точки на карте. Полученное значение долготы выводится на экран.

2.2. Задание: получение котировок акций Исходные данные: Получите данные по котировкам акций со страницы: mfd.ru/marketdata/?id=5&group=16&mode=3&sortHeader=name&sortOrder=1&selectedDate=01.11.2019 и найдите, по какому тикеру был максимальный рост числа сделок (в процентах) за 1 ноября 2019 года. Вопрос: По какому тикеру был максимальный рост числа сделок (в процентах) за 1 ноября 2019 года? Ответ: ИНРУСС-ИНВ Пояснение: Для получения данных по котировкам акций с указанной страницы и определения тикера с максимальным ростом числа сделок (в процентах) за 1 ноября 2019 года, можно использовать библиотеки requests и BeautifulSoup для выполнения запроса и парсинга HTML-страницы. Код для выполнения этой задачи 2.2.py. Этот код выполняет GET-запрос к указанной странице и парсит HTML-страницу с использованием BeautifulSoup. Затем он ищет таблицу с данными по котировкам акций и перебирает строки таблицы. Для каждой строки извлекается тикер и процентное изменение числа сделок. Если текущий рост числа сделок является максимальным, то обновляются значения переменных max_growth и max_growth_ticker. В конце выводится тикер с максимальным ростом числа сделок.

2.3. Задание: парсинг интернет-магазина Исходные данные: Используя парсинг данных с маркетплейса beru.ru, найдите, на сколько литров отличается общий объем холодильников Саратов 263 и Саратов 452? Для парсинга можно использовать зеркало страницы beru.ru с результатами для холодильников Саратов по адресу: video.ittensive.com/data/018-python-advanced/beru.ru/ Вопрос: На сколько литров отличается общий объем холодильников? Ответ: 73 Пояснение: Для выполнения парсинга данных с маркетплейса beru.ru и нахождения разницы в объеме между холодильниками Саратов 263 и Саратов 452, можно использовать библиотеки requests и BeautifulSoup для загрузки страницы и парсинга HTML-кода. Код для выполнения этой задачи 2.3.py. Этот код выполняет GET-запрос к указанному зеркалу страницы с результатами для холодильников Саратов на beru.ru и парсит HTML-код с использованием BeautifulSoup. Затем он ищет блоки с информацией о холодильниках Саратов 263 и Саратов 452 и извлекает объемы холодильников из соответствующих элементов HTML. Разница в объеме холодильников вычисляется как абсолютное значение разности между объемами холодильников. Результат выводится на экран.

2.4. Задание: загрузка результатов в БД Исходные данные: Соберите данные о моделях холодильников Саратов с маркетплейса beru.ru: URL, название, цена, размеры, общий объем, объем холодильной камеры. Создайте соответствующие таблицы в SQLite базе данных и загрузите полученные данные в таблицу beru_goods. Для парсинга можно использовать зеркало страницы beru.ru с результатами для холодильников Саратов по адресу: video.ittensive.com/data/018-python-advanced/beru.ru/ Вопрос: Какая ширина у холодильника Саратов 264 в см? Ответ: 48 Пояснение: Для сбора данных о моделях холодильников Саратов с маркетплейса beru.ru и сохранения полученных данных в базу данных SQLite, необходимо использовать библиотеки requests и BeautifulSoup для выполнения запросов и парсинга HTML-кода, а также библиотеку sqlite3 для работы с базой данных. Код для выполнения этой задачи 2.4.py. Этот код выполняет GET-запрос к указанному зеркалу страницы с результатами для холодильников Саратов на beru.ru и парсит HTML-код с использованием BeautifulSoup. Затем он ищет блоки с информацией о холодильниках Саратов, извлекает нужные данные (URL, название, цена, размеры, общий объем, объем холодильной камеры) и вставляет их в таблицу "beru_goods" базы данных SQLite "beru.db". Результаты сохраняются в базу данных и могут быть использованы для дальнейшего анализа.

Часть 3: визуализация данных 3.1. Задание: тип визуализации данных Исходные данные: Загрузите данные по ЕГЭ за последние годы https://video.ittensive.com/python-advanced/data-9722-2019-10-14.utf.csv выберите данные за 2018-2019 учебный год. Выберите тип диаграммы для отображения результатов по административному округу Москвы, постройте выбранную диаграмму для количества школьников, написавших ЕГЭ на 220 баллов и выше. Выберите тип диаграммы и постройте ее для районов Северо-Западного административного округа Москвы для количества школьников, написавших ЕГЭ на 220 баллов и выше. Вопрос: Сколько школьников в Строгино, написавших ЕГЭ на 220 баллов и выше? Ответ: 188 Пояснение: Для загрузки данных по ЕГЭ за последние годы с указанного URL-адреса и построения диаграмм на основе этих данных, можно использовать библиотеку pandas для работы с данными и библиотеку matplotlib для визуализации. Код для выполнения этой задачи 3.1.py. В этом коде данные загружаются из CSV-файла по указанному URL-адресу. Затем происходит фильтрация данных для выбора данных за 2018-2019 учебный год. Далее создаются две диаграммы: одна для административного округа Москвы и другая для районов Северо-Западного административного округа Москвы. Оба графика отображают количество школьников, написавших ЕГЭ на 220 баллов и выше.

3.2. Задание: результаты марафона Исходные данные: Загрузите данные по итогам марафона https://video.ittensive.com/python-advanced/marathon-data.csv Приведите время половины и полной дистанции к секундам. Найдите, данные каких серии данных коррелируют (используя диаграмму pairplot в Seaborn). Найдите коэффициент корреляции этих серий данных, используя scipy.stats.pearsonr. Постройте график jointplot для коррелирующих данных. Вопрос: Чему равен коэффициент корреляции максимально зависимых серий данных? Ответ: 0,96 Пояснение: Для загрузки данных по итогам марафона с указанного URL-адреса и выполнения заданных задач, можно использовать библиотеки pandas, seaborn и scipy. Код для выполнения этой задачи 3.2.py. В этом коде данные загружаются из CSV-файла по указанному URL-адресу. Затем происходит преобразование времени половины и полной дистанции к секундам, используя функцию pd.to_timedelta() для преобразования временных данных и dt.total_seconds() для получения значений в секундах. Далее создается диаграмма pairplot с использованием библиотеки seaborn для визуализации взаимосвязей между различными сериями данных. Затем находится коэффициент корреляции с помощью функции corr() и вычисляется коэффициент корреляции между сериями данных 'Half' и 'Full'. Наконец, строится график jointplot с использованием библиотеки seaborn для визуализации корреляции между данными 'Half' и 'Full'.

3.3. Задание: скользящие средние на биржевых графиках Исходные данные: Используя данные индекса РТС за последние годы https://video.ittensive.com/python-advanced/rts-index.csv постройте отдельные графики закрытия (Close) индекса по дням за 2017, 2018, 2019 годы в единой оси X. Добавьте на график экспоненциальное среднее за 20 дней для значения Max за 2017 год. Найдите последнюю дату, когда экспоненциальное среднее максимального дневного значения (Max) в 2017 году было больше, чем соответствующее значение Close в 2019 году (это последнее пересечение графика за 2019 год и графика для среднего за 2017 год). Вопрос: После какого дня 2019 года индекс РТС по закрытию окончательно превысил максимальные показатели за аналогичный день 2017 года? Ответ: 19 февраля Пояснение:Для выполнения данной задачи можно использовать библиотеки pandas, matplotlib и numpy. Код для выполнения этой задачи 3.3.py. В этом коде данные загружаются из CSV-файла по указанному URL-адресу. Затем столбец 'Date' преобразуется в формат datetime для дальнейшего использования. Далее отбираются данные за 2017, 2018 и 2019 годы. Затем строится график закрытия индекса по дням для каждого из этих годов. Экспоненциальное среднее за 20 дней для значения Max в 2017 году рассчитывается с помощью функции rolling() и mean() из библиотеки pandas. Результат добавляется на график. Затем находится последняя дата, когда экспоненциальное среднее Max в 2017 году было больше значения Close в 2019 году. На график добавляется вертикальная линия в последнюю дату пересечения. Наконец, оси и легенда настраиваются, и график отображается.

3.4. Задание: объекты культурного наследия России Исходные данные: Изучите набор данных по объектам культурного наследия России (в виде gz-архива): https://video.ittensive.com/python-advanced/data-44-structure-4.csv.gz и постройте фоновую картограмму по количеству объектов в каждом регионе России, используя гео-данные https://video.ittensive.com/python-advanced/russia.json Выведите для каждого региона количество объектов в нем. Посчитайте число объектов культурного наследия в Татарстане. Вопрос: Чему равно число объектов культурного наследия в Алтайском крае? Ответ: 4480 Пояснение: Для выполнения данной задачи мы будем использовать библиотеки pandas, geopandas и matplotlib. Код для выполнения этой задачи 3.4.py. В этом коде данные по объектам культурного наследия загружаются из gz-архива и группируются по регионам, а затем подсчитывается количество объектов в каждом регионе. Затем гео-данные России загружаются из JSON-файла, и данные по количеству объектов объединяются с гео-данными с помощью функции merge() из библиотеки geopandas. Далее происходит вывод количества объектов для каждого региона. Наконец, строится фоновая картограмма с использованием функции plot() из библиотеки geopandas.

Часть 4: отчеты и автоматизация 4.1. Задание: сборка PDF документа Исходные данные: Используя данные по посещаемости библиотек в районах Москвы https://video.ittensive.com/python-advanced/data-7361-2019-11-28.utf.json постройте круговую диаграмму суммарной посещаемости (NumOfVisitors) 20 наиболее популярных районов Москвы. Создайте PDF отчет, используя файл https://video.ittensive.com/python-advanced/title.pdf как первую страницу. На второй странице выведите итоговую диаграмму, самый популярный район Москвы и число посетителей библиотек в нем. Вопрос: Сколько посетителей библиотек в районе Москвы с самой большой суммарной посещаемостью библиотек? Ответ: 765402 Пояснение: Для выполнения данной задачи мы будем использовать библиотеки pandas, matplotlib и reportlab. Код для выполнения этой задачи 4.1.py. В этом коде данные по посещаемости библиотек загружаются из JSON-файла и группируются по районам, а затем подсчитывается суммарная посещаемость для каждого района. Затем выбираются 20 наиболее популярных районов. Далее строится круговая диаграмма с использованием функции plot() из библиотеки matplotlib. Кроме того, создается PDF отчет с использованием библиотеки reportlab. На первой странице добавляется изображение из файла 'title.pdf'. На второй странице добавляется диаграмма, самый популярный район и число посетителей библиотек в нем. Наконец, PDF отчет сохраняется с именем 'report.pdf'.

4.2. Задание: геральдические символы Москвы Исходные данные: Сгенерируйте PDF документ из списка флагов и гербов районов Москвы: https://video.ittensive.com/python-advanced/data-102743-2019-11-13.utf.csv На каждой странице документа выведите название геральдического символа (Name), его описание (Description) и его изображение (Picture). Для показа изображений используйте адрес https://op.mos.ru/MEDIA/showFile?id=XXX где XXX - это значение поля Picture в наборе данных. Например: https://op.mos.ru/MEDIA/showFile?id=8466da35-6801-41a9-a71e-04b60408accb В случае возникновения проблем с загрузкой изображений с op.mos.ru можно добавить в код настройку для форсирования использования дополнительных видов шифрования в протоколе SSL/TLS. requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'ALL:@SECLEVEL=1' Вопрос: Если на каждой странице PDF документа выводить по одному геральдическому символу, то сколько получится страниц? Ответ: 42 Пояснение: Для выполнения данной задачи мы будем использовать библиотеки pandas, reportlab и requests. Код для выполнения этой задачи 4.2.py. В этом коде данные по гербам и флагам районов Москвы загружаются из CSV-файла и итерируются. Для каждого элемента создается новая страница в PDF документе. Загружается изображение с использованием функции get() из библиотеки requests. Затем информация о гербе или флаге и изображение добавляются на страницу с использованием функций drawString() и drawImage() из библиотеки reportlab. Наконец, PDF документ сохраняется с именем 'heraldry.pdf'.

4.3. Задание: многостраничный отчет Исходные данные: Используя данные по активностям в парках Москвы https://video.ittensive.com/python-advanced/data-107235-2019-12-02.utf.json Создайте PDF отчет, в котором выведите:

  1. Диаграмму распределения числа активностей по паркам, топ10 самых активных
  2. Таблицу активностей по всем паркам в виде Активность-Расписание-Парк Вопрос: Сколько активностей Тайцзицюань есть в парках Москвы? Ответ: 1 Пояснение: Для выполнения данной задачи мы будем использовать библиотеки pandas, matplotlib и reportlab. Код для выполнения этой задачи 4.3.py. В этом коде данные по активностям в парках Москвы загружаются из JSON-файла и обрабатываются с использованием библиотеки pandas. Затем строится диаграмма распределения числа активностей по паркам (топ 10) с помощью библиотеки matplotlib и сохраняется в формате PDF. Затем создается таблица активностей по всем паркам с использованием класса Table из библиотеки reportlab. Наконец, генерируется PDF отчет, включающий заголовочную страницу, диаграмму и таблицу, и сохраняется с именем 'activity_report.pdf'. Обратите внимание, что для добавления заголовочной страницы и диаграммы в PDF используются соответствующие изображения, которые должны быть предварительно загружены и сохранены в файлы 'title.pdf' и 'activity_distribution.pdf'.

4.4. Задание: автоматические отчеты Исходные данные: Соберите отчет по результатам ЕГЭ в 2018-2019 году, используя данные https://video.ittensive.com/python-advanced/data-9722-2019-10-14.utf.csv и отправьте его в HTML формате по адресу support@ittensive.com, используя только Python. В отчете должно быть: общее число отличников (учеников, получивших более 220 баллов по ЕГЭ в Москве), распределение отличников по округам Москвы, название школы с лучшими результатами по ЕГЭ в Москве. Диаграмма распределения должна быть вставлена в HTML через data:URI формат (в base64-кодировке). Дополнительно: приложите к отчету PDF документ того же содержания (дублирующий письмо). Вопрос: Сколько учеников набрало 220 и больше баллов по ЕГЭ в Москве в 2018-2019 году? Ответ: 23368 Пояснение: Для создания отчета по результатам ЕГЭ и отправки его по электронной почте в HTML формате с вложенным PDF-документом, используем код 4.4.py. В данном коде мы сначала загружаем данные по результатам ЕГЭ из CSV-файла. Затем мы вычисляем общее число отличников (учеников, получивших более 220 баллов), распределение отличников по округам Москвы и название школы с лучшими результатами. Далее мы строим диаграмму распределения отличников и сохраняем ее в формате PNG, преобразуя в строку base64 для вставки в HTML. Затем мы создаем HTML-страницу с отчетом, вставляем в нее диаграмму и сохраняем в переменную html_report. Далее мы создаем PDF-отчет, используя библиотеку ReportLab. Мы добавляем HTML-страницу в PDF-документ с помощью класса Paragraph и сохраняем его в переменную pdf_report. Затем мы отправляем отчет по электронной почте, используя SMTP-сервер. Мы создаем объект MIMEMultipart для формирования письма, включаем HTML-отчет в тело письма и добавляем PDF-отчет как вложение. Затем мы используем SMTP-сервер для отправки письма с вложениями. После выполнения кода отчет будет отправлен на адрес support@ittensive.com в формате HTML, а также вложен в виде PDF-файла.

About


Languages

Language:Python 100.0%