{ "cells": [ { "cell_type": "markdown", "id": "9c8fe017", "metadata": {}, "source": [ "# Central Motivation\n", "\n", "How different are fast food places from each other? Many people swear by their favorite restaurant, but can this by justified by emprirical factors, such as nutrition facts? Is there a big difference between the fast food chains that claim specializations in certain food products, such as burger places vs. chicken places vs. \"healthy\" options? Our program is exploratory by nature, seeking find the differentiating nutritional factors between varying fast food chains. The applications range from helping businesses gain insight on how their menus vary from their competitors to recommending similar food items." ] }, { "cell_type": "markdown", "id": "7905a458", "metadata": {}, "source": [ "# Summary of Data Processing Pipeline " ] }, { "cell_type": "markdown", "id": "40e68a9d", "metadata": {}, "source": [ "Data Sources from multiple sources:\n", "\n", "## Get Data Sources\n", "1. From PDF converted to Xcel (BGOOD) (converted using ADOBE) --> merged\n", "\n", "\n", "2. Webscraping \n", "\n", "\n", "3. CSV file of fast food nutrition facts downloaded from [OpenIntro](https://www.openintro.org/data/index.php?data=fastfood)\n", "\n", "\n", "4. From PDF to CSV (In and Out Burger)\n", "\n", "\n", "## Merge Data Sources\n", "1. Merge all our data sources into one dataframe\n", "\n", "\n", "## Clean Data\n", "1. In the pandas DF, we need to further clean and account for missing values" ] }, { "cell_type": "markdown", "id": "cda11570", "metadata": {}, "source": [ "# Obtain, Clean, and Merge Data Sources " ] }, { "cell_type": "code", "execution_count": 98, "id": "e766376b", "metadata": {}, "outputs": [], "source": [ "from bs4 import BeautifulSoup\n", "import requests\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import plotly\n", "import requests" ] }, { "cell_type": "code", "execution_count": 99, "id": "ccf3797c", "metadata": {}, "outputs": [], "source": [ "def get_url(url):\n", " \"\"\" gets the html string of the url\n", "\n", " Args:\n", " url (str): website url\n", "\n", " Returns:\n", " html_str (str): html of website\n", " \"\"\"\n", " html_str = requests.get(url).text\n", " \n", " return html_str" ] }, { "cell_type": "code", "execution_count": 100, "id": "2895fbc0", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
restaurantitemcaloriescal_fattotal_fatsat_fattrans_fatcholesterolsodiumtotal_carbfibersugarprotein
0McdonaldsArtisan Grilled Chicken Sandwich3806072.00.0951110443.01137.0
1McdonaldsSingle Bacon Smokehouse Burger8404104517.01.51301580622.01846.0
2McdonaldsDouble Bacon Smokehouse Burger11306006727.03.02201920633.01870.0
3McdonaldsGrilled Bacon Smokehouse Chicken Sandwich7502803110.00.51551940622.01855.0
4McdonaldsCrispy Bacon Smokehouse Chicken Sandwich9204104512.00.51201980814.01846.0
\n", "
" ], "text/plain": [ " restaurant item calories cal_fat \\\n", "0 Mcdonalds Artisan Grilled Chicken Sandwich 380 60 \n", "1 Mcdonalds Single Bacon Smokehouse Burger 840 410 \n", "2 Mcdonalds Double Bacon Smokehouse Burger 1130 600 \n", "3 Mcdonalds Grilled Bacon Smokehouse Chicken Sandwich 750 280 \n", "4 Mcdonalds Crispy Bacon Smokehouse Chicken Sandwich 920 410 \n", "\n", " total_fat sat_fat trans_fat cholesterol sodium total_carb fiber \\\n", "0 7 2.0 0.0 95 1110 44 3.0 \n", "1 45 17.0 1.5 130 1580 62 2.0 \n", "2 67 27.0 3.0 220 1920 63 3.0 \n", "3 31 10.0 0.5 155 1940 62 2.0 \n", "4 45 12.0 0.5 120 1980 81 4.0 \n", "\n", " sugar protein \n", "0 11 37.0 \n", "1 18 46.0 \n", "2 18 70.0 \n", "3 18 55.0 \n", "4 18 46.0 " ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Open Intro Menu Data\n", "df_ff = pd.read_csv('fastfood.csv')\n", "df_ff.drop(columns=['salad', 'calcium', 'vit_a', 'vit_c'], inplace=True)\n", "df_ff.head()" ] }, { "cell_type": "code", "execution_count": 101, "id": "39942153", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
itemcaloriestotal_fatsat_fattrans_fatcholesterolsodiumtotal_carbfibersugarproteinrestaurant
0The Classic59040.29.1187977333423BGood
1West Side55044.69.91581294459925BGood
2The Farmhouse72056.116.911301174342437BGood
3The Freebird78552.815.70166991363543BGood
4Power Play64047.116.513501281387441BGood
\n", "
" ], "text/plain": [ " item calories total_fat sat_fat trans_fat cholesterol sodium \\\n", "0 The Classic 590 40.2 9.1 1 87 977 \n", "1 West Side 550 44.6 9.9 1 58 1294 \n", "2 The Farmhouse 720 56.1 16.9 1 130 1174 \n", "3 The Freebird 785 52.8 15.7 0 166 991 \n", "4 Power Play 640 47.1 16.5 1 350 1281 \n", "\n", " total_carb fiber sugar protein restaurant \n", "0 33 3 4 23 BGood \n", "1 45 9 9 25 BGood \n", "2 34 2 4 37 BGood \n", "3 36 3 5 43 BGood \n", "4 38 7 4 41 BGood " ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# B GOOD Data\n", "df_bgood = pd.read_csv('bgood_menu_only.csv')\n", "df_bgood['restaurant'] = 'BGood'\n", "\n", "\n", "df_bgood.rename(columns = {'Craft Burgers':'item', \n", " 'Calories':'calories',\n", " 'Total Fat (g)':'total_fat',\n", " 'Saturated Fat (g)':'sat_fat',\n", " 'Trans Fat (g)':'trans_fat',\n", " 'Cholesterol (mg)':'cholesterol',\n", " 'Sodium (mg)': 'sodium',\n", " 'Total Carbohydrate (g)':'total_carb',\n", " 'Fiber (g)': 'fiber',\n", " 'Sugars (g)': 'sugar',\n", " 'Protein (g)': 'protein'}, inplace = True)\n", "\n", "df_bgood.drop(['Unnamed: 3', 'Unnamed: 5', 'Unnamed: 7', \n", " 'Unnamed: 9', 'Unnamed: 11','Unnamed: 13', \n", " 'Unnamed: 14','Unnamed: 16'], axis = 1, inplace = True)\n", "\n", "df_bgood.head()" ] }, { "cell_type": "code", "execution_count": 102, "id": "0175117c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
itemcaloriestotal_fatsat_fattrans_fatcholesterolsodiumtotal_carbfibersugarproteinrestaurantcal_fat
0The Classic59040.29.1187977333423BGoodNaN
1West Side55044.69.91581294459925BGoodNaN
2The Farmhouse72056.116.911301174342437BGoodNaN
3The Freebird78552.815.70166991363543BGoodNaN
4Power Play64047.116.513501281387441BGoodNaN
..........................................
510Spicy Triple Double Crunchwrap78038100.5501850879823Taco Bell340.0
511Express Taco Salad w/ Chips5802991601270598723Taco Bell260.0
512Fiesta Taco Salad-Beef780421016013407411726Taco Bell380.0
513Fiesta Taco Salad-Chicken7203570701260708832Taco Bell320.0
514Fiesta Taco Salad-Steak7203681551340708828Taco Bell320.0
\n", "

571 rows × 13 columns

\n", "
" ], "text/plain": [ " item calories total_fat sat_fat trans_fat \\\n", "0 The Classic 590 40.2 9.1 1 \n", "1 West Side 550 44.6 9.9 1 \n", "2 The Farmhouse 720 56.1 16.9 1 \n", "3 The Freebird 785 52.8 15.7 0 \n", "4 Power Play 640 47.1 16.5 1 \n", ".. ... ... ... ... ... \n", "510 Spicy Triple Double Crunchwrap 780 38 10 0.5 \n", "511 Express Taco Salad w/ Chips 580 29 9 1 \n", "512 Fiesta Taco Salad-Beef 780 42 10 1 \n", "513 Fiesta Taco Salad-Chicken 720 35 7 0 \n", "514 Fiesta Taco Salad-Steak 720 36 8 1 \n", "\n", " cholesterol sodium total_carb fiber sugar protein restaurant cal_fat \n", "0 87 977 33 3 4 23 BGood NaN \n", "1 58 1294 45 9 9 25 BGood NaN \n", "2 130 1174 34 2 4 37 BGood NaN \n", "3 166 991 36 3 5 43 BGood NaN \n", "4 350 1281 38 7 4 41 BGood NaN \n", ".. ... ... ... ... ... ... ... ... \n", "510 50 1850 87 9 8 23 Taco Bell 340.0 \n", "511 60 1270 59 8 7 23 Taco Bell 260.0 \n", "512 60 1340 74 11 7 26 Taco Bell 380.0 \n", "513 70 1260 70 8 8 32 Taco Bell 320.0 \n", "514 55 1340 70 8 8 28 Taco Bell 320.0 \n", "\n", "[571 rows x 13 columns]" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_bgood_ff = pd.concat([df_bgood, df_ff])\n", "df_bgood_ff" ] }, { "cell_type": "code", "execution_count": 103, "id": "cc95306c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
itemcaloriestotal_fatsaturated_fattrans_fatcholesterolsodiumtotal_carbfibersugarproteinrestaurant
4Hamburger Patty2201781605000016Five Guys
5Hot Dog240209145104020111Five Guys
7Five Guys Bun26093.50533039287Five Guys
9Little5262340.5053172828Five Guys
10Regular9534171096213115415Five Guys
11Large1314571010132718121620Five Guys
13A.1® Sauce1500002803020Five Guys
15Cheese*# (1 slice)70640.2153600004Five Guys
17Grilled Mushrooms50000551010Five Guys
18Hot Sauce000002000000Five Guys
20Ketchup2000001605040Five Guys
22Mayonnaise100112010750000Five Guys
23Mustard00000550000Five Guys
25Pickles300002581000Five Guys
26Relish1000001053030Five Guys
\n", "
" ], "text/plain": [ " item calories total_fat saturated_fat trans_fat cholesterol \\\n", "4 Hamburger Patty 220 17 8 1 60 \n", "5 Hot Dog 240 20 9 1 45 \n", "7 Five Guys Bun 260 9 3.5 0 5 \n", "9 Little 526 23 4 0.5 0 \n", "10 Regular 953 41 7 1 0 \n", "11 Large 1314 57 10 1 0 \n", "13 A.1® Sauce 15 0 0 0 0 \n", "15 Cheese*# (1 slice) 70 6 4 0.2 15 \n", "17 Grilled Mushrooms 5 0 0 0 0 \n", "18 Hot Sauce 0 0 0 0 0 \n", "20 Ketchup 20 0 0 0 0 \n", "22 Mayonnaise 100 11 2 0 10 \n", "23 Mustard 0 0 0 0 0 \n", "25 Pickles 3 0 0 0 0 \n", "26 Relish 10 0 0 0 0 \n", "\n", " sodium total_carb fiber sugar protein restaurant \n", "4 50 0 0 0 16 Five Guys \n", "5 1040 2 0 1 11 Five Guys \n", "7 330 39 2 8 7 Five Guys \n", "9 531 72 8 2 8 Five Guys \n", "10 962 131 15 4 15 Five Guys \n", "11 1327 181 21 6 20 Five Guys \n", "13 280 3 0 2 0 Five Guys \n", "15 360 0 0 0 4 Five Guys \n", "17 55 1 0 1 0 Five Guys \n", "18 200 0 0 0 0 Five Guys \n", "20 160 5 0 4 0 Five Guys \n", "22 75 0 0 0 0 Five Guys \n", "23 55 0 0 0 0 Five Guys \n", "25 258 1 0 0 0 Five Guys \n", "26 105 3 0 3 0 Five Guys " ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# B GOOD Data\n", "five_guys_df = pd.read_csv('five_guys.csv', \n", " names=['item','serving_size','calories', 'total_fat', \n", " 'saturated_fat', 'trans_fat', 'cholesterol', 'sodium',\n", " 'total_carb', 'fiber', 'sugar', 'protein'])\n", "five_guys_df.dropna(inplace=True)\n", "five_guys_df = five_guys_df[1:] \n", "five_guys_df['restaurant'] = 'Five Guys'\n", "five_guys_df.drop(columns='serving_size', inplace=True)\n", "five_guys_df\n" ] }, { "cell_type": "code", "execution_count": 104, "id": "50312a17", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
itemcaloriestotal_fatsaturated_fattrans_fatcholesterolsodiumtotal_carbfibersugarproteinrestaurantsat_fatcal_fat
0Hamburger Patty2201781605000016Five GuysNaNNaN
1Hot Dog240209145104020111Five GuysNaNNaN
2Five Guys Bun26093.50533039287Five GuysNaNNaN
3Little5262340.5053172828Five GuysNaNNaN
4Regular9534171096213115415Five GuysNaNNaN
.............................................
581Spicy Triple Double Crunchwrap78038NaN0.5501850879823Taco Bell10340.0
582Express Taco Salad w/ Chips58029NaN1601270598723Taco Bell9260.0
583Fiesta Taco Salad-Beef78042NaN16013407411726Taco Bell10380.0
584Fiesta Taco Salad-Chicken72035NaN0701260708832Taco Bell7320.0
585Fiesta Taco Salad-Steak72036NaN1551340708828Taco Bell8320.0
\n", "

586 rows × 14 columns

\n", "
" ], "text/plain": [ " item calories total_fat saturated_fat \\\n", "0 Hamburger Patty 220 17 8 \n", "1 Hot Dog 240 20 9 \n", "2 Five Guys Bun 260 9 3.5 \n", "3 Little 526 23 4 \n", "4 Regular 953 41 7 \n", ".. ... ... ... ... \n", "581 Spicy Triple Double Crunchwrap 780 38 NaN \n", "582 Express Taco Salad w/ Chips 580 29 NaN \n", "583 Fiesta Taco Salad-Beef 780 42 NaN \n", "584 Fiesta Taco Salad-Chicken 720 35 NaN \n", "585 Fiesta Taco Salad-Steak 720 36 NaN \n", "\n", " trans_fat cholesterol sodium total_carb fiber sugar protein restaurant \\\n", "0 1 60 50 0 0 0 16 Five Guys \n", "1 1 45 1040 2 0 1 11 Five Guys \n", "2 0 5 330 39 2 8 7 Five Guys \n", "3 0.5 0 531 72 8 2 8 Five Guys \n", "4 1 0 962 131 15 4 15 Five Guys \n", ".. ... ... ... ... ... ... ... ... \n", "581 0.5 50 1850 87 9 8 23 Taco Bell \n", "582 1 60 1270 59 8 7 23 Taco Bell \n", "583 1 60 1340 74 11 7 26 Taco Bell \n", "584 0 70 1260 70 8 8 32 Taco Bell \n", "585 1 55 1340 70 8 8 28 Taco Bell \n", "\n", " sat_fat cal_fat \n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "3 NaN NaN \n", "4 NaN NaN \n", ".. ... ... \n", "581 10 340.0 \n", "582 9 260.0 \n", "583 10 380.0 \n", "584 7 320.0 \n", "585 8 320.0 \n", "\n", "[586 rows x 14 columns]" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_all_ff = pd.concat([five_guys_df, df_bgood_ff], axis=0, ignore_index=True)\n", "\n", "df_all_ff" ] }, { "cell_type": "code", "execution_count": 105, "id": "00745809", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['Five Guys', 'BGood', 'Mcdonalds', 'Chick Fil-A', 'Sonic', 'Arbys',\n", " 'Burger King', 'Dairy Queen', 'Subway', 'Taco Bell'], dtype=object)" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_all_ff.restaurant.unique()" ] }, { "cell_type": "code", "execution_count": null, "id": "33573791", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "eddb15fd", "metadata": {}, "source": [ "# Visualization " ] }, { "cell_type": "code", "execution_count": 8, "id": "84bacee6", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ ":4: FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.\n", " dfg = df_ff.groupby(['restaurant'])['calories','sodium','protein'].mean()\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAGBCAYAAACXe53tAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA65klEQVR4nO3deZyVdd3/8dcbJHDfQFNQIcNdRAMk9XYJt9zwNk3NBcvESnO7LVwqzbK8zdtfakqZqajkUplbZW6hpbiAoYi4oKCiqKCpqLiAn98f3+/gYTgz5wzMnOvMzPv5eMxjzrmu61zXZ87MnM/13RURmJmZNadL0QGYmVn9c7IwM7OKnCzMzKwiJwszM6vIycLMzCpysjAzs4qcLMw6MElTJO3YzP6/SRpRgzhC0ufb4LwzJO3c2ue1xTlZdCD5H2eepHclvSrpSkkrLOU5j5D0r9aKsbVVE5+kcfnDaotG22/K23dsyxjLxNM3X/cvjbZfI+nMKs9xpaSfVjouIjaNiHH5NWdKuqbR/i9HxJjqo29dkn4j6aoy2wdI+lDSakXEZYtzsuh49o6IFYCBwJbAqcWG0zxJy9ToUs8Ah5dcd3VgKDC7RtcvZ6ikbdvixDV8X5fWlcB+kpZvtP1w4LaIeLP2IVk5ThYdVES8CvydlDQAkDRU0gOS3pL0WOkddb5Df17SXEnTJR0iaWPg18AXc2nlrXzsnpL+LekdSS+V3g1L2lHSzNJYSqsK8t3tH/Nd9DvAEZKGSBqf45ol6VeSPlPy+pD0LUnPSvqPpIuVlI2vCWOBAyV1zc8PBv4MfFRynS6STpH0nKQ3JN1Qemcr6Q+5xPa2pPskbVqy78oc11/ye/iQpPWb+x0B5wJlSwflSkwNVTmSRgKHAN/PP/etJe/zKEmPA+9JWqbhvZe0O3Bafg/elfRYfs04Sd8s+fl/IOkFSa9LukrSynlfQ2lohKQXJc2RdHpJbM3+DpsSEeOBl4GvlJyrK/A1YIyk9SXdk38fcySNlbRKE+/ZIqWtxn+LktaW9CdJs/Pf+HGN4p+Q/6Zfk3R+pdg7GyeLDkpSH+DLwLT8vDfwF9KH02rAycCfJPXKd3UXAl+OiBWBbYBJETEV+BYwPiJWiIhV8unfI935rQLsCXxb0r4tCG848Mf8+rHAAuBEoCfwRWAY8J1Gr9kLGAxsAXwV2K2Z+Mp5BXgS2DU/PxxoXP1xHLAvsAOwNvAf4OKS/X8D+gNrAI/m2EsdDPwYWJX0vp/dTDzkc2+gFta5R8Sl+drn5p9770Yx7AmsEhHzS15zO/Az4Pr8mkWq5LIj8tdOwOeAFYBfNTpmO2BD0u/oRzlhQ3W/w6ZcRUmpD9gZ6EZ6vwX8nPT72BhYBzizyvMuJKkLcCvwGNA7x3eCpN3yIRcAF0TESsD6wA0tvUZH52TR8dwkaS7wEvA6cEbefijw14j4a0R8EhF3AhOAPfL+T4DNJC0bEbMiYkpTF4iIcRExOZ/nceBa0gdstcZHxE359fMiYmJEPBgR8yNiBvCbMuc7JyLeiogXgX9QUmJqgauAwyVtSPowHd9o/9HA6RExMyI+JH0o7a9cpRMRl0fE3JJ9WzTceWc3RsTD+UN6bBUxfkBKKBXbHlrgwoh4KSLmLcFrDwHOj4jnI+JdUhXmQVq0SuvH+Xf2GOmDdwuAKn+HTbka2CHf4EBKHL+PiI8jYlpE3BkRH0bEbOD8Fpy31GCgV0ScFREfRcTzwG+Bg/L+j4HPS+oZEe9GxINLcI0Ozcmi49k3lw52BDYi3ekBrAcckKsJ3spVNtsBa0XEe8CBpLv0WbkqZaOmLiBpa0n/yMX5t/PrejZ1fBkvNTrfBpJuy1U875DugBuf79WSx++T7npb6kbgS8B3SR9Qja0H/Lnk/ZlKumNeU1JXSefkKqp3gBn5NaVxLkmMv83n37vikdV5qfIhTVobeKHk+QvAMsCaJdvK/oxV/g7LyjcA9wGHKnXI2BcYk8+7hqTrJL2cz3tNtedtZD1g7UZ//6eV/GxHAhsAT0l6RNJeS3CNDs3JooOKiHtJjYfn5U0vAVdHxColX8tHxDn5+L9HxC7AWsBTpA8xgHLTEv8euAVYJyJWJrUbKO97D1iu4cBc/9yrcXiNno/O1+yfqwFOKzlfxR+1yuOIiPdJVRvfpnyyeIlUFVf6HvWIiJdJdejDSVUkKwN982uqjbOpmD4mVV39pNG5Gr+Pn2380qZO2dzlKoTzCulDtcG6wHzgtQqvg6X7HUJKDoeT2i6mR8SjefvPc9wD8nkPbea8i7xnQOl79lI+b+nvdsWI2AMgIp6NiINJVYz/C/xRize6d2pOFh3bL4FdJA0k3ZHtLWm3fJfcIzcA9pG0pqR98j/Hh8C7pDtqSB8UfRo1Vq4IvBkRH0gaQvogbfAM0EOpEbwb8AOge4U4VwTeAd7NJZpvt+BnLBdfc04DdshVJY39Gjhb0noAuT1neEmMHwJvkD6QftaCGCu5mvQe7V6y7TFgU0kDJfVg8Xr610jtCi3xGtA319+Xcy1woqR++Q6/oY1jfhPHl1qa3yHAn0jtET8mlypKzvsu8FZud/teM+eYBOwhabWcXE8o2fcw8I5SB4Bl8//AZpIGA0g6VFKviPgEeCu/ZgG2kJNFB5breK8CfhgRL5HujE8jdRd9ifSP1yV//Q/pzvJNUp1wQ+PkPcAU4FVJc/K27wBn5baRH1HSGBgRb+f9l5F6ubwHLNI7qoyTSQlnLqlEc30Lfsxy8TUpIl6JiKbGZVxAKjHdkX+2B4Gt876rSNUyL5MaylutTjsiFpDallYr2fYMcBZwF/As0Djm3wGb5CqVm6q81B/y9zckPVpm/+WkxHUfMJ3UpvLdKs+9NL9DclVoQ8Io7TjwY2Ar4G1SB40bmznN1aQkOwO4ozSG/B7vTWpHmg7MIf2NNrQ57Q5MkfQu6e/goIj4oCU/Q0cnL35kZmaVuGRhZmYVOVmYmVlFThZmZlaRk4WZmVXUXiYba7GePXtG3759iw7DzKxdmThx4pyIaDw2quMmi759+zJhwoSiwzAza1ckvVBuu6uhzMysIicLMzOryMnCzMwq6rBtFmbWOX388cfMnDmTDz7wbB3N6dGjB3369KFbt25VHe9kYWYdysyZM1lxxRXp27cv0lJNCtxhRQRvvPEGM2fOpF+/flW9xtVQZtahfPDBB6y++upOFM2QxOqrr96i0peThZl1OE4UlbX0PXKyMDOzitxmYWYdWt9T/tKq55txzp6tdq4rr7ySCRMm8Ktf/arq19xyyy08+eSTnHLKKa0WRzWcLMzM2on58+ezzz77sM8++9T82q6GMjNrZVdddRUDBgxgiy224LDDDuPWW29l6623Zsstt2TnnXfmtdcWX9b8hRdeYNiwYQwYMIBhw4bx4osvAnDEEUdw0kknsdNOOzFq1CiuvPJKjj32WABmz57NV77yFQYPHszgwYO5//77Abj33nsZOHAgAwcOZMstt2Tu3LlL/TO5ZNGcM1duZt/btYvDzNqNKVOmcPbZZ3P//ffTs2dP3nzzTSTx4IMPIonLLruMc889l//7v/9b5HXHHnsshx9+OCNGjODyyy/nuOOO46abbgLgmWee4a677qJr165ceeWVC19z/PHHc+KJJ7Lddtvx4osvsttuuzF16lTOO+88Lr74YrbddlveffddevTosdQ/l5OFmVkruueee9h///3p2bMnAKutthqTJ0/mwAMPZNasWXz00UdlxzaMHz+eG29MS4wfdthhfP/731+474ADDqBr166Lveauu+7iySefXPj8nXfeYe7cuWy77bacdNJJHHLIIey333706dNnqX8uV0OZmbWiiFisW+p3v/tdjj32WCZPnsxvfvObqsY3lJ5j+eWXL3vMJ598wvjx45k0aRKTJk3i5ZdfZsUVV+SUU07hsssuY968eQwdOpSnnnpq6X4onCzMzFrVsGHDuOGGG3jjjTcAePPNN3n77bfp3bs3AGPGjCn7um222YbrrrsOgLFjx7LddttVvNauu+66SE+qSZMmAfDcc8+x+eabM2rUKAYNGtQqycLVUGbWobVmV9dqbLrpppx++unssMMOdO3alS233JIzzzyTAw44gN69ezN06FCmT5++2OsuvPBCvvGNb/CLX/yCXr16ccUVV1S81oUXXsgxxxzDgAEDmD9/Pttvvz2//vWv+eUvf8k//vEPunbtyiabbMKXv/zlpf65FBFLfZJ6NGjQoFjqxY/cwG3W7kydOpWNN9646DDahXLvlaSJETGo8bGuhjIzs4qcLMzMrCInCzMzq8jJwszMKnKyMDOzipwszMysIo+zMLOOrbku8Et0vrbpNj9u3DjOO+88brvttsKmIW+Ok4WZWZ0pahry5jhZmLVXHjRal9577z2++tWvMnPmTBYsWMAPf/hDevbsycknn8z8+fMZPHgwo0ePpnv37tx+++2ccMIJ9OzZk6222mrhOUoXRTriiCPYa6+92H///QFYYYUVePfddxk3bhxnnHEGa665JpMmTWK//fZj880354ILLmDevHncdNNNrL/++q32c7nNwsysFd1+++2svfbaPPbYYzzxxBPsvvvuHHHEEVx//fVMnjyZ+fPnM3r0aD744AOOOuoobr31Vv75z3/y6quvtvhajz32GBdccAGTJ0/m6quv5plnnuHhhx/mm9/8JhdddFGr/lxOFmZmrWjzzTfnrrvuYtSoUfzzn/9kxowZ9OvXjw022ACAESNGcN999/HUU0/Rr18/+vfvjyQOPfTQFl9r8ODB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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Segmented Bar Chart \n", "\n", "df_ff = df_ff.replace(np.nan, 0)\n", "dfg = df_ff.groupby(['restaurant'])['calories','sodium','protein'].mean()\n", "\n", "dfg.plot(kind='bar', title='Restaurant Mean Nutritional Values', ylabel='Mean Values(g)',\n", " xlabel='Restaurants', figsize=(6, 5))\n", "\n" ] }, { "cell_type": "markdown", "id": "dd3b84a7", "metadata": {}, "source": [ "* The segmented barchart is a good tool to show stark differences between specific nutritional categproes on a restaurant to restaurant basis. For example, the visualization above shows that Arby's is the leader in average sodium in menu items, where as Chick-Fil-A is the leader in calorie deficit menu items. " ] }, { "cell_type": "code", "execution_count": 29, "id": "3166bce5", "metadata": {}, "outputs": [], "source": [ "# Regression Functions \n", "\n", "def get_mse(y_true, y_pred):\n", " # calculate the mean squared distance between the predicted and actual y\n", " return np.mean((y_pred - y_true) ** 2)\n", "\n", "def show_fit(x, y, slope, intercept):\n", " plt.figure()\n", " \n", " # transform the input data into numpy arrays and flatten them for easier processing\n", " x = np.array(x).ravel()\n", " y = np.array(y).ravel()\n", " \n", " # plot the actual data\n", " plt.scatter(x, y, label='data')\n", " \n", " # compute linear predictions \n", " # x is a numpy array so each element gets mulitplied by slope and intercept is added\n", " y_pred = slope * x + intercept\n", " \n", " # plot the linear fit\n", " plt.plot(x, y_pred, color='black',\n", " ls=':',\n", " label='linear fit')\n", " \n", " # for each data point plot the error\n", " for idx, (x_i, y_i) in enumerate(zip(x, y)):\n", " plt.plot([x_i, x_i], [y_i, slope * x_i + intercept], \n", " ls='--', lw=3, color='tab:red',\n", " label='error' if idx == 0 else \"\")\n", " \n", " plt.legend()\n", " \n", " plt.xlabel('x')\n", " plt.ylabel('y')\n", " \n", " # print the mean squared error\n", " y_pred = slope * x + intercept\n", " mse = get_mse(y_true=y, y_pred=y_pred)\n", " plt.suptitle(f'y_hat = {slope:.2f} * x + {intercept:.2f}, MSE = {mse:.3f}')\n", " " ] }, { "cell_type": "code", "execution_count": 30, "id": "e29128bd", "metadata": {}, "outputs": [ { "data": { "image/png": "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GzZsoG3btq5lM2bMICUlhQ0bNjB37twKnYc/kew6uwfoIyK1saqhrgTWASeBscAM+9/F9vpLgH+JyHNYJZF2wJoI5k+puJXZPY1tHp9V+V155ZWce+65AHTq1Indu3dTUFDA1q1b6du3LwA//fQTl156KQDLly/n2WefpbCwkKNHj9K5c2euu+46oHT1UlUSyTaL1SKyEPgKKAaygZeAusB8EbkNK6CMttffIiLzga32+ncZY0q87lwpFfdWrFjhep+UlFTqc+3atUt9Pvfcc0t9btSoUanP5513XoXyUqtWLdf7xMREiouLMcYwaNAg3nzzzVLrnjp1igkTJrBu3TrOP/98pk6dWmpUep06dSqUl0iJaG8oY8xjxpgOxpguxpib7J5O+caYK40x7ex/j7qtP90Y09YY094Y80Ek86aUUpHUp08fPv/8c3bs2AFYVWPffvutKzA0atSIEydOhKWhPCkpiaKiogrvxx+dSFAppSKgcePGzJkzh+uvv54LL7yQPn368M0335Camsrtt99O165dyczM5JJLLqnwscaPH8+FF14Y0QZucbbCx6KePXsaffiRUuWzrUNH1/uO32zzs2bVsG3bNjp27Bh4RVWKt+9NRNYbY3qGsh8tWSillApIg4VSSqmAdNZZpeJU6ujR0c6CiiEaLJSKU82emBbtLKgYotVQSimlAtJgoZRSKiANFkoppQLSNgul4tT+Rx51vdf2i/ApKSkhMTHR52dvjDEYY0hIqLr371U3Z0qpiCpYsMD1UsF744036NWrF926deOOO+6gpKSEunXr8uijj9K7d2++/PLLMp+fe+45unTpQpcuXXj++ecBa5rzjh07MmHCBHr06MHevXuje2IBaMlCKRWTDr/wfxx58cWg1k0dPbpM6Wn/I4+WCpSN7rqLxvfc7Xc/27ZtY968eXz++eckJSUxYcIE5s6dy8mTJ+nSpQvTplnHcP+8fv16Zs+ezerVqzHG0Lt3by6//HLq169PTk4Os2fPZtasWSGefeXTYKGUUkH6+OOPWb9+vWs+J4fDQZMmTUhMTGTkyJGu9dw/f/bZZwwfPtw1m+yIESNYuXIlQ4cOpVWrVvTp06fyT6QcNFgopVSQjDGMHTuWp59+ulT6H/7wh1LtEsnJya7P/ubfq6rTkXujwUIpFZMa33N3wGojf5o9MS3khv0rr7yS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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Regressing between two given nutritional categories \n", "\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.metrics import r2_score\n", "\n", "x = df_ff['calories'].to_numpy()\n", "y = df_ff['cholesterol']\n", "\n", "x = x.reshape((-1, 1))\n", "\n", "reg = LinearRegression()\n", "reg.fit(x, y) \n", "slope = reg.coef_[0]\n", "intercept = reg.intercept_\n", "\n", "show_fit(x, y, slope, intercept)" ] }, { "cell_type": "markdown", "id": "b7dcf6bd", "metadata": {}, "source": [ "* The scatterplot above is a foundation for running a machine learning regression based model. This chart can also be used to demonstrate levels of correlation between select nutritional categories. For instance, the chart above shows that there is a relatively high correlation between calories and cholesterol (with exception to a few outliers). " ] }, { "cell_type": "code", "execution_count": 24, "id": "ae827eb3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R2 = 0.5813448793142899\n" ] } ], "source": [ "y_pred = reg.predict(x) \n", "\n", "# computing R2 from sklearn\n", "r2 = r2_score(y_true=y, y_pred=y_pred)\n", "print('R2 =',r2)" ] }, { "cell_type": "markdown", "id": "4eaeb940", "metadata": {}, "source": [ "# Discussion of Machine Learning Tools" ] }, { "cell_type": "markdown", "id": "f60c4dfa", "metadata": {}, "source": [ "* Machine Learning Tools: SciKit (K-nearest neighbors, K-means) and SKLearn. We believe k-nearest neighbors make the most sense because groups are already made through restaurant identification. K-means, on the other hand, is used to identify groups that are yet to exist. Another option is potentially using linear regression on certain nutritional value categories to identify correlations among groups. \n", "\n", "\n", "* Relevant assumptions: For k-nearest neighbors, an assumption is made that individual menu items are connected and represent a specific restaurant and can be used as an identifier for further analysis.\n", "\n", "\n", "* Use cases: We could build a new food item recommendor based on favorite menu items and/or specifications on ranges of preferred nutritional values. Businesses could also use this tool to compare the nutritional value of their items with their competitors and modify their menus according to their strategic goals. " ] }, { "cell_type": "code", "execution_count": null, "id": "3f9c78db", "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.10.4" } }, "nbformat": 4, "nbformat_minor": 5 }