{ "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
locationdateprecipitationtemp_maxtemp_minwindweather
0Seattle2012-01-01 00:000.012.85.04.7drizzle
1Seattle2012-01-02 00:0010.910.62.84.5rain
2Seattle2012-01-03 00:000.811.77.22.3rain
3Seattle2012-01-04 00:0020.312.25.64.7rain
4Seattle2012-01-05 00:001.38.92.86.1rain
5Seattle2012-01-06 00:002.54.42.22.2rain
6Seattle2012-01-07 00:000.07.22.82.3rain
7Seattle2012-01-08 00:000.010.02.82.0sun
8Seattle2012-01-09 00:004.39.45.03.4rain
9Seattle2012-01-10 00:001.06.10.63.4rain
10Seattle2012-01-11 00:000.06.1-1.15.1sun
11Seattle2012-01-12 00:000.06.1-1.71.9sun
12Seattle2012-01-13 00:000.05.0-2.81.3sun
13Seattle2012-01-14 00:004.14.40.65.3snow
14Seattle2012-01-15 00:005.31.1-3.33.2snow
15Seattle2012-01-16 00:002.51.7-2.85.0snow
16Seattle2012-01-17 00:008.13.30.05.6snow
17Seattle2012-01-18 00:0019.80.0-2.85.0snow
18Seattle2012-01-19 00:0015.2-1.1-2.81.6snow
19Seattle2012-01-20 00:0013.57.2-1.12.3snow
20Seattle2012-01-21 00:003.08.33.38.2rain
21Seattle2012-01-22 00:006.16.72.24.8rain
22Seattle2012-01-23 00:000.08.31.13.6rain
23Seattle2012-01-24 00:008.610.02.25.1rain
24Seattle2012-01-25 00:008.18.94.45.4rain
25Seattle2012-01-26 00:004.88.91.14.8rain
26Seattle2012-01-27 00:000.06.7-2.21.4drizzle
27Seattle2012-01-28 00:000.06.70.62.2rain
28Seattle2012-01-29 00:0027.79.43.94.5rain
29Seattle2012-01-30 00:003.68.36.15.1rain
........................
2892New York2015-12-02 00:003.013.98.32.0fog
2893New York2015-12-03 00:000.013.37.27.2sun
2894New York2015-12-04 00:000.011.75.04.7sun
2895New York2015-12-05 00:000.011.71.72.4sun
2896New York2015-12-06 00:000.010.63.32.9sun
2897New York2015-12-07 00:000.012.84.43.4drizzle
2898New York2015-12-08 00:000.010.64.43.5sun
2899New York2015-12-09 00:000.012.81.13.4sun
2900New York2015-12-10 00:000.015.08.93.0drizzle
2901New York2015-12-11 00:000.014.47.82.7drizzle
2902New York2015-12-12 00:000.017.89.41.9fog
2903New York2015-12-13 00:000.021.111.73.1drizzle
2904New York2015-12-14 00:009.116.111.74.8fog
2905New York2015-12-15 00:002.317.811.78.2fog
2906New York2015-12-16 00:001.311.77.24.1fog
2907New York2015-12-17 00:0029.715.010.04.1fog
2908New York2015-12-18 00:000.314.43.96.1sun
2909New York2015-12-19 00:000.05.02.29.0sun
2910New York2015-12-20 00:000.06.71.75.1sun
2911New York2015-12-21 00:000.012.83.35.3sun
2912New York2015-12-22 00:004.815.611.13.8fog
2913New York2015-12-23 00:0029.517.28.94.5fog
2914New York2015-12-24 00:000.520.613.94.9fog
2915New York2015-12-25 00:002.517.811.10.9fog
2916New York2015-12-26 00:000.315.69.44.8drizzle
2917New York2015-12-27 00:002.017.28.95.5fog
2918New York2015-12-28 00:001.38.91.76.3snow
2919New York2015-12-29 00:0016.89.41.15.3fog
2920New York2015-12-30 00:009.410.65.03.0fog
2921New York2015-12-31 00:001.511.16.15.5fog
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
locationdateprecipitationtemp_maxtemp_minwindweather
0Seattle2012-01-01 00:000.012.85.04.7drizzle
1Seattle2012-01-02 00:0010.910.62.84.5rain
2Seattle2012-01-03 00:000.811.77.22.3rain
3Seattle2012-01-04 00:0020.312.25.64.7rain
4Seattle2012-01-05 00:001.38.92.86.1rain
5Seattle2012-01-06 00:002.54.42.22.2rain
6Seattle2012-01-07 00:000.07.22.82.3rain
7Seattle2012-01-08 00:000.010.02.82.0sun
8Seattle2012-01-09 00:004.39.45.03.4rain
9Seattle2012-01-10 00:001.06.10.63.4rain
10Seattle2012-01-11 00:000.06.1-1.15.1sun
11Seattle2012-01-12 00:000.06.1-1.71.9sun
12Seattle2012-01-13 00:000.05.0-2.81.3sun
13Seattle2012-01-14 00:004.14.40.65.3snow
14Seattle2012-01-15 00:005.31.1-3.33.2snow
15Seattle2012-01-16 00:002.51.7-2.85.0snow
16Seattle2012-01-17 00:008.13.30.05.6snow
17Seattle2012-01-18 00:0019.80.0-2.85.0snow
18Seattle2012-01-19 00:0015.2-1.1-2.81.6snow
19Seattle2012-01-20 00:0013.57.2-1.12.3snow
20Seattle2012-01-21 00:003.08.33.38.2rain
21Seattle2012-01-22 00:006.16.72.24.8rain
22Seattle2012-01-23 00:000.08.31.13.6rain
23Seattle2012-01-24 00:008.610.02.25.1rain
24Seattle2012-01-25 00:008.18.94.45.4rain
25Seattle2012-01-26 00:004.88.91.14.8rain
26Seattle2012-01-27 00:000.06.7-2.21.4drizzle
27Seattle2012-01-28 00:000.06.70.62.2rain
28Seattle2012-01-29 00:0027.79.43.94.5rain
29Seattle2012-01-30 00:003.68.36.15.1rain
........................
2892New York2015-12-02 00:003.013.98.32.0fog
2893New York2015-12-03 00:000.013.37.27.2sun
2894New York2015-12-04 00:000.011.75.04.7sun
2895New York2015-12-05 00:000.011.71.72.4sun
2896New York2015-12-06 00:000.010.63.32.9sun
2897New York2015-12-07 00:000.012.84.43.4drizzle
2898New York2015-12-08 00:000.010.64.43.5sun
2899New York2015-12-09 00:000.012.81.13.4sun
2900New York2015-12-10 00:000.015.08.93.0drizzle
2901New York2015-12-11 00:000.014.47.82.7drizzle
2902New York2015-12-12 00:000.017.89.41.9fog
2903New York2015-12-13 00:000.021.111.73.1drizzle
2904New York2015-12-14 00:009.116.111.74.8fog
2905New York2015-12-15 00:002.317.811.78.2fog
2906New York2015-12-16 00:001.311.77.24.1fog
2907New York2015-12-17 00:0029.715.010.04.1fog
2908New York2015-12-18 00:000.314.43.96.1sun
2909New York2015-12-19 00:000.05.02.29.0sun
2910New York2015-12-20 00:000.06.71.75.1sun
2911New York2015-12-21 00:000.012.83.35.3sun
2912New York2015-12-22 00:004.815.611.13.8fog
2913New York2015-12-23 00:0029.517.28.94.5fog
2914New York2015-12-24 00:000.520.613.94.9fog
2915New York2015-12-25 00:002.517.811.10.9fog
2916New York2015-12-26 00:000.315.69.44.8drizzle
2917New York2015-12-27 00:002.017.28.95.5fog
2918New York2015-12-28 00:001.38.91.76.3snow
2919New York2015-12-29 00:0016.89.41.15.3fog
2920New York2015-12-30 00:009.410.65.03.0fog
2921New York2015-12-31 00:001.511.16.15.5fog
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
locationdateprecipitationtemp_maxtemp_minwindweather
0Seattle2012-01-01 00:000.012.85.04.7drizzle
1Seattle2012-01-02 00:0010.910.62.84.5rain
2Seattle2012-01-03 00:000.811.77.22.3rain
3Seattle2012-01-04 00:0020.312.25.64.7rain
4Seattle2012-01-05 00:001.38.92.86.1rain
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
precipitationtemp_maxtemp_minwind
count2922.0000002922.0000002922.0000002922.000000
mean2.94476416.7691318.6123204.101129
std7.6952868.6445967.5117761.880791
min0.000000-7.700000-16.0000000.400000
25%0.00000010.0000003.3000002.700000
50%0.00000016.1000008.9000003.800000
75%1.80000023.90000013.9000005.100000
max118.90000037.80000026.70000016.200000
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
locationdateprecipitationtemp_maxtemp_minwindweather
0FalseFalseFalseFalseFalseFalseFalse
1FalseFalseFalseFalseFalseFalseFalse
2FalseFalseFalseFalseFalseFalseFalse
3FalseFalseFalseFalseFalseFalseFalse
4FalseFalseFalseFalseFalseFalseFalse
5FalseFalseFalseFalseFalseFalseFalse
6FalseFalseFalseFalseFalseFalseFalse
7FalseFalseFalseFalseFalseFalseFalse
8FalseFalseFalseFalseFalseFalseFalse
9FalseFalseFalseFalseFalseFalseFalse
10FalseFalseFalseFalseFalseFalseFalse
11FalseFalseFalseFalseFalseFalseFalse
12FalseFalseFalseFalseFalseFalseFalse
13FalseFalseFalseFalseFalseFalseFalse
14FalseFalseFalseFalseFalseFalseFalse
15FalseFalseFalseFalseFalseFalseFalse
16FalseFalseFalseFalseFalseFalseFalse
17FalseFalseFalseFalseFalseFalseFalse
18FalseFalseFalseFalseFalseFalseFalse
19FalseFalseFalseFalseFalseFalseFalse
20FalseFalseFalseFalseFalseFalseFalse
21FalseFalseFalseFalseFalseFalseFalse
22FalseFalseFalseFalseFalseFalseFalse
23FalseFalseFalseFalseFalseFalseFalse
24FalseFalseFalseFalseFalseFalseFalse
25FalseFalseFalseFalseFalseFalseFalse
26FalseFalseFalseFalseFalseFalseFalse
27FalseFalseFalseFalseFalseFalseFalse
28FalseFalseFalseFalseFalseFalseFalse
29FalseFalseFalseFalseFalseFalseFalse
........................
2892FalseFalseFalseFalseFalseFalseFalse
2893FalseFalseFalseFalseFalseFalseFalse
2894FalseFalseFalseFalseFalseFalseFalse
2895FalseFalseFalseFalseFalseFalseFalse
2896FalseFalseFalseFalseFalseFalseFalse
2897FalseFalseFalseFalseFalseFalseFalse
2898FalseFalseFalseFalseFalseFalseFalse
2899FalseFalseFalseFalseFalseFalseFalse
2900FalseFalseFalseFalseFalseFalseFalse
2901FalseFalseFalseFalseFalseFalseFalse
2902FalseFalseFalseFalseFalseFalseFalse
2903FalseFalseFalseFalseFalseFalseFalse
2904FalseFalseFalseFalseFalseFalseFalse
2905FalseFalseFalseFalseFalseFalseFalse
2906FalseFalseFalseFalseFalseFalseFalse
2907FalseFalseFalseFalseFalseFalseFalse
2908FalseFalseFalseFalseFalseFalseFalse
2909FalseFalseFalseFalseFalseFalseFalse
2910FalseFalseFalseFalseFalseFalseFalse
2911FalseFalseFalseFalseFalseFalseFalse
2912FalseFalseFalseFalseFalseFalseFalse
2913FalseFalseFalseFalseFalseFalseFalse
2914FalseFalseFalseFalseFalseFalseFalse
2915FalseFalseFalseFalseFalseFalseFalse
2916FalseFalseFalseFalseFalseFalseFalse
2917FalseFalseFalseFalseFalseFalseFalse
2918FalseFalseFalseFalseFalseFalseFalse
2919FalseFalseFalseFalseFalseFalseFalse
2920FalseFalseFalseFalseFalseFalseFalse
2921FalseFalseFalseFalseFalseFalseFalse
\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 }