Skip to content

Instantly share code, notes, and snippets.

@AngbandShadow5
Created September 24, 2021 02:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AngbandShadow5/a5ffb48f9fdfd62a1e7b73c92b444f0a to your computer and use it in GitHub Desktop.
Save AngbandShadow5/a5ffb48f9fdfd62a1e7b73c92b444f0a to your computer and use it in GitHub Desktop.
Codecademy Dictionary Hurricane Analysis Project
# 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