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[]: 3
In []: 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 + b
In []: c
Out[]: [2, 3, 5, 7, 11, 13, 17]
In []: p.append(11)
In []: p
Out[]: [ 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$ \\ \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}
\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 number
of 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-01
1.1000e-01 6.9497e-01
1.2000e-01 7.4252e-01
1.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 brown
fox 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 []: point
Out[]: ['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}