{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Exercise 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Beginners:\n", "\n", "\n", " - Read the file `Orange_1.tsv`\n", " - Print the height column\n", " - Print the data for the tree at age 2\n", " - Find the maximum circumference\n", " - How old was the tree at that time?\n", " - Plot the circumference in relation to the height\n", " \n", " Solution: see the bottom of this notebook." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Advanced: Plotting IMDB " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will make one last visit to the IMDB data. This time, you will get to explore the data by plotting graphs. Pandas will do the parsing for you!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The questions to answer are:\n", " \n", "- Are movies getting better or worse? That is, how do the movies' ratings relate to the year they were produced? \n", "- What rating does most movies have - how many good movies are there?\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will use two types of plots: `scatter` and `histogram`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Intermediate**: follow the step-by-step guide below to create the plots.\n", "\n", "**Pro**: try to answer the questions above on your own. Use Pandas, and get inspired by the documentation and previous lectures." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step by step. Getting started - reading the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you might have thought when parsing the IMDB data yourself, getting it right is not that easy. Pandas agree, it's much more complicated than reading the Orange tree data. But let's just start by making a try:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "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># Votes | Rating | Year | Runtime | URL | Genres | Title</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>126807| 8.5|1957|5280|https://images-na....</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>71379| 8.2|1925|4320|https://images-na....</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>700599| 8.3|2009|5760|https://images-na....</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>27632| 8.3|1928|6840|https://images-na....</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>228498| 8.4|1959|8160|https://images-na....</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " # Votes | Rating | Year | Runtime | URL | Genres | Title\n", "0 126807| 8.5|1957|5280|https://images-na.... \n", "1 71379| 8.2|1925|4320|https://images-na.... \n", "2 700599| 8.3|2009|5760|https://images-na.... \n", "3 27632| 8.3|1928|6840|https://images-na.... \n", "4 228498| 8.4|1959|8160|https://images-na.... " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas\n", "movies = pandas.read_table('../../downloads/250.imdb')\n", "movies.head() # use .head() to print only the first part of the table" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Run the commands above and take a look at the result. Try to figure out what went wrong!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<br>\n", "<br><br>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First of all, the lines are not split at the `|`, like they should be. To fix it, use the keyword argument `sep`:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "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># Votes</th>\n", " <th>Rating</th>\n", " <th>Year</th>\n", " <th>Runtime</th>\n", " <th>URL</th>\n", " <th>Genres</th>\n", " <th>Title</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>126807</td>\n", " <td>8.5</td>\n", " <td>1957</td>\n", " <td>5280</td>\n", " <td>https://images-na.ssl-images-amazon.com/images...</td>\n", " <td>Drama,War</td>\n", " <td>Paths of Glory</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>71379</td>\n", " <td>8.2</td>\n", " <td>1925</td>\n", " <td>4320</td>\n", " <td>https://images-na.ssl-images-amazon.com/images...</td>\n", " <td>Adventure,Comedy,Drama,Family</td>\n", " <td>The Gold Rush</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>700599</td>\n", " <td>8.3</td>\n", " <td>2009</td>\n", " <td>5760</td>\n", " <td>https://images-na.ssl-images-amazon.com/images...</td>\n", " <td>Animation,Adventure,Comedy,Family</td>\n", " <td>Up</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>27632</td>\n", " <td>8.3</td>\n", " <td>1928</td>\n", " <td>6840</td>\n", " <td>https://images-na.ssl-images-amazon.com/images...</td>\n", " <td>Biography,Drama,History</td>\n", " <td>The Passion of Joan of Arc</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>228498</td>\n", " <td>8.4</td>\n", " <td>1959</td>\n", " <td>8160</td>\n", " <td>https://images-na.ssl-images-amazon.com/images...</td>\n", " <td>Action,Adventure,Crime,Mystery,Thriller</td>\n", " <td>North by Northwest</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " # Votes Rating Year Runtime \\\n", "0 126807 8.5 1957 5280 \n", "1 71379 8.2 1925 4320 \n", "2 700599 8.3 2009 5760 \n", "3 27632 8.3 1928 6840 \n", "4 228498 8.4 1959 8160 \n", "\n", " URL \\\n", "0 https://images-na.ssl-images-amazon.com/images... \n", "1 https://images-na.ssl-images-amazon.com/images... \n", "2 https://images-na.ssl-images-amazon.com/images... \n", "3 https://images-na.ssl-images-amazon.com/images... \n", "4 https://images-na.ssl-images-amazon.com/images... \n", "\n", " Genres Title \n", "0 Drama,War Paths of Glory \n", "1 Adventure,Comedy,Drama,Family The Gold Rush \n", "2 Animation,Adventure,Comedy,Family Up \n", "3 Biography,Drama,History The Passion of Joan of Arc \n", "4 Action,Adventure,Crime,Mystery,Thriller North by Northwest " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "movies = pandas.read_table('../../downloads/250.imdb', sep='|')\n", "movies.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<br>\n", "<br><br>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Much better!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now it looks like we're getting somewhere!\n", "But the column names do not look quite right. Take a look yourself." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['# Votes ', ' Rating ', ' Year ', ' Runtime ', ' URL ', ' Genres ',\n", " ' Title'],\n", " dtype='object')" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "movies.columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<br>\n", "<br><br>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are too many whitespaces! Having whitespaces in the column names will make it much harder for you to work with the data, since it's very easy to miss them or to forget about them. That might give you annoying errors, like:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "ename": "AttributeError", "evalue": "'DataFrame' object has no attribute 'Rating'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/var/folders/_z/_lsc_j_s3t15pr9j4cbjv7ch0000gn/T/ipykernel_16787/2139141513.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmovies\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mRating\u001b[0m \u001b[0;31m# no whitespaces\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m~/anaconda3/envs/python-workshop/lib/python3.9/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 5483\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_accessors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5484\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_can_hold_identifiers_and_holds_name\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5485\u001b[0m ):\n\u001b[1;32m 5486\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 5487\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mAttributeError\u001b[0m: 'DataFrame' object has no attribute 'Rating'" ] } ], "source": [ "movies.Rating # no whitespaces" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "movies[' Rating'] # forgetting the last whitespace" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandas did not manage to get this right for us, so here's one way of fixing this issue:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "movies.columns = movies.columns.str.strip(' #') # Remove '#' and whitespaces\n", "# ... and try it:\n", "movies.columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<br>\n", "<br><br>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the complete code for parsing the data. Pretty neat, isn't it?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandas\n", "movies = pandas.read_table('../../downloads/250.imdb', sep='|')\n", "movies.columns = movies.columns.str.strip(' #')\n", "\n", "\n", "movies.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now to the fun part!\n", "First, a note on plotting. If your plots don't show up, try the following:\n", "\n", "- if using a notebook, run: " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```py\n", "%pylab inline \n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- if using the Python interpreter, use this:\n", "\n", "```py\n", "import matplotlib.pyplot as plt\n", "\n", "# ... code to generate the plots ...\n", "\n", "plt.show()\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1. Are movies getting better or worse?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To solve this, we will use a scatter plot. Remember that our dataframe is called `movies`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To create the plot, we use the `plot` method and set `kind` to `scatter`:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```py\n", "movies.plot(x=..., y=..., kind='scatter',fontsize=14, figsize=(12,10))\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What to put on the x and y axis? Take a moment and see if you can figure it out." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<br>\n", "<br><br>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We want the x axis to represent the time, so we set `x` to `'Year'`.\n", "\n", "The y axis should represent how good a movie is, so let's use the rating:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "movies.plot(x='Year', y='Rating', kind='scatter',fontsize=14, figsize=(12,10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You've got a graph! Have a look at it and decide for yourself whether movies seem to be getting better or not." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<br>\n", "<br><br>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2. What rating do most movies have? How many good movies are there?\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we're interested in the rating, and specifically the frequency of each rating. Let's use a histogram for this. A histogram looks like this:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<img src=\"../../img/histplot.png\" width=60%>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The frequency for each of the values (of the x axis) are shown on the y axis. This histogram tells us that values around 1 are more frequent than the values 4 or -2." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Making a histogram is not more difficult than changing the `kind` to `hist`. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```py\n", "movies.plot(kind='hist', y=...)\n", "```\n", "\n", "Notice that we're skipping the x axis here. Histograms usually show the frequency on one axis, and pandas wants you to set the `y`.\n", "\n", "Try to plot a histogram of the rating of the movies." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<br>\n", "<br><br>" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "movies.plot(kind='hist', y='Rating')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Actually, there are more ways of getting a histogram in pandas. Take a look at `.hist()`:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "movies.hist()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "<br>\n", "<br><br>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You did it! That's all! Feel free to play around with your graphs and data. If you want to plot more, some ideas are given below. If you have had enough, take a break or prepare for the course project." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3. Want more?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Find out if people vote more for good movies or not. How does the number of votes correlate with the rating?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Which years were most movies produced?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are plenty of other tutorials online, here are a few:\n", " \n", "\n", "- https://www.youtube.com/playlist?list=PLQVvvaa0QuDc-3szzjeP6N6b0aDrrKyL- A nice youtube tutorial series\n", "\n", "- https://swcarpentry.github.io/python-intermediate-mosquitoes/01-intro-python.html\n", "\n", "- https://www.tutorialspoint.com/python_pandas/index.htm\n", "\n", "- https://www.tutorialspoint.com/python_pandas/python_pandas_visualization.htm (The visualization section of the tutorial above)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solution ex 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the file Orange_1.tsv:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "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>age</th>\n", " <th>circumference</th>\n", " <th>height</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>1</td>\n", " <td>2</td>\n", " <td>30</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>2</td>\n", " <td>3</td>\n", " <td>35</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>3</td>\n", " <td>5</td>\n", " <td>40</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>4</td>\n", " <td>10</td>\n", " <td>50</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " age circumference height\n", "0 1 2 30\n", "1 2 3 35\n", "2 3 5 40\n", "3 4 10 50" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "df = pd.read_table('../../downloads/Orange_1.tsv') \n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Print the height column:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 30\n", "1 35\n", "2 40\n", "3 50\n", "Name: height, dtype: int64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.height" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Print the data for the tree at age 2:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "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>age</th>\n", " <th>circumference</th>\n", " <th>height</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>1</th>\n", " <td>2</td>\n", " <td>3</td>\n", " <td>35</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " age circumference height\n", "1 2 3 35" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df.age == 2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Find the maximum circumference:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "10" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "max_c = df.circumference.max()\n", "max_c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How old was the tree at that time?" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "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>age</th>\n", " <th>circumference</th>\n", " <th>height</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>3</th>\n", " <td>4</td>\n", " <td>10</td>\n", " <td>50</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " age circumference height\n", "3 4 10 50" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df.circumference == max_c] # print the whole row" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3 4\n", "Name: age, dtype: int64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df.circumference == max_c].age # ... or just print the age (and the index of the row)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "4" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# To get just the age, without the index, you can use int()\n", "int(df[df.circumference == max_c].age)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the circumference in relation to the height:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<AxesSubplot:xlabel='circumference'>" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df.plot(x='circumference', y='height')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.4" } }, "nbformat": 4, "nbformat_minor": 2 }