{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "![tutorial banner](images/tutorial_banner.PNG)\n", "\n", "# Welcome to Python, Jupyter, and Google Collab\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## How to use this tutorial?\n", "\n", "This tutorial is a [Jupyter](https://jupyter.org) notebook. Jupyter is a browser based interactive tool that combines text, images, equations, and code that can be shared with others. Please see the setup section in the [README](./README.md) to learn more about how to get started." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Tutorial Structure\n", "\n", "This tutorial is made up of multiple Jupyter Notebooks. These notebooks mix\n", "code, text, visualization, and exercises.\n", "\n", "If you haven't used JupyterLab before, it's similar to the Jupyter Notebook. If\n", "you haven't used the Notebook, the quick intro is\n", "\n", "1. There are two modes: ``command`` and ``edit``\n", "\n", "1. From ``command`` mode, press `Enter` to edit a cell (like this markdown cell)\n", "\n", "1. From ``edit`` mode, press `Esc` to change to command mode\n", "1. Press `shift+enter` to execute a cell and move to the next cell.\n", "1. The toolbar has commands for executing, converting, and creating cells.\n", "\n", "The layout of the tutorial will be as follows:\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# if running on google colab, uncomment the next line and execute this cell to install the dependencies and prevent \"ModuleNotFoundError\" in later cells:\n", "# !pip install -r https://raw.githubusercontent.com/PVSC-Python-Tutorials/PVSC50/main/requirements.txt" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Exercise: Print Hello, world!\n", "\n", "Each notebook will have exercises for you to solve. You'll be given a blank or\n", "partially completed cell, followed by a hidden cell with a solution. For\n", "example.\n", "\n", "Print the text \"Hello, world!\".\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello, world!\n" ] } ], "source": [ "# Your code here\n", "print(\"Hello, world!\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 1: Modify to print something else:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "my_string = # Add your text here. Remember to put it inside of single quotes or double quotes ( \" \" or '' )\n", "print(my_string)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Let's go over some Python Concepts\n", "\n", "(A lot of this examples were shamely taken from https://jckantor.github.io/CBE30338/01.01-Getting-Started-with-Python-and-Jupyter-Notebooks.html :$)\n", "\n", "\n", "## Basic Arithmetic Operations\n", "\n", "Basic arithmetic operations are built into the Python langauge. Here are some examples. In particular, note that exponentiation is done with the ** operator." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n", "8\n", "0.6666666666666666\n" ] } ], "source": [ "a = 2\n", "b = 3\n", "print(a + b)\n", "print(a ** b)\n", "print(a / b)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Python Libraries\n", "\n", "The Python language has only very basic operations. Most math functions are in various math libraries. The numpy library is convenient library. This next cell shows how to import numpy with the prefix np, then use it to call a common mathematical functions." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.141592653589793\n", "2.718281828459045\n", "0.7071067811865476\n", "0.7071067811865476\n", "0.9999999999999999\n" ] } ], "source": [ "import numpy as np\n", "\n", "# mathematical constants\n", "print(np.pi)\n", "print(np.e)\n", "\n", "# trignometric functions\n", "angle = np.pi/4\n", "print(np.sin(angle))\n", "print(np.cos(angle))\n", "print(np.tan(angle))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "Lists are a versatile way of organizing your data in Python. Here are some examples, more can be found on this Khan Academy video." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 2, 3, 4]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xList = [1, 2, 3, 4]\n", "xList" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Concatenation\n", "\n", "Concatentation is the operation of joining one list to another." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 2, 3, 4, 5, 6, 7, 8]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = [1, 2, 3, 4];\n", "y = [5, 6, 7, 8];\n", "\n", "x + y" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "10" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sum(x)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Loops" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sin(1) = 0.84147\n", "sin(2) = 0.90930\n", "sin(3) = 0.14112\n", "sin(4) = -0.75680\n" ] } ], "source": [ "for x in xList:\n", " print(\"sin({0}) = {1:8.5f}\".format(x,np.sin(x)))" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Working with Dictionaries\n", "\n", "Dictionaries are useful for storing and retrieving data as key-value pairs. For example, here is a short dictionary of molar masses. The keys are molecular formulas, and the values are the corresponding molar masses.\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Arizona': 16.04, 'California': 30.02, 'Texas': 18.0, 'Colorado': 44.01}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "States_SolarInstallations2020 = {'Arizona': 16.04, 'California': 30.02, 'Texas':18.00, 'Colorado': 44.01} # GW\n", "States_SolarInstallations2020" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "We can a value to an existing dictionary.\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "States_SolarInstallations2020['New Mexico'] = 22.4\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Plotting\n", "\n", "Importing the matplotlib.pyplot library gives IPython notebooks plotting functionality very similar to Matlab's. Here are some examples using functions from the" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "x = np.linspace(0,10)\n", "y = np.sin(x)\n", "z = np.cos(x)\n", "\n", "plt.plot(x,y,'b',x,z,'r')\n", "plt.xlabel('Radians');\n", "plt.ylabel('Value');\n", "plt.title('Plotting Demonstration')\n", "plt.legend(['Sin','Cos'])\n", "plt.grid()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": { "jp-MarkdownHeadingCollapsed": true, "slideshow": { "slide_type": "skip" } }, "source": [ "## Now you're ready\n", "\n", "This skills will allow you to explore any jupyter notebook." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "[![Creative Commons License](https://i.creativecommons.org/l/by/4.0/88x31.png)](http://creativecommons.org/licenses/by/4.0/)\n", "\n", "This work is licensed under a [Creative Commons Attribution 4.0 International License](http://creativecommons.org/licenses/by/4.0/)." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.7" } }, "nbformat": 4, "nbformat_minor": 4 }