{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"from __future__ import division, print_function\n",
"\n",
"# to suppress warnings of Seaborn's deprecated usage of Matplotlib\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"
\n",
"The Python Data Science Stack
\n",
"
\n",
"Dr. Florian Wilhelm
\n",
"Senior Professional: Data Scientist @ CSC
\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# What is Python?\n",
"\n",
"* multi-purpose\n",
"* focused on readability and productivity\n",
"* easy to learn\n",
"* object oriented\n",
"* interpreted\n",
"* strongely and dynamically typed\n",
"* cross platform"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Features\n",
"\n",
"* indentation is part of the syntax \n",
"* high level data types (tuples, lists, dictionaries, sets)\n",
"* Python Standard Library (Batteries included)\n",
" * string sevices, regular expressions\n",
" * mathematical modules\n",
" * IO, file formats and data persistence\n",
" * OS, threading, multiprocessing\n",
" * networking, email, html, webserver\n",
" * ...\n",
"* easily extensible with C/C++ (glue language)\n",
"* tons of external libraries"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Why Python for Analytics?\n",
"\n",
"Besides the features already mentioned, Python has:\n",
"\n",
"* large communities for data science, analytics, visualisation etc.,\n",
"* many and well-established libraries,\n",
"* lots of examples and documentation,\n",
"* **huge** demand from the industry.\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"\n",
" Python 2 vs. 3
\n",
"
\n",
"Source: LearnToCodeWithMe
\n",
"Use Python 3! All relevant libraries are ported!
\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"\n",
"Installation
\n",
"\n",
"\n",
"### Linux & Mac \n",
"\n",
"
\n",
"*It is already installed!* Use [virtualenv](http://virtualenv.readthedocs.org/) and [pip](https://pip.pypa.io/) to setup isolated environments and install more packages. [Conda](http://conda.pydata.org/docs/) is an alternative.\n",
"\n",
"### Windows \n",
"
\n",
"\n",
"*A bit trickier!* Best use the [Anaconda distribution](https://www.continuum.io/downloads) from Continuum Analytics to install everything you need to get going.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Primer on Python\n",
"\n",
"Strong and dynamically typed"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"69"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x = 23\n",
"3*x"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Hello World!\n"
]
}
],
"source": [
"x = \"Hello \"\n",
"y = \"World!\"\n",
"print(x + y)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"ename": "TypeError",
"evalue": "Can't convert 'int' object to str implicitly",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mTypeError\u001b[0m: Can't convert 'int' object to str implicitly"
]
}
],
"source": [
"print(x + 1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Indentation matters!"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Positive, odd number!\n"
]
}
],
"source": [
"x = 3\n",
"\n",
"if x > 0:\n",
" if x % 2 == 0:\n",
" print(\"Positive, even number!\")\n",
" else:\n",
" print(\"Positive, odd number!\")\n",
"else:\n",
" print(\"Non-positive number!\")"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The BMI is: 23.1\n"
]
}
],
"source": [
"def bmi(height, weight):\n",
" return weight / height**2\n",
"\n",
"print(\"The BMI is: {:.3}\".format(bmi(1.85, 79)))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Tuples"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(1, 3, 5)\n"
]
}
],
"source": [
"x = (1, 3, 5)\n",
"print(x)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"5"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x[2]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"9\n"
]
}
],
"source": [
"a, b, c = x\n",
"print(a + b + c)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1 and [3, 5]\n"
]
}
],
"source": [
"a, *others = x\n",
"print(a, 'and', others)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Lists"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 3, 5]\n"
]
}
],
"source": [
"x = [1, 3, 5]\n",
"print(x)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 3, 5, 7]\n"
]
}
],
"source": [
"x.append(7)\n",
"print(x)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false,
"scrolled": true,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[3, 5, 7]\n"
]
}
],
"source": [
"del x[0]\n",
"print(x)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Dictionaries"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"x = {'a': 1, 'b': 2, 'c': 3}"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2\n"
]
}
],
"source": [
"print(x['b'])"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'a': 1, 'd': 4, 'b': 2, 'c': 3}\n"
]
}
],
"source": [
"x['d'] = 4\n",
"print(x)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"42"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x['dispatch'] = lambda x: x + 41\n",
"x['dispatch'](1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Powerful and easy to use data structures like lists and dictionaries allow **declarative programming**."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Loops and list comprehension"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 1, 4, 9, 16]\n"
]
}
],
"source": [
"x = []\n",
"for i in range(5):\n",
" x.append(i**2)\n",
"print(x)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0, 1, 4, 9, 16]\n"
]
}
],
"source": [
"# better\n",
"x = [i**2 for i in range(5)]\n",
"print(x)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Many more *high-level* concepts available to express an algorithm as *natural* as possible. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Python Data Science Stack
\n",
"
\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Python Data Science Stack
\n",
"
\n",
"
\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Python Data Science Stack
\n",
"\n",
"\n",
"* **NumPy** to work efficiently with multi-dimensional arrays and matrices. Includes some high-level mathematical operations.\n",
"* **SciPy** extends NumPy with additional modules (optimization, linear algebra, integration, interpolation, special functions, FFT, signal and image processing, ODE solvers etc.).\n",
"* **Pandas** builds upon NumPy and provides high-performance, easy-to-use data structures and data analysis tools.\n",
"* **Scikit-Learn** provides simple and efficient machine learning tools for data mining and data analysis.\n",
"* **matplotlib** provides 2d plotting capabilities. Use additionally **Seaborn** for statistical plots.\n",
"* **IPython** is a powerful interactive shell and a kernel for *Jupyter*.\n",
"* **Jupyter** Notebook is a web application that allows you to create and share documents that contain live code, equations, visualizations and explanatory text. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
"Many libraries internally use efficient C/C++ and FORTRAN implementations!"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Jupyter/IPython Notebook
\n",
"
\n",
"Live demonstration\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Titanic: Analysis of a Disaster
\n",
"
\n",
"Painting from Willy Stöwer, source & more information: Kaggle\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"Can we predict who survived on the Titanic?
\n",
"\n",
"Based on the properties of a passenger like:\n",
"\n",
" - gender,
\n",
" - age,
\n",
" - passenger class,
\n",
" - number of siblings,
\n",
" - ...
\n",
"
\n",
"\n",
"
\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Setting things up and reading in the data"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"%matplotlib inline\n",
"\n",
"df = pd.read_csv('./input/train.csv')"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [],
"source": [
"# Drop unnecessary colum and rename some for better readability\n",
"df = df.drop('PassengerId', axis=1)\n",
"df = df.rename(columns={'Survived': 'Alive', 'Pclass': 'Class', 'Embarked': 'Port'})\n",
"df['Name'] = df['Name'].str[:10]"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false,
"scrolled": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Alive | \n",
" Class | \n",
" Name | \n",
" Sex | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Ticket | \n",
" Fare | \n",
" Cabin | \n",
" Port | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0 | \n",
" 3 | \n",
" Braund, Mr | \n",
" male | \n",
" 22 | \n",
" 1 | \n",
" 0 | \n",
" A/5 21171 | \n",
" 7.2500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" Cumings, M | \n",
" female | \n",
" 38 | \n",
" 1 | \n",
" 0 | \n",
" PC 17599 | \n",
" 71.2833 | \n",
" C85 | \n",
" C | \n",
"
\n",
" \n",
" 2 | \n",
" 1 | \n",
" 3 | \n",
" Heikkinen, | \n",
" female | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" STON/O2. 3101282 | \n",
" 7.9250 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
" 3 | \n",
" 1 | \n",
" 1 | \n",
" Futrelle, | \n",
" female | \n",
" 35 | \n",
" 1 | \n",
" 0 | \n",
" 113803 | \n",
" 53.1000 | \n",
" C123 | \n",
" S | \n",
"
\n",
" \n",
" 4 | \n",
" 0 | \n",
" 3 | \n",
" Allen, Mr. | \n",
" male | \n",
" 35 | \n",
" 0 | \n",
" 0 | \n",
" 373450 | \n",
" 8.0500 | \n",
" NaN | \n",
" S | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Alive Class Name Sex Age SibSp Parch Ticket \\\n",
"0 0 3 Braund, Mr male 22 1 0 A/5 21171 \n",
"1 1 1 Cumings, M female 38 1 0 PC 17599 \n",
"2 1 3 Heikkinen, female 26 0 0 STON/O2. 3101282 \n",
"3 1 1 Futrelle, female 35 1 0 113803 \n",
"4 0 3 Allen, Mr. male 35 0 0 373450 \n",
"\n",
" Fare Cabin Port \n",
"0 7.2500 NaN S \n",
"1 71.2833 C85 C \n",
"2 7.9250 NaN S \n",
"3 53.1000 C123 S \n",
"4 8.0500 NaN S "
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Preprocessing"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Alive | \n",
" Class | \n",
" Sex | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Fare | \n",
" Port | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0 | \n",
" 3 | \n",
" male | \n",
" 22 | \n",
" 1 | \n",
" 0 | \n",
" 7.2500 | \n",
" S | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" 1 | \n",
" female | \n",
" 38 | \n",
" 1 | \n",
" 0 | \n",
" 71.2833 | \n",
" C | \n",
"
\n",
" \n",
" 2 | \n",
" 1 | \n",
" 3 | \n",
" female | \n",
" 26 | \n",
" 0 | \n",
" 0 | \n",
" 7.9250 | \n",
" S | \n",
"
\n",
" \n",
" 3 | \n",
" 1 | \n",
" 1 | \n",
" female | \n",
" 35 | \n",
" 1 | \n",
" 0 | \n",
" 53.1000 | \n",
" S | \n",
"
\n",
" \n",
" 4 | \n",
" 0 | \n",
" 3 | \n",
" male | \n",
" 35 | \n",
" 0 | \n",
" 0 | \n",
" 8.0500 | \n",
" S | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Alive Class Sex Age SibSp Parch Fare Port\n",
"0 0 3 male 22 1 0 7.2500 S\n",
"1 1 1 female 38 1 0 71.2833 C\n",
"2 1 3 female 26 0 0 7.9250 S\n",
"3 1 1 female 35 1 0 53.1000 S\n",
"4 0 3 male 35 0 0 8.0500 S"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# We drop some hard to use columns and define 'Port', 'Sex' and 'Class' as categories\n",
"df = df.drop(['Name', 'Ticket', 'Cabin'], axis=1)\n",
"df['Port'] = df['Port'].astype('category')\n",
"df['Sex'] = df['Sex'].astype('category')\n",
"df['Class'] = df['Class'].astype('category')\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(891, 8)"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Data cleansing"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Alive | \n",
" Age | \n",
" SibSp | \n",
" Parch | \n",
" Fare | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 891.000000 | \n",
" 714.000000 | \n",
" 891.000000 | \n",
" 891.000000 | \n",
" 891.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 0.383838 | \n",
" 29.699118 | \n",
" 0.523008 | \n",
" 0.381594 | \n",
" 32.204208 | \n",
"
\n",
" \n",
" std | \n",
" 0.486592 | \n",
" 14.526497 | \n",
" 1.102743 | \n",
" 0.806057 | \n",
" 49.693429 | \n",
"
\n",
" \n",
" min | \n",
" 0.000000 | \n",
" 0.420000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" 25% | \n",
" 0.000000 | \n",
" 20.125000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 7.910400 | \n",
"
\n",
" \n",
" 50% | \n",
" 0.000000 | \n",
" 28.000000 | \n",
" 0.000000 | \n",
" 0.000000 | \n",
" 14.454200 | \n",
"
\n",
" \n",
" 75% | \n",
" 1.000000 | \n",
" 38.000000 | \n",
" 1.000000 | \n",
" 0.000000 | \n",
" 31.000000 | \n",
"
\n",
" \n",
" max | \n",
" 1.000000 | \n",
" 80.000000 | \n",
" 8.000000 | \n",
" 6.000000 | \n",
" 512.329200 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Alive Age SibSp Parch Fare\n",
"count 891.000000 714.000000 891.000000 891.000000 891.000000\n",
"mean 0.383838 29.699118 0.523008 0.381594 32.204208\n",
"std 0.486592 14.526497 1.102743 0.806057 49.693429\n",
"min 0.000000 0.420000 0.000000 0.000000 0.000000\n",
"25% 0.000000 20.125000 0.000000 0.000000 7.910400\n",
"50% 0.000000 28.000000 0.000000 0.000000 14.454200\n",
"75% 1.000000 38.000000 1.000000 0.000000 31.000000\n",
"max 1.000000 80.000000 8.000000 6.000000 512.329200"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Sex | \n",
" Port | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 891 | \n",
" 889 | \n",
"
\n",
" \n",
" unique | \n",
" 2 | \n",
" 3 | \n",
"
\n",
" \n",
" top | \n",
" male | \n",
" S | \n",
"
\n",
" \n",
" freq | \n",
" 577 | \n",
" 644 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Sex Port\n",
"count 891 889\n",
"unique 2 3\n",
"top male S\n",
"freq 577 644"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[['Sex', 'Port']].describe()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"# Fill not available observations\n",
"age_mean = df['Age'].mean()\n",
"df['Age'] = df['Age'].fillna(age_mean)\n",
"df['Port'] = df['Port'].fillna('S')"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Sex | \n",
" Port | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 891 | \n",
" 891 | \n",
"
\n",
" \n",
" unique | \n",
" 2 | \n",
" 3 | \n",
"
\n",
" \n",
" top | \n",
" male | \n",
" S | \n",
"
\n",
" \n",
" freq | \n",
" 577 | \n",
" 646 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Sex Port\n",
"count 891 891\n",
"unique 2 3\n",
"top male S\n",
"freq 577 646"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[['Sex', 'Port']].describe()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Some analysis plots"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(1, 1, figsize=(12, 5))\n",
"ax.axes.set_xlim(0, 80)\n",
"g = sns.distplot(df['Age'], color=\"b\", ax=ax)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false,
"scrolled": true,
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Draw a nested barplot to show survival for class and sex\n",
"g = sns.factorplot(x=\"Class\", y=\"Alive\", hue=\"Sex\", data=df, size=7, kind=\"bar\", palette=\"muted\")\n",
"g.set_ylabels(\"survival probability\")\n",
"g.set_xlabels(\"passenger class\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Fitting a simple predictive model"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.cross_validation import train_test_split\n",
"\n",
"# Define features and target variables\n",
"X = df.drop('Alive', axis=1)\n",
"y = df['Alive']\n",
"# Convert categories to integer values\n",
"X['Sex'] = X['Sex'].cat.codes\n",
"X['Port'] = X['Port'].cat.codes\n",
"# Convert to NumPy arrays\n",
"X = X.values\n",
"y = y.values"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"# Split the data into train and test sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [],
"source": [
"# Create and train the model\n",
"model = RandomForestClassifier(n_estimators = 100, random_state=0)\n",
"model.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false,
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Accuracy: 83.4%\n"
]
}
],
"source": [
"# Make some predictions on the test set and compare with the truth\n",
"preds = model.predict(X_test)\n",
"print(\"Accuracy: {:.1%}\".format(np.mean(preds == y_test)))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"And there is much, much more!
\n",
"
\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"## Additional libraries for Data Science\n",
"\n",
"#### Visualisation\n",
"* **Bokeh** allows interactive visualization like plots, dashboards in web browsers.\n",
"* **Pygal** for standard but sexy charts in SVG.\n",
"\n",
"#### High-performance computing\n",
"* **Theano** evaluate mathematical expressions involving multi-dimensional arrays efficiently.\n",
"* **Spark** is fast and general-purpose cluster computing system with PySpark as Python interface.\n",
"* **Cython** is an optimising static compiler for writing C-extensions in a Python-like language.\n",
"* **Dask** enables parallel computing through task scheduling and blocked algorithms (Out-of-Core).\n",
"* **TensorFlow** is a library for numerical computation using data flow graphs often used for AI.\n",
"\n",
"#### Miscellaneous\n",
"* **scikit-image** provides tools for image processing.\n",
"* **SQLAlchemy** is an SQL toolkit and Object Relational Mapper.\n",
"* **SymPy** is library for symbolic mathematics, i.e. computer algebra system like Maple.\n",
"* **PyMC** features Bayesian statistical models including Markov chain Monte Carlo.\n",
"* **NetworkX** for working with structure, dynamics, and functions of complex networks."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Questions?
\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"# Credits\n",
"\n",
"
\n",
"This presentation was inspired by:\n",
"\n",
"* [Savarin's PyCon UK Tutorial](http://nbviewer.jupyter.org/github/savarin/pyconuk-introtutorial/blob/master/notebooks/Section%201-1%20-%20Filling-in%20Missing%20Values.ipynb)\n",
"* [Thomas Wiecki's Introduction to Data Analysis with Python](http://nbviewer.jupyter.org/github/twiecki/pydata_ninja/blob/master/PyData%20Ninja.ipynb)\n",
"* [Kaggle's Titantic: Machine Learning from Disaster](https://www.kaggle.com/c/titanic/)"
]
},
{
"cell_type": "raw",
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"source": [
""
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}