Created
January 18, 2021 21:49
-
-
Save ergrc/c04f9e8600c4e5e0b969b6f2a5f59d85 to your computer and use it in GitHub Desktop.
codecademy_hurricanes_dictionary_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
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