A repo for learning Python and data science.
The best way to learn something is by teaching it. To that end, this repo contains notebooks on the tools and methods of data science.
Although these lessons are meant to be approachable by anybody, a few guiding principles will help make the material stick:
- Learn by doing
- Only be confused by one thing at a time
- When confused, google it
Notebooks are ordered like levels in a video game, with the simplest/easiest material in the beginning and the more difficult/complex stuff near the end. I borrowed this idea from Project Euler, which is based on the idea that solving one problem will expose you to a new concept that allows you to undertake a previously inaccessible problem. So the determined learner will slowly but surely work his/her way through every lesson.
- Code, Programming and Python
- Code 101
- Programming 101
- Python 101
- Data Types
- Numbers
- Strings
- Data Structures
- Containers and Control Flow
- Arrays (the numpy module)
- Dataframes (the pandas module)
- File Input and Output
- Classes
- Advanced Topics
- Regular Expressions
- Decorators
- Generators
- APIs
- Web Scraping
- Asynchronous Programming
- Web Microframeworks
- Calculus
- Derivatives
- Gradients
- Integrals
- Probability
- Discrete Probability Distributions
- Continuous Probability Densities
- Combinatorics
- Conditional Probability
- Distributions and Densities
- Expected Value and Variance
- Sums of Random Variables
- Law of Large Numbers
- Central Limit Theorem
- Generating Functions
- Markov Chains
- Random Walks
- Linear Algebra
- Scalars, Vectors, Matrices and Tensors
- Multiplying Matrices and Vectors
- Identity and Inverse Matrices
- Linear Dependence and Span
- Norms
- Special Kinds of Matrices and Vectors
- Eigendecomposition
- Singular Value Decomposition
- The Moore-Penrose Pseudoinverse
- The Trace Operator
- The Determinant
- Principal Components Analysis
- Statistics
- Descriptive Statistics
- Descriptive Statistics
- Exploratory Data Analysis
- Probability Mass Functions
- Cumulative Distribution Functions
- Canonical Distributions
- Probability Density Functions
- Relationships between Variables
- Inferential Statistics
- Hypothesis Testing
- Linear Least Squares
- Regression
- Time Series Analysis
- Survival Analysis
- Analytic Intuitions
- Statistical Learning
- Linear Regression
- Logistic Regression
- Linear Discriminant Analysis
- K-Nearest Neighbors
- Resampling Methods
- Advanced Linear Models
- Tree-Based Models
- Support Vector Machines
- Unsupervised Learning
- Neural Networks
- Descriptive Statistics
This project utilizes Jupyter Notebook, although I'd recommended that you download Anaconda to get Python 3.6 as well a suite of tools including Jupyter Notebook.
Once you've got the tools
- clone this repo
- navigate to the directory from the command line
- typer
jupyter notebook
and press Enter. In a moment, Jupyter will be running in your browser.
This project is still under construction.
The following resources have inspired me and helped me down this path:
- Think Python: How to Think Like a Computer Scientist
- Learn Python the Hard Way
- Automate the Boring Stuff
- Hacker Rank
- All the awesome people I worked with at the Technology Transformation Service
- The fantastic community at Stack Overflow
MIT License
Copyright (c) 2018 Scott McAllister
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.