├── notes └── pandas │ ├── .ipynb_checkpoints │ ├── Notes On Pandas-checkpoint.ipynb │ └── 1. Basics-checkpoint.ipynb │ └── Notes On Pandas.ipynb ├── Planning.md └── README.md /notes/pandas/.ipynb_checkpoints/Notes On Pandas-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [], 3 | "metadata": {}, 4 | "nbformat": 4, 5 | "nbformat_minor": 1 6 | } 7 | -------------------------------------------------------------------------------- /Planning.md: -------------------------------------------------------------------------------- 1 | ## What Software Engineering Principle Do You Want To Learn Through Python? 2 | 3 | * [Software Development Skills For Data Scientists] 4 | 5 | * Writing modular, reusable code 6 | * Documenting / Commenting 7 | * Version Control - Git 8 | * Testing 9 | * Logging 10 | 11 | ## Estimate Time Required To Achieve Goal 12 | 13 | I will give myself the whole 2016-Q4 to work on this goal. It seems like a long time, but effectively, I have only 8 weeks left (as of 2016-10-08) because of Open, Thanksgiving, and Christmas. 14 | 15 | **Timeframe**: Efficiency parity by end of October. One contribution to Airpy by Mid November. One ongoing big project touching different stacks in Python by the end of 2016. 16 | 17 | ## Break Down Work Into A Week-by-week Schedule 18 | 19 | * **Week of 8/8 - 8/14**: Start watching Stanford CS 41 20 | * **Week of 8/15 - 8/20**: Finished Stanford CS 41 + started Data School Pandas videos 21 | * **Week of 8/21 - 8/28**: Detour to watch Tom Augspurgur's Pydata video 22 | * **Week of 8/29 - 9/4**: Birthday week 23 | * **Week of 9/5 - 9/11**: Start reading Idiomatic Python + Finished Data School Pandas videos series 24 | * **Week of 9/12 - 9/18**: Start reading "Python Data Analysis" by Wes Mckinney 25 | * **Week of 9/19 - 9/25**: Start practicing Python on the job (calculating cohort size from lead ranking) 26 | * **Week of 9/26 - 10/2**: Continue to practice Python on the job (variable transformation model) + Data School Machine Learning videos. This is one of the best examples of learning on the job with Python. 27 | * **Week of 10/3 - 10/9**: Built a simple data visualization of demand index using Python's Bokeh library + Finished Data School ML videos 28 | * **Week of 10/10 - 10/16**: Continue to play with Bokeh, made slider (interactivity) worked, and made animation of world demand viz worked. A bit reading on command line in Python 29 | * **Week of 10/17 - 10/23**: Practice with writing a simple Python parser for excel to get event annotation. Made timeseries and interactivity worked. Started reading Python OOP articles 30 | * **Week of 10/24 - 10/30**: Simeon Franklin's OOP class - first part 31 | * **Week of 10/31 - 11/4**: Simeon Franklin's OOP class - second part (less useful) 32 | * **Week of 11/7 - 11/11**: BIDS video on OOP + Coursera's Introduction to DS in Python Class + Chris Albon's notes + Heroku Deployment of Airbnb-open-data-viz app 33 | * **Week of 11/14 - 11/18**: (Airbnb Open - Half week) Start building First Stage Model for LTV project in Python + [Pandas Plotting Documentation] + BIDS: Scipy Pandas + Scientific Workflow in Python (both are marginally helpful) 34 | * **Week of 11/21 - 11/25**: (Thanksgiving - Half week) On the Job learning for scikit-learn (pipeline, learning curve) + BIDS matplotlib review + Data School: writing pythonic code + Test Driven Development for Scientist blog post 35 | * **Week of 11/28 - 12/2**: BIDS Ipython notebook, BIDS functions/modules, BIDS: advanced string, BIDS testing driven development, Jeff Knupp's Unit Testing, Software Carpentry on Testing with Python 36 | * **Week of 12/5 - 12/9**: BIDS Numpy, BIDS Advanced Interaction, Simeon Franklin's higher order function, Jeff Knupp's "improve your python series": yield/generator, decorator, drastically improve python understanding of execution code, loop like a native (really good) 37 | * **Week of 12/12 - 12/16**: During the weekend (12/9), add more newer topics (logging, command-line tool, and building packages) for 2017. No active learning for this week, but wrap up by reviewing materials for a blog post 38 | 39 | [Software Development Skills For Data Scientists]: http://treycausey.com/software_dev_skills.html 40 | [Pandas Plotting Documentation]:http://pandas.pydata.org/pandas-docs/version/0.18.1/visualization.html 41 | -------------------------------------------------------------------------------- /notes/pandas/Notes On Pandas.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Notes On Pandas" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## [Selection](http://pandas.pydata.org/pandas-docs/stable/cookbook.html#selection)\n", 15 | "\n", 16 | "- Use `.loc[row_lables, column_labels]` for [label-based indexing](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html)\n", 17 | "- Use `.iloc[row_positions, column_positions]` for [positional indexing](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iloc.html)\n", 18 | "- Use `.ix` to [mix label-based and positional index](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.ix.html)\n", 19 | "\n", 20 | "Explicit is better than implicit, so when using `.loc` and `.iloc`, always use `[ row_indices , column_indicies ]` accordingly" 21 | ] 22 | }, 23 | { 24 | "cell_type": "markdown", 25 | "metadata": {}, 26 | "source": [ 27 | "## Index\n", 28 | "\n", 29 | "`Index`es are something of a peculiarity to pandas.\n", 30 | "First off, they are not the kind of indexes you'll find in SQL, which are used to help the engine speed up certain queries.\n", 31 | "\n", 32 | "In pandas, `Index`es are about lables. This helps with selection (like we did above) and automatic alignment when performing operations between two `DataFrame`s or `Series`.\n", 33 | "\n", 34 | "R does have row labels, but they're nowhere near as powerful (or complicated) as in pandas. You can access the index of a `DataFrame` or `Series` with the `.index` attribute." 35 | ] 36 | }, 37 | { 38 | "cell_type": "markdown", 39 | "metadata": {}, 40 | "source": [ 41 | "#### Basic Operations\n", 42 | "\n", 43 | "`df.index`\n", 44 | "\n", 45 | "[`df.set_index`](http://pandas.pydata.org/pandas-docs/stable/indexing.html#set-an-index)\n", 46 | "\n", 47 | "[`df.reset_index`](http://pandas.pydata.org/pandas-docs/stable/indexing.html#reset-the-index)\n", 48 | "\n", 49 | "`df.sort_index`" 50 | ] 51 | }, 52 | { 53 | "cell_type": "markdown", 54 | "metadata": {}, 55 | "source": [ 56 | "#### Boolean indexing\n", 57 | "\n", 58 | "Like a where clause in SQL. The indexer (or boolean mask) should be 1-dimensional and the same length as the thing being indexed." 59 | ] 60 | }, 61 | { 62 | "cell_type": "markdown", 63 | "metadata": {}, 64 | "source": [ 65 | "## GROUP BY\n", 66 | "Groupby is a fundamental operation to pandas and data analysis.\n", 67 | "\n", 68 | "The components of a groupby operation are to\n", 69 | "\n", 70 | "1. Split a table into groups\n", 71 | "2. Apply a function to each groups\n", 72 | "3. Combine the results\n", 73 | "\n", 74 | "In pandas the first step looks like\n", 75 | "\n", 76 | "```python\n", 77 | "df.groupby( grouper )\n", 78 | "```\n", 79 | "\n", 80 | "`grouper` can be many things\n", 81 | "\n", 82 | "- Series (or string indicating a column in `df`)\n", 83 | "- function (to be applied on the index)\n", 84 | "- dict : groups by *values*\n", 85 | "- `levels=[]`, names of levels in a MultiIndex" 86 | ] 87 | }, 88 | { 89 | "cell_type": "markdown", 90 | "metadata": {}, 91 | "source": [ 92 | "After the group by, you can apply aggregation function, typically, you can:\n", 93 | "\n", 94 | "* `df.groupby(grouper).column.`: this will only aggregte on a single column using a single agg function\n", 95 | "* `df.groupby(grouper).`: this will apply the same aggregation function to all columns\n", 96 | "* `df.groupby(grouper).column.agg(['agg_func_1', 'agg_func_2'...])`: this will only aggregate on a single column, but return multiple columns using different aggregation\n", 97 | "* `df.groupby(grouper).agg(['agg_func_1', 'agg_func_2'...])`: this will apply to all columns, several aggregation functions for each column (multi-column-index)" 98 | ] 99 | }, 100 | { 101 | "cell_type": "markdown", 102 | "metadata": {}, 103 | "source": [ 104 | "## Tidy Data\n", 105 | "\n", 106 | "### The Rules\n", 107 | "\n", 108 | "In a tidy dataset...\n", 109 | "\n", 110 | "1. Each variable forms a column\n", 111 | "2. Each observation forms a row\n", 112 | "3. Each type of observational unit forms a table\n", 113 | "\n", 114 | "We'll cover a few methods that help you get there." 115 | ] 116 | }, 117 | { 118 | "cell_type": "markdown", 119 | "metadata": {}, 120 | "source": [ 121 | "### Stack / Unstack\n", 122 | "* melt / stack: wide to long\n", 123 | "* pivot_table / unstack: long to wide" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": null, 129 | "metadata": { 130 | "collapsed": true 131 | }, 132 | "outputs": [], 133 | "source": [] 134 | } 135 | ], 136 | "metadata": { 137 | "kernelspec": { 138 | "display_name": "Python 2", 139 | "language": "python", 140 | "name": "python2" 141 | }, 142 | "language_info": { 143 | "codemirror_mode": { 144 | "name": "ipython", 145 | "version": 2 146 | }, 147 | "file_extension": ".py", 148 | "mimetype": "text/x-python", 149 | "name": "python", 150 | "nbconvert_exporter": "python", 151 | "pygments_lexer": "ipython2", 152 | "version": "2.7.10" 153 | } 154 | }, 155 | "nbformat": 4, 156 | "nbformat_minor": 1 157 | } 158 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > ⚠️ **Note as of 2025-04-13:** This repository contains outdated material. 2 | > The so-called "language war" in data science has largely settled. While R remains a strong tool for statistical analysis, Python has surged in popularity and now dominates the ETL, machine learning, and AI space. 3 | > 4 | > I haven't updated this repository in years, and many of the links may be broken or no longer accessible. While the general learning progression for Python here might still be useful, there are far better and more up-to-date resources available: 5 | > 6 | > - [Full Stack Python](https://www.fullstackpython.com/) 7 | > - [ArjanCodes on YouTube](https://www.youtube.com/arjancodes) 8 | > - [Real Python](https://realpython.com/) 9 | > 10 | > In the era of ChatGPT, I also recommend using it as a pair programmer to rapidly level up your Python skills. 11 | 12 | # Python Deliberate Practice 13 | 14 | First of all, don't be afraid, read [Plateau of Productivity]. More importantly, be patient, a good read from Peter Norvig, titled [Teach Yourself Programming in 10 years]. 15 | 16 | ## Motivation 17 | 18 | [Language war] between Python and R is one of the most frequently discussed topics among the Data Scientists, and there doesn't seem to be a consensus on which one is better. Personally, I used both R and Python, but for very different purposes. I mainly use tidyverse packages (dplyr + ggplot2) to carry out data analyses and data visualization, while using Python for web scraping, task automations, and building [basic web applications in Flask]. 19 | 20 | By now, I have a pretty good working knowledge of the R language. There are obviously many more things that I can learn - in particular building and maintaining R packages as well as more [advanced R materials]. Yet, the appeal of Python has always been there for me for a few reasons: 21 | 22 | * It's a general purpose programming language, so presumably it is a lot easier to learn good software engineering principles. (What are they though?) 23 | * Many of the [data stacks] are built using the tools in the Python ecosystem (ETL using Airflow, Front-end using Flask with RESTful API supports, Machine Learning using scikit-learn) - being able to use the same language for different parts of the data stack will bring prototypes closer to production. 24 | 25 | To me, the appeal of Python is not necessarily the Data Analysis part, R is already doing a great job on this. Rather, the appeal of using Python for data work is that you have a higher chance to see how data plays a role within the whole integrated technology stack. Knowing Python is likely to make me a better **end-to-end** Data Scientist and better Software Engineer. 26 | 27 | Here is a great [reddit answer] that explains the intersection and disjoint union of the two languages beautifully. 28 | 29 | ## Deliberate Practice 30 | 31 | I am a huge believer in learning by doing, and there are a lot of opportunities on the job where I can hone my Python skills through Deliberate Practice: 32 | 33 | * **Identify the Top Performers**: I think there are quite a few people at Work (e.g. Dan F.) who can really be a role model for me to follow. Understand what they've been through to get to where they are today. What is their mental representation that I do not have about Python. 34 | 35 | * **Build Practice Plans**: Ideally, based on the rough understanding of that mental representation: 36 | 37 | * Define clear goals and select learning materials 38 | * Create deadline and milestones for the project 39 | * Estimate time required and come up weekly schedules 40 | 41 | Augment these insights with your current level of mental representation of Python to improve your understanding. 42 | 43 | * **Targeted Practice**: If I force myself to switch over to Python for Data Analysis, Data visualization, Modeling, or contribute to our internal Python Data Analysis packages, I can maximize my time practicing this skill, which is high leverage. 44 | 45 | * **Immediate Feedbacks**: We have a culture of code reviews, both for IC work as well as internal package work. The former is harder because most DS on our team are in the R camp. There's also the weekly Python office hours that should be very useful. Find constant opportunities to get feedback as much as you can. 46 | 47 | ## Performance Goals 48 | 49 | * **[Immediate]** Learn to write pythonic code 50 | * **[Shorter term, easiest to practice]** Write re-usable, modular, tested code for my data work and knowledge posts 51 | * **[Medium term, harder to practice]** Achieve efficiency and feature parity on Data Analysis using Python compared to R 52 | * **[Longer term, hardest to practice]** Write tools. Being able to work on projects that span the entire data stack using Python, apply good software engineering principles to these projects 53 | 54 | ## Project Goals 55 | 56 | * **Outcome**: I want to move my data stack to Python completely. This means my day-to-day data analysis work will be done in Python instead of R, make my code as pythonic as possible. Become a Contributor to Airpy / tools, and take on one bigger Python project (ML, Data Viz ...etc). 57 | 58 | * **Curriculum**: I want do everything that I can to go through all the basic materials in Pandas/Matplotlib combo. Expose myself to functional programming, OOP, testing in Python, or even making command tools. Get feedbacks from Airpy team members. 59 | 60 | * **Timeframe**: Efficiency parity by end of October. One contribution to Airpy by Mid November. One ongoing big project touching different stacks in Python by the end of 2016. 61 | 62 | ## Project Milestones 63 | 64 | * **Learning Python & Best Practices** 65 | * [Build On Top of the Basics: Python Progression] 66 | * [Drastically Improve Your Understanding: Jeff Knupp: Python's Execution Mode] 67 | * [Nate Batchelder: Loop like a native] 68 | * [Columbia Data Scientist Style Guide] 69 | 70 | * **Writing Pythonic Code** 71 | * Guidelines For Writing Pythonic Code 72 | * Function: Use *args and **kwargs to accept arbitrary arguments in function definition 73 | * Tuples: effective unpacking, use _ for placeholder, swap values without tmp variables 74 | * List/Dict/Set: list comprehension, dict comprehension. dict.get, set comprehension 75 | * Strings: use .format, use .join 76 | * Classes: use __ __ in function and variable name to mark private variables 77 | * Generator: use generator to lazily load a infinite sequence 78 | * Modules: writing modules for encapsulation 79 | * Formatting: pep8 standards 80 | * Executable script: __name__ = __main__ 81 | * Import: The right way to do imports 82 | * [Writing Idiomatic Python - Jeff Knupp] 83 | * [Stanford CS 41: Idiomatic Python] 84 | * [Another Tutorial On How To Write Pythonic Code] 85 | 86 | * **iPython Notebook** 87 | 88 | * [BIDS: Python Bootcamp: IPython Notebook] 89 | * [Jupyter Notebook tips, tricks and shortcuts] 90 | * [iPython Notebook Keybinding] 91 | 92 | * **Pandas For Data Analysis** 93 | 94 | * Introduction to Numpy 95 | * [BIDS: Python Bootcamp: Intro to Numpy] 96 | * [Stanford ICME 193: Scientific Python] 97 | 98 | * Introduction to Pandas 99 | * [Dplyr/pandas Vignette Comparison] 100 | * [Data School Pandas Tutorials] 101 | * [Data School Pandas Github iPython notebook] 102 | * [More Pandas Questions Answered] 103 | * [Other Resources] 104 | * [Brandon Rhode's Pandas From The Groud Up] 105 | * [Tom Augspurgur: Pandas] 106 | * [BIDS: Python Bootcamp: Scipy Pandas] 107 | * [Coursera: Introduction to Data Science in Python] 108 | * [Chris Albon's notes] 109 | 110 | * **Data Visualization** 111 | 112 | * [BIDS: Python Bootcamp: Intro to Matplotlib]: The 800 pound gorilla, everything is customizable, but very low level 113 | * [Seaborn]: Good for statistical visualization. I still find it a bit limited on the type of simple plots it can do 114 | * [Bokeh]: Interactive, web browser base data visualization 115 | * [A Dramatic Tour through Python’s Data Visualization Landscape (including ggplot and Altair)] 116 | 117 | * **Writing Object Oriented Programming Python Code** 118 | 119 | * [Computational Biology: OOP For Scientist] 120 | * [Improve Your Python: Jeff Knupp: OOP] 121 | * [BIDS: Python Bootcamp: OOP] 122 | * Simeon Franklin's Twitter University Class (not available to the public) 123 | 124 | * **Writing Functional Programming Python Code** 125 | 126 | * [Simeon Franklin's higher order function] 127 | * [BIDS: Python Bootcamp: Higher order functions] 128 | * [Improve Your Python: Jeff Knupp: Yield & Generator Explained] 129 | * [Improve Your Python: Jeff Knupp: Decorator Explained] 130 | * [Improve Your Python: Jeff Knupp: Context Manager] 131 | 132 | * **Machine Learning In Python** 133 | * [Scikit-learn Machine Learning Library] 134 | * [Scikit-learn metrics] 135 | * [Scikit-learn Pipeline] 136 | 137 | * **Testing In Python** 138 | 139 | * [Computational Biology: Four Tools For Testing Your Python Code] 140 | * [Computational Biology: Testing For Scientist] 141 | * [Improve Your Python: Jeff Knupp: Understanding Unit Testing] 142 | * [BIDS: Python Bootcamp: Test Driven Development] 143 | * [Software Carpentry: Testing] 144 | 145 | ## Next Steps / Level In 2017 146 | 147 | Once mastered all the above, the next natural step is to create public work that other people can use so you can democratize your useful tool to others. A great introduction to how to get started is from Tim Hopper's talk, titled [Sharing Your Side Projects]. 148 | 149 | * **Logging In Python (Next Year?)** 150 | * [Basic Python Logging - Code Session] 151 | * [Logging HOWTO] 152 | * [Become A Logging Expert In 30 Minutes] 153 | 154 | * **Writing Command-Line Tool (Next Year?)** 155 | * [Click Documentation] 156 | * [Writing A Command-Line Tool In Python] 157 | 158 | * **Building Packages In Python (Next Year?)** 159 | * [Computational Biology: Using Cookiecutter To Set Up A Project] 160 | * [Computational Biology: Creating A Clean Pytyon Development Environment] 161 | * [Computational Biology: How To Generate Beautiful Technical Documentation] 162 | * [Computational Biology: Five Steps To Add The Bling Factor Your Python Package] 163 | 164 | 165 | ## Reference 166 | 167 | * [Python Tutor Visualizer] 168 | * [Python For Data Analysis] 169 | * [Stanford CS 41: Python] 170 | * [Berkeley CS 88: Python Data Structure] 171 | * [Harvard CS 109: Data Science] 172 | * [Berkeley BIDS Python bootcamp] 173 | * [Josh Bloom's Python Computing For Data Science] 174 | * [Writing Idiomatic Python - Jeff Knupp] 175 | * [Another Tutorial On How To Write Pythonic Code] 176 | * [Pandas Cookbook] 177 | * [Udemy course] 178 | 179 | [Teach Yourself Programming in 10 years]:http://norvig.com/21-days.html 180 | [Plateau of Productivity]:http://pbpython.com/plateau-of-productivity.html 181 | 182 | [reddit answer]:https://www.reddit.com/r/Python/comments/2tkkxd/considering_putting_my_efforts_into_python/ 183 | [Language war]:http://www.dataschool.io/python-or-r-for-data-science/ 184 | [advanced R materials]:http://adv-r.had.co.nz/ 185 | [basic web applications in Flask]:https://github.com/robert8138/flask-google-calendar-api-project 186 | [data stacks]:https://lab.getbase.com/productive-data-science-python/ 187 | 188 | [Build On Top of the Basics: Python Progression]:http://stackoverflow.com/questions/2573135/python-progression-path-from-apprentice-to-guru 189 | [Drastically Improve Your Understanding: Jeff Knupp: Python's Execution Mode]:https://www.jeffknupp.com/blog/2013/02/14/drastically-improve-your-python-understanding-pythons-execution-model/ 190 | [Nate Batchelder: Loop like a native]:https://www.youtube.com/watch?time_continue=14&v=EnSu9hHGq5o 191 | [Columbia Data Scientist Style Guide]:http://columbia-applied-data-science.github.io/pages/lowclass-python-style-guide.html 192 | 193 | [Writing Idiomatic Python - Jeff Knupp]:https://jeffknupp.com/writing-idiomatic-python-ebook/ 194 | [Stanford CS 41: Idiomatic Python]:https://drive.google.com/file/d/0B-eHIhYpHrGDNGZCYUN6SVB1OGc/view 195 | [Another Tutorial On How To Write Pythonic Code]:http://safehammad.com/downloads/python-idioms-2014-01-16.pdf 196 | 197 | [BIDS: Python Bootcamp: IPython Notebook]:https://www.youtube.com/watch?v=HrylK8I1ALs&index=3&list=PLKW2Azk23ZtSeBcvJi0JnL7PapedOvwz9 198 | [Jupyter Notebook tips, tricks and shortcuts]:https://www.dataquest.io/blog/jupyter-notebook-tips-tricks-shortcuts/ 199 | [iPython Notebook Keybinding]:https://www.webucator.com/blog/wp-content/uploads/2015/07/IPython-Notebook-Shortcuts.pdf 200 | 201 | [BIDS: Python Bootcamp: Intro to Numpy]:https://www.youtube.com/watch?v=PDOsOcG0m-Q 202 | [Stanford ICME 193: Scientific Python]:http://stanford.edu/~arbenson/cme193.html 203 | [Dplyr/pandas Vignette Comparison]:http://nbviewer.jupyter.org/gist/TomAugspurger/6e052140eaa5fdb6e8c0 204 | [Data School Pandas Tutorials]:http://www.dataschool.io/easier-data-analysis-with-pandas/ 205 | [Data School Pandas Github iPython notebook]:https://github.com/justmarkham/pandas-videos 206 | [More Pandas Questions Answered]:https://www.youtube.com/watch?v=CWRKgBtZN18&list=PL5-da3qGB5ICCsgW1MxlZ0Hq8LL5U3u9y&index=31 207 | [Other Resources]:http://www.dataschool.io/best-python-pandas-resources/ 208 | [Brandon Rhode's Pandas From The Groud Up]:https://www.youtube.com/watch?v=5JnMutdy6Fw 209 | [Tom Augspurgur: Pandas]:https://www.youtube.com/watch?v=otCriSKVV_8 210 | [BIDS: Python Bootcamp: Scipy Pandas]:https://www.youtube.com/watch?v=bgIZAeNpL1U 211 | [Coursera: Introduction to Data Science in Python]:https://www.coursera.org/learn/python-data-analysis/home/welcome 212 | [Chris Albon's notes]:http://chrisalbon.com/ 213 | 214 | [BIDS: Python Bootcamp: Intro to Matplotlib]:https://www.youtube.com/watch?v=j5P822TSCKs 215 | [Seaborn]:https://stanford.edu/~mwaskom/software/seaborn/ 216 | [Bokeh]:http://bokeh.pydata.org/en/latest/ 217 | [A Dramatic Tour through Python’s Data Visualization Landscape (including ggplot and Altair)]:https://dansaber.wordpress.com/2016/10/02/a-dramatic-tour-through-pythons-data-visualization-landscape-including-ggplot-and-altair/ 218 | 219 | [Computational Biology: OOP For Scientist]:http://tjelvarolsson.com/blog/object-oriented-programming-for-scientists/ 220 | [Improve Your Python: Jeff Knupp: OOP]:https://jeffknupp.com/blog/2014/06/18/improve-your-python-python-classes-and-object-oriented-programming/ 221 | [BIDS: Python Bootcamp: OOP]:https://www.youtube.com/watch?v=HQ0q6oMpOEs 222 | 223 | [Simeon Franklin's higher order function]:http://simeonfranklin.com/blog/2013/jun/17/higher-order-functions-python/ 224 | [BIDS: Python Bootcamp: Higher order functions]:https://www.youtube.com/watch?v=ob797BA49ZQ 225 | [Improve Your Python: Jeff Knupp: Yield & Generator Explained]:https://jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/ 226 | [Improve Your Python: Jeff Knupp: Decorator Explained]:https://jeffknupp.com/blog/2013/11/29/improve-your-python-decorators-explained/ 227 | [Improve Your Python: Jeff Knupp: Context Manager]:https://jeffknupp.com/blog/2016/03/07/improve-your-python-the-with-statement-and-context-managers/ 228 | 229 | [Scikit-learn Machine Learning Library]:http://www.dataschool.io/machine-learning-with-scikit-learn/ 230 | [Scikit-learn metrics]:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics 231 | [Scikit-learn Pipeline]:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.pipeline 232 | 233 | [Computational Biology: Four Tools For Testing Your Python Code]:http://tjelvarolsson.com/blog/four-tools-for-testing-your-python-code/ 234 | [Computational Biology: Testing For Scientist]:http://tjelvarolsson.com/blog/test-driven-develpment-for-scientists/ 235 | [Improve Your Python: Jeff Knupp: Understanding Unit Testing]:https://jeffknupp.com/blog/2013/12/09/improve-your-python-understanding-unit-testing/ 236 | [BIDS: Python Bootcamp: Test Driven Development]:https://www.youtube.com/watch?v=hrj8Wo34nvw 237 | [Software Carpentry: Testing]:http://katyhuff.github.io/python-testing/ 238 | 239 | [Sharing Your Side Projects]:https://www.youtube.com/watch?v=uRul8QdYvqQ 240 | 241 | [Basic Python Logging - Code Session]:https://www.youtube.com/watch?v=PX_xd2YjrsU 242 | [Logging HOWTO]:https://docs.python.org/2/howto/logging.html 243 | [Become A Logging Expert In 30 Minutes]:https://www.youtube.com/watch?v=24_4WWkSmNo 244 | 245 | [Click Documentation]:http://click.pocoo.org/5/quickstart/ 246 | [Writing A Command-Line Tool In Python]:http://nvie.com/posts/writing-a-cli-in-python-in-under-60-seconds/ 247 | 248 | [Computational Biology: Using Cookiecutter To Set Up A Project]:http://tjelvarolsson.com/blog/using-cookiecutter-a-passive-code-generator/ 249 | [Computational Biology: Creating A Clean Pytyon Development Environment]:http://tjelvarolsson.com/blog/begginers-guide-creating-clean-python-development-environments/ 250 | [Computational Biology: How To Generate Beautiful Technical Documentation]:http://tjelvarolsson.com/blog/how-to-generate-beautiful-technical-documentation/ 251 | [Computational Biology: Five Steps To Add The Bling Factor Your Python Package]:http://tjelvarolsson.com/blog/five-steps-to-add-the-bling-factor-to-your-python-package/ 252 | 253 | 254 | [Python Tutor Visualizer]:http://www.pythontutor.com/visualize.html#mode=edit 255 | [Python For Data Analysis]:http://www3.canisius.edu/~yany/python/Python4DataAnalysis.pdf 256 | [Stanford CS 41: Python]:http://stanfordpython.com/ 257 | [Berkeley CS 88: Python Data Structure]:http://cs88-website.github.io/ 258 | [Harvard CS 109: Data Science]:http://cs109.github.io/2015/ 259 | [Berkeley BIDS Python bootcamp]:https://bids.berkeley.edu/news/python-boot-camp-fall-2016-training-videos-available-online 260 | [Josh Bloom's Python Computing For Data Science]:https://github.com/profjsb/python-seminar 261 | [Pandas Cookbook]:http://pandas.pydata.org/pandas-docs/stable/cookbook.html 262 | [Udemy course]:https://www.udemy.com/learning-python-for-data-analysis-and-visualization/?ccManual=&couponCode=DEAL19 263 | -------------------------------------------------------------------------------- /notes/pandas/.ipynb_checkpoints/1. Basics-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "This notebook will cover the assumed knowledge of pandas.\n", 8 | "Here's a few questions to check if you already know the material in this notebook.\n", 9 | "\n", 10 | "1. Does a NumPy array have a single dtype or multiple dtypes?\n", 11 | "2. Why is broadcasting useful?\n", 12 | "3. How do you slice a DataFrame by row label?\n", 13 | "4. How do you select a column of a DataFrame?\n", 14 | "5. Is the Index a column in the DataFrame?\n", 15 | "\n", 16 | "If you feel pretty comfortable with those, go ahead and skip this notebook.\n", 17 | "[Answers](#Answers) are at the end. We'll meet up at the next notebook." 18 | ] 19 | }, 20 | { 21 | "cell_type": "markdown", 22 | "metadata": {}, 23 | "source": [ 24 | "# Aside: IPython Notebook\n", 25 | "\n", 26 | "- two modes command and edit\n", 27 | " - command -> edit: `Enter`\n", 28 | " - edit -> command: `Esc`\n", 29 | "- `h` : Keyboard Shortcuts: (from command mode)\n", 30 | "- `j` / `k` : navigate cells\n", 31 | "- `shift+Enter` executes a cell" 32 | ] 33 | }, 34 | { 35 | "cell_type": "markdown", 36 | "metadata": {}, 37 | "source": [ 38 | "Outline:\n", 39 | "\n", 40 | "- [NumPy Foundation](#NumPy-Foundation)\n", 41 | "- [Pandas](#Pandas)\n", 42 | "- [Data Structures](#Data-Structures)\n", 43 | "\n", 44 | "## Numpy Foundation\n", 45 | "\n", 46 | "pandas is built atop NumPy, historically and in the actual library.\n", 47 | "It's helpful to have a good understanding of some NumPyisms. [Speak the vernacular](https://www.youtube.com/watch?v=u2yvNw49AX4).\n", 48 | "\n", 49 | "### ndarray\n", 50 | "\n", 51 | "The core of numpy is the `ndarray`, N-dimensional array. These are homogenously-typed, fixed-length data containers.\n", 52 | "NumPy also provides many convenient and fast methods implemented on the `ndarray`." 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 1, 58 | "metadata": { 59 | "collapsed": false 60 | }, 61 | "outputs": [ 62 | { 63 | "data": { 64 | "text/plain": [ 65 | "array([1, 2, 3])" 66 | ] 67 | }, 68 | "execution_count": 1, 69 | "metadata": {}, 70 | "output_type": "execute_result" 71 | } 72 | ], 73 | "source": [ 74 | "from __future__ import print_function\n", 75 | "\n", 76 | "import numpy as np\n", 77 | "import pandas as pd\n", 78 | "\n", 79 | "x = np.array([1, 2, 3])\n", 80 | "x" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 2, 86 | "metadata": { 87 | "collapsed": false 88 | }, 89 | "outputs": [ 90 | { 91 | "data": { 92 | "text/plain": [ 93 | "dtype('int64')" 94 | ] 95 | }, 96 | "execution_count": 2, 97 | "metadata": {}, 98 | "output_type": "execute_result" 99 | } 100 | ], 101 | "source": [ 102 | "x.dtype" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 3, 108 | "metadata": { 109 | "collapsed": false 110 | }, 111 | "outputs": [ 112 | { 113 | "data": { 114 | "text/plain": [ 115 | "array([[ True, False],\n", 116 | " [False, True]], dtype=bool)" 117 | ] 118 | }, 119 | "execution_count": 3, 120 | "metadata": {}, 121 | "output_type": "execute_result" 122 | } 123 | ], 124 | "source": [ 125 | "y = np.array([[True, False], [False, True]])\n", 126 | "y" 127 | ] 128 | }, 129 | { 130 | "cell_type": "code", 131 | "execution_count": 4, 132 | "metadata": { 133 | "collapsed": false 134 | }, 135 | "outputs": [ 136 | { 137 | "data": { 138 | "text/plain": [ 139 | "(2, 2)" 140 | ] 141 | }, 142 | "execution_count": 4, 143 | "metadata": {}, 144 | "output_type": "execute_result" 145 | } 146 | ], 147 | "source": [ 148 | "y.shape" 149 | ] 150 | }, 151 | { 152 | "cell_type": "markdown", 153 | "metadata": {}, 154 | "source": [ 155 | "### dtypes\n", 156 | "\n", 157 | "Unlike python lists, NumPy arrays care about the type of data stored within.\n", 158 | "The full list of NumPy dtypes can be found in the [NumPy documentation](http://docs.scipy.org/doc/numpy/user/basics.types.html).\n", 159 | "\n", 160 | "![dtypes](http://docs.scipy.org/doc/numpy/_images/dtype-hierarchy.png)\n", 161 | "\n", 162 | "We sacrifice the convinience of mixing bools and ints and floats within an array for much better performance.\n", 163 | "However, an unexpected `dtype` change will probably bite you at some point in the future.\n", 164 | "\n", 165 | "The two biggest things to remember are\n", 166 | "\n", 167 | "- Missing values (NaN) cast integer or boolean arrays to floats\n", 168 | "- the object dtype is the fallback\n", 169 | "\n", 170 | "You'll want to avoid object dtypes. It's typically slow." 171 | ] 172 | }, 173 | { 174 | "cell_type": "markdown", 175 | "metadata": {}, 176 | "source": [ 177 | "### Broadcasting\n", 178 | "\n", 179 | "It's super cool and super useful. The one-line explanation is that when doing elementwise operations, things expand to the \"correct\" shape." 180 | ] 181 | }, 182 | { 183 | "cell_type": "code", 184 | "execution_count": 5, 185 | "metadata": { 186 | "collapsed": false 187 | }, 188 | "outputs": [ 189 | { 190 | "name": "stdout", 191 | "output_type": "stream", 192 | "text": [ 193 | "x: [0 1 2 3 4]\n", 194 | "x+1: [1 2 3 4 5]\n", 195 | "\n", 196 | "y: \n", 197 | "[[ 0.27612315 0.18577684 0.9610967 0.92516769 0.43423458]\n", 198 | " [ 0.41534299 0.58181509 0.49158344 0.43734366 0.09782122]]\n", 199 | "y+1:\n", 200 | "[[ 1.27612315 1.18577684 1.9610967 1.92516769 1.43423458]\n", 201 | " [ 1.41534299 1.58181509 1.49158344 1.43734366 1.09782122]]\n" 202 | ] 203 | } 204 | ], 205 | "source": [ 206 | "# add a scalar to a 1-d array\n", 207 | "x = np.arange(5)\n", 208 | "print('x: ', x)\n", 209 | "print('x+1:', x + 1, end='\\n\\n')\n", 210 | "\n", 211 | "y = np.random.uniform(size=(2, 5))\n", 212 | "print('y: ', y, sep='\\n')\n", 213 | "print('y+1:', y + 1, sep='\\n')" 214 | ] 215 | }, 216 | { 217 | "cell_type": "markdown", 218 | "metadata": {}, 219 | "source": [ 220 | "Since `x` is shaped `(5,)` and `y` is shaped `(2,5)` we can do operations between them." 221 | ] 222 | }, 223 | { 224 | "cell_type": "code", 225 | "execution_count": 6, 226 | "metadata": { 227 | "collapsed": false 228 | }, 229 | "outputs": [ 230 | { 231 | "data": { 232 | "text/plain": [ 233 | "array([[ 0. , 0.18577684, 1.9221934 , 2.77550307, 1.73693832],\n", 234 | " [ 0. , 0.58181509, 0.98316688, 1.31203099, 0.3912849 ]])" 235 | ] 236 | }, 237 | "execution_count": 6, 238 | "metadata": {}, 239 | "output_type": "execute_result" 240 | } 241 | ], 242 | "source": [ 243 | "x * y" 244 | ] 245 | }, 246 | { 247 | "cell_type": "markdown", 248 | "metadata": {}, 249 | "source": [ 250 | "Without broadcasting we'd have to manually reshape our arrays, which quickly gets annoying." 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": 7, 256 | "metadata": { 257 | "collapsed": false 258 | }, 259 | "outputs": [ 260 | { 261 | "data": { 262 | "text/plain": [ 263 | "array([[ 0. , 0.18577684, 1.9221934 , 2.77550307, 1.73693832],\n", 264 | " [ 0. , 0.58181509, 0.98316688, 1.31203099, 0.3912849 ]])" 265 | ] 266 | }, 267 | "execution_count": 7, 268 | "metadata": {}, 269 | "output_type": "execute_result" 270 | } 271 | ], 272 | "source": [ 273 | "x.reshape(1, 5).repeat(2, axis=0) * y" 274 | ] 275 | }, 276 | { 277 | "cell_type": "markdown", 278 | "metadata": {}, 279 | "source": [ 280 | "# Pandas\n", 281 | "\n", 282 | "We'll breeze through the basics here, and get onto some interesting applications in a bit. I want to provide the *barest* of intuition so things stick down the road.\n", 283 | "\n", 284 | "## Why pandas\n", 285 | "\n", 286 | "NumPy is great. But it lacks a few things that are conducive to doing statisitcal analysis. By building on top of NumPy, pandas provides\n", 287 | "\n", 288 | "- labeled arrays\n", 289 | "- heterogenous data types within a table\n", 290 | "- better missing data handling\n", 291 | "- convenient methods \n", 292 | "- more data types (Categorical, Datetime)\n", 293 | "\n", 294 | "## Data Structures\n", 295 | "\n", 296 | "This is the typical starting point for any intro to pandas.\n", 297 | "We'll follow suit.\n", 298 | "\n", 299 | "### The DataFrame\n", 300 | "\n", 301 | "Here we have the workhorse data structure for pandas.\n", 302 | "It's an in-memory table holding your data, and provides a few conviniences over lists of lists or NumPy arrays." 303 | ] 304 | }, 305 | { 306 | "cell_type": "code", 307 | "execution_count": 8, 308 | "metadata": { 309 | "collapsed": true 310 | }, 311 | "outputs": [], 312 | "source": [ 313 | "import numpy as np\n", 314 | "import pandas as pd" 315 | ] 316 | }, 317 | { 318 | "cell_type": "code", 319 | "execution_count": 9, 320 | "metadata": { 321 | "collapsed": false 322 | }, 323 | "outputs": [ 324 | { 325 | "data": { 326 | "text/html": [ 327 | "
\n", 328 | "\n", 329 | " \n", 330 | " \n", 331 | " \n", 332 | " \n", 333 | " \n", 334 | " \n", 335 | " \n", 336 | " \n", 337 | " \n", 338 | " \n", 339 | " \n", 340 | " \n", 341 | " \n", 342 | " \n", 343 | " \n", 344 | " \n", 345 | " \n", 346 | " \n", 347 | " \n", 348 | " \n", 349 | " \n", 350 | " \n", 351 | " \n", 352 | " \n", 353 | " \n", 354 | " \n", 355 | " \n", 356 | " \n", 357 | "
ABC
a1True0.496714
b2True-0.138264
c3False0.647689
\n", 358 | "
" 359 | ], 360 | "text/plain": [ 361 | " A B C\n", 362 | "a 1 True 0.496714\n", 363 | "b 2 True -0.138264\n", 364 | "c 3 False 0.647689" 365 | ] 366 | }, 367 | "execution_count": 9, 368 | "metadata": {}, 369 | "output_type": "execute_result" 370 | } 371 | ], 372 | "source": [ 373 | "# Many ways to construct a DataFrame\n", 374 | "# We pass a dict of {column name: column values}\n", 375 | "np.random.seed(42)\n", 376 | "df = pd.DataFrame({'A': [1, 2, 3], 'B': [True, True, False],\n", 377 | " 'C': np.random.randn(3)},\n", 378 | " index=['a', 'b', 'c']) # also this weird index thing\n", 379 | "df" 380 | ] 381 | }, 382 | { 383 | "cell_type": "code", 384 | "execution_count": 10, 385 | "metadata": { 386 | "collapsed": false, 387 | "scrolled": false 388 | }, 389 | "outputs": [ 390 | { 391 | "data": { 392 | "image/png": "iVBORw0KGgoAAAANSUhEUgAABQAAAAPACAYAAABq3NR5AAAAAXNSR0IArs4c6QAAAAlwSFlzAAAL\nEwAACxMBAJqcGAAAA6tpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6\neD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYg\neG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4K\nICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6eG1w\nPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJo\ndHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0\ncDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAx\nNS0wNy0xNlQxODowNzo5MDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRv\nb2w+UGl4ZWxtYXRvciAzLjMuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8dGlmZjpPcmll\nbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpDb21wcmVzc2lvbj41\nPC90aWZmOkNvbXByZXNzaW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZm\nOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjwvdGlmZjpZUmVz\nb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzI8L3RpZmY6WFJlc29sdXRpb24+\nCiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xMjgwPC9leGlmOlBpeGVsWERpbWVuc2lv\nbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAg\nIDxleGlmOlBpeGVsWURpbWVuc2lvbj45NjA8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8\nL3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KGZ00FwAAQABJREFU\neAHs3QecZWV9MP7fmZmlCkhbivQOyy5NkKZSxIhINFGxoWKiiRqjvq/RxNfkVRPfJP8k1hjTNBYs\ngBpjBREFBKSDbIGlI2WBpUtd5t57/r8zuztz78zcaTuzc2fnez6fu/eU53nOc77n3J2Z331KhIUA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLTI1BMz2mdlQABAq0C\nZS6te2wRIECAAAECYxUochlrWukIECBAgACB2SfQNfsu2RUTIECAAAECBAgQIECAAAECBAgQmD0C\nAoCz5167UgIECBAgQIAAAQIECBAgQIAAgVkoIAA4C2+6SyZAgAABAgQIECBAgAABAgQIEJg9AgKA\ns+deu1ICBAgQIECAAAECBAgQIECAAIFZKCAAOAtvuksmQIAAAQIECBAgQIAAAQIECBCYPQICgLPn\nXrtSAgQIECBAgAABAgQIECBAgACBWSggADgLb7pLJkCAAAECBAgQIECAAAECBAgQmD0CAoCz5167\nUgIECBAgQIAAAQIECBAgQIAAgVkoIAA4C2+6SyZAgAABAgQIECBAgAABAgQIEJg9Aj2z51JdKQEC\n66LA6173unXisk4++eR14jpcBAECBAhMvcCpp5469SdxBgIECBAgQGCdEijWqatxMQQIzFiBMpfx\nVL4oBv77eu8JB44na8el/dxdWaXd9+u4eqkQAQIECHSgwI+/GcP9yMyfiwM/GDuw2qpEgAABAgQI\nTK+ALsDT6+/sBAgQIECAAAECBAgQIECAAAECBKZUQBfgKeVVOAECUy1wyimnxOtmegvAT57Vx3T6\n6V+faq61Wv6b37yyi9q6dl1rFXGGncw9n2E3THVnnMDqz9iMq7gKEyBAgAABAtMuoAXgtN8CFSBA\ngAABAgQIECBAgAABAgQIECAwdQICgFNnq2QCBAgQIECAAAECBAgQIECAAAEC0y4gADjtt0AFCBAg\nQIAAAQIECBAgQIAAAQIECEydgADg1NkqmQABAgQIECBAgAABAgQIECBAgMC0CwgATvstUAECBAgQ\n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\nECBAgAABAgQITJaAAOBkSSqHAAECBAgQIECAAAECBAgQIECAQAcKCAB24E1RJQIECBAgQIAAAQIE\nCBAgQIAAAQKTJSAAOFmSyiFAgAABAgQIECBAgAABAgQIECDQgQICgB14U1SJAAECBAgQIECAAAEC\nBAgQIECAwGQJCABOlqRyCBAgQIAAAQIECBAgQIAAAQIECHSggABgB94UVSJAgAABAgQIECBAgAAB\nAgQIECAwWQICgJMlqRwCBAgQIECAAAECBAgQIECAAAECHSggANiBN0WVCBAgQIAAAQIECBAgQIAA\nAQIECEyWgADgZEkqhwABAgQIECBAgAABAgQIECBAgEAHCggAduBNUSUCBAgQIECAAAECBAgQIECA\nAAECkyUgADhZksohQIAAAQIECBAgQIAAAQIECBAg0IECPR1YJ1UiQIDA+ASW/np86TstdVX/6vXj\nEzutZmtWnx9/c2X+de261kxl3c7tnq/b99fVTb/A6s/Y9NdEDQgQIECAAIEZJlDMsPqqLgEC66hA\nmct4Lq0oBv77eu+O48nZeWk/d1fn1UmNCBAgQKBzBYb7kZk/Fwd+MHZu1dWMAAECBAgQmCYBLQCn\nCd5pCRAgMFjgTX/x4sG7bBMgQIAAgRaBb/z9hS3bNggQIECAAAECYxEQAByLkjQECHSswN/93d/F\n+2Z6C8BTP9zn+/73v79jnSdSsc985jPr5HVNxGK25HHPZ8uddp3TJbD6MzZd53deAgQIECBAYOYK\nmARk5t47NSdAgAABAgQIECBAgAABAgQIECAwqoAA4KhEEhAgQIAAAQIECBAgQIAAAQIECBCYuQIC\ngDP33qk5AQIECBAgQIAAAQIECBAgQIAAgVEFBABHJZKAAAECBAgQIECAAAECBAgQIECAwMwVEACc\nufdOzQkQIECAAAECBAgQIECAAAECBAiMKiAAOCqRBAQIECBAgAABAgQIECBAgAABAgRmroAA4My9\nd2pOgAABAgQIECBAgAABAgQIECBAYFQBAcBRiSQgQIAAAQIECBAgQIAAAQIECBAgMHMFBABn7r1T\ncwIECBAgQIAAAQIECBAgQIAAAQKjCggAjkokAQECBAgQIECAAAECBAgQIECAAIGZKyAAOHPvnZoT\nIECAAAECBAgQIECAAAECBAgQGFVAAHBUIgkIECBAgAABAgQIECBAgAABAgQIzFwBAcCZe+/UnAAB\n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\nFKAABShAAQpQgALeF2AA0PvmLJECFKAABShAAQpQgAIUoAAFKEABClCAAl4TYADQa9QsiAIUoAAF\nKEABClCAAhSgAAUoQAEKUIAC3hdgAND75iyRAhSgAAUoQAEKUIACFKAABShAAQpQgAJeE2AA0GvU\nLIgCFKAABShAAQpQgAIUoAAFKEABClCAAt4XYADQ++YskQIUoAAFKEABClCAAhSgAAUoQAEKUIAC\nXhNgANBr1CyIAhSgAAUoQAEKUIACFKAABShAAQpQgALeF2AA0PvmLJECFKAABShAAQpQgAIUoAAF\nKEABClCAAl4TYADQa9QsiAIUoAAFKEABClCAAhSgAAUoQAEKUIAC3hdgAND75iyRAhSgAAUoQAEK\nUIACFKAABShAAQpQgAJeE2AA0GvULIgCFKAABShAAQpQgAIUoAAFKEABClCAAt4XYADQ++YskQIU\noAAFKEABClCAAhSgAAUoQAEKUIACXhNgANBr1CyIAhSgAAUoQAEKUIACFKAABShAAQpQgALeF2AA\n0PvmLJECFKAABShAAQpQgAIUoAAFKEABClCAAl4TYADQa9QsiAIUoAAFKEABClCAAhSgAAUoQAEK\nUIAC3hdgAND75iyRAhSgAAUoQAEKUIACFKAABShAAQpQgAJeE2AA0GvULIgCFKAABShAAQpQgAIU\noAAFKEABClCAAt4XUHm/SJZIAQpQwFJALzbLs7bPqFTmj69n022n84crv7o2WMsnf7rcH6rLOlKA\nAhSgwCgKvPnSQVj7L1P8v2j+j3EU68eiKUABClCAAhTwTQH2APTN58JaUYACFKAABShAAQpQgAIU\noAAFKEABClDALQKBbsmFmVCAAhQYJYGtW7fiOX/vAfjNFwb0nn/++VFS9EyxL7/88phsl2e0xkau\nfOZj4zmyFb4rYHyP+W4NWTMKUIACFKAABXxVgD0AffXJsF4UoAAFKEABClCAAhSgAAUoQAEKUIAC\nFHCDAAOAbkBkFhSgAAUoQAEKUIACFKAABShAAQpQgAIU8FUBBgB99cmwXhSgAAUoQAEKUIACFKAA\nBShAAQpQgAIUcIMAA4BuQGQWFKAABShAAQpQgAIUoAAFKEABClCAAhTwVQEGAH31ybBeFKAABShA\nAQpQgAIUoAAFKEABClCAAhRwgwADgG5AZBYUoAAFKEABClCAAhSgAAUoQAEKUIACFPBVAQYAffXJ\n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\n6ooSIECAAAECBAgQIECAAIFBI2AE4KB51G6UAAECBAgQIECAAAECBAgQIEBgMAoIAA7Gp+6eCRAg\nQIAAAQIECBAgQIAAAQIEBo2AAOCgedRulAABAgQIECBAgAABAgQIECBAYDAKCAAOxqfungkQIECA\nAAECBAgQIECAAAECBAaNgADgoHnUbpQAAQIECBAgQIAAAQIECBAgQGAwCggADsan7p4JECBAgAAB\nAgQIECBAgAABAgQGjYAA4KB51G6UAAECBAgQIECAAAECBAgQIEBgMAoIAA7Gp+6eCRAgQIAAAQIE\nCBAgQIAAAQIEBo2AAOCgedRulAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAv0m\nUOi3ljREgEC/CqyfH6e3tsaUUqNtjfFC04JYWTre3/vmS+O8QkOMK113aCGWjF0UzaXjQ3l/sFkf\nypb6ToAAAQIECBAgQIAAAQIHn8CQg69LekSAQFGgpSX+W1tbfKCk0dAan8j0V0rHB2D/xQxInl+6\n7q6IazN9Z+n4UN4fhNaHMqe+EyBAgAABAgQIECBAgMBBJtBwkPVHdwgQIECAAAECBAgQIECAAAEC\nBAgQ6EcBAcB+xNQUAQIECBAgQIAAAQIECBAgQIAAgYNNQADwYHsi+kOAAAECBAgQIECAAAECBAgQ\nIECgHwUEAPsRU1MECBAgQIAAAQIECBAgQIAAAQIEDjYBAcCD7YnoDwECBAgQIECAAAECBAgQIECA\nAIF+FBAA7EdMTREgQIAAAQIECBAgQIAAAQIECBA42AQEAA+2J6I/BAgQIECAAAECBAgQIECAAAEC\nBPpRYEg/tqWpQS7QNi+GNBdiVrTFEQ2tMWXS/fHtekjaronhG7bFSa0tcXhbQ0wptMTWQmO8VYhY\n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\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIEJegeUUAABAHSURBVCBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB\n/78dOiABAAAAEPT/dTsCnaABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM\nGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg\nwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB\nAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM\nGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg\nwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB\nAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM\nGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg\nwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB\nAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM\nGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg\nwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIAB\nAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM\nGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg\nwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDAwGQhDqCpNfVhSqgAAAABJRU5ErkJggg==\n", 393 | "text/plain": [ 394 | "" 395 | ] 396 | }, 397 | "execution_count": 10, 398 | "metadata": {}, 399 | "output_type": "execute_result" 400 | } 401 | ], 402 | "source": [ 403 | "from IPython.display import Image\n", 404 | "\n", 405 | "Image('dataframe.png')" 406 | ] 407 | }, 408 | { 409 | "cell_type": "markdown", 410 | "metadata": {}, 411 | "source": [ 412 | "### Selecting\n", 413 | "\n", 414 | "Our first improvement over numpy arrays is labeled indexing. We can select subsets by column, row, or both. Column selection uses the regular python `__getitem__` machinery. Pass in a single column label `'A'` or a list of labels `['A', 'C']` to select subsets of the original `DataFrame`." 415 | ] 416 | }, 417 | { 418 | "cell_type": "code", 419 | "execution_count": 11, 420 | "metadata": { 421 | "collapsed": false 422 | }, 423 | "outputs": [ 424 | { 425 | "data": { 426 | "text/plain": [ 427 | "a 1\n", 428 | "b 2\n", 429 | "c 3\n", 430 | "Name: A, dtype: int64" 431 | ] 432 | }, 433 | "execution_count": 11, 434 | "metadata": {}, 435 | "output_type": "execute_result" 436 | } 437 | ], 438 | "source": [ 439 | "# Single column, reduces to a Series\n", 440 | "df['A']" 441 | ] 442 | }, 443 | { 444 | "cell_type": "code", 445 | "execution_count": 12, 446 | "metadata": { 447 | "collapsed": false 448 | }, 449 | "outputs": [ 450 | { 451 | "data": { 452 | "text/html": [ 453 | "
\n", 454 | "\n", 455 | " \n", 456 | " \n", 457 | " \n", 458 | " \n", 459 | " \n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | "
AC
a10.496714
b2-0.138264
c30.647689
\n", 480 | "
" 481 | ], 482 | "text/plain": [ 483 | " A C\n", 484 | "a 1 0.496714\n", 485 | "b 2 -0.138264\n", 486 | "c 3 0.647689" 487 | ] 488 | }, 489 | "execution_count": 12, 490 | "metadata": {}, 491 | "output_type": "execute_result" 492 | } 493 | ], 494 | "source": [ 495 | "cols = ['A', 'C']\n", 496 | "df[cols]" 497 | ] 498 | }, 499 | { 500 | "cell_type": "markdown", 501 | "metadata": {}, 502 | "source": [ 503 | "For row-wise selection, use the special `.loc` accessor." 504 | ] 505 | }, 506 | { 507 | "cell_type": "code", 508 | "execution_count": 13, 509 | "metadata": { 510 | "collapsed": false 511 | }, 512 | "outputs": [ 513 | { 514 | "data": { 515 | "text/html": [ 516 | "
\n", 517 | "\n", 518 | " \n", 519 | " \n", 520 | " \n", 521 | " \n", 522 | " \n", 523 | " \n", 524 | " \n", 525 | " \n", 526 | " \n", 527 | " \n", 528 | " \n", 529 | " \n", 530 | " \n", 531 | " \n", 532 | " \n", 533 | " \n", 534 | " \n", 535 | " \n", 536 | " \n", 537 | " \n", 538 | " \n", 539 | " \n", 540 | "
ABC
a1True0.496714
b2True-0.138264
\n", 541 | "
" 542 | ], 543 | "text/plain": [ 544 | " A B C\n", 545 | "a 1 True 0.496714\n", 546 | "b 2 True -0.138264" 547 | ] 548 | }, 549 | "execution_count": 13, 550 | "metadata": {}, 551 | "output_type": "execute_result" 552 | } 553 | ], 554 | "source": [ 555 | "df.loc[['a', 'b']]" 556 | ] 557 | }, 558 | { 559 | "cell_type": "markdown", 560 | "metadata": {}, 561 | "source": [ 562 | "When your index labels are ordered, you can use ranges to select rows or columns." 563 | ] 564 | }, 565 | { 566 | "cell_type": "code", 567 | "execution_count": 14, 568 | "metadata": { 569 | "collapsed": false 570 | }, 571 | "outputs": [ 572 | { 573 | "data": { 574 | "text/html": [ 575 | "
\n", 576 | "\n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | "
ABC
a1True0.496714
b2True-0.138264
\n", 600 | "
" 601 | ], 602 | "text/plain": [ 603 | " A B C\n", 604 | "a 1 True 0.496714\n", 605 | "b 2 True -0.138264" 606 | ] 607 | }, 608 | "execution_count": 14, 609 | "metadata": {}, 610 | "output_type": "execute_result" 611 | } 612 | ], 613 | "source": [ 614 | "df.loc['a':'b']" 615 | ] 616 | }, 617 | { 618 | "cell_type": "markdown", 619 | "metadata": {}, 620 | "source": [ 621 | "Notice that the slice is *inclusive* on both sides, unlike your typical slicing of a list. Sometimes, you'd rather slice by *position* instead of label. `.iloc` has you covered:" 622 | ] 623 | }, 624 | { 625 | "cell_type": "code", 626 | "execution_count": 15, 627 | "metadata": { 628 | "collapsed": false 629 | }, 630 | "outputs": [ 631 | { 632 | "data": { 633 | "text/html": [ 634 | "
\n", 635 | "\n", 636 | " \n", 637 | " \n", 638 | " \n", 639 | " \n", 640 | " \n", 641 | " \n", 642 | " \n", 643 | " \n", 644 | " \n", 645 | " \n", 646 | " \n", 647 | " \n", 648 | " \n", 649 | " \n", 650 | " \n", 651 | " \n", 652 | " \n", 653 | " \n", 654 | " \n", 655 | " \n", 656 | " \n", 657 | " \n", 658 | "
ABC
a1True0.496714
b2True-0.138264
\n", 659 | "
" 660 | ], 661 | "text/plain": [ 662 | " A B C\n", 663 | "a 1 True 0.496714\n", 664 | "b 2 True -0.138264" 665 | ] 666 | }, 667 | "execution_count": 15, 668 | "metadata": {}, 669 | "output_type": "execute_result" 670 | } 671 | ], 672 | "source": [ 673 | "df.iloc[0:2]" 674 | ] 675 | }, 676 | { 677 | "cell_type": "markdown", 678 | "metadata": {}, 679 | "source": [ 680 | "This follows the usual python slicing rules: closed on the left, open on the right.\n", 681 | "\n", 682 | "As I mentioned, you can slice both rows and columns. Use `.loc` for label or `.iloc` for position indexing." 683 | ] 684 | }, 685 | { 686 | "cell_type": "code", 687 | "execution_count": 16, 688 | "metadata": { 689 | "collapsed": false 690 | }, 691 | "outputs": [ 692 | { 693 | "data": { 694 | "text/plain": [ 695 | "True" 696 | ] 697 | }, 698 | "execution_count": 16, 699 | "metadata": {}, 700 | "output_type": "execute_result" 701 | } 702 | ], 703 | "source": [ 704 | "df.loc['a', 'B']" 705 | ] 706 | }, 707 | { 708 | "cell_type": "markdown", 709 | "metadata": {}, 710 | "source": [ 711 | "Pandas, like NumPy, will reduce dimensions when possible. Select a single column and you get back `Series` (see below). Select a single row and single column, you get a scalar.\n", 712 | "\n", 713 | "You can get pretty fancy:" 714 | ] 715 | }, 716 | { 717 | "cell_type": "code", 718 | "execution_count": 17, 719 | "metadata": { 720 | "collapsed": false 721 | }, 722 | "outputs": [ 723 | { 724 | "data": { 725 | "text/html": [ 726 | "
\n", 727 | "\n", 728 | " \n", 729 | " \n", 730 | " \n", 731 | " \n", 732 | " \n", 733 | " \n", 734 | " \n", 735 | " \n", 736 | " \n", 737 | " \n", 738 | " \n", 739 | " \n", 740 | " \n", 741 | " \n", 742 | " \n", 743 | " \n", 744 | " \n", 745 | " \n", 746 | " \n", 747 | "
AC
a10.496714
b2-0.138264
\n", 748 | "
" 749 | ], 750 | "text/plain": [ 751 | " A C\n", 752 | "a 1 0.496714\n", 753 | "b 2 -0.138264" 754 | ] 755 | }, 756 | "execution_count": 17, 757 | "metadata": {}, 758 | "output_type": "execute_result" 759 | } 760 | ], 761 | "source": [ 762 | "df.loc['a':'b', ['A', 'C']]" 763 | ] 764 | }, 765 | { 766 | "cell_type": "markdown", 767 | "metadata": {}, 768 | "source": [ 769 | "#### Summary\n", 770 | "\n", 771 | "- Use `[]` for selecting columns\n", 772 | "- Use `.loc[row_lables, column_labels]` for label-based indexing\n", 773 | "- Use `.iloc[row_positions, column_positions]` for positional index\n", 774 | "\n", 775 | "I've left out boolean and hierarchical indexing, which we'll see later." 776 | ] 777 | }, 778 | { 779 | "cell_type": "markdown", 780 | "metadata": {}, 781 | "source": [ 782 | "## Series\n", 783 | "\n", 784 | "You've already seen some `Series` up above. It's the 1-dimensional analog of the DataFrame. Each column in a `DataFrame` is in some sense a `Series`. You can select a `Series` from a DataFrame in a few ways:" 785 | ] 786 | }, 787 | { 788 | "cell_type": "code", 789 | "execution_count": 18, 790 | "metadata": { 791 | "collapsed": false 792 | }, 793 | "outputs": [ 794 | { 795 | "data": { 796 | "text/plain": [ 797 | "a 1\n", 798 | "b 2\n", 799 | "c 3\n", 800 | "Name: A, dtype: int64" 801 | ] 802 | }, 803 | "execution_count": 18, 804 | "metadata": {}, 805 | "output_type": "execute_result" 806 | } 807 | ], 808 | "source": [ 809 | "# __getitem__ like before\n", 810 | "df['A']" 811 | ] 812 | }, 813 | { 814 | "cell_type": "code", 815 | "execution_count": 19, 816 | "metadata": { 817 | "collapsed": false 818 | }, 819 | "outputs": [ 820 | { 821 | "data": { 822 | "text/plain": [ 823 | "a 1\n", 824 | "b 2\n", 825 | "c 3\n", 826 | "Name: A, dtype: int64" 827 | ] 828 | }, 829 | "execution_count": 19, 830 | "metadata": {}, 831 | "output_type": "execute_result" 832 | } 833 | ], 834 | "source": [ 835 | "# .loc, like before\n", 836 | "df.loc[:, 'A']" 837 | ] 838 | }, 839 | { 840 | "cell_type": "code", 841 | "execution_count": 20, 842 | "metadata": { 843 | "collapsed": false 844 | }, 845 | "outputs": [ 846 | { 847 | "data": { 848 | "text/plain": [ 849 | "a 1\n", 850 | "b 2\n", 851 | "c 3\n", 852 | "Name: A, dtype: int64" 853 | ] 854 | }, 855 | "execution_count": 20, 856 | "metadata": {}, 857 | "output_type": "execute_result" 858 | } 859 | ], 860 | "source": [ 861 | "# using `.` attribute lookup\n", 862 | "df.A" 863 | ] 864 | }, 865 | { 866 | "cell_type": "markdown", 867 | "metadata": {}, 868 | "source": [ 869 | "You'll have to be careful with the last one. It won't work if you're column name isn't a valid python identifier (say it has a space) or if it conflicts with one of the (many) methods on `DataFrame`. The `.` accessor is extremely convient for interactive use though.\n", 870 | "\n", 871 | "You should never *assign* a column with `.` e.g. don't do\n", 872 | "\n", 873 | "```python\n", 874 | "# bad\n", 875 | "df.A = [1, 2, 3]\n", 876 | "```\n", 877 | "\n", 878 | "It's unclear whether your attaching the list `[1, 2, 3]` as an attirbute of `df`, or whether you want it as a column. It's better to just say\n", 879 | "\n", 880 | "```python\n", 881 | "df['A'] = [1, 2, 3]\n", 882 | "# or\n", 883 | "df.loc[:, 'A'] = [1, 2, 3]\n", 884 | "```\n", 885 | "\n", 886 | "`Series` share many of the same methods as `DataFrame`s." 887 | ] 888 | }, 889 | { 890 | "cell_type": "markdown", 891 | "metadata": {}, 892 | "source": [ 893 | "## Index\n", 894 | "\n", 895 | "`Index`es are something of a peculiarity to pandas.\n", 896 | "First off, they are not the kind of indexes you'll find in SQL, which are used to help the engine speed up certain queries.\n", 897 | "In pandas, `Index`es are about lables. This helps with selection (like we did above) and automatic alignment when performing operations between two `DataFrame`s or `Series`.\n", 898 | "\n", 899 | "R does have row labels, but they're nowhere near as powerful (or complicated) as in pandas. You can access the index of a `DataFrame` or `Series` with the `.index` attribute." 900 | ] 901 | }, 902 | { 903 | "cell_type": "code", 904 | "execution_count": 21, 905 | "metadata": { 906 | "collapsed": false 907 | }, 908 | "outputs": [ 909 | { 910 | "data": { 911 | "text/plain": [ 912 | "Index(['a', 'b', 'c'], dtype='object')" 913 | ] 914 | }, 915 | "execution_count": 21, 916 | "metadata": {}, 917 | "output_type": "execute_result" 918 | } 919 | ], 920 | "source": [ 921 | "df.index" 922 | ] 923 | }, 924 | { 925 | "cell_type": "markdown", 926 | "metadata": {}, 927 | "source": [ 928 | "There are special kinds of `Index`es that you'll come across. Some of these are\n", 929 | "\n", 930 | "- `MultiIndex` for multidimensional (Hierarchical) labels\n", 931 | "- `DatetimeIndex` for datetimes\n", 932 | "- `Float64Index` for floats\n", 933 | "- `CategoricalIndex` for, you guessed it, `Categorical`s\n", 934 | "\n", 935 | "We'll talk *a lot* more about indexes. They're a complex topic and can introduce headaches.\n", 936 | "\n", 937 | "

