Я создаю набор данных, который в конечном итоге будет использован для создания интерактивного онлайн-приложения для визуализации данных с Da sh.
Это мой первый проект с Python (и программированием в целом), и Я пытаюсь решить, как лучше go получать, хранить и обновлять данные для набора данных.
Это API, который я использую: https://covid19api.com/
документация: https://documenter.getpostman.com/view/10808728/SzS8rjbc?version=latest
Я написал некоторый код, который извлекает данные, которые мне нужны для каждой страны, и манипулирует ими для создания серии, которая мне нужна
# Import the libraries
import requests
import pandas as pd
import numpy as np
from pandas import Series, DataFrame
from pandas import json_normalize
from datetime import datetime
import matplotlib.pyplot as plt
url = 'https://api.covid19api.com/total/dayone/country/ireland'
data = requests.get(url)
# Store the API response in a variable.
available_data = data.json()
df_ire = json_normalize(available_data)
# rename the date to datetime
df_ire = df_ire.rename(columns={"Date" : "datetime"})
#convert the data to datetime format
df_ire["datetime"] = pd.to_datetime(df_ire["datetime"])
# Create Daily new cases column & SMA
df_ire["New Cases"] = df_ire['Confirmed'].diff()
df_ire["SMA_10 New Cases"] = df_ire["New Cases"].rolling(window=10).mean()
# Create Daily new deaths column & SMA
df_ire["New Deaths"] = df_ire['Deaths'].diff()
df_ire["SMA_10 New Deaths"] = df_ire["New Deaths"].rolling(window=10).mean()
df_ire.fillna(0)
#set datetime as index
df_ire.set_index('datetime')
#Plot New Cases
fig, ax = plt.subplots(figsize=(15,7))
plt.grid(False)
plt.plot(df_ire["SMA_10 New Cases"], label="New Cases - 10-Day Moving Average",
color = "orange", linewidth = 4 )
ax.bar(df_ire.index, df_ire["New Cases"], label = "Daily New Confirmed Cases")
ax.set(xlabel='Days Since First Confirmed Case', ylabel='Number of Infections',
title='Ireland: Average vs Daily New Cases')
fig.autofmt_xdate()
plt.legend(loc=2);
plt.savefig('ireland_avg_vs_daily_cases', dpi = 1067, bbox_inches='tight' )
На данный момент я просто работаю с данными для одной страны и использую matplotlib, поскольку я лучше всего понимаю, как представить и обработать данные. Вот пример того, что я сделал до сих пор: ![chart](https://i.stack.imgur.com/c0SMb.png)
Готовый проект должен выглядеть примерно так, но со скоростью изменения для всех стран: https://dash-gallery.plotly.host/dash-opioid-epidemic/
Прежде всего, API - это проект сообщества, находящийся в разработке, и я не хочу перегружать их систему запросами, поэтому я пытаюсь структурировать свой проект так, чтобы минимизировать количество нагрузки, которую я положил на их систему. Я - попросту - не знаю, какие хорошие / плохие практики в отношении использования API, и я не хочу быть «этим парнем».
Как я сказал выше, мне также нужно подумать о хранении данных и их обновлении через определенные промежутки времени. Это данные временных рядов для 248 стран и записи нескольких переменных, все из которых нужно будет обрабатывать в pandas и регулярно добавлять. Должен ли я создать один массивный фрейм данных? Должен ли я создать фрейм данных для каждой страны, каждой переменной?
После того, как я создал набор данных, я надеюсь обновить и добавить его, используя код, аналогичный приведенному выше, используя этот вызов api: https://api.covid19api.com/summary
Это хороший план и как он должен выглядеть?
Я планирую разместить на Heroku (или что-то подобное), когда он будет готов.
Большое спасибо, если вы все еще читаете этот момент. Я знаю, что это очень объемный пост, и я задаю много вопросов в одном go. Я весь день пытался думать о том, как поступить с этим, и знаю, что мне нужно принять некоторые фундаментальные решения, чтобы продолжить. Любая помощь будет принята с благодарностью.