diff --git a/README.md b/README.md index a97a621..b58f9c9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Introduction to Scientific Computing course +# Introduction to Scientific Computing course This repository holds teaching materials for the NCAS Introduction to Scientific Computing course. ## Overview @@ -12,14 +12,11 @@ The course covers: - [Presentation](https://github.com/ncasuk/ncas-isc/tree/main/version_control) - [Exercise](https://github.com/ncasuk/ncas-isc/tree/main/version_control) - Introduction to Python - - [Python Introduction Slides](https://github.com/ncasuk/ncas-isc/blob/main/python-intro/presentations.md) + - [Python Introduction Slides](https://github.com/ncasuk/ncas-isc/blob/main/python-intro/README.md) - [Exercises - Jupyter Notebooks](https://github.com/ncasuk/ncas-isc/tree/main/python-intro/exercises) | [Solutions](https://github.com/ncasuk/ncas-isc/tree/main/python-intro/solutions) - Data manipulation and visualisation in Python (Working with Data) - - [Python working with data Slides](https://github.com/ncasuk/ncas-isc/tree/main/python-data/slides) - - [Exercises - Jupyter Notebooks](https://github.com/ncasuk/ncas-isc/tree/main/python-data/notebooks) | [Solutions](https://github.com/ncasuk/ncas-isc/tree/main/python-data/solutions) -- Example code for all python modules - - [Example code for Python (Working with Data)](https://github.com/ncasuk/ncas-isc/tree/main/python-data/example_code) - - [Example data for Python (Working with Data)](https://github.com/ncasuk/ncas-isc/tree/main/python-data/example_data) + - [Python working with data Slides](https://github.com/ncasuk/ncas-isc/tree/main/python-data/README.md) + - [Exercises - Jupyter Notebooks](https://github.com/ncasuk/ncas-isc/tree/main/python-data/exercises) | [Solutions](https://github.com/ncasuk/ncas-isc/tree/main/python-data/solutions) ## Index ### Overview Presentations @@ -57,9 +54,11 @@ The course covers: ## Python - Working with Data -### Handling arrays -* [Numpy](https://github.com/ncasuk/ncas-isc/blob/main/python-data/slides/numpy.pdf) -* [Exercises](https://github.com/ncasuk/ncas-isc/blob/main/python-data/notebooks/ex01_numpy_arrays.ipynb) and [Solutions](https://github.com/ncasuk/ncas-isc/blob/main/python-data/solutions/ex01_numpy_arrays_solutions.ipynb) +### xarray +| Lesson | Exercise | Solution | +| ------ | -------- | -------- | +| [Intro to multidimensional arrays](https://geohackweek.github.io/nDarrays/01-introduction/), [xarray](https://geohackweek.github.io/nDarrays/02-xarray-architecture/) and [indexing](https://geohackweek.github.io/nDarrays/03-label-based-indexing/) | [Exercise 01]() | [Solution 01]() | + ### Visualisation * [Matplotlib and cartopy](https://github.com/ncasuk/ncas-isc/blob/main/python-data/slides/matplotlib_and_cartopy.pdf) diff --git a/python-data/solutions/ex01_xarray_intro.ipynb b/python-data/solutions/ex01_xarray_intro.ipynb index 755e621..d4dd27f 100644 --- a/python-data/solutions/ex01_xarray_intro.ipynb +++ b/python-data/solutions/ex01_xarray_intro.ipynb @@ -72,7 +72,7 @@ "id": "48d19019-2546-46d3-9da1-64d8e7c363e8", "metadata": {}, "source": [ - "1. Open the test dataset '' and load it into an xarray `Dataset` called `ds`.\n", + "1. Open the `'../data/tas_rcp45_2055_mon_avg_change.nc'` dataset and load it into an xarray `Dataset` called `ds`.\n", "(Hint: Don't forget to import any packages you need)" ] }, @@ -574,7 +574,7 @@ "id": "3cee6429-dbf8-4a10-b384-ad9de719a0d0", "metadata": {}, "source": [ - "What are the dimensions and variables in this dataset? What does each represent? " + "3. What are the dimensions and variables in this dataset? What does each represent? " ] }, { @@ -593,7 +593,7 @@ "id": "81207a17-eeaf-4de3-a3f6-9a0fd782c252", "metadata": {}, "source": [ - "3. Find the name of the Data Variable, and use it to extract a `DataArray` called `temperature`." + "4. Find the name of the Data Variable, and use it to extract a `DataArray` called `temperature`." ] }, { @@ -612,7 +612,7 @@ "id": "6ee4a984-305e-44da-87ab-75cf88d71f22", "metadata": {}, "source": [ - "4. Take a look at the `temperature` data array and inspect its dimensions, coordinates and attributes. What are the specific dimensions and coordinates associated with it? What metadata (attributes) is provided?" + "5. Take a look at the `temperature` data array and inspect its dimensions, coordinates and attributes. What are the specific dimensions and coordinates associated with it? What metadata (attributes) is provided?" ] }, { @@ -1083,7 +1083,7 @@ "id": "f3e16f51-8a98-424a-b908-87360947f69a", "metadata": {}, "source": [ - "5. Select a subset of the `temperature` array using label-based indexing to get data at the position [0,0,0]." + "6. Select a subset of the `temperature` array using label-based indexing to get data at the position [0,0,0]." ] }, { @@ -1507,7 +1507,7 @@ "id": "2545ea6f-ad6c-4612-86c4-95cc9d23ffdb", "metadata": {}, "source": [ - "6. Use `.loc` to find the lat and lon values at the time `2065-01-30`. " + "7. Use `.loc` to find the lat and lon values at the time `2065-01-30`. " ] }, { @@ -1955,7 +1955,7 @@ "id": "61407fc5-2ff3-4467-875d-f3e3b06eaa34", "metadata": {}, "source": [ - "6. It's not ideal to have to keep track of which dimension is in which position. Instead, use `.isel` to use the dimension names to get the data in the first time, lat and lon position." + "8. It's not ideal to have to keep track of which dimension is in which position. Instead, use `.isel` to use the dimension names to get the data in the first time, lat and lon position." ] }, { @@ -2379,7 +2379,7 @@ "id": "0f6f10a7-0905-42ec-9bf4-b3cf07229637", "metadata": {}, "source": [ - "8. The previous method is still referring to a selection by integer position. Use `.sel` to give a labelled index with the named dimension to find the data at `time=2065-12-30`, `lat=-78.5`, `lon=11.0`." + "9. The previous method is still referring to a selection by integer position. Use `.sel` to give a labelled index with the named dimension to find the data at `time=2065-12-30`, `lat=-78.5`, `lon=11.0`." ] }, { diff --git a/python-data/solutions/ex02_plotting_and_aggregation.ipynb b/python-data/solutions/ex02_plotting_and_aggregation.ipynb index ec2094d..49e6c1f 100644 --- a/python-data/solutions/ex02_plotting_and_aggregation.ipynb +++ b/python-data/solutions/ex02_plotting_and_aggregation.ipynb @@ -16,10 +16,564 @@ "## Plotting" ] }, + { + "cell_type": "markdown", + "id": "dc7d1b36-cc80-44a4-9adf-5f02901b28f6", + "metadata": {}, + "source": [ + "1. Import the `'../data/tas_rcp45_2055_mon_avg_change.nc'` dataset and create the temperature data array as in the last lesson." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e129c00a-5a55-47a1-8df1-5e1ce8b28c53", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
<xarray.DataArray 'tas' (time: 12, lat: 180, lon: 360)> Size: 3MB\n", + "[777600 values with dtype=float32]\n", + "Coordinates:\n", + " * lon (lon) float64 3kB 0.0 1.0 2.0 3.0 4.0 ... 356.0 357.0 358.0 359.0\n", + " * lat (lat) float64 1kB -89.5 -88.5 -87.5 -86.5 ... 86.5 87.5 88.5 89.5\n", + " * time (time) object 96B 2065-01-30 12:00:00 ... 2065-12-30 12:00:00\n", + "Attributes:\n", + " standard_name: air_temperature\n", + " long_name: Near-Surface Air Temperature\n", + " units: K\n", + " comment: daily-mean near-surface (usually, 2 meter) air tempera...\n", + " original_name: mo: m01s03i236\n", + " cell_methods: time: mean\n", + " history: 2010-10-29T11:35:40Z altered by CMOR: Treated scalar d...\n", + " associated_files: baseURL: http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation...