Integrate Google Earth Engine(GEE), Pandas framework and Matplotlip - Spatial Data Mining

Published on Apr 04, 2020 | Bikesh Bade | 2717 Views

Google Earth Engine is designed for cloud-based, parallelized geospatial data analysis. GEE takes care of all the infrastructure and parallelization decisions on the back end for you. The GEE catalog hosts multiple petabytes of satellite imagery in the cloud, including the entire Landsat mission. Other remote sensing missions represented include Sentinel 1, Sentinel 2, MODIS and others. In addition to earth observing images, GEE also hosts produced datasets for precipitation, population density, topography, land cover and climate. Over 6000 scenes are added daily from active satellite missions. 

 

The JavaScript GUI in GEE is a fully built web platform that you make requests through to the main GEE API. But there is a way to bring the power of GEE to your Jupyter notebook and automate the system, extract useful data from petabytes of data, discover the pattern in data, visualize in multiple Matplotlib charts, analyze the data with powerful Pandas and bring data to knowledge. 

 

Set up Python API for GEE and continue following 

 

The Python API provides a programmatic and flexible interface to Earth Engine. It allows for automating batch processing tasks, piping Earth Engine processed data to Python packages for post-processing and leveraging the power of the command line.

 

The Python API package is called ee. It must also be initialized for every new session and script.

 

# import Google earth engine module
import ee

#Authenticate the Google earth engine with google account
ee.Initialize()

 

To use GEE Tools in python API, there is a python library called ipygee which helps bring tools to your Jupyter notebook. Install ipygee as PIP

 

pip install ipygee 

 

Now import ipygee and use the GEE tool to discover the pattern in petabytes of the satellite images.

 


#import module 
from ipygee import *

#Define year
startyear = 2019;
endyear = 2019;

#Create the Date object
startdate = ee.Date.fromYMD(startyear,6,1);
enddate = ee.Date.fromYMD(endyear,11,1);


#assign the modis image for the NDVI
dataset = ee.ImageCollection('MODIS/006/MOD13Q1').filterDate(startdate,enddate );
modisndvi = dataset.select('NDVI');
modisevi = dataset.select('EVI');

#Generate the GEE tool and get the data as seriesByRegion
chart_ts_region = chart.Image.seriesByRegion(**{
    'imageCollection': modisndvi,
    'reducer': ee.Reducer.median(),
    'regions': riceland,
    'band': 'NDVI',
    'seriesProperty': 'sn'
})

#convert Image data to pandas framework 
df =chart_ts_region.dataframe


In the above code, Modis NDVI pixel value is generated for the year 2019 and converted into pandas framework. Now you can perform any pandas data manipulation and analysis on the data.

 

#display the data in table 
df.head()

#get the shape of the data
df.shape

#Index or slice the data as per need
df[:5]

Next plot the data in the chart and discover the pattern in the data. Visualize the data in different charts

 

#import matplotlib
%matplotlib inline

#plot the data in desired chart
df.plot.line()
df.plot.bar()



So bring the giant in data mining in single table and discover the unseen pattern.

Responses

Rodrigo E. Principe

Thank you for using ipygee =) You as a final user, could you compare ipygee's Map vs geemap's Map? That would be a good post ;)

  • Apr 11, 2020 |

dinesh

dear i wrote this code but this not work properly, because it shows region riceland not define in ee environment and also df head, df shape also not define error comes pl guide me relevant code thank you

  • Apr 12, 2020 |

Christhian Santana Cunha

Hi, I tested it using colab and it worked perfectly. Only point is that I changed the region. The shared notebook follows. https://colab.research.google.com/drive/1e4nPl0Yj7IUqs9cfnflKcHik7EblV5ej?usp=sharing Thanks for sharing!

  • Jul 22, 2021 |

Admin

Christian Santana Cunha Thanks for sharing and really appreciate using the post.

  • Jul 23, 2021 |

Narayan Thapa

Thank you for sharing

  • Jul 26, 2021 |

Leave your comment