Skip to content

Instantly share code, notes, and snippets.

@jbwhit
Created July 27, 2014 05:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jbwhit/9e92102baf89fca350cf to your computer and use it in GitHub Desktop.
Save jbwhit/9e92102baf89fca350cf to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"celltoolbar": "Slideshow",
"name": "",
"signature": "sha256:879fc67a3059d24726f684f5ce6e94e8db9474cf99e27d2143ce5b14293f9241"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import Image\n",
"Image(\"IPy_header.png\")"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"png": "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\n",
"prompt_number": 2,
"text": [
"<IPython.core.display.Image at 0x101e54150>"
]
}
],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Full-stack science workflow += the IPython notebook "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"My life trajectory (physically) so far: [http://bl.ocks.org/jbwhit/d03db0ca560da7c445f7](http://bl.ocks.org/jbwhit/d03db0ca560da7c445f7)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%run talktools"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"outputs": [
{
"html": [
"<style>\n",
"/*\n",
" Simple CSS styling for using IPython Notebooks for talks.\n",
"\n",
" Author: Fernando Perez <fernando.perez@berkeley.edu>\n",
"*/\n",
"\n",
".talk-title\n",
"{\n",
" color: #498AF3;\n",
" font-size: 220%;\n",
" font-weight:bold;\n",
" line-height: 1.2;\n",
" margin: 10px 50px 10px;\n",
" }\n",
"\n",
".talk-subtitle\n",
"{\n",
" color: #386BBC;\n",
" font-size: 150%;\n",
" font-weight:bold;\n",
" line-height: 1.2;\n",
" margin: 20px 50px 20px;\n",
" }\n",
"\n",
".slide-header, p.slide-header\n",
"{\n",
" color: #498AF3;\n",
" font-size: 180%;\n",
" font-weight:bold;\n",
" margin: 0px 20px 10px;\n",
" page-break-before: always;\n",
" text-align: center;\n",
" }\n",
"\n",
".rendered_html\n",
"{\n",
" color: #2C5494;\n",
" font-family: Ubuntu;\n",
" font-size: 170%;\n",
" line-height: 1.1;\n",
" margin: 0.5em 0;\n",
" }\n",
"\n",
".rendered_html h1\n",
"{\n",
" color: #498AF3;\n",
" line-height: 1.2;\n",
" margin: 0.15em 0em 0.5em;\n",
" page-break-before: always;\n",
" text-align: center;\n",
" }\n",
"\n",
"\n",
".rendered_html h2\n",
"{\n",
" color: #386BBC;\n",
" line-height: 1.2;\n",
" margin: 1.1em 0em 0.5em;\n",
" }\n",
"\n",
".rendered_html h3\n",
"{\n",
" font-size: 100%;\n",
" line-height: 1.2;\n",
" margin: 1.1em 0em 0.5em;\n",
" }\n",
"\n",
".rendered_html h5\n",
"{\n",
" font-size: 50%;\n",
" line-height: 1;\n",
" margin: 0.3em 0em 0.3em;\n",
" font-weight: bold;\n",
" text-align: center;\n",
" }\n",
"\n",
".rendered_html h6\n",
"{\n",
" font-size: 50%;\n",
" line-height: 1;\n",
" margin: 0.3em 0em 0.3em;\n",
" font-weight: normal;\n",
" text-align: center;\n",
" }\n",
"\n",
".rendered_html li\n",
"{\n",
" line-height: 1.8;\n",
" }\n",
"\n",
".input_prompt, .CodeMirror-lines, .output_area\n",
"{\n",
" font-family: Consolas;\n",
" font-size: 120%;\n",
" }\n",
"\n",
".gap-above\n",
"{\n",
" padding-top: 200px;\n",
" }\n",
"\n",
".gap01\n",
"{\n",
" padding-top: 10px;\n",
" }\n",
"\n",
".gap05\n",
"{\n",
" padding-top: 50px;\n",
" }\n",
"\n",
".gap1\n",
"{\n",
" padding-top: 100px;\n",
" }\n",
"\n",
".gap2\n",
"{\n",
" padding-top: 200px;\n",
" }\n",
"\n",
".gap3\n",
"{\n",
" padding-top: 300px;\n",
" }\n",
"\n",
".emph\n",
"{\n",
" color: #386BBC;\n",
" }\n",
"\n",
".strike\n",
"{\n",
" text-decoration:line-through;\n",
" color: #94B8F3;\n",
" }\n",
"\n",
".warn\n",
"{\n",
" color: red;\n",
" }\n",
"\n",
".center\n",
"{\n",
" text-align: center;\n",
" }\n",
"\n",
".nb_link\n",
"{\n",
" padding-bottom: 0.5em;\n",
"}\n",
"\n",
"</style>\n"
],
"metadata": {},
"output_type": "display_data",
"text": [
"<IPython.core.display.HTML at 0x107993e10>"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Plan B Career highlights\n",
" - 2005 Graduated from Vanderbilt University\n",
" - Majored in Physics, Mathematics, and Philosophy\n",
" - 2005--2011 University of California San Diego\n",
" - PhD in Physics\n",
" - 2011--2014 Postdoc at Swinburne University (working with Michael Murphy)\n",
" - 2014--? [http://insightdatascience.com/](Insight Data Science Fellowship) -> \"Silicon Valley Tech Industry\"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Where I started computer coding-wise\n",
"\n",
" - 2005 I started grad school (< 10 years)\n",
" - I knew essentially nothing about computers besides how to send an email.\n",
" - programmed about 100 lines in Mathematica\n",
" - Didn't know `cd` or `ls` never used linux\n",
" - 2006 \n",
" - Did 1 formal programming course \"Intro for engineers, C\"\n",
" - wrote first IDL program\n",
" - Couldn't figure out how to do a for-loop in IDL, so I wrote a compiled C program to write out the full IDL code\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Where I ended up in less than 10 years\n",
"\n",
" \n",
" - 2014\n",
" - created several python modules (installable via pip on command line).\n",
" - Submitted pull requests to open source astronomy library (astropy).\n",
" - Proponent of open science.\n",
" - Technical reviewer for programming books (Mastering Scipy).\n",
" - Accepted in to the Insight Data Science Fellowship."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## IPython notebook\n",
"\n",
"The ipython notebook runs a webserver locally on your computer. Which you connect to via your browser. The browser then runs a python kernel so you execute actual python code in your browser. \n",
"\n",
"This sounds like a gimmick. It is not.\n",
"\n",
"This presentation includes examples from many places, including a few from a talk that I gave with David Lagattuta at Swinburne last year. \n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Glimpse of the future\n",
"\n",
" ipython notebook + gist.github.com + nbviewer == easily shareable and reproducible work\n",
" \n",
"\n",
"### External Example of the future of science (hopefully) \n",
"\n",
"- Read interesting arxiv paper: [http://arxiv.org/abs/1303.2690](http://arxiv.org/abs/1303.2690)\n",
"- pdf -- discussion with advisor\n",
"- download notebook code + data; play with it.\n",
"- Paste your final notebook (text file) into a gist -> [http://gist.github.com](gist.github.com)\n",
"- Paste link into [http://nbviewer.ipython.org/](http://nbviewer.ipython.org/)\n",
"- nbviewer URL link -> [http://nbviewer.ipython.org/gist/jbwhit/effabf41318c61f69dcd](http://nbviewer.ipython.org/gist/jbwhit/effabf41318c61f69dcd)\n",
"\n",
"Email that link to anyone in the world who has a browser. No python, no ipython, nothing needs to be installed. The barrier to sharing the analysis here is about as close to zero as we can get. "
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Beginning notes\n",
"\n",
"First of all -- don't try to take notes, just let the amazing wash over you. \n",
"\n",
"Several Ideas and Themes\n",
"\n",
" 1. Challenge the way we do things being 'the obviously best way to do things'.\n",
" - There is a knee-jerk reaction, which is human as far as I can tell, that \"different\" feels bad and is resisted for emotional reasons. \n",
" - Why do software companies do pair coding? Jeffrey Dean and Sanjay Ghemawat?\n",
" - Why do they do Code Review?\n",
" - Why isn't \"how we do science\" actually tested in a scientific way? Seriously?\n",
" 1. Don't reinvent the wheel (too much).\n",
" - As Andrew Hopkins says, get a real sense of diminishing returns.\n",
" 1. Technical skills to learn that can help you massively.\n",
" - Workflow matters more than you suspect.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Beginning notes (2)\n",
" 1. Think about what you think science should be -- it's ultimately a social field and not static. \n",
" - Open code, open data, open **notebooks**.\n",
" - You help choose where it goes, so think carefully about what you're contributing.\n",
" - Not just data, or papers, or results, but the system that produces knowledge for the future.\n",
" - Glad to hear this HWWS:\n",
" - Brian Schmidt say that quality of papers and not total quantity\n",
" - Steven Tingay ask whether are citations the way to go?\n",
" - Amanda Bauer's quoting Einstein: \"Not everything that can be counted counts and not everything that counts can be counted.\"\n",
" 1. Examples of code, techniques and otherwise that I feel you will benefit from being exposed to. \n",
" 1. Example of my interview with Insight (how I got a Data Science 'job').\n",
" - Ask me back in a year how to be a successful Data Scientist!"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Starting Suggestions \n",
"\n",
" * Follow Aaron Robotham's advice: one interpreted (my advice: pick python), one fast.\n",
" * Get [github.com](http://github.com) account ([learn to use git](http://nbviewer.ipython.org/urls/github.com/fperez/reprosw/raw/master/Version%2520Control.ipynb) for version control) -- free open source hosting\n",
" * [https://store.continuum.io/cshop/anaconda/](https://store.continuum.io/cshop/anaconda/) -- current suggestion anaconda (I don't do it, but I've seen good luck). \n",
" * Get [stackoverflow.com](http://stackoverflow.com/) account \n",
" * Learn to ask/give good questions/answers\n",
" * My first question (4.5 years ago!): http://stackoverflow.com/questions/2031846/python-find-list-lengths-in-a-sublist\n",
" * My highest reputation question: http://stackoverflow.com/questions/6605006/convert-pdf-to-image-with-high-resolution\n",
" * Ex: http://stackoverflow.com/questions/14449753/make-longer-subplot-tick-marks-in-matplotlib#14449753\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Know your instrument\n",
"\n",
"As Steven said, it's important to know your instrument.\n",
"\n",
"- Learn a real editor (not just use)\n",
" - Unless you are already amazing at vim/emacs, go with something like Sublime Text 2. \n",
"- Use syntax highlighting.\n",
"- Learn bash\n",
"- Learn to watch yourself\n",
" - Make efficient those tasks that you repeatedly do.\n",
"\n",
"\n",
"Example -- bash and latex"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Plan B Jobs\n",
"\n",
" - get an online presence (github, stackoverflow, linkedin, etc.)\n",
" - Learn open/free technology that is used in industry\n",
" - python (or r) > idl\n",
" - git, github\n",
" - SQL\n",
" - Data visualization; Mike Bostock's [D3.js](http://bl.ocks.org/mbostock), public notebooks\n",
" - Actively work on your skills"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Create a [list] \n",
"days_of_the_week = ['Monday',\n",
" 'Tuesday',\n",
" 'Wednesday',\n",
" 'Thursday',\n",
" 'Friday',\n",
" 'Saturday',\n",
" 'Sunday', ]\n",
"\n",
"days_of_the_week"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 50,
"text": [
"['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']"
]
}
],
"prompt_number": 50
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Simple for-loop\n",
"for day in days_of_the_week:\n",
" print day"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Monday\n",
"Tuesday\n",
"Wednesday\n",
"Thursday\n",
"Friday\n",
"Saturday\n",
"Sunday\n"
]
}
],
"prompt_number": 51
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Double for-loop\n",
"for day in days_of_the_week:\n",
" for letter in day:\n",
" print letter,"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"M o n d a y T u e s d a y W e d n e s d a y T h u r s d a y F r i d a y S a t u r d a y S u n d a y\n"
]
}
],
"prompt_number": 52
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"for day in days_of_the_week:\n",
" for letter in day:\n",
" print letter.lower(),"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"m o n d a y t u e s d a y w e d n e s d a y t h u r s d a y f r i d a y s a t u r d a y s u n d a y\n"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"letters = [letter for day in days_of_the_week \n",
" for letter in day]\n",
"\n",
"\n",
"letters = [letter for day in days_of_the_week for letter in day]\n",
"print letters"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"['M', 'o', 'n', 'd', 'a', 'y', 'T', 'u', 'e', 's', 'd', 'a', 'y', 'W', 'e', 'd', 'n', 'e', 's', 'd', 'a', 'y', 'T', 'h', 'u', 'r', 's', 'd', 'a', 'y', 'F', 'r', 'i', 'd', 'a', 'y', 'S', 'a', 't', 'u', 'r', 'd', 'a', 'y', 'S', 'u', 'n', 'd', 'a', 'y']\n"
]
}
],
"prompt_number": 53
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sorted_letters = sorted([x.lower() for x in letters])\n",
"print sorted_letters"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'd', 'e', 'e', 'e', 'f', 'h', 'i', 'm', 'n', 'n', 'n', 'o', 'r', 'r', 'r', 's', 's', 's', 's', 's', 't', 't', 't', 'u', 'u', 'u', 'u', 'w', 'y', 'y', 'y', 'y', 'y', 'y', 'y']\n"
]
}
],
"prompt_number": 54
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"unique_sorted_letters = sorted(set(sorted_letters))\n",
"print \"There are\", len(unique_sorted_letters), \"unique letters in the days of the week.\"\n",
"print \"They are:\", ''.join(unique_sorted_letters)"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"There are 15 unique letters in the days of the week.\n",
"They are: adefhimnorstuwy\n"
]
}
],
"prompt_number": 55
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def first_three(input_string):\n",
" \"\"\"Takes an input string and returns the first 3 characters.\"\"\"\n",
" return input_string[:3]"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"prompt_number": 56
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"[first_three(day) for day in days_of_the_week]"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 57,
"text": [
"['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']"
]
}
],
"prompt_number": 57
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def last_N(input_string, number=2):\n",
" \"\"\"Takes an input string and returns the last N characters.\"\"\"\n",
" return input_string[-number:]"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"prompt_number": 58
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"[last_N(day, 153) for day in days_of_the_week if len(day) > 6]"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 61,
"text": [
"['Tuesday', 'Wednesday', 'Thursday', 'Saturday']"
]
}
],
"prompt_number": 61
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## But seriously list comprehensions are awesome"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from math import pi\n",
"\n",
"print [str(round(pi, i)) for i in xrange(2, 9)]"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"['3.14', '3.142', '3.1416', '3.14159', '3.141593', '3.1415927', '3.14159265']\n"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"list_of_lists = [[i, round(pi, i)] for i in xrange(2, 9)]\n",
"print list_of_lists"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[[2, 3.14], [3, 3.142], [4, 3.1416], [5, 3.14159], [6, 3.141593], [7, 3.1415927], [8, 3.14159265]]\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Do use python like python\n",
"\n",
"You know you're doing it wrong when it starts to look like C.\n",
"\n",
"\n",
"## Best practices \n",
"\n",
"There are generally good reasons that things become \"best practices\" -- and just because you don't see the reasons for it, doesn't mean you shouldn't adopt them. \n",
"\n",
"Style Guide for Python Code: http://www.python.org/dev/peps/pep-0008/"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Let this be a warning to you!\n",
"\n",
"# If you see python code like the following in your work:\n",
"\n",
"for x in range(len(list_of_lists)):\n",
" print \"Decimals:\", list_of_lists[x][0], \n",
" print \"expression:\", list_of_lists[x][1]\n",
" "
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Decimals: 2 expression: 3.14\n",
"Decimals: 3 expression: 3.142\n",
"Decimals: 4 expression: 3.1416\n",
"Decimals: 5 expression: 3.14159\n",
"Decimals: 6 expression: 3.141593\n",
"Decimals: 7 expression: 3.1415927\n",
"Decimals: 8 expression: 3.14159265\n"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Change it to look more like this: \n",
"\n",
"for decimal, rounded_pi in list_of_lists:\n",
" print \"Decimals:\", decimal, \"expression:\", rounded_pi\n",
" \n",
"print list_of_lists"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Decimals: 2 expression: 3.14\n",
"Decimals: 3 expression: 3.142\n",
"Decimals: 4 expression: 3.1416\n",
"Decimals: 5 expression: 3.14159\n",
"Decimals: 6 expression: 3.141593\n",
"Decimals: 7 expression: 3.1415927\n",
"Decimals: 8 expression: 3.14159265\n",
"[[2, 3.14], [3, 3.142], [4, 3.1416], [5, 3.14159], [6, 3.141593], [7, 3.1415927], [8, 3.14159265]]\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Learn about dictionaries\n",
"\n",
"You won't regret it. \n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Let's do something a bit more useful\n",
"\n",
"As scientists, we're often going to need to plot results and use numbers to do analysis. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# The following line is an ipython notebook trick\n",
"%matplotlib inline \n",
"\n",
"plt.rcParams['figure.figsize'] = 12, 8 # plotsize"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"prompt_number": 22
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = np.arange(10000)\n",
"\n",
"print \"x -> \", x # notice the smart printing\n",
"print \"x[:] -> \", x[:]\n",
"print \"x[0] -> \", x[0] # first element \n",
"print \"x[0:5] -> \", x[0:5] # first 5 elements\n",
"print \"x[-1] -> \", x[-1] # last element"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"x -> [ 0 1 2 ..., 9997 9998 9999]\n",
"x[:] -> [ 0 1 2 ..., 9997 9998 9999]\n",
"x[0] -> 0\n",
"x[0:5] -> [0 1 2 3 4]\n",
"x[-1] -> 9999\n"
]
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# A bit more complicated slicing\n",
"print x[-5:] # last five elements\n",
"print x[-5:-2] # \n",
"print x[-5:-1] # last 4 elements (not final value)"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"[9995 9996 9997 9998 9999]\n",
"[9995 9996 9997]\n",
"[9995 9996 9997 9998]\n"
]
}
],
"prompt_number": 24
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Single physical cloud with following physical parameters\n",
"def GaussFunc(x, amplitude, centroid, sigma):\n",
" \"\"\"Takes an array, and calculates a Gaussian with the following parameters. \"\"\"\n",
" return amplitude * np.exp(-0.5 * ((x - centroid) / sigma)**2)\n",
"\n",
"feature_centroid = 5315.3\n",
"feature_amplitude = 2.3\n",
"feature_sigma = 1.5\n",
"\n",
"wavelength = np.linspace(5305., 5330., 120)\n",
"tau = GaussFunc(wavelength, feature_amplitude, feature_centroid, feature_sigma)\n",
"\n",
"flux = np.exp(-tau)\n",
"sigma = 0.05\n",
"noise = np.random.randn(len(flux)) * sigma\n",
"observed = flux + noise\n",
"error = np.ones_like(wavelength) * sigma"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"prompt_number": 25
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"plt.plot(wavelength, flux) \n",
"plt.plot(wavelength, observed) "
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 26,
"text": [
"[<matplotlib.lines.Line2D at 0x104701b90>]"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x1079ac7d0>"
]
}
],
"prompt_number": 26
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"np.savetxt(\"example.txt\", np.transpose((wavelength, observed, flux, error, noise)))"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# np.random.randn?"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"prompt_number": 28
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%less example.txt"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"prompt_number": 29
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"wave = []\n",
"observed_flux = []\n",
"error = []\n",
"for line in open(\"example.txt\", 'r'):\n",
" wave.append(line[0])\n",
" observed_flux.append(line[1])\n",
" error.append(line[3])\n",
" \n",
"wave[:10] # Whoops! "
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 30,
"text": [
"['5', '5', '5', '5', '5', '5', '5', '5', '5', '5']"
]
}
],
"prompt_number": 30
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"wave = []\n",
"observed_flux = []\n",
"error = []\n",
"for line in open(\"example.txt\", 'r'):\n",
" line = line.split()\n",
" wave.append(line[0])\n",
" observed_flux.append(line[1])\n",
" error.append(line[3])\n",
" \n",
"wave[:10] # Dang! still strings!"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 31,
"text": [
"['5.305000000000000000e+03',\n",
" '5.305210084033613384e+03',\n",
" '5.305420168067226768e+03',\n",
" '5.305630252100840153e+03',\n",
" '5.305840336134453537e+03',\n",
" '5.306050420168066921e+03',\n",
" '5.306260504201680305e+03',\n",
" '5.306470588235293690e+03',\n",
" '5.306680672268907983e+03',\n",
" '5.306890756302521368e+03']"
]
}
],
"prompt_number": 31
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# If you see yourself doing this kind of thing... \n",
"\n",
"wave = []\n",
"observed_flux = []\n",
"error = []\n",
"\n",
"for line in open(\"example.txt\", 'r'):\n",
" line = line.split()\n",
" wave.append(float(line[0]))\n",
" observed_flux.append(float(line[1]))\n",
" error.append(float(line[3]))\n",
" \n",
"wave = np.array(wave)\n",
"observed_flux = np.array(observed_flux)\n",
"error = np.array(error)"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"prompt_number": 32
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Do this instead\n",
"wave, observed_flux, error = np.loadtxt(\"example.txt\", usecols=(0, 1, 3), unpack=True)"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"prompt_number": 33
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Special Plotting\n",
"\n",
"\n",
"Look at the matplotlib gallery: http://matplotlib.org/gallery.html and find plots that are similar to what you want to do.\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# Run this cell\n",
"%load http://matplotlib.org/mpl_examples/pylab_examples/polar_legend.py"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# And it loads the code here, ready to run (obviously without this comment). \n",
"\n",
"#!/usr/bin/env python\n",
"\n",
"import numpy as np\n",
"from matplotlib.pyplot import figure, show, rc\n",
"\n",
"# radar green, solid grid lines\n",
"rc('grid', color='#316931', linewidth=1, linestyle='-')\n",
"rc('xtick', labelsize=15)\n",
"rc('ytick', labelsize=15)\n",
"\n",
"# force square figure and square axes looks better for polar, IMO\n",
"fig = figure(figsize=(8,8))\n",
"ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c')\n",
"\n",
"r = np.arange(0, 3.0, 0.01)\n",
"theta = 2*np.pi*r\n",
"ax.plot(theta, r, color='#ee8d18', lw=3, label='a line')\n",
"ax.plot(0.5*theta, r, color='blue', ls='--', lw=3, label='another line')\n",
"ax.legend()\n",
"\n",
"show()\n"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Switch "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"Image(\"../../../../Screenshots/Screenshot 2014-07-18 14.51.30.png\")"
],
"language": "python",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"png": "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\nw3wI4QAIgAAIsEUAwsNWvGAtCIAACDBPAMLDfAjhAAiAAAiwRQDCw1a8YC0IgAAIME8AwsN8COEA\nCIAACLBFAMLDVrxgLQiAAAgwTwDCw3wI4QAIgAAIsEUAwsNWvGAtCIAACDBPAMLDfAjhAAiAAAiw\nRQDCw1a8YC0IgAAIME8AwsN8COEACIAACLBFAMLDVrxgLQiAAAgwTwDCw3wI4QAIgAAIsEUAwsNW\nvGAtCIAACDBPAMLDfAjhAAiAAAiwRQDCw1a8YC0IgAAIME8AwsN8COEACIAACLBFAMLDVrxgLQiA\nAAgwTwDCw3wI4QAIgAAIsEUAwsNWvGAtCIAACDBPAMLDfAjhAAiAAAiwRQDCw1a8YC0IgAAIME8A\nwsN8COEACIAACLBFAMLDVrxgLQiAAAgwTwDCw3wI4QAIgAAIsEUAwsNWvGAtCIAACDBPAMLDfAjh\nAAiAAAiwRQDCw1a8YC0IgAAIME8AwsN8COEACIAACLBFAMLDVrxgLQiAAAgwTwDCw3wI4QAIgAAI\nsEUAwsNWvGAtCIAACDBPAMLDfAjhAAiAAAiwRQDCw1a8YC0IgAAIME8AwsN8COEACIAACLBFAMLD\nVrxgLQiAAAgwTwDCw3wI4QAIgAAIsEUAwsNWvGAtCIAACDBPAMLDfAjhAAiAAAiwRQDCw1a8YC0I\ngAAIME8AwsN8COEACIAACLBFAMLDVrxgLQiAAAgwTwDCw3wI4QAIgAAIsEUAwsNWvGAtCIAACDBP\nAMLDfAjhAAiAAAiwRQDCw1a8YC0IgAAIME8AwsN8COEACIAACLBFAMLDVrxgLQiAAAgwTwDCw3wI\n4QAIgAAIsEUAwsNWvGAtCIAACDBPAMLDfAjhAAiAAAiwRQDCw1a8YC0IgAAIME8AwsN8COEACIAA\nCLBFAMLDVrxgLQiAAAgwTwDCw3wI4QAIgAAIsEUAwsNWvGAtCIAACDBPAMLDfAjhAAiAAAiwRQDC\nw1a8YC0IgAAIME8AwsN8COEACIAACLBFAMLDVrxgLQiAAAgwTwDCw3wI4QAIgAAIsEUAwsNWvGAt\nCIAACDBPAMLDfAjhAAiAAAiwRQDCw1a8YC0IgAAIME8AwsN8COEACIAACLBFAMLDVrxgLQiAAAgw\nTwDCw3wI4QAIgAAIsEUAwsNWvGAtCIAACDBPAMLDfAjhAAiAAAiwRQDCw1a8YC0IgAAIME8AwsN8\n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\n",
"prompt_number": 42,
"text": [
"<IPython.core.display.Image at 0x107971d10>"
]
}
],
"prompt_number": 42
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "skip"
}
},
"source": [
"[http://jupyter.org/](http://jupyter.org/)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Final Thoughts\n",
"\n",
"- Think about what you do (especially what you repeatedly do)\n",
"- Reproducible science\n",
" - ipython notebook or otherwise\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Come talk with me\n",
"\n",
"Jonathan Whitmore \n",
" - Twitter: [@jbwhitmore](https://twitter.com/jbwhitmore)\n",
" - email: [jbwhit@gmail.com](mailto:jbwhit@gmail.com)\n",
" - [JonathanWhitmore.com](http://JonathanWhitmore.com)\n",
" - [github.com/jbwhit](https://github.com/jbwhit)\n",
" - [stackoverflow.com/users/246856/jbwhitmore](http://stackoverflow.com/users/246856/jbwhitmore)\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 39
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment