REF: Reformat some of the if-blocks so it's a little more clear.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Tutorial slides on Python.%% Author: FOSSEE% Copyright (c) 2009, FOSSEE, IIT Bombay%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\documentclass[14pt,compress]{beamer}%\documentclass[draft]{beamer}%\documentclass[compress,handout]{beamer}%\usepackage{pgfpages} %\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]% Modified from: generic-ornate-15min-45min.de.tex\mode<presentation>{ \usetheme{Warsaw} \useoutertheme{infolines} \setbeamercovered{transparent}}\usepackage[english]{babel}\usepackage[latin1]{inputenc}%\usepackage{times}\usepackage[T1]{fontenc}% Taken from Fernando's slides.\usepackage{ae,aecompl}\usepackage{mathpazo,courier,euler}\usepackage[scaled=.95]{helvet}\definecolor{darkgreen}{rgb}{0,0.5,0}\usepackage{listings}\lstset{language=Python, basicstyle=\ttfamily\bfseries, commentstyle=\color{red}\itshape, stringstyle=\color{darkgreen}, showstringspaces=false, keywordstyle=\color{blue}\bfseries}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Macros\setbeamercolor{emphbar}{bg=blue!20, fg=black}\newcommand{\emphbar}[1]{\begin{beamercolorbox}[rounded=true]{emphbar} {#1} \end{beamercolorbox}}\newcounter{time}\setcounter{time}{0}\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}}\newcommand{\typ}[1]{\lstinline{#1}}\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}} }%%% This is from Fernando's setup.% \usepackage{color}% \definecolor{orange}{cmyk}{0,0.4,0.8,0.2}% % Use and configure listings package for nicely formatted code% \usepackage{listings}% \lstset{% language=Python,% basicstyle=\small\ttfamily,% commentstyle=\ttfamily\color{blue},% stringstyle=\ttfamily\color{orange},% showstringspaces=false,% breaklines=true,% postbreak = \space\dots% }%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Title page\title[Plotting with Python]{Python for Science and Engg: Plotting experimental data}\author[FOSSEE group] {FOSSEE}\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}\date[] {SciPy 2010, Introductory tutorials,\\Day 1, Session 2}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo}%\logo{\pgfuseimage{iitmlogo}}%% Delete this, if you do not want the table of contents to pop up at%% the beginning of each subsection:\AtBeginSubsection[]{ \begin{frame}<beamer> \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame}}\AtBeginSection[]{ \begin{frame}<beamer> \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame}}% If you wish to uncover everything in a step-wise fashion, uncomment% the following command: %\beamerdefaultoverlayspecification{<+->}%\includeonlyframes{current,current1,current2,current3,current4,current5,current6}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DOCUMENT STARTS\begin{document}\begin{frame} \titlepage\end{frame}\begin{frame} \frametitle{Outline} \tableofcontents % You might wish to add the option [pausesections]\end{frame}\section{Plotting Points}\begin{frame}[fragile]\frametitle{Why would I plot f(x)?}Do we plot analytical functions or experimental data?\begin{small}\begin{lstlisting}In []: time = [0, 1, 2, 3]In []: distance = [7, 11, 15, 19]In []: plot(time,distance)Out[]: [<matplotlib.lines.Line2D object at 0xa73aa8c>]In []: xlabel('time')Out[]: <matplotlib.text.Text object at 0x986e9ac>In []: ylabel('distance')Out[]: <matplotlib.text.Text object at 0x98746ec>\end{lstlisting}\end{small}\end{frame}\begin{frame}[fragile]\begin{figure}\includegraphics[width=3.5in]{data/straightline.png}\end{figure}\alert{Is this what you have?}\end{frame}\begin{frame}[fragile]\frametitle{Plotting points}\begin{itemize}\item What if we want to plot the points?\end{itemize}\begin{lstlisting} In []: clf() In []: plot(time, distance, 'o') Out[]: [<matplotlib.lines.Line2D object at 0xac17e0c>] In []: clf() In []: plot(time, distance, '.') Out[]: [<matplotlib.lines.Line2D object at 0xac17e0c>]\end{lstlisting}\end{frame}\begin{frame}[fragile]\begin{figure}\includegraphics[width=2in]{data/stline_dots.png}\includegraphics[width=2in]{data/stline_points.png}\end{figure}\end{frame}\begin{frame}[fragile]\frametitle{Additional Plotting Attributes}\begin{itemize} \item \typ{'o'} - Filled circles \item \typ{'.'} - Small Dots \item \typ{'-'} - Lines \item \typ{'--'} - Dashed lines\end{itemize}\end{frame}\section{Lists}\begin{frame}[fragile] \frametitle{Lists: Introduction} \begin{lstlisting} In []: time = [0, 1, 2, 3] In []: distance = [7, 11, 15, 19] \end{lstlisting}What are \typ{x} and \typ{y}?\\\begin{center}\alert{\typ{lists!!}}\end{center}\end{frame}\begin{frame}[fragile]\frametitle{Lists: Initializing \& accessing elements}\begin{lstlisting}In []: mtlist = [] \end{lstlisting}\emphbar{Empty List}\begin{lstlisting}In []: p = [ 2, 3, 5, 7] In []: p[1]Out[]: 3In []: p[0]+p[1]+p[-1]Out[]: 12\end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{List: Slicing} \begin{block}{Remember\ldots} \kwrd{In []: p = [ 2, 3, 5, 7]} \end{block}\begin{lstlisting}In []: p[1:3]Out[]: [3, 5]\end{lstlisting}\emphbar{A slice}\begin{lstlisting}In []: p[0:-1]Out[]: [2, 3, 5]In []: p[::2]Out[]: [2, 5]\end{lstlisting}\alert{\typ{list[initial:final:step]}}\end{frame}\begin{frame}[fragile] \frametitle{List: Slicing} What is the output of the following?\begin{lstlisting}In []: p[1::2]In []: p[1:-1:2]\end{lstlisting}\end{frame}%% more on list slicing\begin{frame}[fragile]\frametitle{List operations}\begin{lstlisting}In []: b = [ 11, 13, 17]In []: c = p + bIn []: cOut[]: [2, 3, 5, 7, 11, 13, 17]In []: p.append(11)In []: pOut[]: [ 2, 3, 5, 7, 11]\end{lstlisting}Question: Does \typ{c} change now that \typ{p} is changed?%\inctime{10}\end{frame}\section{Simple Pendulum}\begin{frame}[fragile]\frametitle{Simple Pendulum - L and T}Let us look at the Simple Pendulum experiment.\begin{center}\begin{small}\begin{tabular}{| c | c | c |}\hline$L$ & $T$ & $T^2$ \\ \hline0.1 & 0.69 & \\ \hline0.2 & 0.90 & \\ \hline0.3 & 1.19 & \\ \hline0.4 & 1.30 & \\ \hline0.5 & 1.47 & \\ \hline0.6 & 1.58 & \\ \hline0.7 & 1.77 & \\ \hline0.8 & 1.83 & \\ \hline0.9 & 1.94 & \\ \hline\end{tabular}\end{small}\\\alert{$L \alpha T^2$}\end{center}\end{frame}\begin{frame}[fragile]\frametitle{Lets use lists}\begin{lstlisting}In []: L = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]In []: t = [0.69, 0.90, 1.19, 1.30, 1.47, 1.58, 1.77, 1.83, 1.94]\end{lstlisting}\alert{Gotcha}: Make sure \typ{L} and \typ{t} have the same numberof elements\begin{lstlisting}In []: print len(L), len(t)\end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{Plotting $L$ vs $T^2$}\begin{itemize}\item We must square each of the values in \typ{t}\item How do we do it?\item We use a \kwrd{for} loop to iterate over \typ{t}\end{itemize}\end{frame}\begin{frame}[fragile]\frametitle{Plotting $L$ vs $T^2$}\begin{lstlisting}In []: tsq = []In []: for time in t: ....: tsq.append(time*time) ....: ....:\end{lstlisting}This gives \typ{tsq} which is the list of squares of \typ{t} values.\begin{lstlisting}In []: print len(L), len(t), len(tsq)Out[]: 9 9 9\end{lstlisting}\end{frame}\begin{frame}[fragile] \frametitle{How do you exit the \texttt{for} loop?} Hitting the ``ENTER'' key twice returns the cursor to the previous indentation level \begin{lstlisting} In []: for time in t: ....: tsq.append(time*time) ....: ....: In []: plot(L, tsq) \end{lstlisting}\end{frame}\begin{frame}[fragile]\begin{figure}\includegraphics[width=3.5in]{data/L-TSq-limited.png}\end{figure}\end{frame}\begin{frame}[fragile]\frametitle{What about larger data sets?}\alert{Data is usually present in a file!} \\Lets look at the \typ{pendulum.txt} file.\begin{lstlisting} In []: cat pendulum.txt 1.0000e-01 6.9004e-011.1000e-01 6.9497e-011.2000e-01 7.4252e-011.3000e-01 7.5360e-01\end{lstlisting} %$\ldots\end{frame}\begin{frame}[fragile]\frametitle{Reading \typ{pendulum.txt}}\begin{itemize} \item File contains L vs.\ T values \item First Column - L values \item Second Column - T values \item Let us generate a plot from the data file\end{itemize}\end{frame}\begin{frame}[fragile] \frametitle{Gotcha and an aside} Ensure you are in the same directory as \typ{pendulum.txt}\\ if not, do the following on IPython: \begin{lstlisting}In []: %cd directory_containing_file# Check if pendulum.txt is there.In []: ls# Also try In []: !ls \end{lstlisting} \alert{Note:} \typ{\%cd} is an IPython magic command. For more information do: \begin{lstlisting}In []: ? \end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{Plotting from \typ{pendulum.txt}}Open a new script and save as \typ{pendulum_plot.py}\begin{lstlisting}L = []t = []for line in open('pendulum.txt'): point = line.split() L.append(float(point[0])) t.append(float(point[1]))tsq = []for time in t: tsq.append(time*time)plot(L, tsq, '.')\end{lstlisting}\end{frame}\begin{frame}\frametitle{Save and run}\begin{itemize} \item Save as \typ{pendulum\_plot.py} \item Run using \kwrd{\%run -i pendulum\_plot.py}\end{itemize}\end{frame}\begin{frame}[fragile]\begin{figure}\includegraphics[width=3.5in]{data/L-Tsq.png}\end{figure}\end{frame}\begin{frame}[fragile] \frametitle{Reading files \ldots}\typ{for line in open('pendulum.txt'):}\begin{itemize}\item opening file `\typ{pendulum.txt}'\item reading the file line by line\item \typ{line} is a \kwrd{string}\end{itemize}\end{frame}\section{Strings}\begin{frame}[fragile]\frametitle{Strings}Anything within ``quotes'' is a string!\begin{lstlisting}' This is a string ' " This too! """" This one too! """''' And one more! '''\end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{Strings}Why so many?\begin{lstlisting}' "Do or do not. No try." said Yoda.' " ' is a mighty lonely quote."\end{lstlisting}The triple quoted ones can span multiple lines!\begin{lstlisting}""" The quick brownfox jumped over the lazy dingbat. """\end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{Strings and \typ{split()}} \begin{lstlisting}In []: greet = 'hello world'In []: greet.split()Out[]: ['hello', 'world'] \end{lstlisting}This is what happens with \typ{line} \begin{lstlisting}In []: line = '1.20 7.42'In []: point = line.split()In []: pointOut[]: ['1.20', '7.42'] \end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{Getting floats from strings} \begin{lstlisting}In []: type(point[0])Out[]: <type 'str'> \end{lstlisting}But, we need floating point numbers \begin{lstlisting}In []: t = float(point[0])In []: type(t)Out[]: <type 'float'> \end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{Let's review the code}\begin{lstlisting}L = []t = []for line in open('pendulum.txt'): point = line.split() L.append(float(point[0])) t.append(float(point[1]))tsq = []for time in t: tsq.append(time*time)plot(L, tsq, '.')\end{lstlisting}\end{frame}\begin{frame}[fragile]\begin{figure}\includegraphics[width=3.5in]{data/L-Tsq.png}\end{figure}\end{frame}\section {Summary}\begin{frame}[fragile]\frametitle{What did we learn?}\begin{itemize} \item Plot attributes and plotting points \item Lists \item \kwrd{for} \item Reading files \item Tokenizing \item Strings\end{itemize}\end{frame}\end{document}%% Questions for Quiz %%%% ------------------ %%\begin{frame}[fragile]\frametitle{\incqno } \begin{lstlisting} In []: a = [1, 2, 5, 9] In []: a[0:-1] \end{lstlisting} What is the output?\end{frame}\begin{frame}\frametitle{\incqno } How do you combine two lists \emph{a} and \emph{b} to produce one list?\end{frame}\begin{frame}[fragile]\frametitle{\incqno } \begin{lstlisting} In []: a = [1, 2, 5, 9] \end{lstlisting} How do you add the value 10 to the end of this list?\end{frame}\begin{frame}\frametitle{\incqno }Write the code to read a file \texttt{data.txt} and print each line of it?\end{frame}\begin{frame}[fragile]\frametitle{\incqno }What would be the result of the following code snippet:\begin{lstlisting}In []: x = linspace(0, 10, 50)In []: y = linspace(50, 100, 100)In []: plot(x, y)\end{lstlisting}\end{frame}\begin{frame}[fragile]\frametitle{\incqno }The following code snippet has an error/bug:\begin{lstlisting}In []: l = [0.1, 0.2, 0.3, 0.4]In []: t = [0.69, 0.90, 1.19, 1.30]In []: tsq = []In []: for time in t: ....: tsq.append(time*time) ....: plot(l, tsq)\end{lstlisting}What is the error? How do you fix it?\end{frame}