{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Обзор базовых возможностей pandas\n", "\n", "Продемонстрируем возможности `pandas` на реальных данных. Возьмём для этих целей данные о коронавирусе от университета Джонса Хопкинса и от Яндекса. \n", "\n", "- Университет Джонса Хопкинса собирает данные по коронавирусу и хранит их в открытом доступе в [репозитории](https://github.com/CSSEGISandData/COVID-19). Среди прочего, в них содержится информация о количестве [заболевших](https://github.com/CSSEGISandData/COVID-19/blob/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv), [погибших](https://github.com/CSSEGISandData/COVID-19/blob/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv) и [выздоровевших](https://github.com/CSSEGISandData/COVID-19/blob/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv). Данные хранятся не в типичном для `pandas` формате: информация за одни день хранится в столбце, а не в строках, т.е. не в соответствии с форматом панельных данных. Чтобы не усложнять изложение, я составил [скрипт](https://drive.google.com/file/d/1a2Tj2bTzblhgVo-qb0UxuAzkrzTSwOaJ/view?usp=sharing), который скачивает таблицы из репозитория, извлекает из них информацию только по России и сохраняет их в панельном формате. Результат работы этого скрипта от 25.11.2021 хранится по [ссылке](https://drive.google.com/file/d/1a2Tj2bTzblhgVo-qb0UxuAzkrzTSwOaJ/view?usp=sharing).\n", "- Яндекс агрегирует информацию о коронавирусе по всей россии и предоставляет возможность скачать их данные. К сожалению, чтобы получить эти данные, нужно проделать куда больше шагов, чем в примере выше (с инструкцией можно ознакомится [здесь](https://datalens.yandex/7o7is1q6ikh23?tab=ov3&utm_source=cbsecondwave)). Загруженные от 25.11.2021 данные хранятся [здесь](https://drive.google.com/file/d/1Xw-jyEh5TOAvy5L1iT0Cs68ybP8BaEJb/view?usp=sharing).\n", "\n", "\n", "Чтобы автоматизировать сборку этих материалов и сделать её по возможности устойчивой к отсутствию интернета, в скрытой ячейке ниже находится код, который скачивает упомянутые таблицы с GoogleDrive, если они отсутствуют. Хотя стоит упомянуть, что `pandas` может считывать данные по `url`. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true, "tags": [ "hide-cell" ] }, "outputs": [], "source": [ "from itertools import count\n", "import os\n", "import wget\n", "\n", "folder = \"data\"\n", "os.makedirs(folder, exist_ok=True)\n", "\n", "base_url = \"https://docs.google.com/uc?export=download&id={}\"\n", "to_download = [\n", " {\n", " \"file_id\": \"1ds0Qw-5dTxYvNEWxt1neN4Y9fut8Pnx3\",\n", " \"filename\": \"CSSE_Russia.csv\",\n", " },\n", " {\n", " \"file_id\": \"1Xw-jyEh5TOAvy5L1iT0Cs68ybP8BaEJb\",\n", " \"filename\": \"yandex_data.csv\", \n", " }\n", "]\n", "\n", "\n", "for file in to_download:\n", " path = os.path.join(folder, file[\"filename\"])\n", " if not os.path.isfile(path):\n", " download_url = base_url.format(file[\"file_id\"])\n", " wget.download(download_url, out=path)\n", "\n", "\n", "plotly_save_to = os.path.join(\"..\", \"_static\", \"plotly\")\n", "os.makedirs(plotly_save_to, exist_ok=True)\n", "plotly_tmp = os.path.join(plotly_save_to, \"tmp.html\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Данные о коронавирусе от университета Джонса Хопкинса\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Первые 5 строк файла выглядят так.\n", "```\n", "Date,recovered,deaths,confirmed\n", "2020-01-22,0,0,0\n", "2020-01-23,0,0,0\n", "2020-01-24,0,0,0\n", "2020-01-25,0,0,0\n", "2020-01-26,0,0,0\n", "```\n", "\n", "Видим, что столбец `Date` хранит даты в стандартном для `pandas` формате `YYYY-MM-DD`. Считываем таблицу, указав в качестве индекса этот столбец, не забывая указать `pandas`, что в нем хранятся даты. С помощью метода [info](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.info.html) печатаем информацию о таблице." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "DatetimeIndex: 672 entries, 2020-01-22 to 2021-11-23\n", "Data columns (total 3 columns):\n", " # Column Non-Null Count Dtype\n", "--- ------ -------------- -----\n", " 0 recovered 672 non-null int64\n", " 1 deaths 672 non-null int64\n", " 2 confirmed 672 non-null int64\n", "dtypes: int64(3)\n", "memory usage: 21.0 KB\n" ] } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "import os\n", "\n", "\n", "folder = \"covid19\"\n", "filename = \"CSSE_Russia.csv\"\n", "path = os.path.join(folder, filename)\n", "\n", "\n", "df = pd.read_csv(path, index_col=\"Date\", parse_dates=[\"Date\"])\n", "df.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Расшифруем полученный вывод. \n", "\n", "Первая строка сообщает, что индексом таблицы является DatetimeIndex в диапазоне от 22 января 2020 гола до 23 ноября 2021 года (формат (YYYY-MM-DD)). Из первых двух строчек можно понять, что в таблице 3 столбца (+ как бы столбец индекса) и 672 строки. \n", "\n", "Далее идет информация о каждом столбце таблицы.\n", "- `recovered` --- суммарное количество зарегистрированных выздоровевших от `covid19` пациентов;\n", "- `deaths` --- суммарное количество зарегистрированных смертей от `covid19`;\n", "- `confirmed` --- суммарное количество зарегистрированных заболевших `covid19`.\n", "Под суммарным количество здесь имеется ввиду то, что на каждую дату в таблице приводятся данные о, например, количестве зарегистрированных больных не только за текущий день, но и за все предшествующие. \n", "\n", "Кроме того, из вывода команды `info` можно понять, что во всех столбцах отсутствуют пропущенные значения `NA` (672 `non-null` в 672 строках). Тем не менее это ещё не значит, что в таблице присутствуют данные за все дни в указанном диапазоне. Проверим это пользуясь тем, что можно высчитывать временной интервал между двумя объектами `datetime` оператором `-`. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "671\n" ] } ], "source": [ "date_range = df.index.max() - df.index.min()\n", "print(date_range.days)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Видим, что между 22.01.2020 и 23.11.2021 прошел 671 день, т.е. данные представлены за все дни из этого диапазона, если предположить, что нет двух строк с одной и той же датой. Проявим максимальную осторожность и проверим, что в таблице присутствуют строки для каждого дня в указанном диапазоне. Для этого создадим даты в указанном диапазоне с частотой в день функцией [pd.date_range](https://pandas.pydata.org/docs/reference/api/pandas.date_range.html) и посмотрим разницу с индексом таблицы." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Созданный диапазон: DatetimeIndex(['2020-01-22', '2020-01-23', '2020-01-24', '2020-01-25',\n", " '2020-01-26', '2020-01-27', '2020-01-28', '2020-01-29',\n", " '2020-01-30', '2020-01-31',\n", " ...\n", " '2021-11-14', '2021-11-15', '2021-11-16', '2021-11-17',\n", " '2021-11-18', '2021-11-19', '2021-11-20', '2021-11-21',\n", " '2021-11-22', '2021-11-23'],\n", " dtype='datetime64[ns]', length=672, freq='D')\n", "Разница с индексом таблицы: DatetimeIndex([], dtype='datetime64[ns]', freq='D')\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "c:\\Users\\qujim\\Desktop\\python_lectures\\venv\\lib\\site-packages\\IPython\\core\\interactiveshell.py:3369: UserWarning: Parsing '22.01.2020' in DD/MM/YYYY format. Provide format or specify infer_datetime_format=True for consistent parsing.\n", " exec(code_obj, self.user_global_ns, self.user_ns)\n", "c:\\Users\\qujim\\Desktop\\python_lectures\\venv\\lib\\site-packages\\IPython\\core\\interactiveshell.py:3369: UserWarning: Parsing '23.11.2021' in DD/MM/YYYY format. Provide format or specify infer_datetime_format=True for consistent parsing.\n", " exec(code_obj, self.user_global_ns, self.user_ns)\n" ] } ], "source": [ "date_range = pd.date_range(start=\"22.01.2020\", end=\"23.11.2021\", freq=\"D\")\n", "print(f\"Созданный диапазон: {date_range}\")\n", "difference = date_range.difference(df.index)\n", "print(f\"Разница с индексом таблицы: {difference}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Из последней строки вывода видно, что есть данные за каждый день. \n", "\n", "Распечатаем таблицу." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \n", " \n", " \n", " \n", "
recovereddeathsconfirmed
Date
2020-01-22000
2020-01-23000
2020-01-24000
2020-01-25000
2020-01-26000
............
2021-11-1902566699099253
2021-11-2002578919135149
2021-11-2102591079170898
2021-11-2202603199205431
2021-11-2302615269238330
\n", "

672 rows × 3 columns

\n", "
" ], "text/plain": [ " recovered deaths confirmed\n", "Date \n", "2020-01-22 0 0 0\n", "2020-01-23 0 0 0\n", "2020-01-24 0 0 0\n", "2020-01-25 0 0 0\n", "2020-01-26 0 0 0\n", "... ... ... ...\n", "2021-11-19 0 256669 9099253\n", "2021-11-20 0 257891 9135149\n", "2021-11-21 0 259107 9170898\n", "2021-11-22 0 260319 9205431\n", "2021-11-23 0 261526 9238330\n", "\n", "[672 rows x 3 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Вначале идут нули по всем строкам, что объясняется видимо тем, что\n", "> Первый официально подтверждённый случай заболевания коронавирусной инфекцией COVID-19 в стационарных учреждениях социальной защиты был зарегистрирован 11 апреля 2020 года. [wikipedia](https://ru.wikipedia.org/wiki/%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_COVID-19_%D0%B2_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B8). \n", "\n", "Так же в столбце по выздоровевшим наблюдаются только нули, что не соответствует действительности, т.е. судя по всему в таблице все же есть отсутствующие значения, которые заполнены нулями, а не `np.nan`. Визуализируем данные, чтобы а) легче их воспринимать; б) посмотреть на них целиком. Воспользуемся для этого библиотекой `plotly`, т.к. мы ещё не знаем, что мы ищем и интерактивность может пригодиться. \n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import plotly.express as px\n", "from IPython.display import display, HTML\n", "\n", "fig = px.line(df)\n", "fig.write_html(plotly_tmp) # fig.show()\n", "display(HTML(plotly_tmp)) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Из построенного графика можно сделать вывод о том, что данные начали поступать с 12 февраля (несмотря на утверждении в википедии), а начиная с 5 августа 2021 года данные о выздоровевших перестали обновляться. \n", "\n", "В данном случае разумно отбросить нулевые строки и заменить пропущенные данные на `np.nan`." ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df = df.loc[np.any(df != 0, axis=1)].copy()\n", "df.loc[\"2021-08-05\":, \"recovered\"] = np.nan\n", "\n", "fig = px.line(df)\n", "fig.write_html(plotly_tmp) # fig.show()\n", "display(HTML(plotly_tmp)) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Более или менее понятно, что приблизительно должно выполнятся равенство $\\text{confirmed} = \\text{recovered} + \\text{deaths}$, т.к. большинство заболевших в итоге выздоравливают или нет. Посмотрим растёт ли невязка этого равенства со временем." ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "residual = df.confirmed - df.deaths - df.recovered\n", "residual.name = \"confirmed - deaths - recovered\"\n", "\n", "fig = px.line(residual)\n", "fig.write_html(plotly_tmp) # fig.show()\n", "display(HTML(plotly_tmp)) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "У этого графика наблюдается тенденция роста со временем, что наталкивает на мысль, что\n", "- формула не верна;\n", "- данные собираются не самым точном образом; \n", "- растет средняя продолжительность болезни. \n", "\n", "Чтобы оценить динамику, удобно также посмотреть на суточные показатели. Суточный прирост --- разница между показателем за выбранный день и за предыдущий день. Чтобы его вычислить, надо посчитать нечто похожее на `x[:-1] - x[1:]`. Для таких вычислений есть встроенный метод [DataFrame.diff](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.diff.html) (аналогичный метод есть и у `pd.Series`)." ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "daily_df = df.diff()\n", "\n", "fig = px.line(daily_df)\n", "fig.write_html(plotly_tmp) # fig.show()\n", "display(HTML(plotly_tmp)) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Из этих данных можно попробовать оценить среднюю продолжительность болезни с помощью [взаимнокорреляционной функции](https://ru.wikipedia.org/wiki/%D0%92%D0%B7%D0%B0%D0%B8%D0%BC%D0%BD%D0%BE%D0%BA%D0%BE%D1%80%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F): за среднюю продолжительность болезни возьмём такое смещение графика `confirmed` вправо, что он максимально коррелирует с сумой остальных двух. Для этого посчитаем взаимокорреляционную функцию $f \\star g$ величин $f = \\text{confirmed}$ и $g = \\text{recovered} + \\text{deaths}$ и возьмём в качестве смещения \n", "\n", "$$\n", "i^* = \\text{argmax}_{i} (f \\star g).\n", "$$\n", "\n", "Взаимокореляционную функцию (cross corelation) можно вычислить с помощью метода [signal.correlate](https://docs.scipy.org/doc/scipy/reference/reference/generated/scipy.signal.correlate.html#scipy.signal.correlate) из библиотеки `SciPy`.\n", "\n", "\n", "
\n", "Разница между режимами работы signal.correlate\n", "\n", "Если `mode='valid'`, то функция считает корреляцию для всех таких положений `g`, при которых `f` не надо дополнять нулями по краям. \n", "\n", "```{figure} /_static/lecture_specific/pandas/correlate_valid.svg\n", "```\n", "\n", "Если `mode='valid'`, то функция считает корреляцию для всех положений `g`, при которых `f` хотя бы одним элементом накладывается на `g`. \n", "\n", "```{figure} /_static/lecture_specific/pandas/correlate_full.svg\n", "```\n", "\n", "Если длины `f` и `g` равны 5 и 3 соответственно, то результирующий массив в режиме `valid` выходит размера 3, а в режиме `full` --- 5. \n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "tags": [ "hide-cell" ] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from scipy import signal\n", "import matplotlib.pyplot as plt\n", "plt.rcParams.update({'font.size': 22})\n", "\n", "n = 100\n", "sigma = 0.05\n", "\n", "def triangle(center, width, height):\n", " half_width = width / 2\n", " k = height / half_width\n", " \n", " def left_side(x):\n", " root = center - half_width\n", " return k * (x - root) \n", " \n", " def right_side(x):\n", " root = center + half_width\n", " return -k * (x - root)\n", " \n", " \n", " x = np.arange(n)\n", " y = left_side(x) * (x < center) + right_side(x) * (x >= center)\n", " return y * (y >= 0)\n", "\n", "\n", "x = np.arange(n)\n", "f = triangle(40, 30, 1) \n", "g = triangle(30, 30, 0.9)\n", "\n", "noisy_f = f + np.random.normal(0, sigma, size=(n, ))\n", "noisy_g = g + np.random.normal(0, sigma, size=(n, ))\n", "\n", "corr = signal.correlate(noisy_f, noisy_g, mode=\"full\")\n", "shift = n - np.argmax(corr) - 1\n", "\n", "\n", "fig, axs = plt.subplots(nrows=4, ncols=1, figsize=(10, 12)) \n", "axs[0].plot(x, f, label=\"f\")\n", "axs[0].plot(x, g, label=\"g\")\n", "axs[0].legend()\n", "axs[1].plot(x, noisy_f, label=\"f\")\n", "axs[1].plot(x, noisy_g, label=\"g\")\n", "axs[1].legend()\n", "axs[2].plot(corr, label=\"f*g\")\n", "axs[2].legend()\n", "axs[3].plot(x + shift, noisy_f, label=\"f\")\n", "axs[3].plot(x, noisy_g, label=\"g\")\n", "axs[3].legend()\n", "plt.show(fig)" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Найденный сдвиг: 5\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy import signal\n", "from plotly.subplots import make_subplots\n", "import plotly.graph_objects as go\n", "\n", "tmp = daily_df.dropna().copy()\n", "\n", "f = tmp.confirmed\n", "g = tmp.recovered + tmp.deaths\n", "f = (f - f.mean()) / f.std()\n", "g = (g - g.mean()) / g.std()\n", "\n", "\n", "n = len(tmp)\n", "\n", "cross_correlation = signal.correlate(f, g, mode=\"full\")\n", "shift = n - np.argmax(cross_correlation) - 1\n", "print(f\"Найденный сдвиг: {shift}\")\n", "\n", "tmp[\"confirmed shifted on 5\"] = tmp.confirmed.shift(shift)\n", "tmp[\"confirmed shifted on 12\"] = tmp.confirmed.shift(12)\n", "tmp[\"recovered + deaths\"] = tmp.recovered + tmp.deaths\n", "\n", "\n", "target_go = go.Scatter(x=tmp.index, y=tmp[\"recovered + deaths\"], name=\"recovered + deaths\") \n", "correlation_go = go.Scatter(\n", " x=n - np.arange(2 * n - 1) - 1,\n", " y=cross_correlation, \n", " name=\"cross correlation\"\n", " )\n", "fig = make_subplots(rows=2)\n", "# top\n", "fig.append_trace(correlation_go, row=1, col=1)\n", "# bottom\n", "fig.append_trace(target_go, row=2, col=1)\n", "fig.add_trace(\n", " go.Scatter(x=tmp.index, y=tmp[\"confirmed shifted on 5\"], name=\"shift=5\"),\n", " row=2, col=1\n", " )\n", "fig.add_trace(\n", " go.Scatter(x=tmp.index, y=tmp[\"confirmed shifted on 12\"], name=\"shift=12\"), \n", " row=2, col=1\n", " )\n", "\n", "fig.update_layout(\n", " autosize=True,\n", " # width=1000,\n", " height=700,\n", " margin=dict(\n", " l=0,\n", " r=0,\n", " b=0,\n", " t=30,\n", " pad=4\n", " )\n", ")\n", "path = os.path.join(plotly_save_to, \"covid19.html\")\n", "fig.write_html(path) # fig.show()\n", "display(HTML(path))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " График в отдельном окне.\n", "\n", "\n", "Оба графика довольно сильно осциллируют. Применим метод скользящего среднего по неделе, чтобы избавиться от наблюдаемого \"шума\". Для этого воспользуемся методом [pd.DataFrame.rolling](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rolling.html), который предназначен для вычислений с скользящим окном. " ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "smoothed_daily_df = daily_df.rolling(7).mean()\n", "\n", "fig = px.line(smoothed_daily_df)\n", "fig.write_html(plotly_tmp) # fig.show()\n", "display(HTML(plotly_tmp)) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Данные о коронавирусе в России от яндекса \n", "\n", "Первый 5 строк файла выглядят так.\n", "```\n", "\"Дата\",\"Регион\",\"Заражений\",\"Выздоровлений\",\"Смертей\",\"Смертей за день\",\"Заражений за день\",\"Выздоровлений за день\"\n", "20.09.2020,Томская обл.,6775,5554,79,1,62,92\n", "26.09.2020,Костромская обл.,4553,3329,67,5,54,44\n", "02.09.2021,Ямало-Ненецкий АО,47772,45810,625,4,102,121\n", "15.12.2020,Сахалинская обл.,13406,10292,11,0,142,366\n", "```\n", "\n", "\n", "Видно, что в столбце \"Дата\" хранятся даты в формате `DD.MM.YYYY`, который не является стандартным для `pandas`. Чтобы корректно прочитать эти данные, определим функцию, которая преобразует строку с датой в формате `DD.MM.YYYY` в `datetime` объект и при чтении файла передадим эту функцию в качестве парсера дат." ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "DatetimeIndex: 52938 entries, 2020-09-20 to 2021-04-20\n", "Data columns (total 7 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Регион 52938 non-null object\n", " 1 Заражений 52938 non-null int64 \n", " 2 Выздоровлений 52938 non-null int64 \n", " 3 Смертей 52938 non-null int64 \n", " 4 Смертей за день 52938 non-null int64 \n", " 5 Заражений за день 52938 non-null int64 \n", " 6 Выздоровлений за день 52938 non-null int64 \n", "dtypes: int64(6), object(1)\n", "memory usage: 3.2+ MB\n" ] } ], "source": [ "import os\n", "import pandas as pd\n", "from datetime import datetime\n", "\n", "def date_parser(x):\n", " return datetime.strptime(x, r\"%d.%m.%Y\")\n", "\n", "folder = \"covid19\"\n", "filename = \"yandex_data.csv\"\n", "path = os.path.join(\"covid19\", \"yandex_data.csv\")\n", "\n", "df = pd.read_csv(path, parse_dates=[\"Дата\"], index_col=\"Дата\", date_parser=date_parser)\n", "df.info()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Что мы видим:\n", "- 53938 строк; \n", "- 7 полностью заполненных столбцов;\n", "- даты от 20 сентября 2021 года до 20 апреля 2021 года в качестве индекса;\n", "\n", "Посмотрим первые 5 строк таблицы." ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
РегионЗараженийВыздоровленийСмертейСмертей за деньЗаражений за деньВыздоровлений за день
Дата
2020-09-20Томская обл.677555547916292
2020-09-26Костромская обл.455333296755444
2021-09-02Ямало-Ненецкий АО47772458106254102121
2020-12-15Сахалинская обл.1340610292110142366
2020-09-21Волгоградская обл.141581237613109513
\n", "
" ], "text/plain": [ " Регион Заражений Выздоровлений Смертей \\\n", "Дата \n", "2020-09-20 Томская обл. 6775 5554 79 \n", "2020-09-26 Костромская обл. 4553 3329 67 \n", "2021-09-02 Ямало-Ненецкий АО 47772 45810 625 \n", "2020-12-15 Сахалинская обл. 13406 10292 11 \n", "2020-09-21 Волгоградская обл. 14158 12376 131 \n", "\n", " Смертей за день Заражений за день Выздоровлений за день \n", "Дата \n", "2020-09-20 1 62 92 \n", "2020-09-26 5 54 44 \n", "2021-09-02 4 102 121 \n", "2020-12-15 0 142 366 \n", "2020-09-21 0 95 13 " ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Можно заметить, что таблица не упорядоченна по индексу. Отсортируем её, для нашего удобства. " ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
РегионЗараженийВыздоровленийСмертейСмертей за деньЗаражений за деньВыздоровлений за день
Дата
2020-03-12Сахалинская обл.000000
2020-03-12Северная Осетия000000
2020-03-12Камчатский край000000
2020-03-12Липецкая обл.300030
2020-03-12Крым000000
\n", "
" ], "text/plain": [ " Регион Заражений Выздоровлений Смертей \\\n", "Дата \n", "2020-03-12 Сахалинская обл. 0 0 0 \n", "2020-03-12 Северная Осетия 0 0 0 \n", "2020-03-12 Камчатский край 0 0 0 \n", "2020-03-12 Липецкая обл. 3 0 0 \n", "2020-03-12 Крым 0 0 0 \n", "\n", " Смертей за день Заражений за день Выздоровлений за день \n", "Дата \n", "2020-03-12 0 0 0 \n", "2020-03-12 0 0 0 \n", "2020-03-12 0 0 0 \n", "2020-03-12 0 3 0 \n", "2020-03-12 0 0 0 " ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_index(inplace=True)\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Кстати, можно заметить, что в начало попали строки от 4 января 2020 года, что гораздо раньше диапазона дат, полученного в команде `df.info`. " ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "DatetimeIndex: 52938 entries, 2020-03-12 to 2021-11-24\n", "Data columns (total 7 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 Регион 52938 non-null object\n", " 1 Заражений 52938 non-null int64 \n", " 2 Выздоровлений 52938 non-null int64 \n", " 3 Смертей 52938 non-null int64 \n", " 4 Смертей за день 52938 non-null int64 \n", " 5 Заражений за день 52938 non-null int64 \n", " 6 Выздоровлений за день 52938 non-null int64 \n", "dtypes: int64(6), object(1)\n", "memory usage: 3.2+ MB\n" ] }, { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df.info()\n", "\n", "fig = px.line(df, y=[\"Заражений за день\"], color=\"Регион\", title=\"Заражений за день\")\n", "fig.write_html(plotly_tmp) # fig.show()\n", "display(HTML(plotly_tmp)) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Т.е. в таблице данные представлены от 4 января 2020 года до 24 ноября 2021 года. \n", "\n", "Т.к. `python` работает с `unicode`, то можно оставить имена столбцов и на русском языке, но в целях демонстрации переименуем столбцы на английский язык методом [DataFrame.rename](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rename.html). На вход он принимает словарь, в котором ключи --- старые названия столбцов, значения --- новые. По умолчанию этот метод возвращает копию таблицы с новыми столбцами имен. Изменить это можно параметром `inplace=True`. \n", "\n", "Индекс переименовывается отдельно." ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \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", " \n", " \n", "
regioncasesrecoveriesdeathsdeaths per daycases per dayrecoveries per day
date
2020-03-12Сахалинская обл.000000
2020-03-12Северная Осетия000000
2020-03-12Камчатский край000000
2020-03-12Липецкая обл.300030
2020-03-12Крым000000
........................
2021-11-24Владимирская обл.705665423324329318131
2021-11-24Курганская обл.43855348478546207122
2021-11-24Волгоградская обл.11511198848436037458381
2021-11-24Красноярский край148381132019728633710695
2021-11-24Еврейская АО10330886232704251
\n", "

52938 rows × 7 columns

\n", "
" ], "text/plain": [ " region cases recoveries deaths deaths per day \\\n", "date \n", "2020-03-12 Сахалинская обл. 0 0 0 0 \n", "2020-03-12 Северная Осетия 0 0 0 0 \n", "2020-03-12 Камчатский край 0 0 0 0 \n", "2020-03-12 Липецкая обл. 3 0 0 0 \n", "2020-03-12 Крым 0 0 0 0 \n", "... ... ... ... ... ... \n", "2021-11-24 Владимирская обл. 70566 54233 2432 9 \n", "2021-11-24 Курганская обл. 43855 34847 854 6 \n", "2021-11-24 Волгоградская обл. 115111 98848 4360 37 \n", "2021-11-24 Красноярский край 148381 132019 7286 33 \n", "2021-11-24 Еврейская АО 10330 8862 327 0 \n", "\n", " cases per day recoveries per day \n", "date \n", "2020-03-12 0 0 \n", "2020-03-12 0 0 \n", "2020-03-12 0 0 \n", "2020-03-12 3 0 \n", "2020-03-12 0 0 \n", "... ... ... \n", "2021-11-24 318 131 \n", "2021-11-24 207 122 \n", "2021-11-24 458 381 \n", "2021-11-24 710 695 \n", "2021-11-24 42 51 \n", "\n", "[52938 rows x 7 columns]" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.rename({\n", " \"Регион\": \"region\",\n", " \"Заражений\": \"cases\",\n", " \"Выздоровлений\": \"recoveries\",\n", " \"Смертей\": \"deaths\",\n", " \"Смертей за день\": \"deaths per day\",\n", " \"Заражений за день\": \"cases per day\",\n", " \"Выздоровлений за день\": \"recoveries per day\"\n", "}, inplace=True, axis=\"columns\")\n", "df.index.rename(\"date\", inplace=True)\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Сравним статистику по регионам. Для этого выберем последней день данных и построим круговую диаграмму заболеваемости по регионам." ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \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", " \n", " \n", "
regioncasesrecoveriesdeathsdeaths per daycases per dayrecoveries per day
date
2021-11-24Ингушетия256472380141438390
2021-11-24Пензенская обл.8954761771409719391291
2021-11-24Вологодская обл.8777877468249916397417
2021-11-24Московская обл.577907509872101165618422180
2021-11-24Ленинградская обл.8812468927274710425435
........................
2021-11-24Владимирская обл.705665423324329318131
2021-11-24Курганская обл.43855348478546207122
2021-11-24Волгоградская обл.11511198848436037458381
2021-11-24Красноярский край148381132019728633710695
2021-11-24Еврейская АО10330886232704251
\n", "

85 rows × 7 columns

\n", "
" ], "text/plain": [ " region cases recoveries deaths deaths per day \\\n", "date \n", "2021-11-24 Ингушетия 25647 23801 414 3 \n", "2021-11-24 Пензенская обл. 89547 61771 4097 19 \n", "2021-11-24 Вологодская обл. 87778 77468 2499 16 \n", "2021-11-24 Московская обл. 577907 509872 10116 56 \n", "2021-11-24 Ленинградская обл. 88124 68927 2747 10 \n", "... ... ... ... ... ... \n", "2021-11-24 Владимирская обл. 70566 54233 2432 9 \n", "2021-11-24 Курганская обл. 43855 34847 854 6 \n", "2021-11-24 Волгоградская обл. 115111 98848 4360 37 \n", "2021-11-24 Красноярский край 148381 132019 7286 33 \n", "2021-11-24 Еврейская АО 10330 8862 327 0 \n", "\n", " cases per day recoveries per day \n", "date \n", "2021-11-24 83 90 \n", "2021-11-24 391 291 \n", "2021-11-24 397 417 \n", "2021-11-24 1842 2180 \n", "2021-11-24 425 435 \n", "... ... ... \n", "2021-11-24 318 131 \n", "2021-11-24 207 122 \n", "2021-11-24 458 381 \n", "2021-11-24 710 695 \n", "2021-11-24 42 51 \n", "\n", "[85 rows x 7 columns]" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "last_day = df.index.max()\n", "last_day_df = df.loc[last_day]\n", "\n", "fig = px.pie(last_day_df, values=\"cases\", names='region')\n", "fig.update_traces(textposition=\"inside\")\n", "fig.write_html(plotly_tmp) # fig.show()\n", "display(HTML(plotly_tmp)) \n", "\n", "last_day_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Диаграмма получилась очень загроможденной. Продемонстрируем работу метода [pd.unique](https://pandas.pydata.org/docs/reference/api/pandas.unique.html) и посчитаем количество регионов, которые встречаются в таблице." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "85 регионов, среди которых\n", "['Адыгея' 'Алтай' 'Алтайский край' 'Амурская обл.' 'Архангельская обл.'\n", " 'Астраханская обл.' 'Башкортостан' 'Белгородская обл.' 'Брянская обл.'\n", " 'Бурятия' 'Владимирская обл.' 'Волгоградская обл.' 'Вологодская обл.'\n", " 'Воронежская обл.' 'Дагестан' 'Еврейская АО' 'Забайкальский край'\n", " 'Ивановская обл.' 'Ингушетия' 'Иркутская обл.' 'Кабардино-Балкария'\n", " 'Калининградская обл.' 'Калмыкия' 'Калужская обл.' 'Камчатский край'\n", " 'Карачаево-Черкессия' 'Карелия' 'Кемеровская обл.' 'Кировская обл.'\n", " 'Коми' 'Костромская обл.' 'Краснодарский край' 'Красноярский край' 'Крым'\n", " 'Курганская обл.' 'Курская обл.' 'Ленинградская обл.' 'Липецкая обл.'\n", " 'Магаданская обл.' 'Марий Эл' 'Мордовия' 'Москва' 'Московская обл.'\n", " 'Мурманская обл.' 'Ненецкий АО' 'Нижегородская обл.' 'Новгородская обл.'\n", " 'Новосибирская обл.' 'Омская обл.' 'Оренбургская обл.' 'Орловская обл.'\n", " 'Пензенская обл.' 'Пермский край' 'Приморский край' 'Псковская обл.'\n", " 'Ростовская обл.' 'Рязанская обл.' 'Самарская обл.' 'Санкт-Петербург'\n", " 'Саратовская обл.' 'Саха (Якутия)' 'Сахалинская обл.' 'Свердловская обл.'\n", " 'Севастополь' 'Северная Осетия' 'Смоленская обл.' 'Ставропольский край'\n", " 'Тамбовская обл.' 'Татарстан' 'Тверская обл.' 'Томская обл.'\n", " 'Тульская обл.' 'Тыва' 'Тюменская обл.' 'Удмуртия' 'Ульяновская обл.'\n", " 'ХМАО – Югра' 'Хабаровский край' 'Хакасия' 'Челябинская обл.' 'Чечня'\n", " 'Чувашия' 'Чукотский АО' 'Ямало-Ненецкий АО' 'Ярославская обл.']\n" ] } ], "source": [ "unique_regions = df[\"region\"].unique()\n", "print(f\"{len(unique_regions)} регионов, среди которых\")\n", "print(np.sort(unique_regions))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "В таблице присутствуют данные по всем 85 регионам РФ.\n", "\n", "> 85 субъектов Федерации: 22 республики, 9 краев, 46 областей, 3 города федерального значения, 1 автономная область, 4 автономных округа.\n", "\n", "Для простоты изложения выберем 3 региона, с наибольшим количеством заболевших за весь период времени, и 2 региона с наименьшим количеством заболевших. \n", "\n", "Сначала найдем такие регионы. Для этого воспользуемся методами [DataFrame.nlargest](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.nlargest.html) и [DataFrame.nsmallest](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.nsmallest.html#pandas.DataFrame.nsmallest), которые позволяют отобрать `n` строк таблицы с наибольшими значениями в нужном столбце (или в столбцах). В таблице `last_day_df` в столбце `cases` как раз хранятся нужные нам значения по регионам. Применив эти два метода к этой таблице, получаем таблицу из нужных нам строк. Нам нужны только регионы, то извлекаем из этой таблицы столбец `region`. \n", "\n", "Объединить два полученных столбца в один можно методом [pd.concat](https://pandas.pydata.org/docs/reference/api/pandas.concat.html). Т.к. столбцы необходимо совместить \"друг под другом\", то в `axis` указываем `index`. Индекс этих столбцов берется из таблицы исходной таблицы `last_day_df`, т.е. это индекс с одной и той же датой. Не учитывать такой индекс при объедении можно указав параметр `ignore_index=True`. " ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 Москва\n", "1 Санкт-Петербург\n", "2 Московская обл.\n", "3 Чукотский АО\n", "4 Ненецкий АО\n", "Name: region, dtype: object\n" ] }, { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \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", " \n", " \n", "
regioncasesrecoveriesdeathsdeaths per daycases per dayrecoveries per day
date
2020-03-12Москва21000210
2020-03-12Московская обл.400040
2020-03-12Санкт-Петербург100010
2020-03-13Московская обл.500010
2020-03-13Санкт-Петербург400030
........................
2021-11-24Московская обл.577907509872101165618422180
2021-11-24Чукотский АО279324062401015
2021-11-24Москва19267011745284336359325335393
2021-11-24Санкт-Петербург775795709724258027313873147
2021-11-24Ненецкий АО31452865720839
\n", "

3105 rows × 7 columns

\n", "
" ], "text/plain": [ " region cases recoveries deaths deaths per day \\\n", "date \n", "2020-03-12 Москва 21 0 0 0 \n", "2020-03-12 Московская обл. 4 0 0 0 \n", "2020-03-12 Санкт-Петербург 1 0 0 0 \n", "2020-03-13 Московская обл. 5 0 0 0 \n", "2020-03-13 Санкт-Петербург 4 0 0 0 \n", "... ... ... ... ... ... \n", "2021-11-24 Московская обл. 577907 509872 10116 56 \n", "2021-11-24 Чукотский АО 2793 2406 24 0 \n", "2021-11-24 Москва 1926701 1745284 33635 93 \n", "2021-11-24 Санкт-Петербург 775795 709724 25802 73 \n", "2021-11-24 Ненецкий АО 3145 2865 72 0 \n", "\n", " cases per day recoveries per day \n", "date \n", "2020-03-12 21 0 \n", "2020-03-12 4 0 \n", "2020-03-12 1 0 \n", "2020-03-13 1 0 \n", "2020-03-13 3 0 \n", "... ... ... \n", "2021-11-24 1842 2180 \n", "2021-11-24 10 15 \n", "2021-11-24 2533 5393 \n", "2021-11-24 1387 3147 \n", "2021-11-24 8 39 \n", "\n", "[3105 rows x 7 columns]" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "largest_regions = last_day_df.nlargest(3, columns=[\"cases\"])[\"region\"]\n", "smallest_regions = last_day_df.nsmallest(2, columns=[\"cases\"])[\"region\"]\n", "regions = pd.concat([largest_regions, smallest_regions], axis=\"index\", ignore_index=True)\n", "print(regions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Теперь из исходной таблицы можно отобрать строки с нужными регионами, проверяя значение в столбце `region`, т.е. методом логического отбора. Удобно использовать здесь метод [isin](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.isin.html). " ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \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", " \n", " \n", "
regioncasesrecoveriesdeathsdeaths per daycases per dayrecoveries per day
date
2020-03-12Москва21000210
2020-03-12Московская обл.400040
2020-03-12Санкт-Петербург100010
2020-03-13Московская обл.500010
2020-03-13Санкт-Петербург400030
........................
2021-11-24Московская обл.577907509872101165618422180
2021-11-24Чукотский АО279324062401015
2021-11-24Москва19267011745284336359325335393
2021-11-24Санкт-Петербург775795709724258027313873147
2021-11-24Ненецкий АО31452865720839
\n", "

3105 rows × 7 columns

\n", "
" ], "text/plain": [ " region cases recoveries deaths deaths per day \\\n", "date \n", "2020-03-12 Москва 21 0 0 0 \n", "2020-03-12 Московская обл. 4 0 0 0 \n", "2020-03-12 Санкт-Петербург 1 0 0 0 \n", "2020-03-13 Московская обл. 5 0 0 0 \n", "2020-03-13 Санкт-Петербург 4 0 0 0 \n", "... ... ... ... ... ... \n", "2021-11-24 Московская обл. 577907 509872 10116 56 \n", "2021-11-24 Чукотский АО 2793 2406 24 0 \n", "2021-11-24 Москва 1926701 1745284 33635 93 \n", "2021-11-24 Санкт-Петербург 775795 709724 25802 73 \n", "2021-11-24 Ненецкий АО 3145 2865 72 0 \n", "\n", " cases per day recoveries per day \n", "date \n", "2020-03-12 21 0 \n", "2020-03-12 4 0 \n", "2020-03-12 1 0 \n", "2020-03-13 1 0 \n", "2020-03-13 3 0 \n", "... ... ... \n", "2021-11-24 1842 2180 \n", "2021-11-24 10 15 \n", "2021-11-24 2533 5393 \n", "2021-11-24 1387 3147 \n", "2021-11-24 8 39 \n", "\n", "[3105 rows x 7 columns]" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "small_df = df[\n", " df[\"region\"].isin(regions)\n", " ].copy()\n", "small_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Построим график заражений только для отобранных регионов." ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = px.line(small_df, y=\"cases per day\", color=\"region\")\n", "fig.write_html(plotly_tmp) # fig.show()\n", "display(HTML(plotly_tmp)) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "На глаз заметны волны. Кроме того, кажется, что эти волны происходят почти синхронно. Вычислим взаимные корреляции этих графиков. Для этого удобно использовать метод [DataFrame.correlate](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.corr.html), который вычисляет корреляцию между всеми столбцами таблицы. Создадим таблицу с нужными нам столбцами." ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \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", " \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", " \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", " \n", " \n", " \n", "
МоскваСанкт-ПетербургМосковская обл.Чукотский АОНенецкий АО
date
2020-03-122114NaNNaN
2020-03-13531NaNNaN
2020-03-14911NaNNaN
2020-03-15003NaNNaN
2020-03-16183-1NaNNaN
..................
2021-11-2032392637188525.016.0
2021-11-2134382496190910.016.0
2021-11-2227862215178411.016.0
2021-11-2327491060187110.014.0
2021-11-2425331387184210.08.0
\n", "

623 rows × 5 columns

\n", "
" ], "text/plain": [ " Москва Санкт-Петербург Московская обл. Чукотский АО \\\n", "date \n", "2020-03-12 21 1 4 NaN \n", "2020-03-13 5 3 1 NaN \n", "2020-03-14 9 1 1 NaN \n", "2020-03-15 0 0 3 NaN \n", "2020-03-16 18 3 -1 NaN \n", "... ... ... ... ... \n", "2021-11-20 3239 2637 1885 25.0 \n", "2021-11-21 3438 2496 1909 10.0 \n", "2021-11-22 2786 2215 1784 11.0 \n", "2021-11-23 2749 1060 1871 10.0 \n", "2021-11-24 2533 1387 1842 10.0 \n", "\n", " Ненецкий АО \n", "date \n", "2020-03-12 NaN \n", "2020-03-13 NaN \n", "2020-03-14 NaN \n", "2020-03-15 NaN \n", "2020-03-16 NaN \n", "... ... \n", "2021-11-20 16.0 \n", "2021-11-21 16.0 \n", "2021-11-22 16.0 \n", "2021-11-23 14.0 \n", "2021-11-24 8.0 \n", "\n", "[623 rows x 5 columns]" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = {}\n", "for region in regions:\n", " col = small_df[small_df[\"region\"] == region][\"cases per day\"]\n", " data[region] = col.copy()\n", "\n", "to_correlate = pd.DataFrame(data)\n", "to_correlate" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
\n", "
\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\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", " \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", " \n", "
МоскваСанкт-ПетербургМосковская обл.Чукотский АОНенецкий АО
Москва1.0000000.6789630.6918790.3574440.349546
Санкт-Петербург0.6789631.0000000.7242870.5764470.511084
Московская обл.0.6918790.7242871.0000000.6805460.639753
Чукотский АО0.3574440.5764470.6805461.0000000.757208
Ненецкий АО0.3495460.5110840.6397530.7572081.000000
\n", "
" ], "text/plain": [ " Москва Санкт-Петербург Московская обл. Чукотский АО \\\n", "Москва 1.000000 0.678963 0.691879 0.357444 \n", "Санкт-Петербург 0.678963 1.000000 0.724287 0.576447 \n", "Московская обл. 0.691879 0.724287 1.000000 0.680546 \n", "Чукотский АО 0.357444 0.576447 0.680546 1.000000 \n", "Ненецкий АО 0.349546 0.511084 0.639753 0.757208 \n", "\n", " Ненецкий АО \n", "Москва 0.349546 \n", "Санкт-Петербург 0.511084 \n", "Московская обл. 0.639753 \n", "Чукотский АО 0.757208 \n", "Ненецкий АО 1.000000 " ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "corr = to_correlate.corr()\n", "\n", "fig = px.imshow(corr, zmin=-1, zmax=1)\n", "fig.write_html(plotly_tmp) # fig.show()\n", "display(HTML(plotly_tmp)) \n", "\n", "corr" ] } ], "metadata": { "celltoolbar": "Tags", "interpreter": { "hash": "cd49b4596bae9c980ff74fdf93e8fe80e447435ae307c062fad6c4f9ef2eb47f" }, "kernelspec": { "display_name": "Python 3", "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.8.10" } }, "nbformat": 4, "nbformat_minor": 2 }