From cb3a84a150f10922f07857dc54a504ef9e30b78f Mon Sep 17 00:00:00 2001 From: Anna Meyer <annapmeyer95@gmail.com> Date: Tue, 18 Jul 2023 16:41:10 -0500 Subject: [PATCH] lec 14 materials --- .../14_Comprehensions/cs220_survey_data.csv | 993 +++++++++++++++ .../14_Comprehensions/lec-14-worksheet.pdf | Bin 0 -> 62839 bytes .../lec_14_comprehensions_template.ipynb | 1127 +++++++++++++++++ .../lec_14_function_references_template.ipynb | 967 ++++++++++++++ 4 files changed, 3087 insertions(+) create mode 100644 sum23/lecture_materials/14_Comprehensions/cs220_survey_data.csv create mode 100644 sum23/lecture_materials/14_Comprehensions/lec-14-worksheet.pdf create mode 100644 sum23/lecture_materials/14_Comprehensions/lec_14_comprehensions_template.ipynb create mode 100644 sum23/lecture_materials/14_Func_Refs/lec_14_function_references_template.ipynb diff --git a/sum23/lecture_materials/14_Comprehensions/cs220_survey_data.csv b/sum23/lecture_materials/14_Comprehensions/cs220_survey_data.csv new file mode 100644 index 0000000..35d8bfe --- /dev/null +++ b/sum23/lecture_materials/14_Comprehensions/cs220_survey_data.csv @@ -0,0 +1,993 @@ +Lecture,Age,Major,Zip Code,Latitude,Longitude,Pizza topping,Pet preference,Runner,Sleep habit,Procrastinator +LEC001,22,Engineering: Biomedical,53703,43.073051,-89.40123,none (just cheese),neither,No,no preference,Maybe +LEC006,,Undecided,53706,43.073051,-89.40123,none (just cheese),neither,No,no preference,Maybe +LEC004,18,Engineering: Industrial,53715,43.073051,-89.40123,none (just cheese),neither,No,no preference,Maybe +LEC005,,Undecided,53706,43.073051,-89.40123,none (just cheese),neither,No,no preference,Maybe +LEC002,,Undecided,53706,43.073051,-89.40123,none (just cheese),neither,No,no preference,Maybe +LEC004,18,Engineering: Other|Engineering: Computer,53706,43.073051,-89.40123,none (just cheese),neither,No,no preference,Maybe +LEC003,,Undecided,53706,43.073051,-89.40123,none (just cheese),neither,No,no preference,Maybe +LEC003,18,Data Science,53715,43.073051,-89.40123,pineapple,cat,Yes,no preference,Maybe +LEC006,18,Data Science,53706,35.4,119.11,none (just cheese),dog,No,night owl,Yes +LEC006,18,Mathematics/AMEP,53706,44,-93,pepperoni,dog,No,night owl,Yes +LEC002,21,Engineering: Other,53703,24.713552,46.675297,none (just cheese),cat,Yes,night owl,Maybe +LEC003,19,Data Science,53705,24.6806,46.57936,pineapple,cat,No,early bird,No +LEC004,24,Economics,53703,43,-89,pineapple,cat,Yes,early bird,Yes +LEC003,18,Data Science,53706,36.102371,-115.174553,none (just cheese),dog,No,night owl,Yes +LEC006,22,Psychology,53703,31.78,119.95,mushroom,cat,No,night owl,Yes +LEC005,20,Data Science,53705,37.8,112.5,pepperoni,cat,Yes,night owl,Yes +LEC004,24,Science: Biology/Life,53703,46.872131,-113.994019,pepperoni,dog,Yes,early bird,Yes +LEC004,17,Engineering: Mechanical,53706,46.6242,8.0414,pineapple,dog,No,night owl,Yes +LEC004,19,Engineering: Mechanical,53726,43.073051,-89.40123,none (just cheese),dog,Yes,early bird,No +LEC002,19,Engineering: Mechanical,57303,41.878113,-87.629799,pineapple,dog,No,night owl,Yes +LEC001,,Mathematics/AMEP,53706,31.230391,121.473701,basil/spinach,dog,No,no preference,Maybe +LEC002,19,Mathematics/AMEP,53558,40.712776,-74.005974,sausage,dog,Yes,night owl,Yes +LEC001,20,Economics (Mathematical Emphasis),53703,48.86,2.3522,pepperoni,dog,No,early bird,Yes +LEC001,19,Engineering: Mechanical,53703,24.7,46.7,mushroom,dog,Yes,early bird,Maybe +LEC005,18,Computer Science,53703,37.338207,-121.88633,green pepper,dog,Yes,night owl,Yes +LEC003,19,Engineering: Mechanical,53558,43.073051,-89.40123,pepperoni,dog,No,night owl,Yes +LEC005,20,Engineering: Mechanical,53715,38.9072,-77.0369,Other,cat,No,night owl,Yes +LEC003,20,Data Science,53703,43.073051,-89.40123,pepperoni,dog,No,night owl,Yes +LEC002,21,Science: Other|Political Science,53703,31.768318,35.213711,pepperoni,dog,No,no preference,Maybe +LEC003,19,Mathematics/AMEP,53715,19.075983,72.877655,basil/spinach,cat,No,night owl,Maybe +LEC001,23,Computer Science,53711,43.073929,-89.385239,sausage,dog,No,night owl,Yes +LEC006,21,Business: Other,53715,25.761681,-80.191788,pepperoni,dog,No,night owl,Yes +LEC003,19,Business: Other|Real Estate,53715,117,33,pepperoni,dog,Yes,night owl,No +LEC004,19,Computer Science,53726,47.037872,-122.900696,tater tots,dog,No,night owl,Yes +LEC004,24,Economics,53703,23.12911,113.264381,pepperoni,cat,Yes,early bird,Maybe +LEC005,19,Data Science,53703,64.49796,165.40998,sausage,dog,No,night owl,Yes +LEC003,19,Data Science,53705,25,47,mushroom,cat,No,early bird,Maybe +LEC005,20,Engineering: Other|Engineering Physics: Scientific Computing,53715,43.073051,-89.4,none (just cheese),dog,No,night owl,Yes +LEC005,20,Computer Science,53703,48.856613,2.352222,pepperoni,dog,No,night owl,Yes +LEC002,19,Business: Finance,53726,43.04156,87.91006,pepperoni,dog,No,night owl,Yes +LEC002,21,Data Science,53713,29.868336,121.543991,mushroom,dog,No,night owl,No +LEC004,19,Computer Science,53715,40.712776,-74.005974,pepperoni,dog,No,night owl,Maybe +LEC003,18,Computer Science,53706,5.93876,80.48433,Other,dog,No,night owl,Maybe +LEC005,19,Engineering: Mechanical,53704,38.7,-77,pepperoni,cat,Yes,no preference,No +LEC004,18,Engineering: Mechanical,53726,41.878113,-87.629799,pepperoni,dog,No,night owl,Maybe +LEC005,19,Engineering: Other,53703,36.169941,-115.139832,pepperoni,dog,No,night owl,Maybe +LEC005,19,Engineering: Mechanical,53703,43.078104,-89.431698,pepperoni,dog,Yes,night owl,Yes +LEC006,18,Engineering: Biomedical,53051,33.6846,117.8265,pepperoni,dog,Yes,night owl,Yes +LEC001,22,Engineering: Mechanical,53719,43.073051,-89.40123,none (just cheese),cat,Yes,night owl,Yes +LEC001,18,Computer Science,53706,26.2992,87.2625,mushroom,dog,Yes,night owl,No +LEC001,24,Business: Information Systems,53703,43.073051,-89.40123,macaroni/pasta,cat,No,night owl,No +LEC006,19,Engineering: Mechanical,53703,43.04049,-87.91732,Other,dog,No,night owl,Yes +LEC001,,Computer Science,53715,34.052235,-118.243683,green pepper,dog,No,night owl,Yes +LEC002,20,Statistics,53703,40.7128,74.006,Other,dog,No,night owl,Maybe +LEC005,23,Computer Science,53703,37.5,126.97,pepperoni,dog,No,night owl,No +LEC002,21,Statistics,53703,52.370216,4.895168,pepperoni,dog,Yes,early bird,Maybe +LEC002,18,Undecided,53706,38.56247,-121.70411,pepperoni,dog,Yes,night owl,Yes +LEC006,18,Statistics,53706,40.712776,40.712776,pepperoni,dog,No,night owl,Yes +LEC003,21,Economics,53715,43.073051,-89.40123,none (just cheese),dog,No,night owl,Yes +LEC003,19,Engineering: Mechanical,53715,45,-93,sausage,dog,No,night owl,No +LEC005,21,Business: Finance,53717,40.6461,-111.498,sausage,dog,No,night owl,Yes +LEC001,26,Engineering: Mechanical,53703,41.902782,12.496365,pepperoni,dog,No,night owl,Yes +LEC001,25,Economics,53703,40.712776,-74.005974,pepperoni,dog,No,night owl,Yes +LEC003,18,Mathematics/AMEP,53706,31.230391,121.473701,mushroom,dog,Yes,early bird,No +LEC001,19,Computer Science,53706,48.855709,2.29889,pepperoni,cat,Yes,night owl,Yes +LEC005,17,Science: Biology/Life,53706,-18.766947,46.869106,basil/spinach,dog,Yes,early bird,Maybe +LEC003,19,Business: Information Systems,53711,38.893452,-77.014709,pepperoni,dog,No,early bird,Yes +LEC001,21,Computer Science,53715,16.306652,80.436539,Other,dog,No,night owl,Yes +LEC006,19,Data Science,53703,35.689487,139.691711,sausage,neither,Yes,no preference,Maybe +LEC004,18,Engineering: Industrial,53706,17.385044,78.486671,mushroom,dog,No,early bird,Yes +LEC004,19,Computer Science,53715,37.774929,-122.419418,pepperoni,dog,No,night owl,Maybe +LEC004,19,Data Science,53703,26.2644,20.3052,pepperoni,dog,No,night owl,Yes +LEC005,18,Data Science,53706,40.712776,-74.005974,pepperoni,dog,Yes,no preference,Yes +LEC002,18,Data Science,53706,36,117,Other,dog,No,early bird,Maybe +LEC005,19,Data Science,50703,42.360081,-71.058884,sausage,cat,No,night owl,No +LEC006,19,Computer Science,53711,36.569666,112.218744,pineapple,neither,Yes,early bird,Maybe +LEC005,18,Computer Science,53706,37.54443,-121.95269,pepperoni,dog,No,night owl,Maybe +LEC003,20,Mathematics/AMEP,53715,32.0853,34.781769,mushroom,dog,No,no preference,Yes +LEC003,19,Data Science,53715,42.701847,-84.48217,tater tots,dog,No,night owl,Yes +LEC003,18,Mathematics/AMEP,53706,40.179188,44.499104,Other,dog,Yes,no preference,Yes +LEC002,,Computer Science,53711,2.81375,101.504272,sausage,dog,Yes,no preference,Maybe +LEC001,18,Engineering: Industrial,53715,30.733315,76.779419,green pepper,cat,No,no preference,Yes +LEC003,21,Data Science,53590,7.9519,98.3381,Other,dog,Yes,early bird,Yes +LEC004,19,Data Science,53715,35.69,139.69,mushroom,dog,No,no preference,Maybe +LEC002,19,Data Science,53704,26.473308,50.048218,Other,cat,Yes,night owl,Yes +LEC002,22,Economics,53703,34.052235,-118.243683,pineapple,dog,No,night owl,Yes +LEC006,18,Data Science,53706,19.075983,72.877655,mushroom,dog,Yes,night owl,Yes +LEC003,,Business: Actuarial,53705,39.6336,118.16,basil/spinach,dog,Yes,early bird,Yes +LEC003,18,Data Science,53706,52.370216,4.895168,mushroom,cat,Yes,no preference,No +LEC003,18,Engineering: Mechanical,53706,52.368944,4.891663,pepperoni,cat,No,night owl,No +LEC002,18,Science: Physics,53703,32,118,sausage,neither,No,night owl,No +LEC005,18,Data Science,53706,17.384716,78.409424,mushroom,dog,Yes,night owl,Maybe +LEC003,19,Data Science,53715,3.1569,101.7123,mushroom,cat,No,early bird,No +LEC005,18,Computer Science,53706,43.769562,11.255814,Other,neither,No,night owl,Yes +LEC006,18,Business: Actuarial,53706,48.856613,2.352222,mushroom,cat,No,no preference,Yes +LEC004,20,Business: Actuarial,53711,40.7128,74.006,pepperoni,dog,Yes,early bird,No +LEC005,20,Science: Biology/Life,53703,44.67082,-93.24432,mushroom,dog,No,no preference,Maybe +LEC004,18,Mathematics/AMEP,53706,46.786671,-92.100487,pepperoni,cat,No,early bird,Yes +LEC005,20,Economics,53703,48.856613,2.352222,pepperoni,neither,No,night owl,Maybe +LEC006,18,Business: Finance,53706,40.409264,49.867092,Other,neither,No,early bird,No +LEC004,21,Computer Science,53715,27.993828,120.699364,green pepper,dog,Yes,no preference,No +LEC002,,Computer Science,53706,43.073051,-89.40123,Other,neither,Yes,no preference,Maybe +LEC002,20,Engineering: Mechanical,53706,35.6762,139.6503,sausage,cat,Yes,night owl,Yes +LEC001,20,Economics (Mathematical Emphasis),53703,43.073929,-89.385239,macaroni/pasta,cat,No,night owl,No +LEC002,21,Business: Information Systems,53713,43.03638,-89.40292,pineapple,neither,Yes,night owl,Yes +LEC004,18,Data Science,53706,45.31625,-92.59181,pepperoni,dog,No,night owl,Yes +LEC001,21,Business: Finance,53711,43.073929,-89.385239,pepperoni,dog,No,no preference,Maybe +LEC005,19,Engineering: Mechanical,53715,35.689487,139.691711,pepperoni,dog,No,night owl,Yes +LEC003,18,Computer Science,53706,51.500153,-0.1262362,pepperoni,dog,No,night owl,Yes +LEC002,22,Science: Biology/Life,53711,43.073051,-89.40123,mushroom,cat,No,no preference,No +LEC004,18,Data Science,53706,42.360081,-71.058884,green pepper,dog,No,night owl,Yes +LEC005,19,Engineering: Mechanical,53703,32.8328,117.2713,sausage,neither,Yes,night owl,Yes +LEC003,20,Engineering: Mechanical,53715,44.834,-87.376,none (just cheese),dog,Yes,night owl,No +LEC006,21,Economics,53703,41.902782,12.496365,none (just cheese),dog,No,no preference,Yes +LEC003,25,Data Science,53703,34.693737,135.502167,pineapple,dog,No,early bird,Maybe +LEC003,17,Computer Science,53703,19.075983,72.877655,Other,neither,Yes,no preference,No +LEC002,19,Psychology,53715,30.5928,114.3052,sausage,cat,No,night owl,Yes +LEC001,19,Computer Science,53703,51.507351,-0.127758,sausage,cat,Yes,no preference,Yes +LEC006,17,Engineering: Industrial,53706,55.953251,-3.188267,Other,dog,No,night owl,Yes +LEC005,,Computer Science,53703,43.073051,-89.40123,pineapple,dog,Yes,night owl,No +LEC002,21,Engineering: Mechanical,53705,37.566536,126.977966,mushroom,cat,Yes,no preference,Maybe +LEC002,18,Undecided,53715,48.775845,9.182932,Other,dog,No,night owl,Yes +LEC004,19,Data Science,53703,43,-89,sausage,cat,No,early bird,Maybe +LEC001,21,Science: Biology/Life,53703,36,117,macaroni/pasta,dog,No,night owl,Maybe +LEC002,19,Business: Information Systems,53703,42.360081,-71.058884,pepperoni,dog,No,no preference,Yes +LEC005,19,Computer Science,53706,-8.340539,115.091949,pineapple,dog,Yes,night owl,Maybe +LEC003,20,Business: Information Systems,53726,43.073051,-89.40123,sausage,dog,Yes,night owl,No +LEC003,,Science: Other,53715,39.904202,116.407394,mushroom,cat,No,night owl,Maybe +LEC004,20,Engineering: Biomedical,53715,43.0707,12.6196,tater tots,dog,No,night owl,Maybe +LEC004,19,Engineering: Biomedical,53715,41.878113,-87.629799,mushroom,dog,Yes,night owl,Yes +LEC002,21,Business: Other|Accounting,53703,41.8781,87.6298,pepperoni,cat,No,night owl,No +LEC002,17,Undecided,53706,33.742185,-84.386124,Other,dog,No,no preference,Yes +LEC006,18,Data Science,53558,40.73061,-73.935242,pepperoni,dog,Yes,night owl,No +LEC003,25,Data Science,53705,43.073051,-89.385239,sausage,cat,No,night owl,Maybe +LEC002,18,Data Science,53706,37.34163,-122.05411,sausage,dog,No,night owl,Yes +LEC006,18,Science: Biology/Life,53706,19.21833,72.978088,green pepper,neither,No,no preference,Maybe +LEC002,,Business: Other|business analytics,53703,31.230391,121.473701,none (just cheese),cat,Yes,night owl,Maybe +LEC003,,Data Science,53706,35.719312,139.784546,none (just cheese),neither,Yes,night owl,Yes +LEC002,19,Engineering: Mechanical,53726,47.141041,9.52145,mushroom,dog,No,night owl,Yes +LEC002,,Computer Science,53715,41.8781,87.6298,pepperoni,dog,No,no preference,Maybe +LEC002,26,Science: Other|animal sciences,53705,25.204849,55.270782,pepperoni,dog,No,no preference,Maybe +LEC003,21,Mathematics,53704,61.218056,-149.900284,green pepper,cat,Yes,early bird,Maybe +LEC003,22,Engineering: Other,53703,49.28273,-123.120735,macaroni/pasta,cat,No,early bird,Maybe +LEC001,18,Engineering: Other,53706,41.902782,12.496365,pepperoni,dog,No,night owl,Yes +LEC003,20,Engineering: Mechanical,53726,39.81059,-74.71795,basil/spinach,dog,No,early bird,Yes +LEC003,21,Health Promotion and Health Equity,53711,37.2982,113.0263,pepperoni,dog,No,early bird,No +LEC003,20,Engineering: Mechanical,53703,38.722252,-9.139337,mushroom,dog,No,night owl,Yes +LEC003,19,Engineering: Mechanical,53714,43,-89.4,none (just cheese),dog,No,night owl,Yes +LEC002,19,Engineering: Industrial,53703,41.878,-87.63,pepperoni,dog,Yes,night owl,Yes +LEC003,18,Computer Science,53706,43.073051,-89.40123,mushroom,neither,No,night owl,Yes +LEC001,18,Engineering: Industrial,53706,19.655041,-101.169891,pepperoni,dog,Yes,no preference,Maybe +LEC005,20,Engineering: Mechanical,53703,26.147,-81.795,pepperoni,dog,Yes,early bird,Yes +LEC006,18,Business: Other,53706,51.507,-0.128,sausage,dog,No,no preference,No +LEC005,19,Business: Other,53706,43,-89,pepperoni,dog,Yes,no preference,Yes +LEC004,19,Engineering: Mechanical,53705,34.869709,-111.760902,pepperoni,cat,No,no preference,Maybe +LEC005,21,Business: Finance,53703,3.15443,101.715103,pepperoni,cat,No,night owl,Yes +LEC005,18,Engineering: Mechanical,53706,44.655991,-93.242752,none (just cheese),dog,Yes,night owl,Yes +LEC003,18,Art,53706,36.25,138.25,macaroni/pasta,dog,No,night owl,Yes +LEC005,19,Data Science,53715,41.94288,-87.68667,pepperoni,dog,Yes,night owl,Yes +LEC005,18,Data Science,53703,44.2795,73.9799,pepperoni,dog,Yes,night owl,No +LEC002,19,Mathematics/AMEP,53715,37.80718,23.734864,pineapple,cat,No,night owl,Yes +LEC004,18,Computer Science,53706,35.689487,139.691711,pepperoni,cat,No,night owl,Yes +LEC006,18,Engineering: Mechanical,53706,43.0826,-97.16051,pepperoni,dog,No,no preference,Yes +LEC006,18,Engineering: Other,53715,37.441883,-122.143021,mushroom,dog,Yes,night owl,Maybe +LEC006,18,Engineering: Mechanical,53706,44.883,-87.86291,pepperoni,dog,No,early bird,Yes +LEC004,19,Engineering: Mechanical,53706,40.73598,-74.37531,none (just cheese),dog,Yes,early bird,No +LEC001,20,Business: Actuarial,53703,42.28,-83.74,mushroom,dog,No,night owl,Yes +LEC003,17,Engineering: Mechanical,53706,37.98381,23.727539,pineapple,dog,Yes,night owl,No +LEC004,18,Computer Science,53706,40.27385,-74.75972,sausage,dog,Yes,night owl,Yes +LEC002,19,Economics,53703,90.1994,38.627,none (just cheese),dog,No,early bird,Yes +LEC002,21,"Mathematics, Data Science",53703,30.572815,104.066803,sausage,dog,No,night owl,Maybe +LEC002,,Computer Science,53717,36,139,mushroom,dog,Yes,early bird,Yes +LEC006,19,Science: Biology/Life,53715,45.289143,-87.021847,none (just cheese),cat,No,night owl,Maybe +LEC002,21,Mathematics/AMEP,53703,20.878332,-156.682495,pepperoni,cat,No,night owl,Yes +LEC003,22,Mathematics/AMEP,53715,44.481586,-88.005981,pepperoni,neither,No,night owl,Yes +LEC006,18,Data Science,53706,43.073051,-89.40123,pepperoni,dog,No,night owl,Yes +LEC005,18,Computer Science,53706,30.733315,76.779419,none (just cheese),dog,No,night owl,Yes +LEC005,20,Mathematics/AMEP,53703,38.837702,-238.449497,pepperoni,dog,No,night owl,Yes +LEC005,,Computer Science,53593,50.116322,-122.957359,sausage,dog,No,night owl,Yes +LEC005,18,Computer Science,53715,43.059023,-89.296875,pepperoni,cat,No,night owl,Maybe +LEC005,19,Engineering: Industrial,53703,22.2255,-159.4835,pepperoni,cat,Yes,night owl,Yes +LEC005,18,Engineering: Biomedical,53593,43.073051,-89.40123,green pepper,cat,No,night owl,Maybe +LEC005,20,Engineering: Mechanical,53715,41.283211,-70.099228,sausage,dog,No,no preference,Maybe +LEC005,18,Data Science,53715,25.26741,55.292679,basil/spinach,cat,Yes,early bird,Yes +LEC005,19,Business: Other,53726,43.038902,-87.906471,pepperoni,dog,No,night owl,Yes +LEC002,,Undecided,53703,30.5723,104.0665,sausage,dog,No,night owl,Yes +LEC006,18,Engineering: Mechanical,53706,30.2672,97.7431,pepperoni,dog,No,night owl,No +LEC006,20,Data Science,53703,36.731651,-119.785858,Other,dog,Yes,night owl,Yes +LEC005,18,Computer Science,53706,43.038902,-87.906471,pepperoni,dog,No,night owl,Yes +LEC004,,Business: Finance,53703,33.8688,151.2093,green pepper,dog,Yes,night owl,Yes +LEC005,18,Science: Other|Science: Genetics and Genomics,53715,43.073051,-89.40123,mushroom,dog,No,no preference,Yes +LEC003,19,Engineering: Mechanical,53715,44.90767,-93.183594,basil/spinach,dog,No,night owl,Maybe +LEC006,18,Business: Finance,53706,-33.448891,-70.669266,macaroni/pasta,dog,No,night owl,Yes +LEC006,17,Business: Finance,53706,43.296482,5.36978,pineapple,dog,No,night owl,Yes +LEC006,21,Mathematics/AMEP,53703,30.572815,104.066803,green pepper,dog,No,no preference,Maybe +LEC005,20,Engineering: Mechanical,53703,41.99884,-87.68828,Other,dog,No,no preference,No +LEC001,19,Business: Information Systems,53703,39.481655,-106.038353,macaroni/pasta,dog,Yes,night owl,Yes +LEC004,19,Engineering: Mechanical,53703,41.883228,-87.632401,pepperoni,dog,No,no preference,Maybe +LEC004,18,Engineering: Industrial,53706,41.878113,41.878113,pepperoni,dog,No,night owl,No +LEC004,19,Engineering: Mechanical,53703,28.228209,112.938812,none (just cheese),neither,Yes,early bird,Yes +LEC003,18,Data Science,89451,34.42083,-119.698189,green pepper,dog,No,early bird,No +LEC003,19,Computer Science,53703,41.3874,2.1686,pepperoni,cat,No,early bird,No +LEC005,20,Science: Biology/Life,53703,32.05196,118.77803,sausage,neither,No,night owl,Yes +LEC004,19,Engineering: Mechanical,53706,50.075539,14.4378,none (just cheese),neither,No,night owl,Yes +LEC003,20,Statistics (actuarial route),53715,43.134315,-88.220062,sausage,dog,No,early bird,No +LEC004,19,Computer Science,53706,17.385044,78.486671,pepperoni,neither,Yes,night owl,Yes +LEC002,18,Engineering: Mechanical,53706,53707,-88.415382,Other,dog,No,night owl,Yes +LEC004,19,Computer Science,53706,45.440845,12.315515,sausage,dog,No,night owl,Yes +LEC004,18,Computer Science,53706,55.953251,-3.188267,Other,dog,No,night owl,Maybe +LEC004,18,Engineering: Mechanical,53706,33.8902,-118.39848,sausage,dog,Yes,night owl,Yes +LEC001,20,Business: Other|Business: Accounting,53703,31.230391,121.473701,pepperoni,cat,Yes,no preference,No +LEC004,18,Data Science,53706,39.512611,116.677063,pepperoni,dog,No,night owl,Maybe +LEC003,18,Undecided,53706,41.256538,95.934502,Other,dog,No,no preference,Yes +LEC003,18,Data Science,53706,19.075983,72.877655,pepperoni,dog,No,night owl,No +LEC003,22,Economics,53703,40.753685,-73.999161,green pepper,dog,No,night owl,Maybe +LEC003,18,Data Science,53706,51.507351,-0.127758,pepperoni,cat,No,night owl,Yes +LEC003,,Engineering: Mechanical,53706,42.44817,-71.224716,pepperoni,cat,Yes,night owl,Maybe +LEC003,17,Engineering: Other|Computer Engineering,53706,42.36,-71.059,basil/spinach,neither,No,early bird,Maybe +LEC003,21,Business: Actuarial,53706,32.715736,-117.161087,green pepper,dog,Yes,night owl,No +LEC003,,Engineering: Other|Computer engineering,53706,35.689487,139.691711,Other,cat,No,night owl,Yes +LEC003,18,Mathematics/AMEP,53715,41.385063,2.173404,pepperoni,cat,Yes,no preference,Maybe +LEC003,20,Computer Science,53705,30.274084,120.155067,mushroom,cat,No,night owl,Yes +LEC005,,Computer Science,53705,51.507351,-0.127758,basil/spinach,dog,No,night owl,Yes +LEC003,18,Computer Science,53706,45.45676,15.29662,sausage,dog,Yes,early bird,Yes +LEC003,18,Engineering: Industrial,53706,18.92421,-99.221565,green pepper,dog,Yes,night owl,Yes +LEC004,18,Engineering: Other|Material Science Engineering,53703,38.941631,-119.977219,pepperoni,dog,Yes,night owl,Yes +LEC002,21,Economics,53705,25.03841,121.5637,pepperoni,cat,No,night owl,Maybe +LEC005,,Civil engineering - hydropower engineering,53705,34,113,pineapple,neither,No,night owl,Maybe +LEC005,18,Computer Science,53706,40.7,-74.005,pepperoni,cat,No,early bird,No +LEC001,19,Engineering: Mechanical,53706,35.142441,-223.154297,green pepper,neither,Yes,night owl,Yes +LEC006,18,Data Science,53706,43.05891,-88.007462,pepperoni,dog,Yes,night owl,Yes +LEC006,,Engineering: Mechanical,53706,37.566536,126.977966,pepperoni,dog,Yes,night owl,No +LEC005,18,Data Science,53706,36.393154,25.46151,none (just cheese),dog,No,night owl,No +LEC001,,Engineering: Mechanical,53715,19.8968,155.5828,pepperoni,dog,No,night owl,No +LEC002,19,Engineering: Biomedical,53706,48.494904,-113.979034,macaroni/pasta,cat,No,night owl,Yes +LEC005,18,Engineering: Mechanical,53706,41.88998,12.49426,pineapple,dog,Yes,night owl,Yes +LEC003,17,Data Science,53706,-7.257472,112.75209,pineapple,dog,Yes,early bird,Yes +LEC005,19,Economics,53703,40.592331,-111.820152,none (just cheese),dog,Yes,night owl,Maybe +LEC005,19,Data Science,53704,38.722252,-9.139337,pepperoni,dog,No,night owl,Yes +LEC003,,Computer Science,53703,64.963051,-19.020836,pineapple,dog,No,no preference,Maybe +LEC002,20,Economics,53703,43.769562,11.255814,mushroom,dog,No,night owl,Yes +LEC004,20,Business: Actuarial,53715,44.834209,-87.376266,sausage,dog,No,no preference,Yes +LEC005,21,Economics,53703,37.751824,-122.420105,green pepper,cat,No,night owl,Yes +LEC004,22,Economics,53703,56.490669,4.202646,mushroom,dog,No,no preference,Yes +LEC004,18,Engineering: Mechanical,53706,44.9058,-93.28535,pepperoni,cat,Yes,night owl,Maybe +LEC004,19,Data Science,53703,41.878113,-87.629799,sausage,dog,No,night owl,Yes +LEC001,21,Computer Science,53703,43.21518,-87.94241,pepperoni,dog,No,no preference,Maybe +LEC004,24,Science: Chemistry,53703,32.715736,-117.161087,mushroom,dog,Yes,night owl,Maybe +LEC005,19,Engineering: Mechanical,53715,39.412327,-77.425461,pepperoni,cat,Yes,early bird,Yes +LEC004,20,Statistics,53703,43.07391,-89.39356,pepperoni,dog,No,early bird,Maybe +LEC005,21,Business: Finance,53703,38.178127,-92.781052,mushroom,dog,No,night owl,Yes +LEC004,18,Engineering: Mechanical,53706,35.689487,139.691711,pepperoni,dog,No,no preference,Yes +LEC005,18,Data Science,60521,41.9,87.6,pepperoni,dog,Yes,night owl,Yes +LEC005,23,Business: Information Systems,53558,43.073051,-89.40123,pepperoni,dog,Yes,early bird,No +LEC004,18,Engineering: Mechanical,53706,43.739507,7.426706,pepperoni,dog,No,night owl,Yes +LEC005,21,Data Science,53703,25,121,pepperoni,dog,No,night owl,Yes +LEC005,20,Business: Information Systems,53703,43.073051,-89.40123,pepperoni,dog,Yes,night owl,Yes +LEC004,,Engineering: Biomedical,53715,41.385063,2.173404,pepperoni,dog,Yes,no preference,No +LEC004,18,Communication arts,53715,22.543097,114.057861,mushroom,cat,Yes,early bird,Yes +LEC001,22,Engineering: Mechanical,53703,47.497913,19.040236,pepperoni,dog,No,no preference,No +LEC005,19,Computer Science,54706,34.05,-118.24,sausage,cat,Yes,night owl,Yes +LEC005,18,Engineering: Biomedical,53706,46.818188,8.227512,pineapple,dog,Yes,no preference,Yes +LEC004,19,Engineering: Mechanical,53715,42.36,-71.058884,pepperoni,dog,Yes,no preference,Yes +LEC005,21,Data Science,53703,36.4,117,pineapple,dog,Yes,night owl,Yes +LEC005,19,Engineering: Mechanical,53704,35.6762,139.6503,sausage,dog,No,night owl,Maybe +LEC004,20,Economics,53703,44.885,-93.147,pepperoni,dog,No,early bird,Yes +LEC004,20,Health Promotion and Health Equity,53704,48.8566,2.349014,pepperoni,dog,No,night owl,Yes +LEC004,19,Engineering: Mechanical,53715,43.073051,-89.40123,sausage,dog,Yes,no preference,Yes +LEC001,20,Business andministration,53703,37.389091,-5.984459,pineapple,dog,Yes,night owl,Maybe +LEC003,23,Mathematics/AMEP,53715,24.88,102.8,pineapple,dog,Yes,early bird,Yes +LEC002,20,Engineering: Industrial,53703,44.389,12.9908,sausage,dog,No,early bird,Maybe +LEC005,20,Education,53703,41.878113,-87.629799,basil/spinach,cat,Yes,early bird,No +LEC003,19,Science: Biology/Life,53703,41.38,2.17,pepperoni,dog,Yes,no preference,Maybe +LEC006,18,Pre-business,53706,41.8781,87.6298,pepperoni,dog,Yes,night owl,Yes +LEC004,20,Business: Finance,53706,41.10475,-80.64916,basil/spinach,dog,Yes,night owl,Yes +LEC004,20,Statistics,53703,42.360081,-71.058884,pepperoni,dog,No,night owl,Yes +LEC003,18,Engineering: Mechanical,53706,24.5554,81.7842,pepperoni,dog,No,early bird,Maybe +LEC004,19,Data Science,53703,38.72,75.07,none (just cheese),dog,Yes,early bird,Yes +LEC006,20,Engineering: Mechanical,53705,30.572815,104.066803,mushroom,cat,Yes,no preference,Maybe +LEC003,20,Mathematics/AMEP,53726,43.07199,-89.42629,mushroom,dog,No,night owl,Yes +LEC004,20,Engineering: Mechanical,53705,48,7.85,pepperoni,dog,Yes,night owl,No +LEC001,20,Computer Science,53703,40.7128,74.006,pepperoni,dog,Yes,night owl,Maybe +LEC003,18,Business: Actuarial,53719,14.599512,120.984222,pineapple,cat,Yes,no preference,Maybe +LEC003,17,Computer Science,53715,37.38522,-122.114128,Other,dog,No,night owl,No +LEC003,18,Computer Science,53706,37.386051,-122.083855,sausage,dog,Yes,no preference,Maybe +LEC004,23,Business: Finance,53703,31.230391,121.473701,mushroom,neither,No,night owl,No +LEC004,21,Engineering: Industrial,53703,37.94048,-78.63664,Other,dog,Yes,night owl,Yes +LEC002,21,Mathematics/AMEP,53715,42.360081,-71.058884,mushroom,neither,Yes,early bird,Yes +LEC002,18,Engineering: Industrial,53715,40.712776,-74.005974,pineapple,dog,Yes,night owl,Yes +LEC001,22,Engineering: Mechanical,53726,36.97447,122.02899,pepperoni,dog,No,no preference,Yes +LEC005,,Mathematics/AMEP,53715,36.651199,117.120094,mushroom,neither,No,night owl,Yes +LEC005,18,Mathematics/AMEP,53706,46.482525,30.723309,basil/spinach,dog,No,early bird,Yes +LEC006,20,Engineering: Industrial,53703,42.102901,-88.368896,pepperoni,dog,No,night owl,Maybe +LEC006,18,Computer Science,53706,-31.959153,-244.161255,green pepper,dog,No,night owl,Yes +LEC002,24,Computer Science,53715,30.704852,104.003904,mushroom,neither,Yes,no preference,Maybe +LEC005,19,Engineering: Mechanical,53705,40.712776,-74.005974,pepperoni,dog,No,early bird,No +LEC004,22,Science: Biology/Life,53705,39.758161,39.758161,pepperoni,cat,No,early bird,Yes +LEC005,20,Statistics,53703,43.073051,-89.40123,sausage,dog,Yes,night owl,Yes +LEC001,19,Data Science,53703,41,87,sausage,dog,No,no preference,No +LEC004,20,Engineering: Mechanical,53726,58.2996,14.4444,sausage,cat,No,night owl,Maybe +LEC005,18,Engineering: Mechanical,53562,1.3521,103.8198,green pepper,cat,No,early bird,Maybe +LEC002,19,Engineering: Mechanical,53703,44.46534,-72.684303,green pepper,cat,Yes,night owl,Yes +LEC002,20,Engineering: Industrial,53726,43.038902,-87.906471,pepperoni,dog,No,night owl,Yes +LEC006,18,Business: Actuarial,53706,45.464203,9.189982,pepperoni,cat,Yes,night owl,Yes +LEC006,18,Computer Science,53715,30.58198,114.268066,sausage,cat,Yes,early bird,Maybe +LEC004,19,Business: Finance,53706,41.878113,-87.629799,pepperoni,dog,No,early bird,No +LEC005,18,Business: Finance,53706,40.416775,-3.70379,pepperoni,dog,Yes,early bird,No +LEC001,20,Science: Other|Environmental Science,53715,41.878113,-87.629799,green pepper,cat,No,early bird,No +LEC002,22,Computer Science,53715,42,-71,mushroom,cat,No,night owl,Maybe +LEC001,24,Economics,53703,40,-90,pineapple,dog,No,night owl,Yes +LEC006,19,Business: Information Systems,53715,40.712776,-74.005974,basil/spinach,dog,No,night owl,Yes +LEC002,19,Data Science,53703,33.4942,89.4959,sausage,dog,No,night owl,Maybe +LEC003,20,Engineering: Mechanical,53715,43.02833,-87.971467,pepperoni,neither,Yes,night owl,Maybe +LEC001,,Data Science,53706,40.416775,-3.70379,none (just cheese),dog,Yes,no preference,Yes +LEC003,19,Engineering: Mechanical,53715,43.07,-89.4,pepperoni,dog,No,no preference,Maybe +LEC006,18,Data Science,53706,46.683334,7.85,mushroom,dog,Yes,no preference,No +LEC003,19,Engineering: Biomedical,53703,31.046051,34.851612,Other,dog,No,night owl,Maybe +LEC003,18,Data Science,53705,31.23,121.47,mushroom,dog,Yes,night owl,Maybe +LEC005,19,Engineering: Mechanical,53703,42.00741,-87.69384,mushroom,dog,No,night owl,Yes +LEC001,37,Data Science,53718,43.073051,-89.40123,green pepper,dog,No,no preference,Maybe +LEC003,20,History,53703,31.62,74.8765,Other,cat,Yes,early bird,No +LEC002,20,Economics,53703,38.627003,-90.199402,mushroom,dog,Yes,night owl,Yes +LEC005,20,Engineering: Mechanical,53703,40,-74,none (just cheese),dog,Yes,early bird,No +LEC005,18,Data Science,53706,23.7275,37.9838,pepperoni,dog,Yes,early bird,Yes +LEC004,20,Mathematics/AMEP,53703,34.746613,113.625328,sausage,neither,Yes,early bird,Maybe +LEC001,21,Data Science,53703,30.572351,121.776761,pepperoni,cat,No,night owl,Maybe +LEC005,,Data Science,53715,35.72,-78.89,pepperoni,dog,No,night owl,Yes +LEC005,20,Information science,53590,44.92556,-89.51539,pepperoni,dog,No,night owl,Yes +LEC002,22,Mathematics/AMEP,53704,40.76078,-111.891045,pineapple,dog,Yes,night owl,No +LEC001,22,consumer behavior and marketplace studies,53715,43.653225,-79.383186,mushroom,cat,Yes,night owl,No +LEC004,22,Computer Science,53703,10.315699,123.885437,sausage,dog,Yes,early bird,No +LEC002,20,Conservation Biology,53703,40.16573,-105.101189,pineapple,dog,No,night owl,Yes +LEC005,20,Computer Science,53726,39.4817,106.0384,Other,neither,Yes,early bird,Yes +LEC005,19,Mathematics/AMEP,53715,48.85,2.35,sausage,cat,No,night owl,Maybe +LEC005,19,Data Science,53706,30.572815,104.066803,mushroom,neither,No,early bird,Yes +LEC004,24,Business: Information Systems,53703,37.566536,126.977966,tater tots,dog,No,early bird,No +LEC004,19,Economics,53703,52.877491,-118.08239,pepperoni,dog,No,night owl,Yes +LEC004,21,Computer Science,53703,28.538336,-81.379234,pepperoni,dog,No,night owl,Yes +LEC006,18,Data Science,53706,41.4,-81.9,sausage,dog,Yes,night owl,Maybe +LEC002,21,Science: Biology/Life,53703,43.038902,-87.906471,none (just cheese),neither,No,no preference,Yes +LEC004,21,Data Science,53703,3.86,-54.2,macaroni/pasta,dog,No,early bird,No +LEC004,19,Engineering: Mechanical,53715,39.952583,-75.165222,macaroni/pasta,dog,Yes,no preference,Yes +LEC004,20,Science: Other,53715,21.3099,157.8581,pineapple,dog,No,early bird,Yes +LEC005,21,Data Science,48823,11.451419,19.81,mushroom,neither,No,night owl,Maybe +LEC001,20,Computer Science,53715,41,-87,Other,dog,No,night owl,Yes +LEC005,21,Data Science,53705,42.3601,71.0589,pepperoni,dog,Yes,no preference,Yes +LEC005,19,Computer Science,53706,48.856613,2.352222,pepperoni,dog,Yes,night owl,Maybe +LEC001,17,Statistics,53715,43.0722,89.4008,pineapple,dog,No,early bird,Maybe +LEC001,20,Economics,53715,27.99942,120.66682,pepperoni,dog,Yes,early bird,No +LEC001,19,Mathematics/AMEP,53711,45.85038,-84.616989,pineapple,cat,No,night owl,Yes +LEC004,20,Computer Science,53711,40.842358,111.749992,pineapple,cat,No,night owl,Maybe +LEC003,18,Engineering: Mechanical,53706,39.738449,-104.984848,pepperoni,dog,No,early bird,Yes +LEC003,21,Statistics,53705,41.878113,-87.629799,macaroni/pasta,dog,No,night owl,Yes +LEC006,19,Engineering: Industrial,60540,41.878113,-87.629799,none (just cheese),dog,No,night owl,No +LEC004,19,Engineering: Mechanical,53703,40.6263,14.3758,mushroom,dog,No,early bird,No +LEC004,22,Engineering: Other|Chemical Engineering,53703,48.13913,11.58022,macaroni/pasta,dog,Yes,night owl,Yes +LEC004,21,Economics (Mathematical Emphasis),53703,52.520008,13.404954,pepperoni,dog,No,night owl,No +LEC004,25,Science: Other|Biophysics PhD,53705,30.21161,-97.80999,pineapple,dog,No,night owl,Yes +LEC003,19,Computer Science,53716,25.49443,-103.59581,pepperoni,cat,No,no preference,Yes +LEC003,19,Data Science,53706,64.963051,-19.020836,pineapple,dog,No,no preference,No +LEC006,19,Computer Science,53706,41.878113,-87.629799,pepperoni,cat,No,night owl,Maybe +LEC001,23,Economics,53703,43.07348,-89.38089,pepperoni,dog,No,night owl,Yes +LEC001,29,Business: Other|Technology Strategy/ Product Management,53705,37.386051,-122.083855,Other,cat,No,no preference,Maybe +LEC002,,Engineering: Mechanical,53706,14.34836,100.576271,pepperoni,neither,No,no preference,Maybe +LEC004,20,Undecided,53715,37.566536,126.977966,none (just cheese),neither,No,night owl,Yes +LEC006,19,Engineering: Mechanical,53703,27.993828,120.699364,sausage,neither,No,no preference,Yes +LEC002,,Computer Science,53705,25.032969,121.565414,pineapple,dog,No,night owl,Yes +LEC005,20,Mathematics/AMEP,53703,32.060253,118.796875,pineapple,cat,Yes,night owl,Maybe +LEC003,,Business: Other,53706,50.07553,14.4378,pepperoni,dog,Yes,night owl,Maybe +LEC006,21,Data Science,57303,32.715736,-117.161087,macaroni/pasta,cat,Yes,no preference,Yes +LEC006,18,Engineering: Mechanical,53706,45.5579,94.1632,sausage,dog,No,night owl,Yes +LEC001,18,Engineering: Biomedical,53715,43.073051,-89.40123,sausage,dog,No,early bird,Yes +LEC005,19,Engineering: Mechanical,53706,38.571739,-109.550797,pepperoni,cat,No,night owl,Yes +LEC003,18,Engineering: Mechanical,53706,41.902782,12.496365,pepperoni,dog,Yes,night owl,No +LEC002,21,Data Science,53711,120,30,sausage,dog,Yes,night owl,Maybe +LEC004,18,Engineering: Biomedical,53706,40.014984,-105.270546,green pepper,dog,No,night owl,Yes +LEC004,20,Engineering: Mechanical,53715,53.2779,6.1058,sausage,dog,Yes,no preference,Yes +LEC003,17,Science: Physics,53706,50.088153,14.399437,Other,cat,No,night owl,Yes +LEC002,19,Engineering: Industrial,53705,35.084385,-106.650421,pineapple,cat,No,night owl,Yes +LEC003,20,Engineering: Mechanical,53703,44.501343,-88.06221,pepperoni,dog,No,night owl,Yes +LEC003,18,Engineering: Mechanical,53703,45.659302,-92.466164,macaroni/pasta,dog,No,no preference,Maybe +LEC003,19,Data Science,53703,16.896721,42.5536,none (just cheese),neither,No,early bird,Maybe +LEC001,18,Data Science,53703,23.885942,45.079163,mushroom,neither,No,early bird,Maybe +LEC006,19,Engineering: Mechanical,53703,55.953251,-3.188267,mushroom,cat,Yes,night owl,Yes +LEC001,30,Business: Other,53705,43.07175,-89.46498,pineapple,cat,No,early bird,No +LEC006,18,Political Science,53706,39.640263,-106.374191,green pepper,dog,No,early bird,No +LEC005,23,Business: Information Systems,53705,27.99,120.69,green pepper,dog,No,night owl,No +LEC003,18,Graphic Design,53706,40.713051,-74.007233,Other,dog,Yes,early bird,Yes +LEC002,21,Economics,53715,37.369171,-122.112473,mushroom,dog,No,night owl,No +LEC005,18,Computer Science,53706,21.3099,157.8581,pepperoni,cat,No,night owl,Yes +LEC002,19,Business: Other|Marketing,53706,59.913868,10.752245,macaroni/pasta,dog,No,night owl,Maybe +LEC003,20,Cartography and GIS,53726,43.0722,89.4008,sausage,cat,No,early bird,Maybe +LEC005,21,Economics,53705,25.032969,120.960518,sausage,dog,Yes,night owl,Maybe +LEC005,19,Engineering: Industrial,53703,42.03992,87.67732,sausage,dog,Yes,night owl,Yes +LEC003,,Computer Science,53706,35.443081,139.362488,sausage,dog,Yes,night owl,Yes +LEC002,22,Sociology,53703,53.483959,-2.244644,pepperoni,dog,No,night owl,Yes +LEC002,18,Undecided,53706,43.073051,-89.40123,pineapple,dog,Yes,night owl,Yes +LEC004,19,Engineering: Biomedical,53706,-37.81,144.96,sausage,dog,Yes,night owl,Yes +LEC005,21,Mathematics/AMEP,53703,22.542883,114.062996,pepperoni,cat,No,no preference,Maybe +LEC002,20,Statistics,53715,23,113,pineapple,dog,No,night owl,Maybe +LEC001,20,Business: Other|Consumer Behavior and Marketplace Studies,53703,40.76078,-111.891045,green pepper,dog,Yes,early bird,Maybe +LEC001,21,Data Science,53705,40.712776,-74.005974,pepperoni,cat,No,night owl,Maybe +LEC002,19,Engineering: Mechanical,53703,26.345631,-81.779083,pepperoni,dog,Yes,night owl,Yes +LEC004,19,Engineering: Mechanical,53715,40.62632,14.37574,pepperoni,dog,No,no preference,Maybe +LEC003,18,Engineering: Other,53706,40.73061,-73.9808,mushroom,dog,No,night owl,No +LEC006,18,Atmospheric Sciences,53706,39.74,-104.99,sausage,dog,Yes,night owl,Maybe +LEC002,20,Data Science,53703,43.073051,-89.40123,macaroni/pasta,dog,Yes,early bird,Yes +LEC006,18,Engineering: Mechanical,53706,32.7157,117.1611,pineapple,dog,Yes,night owl,Yes +LEC004,18,Computer Science,53706,51.507351,-0.127758,green pepper,dog,No,night owl,Yes +LEC004,19,Education,53715,32.715736,-117.161087,pepperoni,dog,No,night owl,Yes +LEC004,26,Languages,53703,50.11,8.68,sausage,dog,No,no preference,Yes +LEC005,21,Economics (Mathematical Emphasis),53715,55.676098,12.568337,pepperoni,cat,No,night owl,Maybe +LEC004,53,Mathematics/AMEP,53555,47.6,-122.3,mushroom,dog,No,night owl,Yes +LEC004,17,Computer Science,53706,43.073051,-89.40123,Other,dog,No,night owl,Yes +LEC006,18,Engineering Mechanics (Aerospace Engineering),53706,43.038902,-87.906471,pepperoni,cat,No,night owl,No +LEC002,20,Engineering: Mechanical,53715,23.7157,117.1611,none (just cheese),cat,Yes,night owl,Maybe +LEC002,22,Science: Other|Psychology,53703,37.82034,-122.47872,mushroom,dog,No,early bird,No +LEC002,22,Computer Science,53705,34.052235,-118.243683,basil/spinach,dog,No,night owl,Yes +LEC004,26,Science: Biology/Life,53715,33.962425,-83.378622,pineapple,neither,Yes,no preference,Yes +LEC002,18,Economics,53715,41.878113,-87.629799,basil/spinach,cat,No,night owl,Maybe +LEC004,24,Engineering: Other|Civil and Environmental Engineering,53703,47.5,19.04,pepperoni,dog,Yes,early bird,Maybe +LEC004,19,Engineering: Biomedical,53711,40.712776,74.005974,pineapple,dog,No,early bird,No +LEC001,19,Engineering: Mechanical,53715,43,-90,sausage,dog,No,no preference,Maybe +LEC006,18,Data Science,94707,37.566536,126.977966,pineapple,dog,Yes,night owl,Yes +LEC006,20,Undecided,53719,62.2001,58.9638,Other,cat,Yes,night owl,Maybe +LEC002,18,Engineering: Mechanical,53706,44.977753,-93.265015,none (just cheese),cat,Yes,night owl,Yes +LEC001,20,Business: Information Systems,53711,34.385204,132.455292,pepperoni,dog,No,early bird,Yes +LEC005,19,Engineering: Biomedical,53703,41.8781,87.6298,macaroni/pasta,dog,No,night owl,No +LEC002,19,Engineering: Biomedical,53703,37.98381,23.727539,macaroni/pasta,dog,No,night owl,Maybe +LEC005,18,Data Science,53706,40,74,pepperoni,dog,No,no preference,Yes +LEC002,19,Engineering: Mechanical,53711,41.95881,-85.32536,Other,dog,No,no preference,No +LEC005,18,Data Science,53706,32.715736,-117.161087,sausage,dog,No,night owl,Maybe +LEC002,18,Undecided,53706,43.060791,-88.119217,Other,neither,No,early bird,Yes +LEC004,21,Science: Other,53715,27.963989,-82.799957,pineapple,dog,No,night owl,Yes +LEC006,18,Data Science,53706,1.352083,103.819839,sausage,dog,No,night owl,Yes +LEC005,19,Data Science,53703,-33.92487,18.424055,none (just cheese),dog,No,night owl,Yes +LEC001,22,International Studies,53703,48.13913,11.58022,none (just cheese),cat,No,night owl,Yes +LEC001,19,Engineering: Other,53715,38.331581,-75.086159,macaroni/pasta,dog,No,no preference,Yes +LEC002,19,Business: Information Systems,53715,44.5,-88,pepperoni,dog,No,night owl,Yes +LEC002,19,Data Science,53705,21.59143,-158.01743,Other,dog,Yes,night owl,Yes +LEC002,,Business: Finance,53593,45.813042,9.080931,Other,dog,No,early bird,Yes +LEC003,21,Business: Information Systems,53703,43.612255,-110.705429,sausage,dog,Yes,no preference,No +LEC001,21,Data Science,53703,41.00824,28.978359,pepperoni,cat,Yes,early bird,No +LEC002,18,Engineering: Biomedical,53706,17.385044,78.486671,green pepper,dog,No,night owl,Yes +LEC006,21,Political Science,53703,45.512,-122.658,sausage,dog,No,night owl,Yes +LEC003,18,Engineering: Mechanical,53706,41.902782,12.496365,pepperoni,dog,No,early bird,Maybe +LEC005,19,Engineering: Mechanical,53703,-36.848461,174.763336,none (just cheese),dog,Yes,no preference,No +LEC002,,Data Science,53713,30.316496,78.032188,mushroom,cat,Yes,night owl,Yes +LEC002,,Business: Information Systems,53703,35.689487,139.691711,sausage,dog,Yes,night owl,Maybe +LEC005,18,Data Science,53706,52.520008,13.404954,pineapple,dog,Yes,early bird,No +LEC005,19,Computer Science,53706,41.3784,2.1686,sausage,cat,No,no preference,Yes +LEC003,20,Engineering: Mechanical,53715,41.878113,-87.629799,Other,cat,No,night owl,Yes +LEC004,20,Computer Science,53703,43.073051,-89.40123,none (just cheese),cat,Yes,night owl,Yes +LEC006,23,Data Science,53703,17.05423,-96.713226,basil/spinach,dog,No,night owl,Maybe +LEC001,19,Engineering: Mechanical,53706,43.77195,-88.43383,pepperoni,dog,No,early bird,Maybe +LEC001,20,Economics,53726,42.92,-87.96,pepperoni,dog,Yes,early bird,No +LEC001,19,Engineering: Mechanical,53715,29.424122,-98.493629,mushroom,dog,Yes,early bird,Maybe +LEC004,18,Computer Science,53706,30.267153,-97.743057,pepperoni,dog,No,night owl,Yes +LEC005,,Computer Science,53715,44.9778,93.265,sausage,cat,Yes,night owl,Yes +LEC003,19,Science: Other,53715,41.9028,12.4964,pepperoni,dog,No,night owl,Yes +LEC004,19,Data Science,53715,61.2176,149.8997,pineapple,cat,Yes,night owl,Maybe +LEC001,20,Agricultural and Applied Economics,53703,-22.932924,-47.073845,pineapple,cat,Yes,early bird,Maybe +LEC003,18,Computer Science,53706,52.370216,4.895168,basil/spinach,cat,No,night owl,Maybe +LEC003,19,Engineering: Industrial,53703,5.838715,3.603516,pepperoni,dog,Yes,early bird,No +LEC005,19,Engineering: Mechanical,53715,48.502281,-113.988533,sausage,dog,No,night owl,Yes +LEC004,41,Languages,53705,29.654839,91.140549,pepperoni,cat,No,night owl,Yes +LEC002,21,Business: Other|MHR,53703,44,125,Other,neither,No,night owl,Maybe +LEC005,24,Business: Other,53703,43.073051,-89.40123,pineapple,dog,No,night owl,Yes +LEC002,18,Undecided,53706,46.786671,-92.100487,none (just cheese),cat,No,no preference,Yes +LEC004,18,Engineering: Biomedical,53705,35.689487,139.691711,basil/spinach,dog,No,night owl,Yes +LEC001,25,Medicine,53703,48.38203,-123.537827,basil/spinach,dog,Yes,early bird,No +LEC004,19,Science: Biology/Life,53705,46.009991,-91.482094,pineapple,dog,No,early bird,No +LEC005,21,Science: Other|Personal Finance,53703,28.228209,112.938812,pepperoni,cat,Yes,night owl,Yes +LEC004,18,Data Science,53706,35.689487,139.691711,pepperoni,dog,No,night owl,Maybe +LEC006,21,Mathematics/AMEP,53703,41.878113,-87.629799,pineapple,cat,Yes,night owl,Maybe +LEC005,18,Environmental science,53706,31.224361,121.46917,mushroom,dog,No,night owl,Yes +LEC005,18,Engineering: Industrial,53706,40.712776,-74.005974,pepperoni,dog,Yes,night owl,Yes +LEC001,20,Business: Other|Real Estate,53703,51.5,0.128,mushroom,dog,Yes,no preference,Maybe +LEC001,19,Computer Science,53706,40,-74,pepperoni,cat,No,night owl,Yes +LEC003,19,Engineering: Mechanical,53715,44,-94,pineapple,dog,No,early bird,No +LEC001,19,Data Science,53715,40.712776,-74.005974,pepperoni,dog,No,early bird,No +LEC005,18,Engineering: Industrial,53703,41.385063,2.173404,pepperoni,dog,Yes,no preference,Yes +LEC002,20,Engineering: Industrial,53715,22.3,91.8,sausage,cat,Yes,early bird,Maybe +LEC001,24,Engineering: Industrial,53705,13.100485,77.594009,none (just cheese),dog,Yes,no preference,Maybe +LEC004,19,Statistics,53706,36.778259,-119.417931,pineapple,cat,No,night owl,Yes +LEC005,21,Economics,53703,40.016869,-105.279617,pepperoni,cat,Yes,night owl,Yes +LEC003,19,Economics (Mathematical Emphasis),53705,31.230391,121.473701,sausage,neither,Yes,no preference,Maybe +LEC003,19,Business: Finance,53706,22.270979,113.576675,pepperoni,dog,Yes,night owl,Yes +LEC003,21,Computer Science,53705,43.073051,-89.40123,green pepper,cat,No,no preference,Maybe +LEC001,28,Science: Biology/Life,53703,7.190708,125.455338,sausage,dog,No,night owl,Yes +LEC004,18,Statistics,53703,60.472023,8.468946,none (just cheese),dog,No,early bird,No +LEC002,19,Computer Science,53715,41.73993,-88.09423,mushroom,cat,Yes,no preference,Yes +LEC002,21,Economics,53703,26.074301,119.296539,mushroom,cat,No,no preference,Maybe +LEC002,20,Engineering: Industrial,53715,2.188477,41.379179,sausage,dog,No,night owl,Yes +LEC003,21,Science: Other|Environmental Science,53703,20.8,-156.3,basil/spinach,cat,No,early bird,Maybe +LEC006,18,Engineering: Mechanical,53706,25.204849,55.270782,pepperoni,dog,No,night owl,Yes +LEC002,18,Data Science,53706,42.360081,-71.058884,sausage,dog,Yes,night owl,Yes +LEC004,23,Engineering: Mechanical,53703,38.82097,-104.78163,sausage,dog,No,night owl,No +LEC001,19,Engineering: Industrial,53715,47.606209,-122.332069,pepperoni,cat,No,night owl,No +LEC006,19,Sociology,53703,43.05977,-87.88491,basil/spinach,dog,No,night owl,Maybe +LEC005,19,Engineering: Mechanical,53711,38.8951,-77.0364,pepperoni,dog,Yes,night owl,No +LEC005,19,Engineering: Mechanical,53703,41.881832,87.6298,pepperoni,dog,No,no preference,Yes +LEC002,20,Engineering: Mechanical,53703,46.453825,7.436478,pineapple,dog,Yes,night owl,Yes +LEC002,20,Economics,53703,30.49996,117.050003,Other,dog,No,early bird,Maybe +LEC004,21,Science: Other|Psychology,53715,23.12911,113.264381,none (just cheese),cat,No,night owl,Maybe +LEC002,18,Science: Biology/Life,53706,40.7831,73.9712,basil/spinach,dog,Yes,night owl,Yes +LEC002,,Business: Information Systems,53706,18.52043,73.856743,green pepper,dog,No,night owl,Yes +LEC002,,Computer Science,53706,29.424122,-98.493629,none (just cheese),dog,No,no preference,Yes +LEC002,20,Engineering: Mechanical,53703,41.05995,-80.32312,basil/spinach,dog,Yes,night owl,Maybe +LEC006,19,Statistics,53715,3.139003,101.686852,mushroom,cat,No,no preference,Maybe +LEC005,18,Data Science,53706,52.370216,4.895168,basil/spinach,dog,No,night owl,Yes +LEC006,19,Engineering: Industrial,53706,41.878113,-87.629799,pepperoni,dog,No,no preference,Maybe +LEC006,18,Business: Information Systems,53706,25.032969,121.565414,mushroom,dog,Yes,night owl,Yes +LEC001,17,Computer Science,53726,21.027763,105.83416,pepperoni,dog,No,early bird,Yes +LEC001,20,Business: Information Systems,53711,45.046799,-87.298149,sausage,cat,No,night owl,Yes +LEC005,25,Engineering: Other,53705,32.7157,-117.1611,mushroom,dog,No,no preference,Yes +LEC004,18,Engineering: Industrial,53706,19.896767,-155.582779,pepperoni,dog,Yes,night owl,Maybe +LEC005,18,Computer Science,53706,1.28217,103.865196,sausage,dog,No,night owl,Yes +LEC003,18,Engineering: Mechanical,53706,44.977753,-93.265015,pepperoni,dog,No,night owl,Yes +LEC004,20,Engineering: Mechanical,53715,23,90,green pepper,cat,No,no preference,Yes +LEC005,20,Data Science,53703,45.259546,-84.938476,mushroom,dog,Yes,night owl,Yes +LEC002,21,Science: Other,53703,41.878113,-87.629799,pineapple,dog,Yes,early bird,No +LEC004,19,Information science,53703,40.712776,-74.005974,pineapple,cat,Yes,early bird,Maybe +LEC001,19,Engineering: Mechanical,53715,64.126518,-21.817438,pepperoni,dog,No,night owl,Yes +LEC003,,Business: Other,53706,42.360081,-71.058884,sausage,cat,Yes,night owl,No +LEC002,31,Geoscience,53703,-41.126621,-73.059303,pepperoni,cat,No,night owl,Yes +LEC003,18,Engineering: Biomedical,53706,45.17099,-87.16494,Other,dog,No,night owl,Maybe +LEC002,18,Engineering: Mechanical,53706,37.774929,-122.419418,Other,dog,Yes,no preference,Yes +LEC004,,Computer Science,53715,39.70698,-86.0862,mushroom,cat,No,night owl,Yes +LEC005,20,Science: Biology/Life,53703,44.276402,-88.26989,macaroni/pasta,cat,No,no preference,Maybe +LEC002,19,Science: Biology/Life,53703,51.492519,-0.25852,sausage,dog,Yes,no preference,Yes +LEC002,19,Data Science,53703,37.6,14.0154,none (just cheese),dog,No,night owl,Yes +LEC002,20,Engineering: Industrial,53715,46.685631,7.8562,Other,cat,No,night owl,Maybe +LEC002,22,Economics,53706,41.385063,2.173404,pineapple,cat,No,night owl,Maybe +LEC004,21,Engineering: Industrial,53703,41.878113,-87.629799,pepperoni,neither,Yes,early bird,No +LEC004,19,Engineering: Mechanical,53703,51.507351,-0.127758,none (just cheese),neither,No,no preference,Maybe +LEC006,18,Engineering: Mechanical,53706,41.077747,1.131593,sausage,dog,No,no preference,Maybe +LEC006,18,Engineering: Mechanical,53706,43.526,5.445,basil/spinach,dog,Yes,no preference,Yes +LEC003,22,Economics,53715,43.073051,-89.40123,pepperoni,dog,Yes,early bird,Yes +LEC005,18,Engineering: Industrial,53706,43.085369,-88.912086,sausage,dog,No,night owl,Maybe +LEC002,19,Statistics,53703,43.769562,11.255814,basil/spinach,dog,No,no preference,Yes +LEC001,20,Computer Science,53715,20.880947,-156.681862,sausage,dog,No,night owl,Yes +LEC003,19,Mathematics/AMEP,53703,64.963051,-19.020836,basil/spinach,dog,No,no preference,Yes +LEC005,18,Undecided,53706,43.073929,-89.385239,sausage,dog,Yes,early bird,Yes +LEC003,18,Business: Information Systems,53706,25.204849,55.270782,none (just cheese),dog,No,night owl,No +LEC003,21,Economics,53703,39.904,116.407,pepperoni,cat,No,night owl,No +LEC004,18,Engineering: Mechanical,53706,39.739235,-104.99025,pepperoni,cat,Yes,no preference,Maybe +LEC004,21,Science: Biology/Life,53726,43,89,pepperoni,dog,Yes,night owl,Yes +LEC003,19,Data Science,53715,43.073051,-89.40123,none (just cheese),dog,No,early bird,Maybe +LEC002,19,Business: Other|accounting,53703,43.38,-87.9,sausage,neither,No,night owl,Yes +LEC002,18,Science: Biology/Life,53706,40.122,25.4988,sausage,dog,No,early bird,No +LEC005,20,Engineering: Mechanical,53715,39.904202,116.407394,sausage,dog,No,night owl,Yes +LEC001,19,Engineering: Mechanical,53703,-37.813629,144.963058,sausage,dog,Yes,night owl,Yes +LEC005,21,Economics,53715,46.81,-71.21,pepperoni,cat,No,night owl,Yes +LEC004,19,Engineering: Mechanical,53715,52.370216,4.895168,mushroom,dog,Yes,night owl,Yes +LEC001,21,Mathematics/AMEP,53703,34.29006,108.932941,basil/spinach,dog,No,early bird,Yes +LEC005,21,Engineering: Mechanical,53726,43.804801,-91.226075,pepperoni,dog,Yes,night owl,Yes +LEC002,18,Data Science,53703,32.715736,-117.161087,none (just cheese),cat,Yes,night owl,Maybe +LEC004,18,Engineering: Mechanical,53706,20.92674,-156.69386,pepperoni,dog,No,night owl,Maybe +LEC003,18,Data Science,53706,47.606209,-122.332069,pepperoni,dog,No,early bird,Yes +LEC005,21,Computer Science,53703,43.07515,-89.3958,sausage,neither,Yes,night owl,Yes +LEC001,19,Engineering: Mechanical,53562,43.096851,-89.511528,sausage,dog,No,night owl,No +LEC003,19,Engineering: Mechanical,53715,20.924325,-156.690102,sausage,cat,Yes,night owl,No +LEC005,20,Data Science,53703,25.0838,77.3212,pepperoni,dog,No,night owl,Maybe +LEC003,21,Business: Actuarial,53715,43.073051,-89.40123,pineapple,cat,Yes,night owl,Yes +LEC001,,Computer Science,53715,31.469279,119.765621,pepperoni,dog,No,night owl,Maybe +LEC005,19,Engineering: Mechanical,53715,43.769562,11.255814,basil/spinach,neither,No,early bird,No +LEC001,21,Science: Chemistry,53715,38.892059,-77.019913,pepperoni,neither,No,night owl,Yes +LEC002,19,Business: Finance,53715,42.360081,-71.058884,mushroom,dog,Yes,night owl,Yes +LEC001,18,Data Science,53703,24.713552,46.675297,none (just cheese),neither,No,night owl,Yes +LEC003,19,Business: Actuarial,53715,60.391262,5.322054,pepperoni,dog,No,early bird,No +LEC003,19,Data Science,53715,23.697809,120.960518,pepperoni,cat,No,night owl,Yes +LEC003,18,Data Science,53706,40.712776,74.005974,pineapple,dog,Yes,early bird,No +LEC004,19,Engineering: Mechanical,53703,45.126887,-94.528067,sausage,dog,No,night owl,Maybe +LEC002,21,Science: Biology/Life,53715,48.208176,16.373819,Other,dog,Yes,night owl,No +LEC006,18,Engineering: Mechanical,53706,44.0628,-121.30451,pepperoni,dog,No,night owl,Yes +LEC003,21,Statistics,53703,31.230391,121.473701,pineapple,cat,Yes,night owl,Yes +LEC005,21,Economics,53703,47.62772,-122.51368,macaroni/pasta,cat,No,no preference,No +LEC003,19,Engineering: Mechanical,53715,65.68204,-18.090534,sausage,cat,No,no preference,No +LEC004,21,Economics,53715,48.856613,2.352222,basil/spinach,dog,Yes,night owl,No +LEC001,18,Engineering: Biomedical,53706,33.501324,-111.925278,pineapple,dog,Yes,early bird,No +LEC005,18,Data Science,53706,14.77046,-91.183189,mushroom,cat,No,night owl,Maybe +LEC002,18,Engineering: Industrial,53706,10.480594,-66.903603,mushroom,neither,No,night owl,Maybe +LEC004,21,Engineering: Mechanical,53715,48.856613,2.352222,mushroom,cat,Yes,night owl,Yes +LEC001,19,Science: Biology/Life,53706,20.788602,-156.003662,green pepper,dog,Yes,no preference,No +LEC006,18,Data Science,53706,36.59239,-121.86875,pepperoni,cat,No,night owl,Maybe +LEC002,,Engineering: Industrial,53705,47.6,-122.33,sausage,dog,No,early bird,No +LEC001,18,Engineering: Mechanical,53703,23.885942,45.079163,Other,cat,No,night owl,Maybe +LEC002,18,Engineering: Industrial,53532,47.606209,-122.332069,mushroom,dog,No,night owl,Maybe +LEC002,17,Engineering: Biomedical,53706,39.5755,-106.100403,pepperoni,dog,Yes,night owl,Maybe +LEC002,20,Data Science,53711,39.904202,116.407394,pepperoni,dog,No,night owl,Yes +LEC001,19,Engineering: Industrial,53705,41.878113,-87.629799,tater tots,cat,No,night owl,No +LEC004,19,Political Science,53703,55.679626,12.581921,pepperoni,dog,Yes,no preference,Maybe +LEC005,18,Computer Science,53715,28.538336,-81.379234,pepperoni,dog,No,night owl,Maybe +LEC004,29,Engineering: Mechanical,53704,50.064651,19.944981,sausage,dog,No,early bird,Maybe +LEC005,18,Engineering: Other,53706,41.385063,2.173404,mushroom,cat,No,night owl,Yes +LEC001,19,Engineering: Mechanical,53703,44.977753,-93.265015,Other,cat,Yes,early bird,No +LEC001,32,Design Studies,53705,48.856613,2.352222,mushroom,dog,No,early bird,Yes +LEC002,20,Engineering: Mechanical,53703,41.28347,-70.099449,pepperoni,dog,Yes,night owl,Yes +LEC003,19,Engineering: Industrial,53715,41.73849,-71.30418,pepperoni,dog,No,night owl,Yes +LEC001,18,Data Science,53706,43.073051,-89.40123,sausage,dog,No,early bird,Yes +LEC001,19,Computer Science,53715,31.230391,121.473701,pineapple,cat,No,night owl,Yes +LEC001,19,Data Science,53703,37.9838,23.7275,sausage,dog,Yes,no preference,Yes +LEC005,20,Engineering: Biomedical,53703,47.497913,19.040236,Other,cat,Yes,night owl,No +LEC004,18,Economics,53711,13.756331,100.501762,Other,dog,No,night owl,Maybe +LEC002,18,Data Science,53706,3.864255,73.388672,pepperoni,dog,Yes,night owl,Maybe +LEC006,18,Engineering: Mechanical,53706,32.715736,-117.161087,macaroni/pasta,dog,Yes,night owl,Yes +LEC001,19,Business: Actuarial,53715,18.32431,64.941612,pepperoni,dog,No,no preference,Yes +LEC001,22,Psychology,53711,43.055333,-89.425946,pineapple,dog,Yes,early bird,No +LEC003,18,Computer Science,53706,40.744678,-73.758072,mushroom,cat,No,night owl,Maybe +LEC006,18,Data Science,53715,38.9784,76.4922,mushroom,cat,No,early bird,Yes +LEC004,20,Science: Other,53726,55.675758,12.56902,none (just cheese),cat,Yes,night owl,Yes +LEC001,20,Science: Biology/Life,53715,40.713051,-74.007233,pineapple,cat,No,night owl,Maybe +LEC004,18,Engineering: Industrial,53706,51.507351,-0.127758,pepperoni,dog,Yes,no preference,No +LEC004,25,Computer Science,53703,38.736946,-9.142685,pepperoni,dog,No,night owl,Yes +LEC002,18,Computer Science,53706,22.543097,114.057861,pepperoni,cat,No,no preference,Yes +LEC004,25,Science: Chemistry,53703,37.566536,126.977966,Other,cat,Yes,night owl,Maybe +LEC002,19,Engineering: Mechanical,53715,26.338,-81.775,pepperoni,dog,Yes,no preference,Maybe +LEC005,19,Engineering: Mechanical,53715,33.448376,-112.074036,pepperoni,neither,Yes,early bird,No +LEC005,19,Engineering: Mechanical,53703,43.073051,-89.40123,pepperoni,cat,No,no preference,Yes +LEC001,19,Engineering: Mechanical,53705,26.647661,106.63015,mushroom,cat,No,night owl,No +LEC003,18,Undecided,53706,43.2967,87.9876,pepperoni,dog,No,night owl,No +LEC005,19,Science: Physics,53703,78.225,15.626,sausage,cat,No,early bird,No +LEC002,,Science: Other|Environmetal Science,53703,52.973558,-9.425102,none (just cheese),dog,Yes,night owl,Maybe +LEC006,19,Economics (Mathematical Emphasis),53715,37.774929,-122.419418,sausage,cat,Yes,night owl,Yes +LEC002,20,Business: Finance,53703,40.7128,74.006,pineapple,dog,No,night owl,Yes +LEC001,21,Science: Biology/Life,53703,44.794,-93.148,pepperoni,dog,No,night owl,No +LEC002,19,Engineering: Mechanical,53706,36.17,-115.14,pepperoni,cat,No,night owl,Maybe +LEC001,18,Engineering: Biomedical,53706,21.161907,-86.851524,none (just cheese),dog,No,early bird,Maybe +LEC001,18,Computer Science,53715,48.856613,2.352222,pineapple,neither,Yes,no preference,No +LEC004,19,Engineering: Mechanical,53715,48.137,11.576,green pepper,dog,No,early bird,No +LEC001,20,Engineering: Biomedical,53703,43.07393,-89.38524,sausage,dog,No,night owl,Maybe +LEC002,18,Science: Other,53706,35.6762,139.6503,Other,dog,No,no preference,Yes +LEC004,19,Computer Science,53703,41.902782,12.496365,none (just cheese),neither,Yes,night owl,No +LEC001,20,Science: Other|Atmospheric and Oceanic Sciences (AOS),53711,49.299171,19.94902,pepperoni,dog,No,night owl,Maybe +LEC002,18,Data Science,53706,41.380898,2.12282,pepperoni,dog,No,night owl,Maybe +LEC006,18,Data Science,53706,48.257919,4.03073,mushroom,cat,Yes,early bird,No +LEC005,19,Engineering: Mechanical,53715,35.0844,106.6504,pineapple,dog,Yes,early bird,Yes +LEC002,23,Economics,53703,121,5,pepperoni,neither,No,no preference,Maybe +LEC004,18,Business: Actuarial,53706,21.306944,-157.858337,pineapple,dog,Yes,night owl,Maybe +LEC005,18,Economics,53706,43,-87.9,pepperoni,dog,Yes,early bird,Maybe +LEC005,23,Business: Other|Business Analytics,53703,31.230391,121.473701,pineapple,cat,Yes,night owl,Maybe +LEC002,22,Psychology,53703,25.032969,121.565414,mushroom,dog,No,no preference,Yes +LEC005,18,Computer Science,53706,43.0722,89.4008,sausage,cat,No,night owl,Yes +LEC006,18,Data Science,53706,52.370216,4.895168,mushroom,dog,Yes,night owl,Maybe +LEC004,20,Data Science,53703,35.726212,-83.491226,pepperoni,cat,No,early bird,Yes +LEC001,18,Computer Science,53703,27,153,mushroom,cat,No,early bird,Yes +LEC005,18,Data Science,53706,56.117017,-3.879547,pineapple,dog,Yes,night owl,Yes +LEC001,20,Engineering: Biomedical,53715,45.983964,9.262161,sausage,dog,No,night owl,No +LEC005,21,Psychology,53703,43.038902,-87.906471,macaroni/pasta,dog,Yes,night owl,Yes +LEC002,18,Engineering: Mechanical,53706,41.38879,2.15084,sausage,dog,Yes,no preference,Maybe +LEC003,18,Data Science,53706,47.48,-122.28,basil/spinach,dog,No,no preference,Maybe +LEC004,21,Data Science,53703,34.746613,113.625328,green pepper,neither,Yes,no preference,No +LEC005,21,Data Science,53703,38.240946,-85.757571,pepperoni,dog,No,no preference,Yes +LEC005,19,Engineering: Mechanical,53703,43.07291,-89.39439,sausage,dog,No,night owl,Maybe +LEC005,19,Engineering: Mechanical,53715,56.373482,-3.84306,none (just cheese),dog,No,early bird,Yes +LEC005,19,Data Science,53703,41.381717,2.177925,pepperoni,dog,Yes,night owl,Yes +LEC005,19,Engineering: Mechanical,53714,43.089199,87.8876,pepperoni,dog,No,night owl,Yes +LEC005,19,Engineering: Other,53590,38.4,11.2,pepperoni,dog,Yes,early bird,No +LEC005,19,Engineering: Mechanical,53715,25.761681,-80.191788,pepperoni,dog,Yes,night owl,No +LEC005,19,Engineering: Mechanical,53703,44.5133,88.0133,mushroom,dog,Yes,night owl,Maybe +LEC002,,Computer Science,53706,41.8781,87.6298,pepperoni,dog,No,night owl,Maybe +LEC005,19,Business: Finance,53703,38.98378,-77.20871,none (just cheese),dog,Yes,night owl,Yes +LEC005,18,Business: Finance,53703,22.9068,43.1729,pepperoni,dog,No,night owl,Yes +LEC005,19,Engineering: Mechanical,53715,43.073051,-89.40123,pepperoni,dog,No,early bird,No +LEC004,23,Economics,53703,43.083321,-89.372475,mushroom,dog,Yes,early bird,No +LEC002,17,Business: Actuarial,53715,34.746613,113.625328,sausage,neither,Yes,night owl,Maybe +LEC005,18,Engineering: Biomedical,53715,46.58276,7.08058,pepperoni,dog,No,early bird,No +LEC001,20,Statistics,53715,39.904202,116.407394,mushroom,dog,Yes,early bird,No +LEC002,18,Computer Science,53706,35.96691,-75.627823,sausage,dog,No,early bird,Yes +LEC005,21,Mathematics/AMEP,53703,13.756331,100.501762,pepperoni,dog,No,night owl,Yes +LEC005,20,Engineering: Biomedical,53715,28.538336,-81.379234,sausage,cat,No,night owl,Maybe +LEC002,19,Engineering: Mechanical,53703,44.822783,-93.370743,sausage,dog,Yes,early bird,No +LEC005,19,Engineering: Mechanical,53715,42.15,-87.96,pepperoni,dog,No,night owl,Yes +LEC005,20,Journalism,53715,41.3874,2.1686,basil/spinach,dog,Yes,early bird,Maybe +LEC001,19,Engineering: Mechanical,53703,42.864552,-88.333199,pepperoni,dog,No,early bird,Maybe +LEC005,17,Data Science,53706,40.7128,74.006,macaroni/pasta,dog,No,night owl,Yes +LEC005,19,Science: Other|Politcal Science,53703,41.878113,-87.629799,pepperoni,dog,Yes,night owl,No +LEC002,20,Business: Finance,53703,40.7831,73.9712,sausage,dog,Yes,night owl,No +LEC004,20,Data Science,53703,43,87.9,none (just cheese),dog,No,night owl,Yes +LEC001,18,Data Science,53706,38.900497,-77.007507,pineapple,dog,No,night owl,Maybe +LEC005,18,Engineering: Industrial,53706,45.440845,12.315515,sausage,dog,No,night owl,Maybe +LEC002,19,Data Science,53715,25.73403,-80.24697,pepperoni,dog,Yes,night owl,Yes +LEC005,18,Political Science,53706,42.360081,-71.058884,macaroni/pasta,dog,Yes,night owl,Yes +LEC002,20,Economics,53703,41.878113,-87.629799,pepperoni,dog,Yes,no preference,Maybe +LEC004,18,Engineering: Mechanical,55088,48.135124,11.581981,pepperoni,dog,Yes,no preference,No +LEC002,23,Business: Information Systems,53703,37.566536,126.977966,sausage,dog,No,night owl,Maybe +LEC005,17,Data Science,53703,49.2827,123.1207,sausage,dog,Yes,night owl,Yes +LEC005,,Statistics,53726,40.712776,-74.005974,Other,dog,Yes,no preference,Yes +LEC001,18,Science: Biology/Life,53706,48.856613,2.352222,pepperoni,cat,Yes,early bird,No +LEC005,32,Communication Sciences and Disorder,53705,37.566536,126.977966,pineapple,dog,Yes,no preference,Yes +LEC001,18,Data Science,53706,41.878113,-87.629799,macaroni/pasta,dog,No,night owl,Yes +LEC002,17,Business: Information Systems,53706,-6.17511,106.865036,sausage,neither,No,no preference,Maybe +LEC002,25,Science: Other|Geoscience,53711,46.947975,7.447447,mushroom,cat,No,no preference,Yes +LEC002,20,Economics,53703,46.7867,92.1005,macaroni/pasta,neither,Yes,early bird,No +LEC002,21,Business: Other|Marketing,53703,20.878332,-156.682495,basil/spinach,dog,No,night owl,Yes +LEC001,19,Statistics,53703,52.370216,4.895168,sausage,dog,No,night owl,Maybe +LEC005,20,Engineering: Biomedical,53711,35.689487,139.691711,basil/spinach,dog,No,night owl,Yes +LEC005,22,Science: Other|Atmospheric and oceanic science,53703,26.1224,80.1373,pepperoni,dog,No,early bird,No +LEC001,18,Engineering: Mechanical,53726,21.306944,-157.858337,sausage,dog,No,night owl,Yes +LEC005,21,Business: Finance,53703,43.11339,-89.37726,sausage,dog,No,night owl,Yes +LEC001,,Business: Other,53703,22.396427,114.109497,Other,dog,No,early bird,Maybe +LEC004,19,Science: Biology/Life,53706,41.2,96,pepperoni,cat,No,early bird,No +LEC004,18,Engineering: Industrial,53706,49.74609,7.4609,pepperoni,cat,No,early bird,Yes +LEC004,20,Science: Other|Environmental Science,53715,43,-89,mushroom,dog,Yes,night owl,Maybe +LEC001,18,Business: Finance,53706,39.7392,104.9903,pepperoni,dog,No,early bird,No +LEC002,,Computer Science,53706,41.67566,-86.28645,pineapple,cat,No,no preference,Maybe +LEC002,18,Business: Other,53706,33.88509,-118.409714,green pepper,dog,Yes,night owl,No +LEC001,20,Engineering: Biomedical,53711,41.8781,87.6298,pepperoni,dog,No,night owl,Yes +LEC002,20,Data Science,53715,10.97285,106.477707,mushroom,dog,No,no preference,Maybe +LEC002,20,Computer Science,53703,36.16156,-75.752441,pepperoni,dog,Yes,no preference,Yes +LEC002,20,Business: Other|Marketing,53703,35.689487,139.691711,pepperoni,dog,Yes,night owl,Yes +LEC002,18,Engineering: Other|Engineering Mechanics,53706,35.689487,139.691711,mushroom,cat,No,night owl,Maybe +LEC002,21,Economics (Mathematical Emphasis),53703,46.25872,-91.745583,sausage,dog,Yes,no preference,Yes +LEC002,19,Mathematics,53703,39.904202,116.407394,tater tots,cat,No,night owl,Yes +LEC002,18,Data Science,53703,40.706067,-74.030063,pepperoni,dog,No,night owl,Yes +LEC002,19,Pre-Business,53703,39.60502,-106.51641,pepperoni,dog,Yes,early bird,No +LEC002,20,Mathematics/AMEP,53703,35.106766,-106.629181,green pepper,cat,No,night owl,Yes +LEC003,20,Science: Physics,53715,64.963051,-19.020836,mushroom,dog,No,night owl,Yes +LEC002,20,Business: Finance,53703,31.298973,120.585289,pineapple,cat,Yes,night owl,No +LEC002,18,Economics,53706,48.856613,2.352222,basil/spinach,dog,No,night owl,Maybe +LEC001,21,Data Science,53703,40.712776,-74.005974,sausage,dog,No,night owl,Yes +LEC002,19,Engineering: Industrial,53715,45.914,-89.255,sausage,dog,Yes,early bird,Yes +LEC002,19,Computer Science,53703,20,110,pineapple,cat,No,night owl,Maybe +LEC002,19,Engineering: Mechanical,53726,41.878113,-87.629799,basil/spinach,dog,No,early bird,Yes +LEC005,19,Computer Science,53715,48.8566,2.3522,sausage,dog,No,night owl,Maybe +LEC002,19,Industrial Engineering,53703,48.856613,2.352222,basil/spinach,dog,No,early bird,Yes +LEC002,18,Data Science,53706,43.073051,-89.40123,pepperoni,dog,Yes,night owl,Yes +LEC002,20,Statistics,53703,31.224361,121.46917,mushroom,dog,No,no preference,Maybe +LEC002,18,Computer Science,53706,35.689487,139.691711,green pepper,dog,No,night owl,Yes +LEC002,18,Computer Science,53706,25.03841,121.563698,pineapple,dog,No,night owl,Yes +LEC002,19,Engineering: Mechanical,53715,43.06827,-89.40263,sausage,dog,No,night owl,No +LEC002,18,Engineering: Mechanical,53703,43,89.4,pepperoni,cat,No,no preference,Maybe +LEC002,,Mechanical Engineering,53703,41.8781,87.6298,Other,dog,Yes,night owl,Yes +LEC002,26,Science: Other,57075,42.76093,-89.9589,Other,dog,Yes,early bird,No +LEC002,21,Science: Other|Environmental science,53714,47.606209,-122.332069,pepperoni,dog,Yes,early bird,Yes +LEC002,18,Data Science,53706,35.69,139.69,pineapple,cat,No,night owl,Yes +LEC002,18,Computer Science,53706,42.807091,-86.01886,none (just cheese),cat,Yes,early bird,Yes +LEC002,19,Engineering: Mechanical,53703,45.892099,8.997803,green pepper,dog,No,night owl,Yes +LEC002,20,Computer Science,53715,40.755645,-74.034119,sausage,dog,Yes,night owl,Yes +LEC001,18,Engineering: Mechanical,53066,43.073051,-89.40123,pepperoni,dog,No,night owl,Yes +LEC002,18,Data Science,53706,21.306944,-157.858337,pineapple,dog,No,night owl,No +LEC002,18,Engineering: Industrial,53706,32.0853,34.781769,pepperoni,dog,No,night owl,Maybe +LEC002,19,Engineering: Mechanical,53703,46.786671,-92.100487,sausage,dog,No,early bird,No +LEC002,19,Engineering: Mechanical,53715,42.590519,-88.435287,pepperoni,dog,No,early bird,No +LEC002,23,Data Science,53703,37,127,pineapple,dog,No,night owl,Yes +LEC002,20,Data Science,53703,43.06875,-89.39434,pepperoni,dog,Yes,no preference,Maybe +LEC002,20,Engineering: Mechanical,53703,41.499321,-81.694359,pepperoni,dog,Yes,night owl,Maybe +LEC002,21,Economics,53703,38.969021,-0.18516,sausage,dog,Yes,no preference,No +LEC002,20,Economics,53703,50.85,4.35,pepperoni,dog,No,no preference,Yes +LEC002,19,Data Science,53715,36.39619,10.61412,none (just cheese),cat,No,no preference,Yes +LEC002,20,Engineering: Mechanical,53711,43.073051,-89.40123,green pepper,dog,Yes,night owl,No +LEC002,30,Life Sciences Communication,53562,52.399448,0.25979,basil/spinach,cat,Yes,night owl,Yes +LEC002,20,Business: Finance,53703,41.878,-87.629799,pepperoni,dog,No,no preference,Yes +LEC002,18,Computer Science,53706,31.2304,121.4737,pepperoni,cat,No,night owl,Maybe +LEC005,22,Economics,53711,48.135124,11.581981,pepperoni,cat,Yes,no preference,Yes +LEC002,19,Engineering: Mechanical,53711,51.5,0.1276,pepperoni,dog,No,night owl,No +LEC001,18,Computer Science,53703,31.298973,120.585289,pineapple,neither,No,night owl,No +LEC001,19,Computer Science,53703,37,-97,macaroni/pasta,cat,No,no preference,Maybe +LEC002,19,International Studies,53703,8.25115,34.588348,none (just cheese),dog,Yes,early bird,Maybe +LEC001,19,Engineering: Mechanical,53703,43.038902,-87.906471,pineapple,cat,No,night owl,Yes +LEC001,19,Science: Other|Atmospheric and Oceanic Sciences,53703,48.856613,2.352222,pepperoni,dog,Yes,night owl,Yes +LEC004,20,Data Science,53703,41.878113,-87.629799,green pepper,dog,No,early bird,Yes +LEC004,18,Undecided,53706,39.3823,87.2971,sausage,dog,Yes,early bird,No +LEC004,21,Data Science,53703,31.230391,121.473701,mushroom,cat,No,night owl,Maybe +LEC001,18,Data Science,53706,32.776474,-79.931053,none (just cheese),dog,No,early bird,Yes +LEC006,18,Science: Physics,53706,43.073051,-89.40123,sausage,dog,No,night owl,Yes +LEC001,19,Economics,53703,35.689487,139.691711,pineapple,dog,Yes,night owl,Yes +LEC004,18,Data Science,53715,50.8,-1.085,Other,dog,No,night owl,Maybe +LEC002,21,Languages,53703,37.389091,-5.984459,mushroom,cat,No,early bird,No +LEC001,19,Rehabilitation Psychology,53706,36.204823,138.25293,pineapple,cat,No,no preference,Maybe +LEC006,18,Data Science,53705,37.5741,122.3794,pepperoni,dog,Yes,night owl,Yes +LEC004,18,Undecided,53706,26.452,-81.9481,pepperoni,dog,Yes,night owl,Yes +LEC002,19,Business: Actuarial,53703,37.774929,-122.419418,pineapple,dog,No,early bird,No +LEC005,18,Undecided,53706,55.676098,12.568337,pepperoni,dog,Yes,night owl,No +LEC001,19,Engineering: Mechanical,53703,43.073051,-89.40123,pepperoni,dog,Yes,night owl,Yes +LEC002,18,Statistics,53706,40.713051,-74.007233,none (just cheese),dog,No,night owl,Maybe +LEC003,21,Languages,53511,39.952583,-75.165222,pepperoni,dog,No,night owl,Yes +LEC002,18,Computer Science,53706,12.523579,-70.03355,pineapple,dog,No,night owl,Yes +LEC004,,Engineering: Biomedical,53715,41.878113,-87.629799,pepperoni,dog,Yes,night owl,No +LEC001,,Data Science,53701,40.37336,88.231483,pepperoni,dog,Yes,night owl,No +LEC001,19,Data Science,53703,51.5072,0.1276,pepperoni,dog,Yes,no preference,No +LEC002,18,Data Science,53706,47.987289,0.22367,none (just cheese),dog,Yes,night owl,Maybe +LEC002,19,Business: Actuarial,53715,45.17963,-87.150009,sausage,dog,Yes,no preference,No +LEC005,21,Science: Biology/Life,53703,21.23556,-86.73142,pepperoni,dog,Yes,night owl,Yes +LEC004,18,Engineering: Industrial,53706,43.073051,-89.40123,sausage,dog,No,night owl,Yes +LEC001,21,Science: Biology/Life,53715,41.878113,-87.629799,green pepper,cat,No,night owl,Yes +LEC001,20,Engineering: Biomedical,53703,48.8566,2.3522,mushroom,cat,Yes,night owl,Maybe +LEC005,19,Engineering: Mechanical,53703,49.28273,-123.120735,basil/spinach,dog,No,night owl,Yes +LEC001,19,Data Science,53706,37.23082,-107.59529,basil/spinach,dog,No,no preference,Maybe +LEC001,19,Business: Finance,53703,26.20047,127.728577,mushroom,dog,No,night owl,Maybe +LEC006,18,Statistics,53706,32.060253,118.796875,pineapple,cat,Yes,early bird,Maybe +LEC002,20,Business: Information Systems,53706,52.520008,13.404954,none (just cheese),dog,No,early bird,Yes +LEC006,18,Undecided,53706,43.038902,-87.906471,sausage,dog,No,night owl,Yes +LEC002,20,Accounting,53703,32.79649,-117.192123,mushroom,dog,No,no preference,Yes +LEC006,19,Statistics,53715,21.315603,-157.858093,pepperoni,cat,No,night owl,No +LEC004,20,Science: Biology/Life,53706,13.756331,100.501762,pineapple,neither,No,night owl,Yes +LEC004,20,Business: Other,53715,42.818878,-89.494115,pepperoni,dog,No,night owl,Yes +LEC001,19,Engineering: Mechanical,53703,44.9778,93.265,pepperoni,dog,Yes,night owl,Maybe +LEC004,18,Engineering: Industrial,53706,41.3874,2.1686,none (just cheese),dog,No,night owl,Maybe +LEC001,37,Engineering: Other|Civil- Intelligent Transportation System,53705,23.810331,90.412521,pineapple,neither,Yes,early bird,Yes +LEC001,19,Science: Physics,53703,42.696842,-89.026932,sausage,cat,No,night owl,Yes +LEC006,19,Data Science,53715,53.266479,-9.052602,macaroni/pasta,dog,No,no preference,Yes +LEC001,19,Data Science,53703,45.19356,-87.118767,pepperoni,dog,Yes,early bird,Maybe +LEC005,18,Engineering: Industrial,53715,21.306944,-157.858337,none (just cheese),dog,Yes,night owl,Maybe +LEC004,19,Computer Science,53703,40.678177,-73.94416,Other,cat,No,night owl,Maybe +LEC005,18,Science: Biology/Life,53706,44.513317,-88.013298,pepperoni,dog,Yes,night owl,No +LEC001,19,Engineering: Mechanical,53703,40.712776,-74.005974,none (just cheese),dog,Yes,early bird,Maybe +LEC002,22,Economics,53703,37.6,127,pineapple,neither,Yes,night owl,Maybe +LEC004,20,Engineering: Industrial,53703,39.359772,-111.584167,pepperoni,dog,Yes,early bird,Maybe +LEC001,19,Data Science,53706,31.298973,120.585289,mushroom,cat,No,night owl,Yes +LEC001,20,Computer Science,53715,43.073051,-89.40123,none (just cheese),dog,No,night owl,Maybe +LEC001,25,Data Science,53703,37.566536,126.977966,pineapple,dog,Yes,night owl,No +LEC005,19,Data Science,53706,36.169941,-115.139832,pepperoni,dog,Yes,night owl,Yes +LEC001,19,Engineering: Mechanical,53703,44.834209,87.376266,sausage,dog,Yes,no preference,Yes +LEC005,20,Engineering: Mechanical,53703,43.17854,-89.163391,sausage,dog,Yes,night owl,Maybe +LEC004,19,Engineering: Industrial,53703,41.93101,-87.64987,pepperoni,neither,No,early bird,No +LEC003,19,Engineering: Industrial,53703,11.89,-85,pepperoni,dog,Yes,night owl,Maybe +LEC003,19,Engineering: Mechanical,53715,33.873417,-115.900993,pepperoni,dog,No,early bird,No +LEC001,22,Economics,53703,42.360081,-71.058884,pepperoni,dog,No,no preference,Maybe +LEC001,18,Data Science,53706,34.04018,-118.48849,pepperoni,dog,Yes,night owl,Yes +LEC002,42069,Data Science,53704,43,-89,none (just cheese),neither,No,no preference,No +LEC004,20,Business: Finance,53715,38.71049,-75.07657,sausage,dog,No,early bird,No +LEC004,21,Engineering: Mechanical,53715,43.073051,-89.40123,Other,dog,Yes,early bird,No +LEC004,18,Engineering: Industrial,53706,44.261799,-88.407249,sausage,dog,Yes,night owl,No +LEC004,26,Science: Other|Animal and Dairy Science,53705,53.270668,-9.05679,pepperoni,dog,No,early bird,Yes +LEC005,20,Data Science,53715,43.355099,11.02956,sausage,dog,No,early bird,Maybe +LEC003,19,Engineering: Mechanical,53715,45.40857,-91.73542,sausage,dog,Yes,no preference,No +LEC004,22,Engineering: Mechanical,53726,55.864239,-4.251806,pepperoni,dog,Yes,night owl,Yes +LEC001,18,Engineering: Mechanical,53706,50.808712,-0.1604,pepperoni,dog,Yes,night owl,Maybe +LEC004,19,Engineering: Mechanical,53703,13.35433,103.77549,none (just cheese),dog,No,no preference,Maybe +LEC005,24,Mathematics/AMEP,53705,40.7,-74,pineapple,cat,No,early bird,Maybe +LEC001,19,Interior Architecture,53532,27.683536,-82.736092,mushroom,cat,Yes,no preference,Yes +LEC001,19,Science: Chemistry,53715,40.7,-74,sausage,dog,No,night owl,Maybe +LEC001,20,Engineering: Biomedical,53703,-33.86882,151.20929,pepperoni,dog,No,no preference,Maybe +LEC001,20,Engineering: Industrial,53715,26.614149,-81.825768,pepperoni,dog,No,night owl,No +LEC001,19,Engineering: Biomedical,53706,45.440845,12.315515,none (just cheese),dog,Yes,night owl,Yes +LEC001,19,Data Science,53726,43.0766,89.4125,none (just cheese),cat,No,night owl,No +LEC001,20,Engineering: Biomedical,53711,33.684566,-117.826508,pineapple,dog,Yes,early bird,Maybe +LEC001,21,Statistics,26617,22.396427,114.109497,pineapple,dog,Yes,night owl,Maybe +LEC001,18,Data Science,53706,-33.86882,151.20929,pepperoni,dog,Yes,night owl,No +LEC001,21,Economics,53703,1.53897,103.58007,pineapple,neither,Yes,night owl,Yes +LEC001,18,Data Science,53558,41.877541,-88.066727,mushroom,dog,No,night owl,Maybe +LEC001,17,Computer Science,53703,25.204849,55.270782,pepperoni,dog,Yes,night owl,Yes +LEC001,19,Engineering: Mechanical,53715,19.7,-155,pineapple,dog,Yes,early bird,Yes +LEC001,19,Data Science,53703,41.878113,-87.629799,none (just cheese),cat,Yes,night owl,Yes +LEC001,18,Science: Biology/Life,53715,39.904202,116.407394,basil/spinach,dog,Yes,night owl,Maybe +LEC001,20,Science: Physics,53711,43.038902,-87.906471,pepperoni,dog,No,no preference,Yes +LEC001,18,Engineering: Mechanical,53706,41.902782,12.496366,pepperoni,neither,Yes,night owl,Yes +LEC001,18,Data Science,53706,47.60323,-122.330276,Other,dog,No,night owl,Yes +LEC001,19,Economics,53706,40.7,74,none (just cheese),dog,Yes,night owl,Yes +LEC001,19,Business: Finance,53703,34.052235,-118.243683,mushroom,dog,Yes,early bird,Maybe +LEC001,20,Science: Other|Atmospheric & Oceanic Sciences,53711,40.412776,-74.005974,pepperoni,neither,No,early bird,Yes +LEC001,19,Computer Science,53706,37.774929,-122.419418,none (just cheese),cat,No,early bird,Yes +LEC001,20,Engineering: Mechanical,53703,44.78441,-93.17308,pepperoni,dog,Yes,no preference,Yes +LEC001,22,Engineering: Other,53726,39.48214,-106.048691,pineapple,cat,No,no preference,Maybe +LEC001,21,Computer Science,53703,33.68,-117.82,basil/spinach,cat,No,early bird,No +LEC001,17,Computer Science,53706,25.204849,55.270782,pepperoni,neither,Yes,no preference,Maybe +LEC001,18,Engineering: Industrial,53706,41.917519,-87.694771,basil/spinach,dog,Yes,night owl,Yes +LEC001,18,Engineering: Biomedical,53706,42.361145,-71.057083,macaroni/pasta,dog,No,night owl,Yes +LEC001,,Engineering: Biomedical,53703,43.073929,-89.385239,basil/spinach,dog,No,early bird,No +LEC001,18,Economics,53706,30.20241,120.226822,Other,neither,Yes,early bird,No +LEC001,20,Engineering: Biomedical,53703,41.198496,0.773436,pepperoni,dog,No,night owl,Yes +LEC001,19,Engineering: Mechanical,53703,39.739235,-104.99025,pepperoni,dog,Yes,no preference,Maybe +LEC001,20,Science: Chemistry,53703,32.16761,120.012444,pepperoni,neither,No,night owl,Maybe +LEC001,19,Data Science,53703,43.0722,89.4008,pineapple,dog,Yes,night owl,Yes +LEC001,18,Science: Biology/Life,53715,41.878113,-87.629799,sausage,dog,Yes,early bird,No +LEC004,,Business: Information Systems,53715,42.360081,-71.058884,Other,dog,No,no preference,Maybe +LEC001,21,Engineering: Biomedical,53703,44.513317,-88.013298,pepperoni,dog,No,night owl,No +LEC001,20,Data Science,53132,43.073051,-89.40123,Other,cat,No,night owl,Maybe +LEC001,18,Business: Actuarial,53706,48.856613,2.352222,sausage,dog,No,no preference,Maybe +LEC001,20,Political Science,53715,48.135124,11.581981,sausage,cat,Yes,night owl,Yes +LEC001,19,Engineering: Industrial,53703,41,-74,sausage,dog,Yes,no preference,No +LEC001,20,Psychology,53703,43.083321,-89.372475,Other,neither,No,night owl,Yes +LEC001,18,Computer Science and Statistics,53706,36.162663,-86.781601,mushroom,dog,Yes,early bird,Maybe +LEC001,19,Engineering: Mechanical,53703,25.88,-80.16,pepperoni,dog,No,night owl,Yes +LEC001,18,Computer Science,53703,46.947975,7.447447,sausage,cat,Yes,night owl,No +LEC001,19,Business: Information Systems,53703,41.17555,73.64731,pepperoni,dog,No,night owl,Maybe +LEC001,20,Political Science,53703,45.018269,-93.473892,sausage,dog,No,night owl,Maybe +LEC001,,Business analytics,53705,45.50169,-73.567253,pineapple,cat,No,no preference,No +LEC001,21,Science: Biology/Life,53726,32.060253,118.796875,mushroom,cat,No,night owl,No +LEC001,19,Engineering: Mechanical,53706,35.806,-78.68483,none (just cheese),dog,No,night owl,Yes +LEC005,20,Data Science,53726,31.230391,121.473701,none (just cheese),dog,Yes,no preference,Maybe +LEC005,18,Engineering: Mechanical,53706,41.878113,-87.629799,Other,cat,No,night owl,Maybe +LEC004,18,Statistics,53706,27.35741,-82.615471,none (just cheese),dog,Yes,early bird,No +LEC002,20,Business: Finance,53715,35.726212,-83.491226,pepperoni,dog,Yes,no preference,Yes +LEC002,18,Undecided,53706,43.769562,11.255814,pepperoni,dog,No,night owl,Yes +LEC004,19,Business: Actuarial,53703,43.040433,-87.897423,sausage,cat,No,night owl,No +LEC004,19,Engineering: Mechanical,5,25.034281,-77.396278,sausage,dog,Yes,no preference,Yes +LEC001,,Engineering: Mechanical,53706,34.052235,-118.243683,Other,dog,Yes,night owl,Yes +LEC003,18,Engineering: Industrial,53706,20.798363,-156.331924,none (just cheese),dog,Yes,early bird,No +LEC002,19,Engineering: Biomedical,53703,51.1784,115.5708,pineapple,dog,Yes,night owl,No +LEC005,19,Statistics,53703,43.05367,-88.44062,pepperoni,dog,Yes,night owl,No +LEC004,18,Engineering: Industrial,53706,36.110168,-97.058571,none (just cheese),dog,No,early bird,Maybe +LEC004,21,Computer Science,53703,43.07016,-89.39386,mushroom,cat,Yes,early bird,No +LEC005,19,Data Science,53726,43.073051,-89.40123,pepperoni,dog,No,early bird,Yes +LEC004,18,Data Science,53706,41.878113,-87.629799,macaroni/pasta,dog,Yes,early bird,Maybe +LEC001,20,Business: Finance,53726,43.073051,-89.40123,pepperoni,dog,No,night owl,Maybe +LEC001,18,Data Science,53706,43.038902,-87.906471,pineapple,dog,No,night owl,Maybe +LEC001,24,Engineering: Other,53718,46.77954,-90.78511,pineapple,dog,Yes,night owl,No +LEC001,18,Statistics,53706,22.57,88.36,pineapple,dog,Yes,night owl,Maybe +LEC004,20,Computer Science,53715,35.016956,-224.24911,pepperoni,dog,No,night owl,Yes +LEC001,20,Science: Biology/Life,53715,47.606209,-122.332069,none (just cheese),dog,Yes,night owl,Maybe +LEC004,18,Engineering: Industrial,53706,21.28482,-157.83245,pineapple,dog,No,night owl,Yes +LEC001,20,Engineering: Biomedical,53715,40.63,14.6,none (just cheese),dog,No,early bird,Maybe +LEC004,20,Legal Studies,53703,20.798363,-156.331924,green pepper,dog,No,early bird,No +LEC002,18,Computer Science,53706,32.060253,118.796875,sausage,dog,Yes,early bird,Maybe +LEC002,18,Journalism,53706,31,103,none (just cheese),cat,No,night owl,Yes +LEC004,,Computer Science,53706,147,32.5,pineapple,cat,No,early bird,Maybe +LEC004,18,Engineering: Biomedical,53701,43.038902,-87.906471,pepperoni,dog,No,night owl,No +LEC004,18,Engineering: Mechanical,20815,39.640259,-106.370872,sausage,dog,No,night owl,No +LEC004,19,Engineering: Mechanical,53715,41,12,pepperoni,dog,No,no preference,Maybe +LEC004,20,Journalism: Strategic Comm./Advertising,53703,43.073051,-89.40123,Other,dog,Yes,night owl,Yes +LEC004,,Engineering: Mechanical,53715,43,-87.9,pepperoni,cat,Yes,early bird,Maybe +LEC004,19,Engineering: Biomedical,53706,32.715736,117.161087,pepperoni,dog,Yes,no preference,Yes +LEC004,18,Data Science,53706,43.073051,-89.40123,pepperoni,dog,No,night owl,Yes +LEC004,18,History,53706,42.19381,-73.362877,none (just cheese),cat,Yes,night owl,Yes +LEC002,19,Engineering: Mechanical,53703,39.290386,-76.61219,mushroom,dog,No,no preference,No +LEC002,19,Engineering: Mechanical,53726,40.416775,-3.70379,macaroni/pasta,dog,No,early bird,Maybe +LEC005,19,Engineering: Mechanical,53726,46.870899,-89.313789,sausage,dog,Yes,night owl,Maybe +LEC004,19,Science: Biology/Life,53151,41.878113,-87.629799,sausage,dog,No,night owl,Yes +LEC005,18,Data Science,53711,35.1796,129.0756,pepperoni,cat,Yes,night owl,Yes +LEC004,18,Data Science,53706,37.568291,126.99778,pepperoni,dog,No,no preference,Maybe +LEC005,17,Statistics,53706,31.23,121.47,sausage,cat,No,night owl,Maybe +LEC003,19,Undecided,53715,43.041069,-87.909416,mushroom,dog,No,no preference,Maybe +LEC005,19,Economics,53703,47.606209,-122.332069,pineapple,neither,No,no preference,Maybe +LEC005,21,Science: Biology/Life,53726,40.76078,-111.891045,mushroom,dog,No,no preference,Yes +LEC003,19,Engineering: Mechanical,53706,43,-88.27,Other,dog,No,night owl,Yes +LEC003,20,Business: Other|Accounting,53726,43,-89,pepperoni,dog,Yes,early bird,Yes +LEC005,18,Engineering: Other,53706,64.147209,-21.9424,pepperoni,dog,No,night owl,Yes +LEC003,18,Data Science,53562,42.66544,21.165319,pepperoni,dog,No,night owl,Yes +LEC005,22,Data Science,53711,39.738449,-104.984848,none (just cheese),dog,No,night owl,Yes +LEC003,18,Engineering: Mechanical,53706,33.748997,-84.387985,mushroom,dog,No,night owl,Yes +LEC004,19,Engineering: Mechanical,53717,41.2224,86.413,Other,dog,Yes,early bird,Maybe +LEC003,19,Business: Actuarial,53706,39.299236,-76.609383,pineapple,dog,Yes,night owl,No +LEC001,,Engineering: Mechanical,53703,32.776665,-96.796989,sausage,dog,No,night owl,Maybe +LEC004,19,Engineering: Biomedical,53703,41.878113,-87.629799,pepperoni,dog,Yes,no preference,Yes +LEC004,26,Master of Public Affairs,53715,48.118145,-123.43074,basil/spinach,dog,Yes,early bird,Yes +LEC004,19,Engineering: Mechanical,53703,-12.12168,-45.013481,basil/spinach,dog,No,night owl,Yes +LEC004,18,Data Science,53706,31.230391,121.473701,sausage,cat,No,night owl,No +LEC005,21,Engineering: Industrial,53715,1.352083,103.819839,none (just cheese),neither,No,night owl,Yes +LEC004,19,Engineering: Mechanical,53703,40.712776,-74.005974,sausage,dog,No,early bird,No +LEC004,19,Engineering: Mechanical,53715,37.98381,23.727539,basil/spinach,dog,Yes,early bird,No +LEC005,20,Business: Actuarial,53703,45.003288,-90.329788,sausage,dog,No,early bird,Maybe +LEC005,20,Engineering: Mechanical,53703,43.073051,-89.40123,pepperoni,dog,Yes,early bird,No +LEC001,21,Economics,53703,41.902782,12.496365,basil/spinach,dog,No,no preference,No +LEC004,18,Engineering: Biomedical,53706,45.4894,93.2476,mushroom,cat,No,night owl,No +LEC005,19,Data Science,53703,43.2708,89.7221,sausage,dog,Yes,night owl,No +LEC003,,Engineering: Mechanical,53706,45.87128,-89.711632,pepperoni,neither,Yes,no preference,Yes +LEC004,19,Engineering: Mechanical,53715,42.360081,-71.058884,pepperoni,dog,Yes,night owl,Maybe +LEC004,18,Engineering: Mechanical,53706,45.056389,-92.960793,pepperoni,dog,No,night owl,Yes +LEC003,,Computer Science,53703,43.07,-89.4,pepperoni,dog,Yes,no preference,Maybe +LEC001,20,Business: Finance,53703,22.20315,-159.495651,Other,dog,Yes,no preference,No +LEC005,19,Engineering: Mechanical,53703,44.74931,-92.80088,pineapple,dog,No,early bird,No +LEC004,21,Business: Actuarial,53726,38.874341,-77.032013,pepperoni,dog,No,no preference,Yes +LEC005,19,Engineering: Mechanical,53703,18.34791,-64.71424,basil/spinach,dog,No,night owl,No +LEC004,18,Engineering: Mechanical,53703,27.5041,82.7145,sausage,dog,No,night owl,Maybe +LEC005,19,Engineering: Biomedical,53706,36.462,25.375465,basil/spinach,dog,No,night owl,No +LEC004,27,Environment & Resources,53703,37.389091,-5.984459,mushroom,dog,No,night owl,Maybe +LEC004,19,Business: Actuarial,53726,32,-117,pepperoni,neither,Yes,night owl,Yes +LEC005,20,Science: Physics,53703,46.2833,-89.73,pepperoni,dog,No,early bird,Maybe +LEC003,19,Engineering: Industrial,53703,40.712776,-74.005974,basil/spinach,dog,Yes,night owl,No +LEC003,18,Data Science,53706,40.712776,-74.005974,Other,dog,Yes,early bird,No +LEC005,,Data Science,53703,43.073051,-89.40123,pepperoni,dog,No,night owl,No +LEC004,21,Business: Actuarial,53703,39.19067,-106.819199,macaroni/pasta,cat,No,no preference,Maybe +LEC006,18,Engineering: Industrial,53706,37.743042,-122.415642,green pepper,dog,Yes,no preference,No +LEC003,20,Economics,53703,22.54,114.05,pineapple,dog,No,night owl,Yes +LEC006,18,Data Science,53706,59.93428,30.335098,pineapple,dog,Yes,night owl,Maybe +LEC004,19,Engineering: Mechanical,53715,45.10994,-87.209793,pepperoni,dog,Yes,early bird,No +LEC002,20,Science: Biology/Life,53703,51.507351,-0.127758,pepperoni,dog,Yes,no preference,Yes +LEC004,18,Environmental Studies,53703,42.360081,-71.058884,pineapple,cat,No,no preference,Maybe +LEC004,19,Engineering: Mechanical,53715,45,-87,sausage,cat,Yes,no preference,Maybe +LEC004,19,Engineering: Mechanical,53703,48.137,11.575,pepperoni,dog,Yes,night owl,Maybe +LEC004,20,Engineering: Industrial,53711,48.856613,2.352222,sausage,cat,No,no preference,No +LEC004,18,Science: Other,53706,48.410648,-114.338188,none (just cheese),dog,No,no preference,Maybe +LEC004,18,Mathematics/AMEP,53706,24.585445,73.712479,pineapple,dog,Yes,night owl,Maybe +LEC003,18,Data Science,53706,36.974117,-122.030792,pepperoni,cat,Yes,night owl,Yes +LEC004,19,Computer Science,53715,40.79254,-98.70807,pepperoni,dog,Yes,night owl,No +LEC005,19,Engineering: Mechanical,53711,30.572815,104.066803,pineapple,dog,No,night owl,Yes +LEC001,21,Science: Chemistry,53715,3.139003,101.686852,pepperoni,neither,No,no preference,Maybe +LEC006,18,Data Science,53706,40.46,-90.67,sausage,dog,No,night owl,No +LEC004,20,Science: Other|Environmental Science,53715,43.073051,-89.40123,sausage,dog,No,night owl,Yes +LEC004,20,Engineering: Biomedical,53715,30.328227,-86.136975,pepperoni,dog,Yes,no preference,Maybe +LEC004,21,Science: Biology/Life,53703,41.385063,2.173404,macaroni/pasta,dog,No,night owl,Yes +LEC003,18,Mathematics/AMEP,53706,42.99571,-90,sausage,dog,Yes,night owl,Yes +LEC004,19,Engineering: Mechanical,53703,41.385063,2.173404,sausage,dog,Yes,night owl,Yes +LEC001,,Engineering: Industrial,53706,40.7128,74.006,pepperoni,dog,No,early bird,Yes +LEC005,18,Psychology,53706,9.167414,77.876747,mushroom,cat,No,early bird,No +LEC003,19,Engineering: Industrial,53715,24.713552,46.675297,basil/spinach,neither,Yes,early bird,Maybe +LEC001,18,Undecided,53706,44.8341,87.377,basil/spinach,dog,No,no preference,Yes +LEC003,19,Engineering: Mechanical,53705,46.589146,-112.039108,none (just cheese),cat,No,night owl,Yes +LEC001,20,Economics,53703,39.631506,118.143239,pineapple,dog,No,night owl,Maybe \ No newline at end of file diff --git a/sum23/lecture_materials/14_Comprehensions/lec-14-worksheet.pdf b/sum23/lecture_materials/14_Comprehensions/lec-14-worksheet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d0451a24284533c8c82ca8185ef74f346cfd603a GIT binary patch literal 62839 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 literal 0 HcmV?d00001 diff --git a/sum23/lecture_materials/14_Comprehensions/lec_14_comprehensions_template.ipynb b/sum23/lecture_materials/14_Comprehensions/lec_14_comprehensions_template.ipynb new file mode 100644 index 0000000..45c3df5 --- /dev/null +++ b/sum23/lecture_materials/14_Comprehensions/lec_14_comprehensions_template.ipynb @@ -0,0 +1,1127 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Comprehensions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# import statements\n", + "import math\n", + "import csv" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using `lambda`\n", + "- `lambda` functions are a way to abstract a function reference\n", + "- lambdas are simple functions with:\n", + " - multiple possible parameters\n", + " - single expression line as the function body\n", + "- lambdas are useful abstractions for:\n", + " - mathematical functions\n", + " - lookup operations\n", + "- lambdas are often associated with a collection of values within a list\n", + "- Syntax: \n", + "```python \n", + "lambda parameters: expression\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's sort the menu in different ways\n", + "- whenever you need to custom sort a dictionary, you must convert dict to list of tuples\n", + "- recall that you can use items method (applicable only to a dictionary)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'broccoli': 4.99,\n", + " 'orange': 1.19,\n", + " 'pie': 3.95,\n", + " 'donut': 1.25,\n", + " 'muffin': 2.25,\n", + " 'cookie': 0.79,\n", + " 'milk': 1.65,\n", + " 'bread': 5.99}" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "menu = { \n", + " 'broccoli': 4.99,\n", + " 'orange': 1.19,\n", + " 'pie': 3.95, \n", + " 'donut': 1.25, \n", + " 'muffin': 2.25,\n", + " 'cookie': 0.79, \n", + " 'milk':1.65, \n", + " 'bread': 5.99} \n", + "menu" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "menu.items()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sort menu using item names (keys)\n", + "- let's first solve this using extract function\n", + "- recall that extract function deals with one of the inner items in the outer data structure\n", + " - outer data structure is list\n", + " - inner data structure is tuple" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def extract(menu_tuple):\n", + " return ???" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sorted(menu.items(), key = ???)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dict(sorted(menu.items(), key = ???))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now let's solve the same problem using lambdas\n", + "- if you are having trouble thinking through the lambda solution directly:\n", + " - write an extract function\n", + " - then abstract it to a lambda" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dict(sorted(menu.items(), key = lambda menu_tuple : ???))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sort menu using prices (values)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dict(sorted(menu.items(), key = lambda ??? : ???))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sort menu using length of item names (keys)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dict(sorted(menu.items(), key = ???))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sort menu using decreasing order of prices - v1" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'bread': 5.99,\n", + " 'broccoli': 4.99,\n", + " 'pie': 3.95,\n", + " 'muffin': 2.25,\n", + " 'milk': 1.65,\n", + " 'donut': 1.25,\n", + " 'orange': 1.19,\n", + " 'cookie': 0.79}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dict(sorted(menu.items(), key = lambda menu_tuple: menu_tuple[1], reverse = True))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sort menu using decreasing order of prices - v2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dict(sorted(menu.items(), key = ???))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Iterable\n", + "\n", + "- What is an iterable? Anything that you can write a for loop to iterate over is called as an iterable.\n", + "- Examples of iteratables:\n", + " - `list`, `str`, `tuple`, `range()` (any sequence)\n", + " - `dict`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## List comprehensions\n", + "\n", + "- concise way of generating a new list based on existing list item manipulation \n", + "- short syntax - easier to read, very difficult to debug\n", + "\n", + "<pre>\n", + "new_list = [expression for val in iterable if conditional_expression]\n", + "</pre>\n", + "- iteratble: reference to any iterable object instance\n", + "- conditional_expression: filters the values in the original list based on a specific requirement\n", + "- expression: can simply be val or some other transformation of val\n", + "- enclosing [ ] represents new list\n", + "\n", + "Best approach:\n", + "- write for clause first\n", + "- if condition expression next\n", + "- expression in front of for clause last" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Which animals are in all caps?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Recap: retain animals in all caps\n", + "animals = [\"lion\", \"badger\", \"RHINO\", \"GIRAFFE\"]\n", + "caps_animals = []\n", + "print(\"Original:\", animals)\n", + "\n", + "# for val in animals:\n", + "# if val.upper() == val:\n", + "# caps_animals.append(val) \n", + " \n", + "print(\"New list:\", caps_animals)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now let's solve the same problem using list comprehension\n", + "<pre>\n", + "new_list = [expression for val in iterable if conditional_expression]\n", + "</pre>\n", + "For the below example:\n", + "- iterable: animals variable (storing reference to a list object instance)\n", + "- conditional_expression: val.upper() == val\n", + "- expression: val itself" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# List comprehension version\n", + "print(\"Original:\", animals)\n", + "\n", + "caps_animals = ???\n", + "print(\"New list:\", caps_animals)\n", + "\n", + "# final version to uncomment if you want:\n", + "# caps_animals = [val for val in animals if val.upper() == val]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Why is to tougher to debug?\n", + "- you cannot use a print function call in a comprehension\n", + "- you need to decompose each part and test it separately\n", + "- recommended to write the comprehension with a simpler example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Other than a badger, what animals can you see at Henry Vilas Zoo?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Original:\", animals)\n", + "\n", + "non_badger_zoo_animals = ???\n", + "\n", + "# step 1\n", + "# non_badger_zoo_animals = [??? for val in animals ???]\n", + " \n", + "# # step 2\n", + "# non_badger_zoo_animals = [??? for val in animals if val != \"badger\"] \n", + "\n", + "# # step 3\n", + "# non_badger_zoo_animals = [val for val in animals if val != \"badger\"]\n", + "\n", + "print(\"New list:\", non_badger_zoo_animals)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Can we convert all of the animals to all caps?\n", + "- if clause is optional" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Original:\", animals)\n", + "\n", + "all_caps_animals = ???\n", + "print(\"New list:\", all_caps_animals)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Can we generate a list to store length of each animal name?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Original:\", animals)\n", + "\n", + "animals_name_length = ???\n", + "print(\"New list:\", animals_name_length)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using if ... else ... in a list comprehension\n", + "- syntax changes slightly for if ... else ...\n", + "\n", + "<pre>\n", + "new_list = [expression if conditional_expression else alternate_expression for val in iterable ]\n", + "</pre>\n", + "\n", + "- when an item satifies the if clause, you don't execute the else clause\n", + " - expression is the item in new list when if condition is satified\n", + "- when an item does not satisfy the if clause, you execute the else clause\n", + " - alternate_expression is the item in new list when if condition is not satisfied\n", + " \n", + "- if ... else ... clauses need to come before for (not the same as just using if clause)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What if we only care about the badger? Replace non-badger animals with \"some animal\"." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Original: ['lion', 'badger', 'RHINO', 'GIRAFFE']\n", + "New list: ['some animal', 'badger', 'some animal', 'some animal']\n" + ] + } + ], + "source": [ + "animals = [\"lion\", \"badger\", \"RHINO\", \"GIRAFFE\"]\n", + "print(\"Original:\", animals)\n", + "\n", + "non_badger_zoo_animals = ???\n", + "\n", + "# # step 1:\n", + "# non_badger_zoo_animals = [ ??? for val in animals ???]\n", + "\n", + "# # step 2:\n", + "# non_badger_zoo_animals = [ ??? if val == \"badger\" else ??? for val in animals]\n", + "\n", + "# # step 3: fill in \"val\"\n", + "# non_badger_zoo_animals = [val if val == \"badger\" else ?? for val in animals]\n", + "\n", + "# # step 4: fill in else case\n", + "# non_badger_zoo_animals = [val if val == \"badger\" else \"some animal\" for val in animals]\n", + "\n", + "print(\"New list:\", non_badger_zoo_animals)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dict comprehensions\n", + "- Version 1:\n", + "<pre>\n", + "{expression for val in iterable if condition}\n", + "</pre>\n", + "- expression has the form <pre>key: val</pre>\n", + "<br/>\n", + "- Version 2 --- the dict function call by passing list comprehension as argument:\n", + "<pre>dict([expression for val in iterable if condition])</pre>\n", + "- expression has the form <pre>(key, val)</pre>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create a dict to map number to its square (for numbers 1 to 5)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "squares_dict = dict()\n", + "for val in range(1, 6):\n", + " squares_dict[val] = val * val\n", + "print(squares_dict)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dict comprehension --- version 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "square_dict = { ??? }\n", + "print(square_dict)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Dict comprehension --- version 2" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "square_dict = dict( [ ??? ] )\n", + "print(square_dict)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Tuple unpacking\n", + "- you can directly specific variables to unpack the items inside a tuple" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scores_dict = {\"Bob\": \"32\", \"Cindy\" : \"45\", \"Alice\": \"39\", \"Unknown\": \"None\"}\n", + "\n", + "for tuple_item in scores_dict.items():\n", + " print(tuple_item)\n", + " \n", + "print(\"--------------------\")\n", + "\n", + "for ??? in scores_dict.items():\n", + " print(key, val)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### From square_dict, let's generate cube_dict" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "cube_dict = {key: ??? for key, val in square_dict.items()}\n", + "print(cube_dict)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Convert Madison *F temperature to *C\n", + "- <pre>C = 5 / 9 * (F - 32)</pre>" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "madison_fahrenheit = {'Nov': 28,'Dec': 20, 'Jan': 10,'Feb': 14}\n", + "print(\"Original:\", madison_fahrenheit)\n", + "\n", + "madison_celsius = {key: ??? \\\n", + " for key, val in madison_fahrenheit.items()}\n", + "print(\"New dict:\", madison_celsius)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Convert type of values in a dictionary" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scores_dict = {\"Bob\": \"32\", \"Cindy\" : \"45\", \"Alice\": \"39\", \"Unknown\": \"None\"}\n", + "print(\"Original:\", scores_dict)\n", + "\n", + "updated_scores_dict = {???}\n", + " \n", + "# # step 1: add for statement\n", + "# updated_scores_dict = { ??? for key, val in scores_dict.items() ???}\n", + "\n", + "# # step 2: add if statement - but use if/else to handle None values\n", + "# updated_scores_dict = { ??? if val.isdigit() else ??? for key, val in scores_dict.items()}\n", + "\n", + "# # step 3: fill in \"if\" and \"else\" values\n", + "# updated_scores_dict = {key: int(val) if val.isdigit() else None \\\n", + "# for key, val in scores_dict.items()}\n", + "\n", + "print(\"New dict:\", updated_scores_dict)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create a dictionary to map each player to their max score" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scores_dict = {\"Bob\": [18, 72, 61, 5, 83], \n", + " \"Cindy\" : [27, 11, 55, 73, 87], \n", + " \"Alice\": [16, 33, 42, 89, 90], \n", + " \"Meena\": [39, 93, 9, 3, 55]}\n", + "\n", + "{player: max(scores) for player, scores in scores_dict.items()}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Practice problems - sorted + lambda" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Use sorted and lambda function to sort this list of dictionaries based on the score, from low to high" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scores = [ {\"name\": \"Bob\", \"score\": 32} ,\n", + " {\"name\": \"Cindy\", \"score\" : 45}, \n", + " {\"name\": \"Alice\", \"score\": 39}\n", + " ]\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now, modify the lambda function part alone to sort the list of dictionaries based on the score, from high to low" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now, go back to the previous lambda function definition and use sorted parameters to sort the list of dictionaries based on the score, from high to low" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Student Information Survey dataset analysis" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def median(items):\n", + " items.sort()\n", + " n = len(items)\n", + " if n % 2 != 0:\n", + " middle = items[n // 2]\n", + " else:\n", + " first_middle = items[n // 2]\n", + " second_middle = items[(n // 2) - 1]\n", + " middle = (first_middle + second_middle) / 2\n", + " return middle" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# inspired by https://automatetheboringstuff.com/2e/chapter16/\n", + "def process_csv(filename):\n", + " exampleFile = open(filename, encoding=\"utf-8\") \n", + " exampleReader = csv.reader(exampleFile) \n", + " exampleData = list(exampleReader) \n", + " exampleFile.close() \n", + " return exampleData\n", + "\n", + "survey_data = process_csv('cs220_survey_data.csv')\n", + "cs220_header = survey_data[0]\n", + "cs220_data = survey_data[1:]\n", + "cs220_header" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def cell(row_idx, col_name):\n", + " \"\"\"\n", + " Returns the data value (cell) corresponding to the row index and \n", + " the column name of a CSV file.\n", + " \"\"\"\n", + " col_idx = cs220_header.index(col_name) \n", + " val = cs220_data[row_idx][col_idx] \n", + " \n", + " # handle missing values\n", + " if val == '':\n", + " return None\n", + " \n", + " # handle type conversions\n", + " if col_name == \"Age\":\n", + " val = int(val)\n", + " if 0 < val <= 118:\n", + " return val\n", + " else:\n", + " # Data cleaning\n", + " return None\n", + " elif col_name in ['Zip Code',]:\n", + " return int(val)\n", + " elif col_name in ['Latitude', 'Longitude']:\n", + " return float(val)\n", + " \n", + " return val" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def transform(header, data):\n", + " \"\"\"\n", + " Transform data into a list of dictionaries, while taking care of type conversions\n", + " \"\"\"\n", + " #should be defined outside the for loop, because it stores the entire data\n", + " dict_list = [] \n", + " for row_idx in range(len(data)):\n", + " row = data[row_idx]\n", + " #should be defined inside the for loop, because it represents one row as a \n", + " #dictionary\n", + " new_row = {} \n", + " for i in range(len(header)):\n", + " val = cell(row_idx, header[i])\n", + " new_row[header[i]] = val\n", + " dict_list.append(new_row)\n", + " return dict_list\n", + " \n", + "transformed_data = transform(cs220_header, cs220_data)\n", + "transformed_data[:2] # top 2 rows" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def bucketize(data, bucket_column):\n", + " \"\"\"\n", + " data: expects list of dictionaries\n", + " bucket_column: column for bucketization\n", + " generates and returns bucketized data based on bucket_column\n", + " \"\"\"\n", + " # Key: unique bucketize column value; Value: list of dictionaries \n", + " # (rows having that unique column value)\n", + " buckets = dict()\n", + " for row_dict in data:\n", + " col_value = row_dict[bucket_column]\n", + " if col_value not in buckets:\n", + " buckets[col_value] = []\n", + " buckets[col_value].append(row_dict)\n", + " \n", + " return buckets" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What is the average age of \"LEC001\" students?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "lecture_buckets = bucketize(transformed_data, \"Lecture\")\n", + "lec001_bucket = lecture_buckets[\"LEC001\"]\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What is the average age of \"LEC001\" students who like \"pineapple\" pizza topping?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What are the sleep habits of the youngest students?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "min_age = None\n", + "\n", + "# pass 1: find minimum age\n", + "\n", + "\n", + "# pass 2: find sleep habit of students with minimum age\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### How many students are there is each lecture?\n", + "- Create a `dict` mapping each lecture to the count of students." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# v1\n", + "{}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# v2\n", + "{}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Find whether 15 oldest students in the class are runners?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "students_with_age = []" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Compute median age per lecture in one step using `dict` and `list` comprehension." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "age_by_lecture = {} # Key: lecture; Value: list of ages\n", + "\n", + "for lecture in lecture_buckets:\n", + " lecture_students = lecture_buckets[lecture]\n", + " ages = []\n", + " for student in lecture_students:\n", + " age = student[\"Age\"]\n", + " if age == None:\n", + " continue\n", + " ages.append(age)\n", + " age_by_lecture[lecture] = ages\n", + "\n", + "median_age_by_lecture = {} # Key: lecture; Value: median age of that lecture\n", + "for lecture in age_by_lecture:\n", + " median_age = median(age_by_lecture[lecture])\n", + " median_age_by_lecture[lecture] = median_age\n", + " \n", + "print(median_age_by_lecture)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Compute max age per lecture in one step using `dict` and `list` comprehension." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Practice problems - comprehensions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate a new list where each number is a square of the original nummber in numbers list" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "numbers = [44, 33, 56, 21, 19]\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate a new list of floats from vac_rates, that is rounded to 3 decimal points" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "vac_rates = [23.329868, 51.28772, 76.12232, 17.2, 10.5]\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Generate a new list of ints from words, that contains length of each word" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "words = ['My', 'very', 'educated', 'mother', 'just', 'served', 'us', 'noodles']\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create 2 dictionaries to map each player to their min and avg score" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scores_dict = {\"Bob\": [18, 72, 61, 5, 83], \n", + " \"Cindy\" : [27, 11, 55, 73, 87], \n", + " \"Alice\": [16, 33, 42, 89, 90], \n", + " \"Meena\": [39, 93, 9, 3, 55]}\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Student Information Survey dataset" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create dict mapping unique age to count of students with that age.\n", + "- Order the dictionary based on increasing order of ages\n", + "- Make sure to drop student dictionaries which don't have Age column information (we already did this in a previous example)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Find whether 15 youngest students in the class are pet owners?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sum23/lecture_materials/14_Func_Refs/lec_14_function_references_template.ipynb b/sum23/lecture_materials/14_Func_Refs/lec_14_function_references_template.ipynb new file mode 100644 index 0000000..f735f5d --- /dev/null +++ b/sum23/lecture_materials/14_Func_Refs/lec_14_function_references_template.ipynb @@ -0,0 +1,967 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Function references" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Recursion review" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Nested data structures are defined recursively.\n", + "\n", + "# A Python list can contain lists\n", + "# A Python dictionary can contain dictionaries\n", + "# A JSON dictionary can contain a JSON dictionary" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Trace Recursion by hand\n", + "# Run this on your own in Python Tutor\n", + "\n", + "def mystery(a, b): \n", + " # precondition: assume a > 0 and b > 0\n", + " if b == 1: \n", + " return a\n", + " return a * mystery(a, b - 1)\n", + "\n", + "# make a function call here\n", + "mystery(3, 2)\n", + "\n", + "# TODO: what does the mystery function compute?\n", + "\n", + "# Question: What would be the result of the below function call?\n", + "# mystery(-3, -1) \n", + "# Answer: " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Learning Objectives:\n", + "\n", + "- Define a function reference and trace code that uses function references.\n", + "- Explain the default use of `sorted()` on lists of tuples, and dictionaries.\n", + "- Sort a list of tuples, a list of dictionaries, or a dictionary using a function as a key.\n", + "- Use a lambda expression when sorting." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Functions are objects\n", + "\n", + "- Every data in Python is an object instance, including a function definition\n", + "- Implications:\n", + " - variables can reference functions\n", + " - lists/dicts can reference functions\n", + " - we can pass function references to other functions\n", + " - we can pass lists of function references to other functions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 1: function object references\n", + "#### Use PyTutor to step through this example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "l1 = [1, 2, 3] # Explanation: l1 should reference a new list object\n", + "l2 = l1 # Explanation: l2 should reference whatever l1 references\n", + "\n", + "def f(l): # Explanation: f should reference a new function object\n", + " return l[-1]\n", + "\n", + "g = f # Explanation: g should reference whatever f references\n", + "\n", + "num = f(l2) # Explanation: l should reference whatever l2 references\n", + " # Explanation: num should reference whatever f returns\n", + "\n", + "print(num)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Function references\n", + "\n", + "- Since function definitions are objects in Python, function reference is a variable that refers to a function object.\n", + "- In essence, it gives a function another name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Both these calls would have run the same code, returning the same result\n", + "num = f(l1)\n", + "num = g(l2) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 2: function references can be passed as arguments to another function, wow!\n", + "#### Use PyTutor to step through this example" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def say_hi():\n", + " print(\"Hello there!\")\n", + "\n", + "def say_bye():\n", + " print(\"Wash your hands and stay well, bye!\")\n", + " \n", + "f = say_hi\n", + "f()\n", + "f()\n", + "f = say_bye\n", + "f()\n", + "f()\n", + "f()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(2):\n", + " say_hi()\n", + "\n", + "for i in range(3):\n", + " say_bye()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def call_n_times(f, n):\n", + " for i in range(n):\n", + " f()\n", + "\n", + "call_n_times(say_hi, 2)\n", + "call_n_times(say_bye, 3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# call_n_times(say_bye(), 3) # uncomment to see TypeError\n", + "\n", + "# Question: Why does this give TypeError?\n", + "# Answer: when you specify say_bye(), you are invoking the function, which returns None\n", + "# (default return value when return statement is not defined)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 3: Apply various transformations to all items on a list" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "L = [\"1\", \"23\", \"456\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Write apply_to_each function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# a. Input: list object reference, function object\n", + "# b. Output: new list reference to transformed object\n", + "# c. Pseudocode:\n", + "# 1. Initiliaze new empty list for output - we don't want to modify \n", + "# the input list! \n", + "# 2. Process each item in input list\n", + "# 3. Apply the function passed as arugment to 2nd parameter\n", + "# 4. And the transformed item into output list\n", + "# 5. return output list\n", + "\n", + "def apply_to_each(original_L, f):\n", + " \"\"\"\n", + " returns a new list with transformed items, by applying f function\n", + " to each item in the original list\n", + " \"\"\"\n", + "\n", + " # step 1: create a new list\n", + " # new_vals = []\n", + "\n", + " # step 2: iterate through items in original_L\n", + " # for val in original_L:\n", + " # step 3: apply f to each item\n", + " # new_vals.append(f(val))\n", + " \n", + " # step 4: return new list\n", + " # return new_vals \n", + " pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Apply `int` function to list L using apply_to_each function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "apply_to_each(..., ...)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Write strip_dollar function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# a. Input: string value\n", + "# b. Output: transformed string value\n", + "# c. Pseudocode: \n", + "# 1. Check whether input string begins with $ - \n", + "# what string method do you need here?\n", + "# 2. If so remove it\n", + "\n", + "def strip_dollar(s):\n", + " \"\"\"\n", + " Removes the beginning $ sign from string s\n", + " \"\"\"\n", + "\n", + " # Step 1: check whether input string begins with $\n", + " if s.???(\"$\"):\n", + " # Step 2: if so, remove it\n", + " s = s[1:]\n", + " \n", + " # Step 3: return the new string\n", + " return s" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Apply strip_dollar function and then apply int function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "L = [\"$1\", \"23\", \"$456\"]\n", + "vals = apply_to_each(L, strip_dollar)\n", + "print(vals)\n", + "vals = apply_to_each(vals, int)\n", + "print(vals)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Apply upper method call to the below list L by using apply_to_each function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "L = [\"aaa\", \"bbb\", \"ccc\"]\n", + "vals = apply_to_each(L, ???)\n", + "print(vals)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Custom sorting nested data structures\n", + "\n", + "Examples:\n", + "- list of tuples\n", + "- list of dictionaries" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 4: Custom sort a list of tuples" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "badgers_in_nfl = [ # tuple storing (first name, last name, age)\n", + " (\"Jonathan\", \"Taylor\", 22 ), \n", + " (\"Russel\", \"Wilson\", 32), \n", + " (\"Troy\", \"Fumagalli\", 88),\n", + " (\"Melvin\", \"Gordon\", 27), \n", + " (\"JJ\", \"Watt\", 31),\n", + " ]\n", + "\n", + "sorted(badgers_in_nfl) # or sort() method by default uses first element to sort" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### What what if we want to sort by the last name or by the length of the name?\n", + "\n", + "- `sorted` function and `sort` method takes a function reference as keyword argument for the parameter `key`\n", + "- We can define functions that take one of the inner data structure as argument and return the field based on which we want to perform the sorting.\n", + " - We then pass a reference to such a function as argument to the parameter `key`.\n", + " \n", + "#### Define functions that will enable extraction of item at each tuple index position. These functions only deal with a single tuple processing" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def extract_fname(player_tuple): # function must have exactly one parameter\n", + " return player_tuple[0]\n", + "\n", + "# def extract_lname(player_tuple):\n", + "# return ???\n", + "\n", + "# def extract_age(player_tuple):\n", + "# return ???" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Test extract_fname function on the tuple ('JJ', 'Watt', 31)\n", + "extract_fname(('JJ', 'Watt', 31))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Sort players by their last name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sorted(badgers_in_nfl, key = ???) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Sort players by their age" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sorted(badgers_in_nfl, key = ???) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Sort players by descending order of age" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sorted(badgers_in_nfl, key = ???, reverse = ???) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Sort players by length of first name + length of last name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def compute_name_length(player_tuple):\n", + " return ???\n", + "\n", + "sorted(badgers_in_nfl, ???) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 5: Custom sort a list of dictionaries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "hurricanes = [\n", + " {\"name\": \"A\", \"year\": 2000, \"speed\": 150},\n", + " {\"name\": \"B\", \"year\": 1980, \"speed\": 100},\n", + " {\"name\": \"C\", \"year\": 1990, \"speed\": 250},\n", + "]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Extract hurricane at index 0" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "hurricanes[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Extract hurricane at index 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "hurricanes[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Can you compare hurricane at index 0 and hurricane at index 1 using \"<\" operator?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# hurricanes[0] < hurricanes[1] #uncomment to see TypeError" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### What about calling sorted method by passing hurricanes as argument?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# sorted(hurricanes) # Doesn't work because there isn't a defined \"first\" key in a dict.\n", + "# Unlike tuple, where the first item can be considered \"first\" by ordering." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sort hurricanes based on the year" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# a. Input: single hurricane's dict\n", + "# b. Output: return \"year\" value from the dict\n", + "\n", + "def get_year(hurricane_dict):\n", + " ???\n", + "\n", + "sorted(hurricanes, ???)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sort hurricanes in descending order of their year" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sorted(hurricanes, key = get_year, reverse = True) \n", + "# alternatively get_year function could return negative of year \n", + "# --- that produces the same result as passing True as argument to reverse parameter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sort hurricanes in ascending order of their speed" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "hurricanes = [\n", + " {\"name\": \"A\", \"year\": 2000, \"speed\": 150},\n", + " {\"name\": \"B\", \"year\": 1980, \"speed\": 100},\n", + " {\"name\": \"C\", \"year\": 1990}, # notice the missing speed key\n", + "]\n", + "\n", + "def get_speed(hurricane):\n", + " return ???\n", + "\n", + "sorted(hurricanes, key = get_speed)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 6: How can you pass string method to sorted function?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sorted([\"A\", \"b\", \"C\", \"d\"])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sorted([\"A\", \"b\", \"C\", \"d\"], key = ???) \n", + "# hint: to capitalize \"hello\", we call \"hello\".upper() or str.upper(\"hello\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sorting dictionary by keys / values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example 7: sorting dictionaries" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "players = {\n", + " \"bob\": 20, \n", + " \"alice\": 8, \n", + " \"alex\": 9, \n", + " \"cindy\": 15} # Key: player_name; Value: score\n", + "players" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### This only returns a list of sorted keys. What if we want to create a new sorted dictionary object directly using sorted function?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sorted(players) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Let's learn about items method on a dictionary\n", + "- returns a list of tuples\n", + "- each tuple item contains two items: key and value" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# players.items()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Write an extract function to extract dict value (that is player score), using items method return value" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def extract_score(player_tuple):\n", + " return player_tuple[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Sort players dict by key" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# we'll walk through this step-by-step\n", + "# step1: \n", + "sorted(???, key = ???)\n", + "\n", + "# step 2: fill in blanks\n", + "# sorted(players, key = extract_score) # --> uncomment!\n", + "\n", + "# step 3: evaluate the input, is it right?\n", + "# no -- what's happening? see next cell\n", + "# We want the input to extract_score to be a tuple, not a key\n", + "\n", + "# fix the code\n", + "# sorted(players.items(), key = extract_score) --> uncomment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# when we call sorted(players, key = extract_score), this is what gets compared under the hood:\n", + "for item in players:\n", + " print(item[1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How can you convert sorted list of tuples back into a `dict`?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sorted(players, key=extract_score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for item in players:\n", + " print(item[1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using `lambda`\n", + "- `lambda` functions are a way to abstract a function reference\n", + "- lambdas are simple functions with:\n", + " - multiple possible parameters\n", + " - single expression line as the function body\n", + "- lambdas are useful abstractions for:\n", + " - mathematical functions\n", + " - lookup operations\n", + "- lambdas are often associated with a collection of values within a list\n", + "- Syntax: \n", + "```python \n", + "lambda parameters: expression\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now let's write the same solution using lambda." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dict(sorted(players.items(), key = lambda item: item[1] ))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What about sorting dictionary by values using lambda?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dict(sorted(players.items(), key = ???))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now let's sort players dict using length of player name." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dict(sorted(players.items(), key = ???))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Self-practice: Use lambdas to solve the NFL sorting questions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(badgers_in_nfl)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Sort players using their first name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Sort players using their last name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Sort players using their age" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Sort players using the length of first name and last name" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "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.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} -- GitLab