# HG changeset patch # User Puneeth Chaganti # Date 1256652369 -19800 # Node ID 298cd56f4d5aa86dc0bff57415b013aeda4aa05e # Parent 8618546997acfb081b56ccf06a5646bf56714e53# Parent 81351147c9c145b4382846b84e7ef0a498f19fcd Merged with Mainline. diff -r 8618546997ac -r 298cd56f4d5a day1/session3.tex --- a/day1/session3.tex Tue Oct 27 19:25:14 2009 +0530 +++ b/day1/session3.tex Tue Oct 27 19:36:09 2009 +0530 @@ -140,6 +140,7 @@ \begin{itemize} \item Draw a pie chart representing the number of students who scored more than 90\% in Science per region. \item Draw a pie chart representing the number of students who scored more than 90\% per subject(All regions combined). + \item Print mean, median, mode and standard deviation of math scores for all regions combined. \end{itemize} \end{frame} @@ -147,8 +148,11 @@ \frametitle{Statistical Analysis and Parsing \ldots} Machinery Required - \begin{itemize} - \item File reading and parsing + \item File reading + \item Parsing \item Dictionaries + \item NumPy arrays + \item Statistical operations \end{itemize} \end{frame} @@ -156,8 +160,8 @@ \frametitle{File reading and parsing} Understanding the structure of sslc1.txt \begin{itemize} - \item Each line in the file, i.e each row of a file is a single record. - \item Each record corresponds to a record of a single student + \item Each line in the file corresponds to one student's details + \item aka record \item Each record consists of several fields separated by a ';' \end{itemize} \end{frame} @@ -169,11 +173,10 @@ \item Region Code \item Roll Number \item Name - \item Marks of 5 subjects + \item Marks of 5 subjects: English, Hindi, Maths, Science, Social \item Total marks - \item Pass (P) + \item Pass/Fail (P/F) \item Withdrawn (W) - \item Fail (F) \end{itemize} \end{frame} @@ -186,44 +189,83 @@ \end{frame} \begin{frame}[fragile] - \frametitle{Dictionary - Building parsed data} + \frametitle{Dictionary: Introduction} \begin{itemize} - \item Let the parsed data be stored in list of dictionaries. - \item d = \{\} is an empty dictionary + \item lists index: 0 \ldots n + \item dictionaries index using strings \end{itemize} +\begin{block}{Example} +d = \{ ``Hitchhiker's guide'' : 42, + ``Terminator'' : ``I'll be back''\}\\ +d[``Terminator''] => ``I'll be back'' +\end{block} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Dictionary: Introduction} +\begin{lstlisting} +In [1]: d = {"Hitchhiker's guide" : 42, + "Terminator" : "I'll be back"} + +In [2]: d["Hitchhiker's guide"] +Out[2]: 42 + +In [3]: "Hitchhiker's guide" in d +Out[3]: True + +In [4]: "Guido" in d +Out[4]: False +\end{lstlisting} \end{frame} \begin{frame}[fragile] - \frametitle{Dictionary - Building parsed data} + \frametitle{Dictionary: Introduction} +\begin{lstlisting} +In [5]: d.keys() +Out[5]: ['Terminator', "Hitchhiker's + guide"] + +In [6]: d.values() +Out[6]: ["I'll be back", 42] +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{enumerate: Iterating through list indices} \begin{lstlisting} -ninety_percents = [{}, {}, {}, {}, {}] +In [1]: names = ["Guido","Alex", "Tim"] + +In [2]: for i, name in enumerate(names): + ...: print i, name + ...: +0 Guido +1 Alex +2 Tim \end{lstlisting} \end{frame} \begin{frame}[fragile] + \frametitle{Dictionary: Building parsed data} + Let our dictionary be: + \begin{lstlisting} +science = {} # is an empty dictionary + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] \frametitle{Dictionary - Building parsed data} \begin{itemize} - \item Index of a dictionary is called a \emph{key} - \item \emph{Keys} of these dictionaries are strings - region codes + \item \emph{Keys} of \emph{science} will be region codes + \item Value of a \emph{science} will be the number students who scored more than 90\% in that region \end{itemize} \end{frame} \begin{frame}[fragile] - \frametitle{Dictionary - Building parsed data \ldots} - \begin{itemize} - \item Value of a \emph{key} can be any legal Python value - \item In this problem let the value of a \emph{key} be another an integer - \item This dictionary contains: - \end{itemize} -'region code': Number of students who scored more than 90\% in this region for this subject -\end{frame} - -\begin{frame}[fragile] \frametitle{Building parsed data \ldots} \begin{lstlisting} -from pylab import * +from pylab import pie -ninety_percents = [{}, {}, {}, {}, {}] +science = {} for record in open('sslc1.txt'): record = record.strip() @@ -235,17 +277,92 @@ \begin{frame}[fragile] \frametitle{Building parsed data \ldots} + \begin{lstlisting} +if region_code not in science: + science[region_code] = 0 + +score_str = fields[4].strip() + +score = int(score_str) if + score_str != 'AA' else 0 + +if score > 90: + science[region_code] += 1 + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Pie charts} + \small + \begin{lstlisting} +figure(1) +pie(science.values(), + labels=science.keys()) +title('Students scoring 90% and above + in science by region') +savefig('/tmp/science.png') + \end{lstlisting} +\begin{columns} + \column{5.25\textwidth} + \hspace*{1.1in} +\includegraphics[height=2in, interpolate=true]{data/science} + \column{0.8\textwidth} +\end{columns} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Building data for all subjects \ldots} + \begin{lstlisting} +from pylab import pie +from scipy import mean, median, std +from scipy import stats + +scores = [[]] * 5 +ninety_percents = [{}] * 5 + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Building data for all subjects \ldots} + \begin{lstlisting} +from pylab import pie +from scipy import mean, median, std +from scipy import stats + \end{lstlisting} + + \begin{block}{Repeating list items} + \begin{lstlisting} +scores = [[]] * 5 +ninety_percents = [{}] * 5 + \end{lstlisting} + \end{block} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Building data for all subjects \ldots} + \begin{lstlisting} +for record in open('sslc1.txt'): + record = record.strip() + fields = record.split(';') + + region_code = fields[0].strip() + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Building data for all subjects \ldots} \small \begin{lstlisting} for i, field in enumerate(fields[3:8]): - if region_code not in ninety_percents[i]: ninety_percents[i][region_code] = 0 score_str = field.strip() + score = int(score_str) if + score_str != 'AA' else 0 - score = 0 if score_str == 'AA' else - int(score_str) + scores[i].append(score) + if score > 90: ninety_percents[i][region_code] += 1 \end{lstlisting} @@ -263,25 +380,6 @@ \begin{frame}[fragile] \frametitle{Pie charts} - \small - \begin{lstlisting} -figure(1) -pie(ninety_percents[4].values(), - labels=ninety_percents[1].keys()) -title('Students scoring 90% and above - in science by region') -savefig('/tmp/science.png') - \end{lstlisting} -\begin{columns} - \column{5.25\textwidth} - \hspace*{1.1in} -\includegraphics[height=2in, interpolate=true]{data/science} - \column{0.8\textwidth} -\end{columns} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Pie charts} \begin{lstlisting} figure(2) pie(subj_total, labels=['English', @@ -299,6 +397,32 @@ \includegraphics[height=3in, interpolate=true]{data/all_regions} \end{frame} +\begin{frame}[fragile] + \frametitle{Obtaining statistics} + \begin{lstlisting} +math_scores = array(scores[2]) + +print "Mean: ", mean(math_scores) + +print "Median: ", median(math_scores) + +print "Mode: ", stats.mode(math_scores) + +print "Standard Deviation: ", + std(math_scores) + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{What tools did we use?} + \begin{itemize} + \item Dictionaries for storing data + \item Facilities for drawing pie charts + \item NumPy arrays for efficient array manipulations + \item Functions for statistical computations - mean, median, mode, standard deviation + \end{itemize} +\end{frame} + \begin{frame} \frametitle{L vs $T^2$ \ldots} Let's go back to the L vs $T^2$ plot @@ -436,14 +560,4 @@ \end{lstlisting} \end{frame} -\begin{frame}[fragile] - \frametitle{What did we learn?} - \begin{itemize} - \item Dictionaries - \item Drawing pie charts - \item Arrays - \item Least Square fitting - \item Intro to Matrices - \end{itemize} -\end{frame} \end{document} diff -r 8618546997ac -r 298cd56f4d5a day2/session1.tex --- a/day2/session1.tex Tue Oct 27 19:25:14 2009 +0530 +++ b/day2/session1.tex Tue Oct 27 19:36:09 2009 +0530 @@ -248,7 +248,7 @@ This Python idiom works for all types of variables.\\ They need not be of the same type! \end{block} - \inctime{} + \inctime{10} \end{frame} \section{Control flow} diff -r 8618546997ac -r 298cd56f4d5a day2/session5.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day2/session5.tex Tue Oct 27 19:36:09 2009 +0530 @@ -0,0 +1,202 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Tutorial slides on Python. +% +% Author: Prabhu Ramachandran +% Copyright (c) 2005-2009, Prabhu Ramachandran +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\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{split} + \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]{\texttt{#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[Exercises]{Exercises} + +\author[FOSSEE] {FOSSEE} + +\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} +\date[] {1, November 2009\\Day 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} +} + + +% 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}{Problem 1.1} + The aliquot of a number is defined as: the sum of the \emph{proper} divisors of the number. For example, aliquot(12) = 1 + 2 + 3 + 4 + 6 = 16.\\ + Write a function that returns the aliquot number of a given number. +\end{frame} + +\begin{frame}{Problem 1.2} + A pair of numbers (a, b) is said to be \alert{amicable} if the aliquot number of a is b and the aliquot number of b is a.\\ + Example: \texttt{220, 284}\\ + Write a program that prints all four digit amicable pairs. + +\inctime{20} +\end{frame} + +%% \begin{frame}{Problem 2} +%% Given an empty chessboard and one Bishop placed in any s%quare, say (r, c), generate the list of all squares the Bi%shop could move to. + +%% \end{frame} + +\begin{frame}[fragile] + \frametitle{Problem Set 2} + Given a string like, ``1, 3-7, 12, 15, 18-21'', produce the list \\ + \begin{lstlisting} + [1,3,4,5,6,7,12,15,18,19,20,21] + \end{lstlisting} +\inctime{10} +\end{frame} + +\begin{frame} + \frametitle{Problem Set 3} + \begin{description} + \item[3.1] Count word frequencies in a file. +\end{description} +\inctime{5} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Problem set 4} + Finite difference + \begin{equation*} + \frac{sin(x+h)-sin(x)}{h} + \end{equation*} + \begin{lstlisting} + >>> x = linspace(0,2*pi,100) + >>> y = sin(x) + >>> deltax = x[1] - x[0] + \end{lstlisting} + \pause + \begin{enumerate} + \item Given this, get the finite difference of sin in the range 0 to 2*pi + \end{enumerate} +\end{frame} + +\begin{frame} + \frametitle{Problem Set 5} + \begin{itemize} + \item[5.1] Write a function that plots any regular n-gon given \typ{n}. + \item[5.2] Consider the logistic map, $f(x) = kx(1-x)$, plot it for + $k=2.5, 3.5$ and $4$ in the same plot. +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Problem Set 5} + \begin{columns} + \column{0.6\textwidth} + \small{ + \begin{itemize} + \item[3] Consider the iteration $x_{n+1} = f(x_n)$ where $f(x) = kx(1-x)$. Plot the successive iterates of this process as explained below. + \end{itemize}} + \column{0.35\textwidth} + \hspace*{-0.5in} + \includegraphics[height=1.6in, interpolate=true]{data/cobweb} +\end{columns} +\end{frame} + +\begin{frame} + \frametitle{Problem Set 5.3} + Plot the cobweb plot as follows: + \begin{enumerate} + \item Start at $(x_0, 0)$ ($\implies$ i=0) + \item Draw a line to $(x_i, f(x_i))$ + \item Set $x_{i+1} = f(x_i)$ + \item Draw a line to $(x_{i+1}, x_{i+1})$ + \item $(i\implies i+1)$ + \item Repeat from 2 for as long as you want + \end{enumerate} +\inctime{20} +\end{frame} + +\end{document}