diff --git a/03_reading_files.ipynb b/03_reading_files.ipynb index f67ad1f..831a71a 100644 --- a/03_reading_files.ipynb +++ b/03_reading_files.ipynb @@ -36,11 +36,21 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EGU 2017: Data analysis with Python and Jupyter\n", + "Preparation\n", + "Material\n", + "Downloading the material\n", + "License\n" + ] + } + ], "source": [ "with open('README.md', mode='r') as fid:\n", " for line in fid:\n", @@ -71,11 +81,21 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "EGU 2017: Data analysis with Python and Jupyter\n", + "Preparation\n", + "Material\n", + "Downloading the material\n", + "License\n" + ] + } + ], "source": [ "with open('README.md', mode='r') as fid:\n", " lines = fid.readlines()\n", @@ -95,11 +115,84 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['# EGU 2017: Data analysis with Python and Jupyter\\n',\n", + " '\\n',\n", + " 'During the [EGU 2017](http://egu2017.eu) we presented a short course introducing\\n',\n", + " 'how to do data science with Python and Jupyter. This is the material used in the\\n',\n", + " 'course. The course itself was 90 minutes. However, there is a bit more material\\n',\n", + " 'that can also be used for self-study and for finding references that go more\\n',\n", + " 'in-depth.\\n',\n", + " '\\n',\n", + " '## Preparation\\n',\n", + " '\\n',\n", + " '[Install Anaconda](https://www.continuum.io/downloads), Python 3.x\\n',\n", + " 'version. Anaconda is an open data science platform which includes Python and\\n',\n", + " 'most packages necessary for doing data science. Anaconda can be installed even\\n',\n", + " 'without root/administrator privileges.\\n',\n", + " '\\n',\n", + " '## Material\\n',\n", + " '\\n',\n", + " 'The course is made available as a series of Jupyter Notebooks. The notebooks can\\n',\n", + " 'be read directly here at Github, but you will have a better, more interactive\\n',\n", + " 'experience by downloading them and running the locally. How to do this is\\n',\n", + " 'explained [below](#downloading-the-material).\\n',\n", + " '\\n',\n", + " 'This short course is not a course in Python, the programming language. Instead\\n',\n", + " 'we aim to show you how Python has become a full-blown platform for doing data\\n',\n", + " 'science.\\n',\n", + " '\\n',\n", + " 'The following short lessons are available:\\n',\n", + " '\\n',\n", + " '+ [Anaconda](01_anaconda.ipynb)\\n',\n", + " '+ [Jupyter Notebooks](02_jupyter_notebooks.ipynb)\\n',\n", + " '+ [Reading files](03_reading_files.ipynb)\\n',\n", + " '+ [Working with JSON-data](04_working_with_json.ipynb)\\n',\n", + " '+ [Numerical data in numpy](05_numerical_data_in_numpy.ipynb)\\n',\n", + " '+ [Pandas and time series](06_pandas_and_time_series.ipynb)\\n',\n", + " '+ [Plotting data](07_plotting_data.ipynb)\\n',\n", + " '+ [Storing data](08_storing_data.ipynb)\\n',\n", + " '+ [Distributing Jupyter notebooks](09_distributing_jupyter_notebooks.ipynb)\\n',\n", + " '+ [Further resources](10_further_resources.ipynb)\\n',\n", + " '\\n',\n", + " '## Downloading the material\\n',\n", + " '\\n',\n", + " 'The notebooks can be downloaded from this github-page, by scrolling to the top,\\n',\n", + " 'click the green `Clone or download`-button and then clicking the `Download ZIP`\\n',\n", + " 'link.\\n',\n", + " '\\n',\n", + " 'After downloading the zip-file, unpack it on your computer. Then open a terminal\\n',\n", + " '(on Windows you should open a Anaconda terminal) and type\\n',\n", + " '\\n',\n", + " ' jupyter notebook\\n',\n", + " ' \\n',\n", + " 'This will start a local webserver, so the terminal will print some messages to\\n',\n", + " 'that effect. You do not need to worry about these message. Furthermore, your\\n',\n", + " 'default web browser will open up with a new window showing a file browser. You\\n',\n", + " 'can then navigate to the folder you just downloaded, and click on any of the\\n',\n", + " 'files to see the content.\\n',\n", + " '\\n',\n", + " '## License\\n',\n", + " '\\n',\n", + " '[![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/80x15.png)](http://creativecommons.org/licenses/by-sa/4.0/)\\n',\n", + " 'This work is licensed under a\\n',\n", + " '[Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/).\\n',\n", + " '\\n',\n", + " 'If you want to reuse this material, feel free to [fork](#fork-destination-box) it. If you find any\\n',\n", + " 'errors or have suggestions for improvements raising an [issue](../../issues/) or sending a\\n',\n", + " '[pull request](../../pulls/) would be very welcome. Thank you for your interest.\\n']" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "lines" ] @@ -115,11 +208,24 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['EGU 2017: Data analysis with Python and Jupyter',\n", + " 'Preparation',\n", + " 'Material',\n", + " 'Downloading the material',\n", + " 'License']" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "headlines" ] @@ -169,7 +275,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.6.2" } }, "nbformat": 4, diff --git a/04_working_with_json.ipynb b/04_working_with_json.ipynb index 98e822f..d670059 100644 --- a/04_working_with_json.ipynb +++ b/04_working_with_json.ipynb @@ -21,11 +21,29 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'glossary': {'GlossDiv': {'GlossList': {'GlossEntry': {'Abbrev': 'ISO 8879:1986',\n", + " 'Acronym': 'SGML',\n", + " 'GlossDef': {'GlossSeeAlso': ['GML', 'XML'],\n", + " 'para': 'A meta-markup language, used to create markup languages such as DocBook.'},\n", + " 'GlossSee': 'markup',\n", + " 'GlossTerm': 'Standard Generalized Markup Language',\n", + " 'ID': 'SGML',\n", + " 'SortAs': 'SGML'}},\n", + " 'title': 'S'},\n", + " 'title': 'example glossary'}}" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import json\n", "\n", @@ -53,11 +71,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wien\n", + "Oslo\n", + "London\n", + "Barcelona\n" + ] + } + ], "source": [ "# list of cities\n", "cities = ['Wien', 'Oslo', 'London', 'Barcelona']\n", @@ -67,11 +94,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Austria Wien\n", + "Norway Oslo\n", + "Portugal Lisboa\n", + "Finland Helsinki\n" + ] + } + ], "source": [ "# dict of countries with their capitals\n", "capitals = {'Austria': 'Wien', 'Norway': 'Oslo', 'Portugal': 'Lisboa', 'Finland': 'Helsinki'}\n", @@ -95,22 +131,40 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Wien'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cities[0]" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'London'" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cities[2]" ] @@ -124,11 +178,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Oslo'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "capitals['Norway']" ] @@ -142,11 +205,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Wien', 'Oslo']" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cities[0:2] # Includes the elements 0 and 1, but not 2" ] @@ -160,22 +232,40 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Wien', 'Oslo']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cities[:2]" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Oslo', 'London', 'Barcelona']" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cities[1:]" ] @@ -189,11 +279,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['Wien', 'London']" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cities[::2]" ] @@ -215,7 +314,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.6.2" } }, "nbformat": 4, diff --git a/05_numerical_data_in_numpy.ipynb b/05_numerical_data_in_numpy.ipynb index b162882..5bb578d 100644 --- a/05_numerical_data_in_numpy.ipynb +++ b/05_numerical_data_in_numpy.ipynb @@ -20,17 +20,55 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'1.13.1'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import numpy as np\n", - "np.set_printoptions(precision=3, linewidth=60, edgeitems=1)\n", + "np.set_printoptions(precision=3, linewidth=75, edgeitems=1)\n", "np.__version__" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A simple way to instantiate an array is by giving it a list or another iterable." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 5, 3])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_in_list = [1, 2, 5, 3]\n", + "data_as_np = np.array(data_in_list)\n", + "data_as_np" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -49,11 +87,22 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " 0.25 -89.75 0.022015 0.040741 -0.021861 -0.029058 -0.025845 -0.055643\r\n", + " 180.25 -89.75 0.025000 0.041008 0.021540 0.028705 0.025741 0.055648\r\n", + " 0.25 0.25 -0.045473 -0.013363 -0.029142 -0.034187 -0.026165 -0.070089\r\n", + " 180.25 0.25 0.028523 0.039553 -0.002982 -0.035883 0.024974 0.071998\r\n", + " 0.25 89.75 -0.010242 -0.028406 0.042345 -999 -0.025851 -0.070016\r\n", + " 180.25 89.75 -0.013632 -0.028131 -0.042647 -0.029206 0.025918 0.070023\r\n" + ] + } + ], "source": [ "!cat data/numpy_simple.txt" ] @@ -67,11 +116,31 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2.500e-01, -8.975e+01, 2.201e-02, 4.074e-02, -2.186e-02,\n", + " -2.906e-02, -2.584e-02, -5.564e-02],\n", + " [ 1.802e+02, -8.975e+01, 2.500e-02, 4.101e-02, 2.154e-02,\n", + " 2.871e-02, 2.574e-02, 5.565e-02],\n", + " [ 2.500e-01, 2.500e-01, -4.547e-02, -1.336e-02, -2.914e-02,\n", + " -3.419e-02, -2.617e-02, -7.009e-02],\n", + " [ 1.802e+02, 2.500e-01, 2.852e-02, 3.955e-02, -2.982e-03,\n", + " -3.588e-02, 2.497e-02, 7.200e-02],\n", + " [ 2.500e-01, 8.975e+01, -1.024e-02, -2.841e-02, 4.235e-02,\n", + " -9.990e+02, -2.585e-02, -7.002e-02],\n", + " [ 1.802e+02, 8.975e+01, -1.363e-02, -2.813e-02, -4.265e-02,\n", + " -2.921e-02, 2.592e-02, 7.002e-02]])" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "data = np.loadtxt('data/numpy_simple.txt')\n", "data" @@ -86,11 +155,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(6, 8)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "data.shape" ] @@ -111,22 +189,46 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 2.500e-01, -8.975e+01, 2.201e-02, 4.074e-02, -2.186e-02,\n", + " -2.906e-02, -2.584e-02, -5.564e-02])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "data[0] # First row (= row 0)" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2.500e-01, 2.500e-01, -4.547e-02, -1.336e-02, -2.914e-02,\n", + " -3.419e-02, -2.617e-02, -7.009e-02],\n", + " [ 1.802e+02, 2.500e-01, 2.852e-02, 3.955e-02, -2.982e-03,\n", + " -3.588e-02, 2.497e-02, 7.200e-02],\n", + " [ 2.500e-01, 8.975e+01, -1.024e-02, -2.841e-02, 4.235e-02,\n", + " -9.990e+02, -2.585e-02, -7.002e-02]])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "data[2:5] # Rows 2, 3 and 4 (3rd, 4th and 5th)" ] @@ -140,22 +242,45 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-999.0" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "data[4, 5] # Element in row 4, column 5 (5th row, 6th column)" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.25, -89.75],\n", + " [ 180.25, -89.75],\n", + " [ 0.25, 0.25],\n", + " [ 180.25, 0.25],\n", + " [ 0.25, 89.75],\n", + " [ 180.25, 89.75]])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "data[:, :2] # All rows, first two columns" ] @@ -169,26 +294,92 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-0.048, 0.047, -0.055, 0.022, 0.016, -0.017])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "data[:, 4] + data[:, 6] # Add columns 4 and 6 together" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0.946, 1.057, 0.932, 1.075, 0.932, 1.073])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "np.exp(data[:, -1]) # Exponentiate the last (-1) column" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "`numpy` also comes with summary functions like `sum`, `mean`, `std`, `var`, `median`, etc that can operate on a whole array or a given dimension (`axis`) of the data. " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-9.5223768750000009" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.mean(data) # Calculate the mean of the whole array" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 9.025e+01, 8.333e-02, 1.032e-03, 8.567e-03, -5.458e-03,\n", + " -1.665e+02, -2.047e-04, 3.202e-04])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.mean(data, axis=0) # Calculate the mean of each column (along the rows, the 0th axis)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -205,11 +396,35 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Simplified dataset based on Ocean Pole Load Tide Deformation Parameters\r\n", + "from Self-Consistent Equilibrium Model of Ocean Pole Tide (Desai, 2002)\r\n", + "Number_longitude_Grid_Points = 2\r\n", + "First_longitude_degrees = 0.25\r\n", + "Last_longitude_degrees = 180.25\r\n", + "Longitude_step_degrees = 180.0\r\n", + "Number_latitude_grid_points = 3\r\n", + "First_latitude_degrees = -89.75\r\n", + "Last_latitude_degrees = 89.75\r\n", + "Latitude_step_degrees = 90.0\r\n", + "Longitude Latitude u_r^R u_r^I u_n^R u_n^I u_e^R u_e^I \r\n", + "(degrees) (degrees) ( ) ( ) ( ) ( ) ( ) ( )\r\n", + "--------- --------- ---------- ---------- ---------- ---------- ---------- ----------\r\n", + " 0.25 -89.75 0.022015 0.040741 -0.021861 -0.029058 -0.025845 -0.055643\r\n", + " 180.25 -89.75 0.025000 0.041008 0.021540 0.028705 0.025741 0.055648\r\n", + " 0.25 0.25 -0.045473 -0.013363 -0.029142 -0.034187 -0.026165 -0.070089\r\n", + " 180.25 0.25 0.028523 0.039553 -0.002982 -0.035883 0.024974 0.071998\r\n", + " 0.25 89.75 -0.010242 -0.028406 0.042345 -999 -0.025851 -0.070016\r\n", + " 180.25 89.75 -0.013632 -0.028131 -0.042647 -0.029206 0.025918 0.070023\r\n" + ] + } + ], "source": [ "!cat data/numpy_header.txt" ] @@ -223,11 +438,24 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "ename": "ValueError", + "evalue": "could not convert string to float: b'Simplified'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdata2\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloadtxt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'data/numpy_header.txt'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/numpy/lib/npyio.py\u001b[0m in \u001b[0;36mloadtxt\u001b[0;34m(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin)\u001b[0m\n\u001b[1;32m 1022\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1023\u001b[0m \u001b[0;31m# Convert each value according to its column and store\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1024\u001b[0;31m \u001b[0mitems\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mconv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mval\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mconv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mval\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconverters\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvals\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1025\u001b[0m \u001b[0;31m# Then pack it according to the dtype's nesting\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1026\u001b[0m \u001b[0mitems\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpack_items\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpacking\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/numpy/lib/npyio.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 1022\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1023\u001b[0m \u001b[0;31m# Convert each value according to its column and store\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1024\u001b[0;31m \u001b[0mitems\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mconv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mval\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mconv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mval\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mconverters\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvals\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1025\u001b[0m \u001b[0;31m# Then pack it according to the dtype's nesting\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1026\u001b[0m \u001b[0mitems\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpack_items\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpacking\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.6/site-packages/numpy/lib/npyio.py\u001b[0m in \u001b[0;36mfloatconv\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 723\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34mb'0x'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 724\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfromhex\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0masstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 725\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 726\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 727\u001b[0m \u001b[0mtyp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtype\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: could not convert string to float: b'Simplified'" + ] + } + ], "source": [ "data2 = np.loadtxt('data/numpy_header.txt')" ] @@ -247,11 +475,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "data2 = np.loadtxt('data/numpy_header.txt', skiprows=13)\n", "np.allclose(data, data2) # Test if data and data2 contains the same elements (within a tolerance)" @@ -266,11 +503,31 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2.500e-01, -8.975e+01, 2.201e-02, 4.074e-02, -2.186e-02,\n", + " -2.906e-02, -2.584e-02, -5.564e-02],\n", + " [ 1.802e+02, -8.975e+01, 2.500e-02, 4.101e-02, 2.154e-02,\n", + " 2.871e-02, 2.574e-02, 5.565e-02],\n", + " [ 2.500e-01, 2.500e-01, -4.547e-02, -1.336e-02, -2.914e-02,\n", + " -3.419e-02, -2.617e-02, -7.009e-02],\n", + " [ 1.802e+02, 2.500e-01, 2.852e-02, 3.955e-02, -2.982e-03,\n", + " -3.588e-02, 2.497e-02, 7.200e-02],\n", + " [ 2.500e-01, 8.975e+01, -1.024e-02, -2.841e-02, 4.235e-02,\n", + " nan, -2.585e-02, -7.002e-02],\n", + " [ 1.802e+02, 8.975e+01, -1.363e-02, -2.813e-02, -4.265e-02,\n", + " -2.921e-02, 2.592e-02, 7.002e-02]])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "data3 = np.genfromtxt('data/numpy_header.txt', skip_header=13,\n", " missing_values='-999', usemask=True).filled(np.nan)\n", @@ -286,11 +543,34 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "masked_array(data =\n", + " [[0.25 -89.75 0.022015 0.040741 -0.021861 -0.029058 -0.025845 -0.055643]\n", + " [180.25 -89.75 0.025 0.041008 0.02154 0.028705 0.025741 0.055648]\n", + " [0.25 0.25 -0.045473 -0.013363 -0.029142 -0.034187 -0.026165 -0.070089]\n", + " [180.25 0.25 0.028523 0.039553 -0.002982 -0.035883 0.024974 0.071998]\n", + " [0.25 89.75 -0.010242 -0.028406 0.042345 -- -0.025851 -0.070016]\n", + " [180.25 89.75 -0.013632 -0.028131 -0.042647 -0.029206 0.025918 0.070023]],\n", + " mask =\n", + " [[False False False False False False False False]\n", + " [False False False False False False False False]\n", + " [False False False False False False False False]\n", + " [False False False False False False False False]\n", + " [False False False False False True False False]\n", + " [False False False False False False False False]],\n", + " fill_value = 1e+20)" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "np.genfromtxt('data/numpy_simple.txt', missing_values='-999', usemask=True)" ] @@ -319,7 +599,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.6.2" } }, "nbformat": 4, diff --git a/06_pandas_and_time_series.ipynb b/06_pandas_and_time_series.ipynb index ff8d6fc..96082d1 100644 --- a/06_pandas_and_time_series.ipynb +++ b/06_pandas_and_time_series.ipynb @@ -20,11 +20,20 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'0.20.3'" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import pandas as pd\n", "pd.__version__" @@ -50,22 +59,115 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Year,Make,Model,Description,Price\r\n", + "1997,Ford,E350,\"ac, abs, moon\",3000.00\r\n", + "1999,Chevy,\"Venture \"\"Extended Edition\"\"\",\"\",4900.00\r\n", + "1999,Chevy,\"Venture \"\"Extended Edition, Very Large\"\"\",,5000.00\r\n", + "1996,Jeep,Grand Cherokee,\"MUST SELL!\r\n", + "air, moon roof, loaded\",4799.00\r\n" + ] + } + ], "source": [ "!cat data/pandas_simple.csv" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 3, + "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", + "
YearMakeModelDescriptionPrice
01997FordE350ac, abs, moon3000.0
11999ChevyVenture \"Extended Edition\"NaN4900.0
21999ChevyVenture \"Extended Edition, Very Large\"NaN5000.0
31996JeepGrand CherokeeMUST SELL!\\nair, moon roof, loaded4799.0
\n", + "
" + ], + "text/plain": [ + " Year Make Model \\\n", + "0 1997 Ford E350 \n", + "1 1999 Chevy Venture \"Extended Edition\" \n", + "2 1999 Chevy Venture \"Extended Edition, Very Large\" \n", + "3 1996 Jeep Grand Cherokee \n", + "\n", + " Description Price \n", + "0 ac, abs, moon 3000.0 \n", + "1 NaN 4900.0 \n", + "2 NaN 5000.0 \n", + "3 MUST SELL!\\nair, moon roof, loaded 4799.0 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df = pd.read_csv('data/pandas_simple.csv')\n", "df" @@ -80,22 +182,48 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 1997\n", + "1 1999\n", + "2 1999\n", + "3 1996\n", + "Name: Year, dtype: int64" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df.Year" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 3000.0\n", + "1 4900.0\n", + "2 5000.0\n", + "3 4799.0\n", + "Name: Price, dtype: float64" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df['Price']" ] @@ -109,22 +237,40 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1996" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df.Year.min()" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4849.5" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df.Price.median()" ] @@ -145,34 +291,176 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 8, + "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", + "
CO2 (ppm) mauna loa, 1965-1980
Month
1965-01-01319.32
1965-02-01320.36
1965-03-01320.82
1965-04-01322.06
1965-05-01322.17
\n", + "
" + ], + "text/plain": [ + " CO2 (ppm) mauna loa, 1965-1980\n", + "Month \n", + "1965-01-01 319.32\n", + "1965-02-01 320.36\n", + "1965-03-01 320.82\n", + "1965-04-01 322.06\n", + "1965-05-01 322.17" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "co2 = pd.read_csv('data/co2-ppm-mauna-loa-19651980.csv', index_col=0, parse_dates=True)\n", + "co2 = pd.read_csv('data/co2-ppm-mauna-loa-19651980.csv',\n", + " index_col=0, parse_dates=True)\n", "co2.head()" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "328.4639583333334" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "co2['CO2 (ppm) mauna loa, 1965-1980'].mean()" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 10, + "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", + "
CO2 (ppm) mauna loa, 1965-1980
Month
1965-01-03319.32
1965-01-10319.32
1965-01-17319.32
1965-01-24319.32
1965-01-31319.32
\n", + "
" + ], + "text/plain": [ + " CO2 (ppm) mauna loa, 1965-1980\n", + "Month \n", + "1965-01-03 319.32\n", + "1965-01-10 319.32\n", + "1965-01-17 319.32\n", + "1965-01-24 319.32\n", + "1965-01-31 319.32" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "daily_co2 = co2.asfreq('1W', method='pad')\n", "daily_co2.head()" @@ -202,7 +490,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.6.2" } }, "nbformat": 4, diff --git a/07_plotting_data.ipynb b/07_plotting_data.ipynb index c447fbe..5d595a2 100644 --- a/07_plotting_data.ipynb +++ b/07_plotting_data.ipynb @@ -18,10 +18,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, + "execution_count": 1, + "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", @@ -44,10 +42,8 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, + "execution_count": 2, + "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", @@ -56,11 +52,30 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEKCAYAAAAcgp5RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXl4W2eZ9/99tFiLLcm2vFtek9jZnMRt1q4hKWmhFGhp\nC6WUspQyMFws8+PtwMAwwPCj9H370ilLGaAdWkqHKUPpFEpKlzRrmzarE8e7432RbMnaZclanveP\no6PI1pF0zrHTqM7zua5c2OccPzoy9ffcup/7/t6EUgoGg8FgLF8Ul/oGGAwGg3FxYULPYDAYyxwm\n9AwGg7HMYULPYDAYyxwm9AwGg7HMYULPYDAYyxwm9AwGg7HMYULPYDAYyxwm9AwGg7HMUV3qGwCA\nkpISWl9ff6lvg8FgMN5VnDx50k4pLc12XU4IfX19PU6cOHGpb4PBYDDeVRBChsVcx1I3DAaDscxh\nQs9gMBjLHCb0DAaDsczJiRy9EOFwGGNjYwgGg5f6VhiMdw1arRYWiwVqtfpS3wojh8hZoR8bG4PB\nYEB9fT0IIZf6dhiMnIdSCofDgbGxMTQ0NFzq22HkEDmbugkGgzCbzUzkGQyREEJgNpvZp2BGCjkr\n9ACYyDMYEmF/MwwhclroGQwG43Lh+dNjGHfNXpS1mdBnwGq14mMf+xhWrFiBtWvX4v3vfz96e3sB\nAB0dHdi1axeampqwatUq/Ou//iv4+bvPPPMMNmzYgA0bNuCqq67CmTNnBNenlGLXrl3weDwX9X3c\ncMMNcDqdF/U1lpKhoSGsX79+ydf91re+hZqaGhQUFMw7Pjw8jN27d2PDhg3YuXMnxsbGEudGRkaw\nZ88erFmzBmvXrsXQ0BAA4FOf+hQaGhqwadMmbNq0CW1tbYKv+bOf/QwrV64EIQR2uz1x3Ol04tZb\nb8WGDRuwdetWnDt3LnHukUcewbp167B+/XrcddddiVTM4OAgtm3bhlWrVuGjH/0o5ubmlupXw7jE\n9E/58LVnz+CLvzuJSDS29C9AKb3k/6688kq6kM7OzpRj7ySxWIxu376d/uIXv0gcO336ND106BAN\nBAK0sbGRvvzyy5RSSv1+P73pppvoz372M0oppW+88QadmZmhlFK6d+9eunXrVsHXePHFF+lXv/rV\ni/xOKH3yySfpD37wg4v+OkvF4OAgXbdu3ZKve/ToUToxMUHz8/PnHb/99tvpk08+SSmldN++ffQT\nn/hE4tz1119PX3nlFUoppV6vl/r9fkoppffeey/97//+76yveerUKTo4OEjr6uro9PR04vjXv/51\n+t3vfpdSSmlXVxfdtWsXpZTSsbExWl9fTwOBAKWU0jvuuIP+5je/SXz9+9//nlJK6ec//3n62GOP\nCb7mpf7bYUjnkVd7aN0/vkjr/vFF+osD/aJ/DsAJKkJjL7nI0xwV+n379tFrr71W8Nzjjz9O77nn\nnnnH+vv7qcViSbl2ZmaGVlVVCa5z11130f3791NKOXFrbm6mn/zkJ2lLSwv9yEc+khCVuro6+sAD\nD9AtW7bQLVu20L6+PkopJzZ/93d/R3fu3EkbGhrogQMH6Kc//Wm6evVqeu+99867h3TCmZ+fTx94\n4AF6xRVX0N27d9O3336bXn/99bShoYG+8MILiXu75ppraGtrK21tbaVvvPEGpZTS/fv305tvvjmx\n1t///d8nRKmuro5+5zvfoa2trXT9+vW0q6uLUkrp22+/TXfs2EE3bdpEd+zYQbu7u1PuKVnoZ2dn\n6ac+9Sm6fv16umnTJvr6669nvCcxLBT6tWvX0tHRUUop94A3GAyUUko7Ojro1VdfLbiGWKHnWSj0\n73//++nhw4cT3zc2NlKr1UrHxsaoxWKhDoeDhsNhevPNN9OXX36ZxmIxajabaTgcppRS+uabb9I9\ne/YIvtal/tthSCMWi9FdD++nd/77m/Tzvz1BV31rLx13BkT9rFihz9nyymS+95cOdE4sbXpjbZUR\n/3LLurTnz507hyuvvFLwXEdHR8q5FStWwOfzwePxwGg0Jo4/8cQTeN/73ie4zhtvvIFf/vKXie97\nenrwxBNP4Oqrr8ZnPvMZPPbYY/j6178OADAajTh27Bh++9vf4qtf/SpefPFFAFwK4PXXX8ef//xn\n3HLLLXjjjTfw+OOPY8uWLWhra8OmTZtQVFSEUCgEh8MBs9k87x78fj927tyJhx56CLfeeiu+/e1v\n49VXX0VnZyfuvfdefPCDH0RZWRleffVVaLVa9PX14a677hLlTVRSUoJTp07hsccew8MPP4zHH38c\nq1evxqFDh6BSqfDaa6/hn/7pn/Dcc8+lXePnP/85AKC9vR3d3d3Ys2cPent7Zd+TEBs3bsRzzz2H\nr3zlK3j++efh9XrhcDjQ29uLwsJC3HbbbRgcHMQNN9yAH/3oR1AqlQC4VND3v/997N69Gz/60Y+g\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "co2.plot()" ] @@ -95,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "collapsed": true }, @@ -106,11 +121,30 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.plot(co2['CO2 (ppm) mauna loa, 1965-1980'], 'r:')" ] @@ -153,7 +187,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.6.2" } }, "nbformat": 4, diff --git a/10_further_resources.ipynb b/10_further_resources.ipynb index 30efc92..86f465a 100644 --- a/10_further_resources.ipynb +++ b/10_further_resources.ipynb @@ -13,12 +13,18 @@ "source": [ "One of the great things with Python is the community around the language. In this short overview we have seen some of the most popular packages for doing data-science, but there are many more out there. A few general packages that we did not cover are:\n", "\n", - "+ [`scipy` does things like ODEs, interpolation, optimization and so on]()\n", - "+ [`xarray` is built on `pandas`, and does a better job of handling data with multiple indices]()\n", - "+ [`pint` is powerful if you do a lot of unit conversions]()\n", + "+ [The `scipy` library is a collection of mathematical algorithms and convenience functions including things like ODEs, interpolation, optimization](https://docs.scipy.org/doc/)\n", + "+ [`xarray` is built on `pandas`, and does a better job of handling data with multiple indices](http://xarray.pydata.org)\n", + "+ [`geopandas` extend `pandas`' abilities to work with geospatial data](http://geopandas.org)\n", + "+ [`pint` is powerful if you do a lot of unit conversions](https://pint.readthedocs.io/en/stable)\n", "\n", "## General introductions to Python\n", "\n", + "Python is currently among the most popular programming languages in existence, and there is a lot of support for Python online. Here are some general Python tutorials.\n", + "\n", + "+ [The Python Tutorial at _python.org_](https://docs.python.org/3/tutorial/)\n", + "+ [Automate the boring stuff with Python](https://automatetheboringstuff.com/)\n", + "+ [Lectures on scientific computing with Python](https://github.com/jrjohansson/scientific-python-lectures)\n", "\n", "## Specific tutorials\n", "\n", @@ -26,15 +32,18 @@ "\n", "+ [Mastering __Markdown__](https://guides.github.com/features/mastering-markdown/)\n", "+ [Python module of the week: `json`](https://pymotw.com/3/json/)\n", - "+ [From Python to `numpy`](http://www.labri.fr/perso/nrougier/from-python-to-numpy/)" + "+ [From Python to `numpy`](http://www.labri.fr/perso/nrougier/from-python-to-numpy/)\n", + "+ [`pandas` tutorials](http://pandas.pydata.org/pandas-docs/stable/tutorials.html)\n", + "+ [Effectively using `matplotlib`](http://pbpython.com/effective-matplotlib.html)\n", + "+ [__Jupyter Notebook__ tutorial: The definitive guide](https://www.datacamp.com/community/tutorials/tutorial-jupyter-notebook)" ] } ], "metadata": { "kernelspec": { - "display_name": "Python [conda root]", + "display_name": "Python [default]", "language": "python", - "name": "conda-root-py" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -46,7 +55,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.5.3" + "version": "3.6.2" } }, "nbformat": 4,