Skip to content

Instantly share code, notes, and snippets.

@ergrc
Created January 18, 2021 21:49
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 ergrc/c04f9e8600c4e5e0b969b6f2a5f59d85 to your computer and use it in GitHub Desktop.
Save ergrc/c04f9e8600c4e5e0b969b6f2a5f59d85 to your computer and use it in GitHub Desktop.
codecademy_hurricanes_dictionary_project
import collections
from collections import defaultdict
import pandas as pd
import operator
# 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]
#Write a function that returns a new list of updated damages where the recorded data is converted
#to float values and the missing data is retained as "Damages not recorded".
#Test your function with the data stored in damages.
damage_millions = []
def damage_float(recorded):
for x in recorded:
if "M" in x:
new_m = x.strip("M")
new_m_float = float(new_m)
damage_millions.append(new_m_float*1000000)
elif "B" in x:
new_b = x.strip("B")
new_b_float = float(new_b)
damage_millions.append(new_b_float*1000000000)
else:
damage_millions.append(x)
damage_float(damages)
print(damage_millions)
#combine datasets into single dictionary that stores by hurricane name as the key and data as values
def create_name_dict(hurricane_names):
i=0
hurricane_dict_build = {}
for name in hurricane_names:
hurricane_dict_build[name] = {"Name":names[i],"Month":months[i],"Year":years[i],"Max Sustained Wind":max_sustained_winds[i],"Areas Affected":areas_affected[i],"Damage":damage_millions[i],"Death":deaths[i]}
i += 1
return(hurricane_dict_build)
hurricanes = create_name_dict(names)
# Test Print
#print(hurricane_dict["Cuba I"])
#combine datasets into single dictionary that stores year as the key and hurricane(s) data as values
def create_year_dict(hurricane_dictionary):
h_year_dict = {}
for value in hurricane_dictionary.values():
current_year = value["Year"]
current_canes = []
if current_year in h_year_dict:
temp_pop = h_year_dict.pop(current_year)
current_canes.append(value)
current_canes.append(temp_pop)
h_year_dict[current_year] = current_canes
if current_year not in h_year_dict:
current_canes.append(value)
h_year_dict[current_year] = current_canes
return h_year_dict
year_dictionary = create_year_dict(hurricanes)
print(year_dictionary)
# create a dictionary with the areas affected as the key and the count of how many times it has been affected from all hurricanes
def areas_affected_dict(hurricane_dictionary):
location_dict = {}
for value in hurricane_dictionary.values():
affected_areas = value["Areas Affected"]
for location in affected_areas:
if location in location_dict:
temp_pop = location_dict.pop(location)
location_dict[location] = temp_pop + 1
if location not in location_dict:
location_dict[location] = 1
return location_dict
areas_affected_dictionary = areas_affected_dict(hurricanes)
# Test Print
#print(areas_affected_dict(hurricanes))
# find the area affected by the most hurricanes
def sort_value_max(dictionary):
new_dict = {k: v for k, v in sorted(dictionary.items(), key=lambda item: item[1],reverse=True)}
most_affected = max(new_dict.items(), key=operator.itemgetter(1))[0]
print("The most affected area by Atlantic hurricanes in the last 100 years is {} with {} hurricanes.".format(most_affected,new_dict.get(most_affected)))
sort_value_max(areas_affected_dictionary)
# Write a function that finds the hurricane that caused the greatest number of deaths, and how many deaths it caused.
def most_deaths(hurricane_dictionary):
death_dict = {}
for key,value in hurricane_dictionary.items():
death_values = value["Death"]
death_dict[key] = death_values
new_dict = {k: v for k, v in sorted(death_dict.items(), key=lambda item: item[1],reverse=True)}
most_dead = max(death_dict.items(), key=operator.itemgetter(1))[0]
print("The deadliest Atlantic hurricane is hurricane {} which left {} dead in {}.".format(most_dead,death_dict.get(most_dead),hurricane_dictionary.get(most_dead).get("Year")))
most_deaths(hurricanes)
# Assign hurricane names to a mortality scale
mortality_scale = {0:0,1:100,2:500,3:1000,4:10000,5:50000}
def mortality_assign(hurricane_dictionary):
mortality_dict = defaultdict(list)
for key, value in hurricane_dictionary.items():
death_values = value["Death"]
temp_list = []
for k,v in mortality_scale.items():
if death_values < v:
temp_list.append(k)
rating = min(temp_list)
mortality_dict[rating].append(key)
return mortality_dict
#print(mortality_assign(hurricanes))
# Write a function that finds the hurricane that caused the greatest damage, and how costly it was.
def most_cost(hurricane_dictionary):
cost_dict = {}
for key,value in hurricane_dictionary.items():
cost_values = value["Damage"]
if cost_values == "Damages not recorded":
continue
cost_dict[key] = cost_values
new_dict = {k: v for k, v in sorted(cost_dict.items(), key=lambda item: item[1],reverse=True)}
most_costly = max(cost_dict.items(), key=operator.itemgetter(1))[0]
print("The most costly Atlantic hurricane is hurricane {} which left ${} in damages in the year {}.".format(most_costly,int(cost_dict.get(most_costly)),hurricane_dictionary.get(most_costly).get("Year")))
most_cost(hurricanes)
# Assign hurricane names to a damage scale
damage_scale = {0: 0, 1: 100000000, 2: 1000000000, 3: 10000000000, 4: 50000000000, 5:500000000000}
def damage_assign(hurricane_dictionary):
damage_dict = defaultdict(list)
for key, value in hurricane_dictionary.items():
cost_values = value["Damage"]
if cost_values == "Damages not recorded":
continue
temp_list = []
for k,v in damage_scale.items():
if cost_values < v:
temp_list.append(k)
rating = min(temp_list)
damage_dict[rating].append(key)
return damage_dict
damage_category = damage_assign(hurricanes)
#print(damage_assign(hurricanes))
print("Three hurricanes have cost over $50 billion dollars in damages. {}, {}, and {}.".format(damage_category[5][0],damage_category[5][1],damage_category[5][2]))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment