Skip to content

Commit 14120d6

Browse files
authored
Merge pull request #3 from dfarrow0/main
support `covid_hosp` api endpoint
2 parents 74b225c + fdd3f9f commit 14120d6

File tree

4 files changed

+172
-11
lines changed

4 files changed

+172
-11
lines changed

site/epivis.html

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ <h1>Load from Epidata API</h1>
7979
<div class="option_label"><label><input type="radio" name="source_radio" id="radio_nowcast" /> Delphi Nowcast</label></div><span class="explanation">(source: <a target="_blank" href="https://delphi.cmu.edu/">delphi.cmu.edu</a>)</span>
8080
<br />
8181
<div class="option_label"><label><input type="radio" name="source_radio" id="radio_covidcast" /> Delphi COVIDcast</label></div><span class="explanation">(source: <a target="_blank" href="https://delphi.cmu.edu/">delphi.cmu.edu</a>)</span>
82+
<br />
83+
<div class="option_label"><label><input type="radio" name="source_radio" id="radio_covid_hosp" /> COVID Hospitalization</label></div><span class="explanation">(source: <a target="_blank" href="https://healthdata.gov/dataset/covid-19-reported-patient-impact-and-hospital-capacity-state-timeseries">healthdata.gov</a>)</span>
8284
<div class="csv_options" id="radio_fluview_options">
8385
<div class="option_label">
8486
<select name="select_fluview_region" id="select_fluview_region">
@@ -991,6 +993,78 @@ <h1>Load from Epidata API</h1>
991993
</select>
992994
</div><span class="explanation">(location to filter data by)</span>
993995
</div>
996+
<div class="csv_options" id="radio_covid_hosp_options" style="display: none;">
997+
<div class="option_label">
998+
<select name="select_covid_hosp_state" id="select_covid_hosp_state">
999+
<option value="AK">AK</option>
1000+
<option value="AL">AL</option>
1001+
<option value="AR">AR</option>
1002+
<option value="AZ">AZ</option>
1003+
<option value="CA">CA</option>
1004+
<option value="CO">CO</option>
1005+
<option value="CT">CT</option>
1006+
<option value="DE">DE</option>
1007+
<option value="FL">FL</option>
1008+
<option value="GA">GA</option>
1009+
<option value="HI">HI</option>
1010+
<option value="IA">IA</option>
1011+
<option value="ID">ID</option>
1012+
<option value="IL">IL</option>
1013+
<option value="IN">IN</option>
1014+
<option value="KS">KS</option>
1015+
<option value="KY">KY</option>
1016+
<option value="LA">LA</option>
1017+
<option value="MA">MA</option>
1018+
<option value="MD">MD</option>
1019+
<option value="ME">ME</option>
1020+
<option value="MI">MI</option>
1021+
<option value="MN">MN</option>
1022+
<option value="MO">MO</option>
1023+
<option value="MS">MS</option>
1024+
<option value="MT">MT</option>
1025+
<option value="NC">NC</option>
1026+
<option value="ND">ND</option>
1027+
<option value="NE">NE</option>
1028+
<option value="NH">NH</option>
1029+
<option value="NJ">NJ</option>
1030+
<option value="NM">NM</option>
1031+
<option value="NV">NV</option>
1032+
<option value="NY">NY</option>
1033+
<option value="OH">OH</option>
1034+
<option value="OK">OK</option>
1035+
<option value="OR">OR</option>
1036+
<option value="PA">PA</option>
1037+
<option value="RI">RI</option>
1038+
<option value="SC">SC</option>
1039+
<option value="SD">SD</option>
1040+
<option value="TN">TN</option>
1041+
<option value="TX">TX</option>
1042+
<option value="UT">UT</option>
1043+
<option value="VA">VA</option>
1044+
<option value="VT">VT</option>
1045+
<option value="WA">WA</option>
1046+
<option value="WI">WI</option>
1047+
<option value="WV">WV</option>
1048+
<option value="WY">WY</option>
1049+
<option value="DC">District of Columbia</option>
1050+
<option value="PR">Puerto Rico</option>
1051+
<option value="VI">Virgin Islands</option>
1052+
</select>
1053+
</div><span class="explanation">(location to filter data by)</span>
1054+
<br />
1055+
<div class="option_label"><label><input type="radio" name="covid_hosp_issue_radio" id="radio_covid_hosp_recent" checked="checked" /> Most Recent Issue</label></div><span class="explanation">(fetch the most up-to-date/stable data)</span>
1056+
<br />
1057+
<div class="option_label"><label><input type="radio" name="covid_hosp_issue_radio" id="radio_covid_hosp_static" /> Specific Issue</label></div><span class="explanation">(fetch data "as-of" a specific date)</span>
1058+
<br />
1059+
<div class="csv_options" id="radio_covid_hosp_recent_options">
1060+
<span class="explanation">(this option has no additional parameters)</span>
1061+
<br />
1062+
</div>
1063+
<div class="csv_options" id="radio_covid_hosp_static_options" style="display: none;">
1064+
<div class="option_label"><label><input type="text" id="text_covid_hosp_static" value="20201116" /> What date was the dataset published?</label></div> <span class="explanation">(format: YYYYMMDD)</span>
1065+
<br />
1066+
</div>
1067+
</div>
9941068
<div class="csv_options" id="radio_covidcast_options" style="display: none;">
9951069
<div class="option_label">
9961070
<select name="select_covidcast_source" id="select_covidcast_data_source">

