Skip to content

Instantly share code, notes, and snippets.

@rafadavis
Created April 9, 2021 15:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rafadavis/69a6e0062dc6cfa71a81c294a0c30812 to your computer and use it in GitHub Desktop.
Save rafadavis/69a6e0062dc6cfa71a81c294a0c30812 to your computer and use it in GitHub Desktop.
pandas_workshop.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"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.8.5"
},
"colab": {
"name": "pandas_workshop.ipynb",
"provenance": [],
"include_colab_link": true
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/rafadavis/69a6e0062dc6cfa71a81c294a0c30812/pandas_workshop.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xueafXnUWkd7"
},
"source": [
"# Introduction to Data Analysis with Pandas"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "g6kuSluAWkeB"
},
"source": [
"This tutorial is a modified version of a workshop written by Patrick Smyth. Please make sure to check his work on https://github.com/smythp"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "K7qL5eguWkeB"
},
"source": [
"I strongly encourage you to try this guide in a new file, and have this one as a reference.\n",
"\n",
"We begin by importing the pandas library. Since we will use many of its functions, it is a convention to import it with a *nickname* to save us from typing \"pandas\" all the time.\n",
"We will also import matplotlib for graphs."
]
},
{
"cell_type": "code",
"metadata": {
"id": "XwEzggXlWkeC"
},
"source": [
"import pandas as pd\n",
"import matplotlib"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "cfB__EjyWkeC"
},
"source": [
"## One-dimentional data: Pandas Series"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "OKFnsAEPWkeD"
},
"source": [
"One-dimentional data is a dataset that is a sequence of values. For example, a record of all the days that there was precipitation; the height of the tallest buildings of NYC. \n",
"\n",
"For our example, let's imagine you have all the grades from your students in a given exam. You are only interested in the grades, not in the individual students, so you ignore their names and other information, so you saved all the grades as a list in a variable called `grades`. \n",
"\n",
"Something like this:\n",
"`grades = [6, 9, 5, 8, 9, 10...]`\n",
"\n",
"Since I don't have a real list with grades with me, just for the sake of this workshop, I'm gonna create a list with random numbers, using the `random` package."
]
},
{
"cell_type": "code",
"metadata": {
"id": "mB-fxewbWkeD",
"outputId": "4cd22c97-95d9-4336-b012-131ed0283399"
},
"source": [
"import random\n",
"\n",
"grades = []\n",
"\n",
"for a in range(40):\n",
" grades.append(random.randint(4,10))\n",
" \n",
"print(grades)"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"[8, 9, 9, 7, 4, 4, 4, 8, 4, 4, 5, 5, 8, 8, 4, 10, 4, 9, 8, 9, 8, 7, 10, 10, 8, 5, 10, 9, 5, 7, 9, 6, 10, 8, 9, 9, 6, 10, 7, 4]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ea4fK0JEWkeE"
},
"source": [
"Above we wrote a for loop that runs 40 times ( `range(40)` ) and in each of the loops it generages a random number integer number between 4 and 10 ( `random.randint(4,10)` ) and append to our previously empty `grade` list ( `grades.append` )\n",
"\n",
"For more info on the random package, [try this link](https://docs.python.org/3/library/random.html)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xPLpB-bbWkeE"
},
"source": [
"Now, with the data in our variable `grades`, we want to create a series object, which is Pandas default for one dimensional objects.\n",
"Following convention, we will name it `s`."
]
},
{
"cell_type": "code",
"metadata": {
"id": "r83iruh7WkeE",
"outputId": "f74e8613-3471-429d-fda0-e8cbc25fe7b6"
},
"source": [
"s = pd.Series(grades)\n",
"type(s)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"pandas.core.series.Series"
]
},
"metadata": {
"tags": []
},
"execution_count": 3
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "ogFs5t3IWkeF",
"outputId": "39d5a690-7747-4c4f-abbd-8665a455a768"
},
"source": [
"s"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0 8\n",
"1 9\n",
"2 9\n",
"3 7\n",
"4 4\n",
"5 4\n",
"6 4\n",
"7 8\n",
"8 4\n",
"9 4\n",
"10 5\n",
"11 5\n",
"12 8\n",
"13 8\n",
"14 4\n",
"15 10\n",
"16 4\n",
"17 9\n",
"18 8\n",
"19 9\n",
"20 8\n",
"21 7\n",
"22 10\n",
"23 10\n",
"24 8\n",
"25 5\n",
"26 10\n",
"27 9\n",
"28 5\n",
"29 7\n",
"30 9\n",
"31 6\n",
"32 10\n",
"33 8\n",
"34 9\n",
"35 9\n",
"36 6\n",
"37 10\n",
"38 7\n",
"39 4\n",
"dtype: int64"
]
},
"metadata": {
"tags": []
},
"execution_count": 4
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BfWK-BbrWkeF"
},
"source": [
"Notice that the left column is an index column, with the correspondent index to every value. Remember that it is common in programming languages to start counting from zero, instead of one.\n",
"\n",
"Now that we made the data a pandas series, we can now use some of the methods available for this type of data."
]
},
{
"cell_type": "code",
"metadata": {
"id": "gTV3sKlGWkeF",
"outputId": "448fea81-714e-45b0-b791-437e95aba443"
},
"source": [
"s.describe()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"count 40.000000\n",
"mean 7.200000\n",
"std 2.162619\n",
"min 4.000000\n",
"25% 5.000000\n",
"50% 8.000000\n",
"75% 9.000000\n",
"max 10.000000\n",
"dtype: float64"
]
},
"metadata": {
"tags": []
},
"execution_count": 5
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "pXi9WctHWkeG",
"outputId": "f7f38084-5c71-4f78-a611-238b03295290"
},
"source": [
"s.value_counts()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"9 8\n",
"8 8\n",
"4 8\n",
"10 6\n",
"7 4\n",
"5 4\n",
"6 2\n",
"dtype: int64"
]
},
"metadata": {
"tags": []
},
"execution_count": 6
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-pESp1esWkeG"
},
"source": [
"`.describe()` gives us a lot of useful information, like the lowest values, highest, mean, standard deviation and the quartiles. `.value_counts()` returns the most common values by order. Notice that the left column is the value and right column is how many times it appears in your dataset."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4tnc-pWYWkeG"
},
"source": [
"With series, we can also plot some graphs. In our example, it would be useful to have a graphic representation on how well your students did. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "FjzxZly9WkeG",
"outputId": "92705ceb-5c11-4f7e-cf46-ba5f5843e8a9"
},
"source": [
"s.plot.hist(bins=7, ec='black')"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<AxesSubplot:ylabel='Frequency'>"
]
},
"metadata": {
"tags": []
},
"execution_count": 7
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "IXxLpYc2WkeG"
},
"source": [
"With a real dataset, this would (should?) probably look like a normal distribution, which is not our case here. The `bins=7` was needed because by default histograms come with 10 bins, and we only had 7 values to display. `ec='black'` creates the black lines between each of the bins. Try creating a plot without one or both of the options and see how it looks like."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "TVlJACNYWkeH"
},
"source": [
"## Data Frames"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BRU8IE6PWkeH"
},
"source": [
"Data Frames are 2-d objects. If you ever need to make them manually, you can create them as a `dictionary object`, and convert it to a `Pandas Dataframe`\n",
"\n",
"It is useful to know the connection between pandas and dictionaries because often the pandas syntax will refer to dictionary syntax. In practice, most people rarely create a dataframe from a dictionary. We will do it here just to show how it works. \n",
"\n",
"To know more about dictionaries, [check this](https://www.w3schools.com/python/python_dictionaries.asp)"
]
},
{
"cell_type": "code",
"metadata": {
"id": "4qFO1QEQWkeH",
"outputId": "d3ad47e4-c0eb-4f38-d7fa-8129b3b15537"
},
"source": [
"cookie_budget = {\n",
" 'month': ['Jun', 'Jul', 'Aug', 'Sep', 'Oct'],\n",
" 'budget': [500, 400, 350, 600, 800],\n",
" 'cookie_budget': [50, 70, 30, 40, 100]\n",
"}\n",
"\n",
"cookie_budget"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"{'month': ['Jun', 'Jul', 'Aug', 'Sep', 'Oct'],\n",
" 'budget': [500, 400, 350, 600, 800],\n",
" 'cookie_budget': [50, 70, 30, 40, 100]}"
]
},
"metadata": {
"tags": []
},
"execution_count": 8
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5eJxLfVFWkeH"
},
"source": [
"And similarly to what we did with the Series, we can convert `cookie_budget` to a pandas dataframe with a single line of code:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "gBNTbhmyWkeI",
"outputId": "ba3c6847-f305-4a2e-81f2-313d0cd712ed"
},
"source": [
"df = pd.DataFrame(cookie_budget)\n",
"type(df)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"pandas.core.frame.DataFrame"
]
},
"metadata": {
"tags": []
},
"execution_count": 9
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "D8WuDgf3WkeI",
"outputId": "ef0cfc9a-e671-4cbe-cfdd-8ade325c67b0"
},
"source": [
"df"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>month</th>\n",
" <th>budget</th>\n",
" <th>cookie_budget</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Jun</td>\n",
" <td>500</td>\n",
" <td>50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Jul</td>\n",
" <td>400</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Aug</td>\n",
" <td>350</td>\n",
" <td>30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Sep</td>\n",
" <td>600</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Oct</td>\n",
" <td>800</td>\n",
" <td>100</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" month budget cookie_budget\n",
"0 Jun 500 50\n",
"1 Jul 400 70\n",
"2 Aug 350 30\n",
"3 Sep 600 40\n",
"4 Oct 800 100"
]
},
"metadata": {
"tags": []
},
"execution_count": 10
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Nvv_9z6OWkeI"
},
"source": [
"Once again, notice that pandas automatically created an index for every row or, in data analysis language,`observation`. \n",
"\n",
"If you are working with data analysis, it is very important to make sure you are working with tidy data. \n",
"The three \"laws\" for tidy data are: \n",
"\n",
" Every column is a variable. \n",
" Every row is an observation. \n",
" Every cell is a single value.\n",
" \n",
"For more on tidy data, check [this link](https://cran.r-project.org/web/packages/tidyr/vignettes/tidy-data.html)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "tyZt0-3SWkeI"
},
"source": [
"It might be useful to reassign the index to be the same as one of the columns. We will see how this will be useful later.\n",
"\n",
"It is important to think whether that makes sense in your data, and even if that is possible. A column can only work as an index if all the values are non-null and unique. Since our dataset is very small, we can see that Month fits both requirements.\n",
"\n",
"But usually, our datasets are big, so we need better tools for that. We can check if a specific column has only unique values with the method `.is_unique`. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "HCqJMFTRWkeJ",
"outputId": "4553c6c0-ee0a-4312-b5d0-06ebbd7221f4"
},
"source": [
"df.month.is_unique"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"True"
]
},
"metadata": {
"tags": []
},
"execution_count": 11
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Vebr9cewWkeJ"
},
"source": [
"The `.info()` method shows, among other useful things, how many non-null values each column has and compare it to the total of entries."
]
},
{
"cell_type": "code",
"metadata": {
"id": "qZmHgLukWkeJ",
"outputId": "7c7a9cef-5b39-4c7f-946f-a6a64b57fb60"
},
"source": [
"df.info()"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 5 entries, 0 to 4\n",
"Data columns (total 3 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 month 5 non-null object\n",
" 1 budget 5 non-null int64 \n",
" 2 cookie_budget 5 non-null int64 \n",
"dtypes: int64(2), object(1)\n",
"memory usage: 248.0+ bytes\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "yGNGe5d0WkeJ"
},
"source": [
"Finally, we can set month as the new index"
]
},
{
"cell_type": "code",
"metadata": {
"id": "8yyTMw6qWkeK",
"outputId": "7809da1d-2e02-4386-95c1-6af979f80efb"
},
"source": [
"df.index = df.month\n",
"\n",
"df"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>month</th>\n",
" <th>budget</th>\n",
" <th>cookie_budget</th>\n",
" </tr>\n",
" <tr>\n",
" <th>month</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Jun</th>\n",
" <td>Jun</td>\n",
" <td>500</td>\n",
" <td>50</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Jul</th>\n",
" <td>Jul</td>\n",
" <td>400</td>\n",
" <td>70</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Aug</th>\n",
" <td>Aug</td>\n",
" <td>350</td>\n",
" <td>30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Sep</th>\n",
" <td>Sep</td>\n",
" <td>600</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Oct</th>\n",
" <td>Oct</td>\n",
" <td>800</td>\n",
" <td>100</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" month budget cookie_budget\n",
"month \n",
"Jun Jun 500 50\n",
"Jul Jul 400 70\n",
"Aug Aug 350 30\n",
"Sep Sep 600 40\n",
"Oct Oct 800 100"
]
},
"metadata": {
"tags": []
},
"execution_count": 13
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "3wYkxnLmWkeK"
},
"source": [
"## Slicing\n",
"\n",
"There are different ways to select a column from your data frame (you'll notice that we've used one of them a couple times, when checking for unique values and setting a new index).\n",
"\n",
"It is useful to learn and practice both ways, because there are occasions when you need to use a specific one."
]
},
{
"cell_type": "code",
"metadata": {
"id": "8_KpSiP6WkeK",
"outputId": "57e8f9f2-c385-4e97-ba54-fe99815e7fb6"
},
"source": [
"df.budget"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"month\n",
"Jun 500\n",
"Jul 400\n",
"Aug 350\n",
"Sep 600\n",
"Oct 800\n",
"Name: budget, dtype: int64"
]
},
"metadata": {
"tags": []
},
"execution_count": 14
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "dro6iWKgWkeK",
"outputId": "3f39bf3e-7b18-4031-84b7-2b9722244fb5"
},
"source": [
"df['budget']"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"month\n",
"Jun 500\n",
"Jul 400\n",
"Aug 350\n",
"Sep 600\n",
"Oct 800\n",
"Name: budget, dtype: int64"
]
},
"metadata": {
"tags": []
},
"execution_count": 15
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "bhMQt5mWWkeK"
},
"source": [
"See how it was useful to set month for index in this case?"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7dU1T1HvWkeL"
},
"source": [
"## Downloading our Data\n",
"\n",
"Most of the time, you will want to get your data from some spreadsheet, like a Google Sheet or Excel file.\n",
"Pandas has functions that cover many types of files, but we recommend you to use csv files, whenever possible, so that's what we will show here, with the function `pd.read_csv('file_path')`\n",
"\n",
"If you have this file in your computer, you just need to give it the right path. If you saved the file in the same directory (folder) of your jupyter notebook, you just need to put the file name, like `pd_read_csv('my_data.csv')`\n",
"\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "MpsDzQpZWkeL"
},
"source": [
"But we want to work with some more complex dataset, and we happen to have a link for one. In this case, instead of using the path or the file name, we will use the address:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "158fRWgJWkeL",
"outputId": "85b85c91-b7e0-4792-8946-593cf20b3fe5"
},
"source": [
"df = pd.read_csv('http://bit.ly/airbnbcsv')\n",
"df"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>name</th>\n",
" <th>host_id</th>\n",
" <th>host_name</th>\n",
" <th>neighbourhood_group</th>\n",
" <th>neighbourhood</th>\n",
" <th>latitude</th>\n",
" <th>longitude</th>\n",
" <th>room_type</th>\n",
" <th>price</th>\n",
" <th>minimum_nights</th>\n",
" <th>number_of_reviews</th>\n",
" <th>last_review</th>\n",
" <th>reviews_per_month</th>\n",
" <th>calculated_host_listings_count</th>\n",
" <th>availability_365</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2539</td>\n",
" <td>Clean &amp; quiet apt home by the park</td>\n",
" <td>2787</td>\n",
" <td>John</td>\n",
" <td>Brooklyn</td>\n",
" <td>Kensington</td>\n",
" <td>40.64749</td>\n",
" <td>-73.97237</td>\n",
" <td>Private room</td>\n",
" <td>149</td>\n",
" <td>1</td>\n",
" <td>9</td>\n",
" <td>2018-10-19</td>\n",
" <td>0.21</td>\n",
" <td>6</td>\n",
" <td>365</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2595</td>\n",
" <td>Skylit Midtown Castle</td>\n",
" <td>2845</td>\n",
" <td>Jennifer</td>\n",
" <td>Manhattan</td>\n",
" <td>Midtown</td>\n",
" <td>40.75362</td>\n",
" <td>-73.98377</td>\n",
" <td>Entire home/apt</td>\n",
" <td>225</td>\n",
" <td>1</td>\n",
" <td>45</td>\n",
" <td>2019-05-21</td>\n",
" <td>0.38</td>\n",
" <td>2</td>\n",
" <td>355</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3647</td>\n",
" <td>THE VILLAGE OF HARLEM....NEW YORK !</td>\n",
" <td>4632</td>\n",
" <td>Elisabeth</td>\n",
" <td>Manhattan</td>\n",
" <td>Harlem</td>\n",
" <td>40.80902</td>\n",
" <td>-73.94190</td>\n",
" <td>Private room</td>\n",
" <td>150</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>365</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3831</td>\n",
" <td>Cozy Entire Floor of Brownstone</td>\n",
" <td>4869</td>\n",
" <td>LisaRoxanne</td>\n",
" <td>Brooklyn</td>\n",
" <td>Clinton Hill</td>\n",
" <td>40.68514</td>\n",
" <td>-73.95976</td>\n",
" <td>Entire home/apt</td>\n",
" <td>89</td>\n",
" <td>1</td>\n",
" <td>270</td>\n",
" <td>2019-07-05</td>\n",
" <td>4.64</td>\n",
" <td>1</td>\n",
" <td>194</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5022</td>\n",
" <td>Entire Apt: Spacious Studio/Loft by central park</td>\n",
" <td>7192</td>\n",
" <td>Laura</td>\n",
" <td>Manhattan</td>\n",
" <td>East Harlem</td>\n",
" <td>40.79851</td>\n",
" <td>-73.94399</td>\n",
" <td>Entire home/apt</td>\n",
" <td>80</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" <td>2018-11-19</td>\n",
" <td>0.10</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48890</th>\n",
" <td>36484665</td>\n",
" <td>Charming one bedroom - newly renovated rowhouse</td>\n",
" <td>8232441</td>\n",
" <td>Sabrina</td>\n",
" <td>Brooklyn</td>\n",
" <td>Bedford-Stuyvesant</td>\n",
" <td>40.67853</td>\n",
" <td>-73.94995</td>\n",
" <td>Private room</td>\n",
" <td>70</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48891</th>\n",
" <td>36485057</td>\n",
" <td>Affordable room in Bushwick/East Williamsburg</td>\n",
" <td>6570630</td>\n",
" <td>Marisol</td>\n",
" <td>Brooklyn</td>\n",
" <td>Bushwick</td>\n",
" <td>40.70184</td>\n",
" <td>-73.93317</td>\n",
" <td>Private room</td>\n",
" <td>40</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2</td>\n",
" <td>36</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48892</th>\n",
" <td>36485431</td>\n",
" <td>Sunny Studio at Historical Neighborhood</td>\n",
" <td>23492952</td>\n",
" <td>Ilgar &amp; Aysel</td>\n",
" <td>Manhattan</td>\n",
" <td>Harlem</td>\n",
" <td>40.81475</td>\n",
" <td>-73.94867</td>\n",
" <td>Entire home/apt</td>\n",
" <td>115</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>27</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48893</th>\n",
" <td>36485609</td>\n",
" <td>43rd St. Time Square-cozy single bed</td>\n",
" <td>30985759</td>\n",
" <td>Taz</td>\n",
" <td>Manhattan</td>\n",
" <td>Hell's Kitchen</td>\n",
" <td>40.75751</td>\n",
" <td>-73.99112</td>\n",
" <td>Shared room</td>\n",
" <td>55</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>6</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48894</th>\n",
" <td>36487245</td>\n",
" <td>Trendy duplex in the very heart of Hell's Kitchen</td>\n",
" <td>68119814</td>\n",
" <td>Christophe</td>\n",
" <td>Manhattan</td>\n",
" <td>Hell's Kitchen</td>\n",
" <td>40.76404</td>\n",
" <td>-73.98933</td>\n",
" <td>Private room</td>\n",
" <td>90</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>23</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>48895 rows × 16 columns</p>\n",
"</div>"
],
"text/plain": [
" id name host_id \\\n",
"0 2539 Clean & quiet apt home by the park 2787 \n",
"1 2595 Skylit Midtown Castle 2845 \n",
"2 3647 THE VILLAGE OF HARLEM....NEW YORK ! 4632 \n",
"3 3831 Cozy Entire Floor of Brownstone 4869 \n",
"4 5022 Entire Apt: Spacious Studio/Loft by central park 7192 \n",
"... ... ... ... \n",
"48890 36484665 Charming one bedroom - newly renovated rowhouse 8232441 \n",
"48891 36485057 Affordable room in Bushwick/East Williamsburg 6570630 \n",
"48892 36485431 Sunny Studio at Historical Neighborhood 23492952 \n",
"48893 36485609 43rd St. Time Square-cozy single bed 30985759 \n",
"48894 36487245 Trendy duplex in the very heart of Hell's Kitchen 68119814 \n",
"\n",
" host_name neighbourhood_group neighbourhood latitude \\\n",
"0 John Brooklyn Kensington 40.64749 \n",
"1 Jennifer Manhattan Midtown 40.75362 \n",
"2 Elisabeth Manhattan Harlem 40.80902 \n",
"3 LisaRoxanne Brooklyn Clinton Hill 40.68514 \n",
"4 Laura Manhattan East Harlem 40.79851 \n",
"... ... ... ... ... \n",
"48890 Sabrina Brooklyn Bedford-Stuyvesant 40.67853 \n",
"48891 Marisol Brooklyn Bushwick 40.70184 \n",
"48892 Ilgar & Aysel Manhattan Harlem 40.81475 \n",
"48893 Taz Manhattan Hell's Kitchen 40.75751 \n",
"48894 Christophe Manhattan Hell's Kitchen 40.76404 \n",
"\n",
" longitude room_type price minimum_nights number_of_reviews \\\n",
"0 -73.97237 Private room 149 1 9 \n",
"1 -73.98377 Entire home/apt 225 1 45 \n",
"2 -73.94190 Private room 150 3 0 \n",
"3 -73.95976 Entire home/apt 89 1 270 \n",
"4 -73.94399 Entire home/apt 80 10 9 \n",
"... ... ... ... ... ... \n",
"48890 -73.94995 Private room 70 2 0 \n",
"48891 -73.93317 Private room 40 4 0 \n",
"48892 -73.94867 Entire home/apt 115 10 0 \n",
"48893 -73.99112 Shared room 55 1 0 \n",
"48894 -73.98933 Private room 90 7 0 \n",
"\n",
" last_review reviews_per_month calculated_host_listings_count \\\n",
"0 2018-10-19 0.21 6 \n",
"1 2019-05-21 0.38 2 \n",
"2 NaN NaN 1 \n",
"3 2019-07-05 4.64 1 \n",
"4 2018-11-19 0.10 1 \n",
"... ... ... ... \n",
"48890 NaN NaN 2 \n",
"48891 NaN NaN 2 \n",
"48892 NaN NaN 1 \n",
"48893 NaN NaN 6 \n",
"48894 NaN NaN 1 \n",
"\n",
" availability_365 \n",
"0 365 \n",
"1 355 \n",
"2 365 \n",
"3 194 \n",
"4 0 \n",
"... ... \n",
"48890 9 \n",
"48891 36 \n",
"48892 27 \n",
"48893 2 \n",
"48894 23 \n",
"\n",
"[48895 rows x 16 columns]"
]
},
"metadata": {
"tags": []
},
"execution_count": 16
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "VKdQWOu7WkeM"
},
"source": [
"Let's see what we are working with"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "QQOMmRQ9WkeM"
},
"source": [
"By default, Pandas will show you the 5 first and 5 last observations. Sometimes it is too much for the size of our screen, and that is why we often use the method `.head()`, which will give you the first 5 observations by default, but you can also put a different number inside the parenthesis, like `df.head(7)`. If you want to see the last observations, you can use the `.tail()` method, which works similarly to head."
]
},
{
"cell_type": "code",
"metadata": {
"id": "uptEo0iUWkeM",
"outputId": "77d97438-7c2e-41fe-f10b-3a31d09214ae"
},
"source": [
"df.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>name</th>\n",
" <th>host_id</th>\n",
" <th>host_name</th>\n",
" <th>neighbourhood_group</th>\n",
" <th>neighbourhood</th>\n",
" <th>latitude</th>\n",
" <th>longitude</th>\n",
" <th>room_type</th>\n",
" <th>price</th>\n",
" <th>minimum_nights</th>\n",
" <th>number_of_reviews</th>\n",
" <th>last_review</th>\n",
" <th>reviews_per_month</th>\n",
" <th>calculated_host_listings_count</th>\n",
" <th>availability_365</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2539</td>\n",
" <td>Clean &amp; quiet apt home by the park</td>\n",
" <td>2787</td>\n",
" <td>John</td>\n",
" <td>Brooklyn</td>\n",
" <td>Kensington</td>\n",
" <td>40.64749</td>\n",
" <td>-73.97237</td>\n",
" <td>Private room</td>\n",
" <td>149</td>\n",
" <td>1</td>\n",
" <td>9</td>\n",
" <td>2018-10-19</td>\n",
" <td>0.21</td>\n",
" <td>6</td>\n",
" <td>365</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2595</td>\n",
" <td>Skylit Midtown Castle</td>\n",
" <td>2845</td>\n",
" <td>Jennifer</td>\n",
" <td>Manhattan</td>\n",
" <td>Midtown</td>\n",
" <td>40.75362</td>\n",
" <td>-73.98377</td>\n",
" <td>Entire home/apt</td>\n",
" <td>225</td>\n",
" <td>1</td>\n",
" <td>45</td>\n",
" <td>2019-05-21</td>\n",
" <td>0.38</td>\n",
" <td>2</td>\n",
" <td>355</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3647</td>\n",
" <td>THE VILLAGE OF HARLEM....NEW YORK !</td>\n",
" <td>4632</td>\n",
" <td>Elisabeth</td>\n",
" <td>Manhattan</td>\n",
" <td>Harlem</td>\n",
" <td>40.80902</td>\n",
" <td>-73.94190</td>\n",
" <td>Private room</td>\n",
" <td>150</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>365</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3831</td>\n",
" <td>Cozy Entire Floor of Brownstone</td>\n",
" <td>4869</td>\n",
" <td>LisaRoxanne</td>\n",
" <td>Brooklyn</td>\n",
" <td>Clinton Hill</td>\n",
" <td>40.68514</td>\n",
" <td>-73.95976</td>\n",
" <td>Entire home/apt</td>\n",
" <td>89</td>\n",
" <td>1</td>\n",
" <td>270</td>\n",
" <td>2019-07-05</td>\n",
" <td>4.64</td>\n",
" <td>1</td>\n",
" <td>194</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5022</td>\n",
" <td>Entire Apt: Spacious Studio/Loft by central park</td>\n",
" <td>7192</td>\n",
" <td>Laura</td>\n",
" <td>Manhattan</td>\n",
" <td>East Harlem</td>\n",
" <td>40.79851</td>\n",
" <td>-73.94399</td>\n",
" <td>Entire home/apt</td>\n",
" <td>80</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" <td>2018-11-19</td>\n",
" <td>0.10</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id name host_id \\\n",
"0 2539 Clean & quiet apt home by the park 2787 \n",
"1 2595 Skylit Midtown Castle 2845 \n",
"2 3647 THE VILLAGE OF HARLEM....NEW YORK ! 4632 \n",
"3 3831 Cozy Entire Floor of Brownstone 4869 \n",
"4 5022 Entire Apt: Spacious Studio/Loft by central park 7192 \n",
"\n",
" host_name neighbourhood_group neighbourhood latitude longitude \\\n",
"0 John Brooklyn Kensington 40.64749 -73.97237 \n",
"1 Jennifer Manhattan Midtown 40.75362 -73.98377 \n",
"2 Elisabeth Manhattan Harlem 40.80902 -73.94190 \n",
"3 LisaRoxanne Brooklyn Clinton Hill 40.68514 -73.95976 \n",
"4 Laura Manhattan East Harlem 40.79851 -73.94399 \n",
"\n",
" room_type price minimum_nights number_of_reviews last_review \\\n",
"0 Private room 149 1 9 2018-10-19 \n",
"1 Entire home/apt 225 1 45 2019-05-21 \n",
"2 Private room 150 3 0 NaN \n",
"3 Entire home/apt 89 1 270 2019-07-05 \n",
"4 Entire home/apt 80 10 9 2018-11-19 \n",
"\n",
" reviews_per_month calculated_host_listings_count availability_365 \n",
"0 0.21 6 365 \n",
"1 0.38 2 355 \n",
"2 NaN 1 365 \n",
"3 4.64 1 194 \n",
"4 0.10 1 0 "
]
},
"metadata": {
"tags": []
},
"execution_count": 17
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "X-LuXPKRWkeM"
},
"source": [
"After taking a first look at the dataframe, ideally you want to get more information about it:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "BmEGtWd0WkeM",
"outputId": "e9ead303-c985-47d3-ddcc-657caf9ddd0e"
},
"source": [
"df.info()"
],
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 48895 entries, 0 to 48894\n",
"Data columns (total 16 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 id 48895 non-null int64 \n",
" 1 name 48879 non-null object \n",
" 2 host_id 48895 non-null int64 \n",
" 3 host_name 48874 non-null object \n",
" 4 neighbourhood_group 48895 non-null object \n",
" 5 neighbourhood 48895 non-null object \n",
" 6 latitude 48895 non-null float64\n",
" 7 longitude 48895 non-null float64\n",
" 8 room_type 48895 non-null object \n",
" 9 price 48895 non-null int64 \n",
" 10 minimum_nights 48895 non-null int64 \n",
" 11 number_of_reviews 48895 non-null int64 \n",
" 12 last_review 38843 non-null object \n",
" 13 reviews_per_month 38843 non-null float64\n",
" 14 calculated_host_listings_count 48895 non-null int64 \n",
" 15 availability_365 48895 non-null int64 \n",
"dtypes: float64(3), int64(7), object(6)\n",
"memory usage: 6.0+ MB\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BUWO8cY-WkeN"
},
"source": [
"If you want a list with all the column names (sometimes they are many!):"
]
},
{
"cell_type": "code",
"metadata": {
"id": "fzZ4_wU4WkeN",
"outputId": "1e1ea3d5-8299-42bb-d846-5a4077c695e3"
},
"source": [
"df.columns"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Index(['id', 'name', 'host_id', 'host_name', 'neighbourhood_group',\n",
" 'neighbourhood', 'latitude', 'longitude', 'room_type', 'price',\n",
" 'minimum_nights', 'number_of_reviews', 'last_review',\n",
" 'reviews_per_month', 'calculated_host_listings_count',\n",
" 'availability_365'],\n",
" dtype='object')"
]
},
"metadata": {
"tags": []
},
"execution_count": 19
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gkDpJF4RWkeN"
},
"source": [
"And for every column, we can use some methods, such as `mean`, `describe`, etc, **just like we did with the Series**. Because Pandas treats each of the columns as a Series, as a one-dimensional object."
]
},
{
"cell_type": "code",
"metadata": {
"id": "qUE3q2BtWkeN",
"outputId": "5bbbf564-8492-4934-eee4-ed41453c957d"
},
"source": [
"df.price.mean()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"152.7206871868289"
]
},
"metadata": {
"tags": []
},
"execution_count": 20
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "wC9ZWAyGWkeN"
},
"source": [
"## Subsetting data"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vowpz-nvWkeO"
},
"source": [
"Say we want to select only the observations that have a price over 500. Let's do it step by step"
]
},
{
"cell_type": "code",
"metadata": {
"id": "S6E633dXWkeO",
"outputId": "5c7ef7ca-6f9c-400f-ff61-0d86e53f618f"
},
"source": [
"over_500_bools = df.price > 500\n",
"\n",
"over_500_bools"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0 False\n",
"1 False\n",
"2 False\n",
"3 False\n",
"4 False\n",
" ... \n",
"48890 False\n",
"48891 False\n",
"48892 False\n",
"48893 False\n",
"48894 False\n",
"Name: price, Length: 48895, dtype: bool"
]
},
"metadata": {
"tags": []
},
"execution_count": 21
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "QL6D1h2oWkeO",
"outputId": "7baea72a-a10e-4048-c9f8-f87bcab8da8a"
},
"source": [
"type(over_500_bools)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"pandas.core.series.Series"
]
},
"metadata": {
"tags": []
},
"execution_count": 22
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Pp-qh7yzWkeO",
"outputId": "340a53fa-19f8-4aa9-e2e0-abffbdb0564b"
},
"source": [
"over_500_bools.mean()\n"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"0.021351876469986705"
]
},
"metadata": {
"tags": []
},
"execution_count": 23
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "nl1XOzr2WkeP"
},
"source": [
"The use of `.mean()`above is a little trick to know the percentage of cases that applied to our condition. In python, True equals 1 and False equals 0. So if you add all the number, the result will be the number of True items. Dividing it by the total of cases, gives you the percentage of True items.\n",
"\n",
"Now we want to isolate the rentals over $500\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "mcalRJxHWkeP",
"outputId": "867e8b5a-5ab3-4598-daf5-683dd654426c"
},
"source": [
"expensive_rentals = df[over_500_bools]\n",
"\n",
"len(expensive_rentals)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1044"
]
},
"metadata": {
"tags": []
},
"execution_count": 24
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "EuDIPmhRWkeP",
"outputId": "b21014b0-7ade-4fad-cf52-6a075796c4fd"
},
"source": [
"expensive_rentals.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>name</th>\n",
" <th>host_id</th>\n",
" <th>host_name</th>\n",
" <th>neighbourhood_group</th>\n",
" <th>neighbourhood</th>\n",
" <th>latitude</th>\n",
" <th>longitude</th>\n",
" <th>room_type</th>\n",
" <th>price</th>\n",
" <th>minimum_nights</th>\n",
" <th>number_of_reviews</th>\n",
" <th>last_review</th>\n",
" <th>reviews_per_month</th>\n",
" <th>calculated_host_listings_count</th>\n",
" <th>availability_365</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>85</th>\n",
" <td>19601</td>\n",
" <td>perfect for a family or small group</td>\n",
" <td>74303</td>\n",
" <td>Maggie</td>\n",
" <td>Brooklyn</td>\n",
" <td>Brooklyn Heights</td>\n",
" <td>40.69723</td>\n",
" <td>-73.99268</td>\n",
" <td>Entire home/apt</td>\n",
" <td>800</td>\n",
" <td>1</td>\n",
" <td>25</td>\n",
" <td>2016-08-04</td>\n",
" <td>0.24</td>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>299</th>\n",
" <td>68974</td>\n",
" <td>Unique spacious loft on the Bowery</td>\n",
" <td>281229</td>\n",
" <td>Alicia</td>\n",
" <td>Manhattan</td>\n",
" <td>Little Italy</td>\n",
" <td>40.71943</td>\n",
" <td>-73.99627</td>\n",
" <td>Entire home/apt</td>\n",
" <td>575</td>\n",
" <td>2</td>\n",
" <td>191</td>\n",
" <td>2019-06-20</td>\n",
" <td>1.88</td>\n",
" <td>1</td>\n",
" <td>298</td>\n",
" </tr>\n",
" <tr>\n",
" <th>345</th>\n",
" <td>89427</td>\n",
" <td>The Brooklyn Waverly</td>\n",
" <td>116599</td>\n",
" <td>Sahr</td>\n",
" <td>Brooklyn</td>\n",
" <td>Clinton Hill</td>\n",
" <td>40.68613</td>\n",
" <td>-73.96536</td>\n",
" <td>Entire home/apt</td>\n",
" <td>650</td>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>3</td>\n",
" <td>365</td>\n",
" </tr>\n",
" <tr>\n",
" <th>365</th>\n",
" <td>103311</td>\n",
" <td>2 BR w/ Terrace @ Box House Hotel</td>\n",
" <td>417504</td>\n",
" <td>The Box House Hotel</td>\n",
" <td>Brooklyn</td>\n",
" <td>Greenpoint</td>\n",
" <td>40.73861</td>\n",
" <td>-73.95485</td>\n",
" <td>Private room</td>\n",
" <td>599</td>\n",
" <td>3</td>\n",
" <td>9</td>\n",
" <td>2018-05-19</td>\n",
" <td>0.09</td>\n",
" <td>28</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>496</th>\n",
" <td>174966</td>\n",
" <td>Luxury 2Bed/2.5Bath Central Park View</td>\n",
" <td>836168</td>\n",
" <td>Henry</td>\n",
" <td>Manhattan</td>\n",
" <td>Upper West Side</td>\n",
" <td>40.77350</td>\n",
" <td>-73.98697</td>\n",
" <td>Entire home/apt</td>\n",
" <td>2000</td>\n",
" <td>30</td>\n",
" <td>30</td>\n",
" <td>2018-05-05</td>\n",
" <td>0.33</td>\n",
" <td>11</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id name host_id \\\n",
"85 19601 perfect for a family or small group 74303 \n",
"299 68974 Unique spacious loft on the Bowery 281229 \n",
"345 89427 The Brooklyn Waverly 116599 \n",
"365 103311 2 BR w/ Terrace @ Box House Hotel 417504 \n",
"496 174966 Luxury 2Bed/2.5Bath Central Park View 836168 \n",
"\n",
" host_name neighbourhood_group neighbourhood latitude \\\n",
"85 Maggie Brooklyn Brooklyn Heights 40.69723 \n",
"299 Alicia Manhattan Little Italy 40.71943 \n",
"345 Sahr Brooklyn Clinton Hill 40.68613 \n",
"365 The Box House Hotel Brooklyn Greenpoint 40.73861 \n",
"496 Henry Manhattan Upper West Side 40.77350 \n",
"\n",
" longitude room_type price minimum_nights number_of_reviews \\\n",
"85 -73.99268 Entire home/apt 800 1 25 \n",
"299 -73.99627 Entire home/apt 575 2 191 \n",
"345 -73.96536 Entire home/apt 650 5 0 \n",
"365 -73.95485 Private room 599 3 9 \n",
"496 -73.98697 Entire home/apt 2000 30 30 \n",
"\n",
" last_review reviews_per_month calculated_host_listings_count \\\n",
"85 2016-08-04 0.24 1 \n",
"299 2019-06-20 1.88 1 \n",
"345 NaN NaN 3 \n",
"365 2018-05-19 0.09 28 \n",
"496 2018-05-05 0.33 11 \n",
"\n",
" availability_365 \n",
"85 7 \n",
"299 298 \n",
"345 365 \n",
"365 60 \n",
"496 0 "
]
},
"metadata": {
"tags": []
},
"execution_count": 25
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "gRw9NlnoWkeP",
"outputId": "617d868f-08ee-4abb-97b9-506167f5a40c"
},
"source": [
"expensive_rentals.price.mean()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"1123.954980842912"
]
},
"metadata": {
"tags": []
},
"execution_count": 26
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "-yKC6ndXWkeP",
"outputId": "1a49363f-4f8a-4f99-b935-c5f8b7e638ab"
},
"source": [
"expensive_rentals.price.median()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"750.0"
]
},
"metadata": {
"tags": []
},
"execution_count": 27
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "UXczUePUWkeQ"
},
"source": [
"In practice, we don't need all of those steps above. We can do it all in the same line. For instance:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "N9-8tbJWWkeQ",
"outputId": "3f2226f5-44e3-4d7f-985c-c7c701ce0ca0"
},
"source": [
"under_100 = df[df.price < 100]\n",
"under_100.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>name</th>\n",
" <th>host_id</th>\n",
" <th>host_name</th>\n",
" <th>neighbourhood_group</th>\n",
" <th>neighbourhood</th>\n",
" <th>latitude</th>\n",
" <th>longitude</th>\n",
" <th>room_type</th>\n",
" <th>price</th>\n",
" <th>minimum_nights</th>\n",
" <th>number_of_reviews</th>\n",
" <th>last_review</th>\n",
" <th>reviews_per_month</th>\n",
" <th>calculated_host_listings_count</th>\n",
" <th>availability_365</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3831</td>\n",
" <td>Cozy Entire Floor of Brownstone</td>\n",
" <td>4869</td>\n",
" <td>LisaRoxanne</td>\n",
" <td>Brooklyn</td>\n",
" <td>Clinton Hill</td>\n",
" <td>40.68514</td>\n",
" <td>-73.95976</td>\n",
" <td>Entire home/apt</td>\n",
" <td>89</td>\n",
" <td>1</td>\n",
" <td>270</td>\n",
" <td>2019-07-05</td>\n",
" <td>4.64</td>\n",
" <td>1</td>\n",
" <td>194</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5022</td>\n",
" <td>Entire Apt: Spacious Studio/Loft by central park</td>\n",
" <td>7192</td>\n",
" <td>Laura</td>\n",
" <td>Manhattan</td>\n",
" <td>East Harlem</td>\n",
" <td>40.79851</td>\n",
" <td>-73.94399</td>\n",
" <td>Entire home/apt</td>\n",
" <td>80</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" <td>2018-11-19</td>\n",
" <td>0.10</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>5121</td>\n",
" <td>BlissArtsSpace!</td>\n",
" <td>7356</td>\n",
" <td>Garon</td>\n",
" <td>Brooklyn</td>\n",
" <td>Bedford-Stuyvesant</td>\n",
" <td>40.68688</td>\n",
" <td>-73.95596</td>\n",
" <td>Private room</td>\n",
" <td>60</td>\n",
" <td>45</td>\n",
" <td>49</td>\n",
" <td>2017-10-05</td>\n",
" <td>0.40</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>5178</td>\n",
" <td>Large Furnished Room Near B'way</td>\n",
" <td>8967</td>\n",
" <td>Shunichi</td>\n",
" <td>Manhattan</td>\n",
" <td>Hell's Kitchen</td>\n",
" <td>40.76489</td>\n",
" <td>-73.98493</td>\n",
" <td>Private room</td>\n",
" <td>79</td>\n",
" <td>2</td>\n",
" <td>430</td>\n",
" <td>2019-06-24</td>\n",
" <td>3.47</td>\n",
" <td>1</td>\n",
" <td>220</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>5203</td>\n",
" <td>Cozy Clean Guest Room - Family Apt</td>\n",
" <td>7490</td>\n",
" <td>MaryEllen</td>\n",
" <td>Manhattan</td>\n",
" <td>Upper West Side</td>\n",
" <td>40.80178</td>\n",
" <td>-73.96723</td>\n",
" <td>Private room</td>\n",
" <td>79</td>\n",
" <td>2</td>\n",
" <td>118</td>\n",
" <td>2017-07-21</td>\n",
" <td>0.99</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id name host_id \\\n",
"3 3831 Cozy Entire Floor of Brownstone 4869 \n",
"4 5022 Entire Apt: Spacious Studio/Loft by central park 7192 \n",
"6 5121 BlissArtsSpace! 7356 \n",
"7 5178 Large Furnished Room Near B'way 8967 \n",
"8 5203 Cozy Clean Guest Room - Family Apt 7490 \n",
"\n",
" host_name neighbourhood_group neighbourhood latitude longitude \\\n",
"3 LisaRoxanne Brooklyn Clinton Hill 40.68514 -73.95976 \n",
"4 Laura Manhattan East Harlem 40.79851 -73.94399 \n",
"6 Garon Brooklyn Bedford-Stuyvesant 40.68688 -73.95596 \n",
"7 Shunichi Manhattan Hell's Kitchen 40.76489 -73.98493 \n",
"8 MaryEllen Manhattan Upper West Side 40.80178 -73.96723 \n",
"\n",
" room_type price minimum_nights number_of_reviews last_review \\\n",
"3 Entire home/apt 89 1 270 2019-07-05 \n",
"4 Entire home/apt 80 10 9 2018-11-19 \n",
"6 Private room 60 45 49 2017-10-05 \n",
"7 Private room 79 2 430 2019-06-24 \n",
"8 Private room 79 2 118 2017-07-21 \n",
"\n",
" reviews_per_month calculated_host_listings_count availability_365 \n",
"3 4.64 1 194 \n",
"4 0.10 1 0 \n",
"6 0.40 1 0 \n",
"7 3.47 1 220 \n",
"8 0.99 1 0 "
]
},
"metadata": {
"tags": []
},
"execution_count": 28
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dsCh_GnCWkeQ"
},
"source": [
"## Looking at Neighborhoods\n",
"\n",
"Let's find the neighborhood with most expensive rentals"
]
},
{
"cell_type": "code",
"metadata": {
"id": "bGROy8ETWkeQ",
"outputId": "b61d934d-8ae5-4f8a-9996-27f1efa34d54"
},
"source": [
"expensive_rentals.neighbourhood.value_counts()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Midtown 163\n",
"Upper West Side 75\n",
"Hell's Kitchen 60\n",
"Chelsea 53\n",
"Williamsburg 49\n",
" ... \n",
"Roosevelt Island 1\n",
"East Elmhurst 1\n",
"Downtown Brooklyn 1\n",
"Woodrow 1\n",
"Briarwood 1\n",
"Name: neighbourhood, Length: 84, dtype: int64"
]
},
"metadata": {
"tags": []
},
"execution_count": 29
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "GZY_ACaaWkeQ",
"outputId": "618b5a81-e48f-4614-96ef-44daf13e2448"
},
"source": [
"\"Hell's Kitchen\" in set(df.neighbourhood)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"True"
]
},
"metadata": {
"tags": []
},
"execution_count": 30
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "gcaL6ELVWkeQ",
"outputId": "86cbb176-0257-4cf7-823a-7ec473c206bd"
},
"source": [
"\"Sunnyside\" in set(df.neighbourhood)"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"True"
]
},
"metadata": {
"tags": []
},
"execution_count": 31
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ZkDsv-IxWkeR"
},
"source": [
"(We had to use `set` because `in` doesn't work well with Pandas Series)\n",
"\n",
"Now let's subset with observations coming only from a specific neighbourhood.\n"
]
},
{
"cell_type": "code",
"metadata": {
"id": "e8PUPas_WkeR"
},
"source": [
"neighborhood_bools = df.neighbourhood == \"Sunnyside\"\n",
"\n",
"sunnyside = df[neighborhood_bools]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "fcmOjOVOWkeR"
},
"source": [
"Notice that we could also put those things together in one line, and it will also work:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "0V9iTXrIWkeR",
"outputId": "7d9df8c8-693b-4326-8fb2-f3c62683a5fd"
},
"source": [
"sunnyside = df[df.neighbourhood == \"Sunnyside\"]\n",
"sunnyside.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>name</th>\n",
" <th>host_id</th>\n",
" <th>host_name</th>\n",
" <th>neighbourhood_group</th>\n",
" <th>neighbourhood</th>\n",
" <th>latitude</th>\n",
" <th>longitude</th>\n",
" <th>room_type</th>\n",
" <th>price</th>\n",
" <th>minimum_nights</th>\n",
" <th>number_of_reviews</th>\n",
" <th>last_review</th>\n",
" <th>reviews_per_month</th>\n",
" <th>calculated_host_listings_count</th>\n",
" <th>availability_365</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>161</th>\n",
" <td>39593</td>\n",
" <td>A room w/ a Manhattan view, longer stay</td>\n",
" <td>110506</td>\n",
" <td>Myung</td>\n",
" <td>Queens</td>\n",
" <td>Sunnyside</td>\n",
" <td>40.74559</td>\n",
" <td>-73.92313</td>\n",
" <td>Private room</td>\n",
" <td>79</td>\n",
" <td>30</td>\n",
" <td>28</td>\n",
" <td>2019-04-12</td>\n",
" <td>0.26</td>\n",
" <td>1</td>\n",
" <td>126</td>\n",
" </tr>\n",
" <tr>\n",
" <th>441</th>\n",
" <td>152520</td>\n",
" <td>Female Only Clean15min to Manhattan</td>\n",
" <td>733894</td>\n",
" <td>Lucy</td>\n",
" <td>Queens</td>\n",
" <td>Sunnyside</td>\n",
" <td>40.73850</td>\n",
" <td>-73.91806</td>\n",
" <td>Private room</td>\n",
" <td>42</td>\n",
" <td>40</td>\n",
" <td>53</td>\n",
" <td>2018-11-16</td>\n",
" <td>0.55</td>\n",
" <td>3</td>\n",
" <td>236</td>\n",
" </tr>\n",
" <tr>\n",
" <th>457</th>\n",
" <td>161366</td>\n",
" <td>Sunny 15min to Manhattan LADY only</td>\n",
" <td>733894</td>\n",
" <td>Lucy</td>\n",
" <td>Queens</td>\n",
" <td>Sunnyside</td>\n",
" <td>40.74102</td>\n",
" <td>-73.91681</td>\n",
" <td>Private room</td>\n",
" <td>42</td>\n",
" <td>40</td>\n",
" <td>41</td>\n",
" <td>2019-06-01</td>\n",
" <td>0.43</td>\n",
" <td>3</td>\n",
" <td>246</td>\n",
" </tr>\n",
" <tr>\n",
" <th>469</th>\n",
" <td>165824</td>\n",
" <td>Lady only Curtain-divided room</td>\n",
" <td>733894</td>\n",
" <td>Lucy</td>\n",
" <td>Queens</td>\n",
" <td>Sunnyside</td>\n",
" <td>40.74000</td>\n",
" <td>-73.91901</td>\n",
" <td>Private room</td>\n",
" <td>33</td>\n",
" <td>44</td>\n",
" <td>31</td>\n",
" <td>2019-05-01</td>\n",
" <td>0.32</td>\n",
" <td>3</td>\n",
" <td>161</td>\n",
" </tr>\n",
" <tr>\n",
" <th>530</th>\n",
" <td>193393</td>\n",
" <td>Spacious, Kid-Friendly, and 15-20 Mins. to Mid...</td>\n",
" <td>938056</td>\n",
" <td>Mike</td>\n",
" <td>Queens</td>\n",
" <td>Sunnyside</td>\n",
" <td>40.74249</td>\n",
" <td>-73.92466</td>\n",
" <td>Private room</td>\n",
" <td>75</td>\n",
" <td>2</td>\n",
" <td>160</td>\n",
" <td>2019-06-25</td>\n",
" <td>1.68</td>\n",
" <td>1</td>\n",
" <td>65</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id name host_id \\\n",
"161 39593 A room w/ a Manhattan view, longer stay 110506 \n",
"441 152520 Female Only Clean15min to Manhattan 733894 \n",
"457 161366 Sunny 15min to Manhattan LADY only 733894 \n",
"469 165824 Lady only Curtain-divided room 733894 \n",
"530 193393 Spacious, Kid-Friendly, and 15-20 Mins. to Mid... 938056 \n",
"\n",
" host_name neighbourhood_group neighbourhood latitude longitude \\\n",
"161 Myung Queens Sunnyside 40.74559 -73.92313 \n",
"441 Lucy Queens Sunnyside 40.73850 -73.91806 \n",
"457 Lucy Queens Sunnyside 40.74102 -73.91681 \n",
"469 Lucy Queens Sunnyside 40.74000 -73.91901 \n",
"530 Mike Queens Sunnyside 40.74249 -73.92466 \n",
"\n",
" room_type price minimum_nights number_of_reviews last_review \\\n",
"161 Private room 79 30 28 2019-04-12 \n",
"441 Private room 42 40 53 2018-11-16 \n",
"457 Private room 42 40 41 2019-06-01 \n",
"469 Private room 33 44 31 2019-05-01 \n",
"530 Private room 75 2 160 2019-06-25 \n",
"\n",
" reviews_per_month calculated_host_listings_count availability_365 \n",
"161 0.26 1 126 \n",
"441 0.55 3 236 \n",
"457 0.43 3 246 \n",
"469 0.32 3 161 \n",
"530 1.68 1 65 "
]
},
"metadata": {
"tags": []
},
"execution_count": 33
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Kr5Qb3lJWkeR",
"outputId": "bc90a7eb-8985-4905-f56b-8f2f5ad24aa2"
},
"source": [
"sunnyside.price.mean()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"84.86501377410468"
]
},
"metadata": {
"tags": []
},
"execution_count": 34
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "dPfvRJPLWkeS"
},
"source": [
"## Plotting"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "7NNoapGAWkeS"
},
"source": [
"Plotting is a huge field with plenty for us to learn and experiment. Here we'll just see a couple options. \n",
"I'm not gonna lie. The syntax is a bit weird, so buckle up.\n",
"\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5PQg-R2AWkeS"
},
"source": [
"Say we want to have a pie chart with the distribution of announces by borough (in this dataset, the 'neighbourhood_group' column):"
]
},
{
"cell_type": "code",
"metadata": {
"id": "fYySPDs-WkeS",
"outputId": "99fd5126-6a81-4270-cfc1-d4d4a044f64b"
},
"source": [
"df.groupby('neighbourhood_group')['id'].count().plot.pie()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<AxesSubplot:ylabel='id'>"
]
},
"metadata": {
"tags": []
},
"execution_count": 35
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "_9QN0e_dWkeS"
},
"source": [
"First thing we did was to group the data by the values of a column. In this case, 'neighbourhood_group'. `df.groupby('neighbourhood_group')` \n",
"It is important to choose a column that will return you a legible image. Try the code above with 'neighbourhood' instead of 'neighbourhood_group' and you'll see what I mean.\n",
"\n",
"Second part was to count the values. For that, we could use other columns, but index is always a good go-to, because we know it has no null values. `['id'].count()`\n",
"\n",
"Finally, we asked to plot it as a pie chart. `.plot.pie()`"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "QCTwK4E6WkeT"
},
"source": [
"This syntax is not intuitive, and don't feel like you need to know it by heart. Once you have functioning examples, you can use them to plot other things. Whenever I'm doing a new project, I always have old projects with me so I can copy the syntaxes I've used in the past.\n",
"\n",
"For example, say we want to plot a bar chart with the mean price of each borough. Before moving to the next cell, try look at the syntax of the graph we plotted before, think about what parts will need to change. Try the code by yourself how you think it probably should be rewritten. Test it and see if it works. "
]
},
{
"cell_type": "code",
"metadata": {
"id": "skAgtpjHWkeT",
"outputId": "45a2c28d-1e0e-4fa1-a751-67965e5c6c52"
},
"source": [
"df.groupby('neighbourhood_group')['price'].mean().plot.bar()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<AxesSubplot:xlabel='neighbourhood_group'>"
]
},
"metadata": {
"tags": []
},
"execution_count": 36
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "xK_6md2iWkeT"
},
"source": [
"We can also add another column to the bar plot:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "mcKjPE-lWkeT",
"outputId": "12cac164-c545-4e3f-c296-6165fc4e422d"
},
"source": [
"df.groupby('neighbourhood_group')[['price', 'number_of_reviews']].mean().plot.bar()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<AxesSubplot:xlabel='neighbourhood_group'>"
]
},
"metadata": {
"tags": []
},
"execution_count": 37
},
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAE/CAYAAAC9y4P/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAmlElEQVR4nO3deZhU1bnv8e9PUIlRUQENUbSJwQkEDA0aQASNYoxD9IrKSQxqEjWD0QzeaDwxhnu8j1PMzdE4HokaDSKixzHGIVE0GoRWQBARBzREjiIEURDC8N4/9u6maKoHurp7F7t+n+fpp/dee3qroN9atfbaaykiMDOzfNki6wDMzKz1ObmbmeWQk7uZWQ45uZuZ5ZCTu5lZDjm5m5nlUMesAwDo2rVrVFVVZR2Gmdlmpaam5oOI6FZsW1kk96qqKqZNm5Z1GGZmmxVJbze0zc0yZmY51GRyl9RD0l8kzZE0W9K5aflOkh6XNC/9vWPBMRdKel3SXEkj2/IFmJnZxppTc18D/Dgi9gUOAr4naT/gAuDJiOgFPJmuk247BegNHAlcJ6lDWwRvZmbFNdnmHhELgYXp8keS5gC7AscBw9PdbgOeAn6alt8VEauAtyS9DgwCnm/t4M3yavXq1SxYsICVK1dmHYqVgU6dOrHbbrux5ZZbNvuYTbqhKqkKOACYAuySJn4iYqGkndPddgX+VnDYgrTMzJppwYIFbLfddlRVVSEp63AsQxHB4sWLWbBgAT179mz2cc2+oSppW2AScF5ELGts12LxFTnfmZKmSZq2aNGi5oZhVhFWrlxJly5dnNgNSXTp0mWTv8U1K7lL2pIksd8ZEfemxe9J6p5u7w68n5YvAHoUHL4b8G79c0bETRFRHRHV3boV7aZpVtGc2K1WS/4vNKe3jIBbgDkRcXXBpgeAMenyGOD+gvJTJG0tqSfQC3hhkyMzs83CxRdfzBNPPJF1GFZPc9rchwCnAi9Lmp6W/Qy4DLhb0jeBd4BRABExW9LdwCskPW2+FxFrWztws+aouuDhks8x/7KvtEIkpWmN11GotV7T2rVrGTt2bKucy1pXkzX3iHg2IhQRfSOif/rzSEQsjojDIqJX+ntJwTGXRsSeEbF3RPyxbV+CmbWF+fPns88++zBmzBj69u3LiSeeyIoVK6iqqmLs2LEMHTqUiRMnctppp3HPPfcAMHXqVAYPHky/fv0YNGgQH330EWvXruX8889n4MCB9O3blxtvvDHjV1YZymL4ATMrT3PnzuWWW25hyJAhnHHGGVx33XVA0jXv2WefBeDRRx8F4F//+hcnn3wyEyZMYODAgSxbtoxPfepT3HLLLXTu3JmpU6eyatUqhgwZwhFHHLFJPT9s03n4ATNrUI8ePRgyZAgAX//61+sS+sknn7zRvnPnzqV79+4MHDgQgO23356OHTvy2GOPcfvtt9O/f38OPPBAFi9ezLx589rvRVQo19zNrEH1e2nUrn/605/eaN+IKNqrIyK45pprGDnSI5G0J9fczaxB77zzDs8/nzxcPn78eIYOHdrgvvvssw/vvvsuU6dOBeCjjz5izZo1jBw5kuuvv57Vq1cD8Nprr7F8+fK2D77CObmbWYP23XdfbrvtNvr27cuSJUv4zne+0+C+W221FRMmTOCcc86hX79+HH744axcuZJvfetb7LfffnzhC1+gT58+nHXWWaxZs6YdX0VlUsRGD4+2u+rq6vB47tYWNteukHPmzGHfffdt9+sWmj9/PkcffTSzZs3KNA5LFPs/IakmIqqL7e+au5lZDjm5m1lRVVVVrrVvxpzczcxyyMndzCyHnNzNzHLIyd3MLIec3M3McsjDD5htDi7p3Mrn+7B1z7cJhg8fzlVXXUV1ddHu2a3u/PPP55FHHuGoo47iyiuvbPXzX3zxxQwbNowvfelLrX7uUji5m9lmY82aNXTsuGlp68Ybb2TRokVsvfXWbXL+ch3P3s0yZlbU/Pnz2Xffffn2t79N7969OeKII/jkk08YPnw4tU+Uf/DBB1RVVQFw66238tWvfpVjjjmGnj17cu2113L11VdzwAEHcNBBB7FkSd2UD9xxxx0MHjyYPn368MILyURty5cv54wzzmDgwIEccMAB3H///XXnHTVqFMcccwxHHHFE0VgjgvPPP58+ffqw//77M2HCBACOPfZYli9fzoEHHlhXVt9pp53Gj370I0aMGMFPf/pT3njjDY488kgGDBjAwQcfzKuvvsqHH35IVVUV69atA2DFihX06NGD1atXbzCefU1NDYcccggDBgxg5MiRLFy4kPfff58BAwYAMGPGDCTxzjvvALDnnnuyYsUKJk6cSJ8+fejXrx/Dhg1r8b9ZIdfczaxB8+bNY/z48dx8882cdNJJTJo0qdH9Z82axUsvvcTKlSv5/Oc/z+WXX85LL73ED3/4Q26//XbOO+88IEnkzz33HJMnT+aMM85g1qxZXHrppRx66KGMGzeOpUuXMmjQoLqmjueff56ZM2ey0047Fb3uvffey/Tp05kxYwYffPABAwcOZNiwYTzwwANsu+22TJ8+vdG4X3vtNZ544gk6dOjAYYcdxg033ECvXr2YMmUK3/3ud/nzn/9Mv379ePrppxkxYgQPPvggI0eOZMstt6w7x+rVqznnnHO4//776datGxMmTOCiiy5i3LhxrFy5kmXLlvHMM89QXV3NM888w9ChQ9l5553ZZpttGDt2LH/605/YddddWbp0abP/fRrj5G5mDerZsyf9+/cHYMCAAcyfP7/R/UeMGMF2223HdtttR+fOnTnmmGMA2H///Zk5c2bdfqNHjwZg2LBhLFu2jKVLl/LYY4/xwAMPcNVVVwGwcuXKuhru4Ycf3mBiB3j22WcZPXo0HTp0YJddduGQQw5h6tSpHHvssc16naNGjaJDhw58/PHHPPfcc4waNapu26pVqwDqJiIZMWIEd911F9/97nc3OMfcuXOZNWsWhx9+OJBMQdi9e3cABg8ezF//+lcmT57Mz372Mx599FEigoMPPhiAIUOGcNppp3HSSSdxwgknNCvmpjSZ3CWNA44G3o+IPmnZBGDvdJcdgKUR0V9SFTAHmJtu+1tEnN0qkZpZuytsp+7QoQOffPIJHTt2rGueWLlyZYP7b7HFFnXrW2yxxQYjQRYbJz4imDRpEnvvvfcG26ZMmVJ0/PhCpQ6AWHv+devWscMOOxSt6R977LFceOGFLFmyhJqaGg499NCNYujdu3fdEMmFDj74YJ555hnefvttjjvuOC6//HIkcfTRRwNwww03MGXKFB5++GH69+/P9OnT6dKlS0mvqTlt7rcCR9Z7ESfXzqcKTALuLdj8RsFcq07sZjlTVVVFTU0NQF1b86aqbf9+9tln6dy5M507d2bkyJFcc801dYn6pZdeavb5hg0bxoQJE1i7di2LFi1i8uTJDBo0aJPj2n777enZsycTJ04EkoQ9Y8YMALbddlsGDRrEueeey9FHH02HDh02OHbvvfdm0aJFdcl99erVzJ49uy6+O+64g169erHFFluw00478cgjj9TNcvXGG29w4IEHMnbsWLp27crf//73TY69viZr7hEx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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-qXOQNAgWkeT"
},
"source": [
"## Creating a new column with conditions"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "ww31LqSeWkeU"
},
"source": [
"Rarely the datasets come with the data in the way we want. Imagine if we wanted a new classification that would split low from mid to high rent value. \n",
"\n",
"To do it, we will create a condition, apply it to the price column, and create a new column with the result."
]
},
{
"cell_type": "code",
"metadata": {
"id": "vVl5LipnWkeU"
},
"source": [
"conditions = [\n",
" (df['price'] <= 100),\n",
" (df['price'] > 100) & (df['price'] <= 200),\n",
" (df['price'] > 200)\n",
"]"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "d-XNrge1WkeU"
},
"source": [
"Now we create a list of the values we want to assign for each condition:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "KSUZcGUmWkeU"
},
"source": [
"values = ['low rent', 'mid rent', 'high rent']"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "3ZCevuLpWkeU"
},
"source": [
"Finally, we create a new column and use the `numpy` `select` function to assign values to it"
]
},
{
"cell_type": "code",
"metadata": {
"id": "7tnHhmhPWkeU"
},
"source": [
"import numpy as np\n",
"df['rent_range'] = np.select(conditions, values)"
],
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "menIAucdWkeU"
},
"source": [
"Now let's check it. Make sure to scroll all the way to the right and look at the last column"
]
},
{
"cell_type": "code",
"metadata": {
"id": "cMmCgRf3WkeV",
"outputId": "41c803f0-12d2-4dba-e02d-6662eacfaef8"
},
"source": [
"df.head()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>name</th>\n",
" <th>host_id</th>\n",
" <th>host_name</th>\n",
" <th>neighbourhood_group</th>\n",
" <th>neighbourhood</th>\n",
" <th>latitude</th>\n",
" <th>longitude</th>\n",
" <th>room_type</th>\n",
" <th>price</th>\n",
" <th>minimum_nights</th>\n",
" <th>number_of_reviews</th>\n",
" <th>last_review</th>\n",
" <th>reviews_per_month</th>\n",
" <th>calculated_host_listings_count</th>\n",
" <th>availability_365</th>\n",
" <th>rent_range</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2539</td>\n",
" <td>Clean &amp; quiet apt home by the park</td>\n",
" <td>2787</td>\n",
" <td>John</td>\n",
" <td>Brooklyn</td>\n",
" <td>Kensington</td>\n",
" <td>40.64749</td>\n",
" <td>-73.97237</td>\n",
" <td>Private room</td>\n",
" <td>149</td>\n",
" <td>1</td>\n",
" <td>9</td>\n",
" <td>2018-10-19</td>\n",
" <td>0.21</td>\n",
" <td>6</td>\n",
" <td>365</td>\n",
" <td>mid rent</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2595</td>\n",
" <td>Skylit Midtown Castle</td>\n",
" <td>2845</td>\n",
" <td>Jennifer</td>\n",
" <td>Manhattan</td>\n",
" <td>Midtown</td>\n",
" <td>40.75362</td>\n",
" <td>-73.98377</td>\n",
" <td>Entire home/apt</td>\n",
" <td>225</td>\n",
" <td>1</td>\n",
" <td>45</td>\n",
" <td>2019-05-21</td>\n",
" <td>0.38</td>\n",
" <td>2</td>\n",
" <td>355</td>\n",
" <td>high rent</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3647</td>\n",
" <td>THE VILLAGE OF HARLEM....NEW YORK !</td>\n",
" <td>4632</td>\n",
" <td>Elisabeth</td>\n",
" <td>Manhattan</td>\n",
" <td>Harlem</td>\n",
" <td>40.80902</td>\n",
" <td>-73.94190</td>\n",
" <td>Private room</td>\n",
" <td>150</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1</td>\n",
" <td>365</td>\n",
" <td>mid rent</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3831</td>\n",
" <td>Cozy Entire Floor of Brownstone</td>\n",
" <td>4869</td>\n",
" <td>LisaRoxanne</td>\n",
" <td>Brooklyn</td>\n",
" <td>Clinton Hill</td>\n",
" <td>40.68514</td>\n",
" <td>-73.95976</td>\n",
" <td>Entire home/apt</td>\n",
" <td>89</td>\n",
" <td>1</td>\n",
" <td>270</td>\n",
" <td>2019-07-05</td>\n",
" <td>4.64</td>\n",
" <td>1</td>\n",
" <td>194</td>\n",
" <td>low rent</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5022</td>\n",
" <td>Entire Apt: Spacious Studio/Loft by central park</td>\n",
" <td>7192</td>\n",
" <td>Laura</td>\n",
" <td>Manhattan</td>\n",
" <td>East Harlem</td>\n",
" <td>40.79851</td>\n",
" <td>-73.94399</td>\n",
" <td>Entire home/apt</td>\n",
" <td>80</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" <td>2018-11-19</td>\n",
" <td>0.10</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>low rent</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id name host_id \\\n",
"0 2539 Clean & quiet apt home by the park 2787 \n",
"1 2595 Skylit Midtown Castle 2845 \n",
"2 3647 THE VILLAGE OF HARLEM....NEW YORK ! 4632 \n",
"3 3831 Cozy Entire Floor of Brownstone 4869 \n",
"4 5022 Entire Apt: Spacious Studio/Loft by central park 7192 \n",
"\n",
" host_name neighbourhood_group neighbourhood latitude longitude \\\n",
"0 John Brooklyn Kensington 40.64749 -73.97237 \n",
"1 Jennifer Manhattan Midtown 40.75362 -73.98377 \n",
"2 Elisabeth Manhattan Harlem 40.80902 -73.94190 \n",
"3 LisaRoxanne Brooklyn Clinton Hill 40.68514 -73.95976 \n",
"4 Laura Manhattan East Harlem 40.79851 -73.94399 \n",
"\n",
" room_type price minimum_nights number_of_reviews last_review \\\n",
"0 Private room 149 1 9 2018-10-19 \n",
"1 Entire home/apt 225 1 45 2019-05-21 \n",
"2 Private room 150 3 0 NaN \n",
"3 Entire home/apt 89 1 270 2019-07-05 \n",
"4 Entire home/apt 80 10 9 2018-11-19 \n",
"\n",
" reviews_per_month calculated_host_listings_count availability_365 \\\n",
"0 0.21 6 365 \n",
"1 0.38 2 355 \n",
"2 NaN 1 365 \n",
"3 4.64 1 194 \n",
"4 0.10 1 0 \n",
"\n",
" rent_range \n",
"0 mid rent \n",
"1 high rent \n",
"2 mid rent \n",
"3 low rent \n",
"4 low rent "
]
},
"metadata": {
"tags": []
},
"execution_count": 41
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "-BYmhDdmWkeV"
},
"source": [
"And if we want to plot it:"
]
},
{
"cell_type": "code",
"metadata": {
"id": "-1TmqI1mWkeV",
"outputId": "037bd536-ad63-4756-a224-054b3ce4bc3b"
},
"source": [
"df.groupby(['rent_range', 'neighbourhood_group',])['id'].count().plot.bar()"
],
"execution_count": null,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"<AxesSubplot:xlabel='rent_range,neighbourhood_group'>"
]
},
"metadata": {
"tags": []
},
"execution_count": 42
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "b8ZWHFfXWkeV"
},
"source": [
""
],
"execution_count": null,
"outputs": []
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment