{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Sagan 2020: Python Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a brief overview of the Jupyter notebook interface and the Python3 language. The functionality demonstrated here is quite basic and should be familiar to you. If you are struggling with any of these items, please follow the linked tutorials for more information, and/or follow up in the workshop Slack channel." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Jupyter Overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each entry in a Jupyter notebook is called a cell. \n", "\n", "You can run the contents of individual cells by selecting them and pressing **CTRL-Enter** (or **Shift-Enter** on a Mac).\n", "\n", "You can run the contents of individual cells AND add a new cell underneath by pressing **ALT-Enter** (or **Option-Enter** on a Mac).\n", "\n", "You can delete a cell by selecting it and pressing **d** twice.\n", "\n", "You can add a text block like this cell by pressing **Esc-m** (or use the dropdown at the top and change from Code to Markdown). This is useful for adding in notes that you want to remember.\n", "\n", "You can find more information on Jupyter notebooks here: \n", "https://jupyter-notebook.readthedocs.io/en/stable/\n", "\n", "As you work through the sections below, run each cell to see the results.\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Python Overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The core python programming language provides a small number of built-in functions. You can see a description of them here: https://docs.python.org/3/library/functions.html . Most of the high-level functions you will want for numerical data analysis are not built-in. You access these by importing *packages*. \n", "\n", "The Anaconda distribution you installed included a large library of packages, but in order to use them you need to first import them into your current programing environment.\n", "\n", "You can import an entire package like this:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import astropy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This gives you access to the *astropy* package, which provides numerous astronomical utilities. There are sub-packages within *astropy*, such as *constants*, which contains useful astronomical constants. You import the subpackage like this:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Name = Speed of light in vacuum\n", " Value = 299792458.0\n", " Uncertainty = 0.0\n", " Unit = m / s\n", " Reference = CODATA 2014\n", "299792458.0\n" ] } ], "source": [ "import astropy.constants\n", "c = astropy.constants.c #Retrieve the speed of light, and store in variable 'c'\n", "print(c) #Print a variable using the print object\n", "print(c.value) #Get just the value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You will frequently see someone do imports like this:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from datetime import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This says *from the datetime package, import everything directly into the current environment.* **This is very bad, and you should not do it.** If two different packages have functions in them that are named the same, and if you import both of them like this, then they will overwrite each other and your code will be confusing. \n", "\n", "*There are a few exceptions to this rule, but you will likely not encounter them in this workshop.*\n", "\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Mathematics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To calculate things we need to import a mathematical package. *numpy* is the standard." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that I am both importing the 'numpy' package, and changing its name (in this session) to 'np'. This is because I am lazy and typing 'np' is faster than typing 'numpy'. (np is also the canonical abbreviation for numpy, and is what you will see in almost all online tutorials.)\n", "\n", "You can find the documentation on the numpy package here: [https://numpy.org/devdocs/reference/index.html](https://numpy.org/devdocs/reference/index.html) . I found this by searching for 'numpy manual'.\n", "\n", "Numpy allows you to create vector and matrix arrays:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v = np.array([1,2,3,4])\n", "v" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that I did not use print(v). Instead I asked python to give me information about the object itself. It tells me that it is *type* array, and has elements [1, 2, 3, 4]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 2 3 4]\n" ] } ], "source": [ "print(v)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Print just shows the contents (as a python list).\n", "\n", "Now make a bigger array:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "v = np.arange(0,10000,1) #This arange call creates a long array from 0 to 10000 with step size = 1" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0, 1, 2, ..., 9997, 9998, 9999])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that python doesn't display the entire array, only the beginning and end.\n", "\n", "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Uniform Distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's use numpy to generate a uniform set of 100 random numbers from -10 to 10" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "samples = np.random.uniform(-10,10,100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's examine those samples:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 2.63781862 0.86063598 -1.88745636 6.7147289 -9.12525893 2.35907358\n", " -3.00063273 -6.04347342 5.83474723 9.27988138 5.21427148 -0.6442014\n", " -6.00675335 0.11148202 -7.35116533 8.4097447 8.81774668 2.87126134\n", " -4.50363081 -3.74912127 -6.32753074 -2.23652499 3.34880466 -6.28131757\n", " 1.07192016 4.80567687 1.90609829 0.46704396 0.52071202 2.92681156\n", " 2.01257686 3.83776863 -5.81175492 -1.28601643 -7.50050052 3.57829466\n", " -0.81811899 -9.47628633 -5.82451086 -7.73421009 -7.57495481 -2.38421499\n", " -5.16967593 6.73106699 0.18648938 -2.93963042 -8.75835466 4.50331816\n", " -7.60162745 -0.1459412 -4.10564979 8.64750158 -8.81957247 5.64268331\n", " -8.16179188 3.53340838 2.20299483 -8.94016824 -7.25821202 8.84234342\n", " 0.51549915 -6.07523159 -6.81028142 -8.34091069 6.547428 6.91971674\n", " -4.89265694 7.21408641 -8.11548152 -8.25617521 -0.18475636 -3.52180417\n", " -6.04489938 4.06440391 3.3675582 -7.47972838 6.83738935 -3.80050618\n", " 1.10642165 4.30795846 -5.20965377 2.68744651 -0.02726845 7.94760136\n", " -4.39067086 -7.09457958 -5.32829454 8.04851677 0.21831475 4.3188892\n", " 9.48269771 -1.7232098 2.85934262 -4.84827442 -1.93293992 -3.47165077\n", " 6.43642274 3.14667705 9.67503316 0.89812918]\n" ] } ], "source": [ "print(samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Create a histogram of those samples, with one bin per integer value:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "bins = np.linspace(-10,10,21)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-10. -9. -8. -7. -6. -5. -4. -3. -2. -1. 0. 1. 2. 3.\n", " 4. 5. 6. 7. 8. 9. 10.]\n" ] } ], "source": [ "print(bins)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "histogram, bins = np.histogram(samples, bins=bins)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2 7 8 7 5 5 5 3 4 5 8 3 8 6 5 3 6 2 5 3]\n" ] } ], "source": [ "print(histogram)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Why did we use linspace instead of array? Read the documentation on numpy.linspace" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can use the matplotlib package to plot this distribution. First import it, and configure it to draw within the python notebook" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*%matplotlib inline* is known as a \"magic\" function. It tells matplotlib to show plots in line in the notebook interface." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We want the plot to show bin centers halfway between the edge of each bin" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "bin_centers = 0.5*(bins[1:]+bins[:-1])" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-9.5 -8.5 -7.5 -6.5 -5.5 -4.5 -3.5 -2.5 -1.5 -0.5 0.5 1.5 2.5 3.5\n", " 4.5 5.5 6.5 7.5 8.5 9.5]\n" ] } ], "source": [ "print(bin_centers)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now setup the plot." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10,6))\n", "plt.plot()\n", "plt.plot(bin_centers, histogram)\n", "plt.ylim(0,np.max(histogram*1.2))\n", "plt.xlabel('Value')\n", "plt.ylabel('Frequency (N)')\n", "plt.title('Uniform Distribution')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "That doesn't look very uniform. What happens if we increase the number of points? Change the size of the sample in the original np.random.uniform call and re-run the notebook steps." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When plotting histograms, it is useful for the plot to not play 'connect-the-dots'. Rather, we want *step* style plots." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10,4))\n", "plt.plot()\n", "plt.step(bin_centers, histogram)\n", "plt.ylim(0,np.max(histogram*1.2))\n", "plt.xlabel('Value')\n", "plt.ylabel('Frequency (N)')\n", "plt.title('Uniform Distribution')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gaussian Distribution" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now change from a uniform distribution to a normal (or Gaussian) distribution" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "samples = np.random.normal(0,2.5,100000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the function parameters for 'normal' are different than for uniform. Use the numpy manual to figure out what they are." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-0.64934609 1.00487234 -0.45274114 ... 0.88182832 -3.66914704\n", " -3.32787441]\n" ] } ], "source": [ "print(samples)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "histogram, bins = np.histogram(samples, bins=bins)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10,4))\n", "plt.plot()\n", "plt.step(bin_centers, histogram)\n", "plt.ylim(0,np.max(histogram*1.2))\n", "plt.xlabel('Value')\n", "plt.ylabel('Frequency (N)')\n", "plt.title('Uniform Distribution')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Experiment with changing the standard deviation and center location of the distribution. You may need to change the range of the bins. Insert the required code into the notebook above the plotting section." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This has been a simple introductory tutorial to Python and Jupyter notebooks. If you want more information about the packages we used, see the following on-line tutorials:\n", "\n", "*Python*: http://introtopython.org/. The *Python Essentials* menu contains a list of tutorials that discuss variables, functions, syntax, and code structure.\n", "\n", "*Matplotlib*: the tutorials at: https://matplotlib.org/tutorials/introductory/pyplot.html\n", "\n", "You can find more information on *Jupyter notebooks* here: \n", "https://jupyter-notebook.readthedocs.io/en/stable/" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.7" } }, "nbformat": 4, "nbformat_minor": 4 }