site/js/app.js

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ function run() {
4949
"radio_quidel",
5050
"radio_sensors",
5151
"radio_nowcast",
52-
"radio_covidcast"
52+
"radio_covidcast",
53+
"radio_covid_hosp"
5354
]);
5455
connectSubOptions([
5556
"radio_fluview_recent",
@@ -69,6 +70,10 @@ function run() {
6970
connectSubOptions(["check_wiki_hour"]);
7071
connectSubOptions(["check_date"]);
7172
connectSubOptions(["check_group"]);
73+
connectSubOptions([
74+
"radio_covid_hosp_recent",
75+
"radio_covid_hosp_static"
76+
]);
7277

7378
// top button bar
7479
setActionTooltip(
@@ -467,6 +472,25 @@ function loadEpidata() {
467472
geoType,
468473
geoValue);
469474
})();
475+
} else if ($("#radio_covid_hosp").is(":checked")) {
476+
(() => {
477+
const state_v = $("#select_covid_hosp_state :selected").val();
478+
const state_t = $("#select_covid_hosp_state :selected").text();
479+
let title = "COVID Hospitalization: " + state_t;
480+
let issue;
481+
if ($("#radio_covid_hosp_static").is(":checked")) {
482+
issue = parseInt($("#text_covid_hosp_static").val(), 10);
483+
title += " (issued on " + issue + ")";
484+
} else {
485+
title += " (most recent issue)";
486+
}
487+
488+
Epidata.fetchCovidHosp(
489+
successFunction(title),
490+
onFailure,
491+
state_v,
492+
issue);
493+
})();
470494
} else {
471495
alert("invalid api");
472496
}
@@ -1143,6 +1167,7 @@ const loadDirectLinkFragment = () => {
11431167
'sensors': Epidata.fetchSensors,
11441168
'nowcast': Epidata.fetchNowcast,
11451169
'covidcast': Epidata.fetchCovidcast,
1170+
'covid_hosp': Epidata.fetchCovidHosp,
11461171
}[data.params[0]];
11471172
const onSuccess = (datasets) => {
11481173
const loader = successFunction(data.parentTitle);

site/js/epidata.js

Lines changed: 71 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ var Epidata = (function() {
2222
'twitter': 20111201,
2323
'wiki': 20071209,
2424
'covidcast': 20200101,
25+
'covid_hosp': 20200101,
2526
};
2627
// find the current epiweek and date
2728
var date = new Date();
@@ -36,12 +37,12 @@ var Epidata = (function() {
3637
points = [];
3738
for(row = 0; row < epidata.length; row++) {
3839
if(epidata[row].hasOwnProperty('time_value')) {
39-
const timeValue = epidata[row].time_value;
40-
if ('' + timeValue.length == 6) {
41-
epidata[row].epiweek = timeValue;
42-
} else {
43-
epidata[row].date = '' + timeValue;
44-
}
40+
const timeValue = epidata[row].time_value;
41+
if ('' + timeValue.length == 6) {
42+
epidata[row].epiweek = timeValue;
43+
} else {
44+
epidata[row].date = '' + timeValue;
45+
}
4546
}
4647
if(epidata[row].hasOwnProperty('date')) {
4748
date = EpiVis.Date.parse(epidata[row].date);
@@ -153,10 +154,70 @@ var Epidata = (function() {
153154
api.nowcast(getCallback(onSuccess, onFailure, columns, params), location, [api.range(first_epiweek.nowcast, current_epiweek)]);
154155
},
155156
fetchCovidcast: (onSuccess, onFailure, dataSource, signal, timeType, geoType, geoValue) => {
156-
const params = ['covidcast', dataSource, signal, timeType, geoType, geoValue];
157-
const columns = ['value', 'stderr', 'sample_size'];
158-
const timeValue = [api.range(first_date.covidcast, current_date)];
159-
api.covidcast(getCallback(onSuccess, onFailure, columns, params), dataSource, signal, timeType, geoType, timeValue, geoValue);
157+
const params = ['covidcast', dataSource, signal, timeType, geoType, geoValue];
158+
const columns = ['value', 'stderr', 'sample_size'];
159+
const timeValue = [api.range(first_date.covidcast, current_date)];
160+
api.covidcast(getCallback(onSuccess, onFailure, columns, params), dataSource, signal, timeType, geoType, timeValue, geoValue);
161+
},
162+
fetchCovidHosp: (onSuccess, onFailure, state, issue) => {
163+
const params = ['covid_hosp', state, issue];
164+
const columns = [
165+
'hospital_onset_covid',
166+
'hospital_onset_covid_coverage',
167+
'inpatient_beds',
168+
'inpatient_beds_coverage',
169+
'inpatient_beds_used',
170+
'inpatient_beds_used_coverage',
171+
'inpatient_beds_used_covid',
172+
'inpatient_beds_used_covid_coverage',
173+
'previous_day_admission_adult_covid_confirmed',
174+
'previous_day_admission_adult_covid_confirmed_coverage',
175+
'previous_day_admission_adult_covid_suspected',
176+
'previous_day_admission_adult_covid_suspected_coverage',
177+
'previous_day_admission_pediatric_covid_confirmed',
178+
'previous_day_admission_pediatric_covid_confirmed_coverage',
179+
'previous_day_admission_pediatric_covid_suspected',
180+
'previous_day_admission_pediatric_covid_suspected_coverage',
181+
'staffed_adult_icu_bed_occupancy',
182+
'staffed_adult_icu_bed_occupancy_coverage',
183+
'staffed_icu_adult_patients_confirmed_suspected_covid',
184+
'staffed_icu_adult_patients_confirmed_suspected_covid_coverage',
185+
'staffed_icu_adult_patients_confirmed_covid',
186+
'staffed_icu_adult_patients_confirmed_covid_coverage',
187+
'total_adult_patients_hosp_confirmed_suspected_covid',
188+
'total_adult_patients_hosp_confirmed_suspected_covid_coverage',
189+
'total_adult_patients_hosp_confirmed_covid',
190+
'total_adult_patients_hosp_confirmed_covid_coverage',
191+
'total_pediatric_patients_hosp_confirmed_suspected_covid',
192+
'total_pediatric_patients_hosp_confirmed_suspected_covid_coverage',
193+
'total_pediatric_patients_hosp_confirmed_covid',
194+
'total_pediatric_patients_hosp_confirmed_covid_coverage',
195+
'total_staffed_adult_icu_beds',
196+
'total_staffed_adult_icu_beds_coverage',
197+
'inpatient_beds_utilization',
198+
'inpatient_beds_utilization_coverage',
199+
'inpatient_beds_utilization_numerator',
200+
'inpatient_beds_utilization_denominator',
201+
'percent_of_inpatients_with_covid',
202+
'percent_of_inpatients_with_covid_coverage',
203+
'percent_of_inpatients_with_covid_numerator',
204+
'percent_of_inpatients_with_covid_denominator',
205+
'inpatient_bed_covid_utilization',
206+
'inpatient_bed_covid_utilization_coverage',
207+
'inpatient_bed_covid_utilization_numerator',
208+
'inpatient_bed_covid_utilization_denominator',
209+
'adult_icu_bed_covid_utilization',
210+
'adult_icu_bed_covid_utilization_coverage',
211+
'adult_icu_bed_covid_utilization_numerator',
212+
'adult_icu_bed_covid_utilization_denominator',
213+
'adult_icu_bed_utilization',
214+
'adult_icu_bed_utilization_coverage',
215+
'adult_icu_bed_utilization_numerator',
216+
'adult_icu_bed_utilization_denominator',
217+
];
218+
const callback = getCallback(onSuccess, onFailure, columns, params);
219+
const dates = [api.range(first_date.covid_hosp, current_date)];
220+
api.covid_hosp(callback, state, dates, issue);
160221
},
161222
};
162223
}());

site/js/epivis.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ var EpiVis = (function() {
8888
return (((year % 4) === 0) && ((year % 100) !== 0)) || ((year % 400) === 0);
8989
};
9090
Date.parse = function(str) {
91+
str = '' + str;
9192
var y, m, d;
9293
if(str.length === 8) {
9394
y = parseInt(str.substring(0, 4), 10);

0 commit comments

Comments
 (0)