{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import pandas as pd\n\nimport matplotlib.pyplot as plt\n%matplotlib inline\nimport seaborn as sns\nsns.set(style=\"white\", palette=\"muted\", color_codes=True)\n\nfrom ast import literal_eval\nfrom datetime import datetime, timedelta\nimport os, random\n\n# Plotting geographical data\nimport folium\nfrom folium import plugins\nimport rasterio as rio\nimport rasterstats\nimport geopandas as gpd\nfrom shapely.geometry import Point\n\nimport warnings\nwarnings.filterwarnings('ignore')\n\n#Code borrowed from Gilles Poulain \nglobal_power_plants = pd.read_csv('../input/ds4g-environmental-insights-explorer/eie_data/gppd/gppd_120_pr.csv')\nglobal_power_plants.head(3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"relevant_cols = ['name','capacity_mw','commissioning_year','estimated_generation_gwh','owner','primary_fuel','wepp_id','.geo','gppd_idnr']\npr_plants = global_power_plants[relevant_cols]\npr_plants.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_lon_from_geo(str_):\n    dict_ = literal_eval(str_)\n    coordinates = dict_['coordinates']\n    lon = coordinates[0]\n    return lon\n\ndef get_lat_from_geo(str_):\n    dict_ = literal_eval(str_)\n    coordinates = dict_['coordinates']\n    lat = coordinates[1]\n    return lat\n\npr_plants['lon'] = pr_plants['.geo'].map(get_lon_from_geo)\npr_plants['lat'] = pr_plants['.geo'].map(get_lat_from_geo)\n\npr_plants.drop(columns=['.geo'], inplace=True)\n\ngeometry_pr_plants = [Point(x,y) for x,y in zip(pr_plants['lon'], pr_plants['lat'])]\npr_plants_gdf = gpd.GeoDataFrame(pr_plants, crs = {'init': 'epsg: 4326'}, geometry = geometry_pr_plants)\n\n# from https://www.kaggle.com/maxlenormand/simplified-emission-for-each-plant-wip\nbuffered_pr_plants = pr_plants.copy()\nbuffered_pr_plants['geometry'] = pr_plants_gdf.geometry.buffer(0.05)\n\npr_plants.head(3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_fossil = pr_plants[(pr_plants.primary_fuel == 'Oil')|(pr_plants.primary_fuel == 'Gas')]\ndf_renew = pr_plants[(pr_plants.primary_fuel == 'Hydro')|(pr_plants.primary_fuel == 'Solar')|(pr_plants.primary_fuel == 'Wind')]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_fossil","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_renew","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"sentinel_path = \"../input/ds4g-environmental-insights-explorer/eie_data/s5p_no2/\"\ns5p_files = os.listdir(sentinel_path)\ns5p_dates = [datetime.strptime(g[:16], 's5p_no2_%Y%m%d') for g in s5p_files]\n\nctr = 0 \nfor city_name in df_fossil.name:\n    ctr += 1\n    df_plant = pr_plants_gdf[pr_plants_gdf['name'] == city_name]\n\n    dates = []\n    stats = []\n    for s5p_file in s5p_files:\n        image_path = sentinel_path + s5p_file\n        date = datetime.strptime(s5p_file[:16], 's5p_no2_%Y%m%d')\n        stat = rasterstats.zonal_stats(df_plant.geometry.to_json(),\n                                       image_path,\n                                       band=2, #2: tropospheric_NO2_column_number_density\n                                       stats=['mean'])\n        stat = stat[0] # get location of pp\n        stat = stat['mean'] # retrieve stat\n        dates.append(date)\n        stats.append(stat)\n    if ctr == 1:\n        results = pd.DataFrame(index=dates, data=stats, columns=[city_name])\n    else: \n        results[city_name] = stats\nresults.plot()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"import matplotlib\nimport matplotlib.pyplot as plt\n\nfossil_results = results\n\nfig = plt.figure()\nfig = matplotlib.pyplot.gcf()\nfig.set_size_inches(7,13)\nplt.rcParams[\"axes.labelweight\"] = \"bold\"\nplt.rcParams[\"font.size\"] = 14\nplt.rcParams[\"font.weight\"] = \"bold\"\nplt.rcParams[\"figure.figsize\"] = (20,8)\nfossil_results.plot()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"ctr = 0 \nfor city_name in df_renew.name:\n    ctr += 1\n    df_plant = pr_plants_gdf[pr_plants_gdf['name'] == city_name]\n\n    dates = []\n    stats = []\n    for s5p_file in s5p_files:\n        image_path = sentinel_path + s5p_file\n        date = datetime.strptime(s5p_file[:16], 's5p_no2_%Y%m%d')\n        stat = rasterstats.zonal_stats(df_plant.geometry.to_json(),\n                                       image_path,\n                                       band=2, #2: tropospheric_NO2_column_number_density\n                                       stats=['mean'])\n        stat = stat[0] # get location of pp\n        stat = stat['mean'] # retrieve stat\n        dates.append(date)\n        stats.append(stat)\n    if ctr == 1:\n        results = pd.DataFrame(index=dates, data=stats, columns=[city_name])\n    else: \n        results[city_name] = stats","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"renewable_results = results\nrenewable_results = renewable_results.mask(renewable_results > 0.0001, 0.0001)\nrenewable_results.plot()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"(fossil_results.mean()*1000000).hist()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"(renewable_results.mean()*1000000).hist()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#Despite fossil plants having slightly higher overall mean, \n#there is no significant trend between emissions and weather season or plant type (fossil & renewable). \n#Other factors such as population size might\n#play a far greater role, making it difficult to isolate plant's emission impact ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.7.3"}},"nbformat":4,"nbformat_minor":4}