{"cells":[{"metadata":{},"cell_type":"markdown","source":"## INTRODUCTION\n\nCDP takes a unique view of climate change, from the perspective of both cities and corporations, incentivizing cities and corporations to become leaders in environmental transparency and action through disclosure. While this provides a good starting point for solving the global climate crisis, the CDP recognizes that there are many factors that influence both the cause and the consequency of climate change. \n\nFrom this point, the CDP presents a compelling starting point for the data analysis: looking at the overlap between climate change, social issues, global health, the economy, and the corporations, cities, and societies that underpin all of this."},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"# standard libraries\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport dask.dataframe as dd\nfrom pandas.api.types import CategoricalDtype\nfrom dask.diagnostics import ProgressBar\n\n# Input data files are available in the read-only \"../input/\" directory\n\nimport os\nimport matplotlib.pyplot as plt\nimport re\nimport json\n\n# plotting libraries\nimport seaborn as sns\n\n# geospatial libraries\nimport plotly.graph_objects as go\nimport geopandas as gpd\nimport folium\nimport plotly_express as px\n\n# set in line plotly \nfrom plotly.offline import init_notebook_mode;\ninit_notebook_mode(connected=True)\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\nprint(os.getcwd())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"# import corporate response data - climate change\ncc_df_2018 = pd.read_csv('../input/cdp-unlocking-climate-solutions/Corporations/Corporations Responses/Climate Change/2018_Full_Climate_Change_Dataset.csv')\ncc_df_2019 = pd.read_csv('../input/cdp-unlocking-climate-solutions/Corporations/Corporations Responses/Climate Change/2019_Full_Climate_Change_Dataset.csv')\ncc_df_2020 = pd.read_csv('../input/cdp-unlocking-climate-solutions/Corporations/Corporations Responses/Climate Change/2020_Full_Climate_Change_Dataset.csv')\n\n# import corproate response data - water security\nws_df_2018 = pd.read_csv('../input/cdp-unlocking-climate-solutions/Corporations/Corporations Responses/Water Security/2018_Full_Water_Security_Dataset.csv')\nws_df_2019 = pd.read_csv('../input/cdp-unlocking-climate-solutions/Corporations/Corporations Responses/Water Security/2019_Full_Water_Security_Dataset.csv')\nws_df_2019 = pd.read_csv('../input/cdp-unlocking-climate-solutions/Corporations/Corporations Responses/Water Security/2019_Full_Water_Security_Dataset.csv')\n\n# import cities response df\ncities_df_2018 = pd.read_csv(\"../input/cdp-unlocking-climate-solutions/Cities/Cities Responses/2018_Full_Cities_Dataset.csv\")\ncities_df_2019 = pd.read_csv(\"../input/cdp-unlocking-climate-solutions/Cities/Cities Responses/2019_Full_Cities_Dataset.csv\")\ncities_df_2020 = pd.read_csv(\"../input/cdp-unlocking-climate-solutions/Cities/Cities Responses/2020_Full_Cities_Dataset.csv\")\n\n# external data - import CDC social vulnerability index data - census tract level\nsvi_df = pd.read_csv(\"../input/cdp-unlocking-climate-solutions/Supplementary Data/CDC Social Vulnerability Index 2018/SVI2018_US.csv\")\n\n# cities metadata - lat,lon locations for US cities\ncities_meta_df = pd.read_csv(\"../input/cdp-unlocking-climate-solutions/Supplementary Data/Simple Maps US Cities Data/uscities.csv\")\n\n# cities metadata - CDP metadata on organisation HQ cities\ncities_cdpmeta_df = pd.read_csv(\"../input/cdp-unlocking-climate-solutions/Supplementary Data/Locations of Corporations/NA_HQ_public_data.csv\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### PROBLEM STATEMENT\n\nDevelop a methodology for calculating key performance indicators (KPIs) that relate to the *environmental and social issues* that are discussed in the CDP survey data. \n\n* How do you help cities adapt to a rapidly changing climate amidst a global pandemic, but do it in a way that is socially equitable?\n\n* What are the projects that can be invested in that will help pull cities out of a recession, mitigate climate issues, but not perpetuate racial/social inequities?\n\n* What are the practical and actionable points where city and corporate ambition join, i.e. where do cities have problems that corporations affected by those problems could solve, and vice versa?\n\n* How can we measure the intersection between environmental risks and social equity, as a contributor to resiliency?\n\n### APPROACH\n\nTo tackle these questions, we decided to look beyond the symptoms of climate change and climate health, to the wider socio-economic factors driving both the underlying causes leading to climate change, as well as the impact to those most vulnerable to inform decisions for investment in projects that have the greastest impact.\n\n**STEP 1: UNDERSTAND THE PROBLEM**\n\nBefore beginning to define a solution, we had to understand the impact of climate change.  After looking at the impact both nation wide and globally, we realised there was a common theme emerging. That was the groups of people within the population that most vulnerable to climate hazards according to global city responses."},{"metadata":{"trusted":true,"_kg_hide-output":true,"_kg_hide-input":true},"cell_type":"code","source":"# Data Cleansing and EDA of Vulnerable Populations\n\n# Remove duplicates from dataset - courtesy of cdp_starter_notebook\n\ndef list_dedupe(x):\n    \"\"\"\n    Convert list to dict and back to list to dedupe\n    \n    Parameters\n    ----------\n    x: list\n        Python list object\n        \n    Returns\n    -------\n    dictionary:\n        dictionary object with duplicates removed\n        \n    \"\"\"\n    return list(dict.fromkeys(x))","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"trusted":true},"cell_type":"code","source":"# Identify the groups of people within the population that are most vulnerable to climate hazards according to city responses.\n\n# CDP Dataset Reference: 2020_Full_Cities_Dataset, Question 2.1, Column 7 \"Please identify which vulnerable populations are affected\"\n\ncities_2_1 = cities_df_2020[cities_df_2020['Question Number'] == '2.1']\\\n    .rename(columns={'Organization': 'City'})\n\ncities_2_1_7 = cities_2_1[cities_2_1['Column Number'] == 7]\\\n    .rename(columns={'Response Answer': 'vulnerable_groups'})\n\ncities_2_1_7['Column Number'] = cities_2_1_7['Column Number'].fillna('No Response')\n\ncities_2_1_7.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"vulnerable_populations = cities_2_1_7.vulnerable_groups.value_counts()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# How can we measure the intersection between environmental risks and social equity, as a contributor to resiliency?"},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":false},"cell_type":"code","source":"# How can we measure the intersection between environmental risks and social equity, as a contributor to resiliency?\n\nvulnerable_populations = vulnerable_populations[:8]\nplt.figure(figsize=(23, 5))\nsns.barplot(vulnerable_populations.index, vulnerable_populations.values, alpha=0.8)\nplt.title('Vulnerable Populations Most Impacted by Climate Change')\nplt.ylabel('Vulnerable Populations Across All Climate Hazards')\nplt.xlabel('Vulnerable Groups')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-output":true,"_kg_hide-input":true},"cell_type":"code","source":"cities_2_1_8 = cities_2_1[cities_2_1['Column Number'] == 8]\\\n    .rename(columns={'Response Answer': 'future_frequency'})\n\ncities_2_1_9 = cities_2_1[cities_2_1['Column Number'] == 9]\\\n    .rename(columns={'Response Answer': 'future_intensity'})\n\ncities_2_1_10 = cities_2_1[cities_2_1['Column Number'] == 10]\\\n    .rename(columns={'Response Answer': 'future_magnitude'})\n\ncities_2_1_11 = cities_2_1[cities_2_1['Column Number'] == 11]\\\n    .rename(columns={'Response Answer': 'impact_intensity_timing'})\n\ncities_2_1_9.head()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"\n\nLet's correlate the vulnerable populations with the frequency, intensity, and impact of climate hazards. \n# This will allow us to do further analysis against other social factors like the global pandemic."},{"metadata":{"trusted":true,"_kg_hide-output":true,"_kg_hide-input":true},"cell_type":"code","source":"# Let's correlate the vulnerable populations with the frequency, intensity, and impact of climate hazards. \n# This will allow us to do further analysis against other social factors like the global pandemic.\n\ncities_2_1_7 = cities_2_1_7.rename(columns={'Account Number': 'account_number'})\ncities_2_1_8 = cities_2_1_8.rename(columns={'Account Number': 'account_number'})\ncities_2_1_9 = cities_2_1_9.rename(columns={'Account Number': 'account_number'})\ncities_2_1_10 = cities_2_1_10.rename(columns={'Account Number': 'account_number'})\ncities_2_1_11 = cities_2_1_11.rename(columns={'Account Number': 'account_number'})\n\ncities_2_1_7_join = cities_2_1_7[['account_number','Country', 'CDP Region', 'vulnerable_groups', 'Row Number']]\ncities_2_1_8_join = cities_2_1_8[['account_number', 'future_frequency']]\ncities_2_1_9_join = cities_2_1_9[['account_number', 'future_intensity']]\ncities_2_1_10_join = cities_2_1_10[['account_number', 'future_magnitude']]\ncities_2_1_11_join = cities_2_1_11[['account_number', 'impact_intensity_timing']]","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-output":true,"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"# Let's hone in future magnitute, as this takes into account frequency and intensity.\n\ncities_2_1_7_10 = pd.merge(left=cities_2_1_7_join, right=cities_2_1_10_join,on='account_number')\n\n\ncities_2_1_7_10['future_magnitude'] = cities_2_1_7_10['future_magnitude'].fillna('None')\n\ncities_2_1_7_10 = cities_2_1_7_10[~cities_2_1_7_10.vulnerable_groups.str.contains(\"Other\", \"None\", na=False)]\ncities_2_1_7_10 = cities_2_1_7_10[~cities_2_1_7_10.future_magnitude.str.contains(\"Other\", \"None\", na=False)]\n\ncities_2_1_7_10 = cities_2_1_7_10[:500]\n\ncities_2_1_7_10.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# Let's hone in future magnitute, as this takes into account frequency and intensity.\n\ncities_2_1_7_11 = pd.merge(left=cities_2_1_7_join, right=cities_2_1_11_join,on='account_number')\n\ncities_2_1_7_11['impact_intensity_timing'] = cities_2_1_7_11['impact_intensity_timing'].fillna('None')\n\ncities_2_1_7_11 = cities_2_1_7_11[~cities_2_1_7_11.vulnerable_groups.str.contains(\"Other\", \"None\", na=False)]\ncities_2_1_7_11 = cities_2_1_7_11[~cities_2_1_7_11.impact_intensity_timing.str.contains(\"Other\", \"None\", na=False)]\n\ncities_2_1_7_11 = cities_2_1_7_11[:500]\n\ncities_2_1_7_11.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"cities_2_1_7_10_group = cities_2_1_7_10.groupby('vulnerable_groups')['future_magnitude'].value_counts()\ncities_2_1_7_10_group = cities_2_1_7_10_group[:10]\ncities_2_1_7_10_group.head()","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"trusted":true},"cell_type":"code","source":"cities_2_1_7_10_groupdf = cities_2_1_7_10_group.to_frame()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"cities_2_1_7_10_groupdf.info()","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"trusted":true},"cell_type":"code","source":"cities_2_1_7_10_groupdf['vulnerable_groups_col'] = cities_2_1_7_10_group.index\ncities_2_1_7_10_groupdf['vulnerable_groups_col'] = cities_2_1_7_10_groupdf['vulnerable_groups_col'].fillna('None')\ncities_2_1_7_10_groupdf['future_magnitude'] = cities_2_1_7_10_groupdf['future_magnitude'].fillna('None')\ncities_2_1_7_10_groupdf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true,"_kg_hide-output":true},"cell_type":"code","source":"cities_2_1_7_10_groupdf.info()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"fig = px.bar_polar(cities_2_1_7_10, \n                   r=\"future_magnitude\", \n                   theta=\"vulnerable_groups\",\n                   color=\"future_magnitude\", \n                   template=\"plotly_dark\",\n                   color_discrete_sequence= px.colors.sequential.Plasma_r, height=600)\nfig.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-input":true},"cell_type":"code","source":"cities_2_1_7_11['impact_intensity_timing'] = cities_2_1_7_11['impact_intensity_timing'].fillna('None')\n\ncities_2_1_7_11 = cities_2_1_7_11[~cities_2_1_7_11.vulnerable_groups.str.contains(\"Other\", \"None\", na=False)]\n\nfig = px.bar_polar(cities_2_1_7_11, \n                   r=\"impact_intensity_timing\", \n                   theta=\"vulnerable_groups\",\n                   color=\"impact_intensity_timing\", \n                   template=\"plotly_dark\",\n                   color_discrete_sequence= px.colors.sequential.Plasma_r, height=600)\nfig.show()","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}