Idea for a surge protector @author: Matt Bayer """ import os import numpy as np import pandas as pd import matplotlib.pyplot as plt import datetime import covid #%% Load data state = covid.read_covid_data_wi('state') # rename col_rename = { 'Date': 'Date', 'POS_NEW': 'Cases', 'TEST_NEW': 'Tests', 'DTH_NEW': 'Deaths', 'HOSP_NEW': 'Hospitalizations' } state = state.rename(columns=col_rename) #%% create weekly sums weekly = state[col_rename.values()] weekly = weekly.set_index('Date') weekly = weekly.rolling(7).sum()
import urllib from scipy import signal import datetime #%% Get the data # Updated by UpdateData.py, just load from csv here datapath = '.\\data' csv_file_pop = datapath + '\\Population-Data-WI.csv' # population data popdata = covid.read_pop_data_wi(csv_file_pop) # covid data widata = covid.read_covid_data_wi() #%% Read in currently hospitalized data # manually downloaded file hosp_file = "data\\COVID_Patients_(T)_data_2020-09-25.csv" # url, but it only exists temporarily after I've accessed it manually, not sure how I can get a permalink hosp_url = "https://bi.wisconsin.gov/vizql/t/DHS/w/EMResourceSnapshotPublic/v/EMResourceSnapshot/vudcsv/sessions/EBB037196DC0415A836E32982F8D0692-3:0/views/12341810530253913541_8071313743224759748?summary=true" hosp = pd.read_csv(hosp_file) # discard unnecessary "% change" column hosp = hosp[['Report Date', 'Region', 'Total COVID Patients']] # shorten names hosp = hosp.rename(columns={ 'Report Date': 'Date', 'Total COVID Patients': 'Patients'
import datetime import plotly.express as px import json #%% Get the data # Updated by UpdateData.py, just load from csv here datapath = '.\\data' csv_file_pop = datapath + '\\Population-Data-WI.csv' # population data popdata = covid.read_pop_data_wi(csv_file_pop) # covid data widata = covid.read_covid_data_wi('county') #%% Sum up population by region # get mapping between county and region region_file = 'data\\Regions-WI.csv' region_map = pd.read_csv(region_file) region_map = region_map[['County', 'Modified HERC Short']] region_map = region_map.set_index('County') region_map = region_map.squeeze() # get a list of region names region_list = region_map.unique() # add WI overall to the map
mke.plot(x='Date', y=['Tests', 'Cases']) mke.plot(x='Date', y='Positive Rate') #%% Get the coviddata # Updated by UpdateData.py, just load from csv here datapath = '.\\data' csv_file_pop = datapath + '\\Population-Data-WI.csv' # population data popdata = covid.read_pop_data_wi(csv_file_pop) # covid data # covid.update_covid_data_wi('tract') covid_tract = covid.read_covid_data_wi('tract') county = covid.read_covid_data_wi('county') # filter on Milwaukee tracts covid_tract_mke = covid_tract.loc[covid_tract.GEO == 'Census tract'] covid_tract_mke = covid_tract_mke.loc[covid_tract_mke.GEOID.apply( lambda x: x[0:5] == '55079')] #%% County racial stats mke = county.loc[county.NAME == 'Milwaukee'] mke.plot(x='Date', y=['POS_WHT', 'POS_BLK', 'POS_E_HSP']) #%% County cases / hosp plot # reduce and rename at state level col_rename = { 'Date': 'Date',
#%% Get the data # First retrieve data from server and save to csv file # Second read data from the previously saved csv file # comment sections if no need to re-download csv_file_covid = path + 'Covid-Data-WI.csv' csv_file_pop = path + 'Population-Data-WI.csv' # population data # covid.download_pop_data_wi(csv_file_pop) popdata = covid.read_pop_data_wi(csv_file_pop) # covid data covid.download_covid_data_wi(csv_file_covid) widata = covid.read_covid_data_wi(csv_file_covid) #%% Try to estimate true prevalence loc = 'WI' select = covid.select_data(widata, loc) avg = select.rolling(window=7, center=True).mean() # offset tests by ten days? cases = avg.POS_NEW tests = avg.TEST_NEW # tests.index -= pd.DateOffset(days=10)
people['Date'] = pd.to_datetime(people['Date']) people = people.set_index('Date') people['Cases'] = pd.to_numeric(people['Cases'].str.replace(',', '')) people['New people tested'] = pd.to_numeric( people['New people tested'].str.replace(',', '')) test['New people tested'] = people['New people tested'] # cumulative sum of tests test['Total people tested'] = test['New people tested'].expanding(1).sum() # people.plot(y=['Cases', 'New people tested']) #%% By Report state = covid.read_covid_data_wi('state') state = state.set_index('Date') state['Tested'] = state['POSITIVE'] + state['NEGATIVE'] test['Total people tested (reported)'] = state['Tested'] test['New people tested (reported)'] = test[ 'Total people tested (reported)'].diff(1) # compare cases test date to reported date people['Cases (reported)'] = state['POS_NEW'] people.rolling(7).mean().plot(y=['Cases', 'Cases (reported)']) # CAREFUL- I thought it was by TEST date, # but I think it's actually by RESULT date. # The plots LOOK not all that different, but that might be an artifact of just # having very similar 7-day patterns. If I average it maybe I would see more # of a delay like I would expect.
import pandas as pd import geopandas as gpd import covid #%% Get the coviddata # Updated by UpdateData.py, just load from csv here datapath = '.\\data' csv_file_pop = datapath + '\\Population-Data-WI.csv' # population data popdata = covid.read_pop_data_wi(csv_file_pop) # covid data tract = covid.read_covid_data_wi('tract') #%% Tract population tractpopfile = '.\\data\\geo\\Tract-Population-WI\\Tract-Population-WI.csv' tractcsv = pd.read_csv(tractpopfile) tractpop = pd.DataFrame({ 'GEOID': [s[9:] for s in tractcsv.iloc[1:, 0]], 'NAME': tractcsv.iloc[1:, 1], 'Population': pd.to_numeric(tractcsv.iloc[1:, 2]), 'Margin of Error': pd.to_numeric(tractcsv.iloc[1:, 3], errors='coerce'), }) # remove Wisconsin state
import os import numpy as np import pandas as pd import matplotlib.pyplot as plt import datetime import covid #%% Update the data # covid data by county covid.update_covid_data_wi('state') covid.update_covid_data_wi('county') widata = covid.read_covid_data_wi('county') state = covid.read_covid_data_wi('state') # population data datapath = '.\\data' csv_file_pop = os.path.join(datapath, 'Population-Data-WI.csv') # covid.download_pop_data_wi(csv_file_pop) popdata = covid.read_pop_data_wi(csv_file_pop) #%% Update Dashboard plots plotpath = '.\\docs\\assets\\plotly' # reduce and rename at state level col_rename = {'POS_NEW': 'Cases', 'TEST_NEW': 'Tests', 'DTH_NEW': 'Deaths', 'HOSP_NEW': 'Hospitalizations'} state = state.rename(columns=col_rename)