В Европейский центр профилактики и контроля заболеваний обеспечивает ежедневно обновляемые данные о COVID-19 по всему миру который легко скачать в форматах JSON, CSV или XML. В этом руководстве мы будем использовать инструмент анализа данных pandas на данные, разделенные запятыми (CSV), чтобы узнать некоторые из основных pandas команды и исследуйте, что содержится в наборе данных.
Настройка нашей среды разработки
Убедитесь, что у вас установлен Python 3. На данный момент Python 3.8.2 – последняя версия.
В этом уроке мы также будем использовать панды .
Установите его сейчас в новую виртуальную среду со следующими команды:
python -m venv covidpandas source covidpandas/bin/activate pip install pandas
Теперь мы готовы получить данные о COVID-19 и начать их анализ с панды.
Получение данных о COVID-19
Перейти к загрузить сегодняшние данные о географическом распределении Случаи COVID-19 во всем мире страницу в вашем веб-браузере. Это должно выглядеть примерно так Скриншот.
Должна быть ссылка на скачивание данные в формате CSV, но организация изменила макет страницы несколько раз за последние несколько недель, что затрудняет поиск форматы, отличные от Excel (XLSX). Если у вас возникли проблемы с получением Версия CSV, просто скачайте этот с GitHub который привязан к копии, загруженной 28 марта 2020 г.
Импорт CSV в pandas
У нас есть данные в CSV, теперь нам нужно импортировать их в pandas DataFrame.
Начните с запуска Python REPL:
python >>>
REPL готов к работе, теперь нам нужно импортировать панды, чтобы мы могли читать данные, которые мы скачали.
from pandas import read_csv df = read_csv("covid-19-cases-march-28-2020.csv")
Не волнуйтесь, если вы получите сообщение об ошибке UnicodeDecodeError: кодек 'utf-8' не может декодировать байт 0xe7 ...
. Вместо этого запустите эту команду, которая явно устанавливает кодировку файла поэтому панды могут правильно читать CSV.
# make sure the file name of the csv matches your file's name! df = read_csv("covid-19-cases-march-28-2020.csv", encoding="ISO-8859-1")
Теперь у нас есть данные, загруженные в pandas DataFrame и может запустить код, чтобы тыкать и подталкивать и что внутри набор данных.
Запуск команд pandas
Давайте сначала посмотрим, как выглядит образец данных. я обычно выполняю функции head
и tail
, когда я что-то открываю вверх, чтобы узнать, что содержится в первых пяти и последних пяти строках.
df.head()
Вы должны увидеть шесть строк вывода: одну в качестве заголовка столбца и первые пять строк данных из CSV:
dateRep day month year cases deaths countriesAndTerritories geoId countryterritoryCode popData2018 0 28/03/2020 28 3 2020 16 1 Afghanistan AF AFG 37172386.0 1 27/03/2020 27 3 2020 0 0 Afghanistan AF AFG 37172386.0 2 26/03/2020 26 3 2020 33 0 Afghanistan AF AFG 37172386.0 3 25/03/2020 25 3 2020 2 0 Afghanistan AF AFG 37172386.0 4 24/03/2020 24 3 2020 6 1 Afghanistan AF AFG 37172386.0
Функция tail
просматривает последние пять строк в DataFrame.
df.tail()
Вывод tail
будет выглядеть примерно так:
dateRep day month year cases deaths countriesAndTerritories geoId countryterritoryCode popData2018 7315 25/03/2020 25 3 2020 0 0 Zimbabwe ZW ZWE 14439018.0 7316 24/03/2020 24 3 2020 0 1 Zimbabwe ZW ZWE 14439018.0 7317 23/03/2020 23 3 2020 0 0 Zimbabwe ZW ZWE 14439018.0 7318 22/03/2020 22 3 2020 1 0 Zimbabwe ZW ZWE 14439018.0 7319 21/03/2020 21 3 2020 1 0 Zimbabwe ZW ZWE 14439018.0
Обратите внимание, что вы также можете передать целое число в head
или tail
, например df.head (10)
, чтобы получить первое или последнее n количество строк.
Похоже, что на основе функции tail
у нас есть около 7320 строк данные (поскольку первая строка имеет индекс 0). Мы можем подтвердить, сколько данные находятся в каждом столбце с функцией count
.
df.count()
Результат count
будет выглядеть так:
dateRep 7320 day 7320 month 7320 year 7320 cases 7320 deaths 7320 countriesAndTerritories 7320 geoId 7306 countryterritoryCode 7254 popData2018 7311 dtype: int64
Что, если мы хотим посмотреть на один из этих столбцов и найти, например, высшая ценность кейсов?
df.cases.max()
В этом наборе данных мы получаем 18695 на выходе. Как насчет того, чтобы смотреть на стандартные статистические показатели по всем столбцам? Вот где Функция description
пригодится.
df.describe()
description
представляет стандартные статистические показатели, такие как min, max, медиана и среднее значение для всего в вашем наборе данных. В этом случае мы получить в качестве вывода:
day month year cases deaths popData2018 count 7320.000000 7320.000000 7320.000000 7320.000000 7320.000000 7.311000e+03 mean 16.828142 2.249454 2019.990847 80.870355 3.687158 7.130483e+07 std 8.322981 1.256463 0.095239 608.270244 35.327689 2.140624e+08 min 1.000000 1.000000 2019.000000 -9.000000 0.000000 1.000000e+03 25% 10.000000 1.000000 2020.000000 0.000000 0.000000 4.137309e+06 50% 18.000000 2.000000 2020.000000 0.000000 0.000000 1.072767e+07 75% 24.000000 3.000000 2020.000000 5.000000 0.000000 5.139301e+07 max 31.000000 12.000000 2020.000000 18695.000000 971.000000 1.392730e+09
Как насчет быстрого просмотра того, коррелированы ли данные столбцов? друг с другом? Функция corr
– это то, что нам нужно.
df.corr()
Для нашего набора данных corr
выводит:
day month year cases deaths popData2018 day 1.000000 0.203006 -0.163665 0.063629 0.060075 -0.040677 month 0.203006 1.000000 -0.745912 0.062494 0.052707 -0.039131 year -0.163665 -0.745912 1.000000 0.012715 0.010032 -0.006294 cases 0.063629 0.062494 0.012715 1.000000 0.716968 0.136580 deaths 0.060075 0.052707 0.010032 0.716968 1.000000 0.082229 popData2018 -0.040677 -0.039131 -0.006294 0.136580 0.082229 1.000000
Неудивительно, что мы видим корреляцию 1 000 000 между столбцом и самим собой. Если бы мы не увидели такого результата, нам пришлось бы волноваться! Для других столбцов это может нет смысла смотреть на их соотношение. Вот где вам нужно подумайте о данных. Часто существует взаимосвязь между совершенно несвязанными столбцы просто потому, что данные структурированы определенным образом.
Если вы такой же разработчик, как я, без строгого опыта в статистике (Статистика 200 в колледже была давно назад), возможно, вам нужно освежить на ваших знаниях статистики, прежде чем вы сможете сказать, есть ли что-то в данные имеют значение или нет.
Продолжаем изучать данные. Мы можем выбрать столбцы и определить, как в нем хранится много уникальных предметов. Например, сколько уникальных стран а территории указаны?
df.countriesAndTerritories.nunique()
В этом случае результат должен быть 196.
Задавая вопросы о данных
Эти функции подходят для базовых запросов, чтобы узнать, что находится в набор данных, но как мы можем задать реальные вопросы, объединив некоторые команды?
Теперь мы знаем, что в этом наборе 7320 строк, поскольку мы использовали count
функция выше. Каждая строка представляет один день в стране. В настоящее время задавать вопрос. Сколько дней в этих странах было 10 или больше случаев зарегистрировано?
Давайте создадим новый фрейм данных с именем df2 со строками, в которых есть только В этот день было зарегистрировано 10 или более случаев, затем подсчитайте количество строк внутри.
df2 = df[df['cases']>=10] df2.count()
Это должно дать нам значение 1531. Было 1531 случай 10 или более случаев COVID-19, зарегистрированных за один день, в Перечислено 196 стран или террористических организаций. Но 1531 год трудно объяснить людям. Мы должны выбрать одну страну и показать, сколько раз За один день было зарегистрировано 10 и более случаев. Как насчет меньшего о такой стране, как Вьетнам, о которой не сообщают так много, как о Китае, США или Италия?
df2[df2['countriesAndTerritories']=='Vietnam']
Это даст нам полный вывод данных по столбцам:
dateRep day month year cases deaths countriesAndTerritories geoId countryterritoryCode popData2018 7217 28/03/2020 28 3 2020 16 0 Vietnam VN VNM 95540395.0 7219 26/03/2020 26 3 2020 14 0 Vietnam VN VNM 95540395.0 7220 25/03/2020 25 3 2020 11 0 Vietnam VN VNM 95540395.0 7222 23/03/2020 23 3 2020 24 0 Vietnam VN VNM 95540395.0 7226 19/03/2020 19 3 2020 15 0 Vietnam VN VNM 95540395.0
Мы также можем использовать здесь функцию count
, чтобы подтвердить, что пять дней, в течение которых во Вьетнаме было зарегистрировано 10 или более новых случаев слишком далеко:
df2[df2['countriesAndTerritories']=='Vietnam'].count()
Получаем 5 для столбцов. К сожалению, когда вы смотрите на полные данные, кажется, все эти строки очень свежие, и вирус только начинает там шире распространяться. Будем надеяться, что они вместе с любой другой страной может переломить ситуацию, сгладить кривую и уберечь больше людей от болезней по мере того, как мы идем дальше.
Это хорошее место, чтобы остановиться, но мы покрыли много земли панд в этом уроке!
Что дальше?
Мы только что импортировали и посмотрели, что есть в Европейском центре. для набора данных по профилактике и контролю заболеваний COVID-19 с использованием панды. Это был краткий обзор некоторых основных панд команд, и я настоятельно рекомендую вам ознакомиться с список документации DataFrame чтобы узнать обо всех других полезных функциях этого инструмента предоставляет разработчикам.
Вы также можете получить представление о том, что кодировать дальше в своем проекте Python, чтение Страница полного содержания Python.
Вопросов? Свяжитесь со мной через Twitter @fullstackpython или @mattmakai . Я также на GitHub с имя пользователя mattmakai .
Что-то не так с этим сообщением? Вилка источник этой страницы на GitHub и отправьте запрос на перенос.