%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%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 using Python]{Python for Science and Egg. 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}<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}\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[]: [<matplotlib.lines.Line2D object at 0xa73aa8c>]\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[]: [<matplotlib.lines.Line2D object at 0xac17e0c>] In []: clf() In []: plot(L, TSq, '.') 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 \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 are \typ{x} and \typ{y} here??\\\begin{center}\alert{\typ{lists!!}}\end{center}\begin{lstlisting}In []: mtlist = [] #Empty ListIn []: 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}\begin{frame}[fragile]\frametitle{List operations}\begin{lstlisting}In []: anthrlst = [6,7,8,9]In []: lnglst = lst + anthrlstIn []: lnglstOut[]: [1, 2, 3, 4, 5, 6, 7, 8, 9]In []: lst.append(6)In []: lstOut[]: [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$ \\ \hline0.1 & 0.6900 & \\ \hline0.2 & 0.8989 & \\ \hline0.3 & 1.1867 & \\ \hline0.4 & 1.2991 & \\ \hline0.5 & 1.4656 & \\ \hline0.6 & 1.5843 & \\ \hline0.7 & 1.7706 & \\ \hline0.8 & 1.8296 & \\ \hline0.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[]: [<matplotlib.lines.Line2D object at 0xa5b05ac>]\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 12 43 94 165 256 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-011.1000e-01 6.9497e-011.2000e-01 7.4252e-011.3000e-01 7.5360e-011.4000e-01 8.3568e-011.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 file using 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[]: <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}\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}