Final Micro Project

The time has come to apply what you have learned throughout the course by doing a micro project.

You have two options now.

  1. Choose from our list of projects

  2. Use your own data

    • If you find our ideas terrible or you are eager to start using Python in your work, you can use your own data.
    • The only requirement is that data should be in a format that we have used in this course, preferably CSV/ASCII or netCDF file.
    • We might not be very helpful, but at least we can help you get started and/or point you to a relevant resource.

Significant Earthquakes

US Geological Survey (USGS) provides various earthquakes data on a global scale. Its Earthquake Catalog contains earthquake source parameters (e.g. hypocenters, magnitudes, phase picks and amplitudes) and other products (e.g. moment tensor solutions, macroseismic information, tectonic summaries, maps) produced by contributing seismic networks.

If you follow this link, you can search throught the catalog and filter data by the magnitude, time and geographic region. In the data/ folder, we provide an example dataset of earthquakes with magnitude >4.5 that occurred around the world throughout the last year.

So if you want to build your project on these data, some possible ideas are:

  • pandas package will be most useful to read in the data, as well as analyse them
  • Use cartopy or basemap to plot the data using longitude and latitude columns
  • Explore pandas' groupby() method, which you can use to aggregate data by time or other parameter
  • Create a histogram of earthquakes magnitude

To get you started, we provided the minimal code to load the data.


In [1]:
# import pandas as pd
# df = pd.read_csv('../data/earthquakes_2015_2016_gt45.csv', parse_dates = ['time',], index_col='time')
# df.head()

World Ocean Atlas

  • NOAA's World Ocean Atlas provides open-access gridded data of temperature, salinity and other ocean parameters in netCDF format.
  • It is a set of objectively analyzed (1$^\circ$ grid) climatological fields at standard depth levels for annual, seasonal, and monthly compositing periods. It also includes associated statistical fields of observed oceanographic profile data.

If you choose to analyse these data, we recommend that you start by:

  • downloading 5-degree data of temperature and oxygen
  • plotting the data on the global map (do not use jet/rainbow colormap!)
  • calculating an average depth profile and plotting it beside the map

Arctic Sea Ice

Data

  • In this project you are offered to use NOAA/NSIDC Climate Data Record of Passive Microwave Sea Ice Concentration.
  • In the ../data/ directory, there are 2 netCDF files seaice_conc_monthly* that correspond to September 1991 (original FTP link) and September 2012 (original FTP link).
  • If you want to download data for other months, visit the NSIDC's data portal.

Ideas for the project

  • Plot one of the time slices on a map with North Polar Stereographic projection
  • Create a figure with 3 subplots
  • Plot the 1991 sea ice concentration in the 1st subplot, 2012 sea ice in the 2nd, and the difference in the 3rd.

Getting started

For this project, we recommend that you:

  • use xarray for opening and reading the netCDF files
  • may use xarray.open_mf_dataset() to load both files at once
  • use cartopy for creating a plot with a correct map projection
  • use appropriate colormaps for the sea ice concentration and difference

To get started, copy the following cell into your Project notebook.


In [2]:
# import cartopy.crs as ccrs
# import matplotlib.pyplot as plt
# import xarray as xr
# %matplotlib inline

In [3]:
# ds = xr.open_mfdataset('../data/seaice_conc_monthly_*.nc')
## or
# ds1 = xr.open_dataset('../data/seaice_conc_monthly_nh_f08_199109_v02r00.nc')
# ds2 = xr.open_dataset('../data/seaice_conc_monthly_nh_f17_201209_v02r00.nc')

In [4]:
## Extract longitude and latitude values, then the sea ice concentration itself

In [5]:
## Code for creating a map
# fig = plt.figure()
# ax = fig.add_subplot(111, projection=ccrs.???(central_longitude=0))
# ax.coastlines(resolution='110m', linewidth=0.5)

# ax.gridlines()
# ax.set_extent([-180, 180, 40, 90], crs=ccrs.PlateCarree())

Other Data

  • In the ../data/ directory, there are several files that haven't been used in the course:
    • met_brw_insitu_1_obop_hour_2015.txt with accompanying met_brw_readme.txt - hourly meteorological observations in Barrow, Alaska (BRW)
    • plot_extent_n_v2.csv - daily total sea ice extent in the Arctic
    • north_sea_data.csv - ship observations from several cruises in the North Sea (data provided by Matt Bone)
  • You can use any of them: open, plot, calculate statistics, etc.