Skip to content

Instantly share code, notes, and snippets.

@shiraen
Last active June 23, 2022 06:28
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 shiraen/9c4d0a1938e12c23130a0438bd90f576 to your computer and use it in GitHub Desktop.
Save shiraen/9c4d0a1938e12c23130a0438bd90f576 to your computer and use it in GitHub Desktop.
This is how I approached the 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 updated_damages_record(damage_recorded):
updated_damages = []
for damage in damage_recorded:
if damage == "Damages not recorded":
updated_damages.append(damage)
elif damage[-1] == 'M':
updated_damages.append(float(damage.strip('M'))*conversion["M"])
elif damage[-1] == 'B':
updated_damages.append(float(damage.strip('B'))*conversion["B"])
return updated_damages
# test function by updating damages
updated_damages = updated_damages_record(damages)
print(updated_damages)
print('=========')
# 2
# Create a Table
def hurricanes_dictionary(names, months, years, max_sustained_winds, areas_affected, deaths):
dictionary = {}
for i in range(len(names)):
dictionary[names[i]] = {"Name": names[i],
"Month": months[i],
"Year": years[i],
"Max Sustained Wind": max_sustained_winds[i],
"Areas Affected": areas_affected[i],
"Damage": updated_damages[i],
"Deaths": deaths[i]}
return dictionary
# Create and view the hurricanes dictionary
hurricanes_data = hurricanes_dictionary(names, months, years, max_sustained_winds, areas_affected, deaths)
print(hurricanes_data)
print("========")
print("========")
# 3
# Organizing by Year
years_dict= []
#since I want to add each element of the seven variables into the new list, I need to assign different temp variables. If I only put one temp var in the loop, it will result in valueError since the temp variables doesn't match the count of variables that I want to zip.
for n, m, y, max, a, da, de in zip(names, months, years, max_sustained_winds, areas_affected, updated_damages, deaths):
current_cane = {'Name': n, 'Month':m, 'Year': y, 'Max_sustained_wind': max, 'Area_affected': a, 'Damage': da, 'Deaths': de}
dict = {y: current_cane}
years_dict.append(dict)
#if we only want two data (ex: year and name) we can use the dict. comprehension
# create a new dictionary of hurricanes with year and key
print(years_dict)
print('======')
# 4
# Counting Damaged Areas
def affected_areas_count(areas_affected):
areas_count={}
for areas in areas_affected:
for i in areas:
if i in areas_count:
areas_count[i] += 1
else:
areas_count[i] = 1
return areas_count
print(affected_areas_count(areas_affected))
affected_areas_count = affected_areas_count(areas_affected)
print('======')
# create dictionary of areas to store the number of hurricanes involved in
# 5-6
# Calculating Maximum Hurricane Count
# find most frequently affected area and the number of hurricanes involved in
def max_areas_affected(affected_areas_count):
max_area = ''
max_area_count = 0
for areas in affected_areas_count:
if affected_areas_count[areas] > max_area_count:
max_area = areas
max_area_count = affected_areas_count[areas]
return max_area, max_area_count
max_area, max_area_count = max_areas_affected(affected_areas_count)
print(max_area, max_area_count)
# ANS: (Central America, count = 9)
print('======')
#7 Calculating the Deadliest Hurricane
cane_death_count = {names:deaths for names, deaths in zip(names, deaths)}
print(cane_death_count)
def max_mortality_name(deaths):
max_mortality_cane = ''
max_mortality = 0
for hurricanes in cane_death_count:
if cane_death_count[hurricanes] > max_mortality:
max_mortality_cane = hurricanes
max_mortality = cane_death_count[hurricanes]
return max_mortality_cane, max_mortality
#This would iterate through the hurricanes' death count and compare it to the current no. in the max_mortality var. Ex: if the program find a death count higher than the death count of the current hurricane, it will return that key as the max_mortality cane, until the program encounters a no. higher that the current no. It will continue looking until the end of the dictionary.
# find highest mortality hurricane and the number of deaths
max_mortality_cane, max_mortality = max_mortality_name(deaths)
print(max_mortality_cane, max_mortality)
# (no. 7 Ans: Mitch, death = 19325)
print('======')
# No. 8 Rating Hurricanes by Mortality
# categorize hurricanes in new dictionary with mortality severity as key
mortality_scale = {0: 0,
1: 100,
2: 500,
3: 1000,
4: 10000}
death_count = {deaths:names for deaths, names in zip(deaths, names)}
#if zipped, only one values is appended
#if I used the hurricanes_data, all of the info was included. However, if I used the cane_death_count w/c have the name as the key and deaths as values, it results in TypeError. I only wanted to see the names added as values in the mortality_rates dict. Therefore, I decided to create a new dict. w/c have deaths:names as key:value pair. I then use this dict. as the argument in my function w/c allowed me to arrive at the result that I wanted.
def mortality(hurricanes):
mortality_rates = {0:[], 1:[], 2:[], 3:[], 4:[]}
for i in hurricanes:
if i < 100:
rate = 0
elif i >= 100 and i < 500:
rate = 1
elif i >= 500 and i < 1000:
rate = 2
elif i >= 1000 and i < 10000:
rate = 3
else:
rate = 4
mortality_rates[rate].append(death_count[i])
return mortality_rates
mortality_rates = mortality(death_count)
print(mortality_rates)
# 9 Calculating Hurricane Maximum Damage
# find highest damage inducing hurricane and its total cost
def maximum_damage_hurricane(hurricanes_data):
max_damage_cane = ''
max_damage = 0
for names in hurricanes_data:
if hurricanes_data[names]['Damage'] == "Damages not recorded":
continue
if hurricanes_data[names]['Damage'] > max_damage:
max_damage_cane = hurricanes_data[names]['Name']
max_damage = hurricanes_data[names]['Damage']
return max_damage_cane, max_damage
max_damage_cane, max_damage = maximum_damage_hurricane(hurricanes_data)
print(max_damage_cane, max_damage)
# 10
# Rating Hurricanes by Damage
damage_scale = {0: 0,
1: 100000000,
2: 1000000000,
3: 10000000000,
4: 50000000000}
# categorize hurricanes in new dictionary with damage severity as key
damages_list = {updated_damages:names for updated_damages, names in zip(updated_damages, names)}
print(damages_list)
# I noticed that there are some data that weren't included in this new dict. ('Damages not included' only include the last hurricane w/ that value)
# I tried doing the same approach as I did in no. 8 where I first created a new dict. but since there are str included, it results in error once I iterate through that dict..
# This time, I tried another approach where I used the var. hurricanes_data as the argument
def damage_severity_scale(hurricanes):
hurricanes_by_damage = {0:[],1:[],2:[],3:[],4:[], 'No record':[]}
# I added another key 'No record' so that I can append the hurricanes where: 'Damages not recorded'
for name in hurricanes:
rate = 0
damage = hurricanes[name]['Damage'] # this will look through each key:value pairs. Since value is a dict, it'll search for values w/ 'Damage' as the key.
if damage == 'Damages not recorded':
rate = 'No record'
elif damage < 100000000:
rate = 0
elif damage >= 100000000 and damage < 1000000000:
rate = 1
elif damage >= 1000000000 and damage < 10000000000:
rate = 2
elif damage >= 10000000000 and damage < 50000000000:
rate = 3
else:
rate = 4
hurricanes_by_damage[rate].append(hurricanes[name])
#through each rate in the hurricanes_by_damage dict, it will append the dict of names that matches that rate.
return hurricanes_by_damage
damage_scale = damage_severity_scale(hurricanes_data)
print(damage_scale)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment