Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
MDST Tutorials
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
jackmic
MDST Tutorials
Commits
bec55d3e
Commit
bec55d3e
authored
2 years ago
by
jackmic
Browse files
Options
Downloads
Patches
Plain Diff
Upload New File
parent
81ebc872
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
checkpoint0.ipynb
+549
-0
549 additions, 0 deletions
checkpoint0.ipynb
with
549 additions
and
0 deletions
checkpoint0.ipynb
0 → 100644
+
549
−
0
View file @
bec55d3e
{
"cells": [
{
"cell_type": "markdown",
"id": "44bff40d",
"metadata": {
"colab_type": "text",
"id": "0a8IYAJUshu1"
},
"source": [
"# Checkpoint 0 "
]
},
{
"cell_type": "markdown",
"id": "02215935",
"metadata": {},
"source": [
"These exercises are a mix of Python and Pandas practice. Most should be no more than a few lines of code! "
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "a0f62714",
"metadata": {
"colab": {},
"colab_type": "code",
"id": "Jo6wuTgkshu1"
},
"outputs": [],
"source": [
"# here is a Python list:\n",
"\n",
"a = [1, 2, 3, 4, 5, 6]\n"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "779d96b1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[4, 5, 6]\n"
]
}
],
"source": [
"# get a list containing the last 3 elements of a\n",
"# Yes, you can just type out [4, 5, 6] but we really want to see you demonstrate you know how to do that in Python\n",
"b = a[-3::]\n",
"print(b)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "b6a54def",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]\n"
]
}
],
"source": [
"# create a list of numbers from 1 to 100\n",
"c = list(range(1, 101))\n",
"print(c)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "487873ac",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]\n"
]
}
],
"source": [
"# now get a list with only the even numbers between 1 and 100\n",
"# you may or may not make use of the list you made in the last cell\n",
"d = list(range(2, 101, 2))\n",
"print(d)"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "3d4bb5dd",
"metadata": {},
"outputs": [],
"source": [
"# write a function that takes two numbers as arguments\n",
"# and returns the first number divided by the second\n",
"def divide(num1, num2):\n",
" return num1 / num2"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "b93669fa",
"metadata": {},
"outputs": [],
"source": [
"# write a function that takes a string as input\n",
"# and return that string in all caps\n",
"def capitalize(string):\n",
" return string.upper()"
]
},
{
"cell_type": "code",
"execution_count": 63,
"id": "f55df04e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n",
"2\n",
"fizz\n",
"4\n",
"buzz\n",
"fizz\n",
"7\n",
"8\n",
"fizz\n",
"buzz\n",
"11\n",
"fizz\n",
"13\n",
"14\n",
"fizzbuzz\n",
"16\n",
"17\n",
"fizz\n",
"19\n",
"buzz\n",
"fizz\n",
"22\n",
"23\n",
"fizz\n",
"buzz\n",
"26\n",
"fizz\n",
"28\n",
"29\n",
"fizzbuzz\n",
"31\n",
"32\n",
"fizz\n",
"34\n",
"buzz\n",
"fizz\n",
"37\n",
"38\n",
"fizz\n",
"buzz\n",
"41\n",
"fizz\n",
"43\n",
"44\n",
"fizzbuzz\n",
"46\n",
"47\n",
"fizz\n",
"49\n",
"buzz\n",
"fizz\n",
"52\n",
"53\n",
"fizz\n",
"buzz\n",
"56\n",
"fizz\n",
"58\n",
"59\n",
"fizzbuzz\n",
"61\n",
"62\n",
"fizz\n",
"64\n",
"buzz\n",
"fizz\n",
"67\n",
"68\n",
"fizz\n",
"buzz\n",
"71\n",
"fizz\n",
"73\n",
"74\n",
"fizzbuzz\n",
"76\n",
"77\n",
"fizz\n",
"79\n",
"buzz\n",
"fizz\n",
"82\n",
"83\n",
"fizz\n",
"buzz\n",
"86\n",
"fizz\n",
"88\n",
"89\n",
"fizzbuzz\n",
"91\n",
"92\n",
"fizz\n",
"94\n",
"buzz\n",
"fizz\n",
"97\n",
"98\n",
"fizz\n",
"buzz\n"
]
}
],
"source": [
"# optional challenge - fizzbuzz\n",
"# you will need to use both iteration and control flow \n",
"# go through all numbers from 1 to 100 in order\n",
"# if the number is a multiple of 3, print fizz\n",
"# if the number is a multiple of 5, print buzz\n",
"# if the number is a multiple of 3 and 5, print fizzbuzz and NOTHING ELSE\n",
"# if the number is neither a multiple of 3 nor a multiple of 5, print the number\n",
"\n",
"for num in list(range(1, 101)):\n",
" if((num % 3 == 0) & (num % 5 == 0)):\n",
" print(\"fizzbuzz\")\n",
" elif(num % 3 == 0):\n",
" print(\"fizz\")\n",
" elif(num % 5 == 0):\n",
" print(\"buzz\")\n",
" else:\n",
" print(num)\n"
]
},
{
"cell_type": "code",
"execution_count": 66,
"id": "78aace0b",
"metadata": {},
"outputs": [],
"source": [
"# create a dictionary that reflects the following menu pricing (taken from Ahmo's)\n",
"# Gyro: $9 \n",
"# Burger: $9\n",
"# Greek Salad: $8\n",
"# Philly Steak: $10\n",
"\n",
"menu = {\"Gyro\":9, \"Burger\":9, \"Greek Salad\":8, \"Philly Steak\":10}"
]
},
{
"cell_type": "code",
"execution_count": 71,
"id": "a2a78a4b",
"metadata": {
"colab": {},
"colab_type": "code",
"id": "WzCQ5HOJshvA"
},
"outputs": [],
"source": [
"# load in the \"starbucks.csv\" dataset\n",
"# refer to how we read the cereal.csv dataset in the tutorial\n",
"import pandas\n",
"df = pandas.read_csv(\"starbucks.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 88,
"id": "68210b5f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" calories sugars protein\n",
"0 3 0 0.3\n",
"40 5 0 0.4\n",
"80 350 58 15.0\n",
"120 140 20 6.0\n",
"160 110 24 2.0\n",
"200 200 41 3.0\n",
"240 180 35 3.0\n"
]
}
],
"source": [
"# output the calories, sugars, and protein columns only of every 40th row. \n",
"print(df.iloc[0::40][[\"calories\", \"sugars\", \"protein\"]])"
]
},
{
"cell_type": "code",
"execution_count": 92,
"id": "ac0f0c12",
"metadata": {},
"outputs": [],
"source": [
"# select all rows with more than and including 400 calories\n",
"hi_cal_rows = df[df[\"calories\"] >= 400]"
]
},
{
"cell_type": "code",
"execution_count": 96,
"id": "ee8f8241",
"metadata": {},
"outputs": [],
"source": [
"# select all rows whose vitamin c content is higher than the iron content\n",
"vitc_greaterthan_iron_rows = df[df[\"vitamin c\"] > df[\"iron\"]]"
]
},
{
"cell_type": "code",
"execution_count": 101,
"id": "d4de48bb",
"metadata": {},
"outputs": [],
"source": [
"# create a new column containing the caffeine per calories of each drink\n",
"df[\"caffeine per calories\"] = df[\"caffeine\"] / df[\"calories\"]"
]
},
{
"cell_type": "code",
"execution_count": 102,
"id": "3a72465a",
"metadata": {
"colab": {},
"colab_type": "code",
"id": "rIoxaSxHshvB"
},
"outputs": [
{
"data": {
"text/plain": [
"193.87190082644628"
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# what is the average calorie across all items?\n",
"df[\"calories\"].mean()"
]
},
{
"cell_type": "code",
"execution_count": 103,
"id": "7714895a",
"metadata": {
"colab": {},
"colab_type": "code",
"id": "ABX7i49FshvD"
},
"outputs": [
{
"data": {
"text/plain": [
"9"
]
},
"execution_count": 103,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# how many different categories of beverages are there?\n",
"df[\"beverage_category\"].nunique()"
]
},
{
"cell_type": "code",
"execution_count": 107,
"id": "62392999",
"metadata": {
"colab": {},
"colab_type": "code",
"id": "P9QatZAzshvE"
},
"outputs": [
{
"data": {
"text/plain": [
"beverage_category\n",
"classic espresso drinks 140.172414\n",
"coffee 4.250000\n",
"frappuccino blended coffee 276.944444\n",
"frappuccino blended crme 233.076923\n",
"frappuccino light blended coffee 162.500000\n",
"shaken iced beverages 114.444444\n",
"signature espresso drinks 250.000000\n",
"smoothies 282.222222\n",
"tazo tea drinks 177.307692\n",
"Name: calories, dtype: float64"
]
},
"execution_count": 107,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# what is the average # calories for each beverage category?\n",
"bev_categories = df.groupby(\"beverage_category\")\n",
"bev_categories[\"calories\"].mean()"
]
},
{
"cell_type": "code",
"execution_count": 109,
"id": "435e9d80",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot: title={'center': 'Distribution of Calories'}, ylabel='Frequency'>"
]
},
"execution_count": 109,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAGzCAYAAAA1yP25AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAzfUlEQVR4nO3deXxU1f3/8fdAkkkgGyQkIZKEVJBFBGuskIqFQjSyqBX8FihUiKm2NSibtmJbcamN1rKpLH5bm7gWDT/cUBAaFjewJIIrREAgwZDEsCQESAjJ+f3Bj/l1SAjJMOTOxdfz8biPB/fcM/d+5hDM2zvn3HEYY4wAAABsqI3VBQAAAHiKIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIANY6MEHH5TD4WiVaw0ePFiDBw927a9bt04Oh0NLly5tletPmjRJXbt2bZVreaqqqkq/+tWvFBMTI4fDoalTp7bq9U/9naxbt86r57XD2AOeIsgAXpKdnS2Hw+HaAgMDFRsbq9TUVD355JM6fPiwV65TXFysBx98UFu2bPHK+bzJl2trjr/85S/Kzs7Wb3/7W73wwgv65S9/2WT/uro6ZWVlafDgwerYsaOcTqe6du2qtLQ05eXltVLVwPebn9UFABeahx9+WImJiaqtrVVJSYnWrVunqVOnas6cOXrzzTfVt29fV98//vGPuu+++1p0/uLiYj300EPq2rWrLr/88ma/btWqVS26jieaqu3vf/+76uvrz3sN52LNmjUaMGCAZs2adda+x44d06hRo7Ry5Ur95Cc/0f3336+OHTtq9+7devXVV/Xcc8+psLBQXbp0aYXKm2aHsQc8RZABvGzYsGG68sorXfszZ87UmjVrNHLkSN14443aunWrgoKCJEl+fn7y8zu//wyPHj2qdu3aKSAg4Lxe52z8/f0tvX5zlJWVqXfv3s3qe++992rlypWaO3dug4+gZs2apblz556HClvmyJEjat++vS3GHvAUHy0BrWDIkCH605/+pD179ujFF190tTc2R2b16tUaOHCgwsPDFRwcrB49euj++++XdHIOxY9+9CNJUlpamutjrOzsbEkn58H06dNH+fn5+slPfqJ27dq5Xnv6HJlT6urqdP/99ysmJkbt27fXjTfeqKKiIrc+Xbt21aRJkxq89r/PebbaGpunceTIEc2YMUNxcXFyOp3q0aOH/va3v8kY49bP4XBo8uTJev3119WnTx85nU5deumlWrlyZeMDfpqysjKlp6crOjpagYGB6tevn5577jnX8VNzU3bt2qW3337bVfvu3bsbPd/evXv1zDPP6Nprr210Hk3btm11zz33uO7G7NmzR3feead69OihoKAgRURE6H/+53/OeP7T5eTkKCkpSUFBQYqMjNSECRP07bffuvWZNGmSgoODtXPnTg0fPlwhISEaP36869jpY19fX6958+bp0ksvVWBgoKKjo/XrX/9aBw8edOuXl5en1NRURUZGKigoSImJibrtttuaVTfQGrgjA7SSX/7yl7r//vu1atUq3X777Y32+fLLLzVy5Ej17dtXDz/8sJxOp3bs2KEPP/xQktSrVy89/PDDeuCBB3THHXfommuukST9+Mc/dp1j//79GjZsmMaOHasJEyYoOjq6yboeffRRORwO/f73v1dZWZnmzZunlJQUbdmyxXXnqDmaU9t/M8boxhtv1Nq1a5Wenq7LL79c7777ru699159++23De5ofPDBB1q2bJnuvPNOhYSE6Mknn9To0aNVWFioiIiIM9Z17NgxDR48WDt27NDkyZOVmJionJwcTZo0SYcOHdKUKVPUq1cvvfDCC5o2bZq6dOmiGTNmSJI6derU6DlXrFihEydOnHUOzSmbNm3SRx99pLFjx6pLly7avXu3Fi1apMGDB+urr75Su3btzvja7OxspaWl6Uc/+pEyMzNVWlqq+fPn68MPP9TmzZsVHh7u6nvixAmlpqZq4MCB+tvf/tbkeX/961+7zn333Xdr165devrpp7V582Z9+OGH8vf3V1lZma677jp16tRJ9913n8LDw7V7924tW7asWe8baBUGgFdkZWUZSWbTpk1n7BMWFmZ++MMfuvZnzZpl/vuf4dy5c40k8913353xHJs2bTKSTFZWVoNjgwYNMpLM4sWLGz02aNAg1/7atWuNJHPRRReZyspKV/urr75qJJn58+e72hISEszEiRPPes6maps4caJJSEhw7b/++utGkvnzn//s1u+WW24xDofD7Nixw9UmyQQEBLi1ffrpp0aSeeqppxpc67/NmzfPSDIvvviiq+348eMmOTnZBAcHu733hIQEM2LEiCbPZ4wx06ZNM5LM5s2bz9rXGGOOHj3aoG3Dhg1Gknn++eddbaf+TtauXeuqMyoqyvTp08ccO3bM1W/58uVGknnggQdcbRMnTjSSzH333dfgWqeP/fvvv28kmZdeesmt38qVK93aX3vttbP+TANW46MloBUFBwc3uXrp1P9dv/HGGx5PznQ6nUpLS2t2/1tvvVUhISGu/VtuuUWdO3fWO++849H1m+udd95R27Ztdffdd7u1z5gxQ8YYrVixwq09JSVFF198sWu/b9++Cg0N1TfffHPW68TExGjcuHGuNn9/f919992qqqrS+vXrW1x7ZWWlJLmNW1P++85WbW2t9u/fr27duik8PFyffPLJGV+Xl5ensrIy3XnnnQoMDHS1jxgxQj179tTbb7/d4DW//e1vz1pPTk6OwsLCdO2116q8vNy1JSUlKTg4WGvXrpX0/38ely9frtra2ma9V6C1EWSAVlRVVdXkL78xY8bo6quv1q9+9StFR0dr7NixevXVV1sUai666KIWTezt3r27277D4VC3bt2aPX/DU3v27FFsbGyD8ejVq5fr+H+Lj49vcI4OHTo0mNPR2HW6d++uNm3c/3N3pus0R2hoqCQ1e0n9sWPH9MADD7jmAkVGRqpTp046dOiQKioqmqxdknr06NHgWM+ePRvU7ufn16xVUtu3b1dFRYWioqLUqVMnt62qqkplZWWSpEGDBmn06NF66KGHFBkZqZtuuklZWVmqqalp1vsGWgNzZIBWsnfvXlVUVKhbt25n7BMUFKT33ntPa9eu1dtvv62VK1fqlVde0ZAhQ7Rq1Sq1bdv2rNdpybyW5jrTQ/vq6uqaVZM3nOk65rSJwa2hZ8+ekqTPP/+8WUvg77rrLmVlZWnq1KlKTk5WWFiYHA6Hxo4d69Vl0U6ns0Fga0x9fb2ioqL00ksvNXr81NygUw9M3Lhxo9566y29++67uu222zR79mxt3LhRwcHBXqsd8BR3ZIBW8sILL0iSUlNTm+zXpk0bDR06VHPmzNFXX32lRx99VGvWrHHd7vf2k4C3b9/utm+M0Y4dO9xWuXTo0EGHDh1q8NrT7wi0pLaEhAQVFxc3uKuxbds213FvSEhI0Pbt2xsEhnO5zrBhw9S2bVu3FWhNWbp0qSZOnKjZs2frlltu0bXXXquBAwc2Oqan1y5JBQUFDY4VFBR4PEYXX3yx9u/fr6uvvlopKSkNtn79+rn1HzBggB599FHl5eXppZde0pdffqklS5Z4dG3A2wgyQCtYs2aNHnnkESUmJrqWxDbmwIEDDdpO/R//qdv57du3l6Sz/hJsrueff94tTCxdulT79u3TsGHDXG0XX3yxNm7cqOPHj7vali9f3mCZdktqGz58uOrq6vT000+7tc+dO1cOh8Pt+udi+PDhKikp0SuvvOJqO3HihJ566ikFBwdr0KBBLT5nXFycbr/9dq1atUpPPfVUg+P19fWaPXu29u7dK+nk3aTT7xw99dRTqqura/I6V155paKiorR48WK3j3NWrFihrVu3asSIES2uXZJ+/vOfq66uTo888kiDYydOnHD9/R08eLBB3af/PAJW46MlwMtWrFihbdu26cSJEyotLdWaNWu0evVqJSQk6M0333SbtHm6hx9+WO+9955GjBihhIQElZWVaeHCherSpYsGDhwo6WSoCA8P1+LFixUSEqL27durf//+SkxM9Kjejh07auDAgUpLS1NpaanmzZunbt26uS0R/9WvfqWlS5fq+uuv189//nPt3LlTL774otvk25bWdsMNN+inP/2p/vCHP2j37t3q16+fVq1apTfeeENTp05tcG5P3XHHHXrmmWc0adIk5efnq2vXrlq6dKk+/PBDzZs3r9kTdk83e/Zs7dy5U3fffbeWLVumkSNHqkOHDiosLFROTo62bdumsWPHSpJGjhypF154QWFhYerdu7c2bNigf//7300uG5dOTkp+/PHHlZaWpkGDBmncuHGu5dddu3bVtGnTPKp90KBB+vWvf63MzExt2bJF1113nfz9/bV9+3bl5ORo/vz5uuWWW/Tcc89p4cKFuvnmm3XxxRfr8OHD+vvf/67Q0FANHz7co2sDXmfpmingAnJq+fWpLSAgwMTExJhrr73WzJ8/322Z7ymnL7/Ozc01N910k4mNjTUBAQEmNjbWjBs3znz99ddur3vjjTdM7969jZ+fn9ty50GDBplLL7200frOtPz6X//6l5k5c6aJiooyQUFBZsSIEWbPnj0NXj979mxz0UUXGafTaa6++mqTl5fX4JxN1Xb6EmBjjDl8+LCZNm2aiY2NNf7+/qZ79+7miSeeMPX19W79JJmMjIwGNZ1pWfjpSktLTVpamomMjDQBAQHmsssua3SJeHOXX59y4sQJ849//MNcc801JiwszPj7+5uEhASTlpbmtjT74MGDrusHBweb1NRUs23btgb1n778+pRXXnnF/PCHPzROp9N07NjRjB8/3uzdu9etz8SJE0379u0brbOxsTfGmP/93/81SUlJJigoyISEhJjLLrvM/O53vzPFxcXGGGM++eQTM27cOBMfH2+cTqeJiooyI0eONHl5ec0eI+B8cxhjwUw5AAAAL2CODAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsK0L/oF49fX1Ki4uVkhIiNcf7Q4AAM4PY4wOHz6s2NjYJr9D7IIPMsXFxYqLi7O6DAAA4IGioqImv9X9gg8ypx4/XlRUpNDQUIurAQAAzVFZWam4uLizfo3IBR9kTn2cFBoaSpABAMBmzjYthMm+AADAtggyAADAtggyAADAtiwNMg8++KAcDofb1rNnT9fx6upqZWRkKCIiQsHBwRo9erRKS0strBgAAPgSy+/IXHrppdq3b59r++CDD1zHpk2bprfeeks5OTlav369iouLNWrUKAurBQAAvsTyVUt+fn6KiYlp0F5RUaFnn31WL7/8soYMGSJJysrKUq9evbRx40YNGDCgtUsFAAA+xvI7Mtu3b1dsbKx+8IMfaPz48SosLJQk5efnq7a2VikpKa6+PXv2VHx8vDZs2HDG89XU1KiystJtAwAAFyZLg0z//v2VnZ2tlStXatGiRdq1a5euueYaHT58WCUlJQoICFB4eLjba6Kjo1VSUnLGc2ZmZiosLMy18VRfAAAuXJZ+tDRs2DDXn/v27av+/fsrISFBr776qoKCgjw658yZMzV9+nTX/qknAwIAgAuP5R8t/bfw8HBdcskl2rFjh2JiYnT8+HEdOnTIrU9paWmjc2pOcTqdrqf48jRfAAAubD4VZKqqqrRz50517txZSUlJ8vf3V25urut4QUGBCgsLlZycbGGVAADAV1j60dI999yjG264QQkJCSouLtasWbPUtm1bjRs3TmFhYUpPT9f06dPVsWNHhYaG6q677lJycjIrlgAAgCSLg8zevXs1btw47d+/X506ddLAgQO1ceNGderUSZI0d+5ctWnTRqNHj1ZNTY1SU1O1cOFCK0sGAAA+xGGMMVYXcT5VVlYqLCxMFRUVzJdBqyosLFR5ebnVZbRIZGSk4uPjrS4DAJr9+9vyB+IBF6LCwkL16NlL1ceOWl1KiwQGtVPBtq2EGQC2QZABzoPy8nJVHzuqiJEz5B9hj+X/tfuLtH/5bJWXlxNkANgGQQY4j/wj4uSM6WZ1GQBwwfKp5dcAAAAtQZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC2RZABAAC25Wd1AUBzFBYWqry83Ooymm3r1q1WlwAA3wsEGfi8wsJC9ejZS9XHjlpdCgDAxxBk4PPKy8tVfeyoIkbOkH9EnNXlNMuxb/JU8f6LVpcBABc8ggxswz8iTs6YblaX0Sy1+4usLgEAvheY7AsAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGyLIAMAAGzLZ4LMY489JofDoalTp7raqqurlZGRoYiICAUHB2v06NEqLS21rkgAAOBTfCLIbNq0Sc8884z69u3r1j5t2jS99dZbysnJ0fr161VcXKxRo0ZZVCUAAPA1lgeZqqoqjR8/Xn//+9/VoUMHV3tFRYWeffZZzZkzR0OGDFFSUpKysrL00UcfaePGjRZWDAAAfIXlQSYjI0MjRoxQSkqKW3t+fr5qa2vd2nv27Kn4+Hht2LDhjOerqalRZWWl2wYAAC5MflZefMmSJfrkk0+0adOmBsdKSkoUEBCg8PBwt/bo6GiVlJSc8ZyZmZl66KGHvF0qAADwQZbdkSkqKtKUKVP00ksvKTAw0GvnnTlzpioqKlxbUVGR184NAAB8i2VBJj8/X2VlZbriiivk5+cnPz8/rV+/Xk8++aT8/PwUHR2t48eP69ChQ26vKy0tVUxMzBnP63Q6FRoa6rYBAIALk2UfLQ0dOlSff/65W1taWpp69uyp3//+94qLi5O/v79yc3M1evRoSVJBQYEKCwuVnJxsRckAAMDHWBZkQkJC1KdPH7e29u3bKyIiwtWenp6u6dOnq2PHjgoNDdVdd92l5ORkDRgwwIqSAQCAj7F0su/ZzJ07V23atNHo0aNVU1Oj1NRULVy40OqyAACAj/CpILNu3Tq3/cDAQC1YsEALFiywpiAAAODTLH+ODAAAgKcIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLYIMgAAwLb8rC4AgG/ZunWr1SW0SGRkpOLj460uA4BFCDIAJEl1VQclh0MTJkywupQWCQxqp4JtWwkzwPcUQQaAJKm+pkoyRhEjZ8g/Is7qcpqldn+R9i+frfLycoIM8D1FkAHgxj8iTs6YblaXAQDNwmRfAABgWwQZAABgWwQZAABgW8yR+R4qLCxUeXm51WU0m92WAwMAWg9B5numsLBQPXr2UvWxo1aXAgDAOSPIfM+Ul5er+thRWy2xPfZNniref9HqMgAAPogg8z1lpyW2tfuLrC4BAOCjmOwLAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsy9Igs2jRIvXt21ehoaEKDQ1VcnKyVqxY4TpeXV2tjIwMRUREKDg4WKNHj1ZpaamFFQMAAF9iaZDp0qWLHnvsMeXn5ysvL09DhgzRTTfdpC+//FKSNG3aNL311lvKycnR+vXrVVxcrFGjRllZMgAA8CEefUXBN998ox/84AfnfPEbbrjBbf/RRx/VokWLtHHjRnXp0kXPPvusXn75ZQ0ZMkSSlJWVpV69emnjxo0aMGDAOV8fAADYm0dBplu3bho0aJDS09N1yy23KDAw8JwLqaurU05Ojo4cOaLk5GTl5+ertrZWKSkprj49e/ZUfHy8NmzYcMYgU1NTo5qaGtd+ZWXlOdcGwLdt3brV6hJaJDIyUvHx8VaXAVwQPAoyn3zyibKysjR9+nRNnjxZY8aMUXp6uq666qoWn+vzzz9XcnKyqqurFRwcrNdee029e/fWli1bFBAQoPDwcLf+0dHRKikpOeP5MjMz9dBDD7W4DgD2U1d1UHI4NGHCBKtLaZHAoHYq2LaVMAN4gUdB5vLLL9f8+fM1e/Zsvfnmm8rOztbAgQN1ySWX6LbbbtMvf/lLderUqVnn6tGjh7Zs2aKKigotXbpUEydO1Pr16z0pS5I0c+ZMTZ8+3bVfWVmpuLg4j88HwHfV11RJxihi5Az5R9jj33nt/iLtXz5b5eXlBBnACzwKMq4X+/lp1KhRGjFihBYuXKiZM2fqnnvu0f3336+f//znevzxx9W5c+cmzxEQEKBu3bpJkpKSkrRp0ybNnz9fY8aM0fHjx3Xo0CG3uzKlpaWKiYk54/mcTqecTue5vC0ANuMfESdnTDerywBggXNatZSXl6c777xTnTt31pw5c3TPPfdo586dWr16tYqLi3XTTTe1+Jz19fWqqalRUlKS/P39lZub6zpWUFCgwsJCJScnn0vZAADgAuHRHZk5c+YoKytLBQUFGj58uJ5//nkNHz5cbdqczEWJiYnKzs5W165dmzzPzJkzNWzYMMXHx+vw4cN6+eWXtW7dOr377rsKCwtTenq6pk+fro4dOyo0NFR33XWXkpOTWbEEAAAkeRhkFi1apNtuu02TJk0640dHUVFRevbZZ5s8T1lZmW699Vbt27dPYWFh6tu3r959911de+21kqS5c+eqTZs2Gj16tGpqapSamqqFCxd6UjIAALgAeRRktm/fftY+AQEBmjhxYpN9zhZ0AgMDtWDBAi1YsKBF9QEAgO8Hj+bIZGVlKScnp0F7Tk6OnnvuuXMuCgAAoDk8CjKZmZmKjIxs0B4VFaW//OUv51wUAABAc3gUZAoLC5WYmNigPSEhQYWFhedcFAAAQHN4FGSioqL02WefNWj/9NNPFRERcc5FAQAANIdHQWbcuHG6++67tXbtWtXV1amurk5r1qzRlClTNHbsWG/XCAAA0CiPVi098sgj2r17t4YOHSo/v5OnqK+v16233socGQAA0Go8CjIBAQF65ZVX9Mgjj+jTTz9VUFCQLrvsMiUkJHi7PgAAgDM6p+9auuSSS3TJJZd4qxYAAIAW8SjI1NXVKTs7W7m5uSorK1N9fb3b8TVr1nilOAAAgKZ4FGSmTJmi7OxsjRgxQn369JHD4fB2XQAAAGflUZBZsmSJXn31VQ0fPtzb9QAAADSbR8uvAwIC1K1bN2/XAgAA0CIeBZkZM2Zo/vz5MsZ4ux4AAIBm8+ijpQ8++EBr167VihUrdOmll8rf39/t+LJly7xSHAAAQFM8CjLh4eG6+eabvV0LAABAi3gUZLKysrxdBwAAQIt5NEdGkk6cOKF///vfeuaZZ3T48GFJUnFxsaqqqrxWHAAAQFM8uiOzZ88eXX/99SosLFRNTY2uvfZahYSE6PHHH1dNTY0WL17s7ToBAAAa8OiOzJQpU3TllVfq4MGDCgoKcrXffPPNys3N9VpxAAAATfHojsz777+vjz76SAEBAW7tXbt21bfffuuVwgAAAM7Gozsy9fX1qqura9C+d+9ehYSEnHNRAAAAzeFRkLnuuus0b948177D4VBVVZVmzZrF1xYAAIBW49FHS7Nnz1Zqaqp69+6t6upq/eIXv9D27dsVGRmpf/3rX96uEQAAoFEeBZkuXbro008/1ZIlS/TZZ5+pqqpK6enpGj9+vNvkXwAAgPPJoyAjSX5+fpowYYI3awEAAGgRj4LM888/3+TxW2+91aNiAAAAWsKjIDNlyhS3/draWh09elQBAQFq164dQQYAALQKj1YtHTx40G2rqqpSQUGBBg4cyGRfAADQajz+rqXTde/eXY899liDuzUAAADni9eCjHRyAnBxcbE3TwkAAHBGHs2RefPNN932jTHat2+fnn76aV199dVeKQwAAOBsPAoyP/vZz9z2HQ6HOnXqpCFDhmj27NneqAsAAOCsPAoy9fX13q4DAACgxbw6RwYAAKA1eXRHZvr06c3uO2fOHE8uAQAAcFYeBZnNmzdr8+bNqq2tVY8ePSRJX3/9tdq2basrrrjC1c/hcHinSgAAgEZ4FGRuuOEGhYSE6LnnnlOHDh0knXxIXlpamq655hrNmDHDq0UCAAA0xqM5MrNnz1ZmZqYrxEhShw4d9Oc//5lVSwAAoNV4FGQqKyv13XffNWj/7rvvdPjw4XMuCgAAoDk8CjI333yz0tLStGzZMu3du1d79+7V//k//0fp6ekaNWqUt2sEAABolEdzZBYvXqx77rlHv/jFL1RbW3vyRH5+Sk9P1xNPPOHVAgEAAM7EoyDTrl07LVy4UE888YR27twpSbr44ovVvn17rxYHAADQlHN6IN6+ffu0b98+de/eXe3bt5cxxlt1AQAAnJVHQWb//v0aOnSoLrnkEg0fPlz79u2TJKWnp7P0GgAAtBqPgsy0adPk7++vwsJCtWvXztU+ZswYrVy50mvFAQAANMWjOTKrVq3Su+++qy5duri1d+/eXXv27PFKYQAAAGfj0R2ZI0eOuN2JOeXAgQNyOp3nXBQAAEBzeBRkrrnmGj3//POufYfDofr6ev31r3/VT3/6U68VBwAA0BSPPlr661//qqFDhyovL0/Hjx/X7373O3355Zc6cOCAPvzwQ2/XCAAA0CiPgkyfPn309ddf6+mnn1ZISIiqqqo0atQoZWRkqHPnzt6uEQAuOFu3brW6hBaJjIxUfHy81WUADbQ4yNTW1ur666/X4sWL9Yc//OF81AQAF6y6qoOSw6EJEyZYXUqLBAa1U8G2rYQZ+JwWBxl/f3999tln56MWALjg1ddUScYoYuQM+UfEWV1Os9TuL9L+5bNVXl5OkIHP8eijpQkTJujZZ5/VY4895u16AOB7wT8iTs6YblaXAdieR0HmxIkT+uc//6l///vfSkpKavAdS3PmzPFKcQAAAE1pUZD55ptv1LVrV33xxRe64oorJElff/21Wx+Hw+G96gAAAJrQoiDTvXt37du3T2vXrpV08isJnnzySUVHR5+X4gAAAJrSogfinf7t1itWrNCRI0e8WhAAAEBzefRk31NODzYAAACtqUVBxuFwNJgDw5wYAABglRbNkTHGaNKkSa4vhqyurtZvfvObBquWli1b5r0KAQAAzqBFQWbixIlu+3Z7MiUAALiwtCjIZGVlefXimZmZWrZsmbZt26agoCD9+Mc/1uOPP64ePXq4+lRXV2vGjBlasmSJampqlJqaqoULF7JSCgAAnNtk33O1fv16ZWRkaOPGjVq9erVqa2t13XXXua2EmjZtmt566y3l5ORo/fr1Ki4u1qhRoyysGgAA+AqPnuzrLStXrnTbz87OVlRUlPLz8/WTn/xEFRUVevbZZ/Xyyy9ryJAhkk7eFerVq5c2btyoAQMGWFE2AADwEZbekTldRUWFJKljx46SpPz8fNXW1iolJcXVp2fPnoqPj9eGDRsaPUdNTY0qKyvdNgAAcGHymSBTX1+vqVOn6uqrr1afPn0kSSUlJQoICFB4eLhb3+joaJWUlDR6nszMTIWFhbm2uDh7fLssAABoOZ8JMhkZGfriiy+0ZMmSczrPzJkzVVFR4dqKioq8VCEAAPA1ls6ROWXy5Mlavny53nvvPXXp0sXVHhMTo+PHj+vQoUNud2VKS0sVExPT6LmcTqfrOTcAAODCZukdGWOMJk+erNdee01r1qxRYmKi2/GkpCT5+/srNzfX1VZQUKDCwkIlJye3drkAAMDHWHpHJiMjQy+//LLeeOMNhYSEuOa9hIWFKSgoSGFhYUpPT9f06dPVsWNHhYaG6q677lJycjIrlgAAgLVBZtGiRZKkwYMHu7VnZWVp0qRJkqS5c+eqTZs2Gj16tNsD8QAAACwNMs359uzAwEAtWLBACxYsaIWKAACAnfjMqiUAAICWIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADbIsgAAADb8rO6ADsrLCxUeXm51WW0yNatW60uAQAAryHIeKiwsFA9evZS9bGjVpcCAMD3FkHGQ+Xl5ao+dlQRI2fIPyLO6nKa7dg3eap4/0WrywAAwCsIMufIPyJOzphuVpfRbLX7i6wuAQAAr2GyLwAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC2CDAAAsC1Lg8x7772nG264QbGxsXI4HHr99dfdjhtj9MADD6hz584KCgpSSkqKtm/fbk2xAADA51gaZI4cOaJ+/fppwYIFjR7/61//qieffFKLFy/Wxx9/rPbt2ys1NVXV1dWtXCkAAPBFflZefNiwYRo2bFijx4wxmjdvnv74xz/qpptukiQ9//zzio6O1uuvv66xY8c2+rqamhrV1NS49isrK71fOAAA8Ak+O0dm165dKikpUUpKiqstLCxM/fv314YNG874uszMTIWFhbm2uLi41igXAABYwGeDTElJiSQpOjrarT06Otp1rDEzZ85URUWFaysqKjqvdQIAAOtY+tHS+eB0OuV0Oq0uAwAAtAKfvSMTExMjSSotLXVrLy0tdR0DAADfbz4bZBITExUTE6Pc3FxXW2VlpT7++GMlJydbWBkAAPAVln60VFVVpR07drj2d+3apS1btqhjx46Kj4/X1KlT9ec//1ndu3dXYmKi/vSnPyk2NlY/+9nPrCsaAAD4DEuDTF5enn7605+69qdPny5JmjhxorKzs/W73/1OR44c0R133KFDhw5p4MCBWrlypQIDA60qGQAA+BBLg8zgwYNljDnjcYfDoYcfflgPP/xwK1YFAADswmfnyAAAAJwNQQYAANgWQQYAANgWQQYAANgWQQYAANgWQQYAANjWBfddSwCA82Pr1q1Wl9AikZGRio+Pt7oMnGcEGQBAk+qqDkoOhyZMmGB1KS0SGNROBdu2EmYucAQZAECT6muqJGMUMXKG/CPirC6nWWr3F2n/8tkqLy8nyFzgCDIAgGbxj4iTM6ab1WUAbpjsCwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbIsgAwAAbMvP6gIAADhftm7danUJLRIZGan4+Hiry7AVggwA4IJTV3VQcjg0YcIEq0tpkcCgdirYtpUw0wIEGQDABae+pkoyRhEjZ8g/Is7qcpqldn+R9i+frfLycoJMCxBkAAAXLP+IODljulldBs4jJvsCAADbIsgAAADbIsgAAADbYo4MAAA+hCXjLUOQAQDAB7Bk3DMEGQAAfABLxj1DkAEAwIewZLxlmOwLAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsyxZBZsGCBeratasCAwPVv39//ec//7G6JAAA4AN8Psi88sormj59umbNmqVPPvlE/fr1U2pqqsrKyqwu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3FxXW319vXJzc5WcnGxhZfaXmJiomJgYt7GtrKzUxx9/7Brb5ORkHTp0SPn5+a4+a9asUX19vfr379/qNfsaY4wmT56s1157TWvWrFFiYqLb8aSkJPn7+7uNcUFBgQoLC93G+PPPP3cLjKtXr1ZoaKh69+7dOm/EZurr61VTU8P4esHQoUP1+eefa8uWLa7tyiuv1Pjx411/Zoy9p6qqSjt37lTnzp3t+/NryRRjm1uyZIlxOp0mOzvbfPXVV+aOO+4w4eHhbrO40bjDhw+bzZs3m82bNxtJZs6cOWbz5s1mz549xpiTy6/Dw8PNG2+8YT777DNz0003Nbr8+oc//KH5+OOPzQcffGC6d+/O8uv/57e//a0JCwsz69atc1teefToUVef3/zmNyY+Pt6sWbPG5OXlmeTkZJOcnOw6fmp55XXXXWe2bNliVq5caTp16sTS1f/nvvvuM+vXrze7du0yn332mbnvvvuMw+Ewq1atMsYwvufDf69aMoYxPhczZsww69atM7t27TIffvihSUlJMZGRkaasrMwYY8+xJch46KmnnjLx8fEmICDAXHXVVWbjxo1Wl2QLa9euNZIabBMnTjTGnFyC/ac//clER0cbp9Nphg4dagoKCtzOsX//fjNu3DgTHBxsQkNDTVpamjl8+LAF78b3NDa2kkxWVparz7Fjx8ydd95pOnToYNq1a2duvvlms2/fPrfz7N692wwbNswEBQWZyMhIM2PGDFNbW9vK78Y33XbbbSYhIcEEBASYTp06maFDh7pCjDGM7/lwepBhjD03ZswY07lzZxMQEGAuuugiM2bMGLNjxw7XcTuOrcMYY6y5FwQAAHBumCMDAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABsiyADAABs6/8CqXhjNiqiTEIAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# plot the distribution of the number of calories in drinks with a histogram\n",
"df[\"calories\"].plot.hist(edgecolor=\"black\", title = \"Distribution of Calories\")"
]
},
{
"cell_type": "code",
"execution_count": 112,
"id": "ba8948eb",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<AxesSubplot: title={'center': 'Calories vs Total Fat'}, xlabel='calories', ylabel='total fat'>"
]
},
"execution_count": 112,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy89olMNAAAACXBIWXMAAA9hAAAPYQGoP6dpAABOg0lEQVR4nO3de1hVVf4/8PeROyiHu4qCgJBmGWKGX6VQ08kx02wmM35NmWM1jZhZZml9vc23ostUKpldprRmyktNGt2mTMkLklcozUSQq5lyk7siwvr94XDqCJyzD+6zz9qH9+t5zvPI3vus9VlrHzwf9l57LYMQQoCIiIhIh7o5OgAiIiKizmIiQ0RERLrFRIaIiIh0i4kMERER6RYTGSIiItItJjJERESkW0xkiIiISLeYyBAREZFuMZEhIiIi3WIiQ+SERo8ejdGjR6taZmFhIQwGA9auXatquQR8++23MBgM+Pbbbx0dCpHuMJEhksDx48fxl7/8BVFRUfD09ISvry8SEhKwYsUKnD171tHhOSWDwaDopSS5ePbZZ7F582a7x7x27doO41ywYIHico4cOYKlS5eisLDQfsESacTV0QEQdXWff/45pk6dCg8PD9xzzz24+uqrcf78eezatQvz58/Hjz/+iDfffNPRYaJfv344e/Ys3NzcHB2KKv75z3+a/fzee+9hy5YtbbZfeeWVVst69tlncfvtt2PKlClqhtihv/3tb4iMjDTbdvXVVyt+/5EjR7Bs2TKMHj0aERERKkdHpC0mMkQOVFBQgDvvvBP9+vXDtm3b0Lt3b9O+5ORk5OXl4fPPP3dghMCFCxfQ0tICd3d3eHp6OjQWNf3pT38y+/m7777Dli1b2myX0YQJEzBs2DBHh0EkBd5aInKgF154AXV1dXj77bfNkphW0dHRePjhh00/r1mzBjfeeCNCQkLg4eGBQYMGYfXq1YrqKi0txcyZM9GzZ094enoiNjYW7777rtkxreNg/v73v2P58uXo378/PDw8cOTIkQ7HyBw9ehS33347AgIC4OnpiWHDhiEtLc3smKamJixbtgwxMTHw9PREYGAgrr/+emzZsqXDePfv3w+DwdAmRgD46quvYDAY8NlnnwEAamtrMXfuXERERMDDwwMhISH43e9+h4MHDyrqm47U19dj3rx5CAsLg4eHBwYMGIC///3vEEKYjjEYDKivr8e7775rus1z7733AgCKioowa9YsDBgwAF5eXggMDMTUqVPtdktHSX1r167F1KlTAQBjxoyx6RYakYx4RYbIgT799FNERUVh5MiRio5fvXo1rrrqKkyePBmurq749NNPMWvWLLS0tCA5ObnD9509exajR49GXl4eZs+ejcjISHz44Ye49957UVVVZZYsARcTpnPnzuGBBx6Ah4cHAgIC0NLS0qbcH3/8EQkJCejTpw8WLFgAHx8fbNy4EVOmTMG///1v3HbbbQCApUuXIiUlBffddx/i4+NRU1OD/fv34+DBg/jd737XbszDhg1DVFQUNm7ciOnTp5vt27BhA/z9/TF+/HgAwIMPPoiPPvoIs2fPxqBBg1BRUYFdu3bhp59+wtChQxX17aWEEJg8eTLS09Mxc+ZMDBkyBF999RXmz5+Pn3/+Ga+88gqAi7eoWtv1wAMPAAD69+8PANi3bx92796NO++8E3379kVhYSFWr16N0aNH48iRI/D29u5UbNXV1SgvLzfbFhQUpKi+xMREzJkzBytXrsSTTz5punWm5BYakZQEETlEdXW1ACBuvfVWxe9paGhos238+PEiKirKbNuoUaPEqFGjTD8vX75cABD/+te/TNvOnz8vRowYIbp37y5qamqEEEIUFBQIAMLX11eUlpaaldm6b82aNaZtY8eOFYMHDxbnzp0zbWtpaREjR44UMTExpm2xsbFi4sSJitvZauHChcLNzU1UVlaatjU2Ngo/Pz/x5z//2bTNaDSK5ORkm8v/reTkZPHb/xI3b94sAIinn37a7Ljbb79dGAwGkZeXZ9rm4+Mjpk+f3qbM9s5XZmamACDee+8907b09HQBQKSnp1uMcc2aNQJAuy9b6vvwww8V1UekB7y1ROQgNTU1AIAePXoofo+Xl5fp361/lY8aNQr5+fmorq7u8H1ffPEFevXqhaSkJNM2Nzc3zJkzB3V1ddi+fbvZ8X/84x8RHBxsMZbKykps27YNd9xxB2pra1FeXo7y8nJUVFRg/PjxyM3Nxc8//wwA8PPzw48//ojc3FzFbQWAadOmoampCR9//LFp29dff42qqipMmzbNtM3Pzw979uzByZMnbSrfki+++AIuLi6YM2eO2fZ58+ZBCIEvv/zSahm/PV9NTU2oqKhAdHQ0/Pz8Luu216pVq7Blyxazlz3rI5IZExkiB/H19QVwcXyHUhkZGRg3bhx8fHzg5+eH4OBgPPnkkwBgMZEpKipCTEwMunUz/5VvvZ1QVFRktv3SJ2Lak5eXByEEFi1ahODgYLPXkiVLAFwclwNcfMqmqqoKV1xxBQYPHoz58+fjhx9+sFpHbGwsBg4ciA0bNpi2bdiwAUFBQbjxxhtN21544QUcPnwYYWFhiI+Px9KlS5Gfn2+1fEuKiooQGhraJtHsqM/ac/bsWSxevNg0xiYoKAjBwcGoqqqyeL6siY+Px7hx48xe9qyPSGYcI0PkIL6+vggNDcXhw4cVHX/8+HGMHTsWAwcOxMsvv4ywsDC4u7vjiy++wCuvvNLuGJbO+u1f9h1pre+xxx4zjVW5VHR0NAAgMTERx48fxyeffIKvv/4a//jHP/DKK6/g9ddfx3333WexnmnTpuGZZ55BeXk5evTogbS0NCQlJcHV9df/vu644w7ccMMN2LRpE77++mu8+OKLeP755/Hxxx9jwoQJSputuoceeghr1qzB3LlzMWLECBiNRhgMBtx5552qni9H1UckAyYyRA50yy234M0330RmZiZGjBhh8dhPP/0UjY2NSEtLQ3h4uGl7enq61Xr69euHH374AS0tLWZXZY4ePWrab6uoqCgAF29RtV4RsCQgIAAzZszAjBkzUFdXh8TERCxdulRRIrNs2TL8+9//Rs+ePVFTU4M777yzzXG9e/fGrFmzMGvWLJSWlmLo0KF45plnOp3I9OvXD9988w1qa2vNrsq012cGg6HdMj766CNMnz4dL730kmnbuXPnUFVV1amYrFFaX0fxEukRby0ROdDjjz8OHx8f3HfffTh9+nSb/cePH8eKFSsAAC4uLgBg9uhvdXU11qxZY7Wem2++GadOnTK7RXPhwgWkpqaie/fuGDVqlM2xh4SEYPTo0XjjjTfwyy+/tNlfVlZm+ndFRYXZvu7duyM6OhqNjY1W67nyyisxePBgbNiwARs2bEDv3r2RmJho2t/c3NzmtklISAhCQ0MVld+Rm2++Gc3NzXj11VfNtr/yyiswGAxmCZKPj0+7yYmLi4vZ+QKA1NRUNDc3dzouS5TW5+PjAwB2S6iItMQrMkQO1L9/f3zwwQeYNm0arrzySrOZfXfv3m16RBoAbrrpJri7u2PSpEn4y1/+grq6Orz11lsICQlpN5H4rQceeABvvPEG7r33Xhw4cAARERH46KOPkJGRgeXLl9s04Pi3Vq1aheuvvx6DBw/G/fffj6ioKJw+fRqZmZk4ceIEvv/+ewDAoEGDMHr0aFx77bUICAjA/v37TY9LKzFt2jQsXrwYnp6emDlzptlVpdraWvTt2xe33347YmNj0b17d3zzzTfYt2+f2ZUJW02aNAljxozBU089hcLCQsTGxuLrr7/GJ598grlz55oesQaAa6+9Ft988w1efvllhIaGIjIyEsOHD8ctt9yCf/7znzAajRg0aBAyMzPxzTffIDAwsNNxWaK0viFDhsDFxQXPP/88qqur4eHhYZqfiEh3HPrMFBEJIYQ4duyYuP/++0VERIRwd3cXPXr0EAkJCSI1NdXs0ea0tDRxzTXXCE9PTxERESGef/558c477wgAoqCgwHTcpY9fCyHE6dOnxYwZM0RQUJBwd3cXgwcPNnuUWohfH7F+8cUX28TY3uPXQghx/Phxcc8994hevXoJNzc30adPH3HLLbeIjz76yHTM008/LeLj44Wfn5/w8vISAwcOFM8884w4f/68ov7Jzc01PWa8a9cus32NjY1i/vz5IjY2VvTo0UP4+PiI2NhY8dprrykqu9Wlj18LIURtba145JFHRGhoqHBzcxMxMTHixRdfFC0tLWbHHT16VCQmJgovLy8BwPQo9pkzZ0x93r17dzF+/Hhx9OhR0a9fP7PHtW19/Hrfvn3t7ldanxBCvPXWWyIqKkq4uLjwUWzSNYMQl1yHJCIiItIJjpEhIiIi3WIiQ0RERLrFRIaIiIh0i4kMERER6RYTGSIiItItJjJERESkW04/IV5LSwtOnjyJHj16cFpuIiIinRBCoLa2FqGhoW0WvP0tp09kTp48ibCwMEeHQURERJ1QUlKCvn37drjf6ROZ1qnXS0pK4Ovr6+BoiIiISImamhqEhYVZXULF6ROZ1ttJvr6+TGSIiIh0xtqwEA72JSIiIt1iIkNERES6xUSGiIiIdIuJDBEREekWExkiIiLSLSYyREREpFtMZIiIiEi3mMgQERGRbjGRISIiIt1iIkNERES65fRLFBAREZF95JfVoaiyARGBPogM8nFIDExkiIiIyCZVDecxZ102duSWmbYlxgQjNSkORm83TWPhrSUiIiKyyZx12cjIKzfblpFXjofWZWkeCxMZIiIiUiy/rA47csvQLITZ9mYh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\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# plot calories against total fat with a scatterplot\n",
"df.plot.scatter(x=\"calories\", y=\"total fat\", title=\"Calories vs Total Fat\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "4fe7fb2a",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"id": "5ebada65",
"metadata": {},
"outputs": [],
"source": []
}
],
"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.8.9"
},
"vscode": {
"interpreter": {
"hash": "6cf8df3ff69f85f626faf55c10df6fe2cb9d1236b4dc73844ee4dc01369c2c99"
}
}
},
"nbformat": 4,
"nbformat_minor": 5
}
%% Cell type:markdown id:44bff40d tags:
# Checkpoint 0
%% Cell type:markdown id:02215935 tags:
These exercises are a mix of Python and Pandas practice. Most should be no more than a few lines of code!
%% Cell type:code id:a0f62714 tags:
```
python
# here is a Python list:
a
=
[
1
,
2
,
3
,
4
,
5
,
6
]
```
%% Cell type:code id:779d96b1 tags:
```
python
# get a list containing the last 3 elements of a
# Yes, you can just type out [4, 5, 6] but we really want to see you demonstrate you know how to do that in Python
b
=
a
[
-
3
::]
print
(
b
)
```
%% Output
[4, 5, 6]
%% Cell type:code id:b6a54def tags:
```
python
# create a list of numbers from 1 to 100
c
=
list
(
range
(
1
,
101
))
print
(
c
)
```
%% Output
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
%% Cell type:code id:487873ac tags:
```
python
# now get a list with only the even numbers between 1 and 100
# you may or may not make use of the list you made in the last cell
d
=
list
(
range
(
2
,
101
,
2
))
print
(
d
)
```
%% Output
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100]
%% Cell type:code id:3d4bb5dd tags:
```
python
# write a function that takes two numbers as arguments
# and returns the first number divided by the second
def
divide
(
num1
,
num2
):
return
num1
/
num2
```
%% Cell type:code id:b93669fa tags:
```
python
# write a function that takes a string as input
# and return that string in all caps
def
capitalize
(
string
):
return
string
.
upper
()
```
%% Cell type:code id:f55df04e tags:
```
python
# optional challenge - fizzbuzz
# you will need to use both iteration and control flow
# go through all numbers from 1 to 100 in order
# if the number is a multiple of 3, print fizz
# if the number is a multiple of 5, print buzz
# if the number is a multiple of 3 and 5, print fizzbuzz and NOTHING ELSE
# if the number is neither a multiple of 3 nor a multiple of 5, print the number
for
num
in
list
(
range
(
1
,
101
)):
if
((
num
%
3
==
0
)
&
(
num
%
5
==
0
)):
print
(
"
fizzbuzz
"
)
elif
(
num
%
3
==
0
):
print
(
"
fizz
"
)
elif
(
num
%
5
==
0
):
print
(
"
buzz
"
)
else
:
print
(
num
)
```
%% Output
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
fizzbuzz
16
17
fizz
19
buzz
fizz
22
23
fizz
buzz
26
fizz
28
29
fizzbuzz
31
32
fizz
34
buzz
fizz
37
38
fizz
buzz
41
fizz
43
44
fizzbuzz
46
47
fizz
49
buzz
fizz
52
53
fizz
buzz
56
fizz
58
59
fizzbuzz
61
62
fizz
64
buzz
fizz
67
68
fizz
buzz
71
fizz
73
74
fizzbuzz
76
77
fizz
79
buzz
fizz
82
83
fizz
buzz
86
fizz
88
89
fizzbuzz
91
92
fizz
94
buzz
fizz
97
98
fizz
buzz
%% Cell type:code id:78aace0b tags:
```
python
# create a dictionary that reflects the following menu pricing (taken from Ahmo's)
# Gyro: $9
# Burger: $9
# Greek Salad: $8
# Philly Steak: $10
menu
=
{
"
Gyro
"
:
9
,
"
Burger
"
:
9
,
"
Greek Salad
"
:
8
,
"
Philly Steak
"
:
10
}
```
%% Cell type:code id:a2a78a4b tags:
```
python
# load in the "starbucks.csv" dataset
# refer to how we read the cereal.csv dataset in the tutorial
import
pandas
df
=
pandas
.
read_csv
(
"
starbucks.csv
"
)
```
%% Cell type:code id:68210b5f tags:
```
python
# output the calories, sugars, and protein columns only of every 40th row.
print
(
df
.
iloc
[
0
::
40
][[
"
calories
"
,
"
sugars
"
,
"
protein
"
]])
```
%% Output
calories sugars protein
0 3 0 0.3
40 5 0 0.4
80 350 58 15.0
120 140 20 6.0
160 110 24 2.0
200 200 41 3.0
240 180 35 3.0
%% Cell type:code id:ac0f0c12 tags:
```
python
# select all rows with more than and including 400 calories
hi_cal_rows
=
df
[
df
[
"
calories
"
]
>=
400
]
```
%% Cell type:code id:ee8f8241 tags:
```
python
# select all rows whose vitamin c content is higher than the iron content
vitc_greaterthan_iron_rows
=
df
[
df
[
"
vitamin c
"
]
>
df
[
"
iron
"
]]
```
%% Cell type:code id:d4de48bb tags:
```
python
# create a new column containing the caffeine per calories of each drink
df
[
"
caffeine per calories
"
]
=
df
[
"
caffeine
"
]
/
df
[
"
calories
"
]
```
%% Cell type:code id:3a72465a tags:
```
python
# what is the average calorie across all items?
df
[
"
calories
"
].
mean
()
```
%% Output
193.87190082644628
%% Cell type:code id:7714895a tags:
```
python
# how many different categories of beverages are there?
df
[
"
beverage_category
"
].
nunique
()
```
%% Output
9
%% Cell type:code id:62392999 tags:
```
python
# what is the average # calories for each beverage category?
bev_categories
=
df
.
groupby
(
"
beverage_category
"
)
bev_categories
[
"
calories
"
].
mean
()
```
%% Output
beverage_category
classic espresso drinks 140.172414
coffee 4.250000
frappuccino blended coffee 276.944444
frappuccino blended crme 233.076923
frappuccino light blended coffee 162.500000
shaken iced beverages 114.444444
signature espresso drinks 250.000000
smoothies 282.222222
tazo tea drinks 177.307692
Name: calories, dtype: float64
%% Cell type:code id:435e9d80 tags:
```
python
# plot the distribution of the number of calories in drinks with a histogram
df
[
"
calories
"
].
plot
.
hist
(
edgecolor
=
"
black
"
,
title
=
"
Distribution of Calories
"
)
```
%% Output
<AxesSubplot: title={'center': 'Distribution of Calories'}, ylabel='Frequency'>
%% Cell type:code id:ba8948eb tags:
```
python
# plot calories against total fat with a scatterplot
df
.
plot
.
scatter
(
x
=
"
calories
"
,
y
=
"
total fat
"
,
title
=
"
Calories vs Total Fat
"
)
```
%% Output
<AxesSubplot: title={'center': 'Calories vs Total Fat'}, xlabel='calories', ylabel='total fat'>
%% Cell type:code id:4fe7fb2a tags:
```
python
``
`
%%
Cell
type
:
code
id
:
5
ebada65
tags
:
```
python
```
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment