Skip to content

Instantly share code, notes, and snippets.

@audy
Created April 9, 2014 12:04
Show Gist options
  • Save audy/10261319 to your computer and use it in GitHub Desktop.
Save audy/10261319 to your computer and use it in GitHub Desktop.
error propagation using Pandas and Uncertainties
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:ab6ce9cbe901db3eec3dc433d1af6a96856eb3c3a8b12efa704a7cc15091395a"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# The Uncertain Panda\n",
"\n",
"_by Austin Davis-Richardson_\n",
"\n",
"- [Uncertainties](http://pythonhosted.org//uncertainties/) is a Python library for performing calculations that take into account propagation of error using error theory.\n",
"\n",
"- [Pandas](http://pandas.pydata.org/) is a library for analysis of data. You can directly use Uncertanties with Pandas to do data analysis and take into account error."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Demo"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Setup"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# importing things\n",
"import uncertainties as un\n",
"import pandas as pd"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Uncertainties"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# you can create an uncertain float like this:\n",
"\n",
"x = un.ufloat(5, 0.1) # 0.1 is the error\n",
"\n",
"# you can then do math taking error into account\n",
"\n",
"print x + x\n",
"print x ** 2\n",
"print x + 5"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"10.00+/-0.20\n",
"25.0+/-1.0\n",
"10.00+/-0.10\n"
]
}
],
"prompt_number": 29
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Uncertainties + Pandas"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# generate some data\n",
"x = [ un.ufloat(i, .1) for i in range(0, 10) ]"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 33
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Create a Pandas DataFrame\n",
"df = pd.DataFrame.from_dict({'x': x })\n",
"df"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>x</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td> 0.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td> 1.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td> 2.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td> 3.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td> 4.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td> 5.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td> 6.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td> 7.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td> 8.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td> 9.00+/-0.10</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10 rows \u00d7 1 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 34,
"text": [
" x\n",
"0 0.00+/-0.10\n",
"1 1.00+/-0.10\n",
"2 2.00+/-0.10\n",
"3 3.00+/-0.10\n",
"4 4.00+/-0.10\n",
"5 5.00+/-0.10\n",
"6 6.00+/-0.10\n",
"7 7.00+/-0.10\n",
"8 8.00+/-0.10\n",
"9 9.00+/-0.10\n",
"\n",
"[10 rows x 1 columns]"
]
}
],
"prompt_number": 34
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Do some calculations"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df * df"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>x</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td> 0.0+/-0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td> 1.00+/-0.20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td> 4.0+/-0.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td> 9.0+/-0.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td> 16.0+/-0.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td> 25.0+/-1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td> 36.0+/-1.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td> 49.0+/-1.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td> 64.0+/-1.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td> 81.0+/-1.8</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10 rows \u00d7 1 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 18,
"text": [
" x\n",
"0 0.0+/-0\n",
"1 1.00+/-0.20\n",
"2 4.0+/-0.4\n",
"3 9.0+/-0.6\n",
"4 16.0+/-0.8\n",
"5 25.0+/-1.0\n",
"6 36.0+/-1.2\n",
"7 49.0+/-1.4\n",
"8 64.0+/-1.6\n",
"9 81.0+/-1.8\n",
"\n",
"[10 rows x 1 columns]"
]
}
],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df ** 2"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>x</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td> 0.0+/-0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td> 1.00+/-0.20</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td> 4.0+/-0.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td> 9.0+/-0.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td> 16.0+/-0.8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td> 25.0+/-1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td> 36.0+/-1.2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td> 49.0+/-1.4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td> 64.0+/-1.6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td> 81.0+/-1.8</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10 rows \u00d7 1 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 19,
"text": [
" x\n",
"0 0.0+/-0\n",
"1 1.00+/-0.20\n",
"2 4.0+/-0.4\n",
"3 9.0+/-0.6\n",
"4 16.0+/-0.8\n",
"5 25.0+/-1.0\n",
"6 36.0+/-1.2\n",
"7 49.0+/-1.4\n",
"8 64.0+/-1.6\n",
"9 81.0+/-1.8\n",
"\n",
"[10 rows x 1 columns]"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df + 5"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>x</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td> 5.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td> 6.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td> 7.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td> 8.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td> 9.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td> 10.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td> 11.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td> 12.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td> 13.00+/-0.10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td> 14.00+/-0.10</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10 rows \u00d7 1 columns</p>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 35,
"text": [
" x\n",
"0 5.00+/-0.10\n",
"1 6.00+/-0.10\n",
"2 7.00+/-0.10\n",
"3 8.00+/-0.10\n",
"4 9.00+/-0.10\n",
"5 10.00+/-0.10\n",
"6 11.00+/-0.10\n",
"7 12.00+/-0.10\n",
"8 13.00+/-0.10\n",
"9 14.00+/-0.10\n",
"\n",
"[10 rows x 1 columns]"
]
}
],
"prompt_number": 35
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ERROR PROPAGATION!\n",
"\n",
"The End."
]
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment