{ "cells": [ { "cell_type": "markdown", "id": "5680ff45", "metadata": {}, "source": [ "# `geopandas`" ] }, { "cell_type": "markdown", "id": "746e0170", "metadata": {}, "source": [ ":::{admonition} Lesson Content\n", ":class: note, dropdown\n", "\n", "- `geopandas` vs. `pandas`\n", "- spatial data operations\n", "- reprojecting to meters\n", "- filtering a geodataframe by a vector\n", "\n", ":::" ] }, { "cell_type": "markdown", "id": "0f3d9efd", "metadata": {}, "source": [ "## Context\n", "\n", "🐼➕🌐 = 🚀🎉❤️\n", "\n", "We've used `pandas` to help us get the most out of our csv and excel data. We talked yesterday about how spatial data is stored and organized. Today we combine both worlds with `geopandas`, an extenions of `pandas` specific to spatial data.\n", "\n", "Just like how we saw that converting datetime strings to Python datetime objects, converting our latitudes and longitudes to points allows us to use a world more of spatial data analysis techniques. It's so exciting!" ] }, { "cell_type": "markdown", "id": "ee7e6c8b", "metadata": {}, "source": [ "## `geopandas`\n", "\n", "GeoPandas is an extension of Pandas. GeoDataFrames have the same row, column structure with indexes that are accessed in the same way as Pandas. The difference is that they also have a `geometry` column.\n", "\n", "![Geodataframe](./images/geodataframe.png)" ] }, { "cell_type": "markdown", "id": "4649f43a", "metadata": {}, "source": [ "Let's look at an example geodataframe that comes pre-loaded on geopandas." ] }, { "cell_type": "code", "execution_count": 1, "id": "f63156ac", "metadata": {}, "outputs": [], "source": [ "import geopandas as gpd" ] }, { "cell_type": "code", "execution_count": 2, "id": "53e7cb88", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/p8/985fq4dx1356qtcv5dd4zgyr0000gn/T/ipykernel_17022/309957874.py:1: FutureWarning: The geopandas.dataset module is deprecated and will be removed in GeoPandas 1.0. You can get the original 'naturalearth_lowres' data from https://www.naturalearthdata.com/downloads/110m-cultural-vectors/.\n", " gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
pop_estcontinentnameiso_a3gdp_md_estgeometry
0889953.0OceaniaFijiFJI5496MULTIPOLYGON (((180.00000 -16.06713, 180.00000...
158005463.0AfricaTanzaniaTZA63177POLYGON ((33.90371 -0.95000, 34.07262 -1.05982...
2603253.0AfricaW. SaharaESH907POLYGON ((-8.66559 27.65643, -8.66512 27.58948...
337589262.0North AmericaCanadaCAN1736425MULTIPOLYGON (((-122.84000 49.00000, -122.9742...
4328239523.0North AmericaUnited States of AmericaUSA21433226MULTIPOLYGON (((-122.84000 49.00000, -120.0000...
.....................
1726944975.0EuropeSerbiaSRB51475POLYGON ((18.82982 45.90887, 18.82984 45.90888...
173622137.0EuropeMontenegroMNE5542POLYGON ((20.07070 42.58863, 19.80161 42.50009...
1741794248.0EuropeKosovo-997926POLYGON ((20.59025 41.85541, 20.52295 42.21787...
1751394973.0North AmericaTrinidad and TobagoTTO24269POLYGON ((-61.68000 10.76000, -61.10500 10.890...
17611062113.0AfricaS. SudanSSD11998POLYGON ((30.83385 3.50917, 29.95350 4.17370, ...
\n", "

177 rows × 6 columns

\n", "
" ], "text/plain": [ " pop_est continent name iso_a3 gdp_md_est \\\n", "0 889953.0 Oceania Fiji FJI 5496 \n", "1 58005463.0 Africa Tanzania TZA 63177 \n", "2 603253.0 Africa W. Sahara ESH 907 \n", "3 37589262.0 North America Canada CAN 1736425 \n", "4 328239523.0 North America United States of America USA 21433226 \n", ".. ... ... ... ... ... \n", "172 6944975.0 Europe Serbia SRB 51475 \n", "173 622137.0 Europe Montenegro MNE 5542 \n", "174 1794248.0 Europe Kosovo -99 7926 \n", "175 1394973.0 North America Trinidad and Tobago TTO 24269 \n", "176 11062113.0 Africa S. Sudan SSD 11998 \n", "\n", " geometry \n", "0 MULTIPOLYGON (((180.00000 -16.06713, 180.00000... \n", "1 POLYGON ((33.90371 -0.95000, 34.07262 -1.05982... \n", "2 POLYGON ((-8.66559 27.65643, -8.66512 27.58948... \n", "3 MULTIPOLYGON (((-122.84000 49.00000, -122.9742... \n", "4 MULTIPOLYGON (((-122.84000 49.00000, -120.0000... \n", ".. ... \n", "172 POLYGON ((18.82982 45.90887, 18.82984 45.90888... \n", "173 POLYGON ((20.07070 42.58863, 19.80161 42.50009... \n", "174 POLYGON ((20.59025 41.85541, 20.52295 42.21787... \n", "175 POLYGON ((-61.68000 10.76000, -61.10500 10.890... \n", "176 POLYGON ((30.83385 3.50917, 29.95350 4.17370, ... \n", "\n", "[177 rows x 6 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))" ] }, { "cell_type": "markdown", "id": "51e9d1e3", "metadata": {}, "source": [ "What is the data type of the `geometry` column? It's shapely objects! They are Polygons, like we say yesterday in the Spatial Data lecture." ] }, { "cell_type": "markdown", "id": "7309910d", "metadata": {}, "source": [ "## Converting our `pandas` dataframe to a GeoDataFrame\n", "\n", "geodataframe = pandas dataframe + geometry column of shapely objects" ] }, { "cell_type": "code", "execution_count": 3, "id": "2fa1725b", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import geopandas as gpd\n", "import numpy as np\n", "\n", "# This line shortens the output\n", "pd.set_option('display.max_rows', 10)\n", "pd.set_option('display.max_columns', 8)" ] }, { "cell_type": "markdown", "id": "d32ec86e", "metadata": {}, "source": [ "_This dataset holds data from the firex campaign. We will be using just a few columns for this lesson._" ] }, { "cell_type": "code", "execution_count": 4, "id": "282f0b84", "metadata": { "scrolled": true }, "outputs": [], "source": [ "firex_filepath = \"./data/Copy of SARP 2009 to 2020 sent to Alex with plotting.xlsx\"\n", "firex = pd.read_excel(firex_filepath, 'data')\n", "firex = firex[['Can#', 'Jday', 'Latitude', 'Longitude', 'State', 'CH4 (ppmv)',\n", " 'CO (ppbv)', 'CO2_ppm', 'OCS (MS)', 'DMS (MS)']].iloc[:4490]" ] }, { "cell_type": "code", "execution_count": 5, "id": "100befdc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Can#JdayLatitudeLongitude...CO (ppbv)CO2_ppmOCS (MS)DMS (MS)
08198202.035.000000-118.943333...-999.0-999.0518.0-888.0
17167202.035.081667-119.101000...-999.0-999.0519.0-888.0
26354202.035.170000-119.233333...-999.0-999.0495.014.0
37226202.035.346667-119.381667...-999.0-999.0505.011.9
46269202.035.438333-119.433333...-999.0-999.0487.017.4
..............................
44855090NaN29.717200-95.341600...-999.0-999.0553.04.0
44865028NaN29.717200-95.341600...-999.0-999.0528.05.5
44875017NaN29.717200-95.341600...-999.0-999.0583.08.6
44885091NaN29.717200-95.341600...-999.0-999.0534.03.9
44895046NaN29.717200-95.341600...-999.0-999.0530.09.1
\n", "

4490 rows × 10 columns

\n", "
" ], "text/plain": [ " Can# Jday Latitude Longitude ... CO (ppbv) CO2_ppm OCS (MS) \\\n", "0 8198 202.0 35.000000 -118.943333 ... -999.0 -999.0 518.0 \n", "1 7167 202.0 35.081667 -119.101000 ... -999.0 -999.0 519.0 \n", "2 6354 202.0 35.170000 -119.233333 ... -999.0 -999.0 495.0 \n", "3 7226 202.0 35.346667 -119.381667 ... -999.0 -999.0 505.0 \n", "4 6269 202.0 35.438333 -119.433333 ... -999.0 -999.0 487.0 \n", "... ... ... ... ... ... ... ... ... \n", "4485 5090 NaN 29.717200 -95.341600 ... -999.0 -999.0 553.0 \n", "4486 5028 NaN 29.717200 -95.341600 ... -999.0 -999.0 528.0 \n", "4487 5017 NaN 29.717200 -95.341600 ... -999.0 -999.0 583.0 \n", "4488 5091 NaN 29.717200 -95.341600 ... -999.0 -999.0 534.0 \n", "4489 5046 NaN 29.717200 -95.341600 ... -999.0 -999.0 530.0 \n", "\n", " DMS (MS) \n", "0 -888.0 \n", "1 -888.0 \n", "2 14.0 \n", "3 11.9 \n", "4 17.4 \n", "... ... \n", "4485 4.0 \n", "4486 5.5 \n", "4487 8.6 \n", "4488 3.9 \n", "4489 9.1 \n", "\n", "[4490 rows x 10 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "firex" ] }, { "cell_type": "code", "execution_count": 6, "id": "867f47b5", "metadata": {}, "outputs": [], "source": [ "# Drop columns where Latitude or Longitude are nan\n", "firex = firex[firex['Longitude'].notna()]\n", "# Replace both nan values with np.nan\n", "firex = firex.replace({-999: np.nan, -888: np.nan})" ] }, { "cell_type": "markdown", "id": "0d085b57", "metadata": {}, "source": [ "If you have string latitude and longitude columns (as in this dataframe) there is a function prebuilt for that common case: `gpd.points_from_xy()`" ] }, { "cell_type": "code", "execution_count": 7, "id": "0b99379c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", "[ , ,\n", " , ,\n", " , ,\n", " , ,\n", " , ,\n", " ...\n", " , ,\n", " , ,\n", " , ,\n", " , ,\n", " , ]\n", "Length: 4405, dtype: geometry" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gpd.points_from_xy(firex['Longitude'], firex['Latitude'])" ] }, { "cell_type": "code", "execution_count": 8, "id": "773341e4", "metadata": {}, "outputs": [], "source": [ "geoFIREX = gpd.GeoDataFrame(\n", " firex, geometry=gpd.points_from_xy(firex['Longitude'], firex['Latitude']), \n", " crs='epsg:4326')" ] }, { "cell_type": "code", "execution_count": 9, "id": "168688b3", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Can#JdayLatitudeLongitude...CO2_ppmOCS (MS)DMS (MS)geometry
08198202.035.000000-118.943333...NaN518.0NaNPOINT (-118.94333 35.00000)
17167202.035.081667-119.101000...NaN519.0NaNPOINT (-119.10100 35.08167)
26354202.035.170000-119.233333...NaN495.014.0POINT (-119.23333 35.17000)
37226202.035.346667-119.381667...NaN505.011.9POINT (-119.38167 35.34667)
46269202.035.438333-119.433333...NaN487.017.4POINT (-119.43333 35.43833)
..............................
44855090NaN29.717200-95.341600...NaN553.04.0POINT (-95.34160 29.71720)
44865028NaN29.717200-95.341600...NaN528.05.5POINT (-95.34160 29.71720)
44875017NaN29.717200-95.341600...NaN583.08.6POINT (-95.34160 29.71720)
44885091NaN29.717200-95.341600...NaN534.03.9POINT (-95.34160 29.71720)
44895046NaN29.717200-95.341600...NaN530.09.1POINT (-95.34160 29.71720)
\n", "

4405 rows × 11 columns

\n", "
" ], "text/plain": [ " Can# Jday Latitude Longitude ... CO2_ppm OCS (MS) DMS (MS) \\\n", "0 8198 202.0 35.000000 -118.943333 ... NaN 518.0 NaN \n", "1 7167 202.0 35.081667 -119.101000 ... NaN 519.0 NaN \n", "2 6354 202.0 35.170000 -119.233333 ... NaN 495.0 14.0 \n", "3 7226 202.0 35.346667 -119.381667 ... NaN 505.0 11.9 \n", "4 6269 202.0 35.438333 -119.433333 ... NaN 487.0 17.4 \n", "... ... ... ... ... ... ... ... ... \n", "4485 5090 NaN 29.717200 -95.341600 ... NaN 553.0 4.0 \n", "4486 5028 NaN 29.717200 -95.341600 ... NaN 528.0 5.5 \n", "4487 5017 NaN 29.717200 -95.341600 ... NaN 583.0 8.6 \n", "4488 5091 NaN 29.717200 -95.341600 ... NaN 534.0 3.9 \n", "4489 5046 NaN 29.717200 -95.341600 ... NaN 530.0 9.1 \n", "\n", " geometry \n", "0 POINT (-118.94333 35.00000) \n", "1 POINT (-119.10100 35.08167) \n", "2 POINT (-119.23333 35.17000) \n", "3 POINT (-119.38167 35.34667) \n", "4 POINT (-119.43333 35.43833) \n", "... ... \n", "4485 POINT (-95.34160 29.71720) \n", "4486 POINT (-95.34160 29.71720) \n", "4487 POINT (-95.34160 29.71720) \n", "4488 POINT (-95.34160 29.71720) \n", "4489 POINT (-95.34160 29.71720) \n", "\n", "[4405 rows x 11 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "geoFIREX" ] }, { "cell_type": "markdown", "id": "1045afe9", "metadata": {}, "source": [ ":::{admonition} 📝 Check your understanding\n", ":class: tip\n", "\n", "What is the datatype of the `geometry` column?\n", "\n", "A) integer\n", "\n", "B) datetime\n", "\n", "C) float\n", "\n", "D) shapely Point\n", "\n", "E) list\n", "\n", ":::" ] }, { "cell_type": "markdown", "id": "fc035442", "metadata": {}, "source": [ "## Spatial data operations\n", "\n", "By using `shapely` points we get the advantages of spatial operations built into our DataFrame.\n", "\n", "Example question: _How far are all of my data points from Mt. St. Helens?_" ] }, { "cell_type": "code", "execution_count": 10, "id": "c6cab6de", "metadata": {}, "outputs": [], "source": [ "from shapely.geometry import Point" ] }, { "cell_type": "code", "execution_count": 11, "id": "6c1a3f78", "metadata": {}, "outputs": [], "source": [ "mt_st_helens = Point(-122.1956, 46.1914)" ] }, { "cell_type": "code", "execution_count": 12, "id": "12d5ff02", "metadata": { "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/var/folders/p8/985fq4dx1356qtcv5dd4zgyr0000gn/T/ipykernel_17022/3190452269.py:1: UserWarning: Geometry is in a geographic CRS. Results from 'distance' are likely incorrect. Use 'GeoSeries.to_crs()' to re-project geometries to a projected CRS before this operation.\n", "\n", " geoFIREX['geometry'].distance(mt_st_helens)\n" ] }, { "data": { "text/plain": [ "0 11.654384\n", "1 11.532681\n", "2 11.412549\n", "3 11.203859\n", "4 11.102187\n", " ... \n", "4485 31.504549\n", "4486 31.504549\n", "4487 31.504549\n", "4488 31.504549\n", "4489 31.504549\n", "Length: 4405, dtype: float64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "geoFIREX['geometry'].distance(mt_st_helens)" ] }, { "cell_type": "markdown", "id": "8ef182a1", "metadata": {}, "source": [ "### Reprojecting to meters\n", "\n", "Reprojecting a GeoDataFrame is really smooth, it only takes one `.to_crs()` method. The only thing to be careful of is to make sure first that you have a crs set for your dataframe. If you don't and your points are in lat/lon then EPSG:4326 is the CRS you should give it." ] }, { "cell_type": "code", "execution_count": 13, "id": "9af06b79", "metadata": {}, "outputs": [], "source": [ "# Set the CRS, if you didn't do it when you read in the data\n", "geoFIREX = geoFIREX.set_crs(epsg=4326)" ] }, { "cell_type": "code", "execution_count": 14, "id": "db3288f1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "EPSG:4326\n" ] } ], "source": [ "print(geoFIREX.crs)" ] }, { "cell_type": "code", "execution_count": 15, "id": "4d3ac1a3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 POINT (-118.94333 35.00000)\n", "1 POINT (-119.10100 35.08167)\n", "2 POINT (-119.23333 35.17000)\n", "3 POINT (-119.38167 35.34667)\n", "4 POINT (-119.43333 35.43833)\n", " ... \n", "4485 POINT (-95.34160 29.71720)\n", "4486 POINT (-95.34160 29.71720)\n", "4487 POINT (-95.34160 29.71720)\n", "4488 POINT (-95.34160 29.71720)\n", "4489 POINT (-95.34160 29.71720)\n", "Name: geometry, Length: 4405, dtype: geometry" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "geoFIREX['geometry']" ] }, { "cell_type": "code", "execution_count": 16, "id": "e210237a", "metadata": {}, "outputs": [], "source": [ "geoFIREXprojcrs = geoFIREX.to_crs(epsg=3857)" ] }, { "cell_type": "code", "execution_count": 17, "id": "83132239", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 13879.867483\n", "1 13899.942512\n", "2 13917.606473\n", "3 13940.611137\n", "4 13949.878850\n", " ... \n", "4485 11165.245602\n", "4486 11165.245602\n", "4487 11165.245602\n", "4488 11165.245602\n", "4489 11165.245602\n", "Length: 4405, dtype: float64" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "geoFIREXprojcrs['geometry'].distance(mt_st_helens) / 1000" ] }, { "cell_type": "markdown", "id": "955a383c", "metadata": {}, "source": [ ":::{admonition} 📝 Check your understanding\n", ":class: tip\n", "\n", "Define a shapely point that represents the SARP Conference room. Calculate the distance from the SARP conference room to each point in the FIREX dataset.\n", "\n", ":::" ] }, { "cell_type": "markdown", "id": "870bfa44", "metadata": {}, "source": [ ":::{admonition} 📝 Check your understanding\n", ":class: tip\n", "\n", "Say I run the block of code `geoFIREX.to_crs(epsg=3857)` and get the following error:\n", "\n", "`ValueError: Cannot transform naive geometries. Please set a crs on the object first.`\n", "\n", "What is likely my problem?\n", "\n", ":::" ] }, { "cell_type": "markdown", "id": "16f5d095", "metadata": {}, "source": [ "## Quick Plots\n", "\n", "One great feature of the geodataframes is that they have a `.plot()` method that can be used to view the general distribution of data." ] }, { "cell_type": "code", "execution_count": 18, "id": "a51d3e39", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "geoFIREX.plot()" ] }, { "cell_type": "markdown", "id": "63da946d", "metadata": {}, "source": [ "You can use `matplotlib` arguments to begin to modify your graph." ] }, { "cell_type": "code", "execution_count": 19, "id": "d99734c9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "geoFIREX.plot(column='CO2_ppm', legend=True, vmax=480)" ] }, { "cell_type": "markdown", "id": "88ef3228", "metadata": {}, "source": [ "Another built-in method for viewing data is `.explore()`. In order to use `.explore()` the dataframe must have a CRS set. For more features with the `.explore()` method check out [the geopandas user guide](https://geopandas.org/en/stable/docs/user_guide/interactive_mapping.html). You can see the available basemaps on [the docs page](https://geopandas.org/en/stable/docs/reference/api/geopandas.GeoDataFrame.explore.html) for `.explore()` under the `tiles` argument." ] }, { "cell_type": "code", "execution_count": 20, "id": "c785a614", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Make this Notebook Trusted to load map: File -> Trust Notebook
" ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "geoFIREX.explore(tiles=\"OpenStreetMap\")\n", "# And example of using a different basemap\n", "# geoFIREX.explore(tiles=\"http://c.tile.stamen.com/watercolor/{z}/{x}/{y}.jpg\", attr=\"Stamen Watercolor\")" ] }, { "cell_type": "markdown", "id": "fb94e08f", "metadata": {}, "source": [ "## Filtering a geodataframe by a vector" ] }, { "cell_type": "markdown", "id": "c316ad59", "metadata": {}, "source": [ "Let's say we want to know how many measurements were taken within 150 km of mt. st. helens. We start with our mt. st. helens point and then we buffer it." ] }, { "cell_type": "code", "execution_count": 21, "id": "699cc374", "metadata": {}, "outputs": [], "source": [ "# convert our mt st helens 4326 point to 3857" ] }, { "cell_type": "code", "execution_count": 22, "id": "56901c91", "metadata": {}, "outputs": [], "source": [ "from pyproj import Transformer\n", "from shapely.ops import transform" ] }, { "cell_type": "code", "execution_count": 23, "id": "c9592f9e", "metadata": {}, "outputs": [], "source": [ "uc_irvine = Point(-117.835, 33.644)" ] }, { "cell_type": "code", "execution_count": 24, "id": "d4e989c3", "metadata": {}, "outputs": [], "source": [ "t = Transformer.from_crs('epsg:4326', 'epsg:3857', always_xy=True).transform\n", "uc_irvine_projcrs = transform(t, uc_irvine)" ] }, { "cell_type": "code", "execution_count": 25, "id": "d60a98dc", "metadata": {}, "outputs": [], "source": [ "# Buffer the point\n", "buff_uc_irvine = uc_irvine_projcrs.buffer(10000)" ] }, { "cell_type": "code", "execution_count": 26, "id": "2bb692db", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 False\n", "1 False\n", "2 False\n", "3 False\n", "4 False\n", " ... \n", "4485 False\n", "4486 False\n", "4487 False\n", "4488 False\n", "4489 False\n", "Length: 4405, dtype: bool" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "geoFIREXprojcrs['geometry'].intersects(buff_uc_irvine)" ] }, { "cell_type": "code", "execution_count": 27, "id": "31bc9a1e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Can#JdayLatitudeLongitude...CO2_ppmOCS (MS)DMS (MS)geometry
17799068174.033.667200-117.847000...409.0570.0NaNPOINT (-117.84700 33.66720)
22066343177.033.615195-117.784866...414.0593.00.5POINT (-117.78487 33.61519)
22349309177.033.640604-117.806361...419.0572.0NaNPOINT (-117.80636 33.64060)
\n", "

3 rows × 11 columns

\n", "
" ], "text/plain": [ " Can# Jday Latitude Longitude ... CO2_ppm OCS (MS) DMS (MS) \\\n", "1779 9068 174.0 33.667200 -117.847000 ... 409.0 570.0 NaN \n", "2206 6343 177.0 33.615195 -117.784866 ... 414.0 593.0 0.5 \n", "2234 9309 177.0 33.640604 -117.806361 ... 419.0 572.0 NaN \n", "\n", " geometry \n", "1779 POINT (-117.84700 33.66720) \n", "2206 POINT (-117.78487 33.61519) \n", "2234 POINT (-117.80636 33.64060) \n", "\n", "[3 rows x 11 columns]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Notice that we indexed one dataframe by a different dataframe\n", "geoFIREX[geoFIREXprojcrs['geometry'].intersects(buff_uc_irvine)]" ] }, { "cell_type": "markdown", "id": "843028f1", "metadata": {}, "source": [ ":::{admonition} 📝 Check your understanding\n", ":class: tip\n", "\n", "What is the following code doing?\n", "\n", "```\n", "palmdale = Point(-118.075, 34.61)\n", "t = Transformer.from_crs('epsg:4326', 'epsg:3857', always_xy=True).transform\n", "palmdale_projcrs = transform(t, palmdale)\n", "```\n", "\n", "A) Converting a DataFrame called `palmdale` into a projected CRS\n", "\n", "B) Converting a DataFrame called `palmdale` into a geographic CRS\n", "\n", "C) Converting a Point called `palmdale` into a projected CRS\n", "\n", "D) Converting a Point called `palmdale` into a geographic CRS\n", "\n", "E) Intersecting the `palmdale` objet with the object `t`\n", "\n", ":::" ] }, { "cell_type": "markdown", "id": "bb3438f7", "metadata": {}, "source": [ ":::{admonition} 📝 Check your understanding\n", ":class: tip\n", "\n", "I want to buffer the mt_st_helens point by 10000m. What is the problem with the following code I've written below to do that?\n", "\n", "`Point(-122.1956, 46.1914).buffer(10000)`\n", "\n", ":::" ] }, { "cell_type": "code", "execution_count": null, "id": "8b17bb1e", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.12" }, "vscode": { "interpreter": { "hash": "c6a7549e0a21eb75b694ff081490f6e8db8aea94086d29d6a7e085c556b251de" } } }, "nbformat": 4, "nbformat_minor": 5 }