Created
May 26, 2023 11:35
-
-
Save andrija-zikovic/d406966643d7a78b8c32b9485e5a41f0 to your computer and use it in GitHub Desktop.
CS50/seven-day-average
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import csv | |
import requests | |
def main(): | |
# Read NYTimes Covid Database | |
download = requests.get( | |
"https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-states.csv" | |
) | |
decoded_content = download.content.decode("utf-8") | |
file = decoded_content.splitlines() | |
reader = csv.DictReader(file) | |
# Construct 14 day lists of new cases for each states | |
new_cases = calculate(reader) | |
# Create a list to store selected states | |
states = [] | |
print("Choose one or more states to view average COVID cases.") | |
print("Press enter when done.\n") | |
while True: | |
state = input("State: ") | |
if state in new_cases: | |
states.append(state) | |
if len(state) == 0: | |
break | |
print(f"\nSeven-Day Averages") | |
# Print out 7-day averages for this week vs last week | |
comparative_averages(new_cases, states) | |
# TODO: Create a dictionary to store 14 most recent days of new cases by state | |
def calculate(reader): | |
new_cases = dict() | |
previus_cases = dict() | |
for row in reader: | |
state = row["state"] | |
date = row["date"] | |
cases = int(row["cases"]) | |
if state not in previus_cases: | |
previus_cases[state] = cases | |
new_cases[state] = [] | |
else: | |
new_case = cases - previus_cases[state] | |
previus_cases[state] = cases | |
if state not in new_cases: | |
new_cases[state] = [] | |
if len(new_cases[state]) >= 14: | |
new_cases[state].pop(0) | |
new_cases[state].append(new_case) | |
return new_cases | |
# TODO: Calculate and print out seven day average for given state | |
def comparative_averages(new_cases, states): | |
for state in states: | |
recent_cases = new_cases[state][7:] | |
last_week_cases = new_cases[state][:7] | |
avg_recent = round(sum(recent_cases) / 7) | |
avg_last_week = round(sum(last_week_cases) / 7) | |
diff = avg_recent - avg_last_week | |
if diff > 0: | |
msg = "an increase" | |
else: | |
msg = "a decrese" | |
try: | |
d = diff / avg_last_week | |
p = round(d * 100,2) | |
except ZeroDivisionError: | |
raise ZeroDivisionError | |
print(f"{state} had a 7-day average of {avg_recent} and {msg} of {p}%") | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment