Очистить базу данных случаев короны от широкоформатной до графиков, используя pandas python - PullRequest
0 голосов
/ 22 марта 2020

Я делаю блокнот для юпитера для получения доступа и составления графика подтвержденных случаев короны. Вы можете получить доступ к моей записной книжке здесь: https://gitlab.com/knjakob-blomquist/corona-data-analysis/ или клонировать ее с помощью:

git clone git@gitlab.com:knjakob-blomquist/corona-data-analysis.git 

Данные загружаются в виде широкоформатного CSV-файла и импортируются в pandas DataFrame. как есть, так что есть столбцы для провинций, регионов / стран, координаты широты и долготы, отдельные столбцы для кумулятивной суммы подтвержденного случая для каждой провинции каждый день (даты - строки) для каждой провинции / страны. Посмотрите рисунок по ссылке здесь corona_database_wideformat.png .

Я хотел бы знать, есть ли более простой способ очистки данных для построения / применения кривой, подходящей к данным, чем так, как я это делал здесь (например, используя pd.melt или pd.wide_to_short или что-то). Я чувствую, что должен быть какой-то стандартный способ, но я не могу его найти:

# load libraries and set plot style 
%pylab inline
import datetime as dt
import pandas as pd

# Download daily updates of corona confirmed cases from
# https://data.humdata.org/dataset/novel-coronavirus-2019-ncov-cases
import requests
url = 'https://data.humdata.org/hxlproxy/api/data-preview.csv?url=https%3A%2F%2Fraw.githubusercontent.com%2FCSSEGISandData%2FCOVID-19%2Fmaster%2Fcsse_covid_19_data%2Fcsse_covid_19_time_series%2Ftime_series_19-covid-Confirmed.csv&filename=time_series_2019-ncov-Confirmed.csv'
r = requests.get(url, allow_redirects=True)

with open('corona_data.csv', 'wb') as f:
    f.write(r.content)

# Import the data from csv file into a pandas DataFrame
# and do initial processing
df = pd.read_csv('corona_data.csv')

# remove some columns as I'm only interested in total 
# per each country
df = df.drop(columns=['Province/State', 'Lat','Long'])

# group and sum all data into individual countries from their provinces
df = df.groupby('Country/Region').sum()

# invert the table so that dates become index
df = df.stack().unstack(0)

# process the date format from date strings
# add a column for dates
df['date'] = df.index

# string -> datetime format and add to day column
df['day'] = pd.to_datetime(df.date, format='%Y%m%d', infer_datetime_format=True)

# make 21 st of March into day 0
df['day'] = df['day'] - df['day'][0]
df.day = (df['day']).dt.days + 1

С кодом выше я получу следующую таблицу, см. Рисунок в ссылке: corona_database_cleaned.png И с этим форматом я могу выполнить кривые и др. c. Любые предложения приветствуются

...