@gjreda @treycausey in some cases row indexes are the best thing since sliced bread, in others they simply get in the way. Hard problem

— Wes McKinney (@wesmckinn) December 22, 2014
\n", 938 | "\n", 939 | "Pandas, for better or for worse, does usually provide ways around row indexes being obstacles. The problem is knowing *when* they are just getting in the way, which mostly comes by experience. Sorry." 940 | ] 941 | }, 942 | { 943 | "cell_type": "markdown", 944 | "metadata": {}, 945 | "source": [ 946 | "# Answers\n", 947 | "\n", 948 | "1. Does a NumPy array have a single dtype or multiple dtypes?\n", 949 | " - NumPy arrays are homogenous: they only have a single dtype (unlike DataFrames).\n", 950 | " You can have an array that holds mixed types, e.g. `np.array(['a', 1])`, but the\n", 951 | " dtype of that array is `object`, which you probably want to avoid.\n", 952 | "2. Why is broadcasting useful?\n", 953 | " - It lets you perform operations between arrays that are compatable, but not nescessarily identical,\n", 954 | " in shape. This makes your code cleaner.\n", 955 | "3. How do you slice a DataFrame by row label?\n", 956 | " - Use `.loc[label]`. For position based use `.iloc[integer]`.\n", 957 | "4. How do you select a column of a DataFrame?\n", 958 | " - Standard `__getitem__`: `df[column_name]`\n", 959 | "5. Is the Index a column in the DataFrame?\n", 960 | " - No. It isn't included in any operations (`mean`, etc). It can be inserted as a regular\n", 961 | " column with `df.reset_index()`." 962 | ] 963 | } 964 | ], 965 | "metadata": { 966 | "kernelspec": { 967 | "display_name": "Python 3", 968 | "language": "python", 969 | "name": "python3" 970 | }, 971 | "language_info": { 972 | "codemirror_mode": { 973 | "name": "ipython", 974 | "version": 3 975 | }, 976 | "file_extension": ".py", 977 | "mimetype": "text/x-python", 978 | "name": "python", 979 | "nbconvert_exporter": "python", 980 | "pygments_lexer": "ipython3", 981 | "version": "3.4.3" 982 | } 983 | }, 984 | "nbformat": 4, 985 | "nbformat_minor": 0 986 | } 987 | --------------------------------------------------------------------------------