from datetime import datetime
import pandas as pd
import pandas as pd
import io
import requests
import cufflinks as cf
import plotly
import plotly.offline as py
import plotly.graph_objs as go
cf.go_offline() # required to use plotly offline (no account required).
py.init_notebook_mode() # graphs charts inline (IPython).
url="https://raw.githubusercontent.com/COVID19Tracking/covid-tracking-data/master/data/states_daily_4pm_et.csv"
data=pd.read_csv(url)
data['date2'] = data['date'].apply(lambda x: datetime.strptime(str(x), '%Y%m%d'))
data.head()
positive = data.groupby(['state', 'date2']).mean().reset_index().pivot(index='date2', columns='state', values='positive')
positive = positive.fillna(method='bfill')
death = data.groupby(['state', 'date2']).mean().reset_index().pivot(index='date2', columns='state', values='death')
death = death.fillna(method='bfill')
recovered = data.groupby(['state', 'date2']).mean().reset_index().pivot(index='date2', columns='state', values='recovered')
recovered = recovered.fillna(method='bfill')
new_positives = positive.diff()
# Let's look at new_positives/currently_infected
#This doesn't work because some states (e.g. CA) are not tracking recovered
normalized_contagiousness = new_positives.div(positive-recovered-death)
def plot(target, states, title):
fig = go.Figure()
for state in states:
fig.add_trace(go.Scatter(x=target.index, y=target[state].tolist(), mode='lines', name=state, visible = "legendonly"))
fig.update_layout(
title=title,
)
fig.show()
#states = ['TN', 'FL', 'TX', 'CA', 'NY', 'AR', 'IA', 'NE', 'ND', 'OK', 'SC', 'SD', 'UT', 'WY', 'MI']
states = positive.columns
plot(positive, states, 'Cumulative Positive Cases')
plot(100*positive.pct_change(), states, 'Percent Daily Change in Positive Cases')
plot(positive.diff(), states, 'New Cases')