Created
September 24, 2021 02:00
-
-
Save AngbandShadow5/a5ffb48f9fdfd62a1e7b73c92b444f0a to your computer and use it in GitHub Desktop.
Codecademy Dictionary Hurricane Analysis Project
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
# names of hurricanes | |
names = ['Cuba I', 'San Felipe II Okeechobee', 'Bahamas', 'Cuba II', 'CubaBrownsville', 'Tampico', 'Labor Day', | |
'New England', 'Carol', 'Janet', 'Carla', 'Hattie', 'Beulah', 'Camille', 'Edith', 'Anita', 'David', 'Allen', | |
'Gilbert', 'Hugo', 'Andrew', 'Mitch', 'Isabel', 'Ivan', 'Emily', 'Katrina', 'Rita', 'Wilma', 'Dean', 'Felix', | |
'Matthew', 'Irma', 'Maria', 'Michael'] | |
# months of hurricanes | |
months = ['October', 'September', 'September', 'November', 'August', 'September', 'September', 'September', 'September', | |
'September', 'September', 'October', 'September', 'August', 'September', 'September', 'August', 'August', | |
'September', 'September', 'August', 'October', 'September', 'September', 'July', 'August', 'September', | |
'October', 'August', 'September', 'October', 'September', 'September', 'October'] | |
# years of hurricanes | |
years = [1924, 1928, 1932, 1932, 1933, 1933, 1935, 1938, 1953, 1955, 1961, 1961, 1967, 1969, 1971, 1977, 1979, 1980, | |
1988, 1989, 1992, 1998, 2003, 2004, 2005, 2005, 2005, 2005, 2007, 2007, 2016, 2017, 2017, 2018] | |
# maximum sustained winds (mph) of hurricanes | |
max_sustained_winds = [165, 160, 160, 175, 160, 160, 185, 160, 160, 175, 175, 160, 160, 175, 160, 175, 175, 190, 185, | |
160, 175, 180, 165, 165, 160, 175, 180, 185, 175, 175, 165, 180, 175, 160] | |
# areas affected by each hurricane | |
areas_affected = [['Central America', 'Mexico', 'Cuba', 'Florida', 'The Bahamas'], | |
['Lesser Antilles', 'The Bahamas', 'United States East Coast', 'Atlantic Canada'], | |
['The Bahamas', 'Northeastern United States'], | |
['Lesser Antilles', 'Jamaica', 'Cayman Islands', 'Cuba', 'The Bahamas', 'Bermuda'], | |
['The Bahamas', 'Cuba', 'Florida', 'Texas', 'Tamaulipas'], ['Jamaica', 'Yucatn Peninsula'], | |
['The Bahamas', 'Florida', 'Georgia', 'The Carolinas', 'Virginia'], | |
['Southeastern United States', 'Northeastern United States', 'Southwestern Quebec'], | |
['Bermuda', 'New England', 'Atlantic Canada'], ['Lesser Antilles', 'Central America'], | |
['Texas', 'Louisiana', 'Midwestern United States'], ['Central America'], | |
['The Caribbean', 'Mexico', 'Texas'], ['Cuba', 'United States Gulf Coast'], | |
['The Caribbean', 'Central America', 'Mexico', 'United States Gulf Coast'], ['Mexico'], | |
['The Caribbean', 'United States East coast'], | |
['The Caribbean', 'Yucatn Peninsula', 'Mexico', 'South Texas'], | |
['Jamaica', 'Venezuela', 'Central America', 'Hispaniola', 'Mexico'], | |
['The Caribbean', 'United States East Coast'], ['The Bahamas', 'Florida', 'United States Gulf Coast'], | |
['Central America', 'Yucatn Peninsula', 'South Florida'], | |
['Greater Antilles', 'Bahamas', 'Eastern United States', 'Ontario'], | |
['The Caribbean', 'Venezuela', 'United States Gulf Coast'], | |
['Windward Islands', 'Jamaica', 'Mexico', 'Texas'], ['Bahamas', 'United States Gulf Coast'], | |
['Cuba', 'United States Gulf Coast'], ['Greater Antilles', 'Central America', 'Florida'], | |
['The Caribbean', 'Central America'], ['Nicaragua', 'Honduras'], | |
['Antilles', 'Venezuela', 'Colombia', 'United States East Coast', 'Atlantic Canada'], | |
['Cape Verde', 'The Caribbean', 'British Virgin Islands', 'U.S. Virgin Islands', 'Cuba', 'Florida'], | |
['Lesser Antilles', 'Virgin Islands', 'Puerto Rico', 'Dominican Republic', | |
'Turks and Caicos Islands'], | |
['Central America', 'United States Gulf Coast (especially Florida Panhandle)']] | |
# damages (USD($)) of hurricanes | |
damages = ['Damages not recorded', '100M', 'Damages not recorded', '40M', '27.9M', '5M', 'Damages not recorded', '306M', | |
'2M', '65.8M', '326M', '60.3M', '208M', '1.42B', '25.4M', 'Damages not recorded', '1.54B', '1.24B', '7.1B', | |
'10B', '26.5B', '6.2B', '5.37B', '23.3B', '1.01B', '125B', '12B', '29.4B', '1.76B', '720M', '15.1B', '64.8B', | |
'91.6B', '25.1B'] | |
# deaths for each hurricane | |
deaths = [90, 4000, 16, 3103, 179, 184, 408, 682, 5, 1023, 43, 319, 688, 259, 37, 11, 2068, 269, 318, 107, 65, 19325, | |
51, 124, 17, 1836, 125, 87, 45, 133, 603, 138, 3057, 74] | |
# 1 | |
# Update Recorded Damages | |
conversion = {"M": 1000000, | |
"B": 1000000000} | |
def update_damages(damages): | |
damages_updated = [value if value == "Damages not recorded" else ( | |
float(value.strip("M")) * conversion.get("M")) if "M" in value else ( | |
float(value.strip("B")) * conversion.get("B")) for value in damages] | |
return damages_updated | |
# test function by updating damages | |
updated_damages = update_damages(damages) | |
# print(updated_damages) | |
# 2 | |
# Create a Table | |
def construct_dictionary(names, months, years, max_sustained_winds, areas_affected, updated_damages, deaths): | |
hurricanes = {} | |
for index in range(0, len(names)): | |
hurricanes[names[index]] = ({"Name": names[index], "Month": months[index], "Year": years[index], | |
"Max Sustained Wind": max_sustained_winds[index], | |
"Areas Affected": areas_affected[index], "Damage": updated_damages[index], | |
"Deaths": deaths[index]}) | |
return hurricanes | |
# Create and view the hurricanes dictionary | |
hurricanes = construct_dictionary(names, months, years, max_sustained_winds, areas_affected, updated_damages, deaths) | |
# print(hurricanes["Cuba I"]) | |
# 3 | |
# Organizing by Year | |
def organize_by_year(dictionary): | |
organized_by_year = {} | |
for hurricane in dictionary: | |
dictionary_list = [] | |
for name in dictionary: | |
if dictionary[hurricane]["Year"] == dictionary[name]["Year"]: | |
dictionary_list.append(dictionary[name]) | |
organized_by_year[dictionary[hurricane]["Year"]] = dictionary_list | |
return organized_by_year | |
# create a new dictionary of hurricanes with year and key | |
hurricanes_by_year = organize_by_year(hurricanes) | |
# print(hurricanes_by_year) | |
# print(hurricanes_by_year[1932]) | |
# 4 | |
# Counting Damaged Areas | |
def affected_area_counts(dictionary): | |
affected_areas_dictionary = {} | |
for hurricane in dictionary: | |
for index in range(0, len(dictionary[hurricane]["Areas Affected"])): | |
if dictionary[hurricane]["Areas Affected"][index] not in affected_areas_dictionary: | |
start = 1 | |
affected_areas_dictionary[dictionary[hurricane]["Areas Affected"][index]] = start | |
else: | |
num = affected_areas_dictionary.get(dictionary[hurricane]["Areas Affected"][index]) | |
num += 1 | |
affected_areas_dictionary[dictionary[hurricane]["Areas Affected"][index]] = num | |
return affected_areas_dictionary | |
# create dictionary of areas to store the number of hurricanes involved in | |
affected_areas = affected_area_counts(hurricanes) | |
# print(affected_areas) | |
# 5 | |
# Calculating Maximum Hurricane Count | |
# ***Wrote this without assuming we knew what the first element of the dictionary was*** | |
def max_hurricane_count(dictionary): | |
most_hurricanes = {} | |
most_hurricanes[list(dictionary.keys())[0]] = dictionary.get(list(dictionary.keys())[0]) | |
for name in dictionary: | |
if dictionary.get(name) > most_hurricanes.get(list(most_hurricanes.keys())[0]): | |
most_hurricanes.pop(list(most_hurricanes.keys())[0]) | |
most_hurricanes[name] = dictionary.get(name) | |
return most_hurricanes | |
# find most frequently affected area and the number of hurricanes involved in | |
# print(max_hurricane_count(affected_areas)) | |
# 6 | |
# Calculating the Deadliest Hurricane | |
def deadliest_hurricane(dictionary): | |
most_deaths = {} | |
most_deaths[list(dictionary.keys())[0]] = dictionary.get(list(dictionary.keys())[0])["Deaths"] | |
for name in dictionary: | |
if dictionary[name]["Deaths"] > most_deaths.get(list(most_deaths.keys())[0]): | |
most_deaths.pop(list(most_deaths.keys())[0]) | |
most_deaths[name] = dictionary.get(name)["Deaths"] | |
return most_deaths | |
# find highest mortality hurricane and the number of deaths | |
# print(deadliest_hurricane(hurricanes)) | |
# 7 | |
# Rating Hurricanes by Mortality | |
# ***Went with the neater looking way rather than the correct output*** | |
def mortality_rating(dictionary): | |
mortality_scale = {0: 0, 1: 100, 2: 500, 3: 1000, 4: 10000} | |
hurricanes_by_mortality = {0: [], 1: [], 2: [], 3: [], 4: [], 5: []} | |
for name in dictionary: | |
if dictionary[name]["Deaths"] == mortality_scale[0]: | |
hurricanes_by_mortality[0].append(dictionary[name]["Name"]) | |
elif dictionary[name]["Deaths"] > mortality_scale[0] and dictionary[name]["Deaths"] <= mortality_scale[1]: | |
hurricanes_by_mortality[1].append(dictionary[name]["Name"]) | |
elif dictionary[name]["Deaths"] > mortality_scale[1] and dictionary[name]["Deaths"] <= mortality_scale[2]: | |
hurricanes_by_mortality[2].append(dictionary[name]["Name"]) | |
elif dictionary[name]["Deaths"] > mortality_scale[2] and dictionary[name]["Deaths"] <= mortality_scale[3]: | |
hurricanes_by_mortality[3].append(dictionary[name]["Name"]) | |
elif dictionary[name]["Deaths"] > mortality_scale[3] and dictionary[name]["Deaths"] <= mortality_scale[4]: | |
hurricanes_by_mortality[4].append(dictionary[name]["Name"]) | |
else: | |
hurricanes_by_mortality[5].append(dictionary[name]["Name"]) | |
return hurricanes_by_mortality | |
# categorize hurricanes in new dictionary with mortality severity as key | |
hurricanes_mortality_scale = mortality_rating(hurricanes) | |
# print(hurricanes_mortality_scale) | |
# 8 Calculating Hurricane Maximum Damage | |
def greatest_damage(dictionary): | |
most_damage = {} | |
# Grabbing first key in dictionary that has a value of a number | |
for name in dictionary: | |
if type(dictionary[name]["Damage"]) == int or type(dictionary[name]["Damage"]) == float: | |
most_damage[name] = dictionary[name]["Damage"] | |
break | |
for name in dictionary: | |
if type(dictionary[name]["Damage"]) == int or type(dictionary[name]["Damage"]) == float: | |
if dictionary[name]["Damage"] > most_damage.get(list(most_damage.keys())[0]): | |
most_damage.pop(list(most_damage.keys())[0]) | |
most_damage[name] = dictionary[name]["Damage"] | |
return most_damage | |
# find highest damage inducing hurricane and its total cost | |
# print(greatest_damage(hurricanes)) | |
# 9 | |
# Rating Hurricanes by Damage | |
damage_scale = {0: 0, | |
1: 100000000, | |
2: 1000000000, | |
3: 10000000000, | |
4: 50000000000} | |
# ***Went with the neater looking way rather than the correct output*** | |
def damage_rating(dictionary): | |
hurricanes_by_damage = {0: [], 1: [], 2: [], 3: [], 4: [], 5: []} | |
for name in dictionary: | |
if dictionary[name]["Damage"] == 'Damages not recorded': | |
hurricanes_by_damage[0].append(dictionary[name]["Name"]) | |
elif dictionary[name]["Damage"] > damage_scale[0] and dictionary[name]["Damage"] <= damage_scale[1]: | |
hurricanes_by_damage[1].append(dictionary[name]["Name"]) | |
elif dictionary[name]["Damage"] > damage_scale[1] and dictionary[name]["Damage"] <= damage_scale[2]: | |
hurricanes_by_damage[2].append(dictionary[name]["Name"]) | |
elif dictionary[name]["Damage"] > damage_scale[2] and dictionary[name]["Damage"] <= damage_scale[3]: | |
hurricanes_by_damage[3].append(dictionary[name]["Name"]) | |
elif dictionary[name]["Damage"] > damage_scale[3] and dictionary[name]["Damage"] <= damage_scale[4]: | |
hurricanes_by_damage[4].append(dictionary[name]["Name"]) | |
else: | |
hurricanes_by_damage[5].append(dictionary[name]["Name"]) | |
return hurricanes_by_damage | |
# categorize hurricanes in new dictionary with damage severity as key | |
hurricanes_damage_scale = damage_rating(hurricanes) | |
print(hurricanes_damage_scale) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment