Пошаговое руководство по очистке данных для визуализации данных
Table of Contents Introduction 1. Libraries 2. Data Scraping with BeautifulSoup 3. The Mapbox Token 4. Plotly.express 5. Other Datasets 6. Comparing to Plotly.graph_object Conclusion
Вступление
В этой статье я покажу вам, как очистить последние данные из CSSEGISandData's COVID-19 репозиторий Github и создать пузырьковую карту с помощью Plotly и Mapbox.
Мы собираемся использовать JupyterLab (или Jupyter Notebook, если хотите), Plotly express, BeautifulSoup и Mapbox.
Раньше было сложно установить Plotly на JupyterLab, но теперь установить его легко. Вы можете найти это здесь".
Библиотеки
import requests from bs4 import BeautifulSoup import plotly.express as px import pandas as pd
Мы используем HTTP-библиотеку Python requests
для отправки get
запроса на веб-страницу. BeautifulSoup - это библиотека Python для извлечения данных из файлов HTML и XML.
plotly.express
- это высокоуровневая оболочка для Plotly. Он использует более простой синтаксис и прост в использовании. pandas
- это быстрый, мощный, гибкий и простой в использовании инструмент для анализа и обработки данных с открытым исходным кодом.
Сбор данных с помощью BeautifulSoup
Приступим к написанию кода для соскабливающей части.
Устанавливаем переменные github
и URL
.
github = 'https://github.com' URL = 'https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covidplotly.express
data/csse_covidplotly.express
daily_reports_us'
Мы получаем веб-страницу с помощью request.get()
и создаем объект Beautifulsoup
, анализируя содержимое страницы.
page = requests.get(URL) soup = BeautifulSoup(page.content, 'html.parser')
Изучив HTML-код страницы, вы можете обнаружить, что последний отчет всегда является четвертой ссылкой после последней. Если вам нужно это подтвердить, вы можете распечатать последнюю версию.
latest = str(soup.table.find_all('a')[-4]['href']) # print(latest)
Выход:
/CSSEGISandData/COVID-19/blob/master/csse_covidplotly.express
data/csse_covidplotly.express
daily_reports_us/06-04-2020.csv
Мы создаем ссылку на последние данные и снова получаем содержимое веб-страницы с помощью requests.get()
. Мы можем подтвердить последнийURL, распечатав его.
latestURL = github + latest latestPage = requests.get(latestURL, 'html.parser') print(latestURL)
Выход:
plotly.expressdata/csse_covidplotly.express
daily_reports_us/06-20-2020.csv">https://github.com/CSSEGISandData/COVID-19/blob/master/csse_covidplotly.express
data/csse_covidplotly.express
daily_reports_us/06-04-2020.csv
На Github есть необработанная страница с идентификатором raw-url
. Мы получаем URL-адрес необработанного URL-адреса страницы. Мы можем подтвердить это, напечатав rawURL
.
soup = BeautifulSoup(latestPage.content, 'html.parser') raw = str(soup.find(id='raw-url')['href']) rawURL = github + raw print(rawURL)
Выход:
plotly.expressdata/csse_covidplotly.express
daily_reports_us/06-20-2020.csv">https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covidplotly.express
data/csse_covidplotly.express
daily_reports_us/06-04-2020.csv
Теперь необработанная страница имеет формат CSV, и мы можем использовать Pandas для ее чтения. Мы можем подтвердить это, распечатав данные с помощью head()
.
df = pd.read_csv(rawURL) print(df.head())
Мы отбрасываем строки (axis=0
), в которых отсутствует значение Lat
. Также заполняем поля 0, если данные отсутствуют.
df = df.dropna(axis=0, subset=['Lat']) df = df.fillna(0) print(df.head())
Мы берем дату и время из первой строки в третьем столбце. (Первый индекс равен 0)
date, time = df.iloc[0, 2].split() print(date) print(time)
Выход:
2020-06-04 04:33:37
Токен Mapbox
Зарегистрируйтесь на Mapbox. И создать токен.
В своем JupyterLab / Jupyter Notebook создайте файл .mapbox_token
, скопируйте и вставьте созданный токен из Mapbox в этот файл.
px.set_mapbox_access_token(open(".mapbox_token").read())
Мы устанавливаем токен Mapbox с помощью Plotly express set_mapbox_access_token
. Если вы используете Git, добавьте .mapbox_token
в ваш .gitignore
файл.
Plotly.express
Последняя часть кода - это установка plotly.express
параметров и макета.
Следующий список содержит некоторые ключевые параметры для plotly.express.scatter_mapbox
.
Мы используем color
, size
, color_continuous_scale
, size_max
, zoom
, center
, hover_data
и hover_name
. При желании вы можете установить другие параметры.
fig = px.scatter_mapbox( df, lat="Lat", lon="Long_", color="Deaths", size="Deaths", color_continuous_scale=px.colors.sequential.Jet, size_max=40, zoom=3, center={"lat": 37.0902, "lon": -95.7129}, hover_data=["Confirmed"], hover_name='Province_State' )
Мы можем установить заголовок в fig.update_layout
. И fig.show()
для отображения изображения.
fig.update_layout( title=f'COVID-19 Deaths in USA by states. Date: {date}', ) fig.show()
Весь код:
Другие наборы данных
Мы можем использовать это для других страниц CSSEGISandData, посвященных COVID-19. Например, используя ссылку на ежедневный отчет по всему миру:
URL = 'https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covidplotly.express
data/csse_covidplotly.express
daily_reports'
По сравнению с Plotly.graph_object
Следующее изображение в формате gif создано с использованием Plotly.graph_object. Вы видите разницу? У него нет названий штатов, ландшафта, рек и деталей, как у Mapbox. Вы можете найти код здесь.
Заключение
Теперь вы знаете, как создать пузырьковую карту с помощью Plotly.express. Библиотека Mapbox была использована, потому что она дает вам лучшее представление и вы можете управлять картой с различными параметрами. Как насчет использования пузырьковой карты для вашего проекта Data Science.
Новостная рассылка
Получите полный доступ ко всем статьям на Medium, став участником.
Ресурсы
- Вы можете найти широту и долготу на карте с сайта https://www.latlong.net/.
- Установка JupyterLab
- Графически встроенные непрерывные цветовые шкалы в Python
plotly.express
.scatter_mapbox