{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# MIS 492 - Data Analysis and Visualization\n",
"## Week 3\n",
"\n",
"## Data Preparation Using Pandas \n",
"\n",
"### Dr. Mohammad AlMarzouq\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Introduction to Pandas\n",
"\n",
"- It is a python [3rd party library](https://pandas.pydata.org)\n",
"- Used for data analysis and visualization\n",
"- Part of Anaconda python distribution\n",
"- Best used with Jupyter notebook, can be used with regular python programs\n",
"- Main feature is the Data Frame"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Load the pandas library to let python know you will use it\n",
"import pandas as pd"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# What is a Data Frame?\n",
"- Its a data structure, like lists and dictionaries\n",
"- Consists of rows and columns, similar to SQL tables and excel spreadsheets\n",
" - Columns are attributes or variables\n",
" - Rows are records or single observations\n",
"- Operations are typically performed on columns\n",
"- Has both numeric and named indexing"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Tidy Data\n",
"- Standard form of organizing data in dataframe such that:\n",
" - Each variable forms a column\n",
" - Each row forms a row\n",
" - Each table is an observational unit (level of analysis)\n",
"- Required reading: [Tidy Data, by Hadley Wickham](http://vita.had.co.nz/papers/tidy-data.pdf)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Importance of Tidy Data\n",
"- Most tools we will use assume that data is tidy\n",
"- Collected data is likely messy or non-tidy, need to learn how to reshape it\n",
"- We will start with tidy data in our analysis\n",
" - Will learn how to reshape when we start data collection\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Loading data into a data frame\n",
"\n",
"- Data is usually loaded/collected from an external source, like an api, website, csv, or excel file, and might not be well organized. \n",
" - We will start with well organized and behaved data to get to know how to use Pandas\n",
"- Download the weather data set from [vega-dataset](https://raw.githubusercontent.com/vega/vega-datasets/gh-pages/data/weather.csv) (**right click and save as**)\n",
"- Place it in the same directory as the jupyter notbook you are working on"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" date | \n",
" precipitation | \n",
" temp_max | \n",
" temp_min | \n",
" wind | \n",
" weather | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Seattle | \n",
" 2012-01-01 00:00 | \n",
" 0.0 | \n",
" 12.8 | \n",
" 5.0 | \n",
" 4.7 | \n",
" drizzle | \n",
"
\n",
" \n",
" 1 | \n",
" Seattle | \n",
" 2012-01-02 00:00 | \n",
" 10.9 | \n",
" 10.6 | \n",
" 2.8 | \n",
" 4.5 | \n",
" rain | \n",
"
\n",
" \n",
" 2 | \n",
" Seattle | \n",
" 2012-01-03 00:00 | \n",
" 0.8 | \n",
" 11.7 | \n",
" 7.2 | \n",
" 2.3 | \n",
" rain | \n",
"
\n",
" \n",
" 3 | \n",
" Seattle | \n",
" 2012-01-04 00:00 | \n",
" 20.3 | \n",
" 12.2 | \n",
" 5.6 | \n",
" 4.7 | \n",
" rain | \n",
"
\n",
" \n",
" 4 | \n",
" Seattle | \n",
" 2012-01-05 00:00 | \n",
" 1.3 | \n",
" 8.9 | \n",
" 2.8 | \n",
" 6.1 | \n",
" rain | \n",
"
\n",
" \n",
" 5 | \n",
" Seattle | \n",
" 2012-01-06 00:00 | \n",
" 2.5 | \n",
" 4.4 | \n",
" 2.2 | \n",
" 2.2 | \n",
" rain | \n",
"
\n",
" \n",
" 6 | \n",
" Seattle | \n",
" 2012-01-07 00:00 | \n",
" 0.0 | \n",
" 7.2 | \n",
" 2.8 | \n",
" 2.3 | \n",
" rain | \n",
"
\n",
" \n",
" 7 | \n",
" Seattle | \n",
" 2012-01-08 00:00 | \n",
" 0.0 | \n",
" 10.0 | \n",
" 2.8 | \n",
" 2.0 | \n",
" sun | \n",
"
\n",
" \n",
" 8 | \n",
" Seattle | \n",
" 2012-01-09 00:00 | \n",
" 4.3 | \n",
" 9.4 | \n",
" 5.0 | \n",
" 3.4 | \n",
" rain | \n",
"
\n",
" \n",
" 9 | \n",
" Seattle | \n",
" 2012-01-10 00:00 | \n",
" 1.0 | \n",
" 6.1 | \n",
" 0.6 | \n",
" 3.4 | \n",
" rain | \n",
"
\n",
" \n",
" 10 | \n",
" Seattle | \n",
" 2012-01-11 00:00 | \n",
" 0.0 | \n",
" 6.1 | \n",
" -1.1 | \n",
" 5.1 | \n",
" sun | \n",
"
\n",
" \n",
" 11 | \n",
" Seattle | \n",
" 2012-01-12 00:00 | \n",
" 0.0 | \n",
" 6.1 | \n",
" -1.7 | \n",
" 1.9 | \n",
" sun | \n",
"
\n",
" \n",
" 12 | \n",
" Seattle | \n",
" 2012-01-13 00:00 | \n",
" 0.0 | \n",
" 5.0 | \n",
" -2.8 | \n",
" 1.3 | \n",
" sun | \n",
"
\n",
" \n",
" 13 | \n",
" Seattle | \n",
" 2012-01-14 00:00 | \n",
" 4.1 | \n",
" 4.4 | \n",
" 0.6 | \n",
" 5.3 | \n",
" snow | \n",
"
\n",
" \n",
" 14 | \n",
" Seattle | \n",
" 2012-01-15 00:00 | \n",
" 5.3 | \n",
" 1.1 | \n",
" -3.3 | \n",
" 3.2 | \n",
" snow | \n",
"
\n",
" \n",
" 15 | \n",
" Seattle | \n",
" 2012-01-16 00:00 | \n",
" 2.5 | \n",
" 1.7 | \n",
" -2.8 | \n",
" 5.0 | \n",
" snow | \n",
"
\n",
" \n",
" 16 | \n",
" Seattle | \n",
" 2012-01-17 00:00 | \n",
" 8.1 | \n",
" 3.3 | \n",
" 0.0 | \n",
" 5.6 | \n",
" snow | \n",
"
\n",
" \n",
" 17 | \n",
" Seattle | \n",
" 2012-01-18 00:00 | \n",
" 19.8 | \n",
" 0.0 | \n",
" -2.8 | \n",
" 5.0 | \n",
" snow | \n",
"
\n",
" \n",
" 18 | \n",
" Seattle | \n",
" 2012-01-19 00:00 | \n",
" 15.2 | \n",
" -1.1 | \n",
" -2.8 | \n",
" 1.6 | \n",
" snow | \n",
"
\n",
" \n",
" 19 | \n",
" Seattle | \n",
" 2012-01-20 00:00 | \n",
" 13.5 | \n",
" 7.2 | \n",
" -1.1 | \n",
" 2.3 | \n",
" snow | \n",
"
\n",
" \n",
" 20 | \n",
" Seattle | \n",
" 2012-01-21 00:00 | \n",
" 3.0 | \n",
" 8.3 | \n",
" 3.3 | \n",
" 8.2 | \n",
" rain | \n",
"
\n",
" \n",
" 21 | \n",
" Seattle | \n",
" 2012-01-22 00:00 | \n",
" 6.1 | \n",
" 6.7 | \n",
" 2.2 | \n",
" 4.8 | \n",
" rain | \n",
"
\n",
" \n",
" 22 | \n",
" Seattle | \n",
" 2012-01-23 00:00 | \n",
" 0.0 | \n",
" 8.3 | \n",
" 1.1 | \n",
" 3.6 | \n",
" rain | \n",
"
\n",
" \n",
" 23 | \n",
" Seattle | \n",
" 2012-01-24 00:00 | \n",
" 8.6 | \n",
" 10.0 | \n",
" 2.2 | \n",
" 5.1 | \n",
" rain | \n",
"
\n",
" \n",
" 24 | \n",
" Seattle | \n",
" 2012-01-25 00:00 | \n",
" 8.1 | \n",
" 8.9 | \n",
" 4.4 | \n",
" 5.4 | \n",
" rain | \n",
"
\n",
" \n",
" 25 | \n",
" Seattle | \n",
" 2012-01-26 00:00 | \n",
" 4.8 | \n",
" 8.9 | \n",
" 1.1 | \n",
" 4.8 | \n",
" rain | \n",
"
\n",
" \n",
" 26 | \n",
" Seattle | \n",
" 2012-01-27 00:00 | \n",
" 0.0 | \n",
" 6.7 | \n",
" -2.2 | \n",
" 1.4 | \n",
" drizzle | \n",
"
\n",
" \n",
" 27 | \n",
" Seattle | \n",
" 2012-01-28 00:00 | \n",
" 0.0 | \n",
" 6.7 | \n",
" 0.6 | \n",
" 2.2 | \n",
" rain | \n",
"
\n",
" \n",
" 28 | \n",
" Seattle | \n",
" 2012-01-29 00:00 | \n",
" 27.7 | \n",
" 9.4 | \n",
" 3.9 | \n",
" 4.5 | \n",
" rain | \n",
"
\n",
" \n",
" 29 | \n",
" Seattle | \n",
" 2012-01-30 00:00 | \n",
" 3.6 | \n",
" 8.3 | \n",
" 6.1 | \n",
" 5.1 | \n",
" rain | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 2892 | \n",
" New York | \n",
" 2015-12-02 00:00 | \n",
" 3.0 | \n",
" 13.9 | \n",
" 8.3 | \n",
" 2.0 | \n",
" fog | \n",
"
\n",
" \n",
" 2893 | \n",
" New York | \n",
" 2015-12-03 00:00 | \n",
" 0.0 | \n",
" 13.3 | \n",
" 7.2 | \n",
" 7.2 | \n",
" sun | \n",
"
\n",
" \n",
" 2894 | \n",
" New York | \n",
" 2015-12-04 00:00 | \n",
" 0.0 | \n",
" 11.7 | \n",
" 5.0 | \n",
" 4.7 | \n",
" sun | \n",
"
\n",
" \n",
" 2895 | \n",
" New York | \n",
" 2015-12-05 00:00 | \n",
" 0.0 | \n",
" 11.7 | \n",
" 1.7 | \n",
" 2.4 | \n",
" sun | \n",
"
\n",
" \n",
" 2896 | \n",
" New York | \n",
" 2015-12-06 00:00 | \n",
" 0.0 | \n",
" 10.6 | \n",
" 3.3 | \n",
" 2.9 | \n",
" sun | \n",
"
\n",
" \n",
" 2897 | \n",
" New York | \n",
" 2015-12-07 00:00 | \n",
" 0.0 | \n",
" 12.8 | \n",
" 4.4 | \n",
" 3.4 | \n",
" drizzle | \n",
"
\n",
" \n",
" 2898 | \n",
" New York | \n",
" 2015-12-08 00:00 | \n",
" 0.0 | \n",
" 10.6 | \n",
" 4.4 | \n",
" 3.5 | \n",
" sun | \n",
"
\n",
" \n",
" 2899 | \n",
" New York | \n",
" 2015-12-09 00:00 | \n",
" 0.0 | \n",
" 12.8 | \n",
" 1.1 | \n",
" 3.4 | \n",
" sun | \n",
"
\n",
" \n",
" 2900 | \n",
" New York | \n",
" 2015-12-10 00:00 | \n",
" 0.0 | \n",
" 15.0 | \n",
" 8.9 | \n",
" 3.0 | \n",
" drizzle | \n",
"
\n",
" \n",
" 2901 | \n",
" New York | \n",
" 2015-12-11 00:00 | \n",
" 0.0 | \n",
" 14.4 | \n",
" 7.8 | \n",
" 2.7 | \n",
" drizzle | \n",
"
\n",
" \n",
" 2902 | \n",
" New York | \n",
" 2015-12-12 00:00 | \n",
" 0.0 | \n",
" 17.8 | \n",
" 9.4 | \n",
" 1.9 | \n",
" fog | \n",
"
\n",
" \n",
" 2903 | \n",
" New York | \n",
" 2015-12-13 00:00 | \n",
" 0.0 | \n",
" 21.1 | \n",
" 11.7 | \n",
" 3.1 | \n",
" drizzle | \n",
"
\n",
" \n",
" 2904 | \n",
" New York | \n",
" 2015-12-14 00:00 | \n",
" 9.1 | \n",
" 16.1 | \n",
" 11.7 | \n",
" 4.8 | \n",
" fog | \n",
"
\n",
" \n",
" 2905 | \n",
" New York | \n",
" 2015-12-15 00:00 | \n",
" 2.3 | \n",
" 17.8 | \n",
" 11.7 | \n",
" 8.2 | \n",
" fog | \n",
"
\n",
" \n",
" 2906 | \n",
" New York | \n",
" 2015-12-16 00:00 | \n",
" 1.3 | \n",
" 11.7 | \n",
" 7.2 | \n",
" 4.1 | \n",
" fog | \n",
"
\n",
" \n",
" 2907 | \n",
" New York | \n",
" 2015-12-17 00:00 | \n",
" 29.7 | \n",
" 15.0 | \n",
" 10.0 | \n",
" 4.1 | \n",
" fog | \n",
"
\n",
" \n",
" 2908 | \n",
" New York | \n",
" 2015-12-18 00:00 | \n",
" 0.3 | \n",
" 14.4 | \n",
" 3.9 | \n",
" 6.1 | \n",
" sun | \n",
"
\n",
" \n",
" 2909 | \n",
" New York | \n",
" 2015-12-19 00:00 | \n",
" 0.0 | \n",
" 5.0 | \n",
" 2.2 | \n",
" 9.0 | \n",
" sun | \n",
"
\n",
" \n",
" 2910 | \n",
" New York | \n",
" 2015-12-20 00:00 | \n",
" 0.0 | \n",
" 6.7 | \n",
" 1.7 | \n",
" 5.1 | \n",
" sun | \n",
"
\n",
" \n",
" 2911 | \n",
" New York | \n",
" 2015-12-21 00:00 | \n",
" 0.0 | \n",
" 12.8 | \n",
" 3.3 | \n",
" 5.3 | \n",
" sun | \n",
"
\n",
" \n",
" 2912 | \n",
" New York | \n",
" 2015-12-22 00:00 | \n",
" 4.8 | \n",
" 15.6 | \n",
" 11.1 | \n",
" 3.8 | \n",
" fog | \n",
"
\n",
" \n",
" 2913 | \n",
" New York | \n",
" 2015-12-23 00:00 | \n",
" 29.5 | \n",
" 17.2 | \n",
" 8.9 | \n",
" 4.5 | \n",
" fog | \n",
"
\n",
" \n",
" 2914 | \n",
" New York | \n",
" 2015-12-24 00:00 | \n",
" 0.5 | \n",
" 20.6 | \n",
" 13.9 | \n",
" 4.9 | \n",
" fog | \n",
"
\n",
" \n",
" 2915 | \n",
" New York | \n",
" 2015-12-25 00:00 | \n",
" 2.5 | \n",
" 17.8 | \n",
" 11.1 | \n",
" 0.9 | \n",
" fog | \n",
"
\n",
" \n",
" 2916 | \n",
" New York | \n",
" 2015-12-26 00:00 | \n",
" 0.3 | \n",
" 15.6 | \n",
" 9.4 | \n",
" 4.8 | \n",
" drizzle | \n",
"
\n",
" \n",
" 2917 | \n",
" New York | \n",
" 2015-12-27 00:00 | \n",
" 2.0 | \n",
" 17.2 | \n",
" 8.9 | \n",
" 5.5 | \n",
" fog | \n",
"
\n",
" \n",
" 2918 | \n",
" New York | \n",
" 2015-12-28 00:00 | \n",
" 1.3 | \n",
" 8.9 | \n",
" 1.7 | \n",
" 6.3 | \n",
" snow | \n",
"
\n",
" \n",
" 2919 | \n",
" New York | \n",
" 2015-12-29 00:00 | \n",
" 16.8 | \n",
" 9.4 | \n",
" 1.1 | \n",
" 5.3 | \n",
" fog | \n",
"
\n",
" \n",
" 2920 | \n",
" New York | \n",
" 2015-12-30 00:00 | \n",
" 9.4 | \n",
" 10.6 | \n",
" 5.0 | \n",
" 3.0 | \n",
" fog | \n",
"
\n",
" \n",
" 2921 | \n",
" New York | \n",
" 2015-12-31 00:00 | \n",
" 1.5 | \n",
" 11.1 | \n",
" 6.1 | \n",
" 5.5 | \n",
" fog | \n",
"
\n",
" \n",
"
\n",
"
2922 rows × 7 columns
\n",
"
"
],
"text/plain": [
" location date precipitation temp_max temp_min wind \\\n",
"0 Seattle 2012-01-01 00:00 0.0 12.8 5.0 4.7 \n",
"1 Seattle 2012-01-02 00:00 10.9 10.6 2.8 4.5 \n",
"2 Seattle 2012-01-03 00:00 0.8 11.7 7.2 2.3 \n",
"3 Seattle 2012-01-04 00:00 20.3 12.2 5.6 4.7 \n",
"4 Seattle 2012-01-05 00:00 1.3 8.9 2.8 6.1 \n",
"5 Seattle 2012-01-06 00:00 2.5 4.4 2.2 2.2 \n",
"6 Seattle 2012-01-07 00:00 0.0 7.2 2.8 2.3 \n",
"7 Seattle 2012-01-08 00:00 0.0 10.0 2.8 2.0 \n",
"8 Seattle 2012-01-09 00:00 4.3 9.4 5.0 3.4 \n",
"9 Seattle 2012-01-10 00:00 1.0 6.1 0.6 3.4 \n",
"10 Seattle 2012-01-11 00:00 0.0 6.1 -1.1 5.1 \n",
"11 Seattle 2012-01-12 00:00 0.0 6.1 -1.7 1.9 \n",
"12 Seattle 2012-01-13 00:00 0.0 5.0 -2.8 1.3 \n",
"13 Seattle 2012-01-14 00:00 4.1 4.4 0.6 5.3 \n",
"14 Seattle 2012-01-15 00:00 5.3 1.1 -3.3 3.2 \n",
"15 Seattle 2012-01-16 00:00 2.5 1.7 -2.8 5.0 \n",
"16 Seattle 2012-01-17 00:00 8.1 3.3 0.0 5.6 \n",
"17 Seattle 2012-01-18 00:00 19.8 0.0 -2.8 5.0 \n",
"18 Seattle 2012-01-19 00:00 15.2 -1.1 -2.8 1.6 \n",
"19 Seattle 2012-01-20 00:00 13.5 7.2 -1.1 2.3 \n",
"20 Seattle 2012-01-21 00:00 3.0 8.3 3.3 8.2 \n",
"21 Seattle 2012-01-22 00:00 6.1 6.7 2.2 4.8 \n",
"22 Seattle 2012-01-23 00:00 0.0 8.3 1.1 3.6 \n",
"23 Seattle 2012-01-24 00:00 8.6 10.0 2.2 5.1 \n",
"24 Seattle 2012-01-25 00:00 8.1 8.9 4.4 5.4 \n",
"25 Seattle 2012-01-26 00:00 4.8 8.9 1.1 4.8 \n",
"26 Seattle 2012-01-27 00:00 0.0 6.7 -2.2 1.4 \n",
"27 Seattle 2012-01-28 00:00 0.0 6.7 0.6 2.2 \n",
"28 Seattle 2012-01-29 00:00 27.7 9.4 3.9 4.5 \n",
"29 Seattle 2012-01-30 00:00 3.6 8.3 6.1 5.1 \n",
"... ... ... ... ... ... ... \n",
"2892 New York 2015-12-02 00:00 3.0 13.9 8.3 2.0 \n",
"2893 New York 2015-12-03 00:00 0.0 13.3 7.2 7.2 \n",
"2894 New York 2015-12-04 00:00 0.0 11.7 5.0 4.7 \n",
"2895 New York 2015-12-05 00:00 0.0 11.7 1.7 2.4 \n",
"2896 New York 2015-12-06 00:00 0.0 10.6 3.3 2.9 \n",
"2897 New York 2015-12-07 00:00 0.0 12.8 4.4 3.4 \n",
"2898 New York 2015-12-08 00:00 0.0 10.6 4.4 3.5 \n",
"2899 New York 2015-12-09 00:00 0.0 12.8 1.1 3.4 \n",
"2900 New York 2015-12-10 00:00 0.0 15.0 8.9 3.0 \n",
"2901 New York 2015-12-11 00:00 0.0 14.4 7.8 2.7 \n",
"2902 New York 2015-12-12 00:00 0.0 17.8 9.4 1.9 \n",
"2903 New York 2015-12-13 00:00 0.0 21.1 11.7 3.1 \n",
"2904 New York 2015-12-14 00:00 9.1 16.1 11.7 4.8 \n",
"2905 New York 2015-12-15 00:00 2.3 17.8 11.7 8.2 \n",
"2906 New York 2015-12-16 00:00 1.3 11.7 7.2 4.1 \n",
"2907 New York 2015-12-17 00:00 29.7 15.0 10.0 4.1 \n",
"2908 New York 2015-12-18 00:00 0.3 14.4 3.9 6.1 \n",
"2909 New York 2015-12-19 00:00 0.0 5.0 2.2 9.0 \n",
"2910 New York 2015-12-20 00:00 0.0 6.7 1.7 5.1 \n",
"2911 New York 2015-12-21 00:00 0.0 12.8 3.3 5.3 \n",
"2912 New York 2015-12-22 00:00 4.8 15.6 11.1 3.8 \n",
"2913 New York 2015-12-23 00:00 29.5 17.2 8.9 4.5 \n",
"2914 New York 2015-12-24 00:00 0.5 20.6 13.9 4.9 \n",
"2915 New York 2015-12-25 00:00 2.5 17.8 11.1 0.9 \n",
"2916 New York 2015-12-26 00:00 0.3 15.6 9.4 4.8 \n",
"2917 New York 2015-12-27 00:00 2.0 17.2 8.9 5.5 \n",
"2918 New York 2015-12-28 00:00 1.3 8.9 1.7 6.3 \n",
"2919 New York 2015-12-29 00:00 16.8 9.4 1.1 5.3 \n",
"2920 New York 2015-12-30 00:00 9.4 10.6 5.0 3.0 \n",
"2921 New York 2015-12-31 00:00 1.5 11.1 6.1 5.5 \n",
"\n",
" weather \n",
"0 drizzle \n",
"1 rain \n",
"2 rain \n",
"3 rain \n",
"4 rain \n",
"5 rain \n",
"6 rain \n",
"7 sun \n",
"8 rain \n",
"9 rain \n",
"10 sun \n",
"11 sun \n",
"12 sun \n",
"13 snow \n",
"14 snow \n",
"15 snow \n",
"16 snow \n",
"17 snow \n",
"18 snow \n",
"19 snow \n",
"20 rain \n",
"21 rain \n",
"22 rain \n",
"23 rain \n",
"24 rain \n",
"25 rain \n",
"26 drizzle \n",
"27 rain \n",
"28 rain \n",
"29 rain \n",
"... ... \n",
"2892 fog \n",
"2893 sun \n",
"2894 sun \n",
"2895 sun \n",
"2896 sun \n",
"2897 drizzle \n",
"2898 sun \n",
"2899 sun \n",
"2900 drizzle \n",
"2901 drizzle \n",
"2902 fog \n",
"2903 drizzle \n",
"2904 fog \n",
"2905 fog \n",
"2906 fog \n",
"2907 fog \n",
"2908 sun \n",
"2909 sun \n",
"2910 sun \n",
"2911 sun \n",
"2912 fog \n",
"2913 fog \n",
"2914 fog \n",
"2915 fog \n",
"2916 drizzle \n",
"2917 fog \n",
"2918 snow \n",
"2919 fog \n",
"2920 fog \n",
"2921 fog \n",
"\n",
"[2922 rows x 7 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# load the data using pandas library\n",
"# do you remember what was pd?\n",
"pd.read_csv(\"weather.csv\")\n",
"\n",
"# Jupter notebook tip:\n",
"# type: pd.\n",
"# then hit tab, see what happens\n",
"# try also: pd.read_ (then hit tab)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Loading File From URL\n",
"If the CSV file is downloadable from a url, you can put the URL in place of the file name:"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" date | \n",
" precipitation | \n",
" temp_max | \n",
" temp_min | \n",
" wind | \n",
" weather | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Seattle | \n",
" 2012-01-01 00:00 | \n",
" 0.0 | \n",
" 12.8 | \n",
" 5.0 | \n",
" 4.7 | \n",
" drizzle | \n",
"
\n",
" \n",
" 1 | \n",
" Seattle | \n",
" 2012-01-02 00:00 | \n",
" 10.9 | \n",
" 10.6 | \n",
" 2.8 | \n",
" 4.5 | \n",
" rain | \n",
"
\n",
" \n",
" 2 | \n",
" Seattle | \n",
" 2012-01-03 00:00 | \n",
" 0.8 | \n",
" 11.7 | \n",
" 7.2 | \n",
" 2.3 | \n",
" rain | \n",
"
\n",
" \n",
" 3 | \n",
" Seattle | \n",
" 2012-01-04 00:00 | \n",
" 20.3 | \n",
" 12.2 | \n",
" 5.6 | \n",
" 4.7 | \n",
" rain | \n",
"
\n",
" \n",
" 4 | \n",
" Seattle | \n",
" 2012-01-05 00:00 | \n",
" 1.3 | \n",
" 8.9 | \n",
" 2.8 | \n",
" 6.1 | \n",
" rain | \n",
"
\n",
" \n",
" 5 | \n",
" Seattle | \n",
" 2012-01-06 00:00 | \n",
" 2.5 | \n",
" 4.4 | \n",
" 2.2 | \n",
" 2.2 | \n",
" rain | \n",
"
\n",
" \n",
" 6 | \n",
" Seattle | \n",
" 2012-01-07 00:00 | \n",
" 0.0 | \n",
" 7.2 | \n",
" 2.8 | \n",
" 2.3 | \n",
" rain | \n",
"
\n",
" \n",
" 7 | \n",
" Seattle | \n",
" 2012-01-08 00:00 | \n",
" 0.0 | \n",
" 10.0 | \n",
" 2.8 | \n",
" 2.0 | \n",
" sun | \n",
"
\n",
" \n",
" 8 | \n",
" Seattle | \n",
" 2012-01-09 00:00 | \n",
" 4.3 | \n",
" 9.4 | \n",
" 5.0 | \n",
" 3.4 | \n",
" rain | \n",
"
\n",
" \n",
" 9 | \n",
" Seattle | \n",
" 2012-01-10 00:00 | \n",
" 1.0 | \n",
" 6.1 | \n",
" 0.6 | \n",
" 3.4 | \n",
" rain | \n",
"
\n",
" \n",
" 10 | \n",
" Seattle | \n",
" 2012-01-11 00:00 | \n",
" 0.0 | \n",
" 6.1 | \n",
" -1.1 | \n",
" 5.1 | \n",
" sun | \n",
"
\n",
" \n",
" 11 | \n",
" Seattle | \n",
" 2012-01-12 00:00 | \n",
" 0.0 | \n",
" 6.1 | \n",
" -1.7 | \n",
" 1.9 | \n",
" sun | \n",
"
\n",
" \n",
" 12 | \n",
" Seattle | \n",
" 2012-01-13 00:00 | \n",
" 0.0 | \n",
" 5.0 | \n",
" -2.8 | \n",
" 1.3 | \n",
" sun | \n",
"
\n",
" \n",
" 13 | \n",
" Seattle | \n",
" 2012-01-14 00:00 | \n",
" 4.1 | \n",
" 4.4 | \n",
" 0.6 | \n",
" 5.3 | \n",
" snow | \n",
"
\n",
" \n",
" 14 | \n",
" Seattle | \n",
" 2012-01-15 00:00 | \n",
" 5.3 | \n",
" 1.1 | \n",
" -3.3 | \n",
" 3.2 | \n",
" snow | \n",
"
\n",
" \n",
" 15 | \n",
" Seattle | \n",
" 2012-01-16 00:00 | \n",
" 2.5 | \n",
" 1.7 | \n",
" -2.8 | \n",
" 5.0 | \n",
" snow | \n",
"
\n",
" \n",
" 16 | \n",
" Seattle | \n",
" 2012-01-17 00:00 | \n",
" 8.1 | \n",
" 3.3 | \n",
" 0.0 | \n",
" 5.6 | \n",
" snow | \n",
"
\n",
" \n",
" 17 | \n",
" Seattle | \n",
" 2012-01-18 00:00 | \n",
" 19.8 | \n",
" 0.0 | \n",
" -2.8 | \n",
" 5.0 | \n",
" snow | \n",
"
\n",
" \n",
" 18 | \n",
" Seattle | \n",
" 2012-01-19 00:00 | \n",
" 15.2 | \n",
" -1.1 | \n",
" -2.8 | \n",
" 1.6 | \n",
" snow | \n",
"
\n",
" \n",
" 19 | \n",
" Seattle | \n",
" 2012-01-20 00:00 | \n",
" 13.5 | \n",
" 7.2 | \n",
" -1.1 | \n",
" 2.3 | \n",
" snow | \n",
"
\n",
" \n",
" 20 | \n",
" Seattle | \n",
" 2012-01-21 00:00 | \n",
" 3.0 | \n",
" 8.3 | \n",
" 3.3 | \n",
" 8.2 | \n",
" rain | \n",
"
\n",
" \n",
" 21 | \n",
" Seattle | \n",
" 2012-01-22 00:00 | \n",
" 6.1 | \n",
" 6.7 | \n",
" 2.2 | \n",
" 4.8 | \n",
" rain | \n",
"
\n",
" \n",
" 22 | \n",
" Seattle | \n",
" 2012-01-23 00:00 | \n",
" 0.0 | \n",
" 8.3 | \n",
" 1.1 | \n",
" 3.6 | \n",
" rain | \n",
"
\n",
" \n",
" 23 | \n",
" Seattle | \n",
" 2012-01-24 00:00 | \n",
" 8.6 | \n",
" 10.0 | \n",
" 2.2 | \n",
" 5.1 | \n",
" rain | \n",
"
\n",
" \n",
" 24 | \n",
" Seattle | \n",
" 2012-01-25 00:00 | \n",
" 8.1 | \n",
" 8.9 | \n",
" 4.4 | \n",
" 5.4 | \n",
" rain | \n",
"
\n",
" \n",
" 25 | \n",
" Seattle | \n",
" 2012-01-26 00:00 | \n",
" 4.8 | \n",
" 8.9 | \n",
" 1.1 | \n",
" 4.8 | \n",
" rain | \n",
"
\n",
" \n",
" 26 | \n",
" Seattle | \n",
" 2012-01-27 00:00 | \n",
" 0.0 | \n",
" 6.7 | \n",
" -2.2 | \n",
" 1.4 | \n",
" drizzle | \n",
"
\n",
" \n",
" 27 | \n",
" Seattle | \n",
" 2012-01-28 00:00 | \n",
" 0.0 | \n",
" 6.7 | \n",
" 0.6 | \n",
" 2.2 | \n",
" rain | \n",
"
\n",
" \n",
" 28 | \n",
" Seattle | \n",
" 2012-01-29 00:00 | \n",
" 27.7 | \n",
" 9.4 | \n",
" 3.9 | \n",
" 4.5 | \n",
" rain | \n",
"
\n",
" \n",
" 29 | \n",
" Seattle | \n",
" 2012-01-30 00:00 | \n",
" 3.6 | \n",
" 8.3 | \n",
" 6.1 | \n",
" 5.1 | \n",
" rain | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 2892 | \n",
" New York | \n",
" 2015-12-02 00:00 | \n",
" 3.0 | \n",
" 13.9 | \n",
" 8.3 | \n",
" 2.0 | \n",
" fog | \n",
"
\n",
" \n",
" 2893 | \n",
" New York | \n",
" 2015-12-03 00:00 | \n",
" 0.0 | \n",
" 13.3 | \n",
" 7.2 | \n",
" 7.2 | \n",
" sun | \n",
"
\n",
" \n",
" 2894 | \n",
" New York | \n",
" 2015-12-04 00:00 | \n",
" 0.0 | \n",
" 11.7 | \n",
" 5.0 | \n",
" 4.7 | \n",
" sun | \n",
"
\n",
" \n",
" 2895 | \n",
" New York | \n",
" 2015-12-05 00:00 | \n",
" 0.0 | \n",
" 11.7 | \n",
" 1.7 | \n",
" 2.4 | \n",
" sun | \n",
"
\n",
" \n",
" 2896 | \n",
" New York | \n",
" 2015-12-06 00:00 | \n",
" 0.0 | \n",
" 10.6 | \n",
" 3.3 | \n",
" 2.9 | \n",
" sun | \n",
"
\n",
" \n",
" 2897 | \n",
" New York | \n",
" 2015-12-07 00:00 | \n",
" 0.0 | \n",
" 12.8 | \n",
" 4.4 | \n",
" 3.4 | \n",
" drizzle | \n",
"
\n",
" \n",
" 2898 | \n",
" New York | \n",
" 2015-12-08 00:00 | \n",
" 0.0 | \n",
" 10.6 | \n",
" 4.4 | \n",
" 3.5 | \n",
" sun | \n",
"
\n",
" \n",
" 2899 | \n",
" New York | \n",
" 2015-12-09 00:00 | \n",
" 0.0 | \n",
" 12.8 | \n",
" 1.1 | \n",
" 3.4 | \n",
" sun | \n",
"
\n",
" \n",
" 2900 | \n",
" New York | \n",
" 2015-12-10 00:00 | \n",
" 0.0 | \n",
" 15.0 | \n",
" 8.9 | \n",
" 3.0 | \n",
" drizzle | \n",
"
\n",
" \n",
" 2901 | \n",
" New York | \n",
" 2015-12-11 00:00 | \n",
" 0.0 | \n",
" 14.4 | \n",
" 7.8 | \n",
" 2.7 | \n",
" drizzle | \n",
"
\n",
" \n",
" 2902 | \n",
" New York | \n",
" 2015-12-12 00:00 | \n",
" 0.0 | \n",
" 17.8 | \n",
" 9.4 | \n",
" 1.9 | \n",
" fog | \n",
"
\n",
" \n",
" 2903 | \n",
" New York | \n",
" 2015-12-13 00:00 | \n",
" 0.0 | \n",
" 21.1 | \n",
" 11.7 | \n",
" 3.1 | \n",
" drizzle | \n",
"
\n",
" \n",
" 2904 | \n",
" New York | \n",
" 2015-12-14 00:00 | \n",
" 9.1 | \n",
" 16.1 | \n",
" 11.7 | \n",
" 4.8 | \n",
" fog | \n",
"
\n",
" \n",
" 2905 | \n",
" New York | \n",
" 2015-12-15 00:00 | \n",
" 2.3 | \n",
" 17.8 | \n",
" 11.7 | \n",
" 8.2 | \n",
" fog | \n",
"
\n",
" \n",
" 2906 | \n",
" New York | \n",
" 2015-12-16 00:00 | \n",
" 1.3 | \n",
" 11.7 | \n",
" 7.2 | \n",
" 4.1 | \n",
" fog | \n",
"
\n",
" \n",
" 2907 | \n",
" New York | \n",
" 2015-12-17 00:00 | \n",
" 29.7 | \n",
" 15.0 | \n",
" 10.0 | \n",
" 4.1 | \n",
" fog | \n",
"
\n",
" \n",
" 2908 | \n",
" New York | \n",
" 2015-12-18 00:00 | \n",
" 0.3 | \n",
" 14.4 | \n",
" 3.9 | \n",
" 6.1 | \n",
" sun | \n",
"
\n",
" \n",
" 2909 | \n",
" New York | \n",
" 2015-12-19 00:00 | \n",
" 0.0 | \n",
" 5.0 | \n",
" 2.2 | \n",
" 9.0 | \n",
" sun | \n",
"
\n",
" \n",
" 2910 | \n",
" New York | \n",
" 2015-12-20 00:00 | \n",
" 0.0 | \n",
" 6.7 | \n",
" 1.7 | \n",
" 5.1 | \n",
" sun | \n",
"
\n",
" \n",
" 2911 | \n",
" New York | \n",
" 2015-12-21 00:00 | \n",
" 0.0 | \n",
" 12.8 | \n",
" 3.3 | \n",
" 5.3 | \n",
" sun | \n",
"
\n",
" \n",
" 2912 | \n",
" New York | \n",
" 2015-12-22 00:00 | \n",
" 4.8 | \n",
" 15.6 | \n",
" 11.1 | \n",
" 3.8 | \n",
" fog | \n",
"
\n",
" \n",
" 2913 | \n",
" New York | \n",
" 2015-12-23 00:00 | \n",
" 29.5 | \n",
" 17.2 | \n",
" 8.9 | \n",
" 4.5 | \n",
" fog | \n",
"
\n",
" \n",
" 2914 | \n",
" New York | \n",
" 2015-12-24 00:00 | \n",
" 0.5 | \n",
" 20.6 | \n",
" 13.9 | \n",
" 4.9 | \n",
" fog | \n",
"
\n",
" \n",
" 2915 | \n",
" New York | \n",
" 2015-12-25 00:00 | \n",
" 2.5 | \n",
" 17.8 | \n",
" 11.1 | \n",
" 0.9 | \n",
" fog | \n",
"
\n",
" \n",
" 2916 | \n",
" New York | \n",
" 2015-12-26 00:00 | \n",
" 0.3 | \n",
" 15.6 | \n",
" 9.4 | \n",
" 4.8 | \n",
" drizzle | \n",
"
\n",
" \n",
" 2917 | \n",
" New York | \n",
" 2015-12-27 00:00 | \n",
" 2.0 | \n",
" 17.2 | \n",
" 8.9 | \n",
" 5.5 | \n",
" fog | \n",
"
\n",
" \n",
" 2918 | \n",
" New York | \n",
" 2015-12-28 00:00 | \n",
" 1.3 | \n",
" 8.9 | \n",
" 1.7 | \n",
" 6.3 | \n",
" snow | \n",
"
\n",
" \n",
" 2919 | \n",
" New York | \n",
" 2015-12-29 00:00 | \n",
" 16.8 | \n",
" 9.4 | \n",
" 1.1 | \n",
" 5.3 | \n",
" fog | \n",
"
\n",
" \n",
" 2920 | \n",
" New York | \n",
" 2015-12-30 00:00 | \n",
" 9.4 | \n",
" 10.6 | \n",
" 5.0 | \n",
" 3.0 | \n",
" fog | \n",
"
\n",
" \n",
" 2921 | \n",
" New York | \n",
" 2015-12-31 00:00 | \n",
" 1.5 | \n",
" 11.1 | \n",
" 6.1 | \n",
" 5.5 | \n",
" fog | \n",
"
\n",
" \n",
"
\n",
"
2922 rows × 7 columns
\n",
"
"
],
"text/plain": [
" location date precipitation temp_max temp_min wind \\\n",
"0 Seattle 2012-01-01 00:00 0.0 12.8 5.0 4.7 \n",
"1 Seattle 2012-01-02 00:00 10.9 10.6 2.8 4.5 \n",
"2 Seattle 2012-01-03 00:00 0.8 11.7 7.2 2.3 \n",
"3 Seattle 2012-01-04 00:00 20.3 12.2 5.6 4.7 \n",
"4 Seattle 2012-01-05 00:00 1.3 8.9 2.8 6.1 \n",
"5 Seattle 2012-01-06 00:00 2.5 4.4 2.2 2.2 \n",
"6 Seattle 2012-01-07 00:00 0.0 7.2 2.8 2.3 \n",
"7 Seattle 2012-01-08 00:00 0.0 10.0 2.8 2.0 \n",
"8 Seattle 2012-01-09 00:00 4.3 9.4 5.0 3.4 \n",
"9 Seattle 2012-01-10 00:00 1.0 6.1 0.6 3.4 \n",
"10 Seattle 2012-01-11 00:00 0.0 6.1 -1.1 5.1 \n",
"11 Seattle 2012-01-12 00:00 0.0 6.1 -1.7 1.9 \n",
"12 Seattle 2012-01-13 00:00 0.0 5.0 -2.8 1.3 \n",
"13 Seattle 2012-01-14 00:00 4.1 4.4 0.6 5.3 \n",
"14 Seattle 2012-01-15 00:00 5.3 1.1 -3.3 3.2 \n",
"15 Seattle 2012-01-16 00:00 2.5 1.7 -2.8 5.0 \n",
"16 Seattle 2012-01-17 00:00 8.1 3.3 0.0 5.6 \n",
"17 Seattle 2012-01-18 00:00 19.8 0.0 -2.8 5.0 \n",
"18 Seattle 2012-01-19 00:00 15.2 -1.1 -2.8 1.6 \n",
"19 Seattle 2012-01-20 00:00 13.5 7.2 -1.1 2.3 \n",
"20 Seattle 2012-01-21 00:00 3.0 8.3 3.3 8.2 \n",
"21 Seattle 2012-01-22 00:00 6.1 6.7 2.2 4.8 \n",
"22 Seattle 2012-01-23 00:00 0.0 8.3 1.1 3.6 \n",
"23 Seattle 2012-01-24 00:00 8.6 10.0 2.2 5.1 \n",
"24 Seattle 2012-01-25 00:00 8.1 8.9 4.4 5.4 \n",
"25 Seattle 2012-01-26 00:00 4.8 8.9 1.1 4.8 \n",
"26 Seattle 2012-01-27 00:00 0.0 6.7 -2.2 1.4 \n",
"27 Seattle 2012-01-28 00:00 0.0 6.7 0.6 2.2 \n",
"28 Seattle 2012-01-29 00:00 27.7 9.4 3.9 4.5 \n",
"29 Seattle 2012-01-30 00:00 3.6 8.3 6.1 5.1 \n",
"... ... ... ... ... ... ... \n",
"2892 New York 2015-12-02 00:00 3.0 13.9 8.3 2.0 \n",
"2893 New York 2015-12-03 00:00 0.0 13.3 7.2 7.2 \n",
"2894 New York 2015-12-04 00:00 0.0 11.7 5.0 4.7 \n",
"2895 New York 2015-12-05 00:00 0.0 11.7 1.7 2.4 \n",
"2896 New York 2015-12-06 00:00 0.0 10.6 3.3 2.9 \n",
"2897 New York 2015-12-07 00:00 0.0 12.8 4.4 3.4 \n",
"2898 New York 2015-12-08 00:00 0.0 10.6 4.4 3.5 \n",
"2899 New York 2015-12-09 00:00 0.0 12.8 1.1 3.4 \n",
"2900 New York 2015-12-10 00:00 0.0 15.0 8.9 3.0 \n",
"2901 New York 2015-12-11 00:00 0.0 14.4 7.8 2.7 \n",
"2902 New York 2015-12-12 00:00 0.0 17.8 9.4 1.9 \n",
"2903 New York 2015-12-13 00:00 0.0 21.1 11.7 3.1 \n",
"2904 New York 2015-12-14 00:00 9.1 16.1 11.7 4.8 \n",
"2905 New York 2015-12-15 00:00 2.3 17.8 11.7 8.2 \n",
"2906 New York 2015-12-16 00:00 1.3 11.7 7.2 4.1 \n",
"2907 New York 2015-12-17 00:00 29.7 15.0 10.0 4.1 \n",
"2908 New York 2015-12-18 00:00 0.3 14.4 3.9 6.1 \n",
"2909 New York 2015-12-19 00:00 0.0 5.0 2.2 9.0 \n",
"2910 New York 2015-12-20 00:00 0.0 6.7 1.7 5.1 \n",
"2911 New York 2015-12-21 00:00 0.0 12.8 3.3 5.3 \n",
"2912 New York 2015-12-22 00:00 4.8 15.6 11.1 3.8 \n",
"2913 New York 2015-12-23 00:00 29.5 17.2 8.9 4.5 \n",
"2914 New York 2015-12-24 00:00 0.5 20.6 13.9 4.9 \n",
"2915 New York 2015-12-25 00:00 2.5 17.8 11.1 0.9 \n",
"2916 New York 2015-12-26 00:00 0.3 15.6 9.4 4.8 \n",
"2917 New York 2015-12-27 00:00 2.0 17.2 8.9 5.5 \n",
"2918 New York 2015-12-28 00:00 1.3 8.9 1.7 6.3 \n",
"2919 New York 2015-12-29 00:00 16.8 9.4 1.1 5.3 \n",
"2920 New York 2015-12-30 00:00 9.4 10.6 5.0 3.0 \n",
"2921 New York 2015-12-31 00:00 1.5 11.1 6.1 5.5 \n",
"\n",
" weather \n",
"0 drizzle \n",
"1 rain \n",
"2 rain \n",
"3 rain \n",
"4 rain \n",
"5 rain \n",
"6 rain \n",
"7 sun \n",
"8 rain \n",
"9 rain \n",
"10 sun \n",
"11 sun \n",
"12 sun \n",
"13 snow \n",
"14 snow \n",
"15 snow \n",
"16 snow \n",
"17 snow \n",
"18 snow \n",
"19 snow \n",
"20 rain \n",
"21 rain \n",
"22 rain \n",
"23 rain \n",
"24 rain \n",
"25 rain \n",
"26 drizzle \n",
"27 rain \n",
"28 rain \n",
"29 rain \n",
"... ... \n",
"2892 fog \n",
"2893 sun \n",
"2894 sun \n",
"2895 sun \n",
"2896 sun \n",
"2897 drizzle \n",
"2898 sun \n",
"2899 sun \n",
"2900 drizzle \n",
"2901 drizzle \n",
"2902 fog \n",
"2903 drizzle \n",
"2904 fog \n",
"2905 fog \n",
"2906 fog \n",
"2907 fog \n",
"2908 sun \n",
"2909 sun \n",
"2910 sun \n",
"2911 sun \n",
"2912 fog \n",
"2913 fog \n",
"2914 fog \n",
"2915 fog \n",
"2916 drizzle \n",
"2917 fog \n",
"2918 snow \n",
"2919 fog \n",
"2920 fog \n",
"2921 fog \n",
"\n",
"[2922 rows x 7 columns]"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"my_df = pd.read_csv(\"https://raw.githubusercontent.com/vega/vega-datasets/gh-pages/data/weather.csv\")\n",
"my_df"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Now it is your turn\n",
"Download [airport.csv](https://raw.githubusercontent.com/vega/vega-datasets/gh-pages/data/airports.csv) then load it into the notebook\n",
"\n",
"**Remember:** Right click on the link and select **save target as**"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# File Types\n",
"- CSV: Comma Separated Values [example](https://raw.githubusercontent.com/vega/vega-datasets/gh-pages/data/weather.csv)\n",
" - Use pd.read_csv\n",
"- JSON: Javascript Object Notation [example](https://github.com/vega/vega-datasets/raw/gh-pages/data/cars.json)\n",
" - Use pd.read_json\n",
"- Excel: Microsoft Excel File\n",
" - Use pd.read_excel\n",
"- Others, type pd.read_ then hit Tab to see a list"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# Your turn\n",
"# Load: https://github.com/vega/vega-datasets/raw/gh-pages/data/cars.json\n",
"# Into: cars_df"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# How to work with the data?\n",
"\n",
"- You must place it in a variable so you can refer to it\n",
"- The current data was displayed and not assigned to a variable, so you cannot use it\n",
"- Assign it to a variable named **my_df**"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"my_df = pd.read_csv(\"weather.csv\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# Your turn: Load airports.csv into airports_df"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Let us discover how the data looks like\n",
"\n",
"We examine the top and bottom records of the dataframe to get an idea of what the data looks like"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" date | \n",
" precipitation | \n",
" temp_max | \n",
" temp_min | \n",
" wind | \n",
" weather | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Seattle | \n",
" 2012-01-01 00:00 | \n",
" 0.0 | \n",
" 12.8 | \n",
" 5.0 | \n",
" 4.7 | \n",
" drizzle | \n",
"
\n",
" \n",
" 1 | \n",
" Seattle | \n",
" 2012-01-02 00:00 | \n",
" 10.9 | \n",
" 10.6 | \n",
" 2.8 | \n",
" 4.5 | \n",
" rain | \n",
"
\n",
" \n",
" 2 | \n",
" Seattle | \n",
" 2012-01-03 00:00 | \n",
" 0.8 | \n",
" 11.7 | \n",
" 7.2 | \n",
" 2.3 | \n",
" rain | \n",
"
\n",
" \n",
" 3 | \n",
" Seattle | \n",
" 2012-01-04 00:00 | \n",
" 20.3 | \n",
" 12.2 | \n",
" 5.6 | \n",
" 4.7 | \n",
" rain | \n",
"
\n",
" \n",
" 4 | \n",
" Seattle | \n",
" 2012-01-05 00:00 | \n",
" 1.3 | \n",
" 8.9 | \n",
" 2.8 | \n",
" 6.1 | \n",
" rain | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" location date precipitation temp_max temp_min wind weather\n",
"0 Seattle 2012-01-01 00:00 0.0 12.8 5.0 4.7 drizzle\n",
"1 Seattle 2012-01-02 00:00 10.9 10.6 2.8 4.5 rain\n",
"2 Seattle 2012-01-03 00:00 0.8 11.7 7.2 2.3 rain\n",
"3 Seattle 2012-01-04 00:00 20.3 12.2 5.6 4.7 rain\n",
"4 Seattle 2012-01-05 00:00 1.3 8.9 2.8 6.1 rain"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"my_df.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# You can pass a number in the head() method to show more data\n",
"# show 10 items (try it)\n",
"\n",
"# do the same for airports_df\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['location', 'date', 'precipitation', 'temp_max', 'temp_min', 'wind',\n",
" 'weather'],\n",
" dtype='object')"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# To know which columns are available use the columns attribute\n",
"my_df.columns"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# Your turn: explore the columns for airports_df"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Data types\n",
"\n",
"- Each **column** will have its own data type\n",
"- Remember, variables will be in columns\n",
"- Observations in rows\n",
"- Use dtypes attribute of to discover columns and datatypes\n",
" - **OOP**: What is the difference between a *function*, a *method*, an *attribute*, and a *variable*?"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"location object\n",
"date object\n",
"precipitation float64\n",
"temp_max float64\n",
"temp_min float64\n",
"wind float64\n",
"weather object\n",
"dtype: object"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"my_df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# Your turn: Find out the data types for the airports_df column"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0 2012-01-01\n",
"1 2012-01-02\n",
"2 2012-01-03\n",
"3 2012-01-04\n",
"4 2012-01-05\n",
"5 2012-01-06\n",
"6 2012-01-07\n",
"7 2012-01-08\n",
"8 2012-01-09\n",
"9 2012-01-10\n",
"10 2012-01-11\n",
"11 2012-01-12\n",
"12 2012-01-13\n",
"13 2012-01-14\n",
"14 2012-01-15\n",
"15 2012-01-16\n",
"16 2012-01-17\n",
"17 2012-01-18\n",
"18 2012-01-19\n",
"19 2012-01-20\n",
"20 2012-01-21\n",
"21 2012-01-22\n",
"22 2012-01-23\n",
"23 2012-01-24\n",
"24 2012-01-25\n",
"25 2012-01-26\n",
"26 2012-01-27\n",
"27 2012-01-28\n",
"28 2012-01-29\n",
"29 2012-01-30\n",
" ... \n",
"2892 2015-12-02\n",
"2893 2015-12-03\n",
"2894 2015-12-04\n",
"2895 2015-12-05\n",
"2896 2015-12-06\n",
"2897 2015-12-07\n",
"2898 2015-12-08\n",
"2899 2015-12-09\n",
"2900 2015-12-10\n",
"2901 2015-12-11\n",
"2902 2015-12-12\n",
"2903 2015-12-13\n",
"2904 2015-12-14\n",
"2905 2015-12-15\n",
"2906 2015-12-16\n",
"2907 2015-12-17\n",
"2908 2015-12-18\n",
"2909 2015-12-19\n",
"2910 2015-12-20\n",
"2911 2015-12-21\n",
"2912 2015-12-22\n",
"2913 2015-12-23\n",
"2914 2015-12-24\n",
"2915 2015-12-25\n",
"2916 2015-12-26\n",
"2917 2015-12-27\n",
"2918 2015-12-28\n",
"2919 2015-12-29\n",
"2920 2015-12-30\n",
"2921 2015-12-31\n",
"Name: date, dtype: datetime64[ns]"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Pandas uses data types provided by numpy\n",
"# load numpy\n",
"import numpy as np\n",
"\n",
"# convert the column to datetime\n",
"my_df.date.astype(np.datetime64)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0 2012-01-01\n",
"1 2012-01-02\n",
"2 2012-01-03\n",
"3 2012-01-04\n",
"4 2012-01-05\n",
"Name: date, dtype: datetime64[ns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# an alternative way to do it is using\n",
"pd.to_datetime(my_df.date).head() # do you remember head method?"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0 2012-01-01 00:00\n",
"1 2012-01-02 00:00\n",
"2 2012-01-03 00:00\n",
"3 2012-01-04 00:00\n",
"4 2012-01-05 00:00\n",
"Name: date, dtype: object"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# now let us examine the date column\n",
"my_df.date.head()\n",
"\n",
"# why is it still of type object?\n",
"# How to fix it?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# just like the dataframe, the command creates a copy\n",
"# but does not store it\n",
"# We need to replace the old date column with the new one\n",
"my_df.date = my_df.date.astype(np.datetime64)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"location object\n",
"date datetime64[ns]\n",
"precipitation float64\n",
"temp_max float64\n",
"temp_min float64\n",
"wind float64\n",
"weather object\n",
"dtype: object"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# check the types\n",
"my_df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# Your turn: examine the airports_df dataframe\n",
"# are there any date columns that you can convert?\n",
"# Check then numeric columns, what should their data type be?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Data Types and Variable Types\n",
"| Variable Type | Data Type |\n",
"| :------------: |----------|\n",
"|Continuous|float64, datetime64[ns]|\n",
"|Discrete|int64|\n",
"|Ordinal|int64, [category](https://pandas.pydata.org/pandas-docs/stable/categorical.html)|\n",
"|Nominal|int64, object, [category](https://pandas.pydata.org/pandas-docs/stable/categorical.html)|\n",
"|Categorical|int64, object, [category](https://pandas.pydata.org/pandas-docs/stable/categorical.html)|"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Why convert an object column into a date column?\n",
"- As you will find out later, pandas can do more fancy things if it knows the column is a date\n",
"- For example:\n",
" - Sort\n",
" - Filter based on date range\n",
" - Date arethmatic\n",
"- Always make sure date/time columns have the correct data type"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Indexing Columns\n",
"\n",
"- Using square brackets [ ]\n",
"- Using dot notation ."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 Seattle\n",
"1 Seattle\n",
"2 Seattle\n",
"3 Seattle\n",
"4 Seattle\n",
"5 Seattle\n",
"6 Seattle\n",
"7 Seattle\n",
"8 Seattle\n",
"9 Seattle\n",
"10 Seattle\n",
"11 Seattle\n",
"12 Seattle\n",
"13 Seattle\n",
"14 Seattle\n",
"15 Seattle\n",
"16 Seattle\n",
"17 Seattle\n",
"18 Seattle\n",
"19 Seattle\n",
"20 Seattle\n",
"21 Seattle\n",
"22 Seattle\n",
"23 Seattle\n",
"24 Seattle\n",
"25 Seattle\n",
"26 Seattle\n",
"27 Seattle\n",
"28 Seattle\n",
"29 Seattle\n",
" ... \n",
"2892 New York\n",
"2893 New York\n",
"2894 New York\n",
"2895 New York\n",
"2896 New York\n",
"2897 New York\n",
"2898 New York\n",
"2899 New York\n",
"2900 New York\n",
"2901 New York\n",
"2902 New York\n",
"2903 New York\n",
"2904 New York\n",
"2905 New York\n",
"2906 New York\n",
"2907 New York\n",
"2908 New York\n",
"2909 New York\n",
"2910 New York\n",
"2911 New York\n",
"2912 New York\n",
"2913 New York\n",
"2914 New York\n",
"2915 New York\n",
"2916 New York\n",
"2917 New York\n",
"2918 New York\n",
"2919 New York\n",
"2920 New York\n",
"2921 New York\n",
"Name: location, dtype: object"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# a single column is known as a series\n",
"my_df['location']"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"0 Seattle\n",
"1 Seattle\n",
"2 Seattle\n",
"3 Seattle\n",
"4 Seattle\n",
"Name: location, dtype: object"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Some methods that work on Dataframes also work on Series\n",
"my_df['location'].head()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 Seattle\n",
"1 Seattle\n",
"2 Seattle\n",
"3 Seattle\n",
"4 Seattle\n",
"Name: location, dtype: object"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Dot notation to access series\n",
"my_df.location.head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# Your turn: Try to index the columns for airports_df using square brackets and dot notation\n",
"# Use head() to get an idea of what the data is\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"count 2922\n",
"unique 2\n",
"top New York\n",
"freq 1461\n",
"Name: location, dtype: object"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Descriptive statistics\n",
"my_df['location'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" precipitation | \n",
" temp_max | \n",
" temp_min | \n",
" wind | \n",
"
\n",
" \n",
" \n",
" \n",
" count | \n",
" 2922.000000 | \n",
" 2922.000000 | \n",
" 2922.000000 | \n",
" 2922.000000 | \n",
"
\n",
" \n",
" mean | \n",
" 2.944764 | \n",
" 16.769131 | \n",
" 8.612320 | \n",
" 4.101129 | \n",
"
\n",
" \n",
" std | \n",
" 7.695286 | \n",
" 8.644596 | \n",
" 7.511776 | \n",
" 1.880791 | \n",
"
\n",
" \n",
" min | \n",
" 0.000000 | \n",
" -7.700000 | \n",
" -16.000000 | \n",
" 0.400000 | \n",
"
\n",
" \n",
" 25% | \n",
" 0.000000 | \n",
" 10.000000 | \n",
" 3.300000 | \n",
" 2.700000 | \n",
"
\n",
" \n",
" 50% | \n",
" 0.000000 | \n",
" 16.100000 | \n",
" 8.900000 | \n",
" 3.800000 | \n",
"
\n",
" \n",
" 75% | \n",
" 1.800000 | \n",
" 23.900000 | \n",
" 13.900000 | \n",
" 5.100000 | \n",
"
\n",
" \n",
" max | \n",
" 118.900000 | \n",
" 37.800000 | \n",
" 26.700000 | \n",
" 16.200000 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" precipitation temp_max temp_min wind\n",
"count 2922.000000 2922.000000 2922.000000 2922.000000\n",
"mean 2.944764 16.769131 8.612320 4.101129\n",
"std 7.695286 8.644596 7.511776 1.880791\n",
"min 0.000000 -7.700000 -16.000000 0.400000\n",
"25% 0.000000 10.000000 3.300000 2.700000\n",
"50% 0.000000 16.100000 8.900000 3.800000\n",
"75% 1.800000 23.900000 13.900000 5.100000\n",
"max 118.900000 37.800000 26.700000 16.200000"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# works also on dataframe\n",
"my_df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"count 2922\n",
"unique 1461\n",
"top 2013-06-05 00:00:00\n",
"freq 2\n",
"first 2012-01-01 00:00:00\n",
"last 2015-12-31 00:00:00\n",
"Name: date, dtype: object"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Different data types will have different descriptives\n",
"my_df['date'].describe()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 2922.000000\n",
"mean 2.944764\n",
"std 7.695286\n",
"min 0.000000\n",
"25% 0.000000\n",
"50% 0.000000\n",
"75% 1.800000\n",
"max 118.900000\n",
"Name: precipitation, dtype: float64"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"my_df.precipitation.describe()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# Your turn: Use describe() on airports_df\n",
"\n",
"# Which columns are included in describe?\n",
"\n",
"# Try it on the columns that were excluded:\n",
"\n",
"# Why were these columns excluded?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# You can also plot a dataframe\n",
"- Pandas will try to show it in the best way possible\n",
"- Plotting from dataframe is very simplistic and used for quick univariate exploration"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"my_df.plot()"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# You need to tell pandas that you want to display plots in the notebook\n",
"%matplotlib inline\n"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# now try it\n",
"my_df.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Don't forget!\n",
"Always include in your notebook:\n",
"```python\n",
"# this is the first cell in your notebook\n",
"import pandas as pd\n",
"%matplotlib inline # dont forget this\n",
"```\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\njJ0AAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# It's more meaningful to plot Series\n",
"my_df['precipitation'].plot()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Remember plots show change from one observation to the next\n",
"my_df['wind'].plot()\n",
"\n",
"# in some cases it might not be useful"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nwv4/E+JS6hz2gm0AAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# you can try a histogram\n",
"my_df['wind'].hist()\n",
"\n",
"# Which is useful to know distributions"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# How can you find out if percipitation is usually high in the year or low?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Your turn:"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"ename": "TypeError",
"evalue": "Empty 'DataFrame': no numeric data to plot",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Sometime pandas cannot plot it\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mmy_df\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'location'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/Users/koutbo6/anaconda/lib/python3.5/site-packages/pandas/tools/plotting.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, kind, ax, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, label, secondary_y, **kwds)\u001b[0m\n\u001b[1;32m 3564\u001b[0m \u001b[0mcolormap\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcolormap\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtable\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myerr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0myerr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3565\u001b[0m \u001b[0mxerr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mxerr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msecondary_y\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msecondary_y\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3566\u001b[0;31m **kwds)\n\u001b[0m\u001b[1;32m 3567\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplot_series\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3568\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/koutbo6/anaconda/lib/python3.5/site-packages/pandas/tools/plotting.py\u001b[0m in \u001b[0;36mplot_series\u001b[0;34m(data, kind, ax, figsize, use_index, title, grid, legend, style, logx, logy, loglog, xticks, yticks, xlim, ylim, rot, fontsize, colormap, table, yerr, xerr, label, secondary_y, **kwds)\u001b[0m\n\u001b[1;32m 2643\u001b[0m \u001b[0myerr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0myerr\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mxerr\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mxerr\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2644\u001b[0m \u001b[0mlabel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msecondary_y\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msecondary_y\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2645\u001b[0;31m **kwds)\n\u001b[0m\u001b[1;32m 2646\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2647\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/koutbo6/anaconda/lib/python3.5/site-packages/pandas/tools/plotting.py\u001b[0m in \u001b[0;36m_plot\u001b[0;34m(data, x, y, subplots, ax, kind, **kwds)\u001b[0m\n\u001b[1;32m 2439\u001b[0m \u001b[0mplot_obj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mklass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msubplots\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msubplots\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkind\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkind\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2440\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2441\u001b[0;31m \u001b[0mplot_obj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgenerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2442\u001b[0m \u001b[0mplot_obj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2443\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mplot_obj\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/koutbo6/anaconda/lib/python3.5/site-packages/pandas/tools/plotting.py\u001b[0m in \u001b[0;36mgenerate\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1024\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mgenerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1025\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_args_adjust\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1026\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_compute_plot_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1027\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_setup_subplots\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1028\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_plot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/koutbo6/anaconda/lib/python3.5/site-packages/pandas/tools/plotting.py\u001b[0m in \u001b[0;36m_compute_plot_data\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1133\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mis_empty\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1134\u001b[0m raise TypeError('Empty {0!r}: no numeric data to '\n\u001b[0;32m-> 1135\u001b[0;31m 'plot'.format(numeric_data.__class__.__name__))\n\u001b[0m\u001b[1;32m 1136\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1137\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnumeric_data\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: Empty 'DataFrame': no numeric data to plot"
]
}
],
"source": [
"# Sometime pandas cannot plot it\n",
"my_df['location'].plot()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true,
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# Your turn: try to plot the columns in airport_df using either plot() or hist()\n",
"\n",
"\n",
"# What can you find out about the data?"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"New York 1461\n",
"Seattle 1461\n",
"Name: location, dtype: int64"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Such variables are usually categorical and you can get frequencies like so\n",
"my_df['location'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [],
"source": [
"# Your turn: Examine the columns for airports_df\n",
"# what would be the best columns to check frequencies for?\n",
"# try it:\n",
"\n",
"\n",
"# The best columns are:\n",
"\n",
"# The reason frequencies is best calculated on them is because:\n",
"\n",
"# What did you find out about your data?\n",
"\n",
"# try to plot value_count(), how do you do it? what do you get?"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Are data frames immutable?\n",
"- Yes, however, all operations that change values will produce a copy and not change the original\n",
"- You have to use assignment to change columns or dataframes\n",
"- **So be careful!**"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Finding Missing Value (Nulls or Nans)\n",
"- Missing values are usually represented by:\n",
" - The Python Null if the value doesn't exists\n",
" - Numpy nan if the value is Not a Number (like zero division)\n",
"- Use isnull() value to find if any value is null in the DataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" location | \n",
" date | \n",
" precipitation | \n",
" temp_max | \n",
" temp_min | \n",
" wind | \n",
" weather | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 1 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 3 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 4 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 5 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 6 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 7 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 8 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 9 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 10 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 11 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 12 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 13 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 14 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 15 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 16 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 17 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 18 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 19 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 20 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 21 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 22 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 23 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 24 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 25 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 26 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 27 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 28 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 29 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 2892 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2893 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2894 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2895 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2896 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2897 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2898 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2899 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2900 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2901 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2902 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2903 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2904 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2905 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2906 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2907 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2908 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2909 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2910 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2911 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2912 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2913 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2914 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2915 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2916 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2917 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2918 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2919 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2920 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
" 2921 | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
" False | \n",
"
\n",
" \n",
"
\n",
"
2922 rows × 7 columns
\n",
"
"
],
"text/plain": [
" location date precipitation temp_max temp_min wind weather\n",
"0 False False False False False False False\n",
"1 False False False False False False False\n",
"2 False False False False False False False\n",
"3 False False False False False False False\n",
"4 False False False False False False False\n",
"5 False False False False False False False\n",
"6 False False False False False False False\n",
"7 False False False False False False False\n",
"8 False False False False False False False\n",
"9 False False False False False False False\n",
"10 False False False False False False False\n",
"11 False False False False False False False\n",
"12 False False False False False False False\n",
"13 False False False False False False False\n",
"14 False False False False False False False\n",
"15 False False False False False False False\n",
"16 False False False False False False False\n",
"17 False False False False False False False\n",
"18 False False False False False False False\n",
"19 False False False False False False False\n",
"20 False False False False False False False\n",
"21 False False False False False False False\n",
"22 False False False False False False False\n",
"23 False False False False False False False\n",
"24 False False False False False False False\n",
"25 False False False False False False False\n",
"26 False False False False False False False\n",
"27 False False False False False False False\n",
"28 False False False False False False False\n",
"29 False False False False False False False\n",
"... ... ... ... ... ... ... ...\n",
"2892 False False False False False False False\n",
"2893 False False False False False False False\n",
"2894 False False False False False False False\n",
"2895 False False False False False False False\n",
"2896 False False False False False False False\n",
"2897 False False False False False False False\n",
"2898 False False False False False False False\n",
"2899 False False False False False False False\n",
"2900 False False False False False False False\n",
"2901 False False False False False False False\n",
"2902 False False False False False False False\n",
"2903 False False False False False False False\n",
"2904 False False False False False False False\n",
"2905 False False False False False False False\n",
"2906 False False False False False False False\n",
"2907 False False False False False False False\n",
"2908 False False False False False False False\n",
"2909 False False False False False False False\n",
"2910 False False False False False False False\n",
"2911 False False False False False False False\n",
"2912 False False False False False False False\n",
"2913 False False False False False False False\n",
"2914 False False False False False False False\n",
"2915 False False False False False False False\n",
"2916 False False False False False False False\n",
"2917 False False False False False False False\n",
"2918 False False False False False False False\n",
"2919 False False False False False False False\n",
"2920 False False False False False False False\n",
"2921 False False False False False False False\n",
"\n",
"[2922 rows x 7 columns]"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"my_df.isnull()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Its a Dataframe containing boolean values\n",
"# Use describe()\n",
"\n",
"# or use value_counts() on each column to count the Nulls"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Call any() on isnull() to see which columns have null values"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"location False\n",
"date False\n",
"precipitation False\n",
"temp_max False\n",
"temp_min False\n",
"wind False\n",
"weather False\n",
"dtype: bool"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"my_df.isnull().any()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Call any() again to see if the dataframe has any null value\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"my_df.isnull().any().any()"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Duplicates\n",
"- Search for any repeated values\n",
"- use duplicated()\n",
" - Note that this looks at all the columns in the record\n",
" - You can pass a list of column names to check duplication based on"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 False\n",
"1 False\n",
"2 False\n",
"3 False\n",
"4 False\n",
"5 False\n",
"6 False\n",
"7 False\n",
"8 False\n",
"9 False\n",
"10 False\n",
"11 False\n",
"12 False\n",
"13 False\n",
"14 False\n",
"15 False\n",
"16 False\n",
"17 False\n",
"18 False\n",
"19 False\n",
"20 False\n",
"21 False\n",
"22 False\n",
"23 False\n",
"24 False\n",
"25 False\n",
"26 False\n",
"27 False\n",
"28 False\n",
"29 False\n",
" ... \n",
"2892 False\n",
"2893 False\n",
"2894 False\n",
"2895 False\n",
"2896 False\n",
"2897 False\n",
"2898 False\n",
"2899 False\n",
"2900 False\n",
"2901 False\n",
"2902 False\n",
"2903 False\n",
"2904 False\n",
"2905 False\n",
"2906 False\n",
"2907 False\n",
"2908 False\n",
"2909 False\n",
"2910 False\n",
"2911 False\n",
"2912 False\n",
"2913 False\n",
"2914 False\n",
"2915 False\n",
"2916 False\n",
"2917 False\n",
"2918 False\n",
"2919 False\n",
"2920 False\n",
"2921 False\n",
"dtype: bool"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"my_df.duplicated()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"outputs": [
{
"data": {
"text/plain": [
"True 2920\n",
"False 2\n",
"dtype: int64"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Try to pass location as the duplication column and see what happens\n",
"my_df.duplicated(\"location\").value_counts()\n",
"\n",
"# what is value_counts?"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"slideshow": {
"slide_type": "fragment"
}
},
"outputs": [
{
"data": {
"text/plain": [
"True 2912\n",
"False 10\n",
"dtype: int64"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# now try it with both location and weather columns\n",
"my_df.duplicated([\"location\", \"weather\"]).value_counts()"
]
}
],
"metadata": {
"anaconda-cloud": {},
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 1
}