%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %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 group] {FOSSEE} \institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} \date[] {SciPy.in 2010, Tutorials} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\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} \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[]: [] In []: xlabel('time') Out[]: In []: ylabel('distance') Out[]: \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[]: [] In []: clf() In []: plot(time, distance, '.') Out[]: [] \end{lstlisting} \end{frame} \begin{frame}[fragile] \begin{figure} \includegraphics[interpolate=true,width=2.35in]{data/stline_dots.png} \includegraphics[interpolate=true,width=2.35in]{data/stline_points.png} \end{figure} \end{frame} \begin{frame}[fragile] \frametitle{Additional Line Styles} \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[]: 3 In []: p[0]+p[1]+p[-1] Out[]: 12 \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{List: Appending elements} \begin{lstlisting} In []: p.append(11) In []: p Out[]: [ 2, 3, 5, 7, 11] In []: b = [11, 13, 17] In []: p.append(b) Out[]: [ 2, 3, 5, 7, 11, [11, 13, 17]] \end{lstlisting} %\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$ \\ \hline 0.1 & 0.69 & \\ \hline 0.2 & 0.90 & \\ \hline 0.3 & 1.19 & \\ \hline 0.4 & 1.30 & \\ \hline 0.5 & 1.47 & \\ \hline 0.6 & 1.58 & \\ \hline 0.7 & 1.77 & \\ \hline 0.8 & 1.83 & \\ \hline 0.9 & 1.94 & \\ \hline \end{tabular} \end{small}\\ \alert{$L \alpha T^2$} \end{center} Our data is present in \typ{pendulum.txt}. Let's look at it. \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{Looking at \typ{pendulum.txt}} \begin{lstlisting} In []: cat 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 \end{lstlisting} %$ \ldots \begin{itemize} \item File contains L vs.\ T values \item First Column -- L values \item Second Column -- T values \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{\typ{loadtxt}} \begin{itemize} \item We shall use the \typ{loadtxt} command to load data \item Let's use \typ{primes.txt} file learn to use it \item \typ{primes.txt} has a single column \item Then, we shall use it for \typ{pendulum.txt} -- 2 cols \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{What's in \typ{primes.txt}?} Lets look at the \typ{primes.txt} file. \begin{lstlisting} In []: cat primes.txt 2 3 5 7 11 13 . . . \end{lstlisting} %$ \end{frame} \begin{frame}[fragile] \frametitle{\typ{loadtxt} \ldots} \begin{lstlisting} In []: primes = loadtxt('primes.txt') In []: primes Out[]: array([ 2., 3., 5., 7., 11., 13., 17., 19., 23., 29., 31., 37., 41., 43., 47., 53., 59., 61., 67., 71., 73., 79., 83., 89., 97.]) \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Reading \typ{pendulum.txt}} \begin{lstlisting} In []: pend = loadtxt('pendulum.txt') In []: pend \end{lstlisting} \begin{itemize} \item \typ{pend} is 2 Dimensional. \item We don't \alert{yet} know how to handle it. \item We obtain 1D sequences using \typ{unpack=True} \end{itemize} \begin{lstlisting} In []: L, T = loadtxt('pendulum.txt', unpack=True) In []: print L, T In []: print len(L), len(T) Out[]: 90 90 \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 to 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} \alert{Hit ``ENTER'' key twice, to get out of \typ{for} loop}. \begin{lstlisting} In []: print len(tsq) Out[]: 90 \end{lstlisting} \typ{tsq} is a \kwrd{list} of squares of \typ{T} values. \end{frame} \begin{frame}[fragile] \frametitle{Plotting $L$ vs $T^2$ \ldots} \begin{lstlisting} In []: plot(L, tsq, '.') \end{lstlisting} \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 Loading data from files \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}