%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %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 { \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] {FOSSEE} \institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} \date[] {31, October 2009\\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} \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame} } \AtBeginSection[] { \begin{frame} \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} \begin{frame} \frametitle{Why we didn't close the IPython??} \begin{itemize} \item IPython provides a convenient feature \item To go back, edit, and re-run commands \item But when you close, this is lost \end{itemize} \end{frame} \begin{frame} \frametitle{But its impractical..} \begin{itemize} \item We can't keep running IPython for days \item And its a pain to go back and edit \end{itemize} And the solution is..\\ \begin{center} \alert {\typ{Scripts!!}} \end{center} \end{frame} \section{Scripts} \begin{frame}[fragile] \frametitle{Python Scripts} \begin{itemize} \item Put all commands used in review problem into a file. \item use hist command of IPython. \end{itemize} \begin{lstlisting} In []: %hist In []: %hist -n \end{lstlisting} \end{frame} \begin{frame} \frametitle{Python Scripts\ldots} \begin{itemize} \item Open a new file in an \alert{editor} \item Copy and paste required lines from the output of \typ{\%hist -n} \item Save the file as \typ{sine_plot.py} \end{itemize} \begin{itemize} \item run the file in IPython using \typ{\%run sine_plot.py}\\ \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Why would I plot f(x)?} How often do we plot analytical functions?\\We plot experimental data more. \begin{lstlisting} In []: x = [0, 1, 2, 3] In []: y = [7, 11, 15, 19] In []: plot(x, y) Out[]: [] \end{lstlisting} \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(L, TSq, 'o') Out[]: [] In []: clf() In []: plot(L, TSq, '.') Out[]: [] \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 \kwrd{'o'} - Dots \item \kwrd{'.'} - Smaller Dots \item \kwrd{'-'} - Lines \item \kwrd{'- -'} - Dashed lines \end{itemize} \end{frame} \section{Lists} \begin{frame}[fragile] \frametitle{How to create the data?} What were \typ{x} and \typ{y}??\\ \begin{center} \alert{\typ{lists!!}} \end{center} \begin{lstlisting} In []: mtlist = [] #Empty List In []: lst = [1,2,3,4,5] \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Accessing elements of a list} \begin{lstlisting} In []: lst[0]+lst[1]+lst[-1] Out[]: 8 \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{List: Slicing} \begin{block}{Remember\ldots} \kwrd{In []: lst = [1,2,3,4,5]} \end{block} \alert{\typ{list[initial:final:step]}} \begin{lstlisting} In []: lst[1:3] # A slice. Out[]: [2, 3] In []: lst[1:-1] Out[]: [2, 3] \end{lstlisting} \end{frame} %% more on list slicing \begin{frame}[fragile] \frametitle{List operations} \begin{lstlisting} In []: anthrlst = [6,7,8,9] In []: lnglst = lst + anthrlst In []: lnglst Out[]: [1, 2, 3, 4, 5, 6, 7, 8, 9] In []: lst.append(6) In []: lst Out[]: [1, 2, 3, 4, 5, 6] \end{lstlisting} %\inctime{10} \end{frame} \section{Simple Pendulum} \begin{frame}[fragile] \frametitle{Simple Pendulum - L and T} Let us look at the example of the Simple Pendulum experiment. \begin{center} \begin{small} \begin{tabular}{| c | c | c |} \hline $L$ & $T$ & $T^2$ \\ \hline 0.1 & 0.6900 & \\ \hline 0.2 & 0.8989 & \\ \hline 0.3 & 1.1867 & \\ \hline 0.4 & 1.2991 & \\ \hline 0.5 & 1.4656 & \\ \hline 0.6 & 1.5843 & \\ \hline 0.7 & 1.7706 & \\ \hline 0.8 & 1.8296 & \\ \hline 0.9 & 1.9440 & \\ \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.8989, 1.1867, 1.2991, 1.4656, 1.5843, 1.7706, 1.8296, 1.9440] \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Plotting $L$ vs $T^2$} \begin{itemize} \item We must square each of the values in T \item How to do it? \item We use a \kwrd{for} loop to iterate over T \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Plotting $L$ vs $T^2$} \begin{lstlisting} In []: TSq = [] In []: for t in T: ....: TSq.append(t*t) In []: plot(L, TSq) Out[]: [] \end{lstlisting} This gives the list \kwrd{TSq} which is the list of squares of T values. \end{frame} \begin{frame}[fragile] \begin{figure} \includegraphics[width=3.5in]{data/L-TSq-limited.png} \end{figure} \end{frame} \begin{frame}[fragile] \frametitle{More of \texttt{for}} \begin{itemize} \item Used to iterate over lists \item Let us look at another example. \end{itemize} \begin{lstlisting} In []: lst = [1,2,3,4,5,6] In []: for num in lst: ....: print num, num*num ....: 1 1 2 4 3 9 4 16 5 25 6 36 \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{What about larger data sets??} \alert{Data is usually present in a file!} \\ Lets look at the pendulum.txt file. \begin{lstlisting} $cat data/pendulum.txt 1.0000e-01 6.9004e-01 1.1000e-01 6.9497e-01 1.2000e-01 7.4252e-01 1.3000e-01 7.5360e-01 1.4000e-01 8.3568e-01 1.5000e-01 8.6789e-01 \end{lstlisting} \ldots \end{frame} \begin{frame}[fragile] \frametitle{Reading pendulum.txt} \begin{itemize} \item We now wish to repeat the plot using the values from a file \item Given a file containing L vs. T values \item Column1 - L; Column2 - T \item Read the file \item Plot points for L vs. $T^2$ \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Reading pendulum.txt} \begin{lstlisting} In []: L = [] In []: T = [] In []: for line in open('pendulum.txt'): .... points = line.split() .... L.append(float(points[0])) .... T.append(float(points[1])) \end{lstlisting} \begin{itemize} \item We now have two lists L and T \item Now, Repeat previous steps for plotting \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Plotting from pendulum.txt} \begin{lstlisting} In []: TSq = [] In []: for t in T: ....: TSq.append(t*t) In []: plot(L, TSq, '.') \end{lstlisting} \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{In []: for line in open('pendulum.txt'):} \begin{itemize} \item opening file `pendulum.txt' \item iterating through the file by reading each line into variable \typ{line} \item \typ{line} is a \kwrd{string} variable \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 and \typ{split()}} \begin{lstlisting} In []: line = 'hello world' In []: line.split() Out[]: ['hello', 'world'] \end{lstlisting} This is what happens with \typ{line} \begin{lstlisting} In []: line = '1.2000e-01 7.4252e-01' In []: line.split() Out[]: ['1.2000e-01', '7.4252e-01'] \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Getting floats from strings} \begin{lstlisting} In []: type(points[0]) Out[]: \end{lstlisting} But, we need floating point numbers \begin{lstlisting} In []: t = float(point[0]) In []: type(t) Out[]: \end{lstlisting} \end{frame} \section {Summary} \begin{frame} \frametitle{Summary} So what did we learn in this session?? \begin{itemize} \item Creating and running Python scripts \item Plotting points and Plotting attributes \item Lists \item \kwrd{for} \item Reading files \item Strings \end{itemize} \end{frame} \end{document}