diff --git a/01_Getting_&_Knowing_Your_Data/Chipotle/Exercise_with_Solutions.ipynb b/01_Getting_&_Knowing_Your_Data/Chipotle/Exercise_with_Solutions.ipynb index 32d1e7df8..7af3bb8a8 100644 --- a/01_Getting_&_Knowing_Your_Data/Chipotle/Exercise_with_Solutions.ipynb +++ b/01_Getting_&_Knowing_Your_Data/Chipotle/Exercise_with_Solutions.ipynb @@ -47,14 +47,14 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/chipotle.tsv'\n", - " \n", + "\n", "chipo = pd.read_csv(url, sep = '\\t')" ] }, @@ -77,6 +77,19 @@ "data": { "text/html": [ "
\n", + "\n", "\n", " \n", " \n", @@ -253,13 +266,15 @@ "\n", "RangeIndex: 4622 entries, 0 to 4621\n", "Data columns (total 5 columns):\n", - "order_id 4622 non-null int64\n", - "quantity 4622 non-null int64\n", - "item_name 4622 non-null object\n", - "choice_description 3376 non-null object\n", - "item_price 4622 non-null object\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 order_id 4622 non-null int64 \n", + " 1 quantity 4622 non-null int64 \n", + " 2 item_name 4622 non-null object\n", + " 3 choice_description 3376 non-null object\n", + " 4 item_price 4622 non-null object\n", "dtypes: int64(2), object(3)\n", - "memory usage: 180.6+ KB\n" + "memory usage: 180.7+ KB\n" ] } ], @@ -315,8 +330,8 @@ { "data": { "text/plain": [ - "Index([u'order_id', u'quantity', u'item_name', u'choice_description',\n", - " u'item_price'],\n", + "Index(['order_id', 'quantity', 'item_name', 'choice_description',\n", + " 'item_price'],\n", " dtype='object')" ] }, @@ -376,17 +391,34 @@ "data": { "text/html": [ "
\n", + "\n", "
\n", " \n", " \n", " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -394,15 +426,25 @@ " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", "
order_idquantitychoice_descriptionitem_price
item_name
Chicken Bowl713926761[Tomatillo-Red Chili Salsa (Hot), [Black Beans...$16.98 $10.98 $11.25 $8.75 $8.49 $11.25 $8.75 ...
\n", "
" ], "text/plain": [ - " order_id quantity\n", - "item_name \n", - "Chicken Bowl 713926 761" + " order_id quantity \\\n", + "item_name \n", + "Chicken Bowl 713926 761 \n", + "\n", + " choice_description \\\n", + "item_name \n", + "Chicken Bowl [Tomatillo-Red Chili Salsa (Hot), [Black Beans... \n", + "\n", + " item_price \n", + "item_name \n", + "Chicken Bowl $16.98 $10.98 $11.25 $8.75 $8.49 $11.25 $8.75 ... " ] }, "execution_count": 9, @@ -435,17 +477,34 @@ "data": { "text/html": [ "
\n", + "\n", "\n", " \n", " \n", " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -453,15 +512,25 @@ " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", "
order_idquantitychoice_descriptionitem_price
item_name
Chicken Bowl713926761[Tomatillo-Red Chili Salsa (Hot), [Black Beans...$16.98 $10.98 $11.25 $8.75 $8.49 $11.25 $8.75 ...
\n", "
" ], "text/plain": [ - " order_id quantity\n", - "item_name \n", - "Chicken Bowl 713926 761" + " order_id quantity \\\n", + "item_name \n", + "Chicken Bowl 713926 761 \n", + "\n", + " choice_description \\\n", + "item_name \n", + "Chicken Bowl [Tomatillo-Red Chili Salsa (Hot), [Black Beans... \n", + "\n", + " item_price \n", + "item_name \n", + "Chicken Bowl $16.98 $10.98 $11.25 $8.75 $8.49 $11.25 $8.75 ... " ] }, "execution_count": 10, @@ -494,17 +563,34 @@ "data": { "text/html": [ "
\n", + "\n", "\n", " \n", " \n", " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -512,15 +598,25 @@ " \n", " \n", " \n", + " \n", + " \n", " \n", " \n", "
order_idquantityitem_nameitem_price
choice_description
[Diet Coke]123455159Canned SodaCanned SodaCanned Soda6 Pack Soft D...$2.18 $1.09 $1.09 $6.49 $2.18 $1.25 $1.09 $6.4...
\n", "
" ], "text/plain": [ - " order_id quantity\n", - "choice_description \n", - "[Diet Coke] 123455 159" + " order_id quantity \\\n", + "choice_description \n", + "[Diet Coke] 123455 159 \n", + "\n", + " item_name \\\n", + "choice_description \n", + "[Diet Coke] Canned SodaCanned SodaCanned Soda6 Pack Soft D... \n", + "\n", + " item_price \n", + "choice_description \n", + "[Diet Coke] $2.18 $1.09 $1.09 $6.49 $2.18 $1.25 $1.09 $6.4... " ] }, "execution_count": 11, @@ -552,7 +648,7 @@ { "data": { "text/plain": [ - "4972" + "np.int64(4972)" ] }, "execution_count": 12, @@ -797,21 +893,21 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" + "pygments_lexer": "ipython3", + "version": "3.9.6" } }, "nbformat": 4, diff --git a/01_Getting_&_Knowing_Your_Data/Chipotle/Exercises.ipynb b/01_Getting_&_Knowing_Your_Data/Chipotle/Exercises.ipynb index 03e1fc603..0ba1c3a01 100644 --- a/01_Getting_&_Knowing_Your_Data/Chipotle/Exercises.ipynb +++ b/01_Getting_&_Knowing_Your_Data/Chipotle/Exercises.ipynb @@ -19,12 +19,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [], - "source": [] + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt" + ] }, { "cell_type": "markdown", @@ -42,12 +46,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [], - "source": [] + "source": [ + "url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/chipotle.tsv'\n", + "\n", + "chipo = pd.read_csv(url, sep='\\t')" + ] }, { "cell_type": "markdown", @@ -58,13 +66,159 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 45, "metadata": { "collapsed": false, "scrolled": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
order_idquantityitem_namechoice_descriptionitem_price
011Chips and Fresh Tomato SalsaNaN$2.39
111Izze[Clementine]$3.39
211Nantucket Nectar[Apple]$3.39
311Chips and Tomatillo-Green Chili SalsaNaN$2.39
422Chicken Bowl[Tomatillo-Red Chili Salsa (Hot), [Black Beans...$16.98
531Chicken Bowl[Fresh Tomato Salsa (Mild), [Rice, Cheese, Sou...$10.98
631Side of ChipsNaN$1.69
741Steak Burrito[Tomatillo Red Chili Salsa, [Fajita Vegetables...$11.75
841Steak Soft Tacos[Tomatillo Green Chili Salsa, [Pinto Beans, Ch...$9.25
951Steak Burrito[Fresh Tomato Salsa, [Rice, Black Beans, Pinto...$9.25
\n", + "
" + ], + "text/plain": [ + " order_id quantity item_name \\\n", + "0 1 1 Chips and Fresh Tomato Salsa \n", + "1 1 1 Izze \n", + "2 1 1 Nantucket Nectar \n", + "3 1 1 Chips and Tomatillo-Green Chili Salsa \n", + "4 2 2 Chicken Bowl \n", + "5 3 1 Chicken Bowl \n", + "6 3 1 Side of Chips \n", + "7 4 1 Steak Burrito \n", + "8 4 1 Steak Soft Tacos \n", + "9 5 1 Steak Burrito \n", + "\n", + " choice_description item_price \n", + "0 NaN $2.39 \n", + "1 [Clementine] $3.39 \n", + "2 [Apple] $3.39 \n", + "3 NaN $2.39 \n", + "4 [Tomatillo-Red Chili Salsa (Hot), [Black Beans... $16.98 \n", + "5 [Fresh Tomato Salsa (Mild), [Rice, Cheese, Sou... $10.98 \n", + "6 NaN $1.69 \n", + "7 [Tomatillo Red Chili Salsa, [Fajita Vegetables... $11.75 \n", + "8 [Tomatillo Green Chili Salsa, [Pinto Beans, Ch... $9.25 \n", + "9 [Fresh Tomato Salsa, [Rice, Black Beans, Pinto... $9.25 " + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chipo.head(10)" + ] }, { "cell_type": "markdown", @@ -75,26 +229,56 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 46, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "4622" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Solution 1\n", - "\n" + "chipo.shape[0]\n" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 47, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 4622 entries, 0 to 4621\n", + "Data columns (total 5 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 order_id 4622 non-null int64 \n", + " 1 quantity 4622 non-null int64 \n", + " 2 item_name 4622 non-null object\n", + " 3 choice_description 3376 non-null object\n", + " 4 item_price 4622 non-null object\n", + "dtypes: int64(2), object(3)\n", + "memory usage: 180.7+ KB\n" + ] + } + ], "source": [ "# Solution 2\n", - "\n" + "chipo.info()\n" ] }, { @@ -106,12 +290,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 48, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chipo.shape[1]" + ] }, { "cell_type": "markdown", @@ -122,12 +319,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['order_id', 'quantity', 'item_name', 'choice_description',\n", + " 'item_price'],\n", + " dtype='object')" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chipo.columns" + ] }, { "cell_type": "markdown", @@ -138,12 +350,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 50, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "RangeIndex(start=0, stop=4622, step=1)" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chipo.index" + ] }, { "cell_type": "markdown", @@ -154,12 +379,82 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
order_idquantitychoice_descriptionitem_price
item_name
Chicken Bowl713926761[Tomatillo-Red Chili Salsa (Hot), [Black Beans...$16.98 $10.98 $11.25 $8.75 $8.49 $11.25 $8.75 ...
\n", + "
" + ], + "text/plain": [ + " order_id quantity \\\n", + "item_name \n", + "Chicken Bowl 713926 761 \n", + "\n", + " choice_description \\\n", + "item_name \n", + "Chicken Bowl [Tomatillo-Red Chili Salsa (Hot), [Black Beans... \n", + "\n", + " item_price \n", + "item_name \n", + "Chicken Bowl $16.98 $10.98 $11.25 $8.75 $8.49 $11.25 $8.75 ... " + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c = chipo.groupby('item_name')\n", + "c = c.sum()\n", + "c = c.sort_values(by='quantity', ascending=False)\n", + "c.head(1)" + ] }, { "cell_type": "markdown", @@ -170,12 +465,82 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
order_idquantitychoice_descriptionitem_price
item_name
Chicken Bowl713926761[Tomatillo-Red Chili Salsa (Hot), [Black Beans...$16.98 $10.98 $11.25 $8.75 $8.49 $11.25 $8.75 ...
\n", + "
" + ], + "text/plain": [ + " order_id quantity \\\n", + "item_name \n", + "Chicken Bowl 713926 761 \n", + "\n", + " choice_description \\\n", + "item_name \n", + "Chicken Bowl [Tomatillo-Red Chili Salsa (Hot), [Black Beans... \n", + "\n", + " item_price \n", + "item_name \n", + "Chicken Bowl $16.98 $10.98 $11.25 $8.75 $8.49 $11.25 $8.75 ... " + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c = chipo.groupby('item_name')\n", + "c = c.sum()\n", + "c = c.sort_values(['quantity'], ascending=False)\n", + "c.head(1)" + ] }, { "cell_type": "markdown", @@ -186,12 +551,81 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 53, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
order_idquantityitem_nameitem_price
choice_description
[Diet Coke]123455159Canned SodaCanned SodaCanned Soda6 Pack Soft D...$2.18 $1.09 $1.09 $6.49 $2.18 $1.25 $1.09 $6.4...
\n", + "
" + ], + "text/plain": [ + " order_id quantity \\\n", + "choice_description \n", + "[Diet Coke] 123455 159 \n", + "\n", + " item_name \\\n", + "choice_description \n", + "[Diet Coke] Canned SodaCanned SodaCanned Soda6 Pack Soft D... \n", + "\n", + " item_price \n", + "choice_description \n", + "[Diet Coke] $2.18 $1.09 $1.09 $6.49 $2.18 $1.25 $1.09 $6.4... " + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "c = chipo.groupby('choice_description').sum()\n", + "c = c.sort_values(['quantity'], ascending=False)\n", + "c.head(1)" + ] }, { "cell_type": "markdown", @@ -202,12 +636,104 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
order_idquantity
count4622.0000004622.000000
mean927.2548681.075725
std528.8907960.410186
min1.0000001.000000
25%477.2500001.000000
50%926.0000001.000000
75%1393.0000001.000000
max1834.00000015.000000
\n", + "
" + ], + "text/plain": [ + " order_id quantity\n", + "count 4622.000000 4622.000000\n", + "mean 927.254868 1.075725\n", + "std 528.890796 0.410186\n", + "min 1.000000 1.000000\n", + "25% 477.250000 1.000000\n", + "50% 926.000000 1.000000\n", + "75% 1393.000000 1.000000\n", + "max 1834.000000 15.000000" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chipo.describe()\n", + "\n", + "# total_items_orders = chipo.quantity.sum()\n", + "# total_items_orders" + ] }, { "cell_type": "markdown", @@ -225,12 +751,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "dtype('O')" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chipo.item_price.dtype" + ] }, { "cell_type": "markdown", @@ -241,12 +780,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 61, "metadata": { "collapsed": true }, "outputs": [], - "source": [] + "source": [ + "def dollarizer(x):\n", + "\tif isinstance(x, str):\n", + "\t\treturn float(x[1:])\n", + "\treturn x\n", + "\n", + "chipo.item_price = chipo.item_price.apply(dollarizer)" + ] }, { "cell_type": "markdown", @@ -257,12 +803,53 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 62, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "dtype('float64')" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "chipo.item_price.dtype" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0kAAAIjCAYAAADWYVDIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAACY/ElEQVR4nO3dd3gU1d4H8O+mJ4Qk1IQSCFVA6SggIkoVEAtY8UrRa0UUuSpiBRsoXrEhviqCFRWvoiICkS69994hJKGlt83uef8I2czuzvbZmdnd7+d5fCQzszNnZs6cOb85Z84YhBACREREREREBAAI0zoBREREREREesIgiYiIiIiISIJBEhERERERkQSDJCIiIiIiIgkGSURERERERBIMkoiIiIiIiCQYJBEREREREUkwSCIiIiIiIpJgkERERERERCTBIImIiPxu0qRJMBgMWidDl1asWAGDwYCff/7Z5bKjRo1CWlqa/xPlQFpaGkaNGqXZ9omI1MIgiYhIA3PmzIHBYMDmzZst0xYuXIhJkyZplygHKivxlf9FRkaiadOmGDFiBI4ePap18lSxdu1aTJo0CTk5OR79bsWKFRg6dChSUlIQFRWFunXrYsiQIfjll1/8k1AFeLuvRETBhEESEZFOLFy4EJMnT9Y6GQ49+eST+Oabb/DZZ59h8ODB+PHHH3H11VcjIyPD5W9feuklFBcXq5BK/1i7di0mT57sUeDw6quv4sYbb8Tu3bvxyCOP4NNPP8Wzzz6LgoICDBs2DN9//73H6fj8889x4MABj3/nCW/2lYgo2ERonQAiIgoMPXv2xB133AEAGD16NFq2bIknn3wSX331FSZOnCj7m8LCQlSrVg0RERGIiAidW87PP/+M1157DXfccQe+//57REZGWuY9++yzWLx4MYxGo8frla6HiIj8hy1JREQ6MGrUKMyYMQMArLq2VTKbzXj//fdx5ZVXIiYmBsnJyXjkkUdw6dIlq/WkpaXh5ptvxooVK9ClSxfExsaibdu2WLFiBQDgl19+Qdu2bRETE4POnTtj27ZtXqe5d+/eAIBjx44BqHrvaO/evRg+fDhq1KiB6667zmqerW+//RbXXHMN4uLiUKNGDVx//fVYsmSJ1TJ//fUXevbsiWrVqqF69eoYPHgw9uzZY7VMZmYmRo8ejYYNGyI6Ohr16tXDrbfeiuPHjzvdh507d2LUqFFo2rQpYmJikJKSggceeAAXLlywLDNp0iQ8++yzAIAmTZpYzo2zdb/88suoWbMmvvzyS9nAZsCAAbj55putppnNZrz55pto2LAhYmJi0KdPHxw+fNhqGdt3ko4fPw6DwYB3330X06dPR+PGjREbG4tevXph9+7ddttdtmyZ5VgmJSXh1ltvxb59+3za15ycHIwbNw6pqamIjo5G8+bN8fbbb8NsNjv8DRGR3oXOYz0iIh175JFHkJGRgfT0dHzzzTey8+fMmYPRo0fjySefxLFjx/Dxxx9j27ZtWLNmjVVF/PDhwxg+fDgeeeQR/Otf/8K7776LIUOG4NNPP8ULL7yAxx9/HAAwZcoU3HXXXThw4ADCwjx/ZnbkyBEAQK1ataym33nnnWjRogXeeustCCEc/n7y5MmYNGkSrr32Wrz22muIiorChg0bsGzZMvTv3x8A8M0332DkyJEYMGAA3n77bRQVFWHmzJm47rrrsG3bNkvAMGzYMOzZswdjx45FWloasrOzkZ6ejpMnTzod6CA9PR1Hjx7F6NGjkZKSgj179uCzzz7Dnj17sH79ehgMBgwdOhQHDx7E3LlzMX36dNSuXRsAUKdOHdl1Hjp0CPv378cDDzyA6tWru3s4MXXqVISFheGZZ55Bbm4u3nnnHdx3333YsGGDy99+/fXXyM/Px5gxY1BSUoIPPvgAvXv3xq5du5CcnAwA+PvvvzFw4EA0bdoUkyZNQnFxMT766CP06NEDW7duRVpamsf7WlRUhF69euHMmTN45JFH0KhRI6xduxYTJ07E2bNn8f7777u9/0REuiKIiEh1s2fPFgDEpk2bLNPGjBkj5Irl1atXCwDiu+++s5q+aNEiu+mNGzcWAMTatWst0xYvXiwAiNjYWHHixAnL9P/7v/8TAMTy5cudpnX58uUCgPjyyy/FuXPnREZGhvjzzz9FWlqaMBgMln149dVXBQBx77332q2jcl6lQ4cOibCwMHH77bcLk8lktazZbBZCCJGfny+SkpLEQw89ZDU/MzNTJCYmWqZfunRJABDTpk1zuh9yioqK7KbNnTtXABCrVq2yTJs2bZoAII4dO+Zynb/99psAIKZPn+5WGiqPb+vWrUVpaall+gcffCAAiF27dlmmjRw5UjRu3Njy97Fjxyzn9vTp05bpGzZsEADE008/bZnWoUMHUbduXXHhwgXLtB07doiwsDAxYsQIt/a1cePGYuTIkZa/X3/9dVGtWjVx8OBBq+Wef/55ER4eLk6ePOnWMSAi0ht2tyMi0rl58+YhMTER/fr1w/nz5y3/de7cGfHx8Vi+fLnV8m3atEH37t0tf3ft2hVARfe4Ro0a2U13d4S6Bx54AHXq1EH9+vUxePBgFBYW4quvvkKXLl2slnv00Uddrmv+/Pkwm8145ZVX7FqxKrvlpaenIycnB/fee6/VfoeHh6Nr166W/Y6NjUVUVBRWrFhh1/3QldjYWMu/S0pKcP78eXTr1g0AsHXrVo/WVSkvLw8APGpFAire84qKirL83bNnTwDunZ/bbrsNDRo0sPx9zTXXoGvXrli4cCEA4OzZs9i+fTtGjRqFmjVrWpZr164d+vXrZ1nOU/PmzUPPnj1Ro0YNq3PUt29fmEwmrFq1yqv1EhFpjd3tiIh07tChQ8jNzUXdunVl52dnZ1v9LQ2EACAxMREAkJqaKjvd3cDilVdeQc+ePREeHo7atWujdevWsoMxNGnSxOW6jhw5grCwMLRp08bhMocOHQJQ9e6TrYSEBABAdHQ03n77bfznP/9BcnIyunXrhptvvhkjRoxASkqK03RcvHgRkydPxg8//GB3HHNzc13uh7N05efne/Q72/NWo0YNAO6dnxYtWthNa9myJX766ScAwIkTJwAAV1xxhd1yrVu3xuLFiy2DbHji0KFD2Llzp8PueLbHlIgoUDBIIiLSObPZjLp16+K7776TnW9bQQ0PD5ddztF04eS9Iam2bduib9++LpeTts74ovLF/2+++UY22JEGaOPGjcOQIUMwf/58LF68GC+//DKmTJmCZcuWoWPHjg63cdddd2Ht2rV49tln0aFDB8THx8NsNuOmm27yeuCBVq1aAQB27drl0e98PT9aMJvN6NevH5577jnZ+S1btlQ5RUREymCQRESkE3KjvwFAs2bN8Pfff6NHjx6KBSBaa9asGcxmM/bu3YsOHTo4XAYA6tat61Zw1qxZM/znP//Bf/7zHxw6dAgdOnTAf//7X3z77beyy1+6dAlLly7F5MmT8corr1imV7ZgSTk6N3JatmyJK664Ar/99hs++OADxMfHu/1bb8ml+eDBg5ZBKxo3bgwAst9Y2r9/P2rXrm1pRfJkX5s1a4aCggK3zg8RUSDhO0lERDpRWUm1/YjnXXfdBZPJhNdff93uN+Xl5QH50c/bbrsNYWFheO211+xabCpbTgYMGICEhAS89dZbst8UOnfuHICKEdZKSkqs5jVr1gzVq1dHaWmpwzRUttzYttTIjcjm6Nw4MnnyZFy4cAH//ve/UV5ebjd/yZIlWLBggVvrcsf8+fNx5swZy98bN27Ehg0bMHDgQABAvXr10KFDB3z11VdW+7B7924sWbIEgwYNskzzZF/vuusurFu3DosXL7abl5OTI7vvRESBgC1JREQ60blzZwDAk08+iQEDBiA8PBz33HMPevXqhUceeQRTpkzB9u3b0b9/f0RGRuLQoUOYN28ePvjgA8tHXgNF8+bN8eKLL+L1119Hz549MXToUERHR2PTpk2oX78+pkyZgoSEBMycORP3338/OnXqhHvuuQd16tTByZMn8eeff6JHjx74+OOPcfDgQfTp0wd33XUX2rRpg4iICPz666/IysrCPffc4zANCQkJuP766/HOO+/AaDSiQYMGWLJkieW7T1KV5+bFF1/EPffcg8jISAwZMsThOzx33303du3ahTfffBPbtm3Dvffei8aNG+PChQtYtGgRli5diu+//16Zg4mK43ndddfhscceQ2lpKd5//33UqlXLqhvctGnTMHDgQHTv3h0PPvigZQjwxMRETJo0yat9ffbZZ/H777/j5ptvxqhRo9C5c2cUFhZi165d+Pnnn3H8+HHLMOJERAFF28H1iIhCk9wQ4OXl5WLs2LGiTp06wmAw2A0H/tlnn4nOnTuL2NhYUb16ddG2bVvx3HPPiYyMDMsyjRs3FoMHD7bbHgAxZswYq2mVw0e7Gjq7cojqefPmOV2ucpjvc+fOOZxn68svvxQdO3YU0dHRokaNGqJXr14iPT3dbvsDBgwQiYmJIiYmRjRr1kyMGjVKbN68WQghxPnz58WYMWNEq1atRLVq1URiYqLo2rWr+Omnn5ymVwghTp8+LW6//XaRlJQkEhMTxZ133ikyMjIEAPHqq69aLfv666+LBg0aiLCwMLeHA1+6dKm49dZbRd26dUVERISoU6eOGDJkiPjtt9+s9k/u+Faen9mzZ1umORoCfNq0aeK///2vSE1NFdHR0aJnz55ix44ddun5+++/RY8ePURsbKxISEgQQ4YMEXv37rVbztG+2g4BLkTFUO0TJ04UzZs3F1FRUaJ27dri2muvFe+++64oKytzeYyIiPTIIISO3wglIiIih44fP44mTZpg2rRpeOaZZ7RODhFR0OA7SURERERERBIMkoiIiIiIiCQYJBEREREREUnwnSQiIiIiIiIJtiQRERERERFJMEgiIiIiIiKSCPqPyZrNZmRkZKB69eowGAxaJ4eIiIiIiDQihEB+fj7q16+PsDDH7UVBHyRlZGQgNTVV62QQEREREZFOnDp1Cg0bNnQ4P+iDpOrVqwOoOBAJCQmapsVoNGLJkiXo378/IiMjNU0LBSfmMfIn5i/yN+Yx8ifmLwKAvLw8pKamWmIER4I+SKrsYpeQkKCLICkuLg4JCQm8OMkvmMfIn5i/yN+Yx8ifmL9IytVrOBy4gYiIiIiISIJBEhERERERkQSDJCIiIiIiIomgfyeJiIiIiKiSEAJGoxEmk0nrpJAfhIeHIyIiwudP/zBIIiIiIqKQEBYWhjNnzqCkpETrpJAfxcXFoV69eoiKivJ6HQySiIiIiCjomc1m1KlTB+Xl5ahfvz6ioqJ8bm0gfRFCoKysDOfOncOxY8fQokULpx+MdYZBEhEREREFPaPRiMjISNSrVw/x8fFaJ4f8JDY2FpGRkThx4gTKysoQExPj1Xo4cAMRERERBT0hBAB43bJAgUOJc8xcQkREREREJMEgiYiIiIiISIJBEhERERGRjt1www0YN26c1slQTCDsDwduICIiIiLSsV9++QWRkZEAgLS0NIwbN073QYYz0v3RKwZJREREREQ6VrNmTa2ToIiysjJERUUFxP6wux0RERERhSQhBIrKylX/r3KkPXdVdk+74YYbcOLECTz99NMwGAxW33n6559/0LNnT8TGxiI1NRVPPvkkCgsLLfPT0tLwxhtvYMSIEYiPj0fjxo3x+++/49y5c7j11lsRHx+Pdu3aYfPmzW6lac6cOUhKSsL8+fPRokULxMTEYMCAATh16pRlmUmTJqFDhw744osv0KRJE8tw3Lbd7UpLSzFhwgSkpqYiOjoazZs3x6xZsyzzd+/ejYEDByI+Ph7Jycm4//77cf78eY+OoafYkkREREREIanYaEKbVxarvt29rw1AXJTn1fBffvkF7du3x8MPP4yHHnrIMv3IkSO46aab8MYbb+DLL7/EuXPn8MQTT+CJJ57A7NmzLctNnz4db731Fl5++WVMnz4d999/P6699lo88MADmDZtGiZMmIARI0Zgz549bn1ot6ioCG+++Sa+/vprREVF4fHHH8c999yDNWvWWJY5fPgw/ve//+GXX35BeHi47HpGjBiBdevW4cMPP0T79u1x7NgxSxCUk5OD3r1749///jemT5+O4uJiTJgwAXfddReWLVvm8TF0F4MkIiIiIqIAULNmTYSHh6N69epISUmxTJ8yZQruu+8+S+tMixYt8OGHH6JXr16YOXOmpQVn0KBBeOSRRwAAr7zyCmbOnImrr74ad955JwBgwoQJ6N69O7KysqzW74jRaMTHH3+Mrl27AgC++uortG7dGhs3bsQ111wDoKKL3ddff406derIruPgwYP46aefkJ6ejr59+wIAmjZtapn/8ccfo2PHjnjrrbcs07788kukpqbi4MGDaNmypVvHzlMMkoiIiIhCiBACu87kommdeMRHh3ZVMDYyHHtfG6DJdpW0Y8cO7Ny5E999951lmhACZrMZx44dQ+vWrQEA7dq1s8xPTk4GALRt29ZuWnZ2tltBUkREBK6++mrL361atUJSUhL27dtnCZIaN27sMEACgO3btyM8PBy9evVyuG/Lly9HfHy83bwjR44wSCIiIiIi3/21OxOPf7cVTetUw7L/3KB1cjRlMBi86vamNwUFBXjkkUfw5JNP2s1r1KiR5d/SEeUqu9PJTTObzYqlrVq1ak7nx8bGOp1fUFCAIUOG4O2337abV69ePZ/S5kzg5woiIiIictv8bWcAAEfPFbpYkvQoKioKJpPJalqnTp2wd+9eNG/eXNW0lJeXY/PmzZZWowMHDiAnJ8fScuWOtm3bwmw2Y+XKlZbudlKdOnXC//73P6SlpSEiQr3QhaPbEREREREFiLS0NKxatQpnzpyxDG4wYcIErF27Fk888QS2b9+OQ4cO4bfffsMTTzzh17RERkZi7Nix2LBhA7Zs2YJRo0ahW7dulqDJHWlpaRg5ciQeeOABzJ8/H8eOHcOKFSvw008/AQDGjBmDixcv4t5778WmTZtw5MgRLF68GKNHj7YLFpXEIImIiIiIKEC89tprOH78OJo1a2Z516ddu3ZYuXIlDh48iJ49e6Jjx4545ZVXUL9+fb+mJS4uDhMmTMDw4cPRo0cPxMfH48cff/R4PTNnzsQdd9yBxx9/HK1atcJDDz1kGb68fv36WLNmDUwmE/r374+2bdti3LhxSEpKQliY/0IZdrcjIiIiItKxFStWWP7drVs37Nixw26Zq6++GkuWLHG4juPHj9tNs/1eU1pamsffcBo6dCiGDh0qO2/SpEmYNGmS3XTp/gBATEwM3nvvPbz33nuy62nRogV++eUXj9LlK7YkERERERERSTBIIiIiIiIiKwMHDkR8fLzsf9JvFgUrdrcjIiIiIiIrX3zxBYqLi2Xn1axZEzVr1sSoUaPUTZSKGCQREREREZGVBg0aaJ0ETbG7HREREREFvcoPpXo6MAEFHiXOMYMkIiIiIgp6ERERMJvNKCoq0jop5GeV5zgyMtLrdbC7HREREREFvfDwcOTn5+PcuXMICwtDXFycpXWJgoMQAkVFRcjOzkZSUhLCw8O9XheDJCIiIiIKCfn5+WjZsiWys7O1Tgr5UVJSElJSUnxaB4MkIiIiIgoZycnJqFevHoxGo9ZJIT+IjIz0qQWpEoMkIiIiIgop4eHhilSkKXhx4AYiIiIiIiIJBklEREREREQSDJKIiIiIiIgkGCQRERERERFJMEgiIiIiIiKSYJBEREREREQkwSCJiIiIiIhIgkESERERERGRBIMkIiIiIiIiCQZJREREREREEgySiIiIiIiIJBgkERERERERSTBIIiIiIiIikmCQREREREREJMEgiYiIiIiISIJBEhERERERkQSDJCIiIiIiIgkGSURERERERBIMkoiIiIiIiCQYJBEREREREUkwSCIiIiIiIpJgkERERERERCTBIImIiIiIiEhCN0HS1KlTYTAYMG7cOMu0kpISjBkzBrVq1UJ8fDyGDRuGrKws7RJJRERERERBTxdB0qZNm/B///d/aNeundX0p59+Gn/88QfmzZuHlStXIiMjA0OHDtUolUREREREFAo0D5IKCgpw33334fPPP0eNGjUs03NzczFr1iy899576N27Nzp37ozZs2dj7dq1WL9+vYYpJiIiIiKiYBahdQLGjBmDwYMHo2/fvnjjjTcs07ds2QKj0Yi+fftaprVq1QqNGjXCunXr0K1bN9n1lZaWorS01PJ3Xl4eAMBoNMJoNPppL9xTuX2t00HBi3mM/In5i/yNeUwdQgjLv0PpWDN/EeD++dc0SPrhhx+wdetWbNq0yW5eZmYmoqKikJSUZDU9OTkZmZmZDtc5ZcoUTJ482W76kiVLEBcX53OalZCenq51EijIMY+RPzF/kb8xj/lXZmYYKjsTLVy4UNvEaID5K7QVFRW5tZxmQdKpU6fw1FNPIT09HTExMYqtd+LEiRg/frzl77y8PKSmpqJ///5ISEhQbDveMBqNSE9PR79+/RAZGalpWig4MY+RPzF/kb8xj6ljQc527LqUDQAYNGiQxqlRD/MXAVW9zFzRLEjasmULsrOz0alTJ8s0k8mEVatW4eOPP8bixYtRVlaGnJwcq9akrKwspKSkOFxvdHQ0oqOj7aZHRkbq5oLQU1ooODGPkT8xf5G/MY/5l8FgsPw7FI8z81doc/fcaxYk9enTB7t27bKaNnr0aLRq1QoTJkxAamoqIiMjsXTpUgwbNgwAcODAAZw8eRLdu3fXIslERERERBQCNAuSqlevjquuuspqWrVq1VCrVi3L9AcffBDjx49HzZo1kZCQgLFjx6J79+4OB20gIiIiIiLyleaj2zkzffp0hIWFYdiwYSgtLcWAAQPwySefaJ0sIiIiIiIKYroKklasWGH1d0xMDGbMmIEZM2ZokyAiIiIiIgo5mn9MloiIiIiISE8YJBEREREREUkwSCIiIiIiIpJgkEREREQUQiSfSSIiBxgkEREREYUQIbROAZH+MUgiIiIiIiKSYJBEREREREQkwSCJiIiIiIhIgkESERERERGRBIMkIiIiIiIiCQZJREREREREEgySiIiIiEIIv5NE5BqDJCIiIqIQwu8kEbnGIImIiIiIiEiCQRIREREREZEEgyQiIiIiIiIJBklEREREREQSDJKIiIiIiIgkGCQRERERERFJMEgiIiIiIiKSYJBEREREFEL4MVki1xgkEREREYUQfkyWyDUGSURERERERBIMkoiIiIiIiCQYJBEREREREUkwSCIiIiIiIpJgkERERERERCTBIImIiIiIiEiCQRIRERFRCOF3kohcY5BEREREREQkwSCJiIiIKITwY7JErjFIIiIiIiIikmCQREREREREJMEgiYiIiIiISIJBEhERERERkQSDJCIiIiIiIgkGSUREREQhhN9JInKNQRIREREREZEEgyQiIiKiAFBQWo5n5u3AyoPntE4KUdBjkEREREQUAD5aegg/bzmNkV9u9Gk9/JgskWsMkojI74rLTNh9JheCd2YiIq+dzilWfJ0sl4nkMUgiIr+76//W4eaP/sHvOzK0TgoREUn8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zpw5eO6551BYWIiHH34YOTk5uO6667Bo0SLExMRolWTNqZG9nD2N0YqA0HUlWL8pCx2/bOX7SMRrMZCY2JREStJf1YVsBNoVr2mQdMMNNziNKg0GA1577TW89tprKqZK356ZtwNJsf7tz7nu6AW/rt9ben4CkVNUptq2Nh67qNq2iALNtpM5stPTnv9T3YQEqRnLlRuZ6lKR9kMBh4qyEPhEQlm54308mKXsoA0Ag3xv6LgaJ0u/b8IHISXeG1y2P9v3lbjwx44Mv2/DU0Lo++J6a+E+1bZ11/+tU21bRERERErQ6zvvjuh24AYiKQHgxAX3xrXXAh8oERERETmm54fdctiSRAEhfW8W0vdmaZ0MIiIiIvJCgMVIbEkiIiIiIiL/0vO75XIYJKlIj6PGERERERH529yNp7ROgkcYJBERERERkV91bJSkdRI8wiCJiIhCxn/vbK91EoiIQtJrt1yldRI8wiCJiIhCQs8WtTGsc0Otk0FEFJJaJMdrnQSPMEgiIiIiIiKSYJBEREQhwaDEF72JiCgkMEhSEe/PRERERET6xyBJRYyRiIiIiCgUBVpjAYMkIiIKCQF2fyYiIg0xSCIiIiIiIr8yBNijKgZJREQUEgKtqwcREWmHQZKaeIMmItIMi2AiIu0E2oMqBklEREREREQSDJKIiCgk8DtJRETaCbQSmEESERGFhEC7QRMRBZNAe1DFIImIiIiIiEiCQRIREYWEAHuISUQUVAKtCGaQpKJAGx+eiIiIiCgUMUgiIqIQwQdVRERaCbTWfAZJREREREREEgySiIiIiIjIrzi6HTkUYHmDiCiosAwmIiJ3MUgiIqKQwBiJiIjcxSCJiIiIiIhIgkESERGFBHa3IyIidzFIUhHvz0RERERE+scgiYiIiIiISIJBEhERhQQD2/OJiMhNDJJUxP7wRETaYRlMRETuYpBEREQhgUESERG5i0ESERERERGRBIMkIiIiIiIiCQZJKuJLw0RE2mEZTERE7mKQREREoYExEhERuYlBEhERERERkQSDJCIiCglsSCIiIncxSFIT79BERERERLrHIImIiIiIiEiCQRIREYUEA78mS0REbmKQREREREREJMEgSUV8hklEpB2WwURE5C4GSUREFBLY246IiNzFIImIiIiIiEiCQRIREYWEMTc21zoJIa1RzTitk0BE5DYGSUSk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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "chipo[['item_name', 'item_price']].plot(\n", + " figsize=(10, 6), # Set the figure size (width, height)\n", + " title='Item Prices at Chipotle',\n", + " xlabel='Amount ($)',\n", + " ylabel='Item',\n", + " grid=True, # Add a grid\n", + " legend=True # Show legend\n", + ")\n", + "plt.show() # Display the plot" + ] }, { "cell_type": "markdown", @@ -347,21 +934,21 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" + "pygments_lexer": "ipython3", + "version": "3.9.6" } }, "nbformat": 4, diff --git a/01_Getting_&_Knowing_Your_Data/Occupation/Exercises.ipynb b/01_Getting_&_Knowing_Your_Data/Occupation/Exercises.ipynb index f32d9ce9f..1e6fc1f20 100644 --- a/01_Getting_&_Knowing_Your_Data/Occupation/Exercises.ipynb +++ b/01_Getting_&_Knowing_Your_Data/Occupation/Exercises.ipynb @@ -19,12 +19,15 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], - "source": [] + "source": [ + "import pandas as pd\n", + "import numpy as np" + ] }, { "cell_type": "markdown", @@ -42,12 +45,14 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], - "source": [] + "source": [ + "users = pd.read_csv('https://raw.githubusercontent.com/justmarkham/DAT8/master/data/u.user', sep='|')" + ] }, { "cell_type": "markdown", @@ -58,13 +63,282 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "collapsed": false, "scrolled": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_idagegenderoccupationzip_code
0124Mtechnician85711
1253Fother94043
2323Mwriter32067
3424Mtechnician43537
4533Fother15213
5642Mexecutive98101
6757Madministrator91344
7836Madministrator05201
8929Mstudent01002
91053Mlawyer90703
101139Fother30329
111228Fother06405
121347Meducator29206
131445Mscientist55106
141549Feducator97301
151621Mentertainment10309
161730Mprogrammer06355
171835Fother37212
181940Mlibrarian02138
192042Fhomemaker95660
202126Mwriter30068
212225Mwriter40206
222330Fartist48197
232421Fartist94533
242539Mengineer55107
\n", + "
" + ], + "text/plain": [ + " user_id age gender occupation zip_code\n", + "0 1 24 M technician 85711\n", + "1 2 53 F other 94043\n", + "2 3 23 M writer 32067\n", + "3 4 24 M technician 43537\n", + "4 5 33 F other 15213\n", + "5 6 42 M executive 98101\n", + "6 7 57 M administrator 91344\n", + "7 8 36 M administrator 05201\n", + "8 9 29 M student 01002\n", + "9 10 53 M lawyer 90703\n", + "10 11 39 F other 30329\n", + "11 12 28 F other 06405\n", + "12 13 47 M educator 29206\n", + "13 14 45 M scientist 55106\n", + "14 15 49 F educator 97301\n", + "15 16 21 M entertainment 10309\n", + "16 17 30 M programmer 06355\n", + "17 18 35 F other 37212\n", + "18 19 40 M librarian 02138\n", + "19 20 42 F homemaker 95660\n", + "20 21 26 M writer 30068\n", + "21 22 25 M writer 40206\n", + "22 23 30 F artist 48197\n", + "23 24 21 F artist 94533\n", + "24 25 39 M engineer 55107" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users.head(25)" + ] }, { "cell_type": "markdown", @@ -75,13 +349,147 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "collapsed": false, "scrolled": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_idagegenderoccupationzip_code
93393461Mengineer22902
93493542Mdoctor66221
93593624Mother32789
93693748Meducator98072
93793838Ftechnician55038
93893926Fstudent33319
93994032Madministrator02215
94094120Mstudent97229
94194248Flibrarian78209
94294322Mstudent77841
\n", + "
" + ], + "text/plain": [ + " user_id age gender occupation zip_code\n", + "933 934 61 M engineer 22902\n", + "934 935 42 M doctor 66221\n", + "935 936 24 M other 32789\n", + "936 937 48 M educator 98072\n", + "937 938 38 F technician 55038\n", + "938 939 26 F student 33319\n", + "939 940 32 M administrator 02215\n", + "940 941 20 M student 97229\n", + "941 942 48 F librarian 78209\n", + "942 943 22 M student 77841" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users.tail(10)" + ] }, { "cell_type": "markdown", @@ -92,12 +500,45 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 943 entries, 0 to 942\n", + "Data columns (total 5 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 user_id 943 non-null int64 \n", + " 1 age 943 non-null int64 \n", + " 2 gender 943 non-null object\n", + " 3 occupation 943 non-null object\n", + " 4 zip_code 943 non-null object\n", + "dtypes: int64(2), object(3)\n", + "memory usage: 37.0+ KB\n" + ] + }, + { + "data": { + "text/plain": [ + "(943, 5)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users.describe()\n", + "users.info()\n", + "users.shape" + ] }, { "cell_type": "markdown", @@ -112,8 +553,21 @@ "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "5" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(users.columns)" + ] }, { "cell_type": "markdown", @@ -124,12 +578,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['user_id', 'age', 'gender', 'occupation', 'zip_code'], dtype='object')" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users.columns" + ] }, { "cell_type": "markdown", @@ -140,12 +607,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "RangeIndex(start=0, stop=943, step=1)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users.index" + ] }, { "cell_type": "markdown", @@ -156,12 +636,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "user_id int64\n", + "age int64\n", + "gender object\n", + "occupation object\n", + "zip_code object\n", + "dtype: object" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users.dtypes" + ] }, { "cell_type": "markdown", @@ -172,12 +670,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "0 technician\n", + "1 other\n", + "2 writer\n", + "3 technician\n", + "4 other\n", + " ... \n", + "938 student\n", + "939 administrator\n", + "940 student\n", + "941 librarian\n", + "942 student\n", + "Name: occupation, Length: 943, dtype: object" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users['occupation']" + ] }, { "cell_type": "markdown", @@ -188,12 +710,48 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "occupation\n", + "student 196\n", + "other 105\n", + "educator 95\n", + "administrator 79\n", + "engineer 67\n", + "programmer 66\n", + "librarian 51\n", + "writer 45\n", + "executive 32\n", + "scientist 31\n", + "artist 28\n", + "technician 27\n", + "marketing 26\n", + "entertainment 18\n", + "healthcare 16\n", + "retired 14\n", + "lawyer 12\n", + "salesman 12\n", + "none 9\n", + "homemaker 7\n", + "doctor 7\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users.occupation.nunique()\n", + "users.occupation.value_counts()" + ] }, { "cell_type": "markdown", @@ -208,8 +766,27 @@ "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "occupation\n", + "student 196\n", + "other 105\n", + "educator 95\n", + "administrator 79\n", + "engineer 67\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users['occupation'].value_counts().head(1).index[0]" + ] }, { "cell_type": "markdown", @@ -220,12 +797,101 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_idage
count943.000000943.000000
mean472.00000034.051962
std272.36495112.192740
min1.0000007.000000
25%236.50000025.000000
50%472.00000031.000000
75%707.50000043.000000
max943.00000073.000000
\n", + "
" + ], + "text/plain": [ + " user_id age\n", + "count 943.000000 943.000000\n", + "mean 472.000000 34.051962\n", + "std 272.364951 12.192740\n", + "min 1.000000 7.000000\n", + "25% 236.500000 25.000000\n", + "50% 472.000000 31.000000\n", + "75% 707.500000 43.000000\n", + "max 943.000000 73.000000" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users.describe()" + ] }, { "cell_type": "markdown", @@ -236,12 +902,155 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_idagegenderoccupationzip_code
count943.000000943.000000943943943
uniqueNaNNaN221795
topNaNNaNMstudent55414
freqNaNNaN6701969
mean472.00000034.051962NaNNaNNaN
std272.36495112.192740NaNNaNNaN
min1.0000007.000000NaNNaNNaN
25%236.50000025.000000NaNNaNNaN
50%472.00000031.000000NaNNaNNaN
75%707.50000043.000000NaNNaNNaN
max943.00000073.000000NaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " user_id age gender occupation zip_code\n", + "count 943.000000 943.000000 943 943 943\n", + "unique NaN NaN 2 21 795\n", + "top NaN NaN M student 55414\n", + "freq NaN NaN 670 196 9\n", + "mean 472.000000 34.051962 NaN NaN NaN\n", + "std 272.364951 12.192740 NaN NaN NaN\n", + "min 1.000000 7.000000 NaN NaN NaN\n", + "25% 236.500000 25.000000 NaN NaN NaN\n", + "50% 472.000000 31.000000 NaN NaN NaN\n", + "75% 707.500000 43.000000 NaN NaN NaN\n", + "max 943.000000 73.000000 NaN NaN NaN" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users.describe(include=\"all\")" + ] }, { "cell_type": "markdown", @@ -252,12 +1061,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 28, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "count 943\n", + "unique 21\n", + "top student\n", + "freq 196\n", + "Name: occupation, dtype: object" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users.occupation.describe()" + ] }, { "cell_type": "markdown", @@ -268,12 +1094,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": { "collapsed": false }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "34" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "round(users.age.mean())" + ] }, { "cell_type": "markdown", @@ -284,10 +1123,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": { "collapsed": false }, + "outputs": [ + { + "data": { + "text/plain": [ + "age\n", + "7 1\n", + "66 1\n", + "11 1\n", + "10 1\n", + "73 1\n", + "Name: count, dtype: int64" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "users.age.value_counts().tail()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, "outputs": [], "source": [] } @@ -295,21 +1160,21 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" + "pygments_lexer": "ipython3", + "version": "3.9.6" } }, "nbformat": 4, diff --git a/01_Getting_&_Knowing_Your_Data/World Food Facts/Exercises.ipynb b/01_Getting_&_Knowing_Your_Data/World Food Facts/Exercises.ipynb index ea507fa1d..1ab51eb4e 100644 --- a/01_Getting_&_Knowing_Your_Data/World Food Facts/Exercises.ipynb +++ b/01_Getting_&_Knowing_Your_Data/World Food Facts/Exercises.ipynb @@ -30,12 +30,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": { "collapsed": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/_3/hkf708ss7xl3k96pc2xvknwm0000gp/T/ipykernel_52894/1866960769.py:3: DtypeWarning: Columns (0,3,5,19,20,24,25,26,27,28,36,37,38,39,48) have mixed types. Specify dtype option on import or set low_memory=False.\n", + " food = pd.read_csv('../../en.openfoodfacts.org.products.tsv', sep='\\t')\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "food = pd.read_csv('../../en.openfoodfacts.org.products.tsv', sep='\\t')\n" + ] }, { "cell_type": "markdown", @@ -46,12 +59,242 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "collapsed": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
codeurlcreatorcreated_tcreated_datetimelast_modified_tlast_modified_datetimeproduct_namegeneric_namequantity...fruits-vegetables-nuts_100gfruits-vegetables-nuts-estimate_100gcollagen-meat-protein-ratio_100gcocoa_100gchlorophyl_100gcarbon-footprint_100gnutrition-score-fr_100gnutrition-score-uk_100gglycemic-index_100gwater-hardness_100g
03087http://world-en.openfoodfacts.org/product/0000...openfoodfacts-contributors14741038662016-09-17T09:17:46Z14741038932016-09-17T09:18:13ZFarine de blé noirNaN1kg...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
14530http://world-en.openfoodfacts.org/product/0000...usda-ndb-import14890699572017-03-09T14:32:37Z14890699572017-03-09T14:32:37ZBanana Chips Sweetened (Whole)NaNNaN...NaNNaNNaNNaNNaNNaN14.014.0NaNNaN
24559http://world-en.openfoodfacts.org/product/0000...usda-ndb-import14890699572017-03-09T14:32:37Z14890699572017-03-09T14:32:37ZPeanutsNaNNaN...NaNNaNNaNNaNNaNNaN0.00.0NaNNaN
316087http://world-en.openfoodfacts.org/product/0000...usda-ndb-import14890557312017-03-09T10:35:31Z14890557312017-03-09T10:35:31ZOrganic Salted Nut MixNaNNaN...NaNNaNNaNNaNNaNNaN12.012.0NaNNaN
416094http://world-en.openfoodfacts.org/product/0000...usda-ndb-import14890556532017-03-09T10:34:13Z14890556532017-03-09T10:34:13ZOrganic PolentaNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", + "

5 rows × 163 columns

\n", + "
" + ], + "text/plain": [ + " code url \\\n", + "0 3087 http://world-en.openfoodfacts.org/product/0000... \n", + "1 4530 http://world-en.openfoodfacts.org/product/0000... \n", + "2 4559 http://world-en.openfoodfacts.org/product/0000... \n", + "3 16087 http://world-en.openfoodfacts.org/product/0000... \n", + "4 16094 http://world-en.openfoodfacts.org/product/0000... \n", + "\n", + " creator created_t created_datetime \\\n", + "0 openfoodfacts-contributors 1474103866 2016-09-17T09:17:46Z \n", + "1 usda-ndb-import 1489069957 2017-03-09T14:32:37Z \n", + "2 usda-ndb-import 1489069957 2017-03-09T14:32:37Z \n", + "3 usda-ndb-import 1489055731 2017-03-09T10:35:31Z \n", + "4 usda-ndb-import 1489055653 2017-03-09T10:34:13Z \n", + "\n", + " last_modified_t last_modified_datetime product_name \\\n", + "0 1474103893 2016-09-17T09:18:13Z Farine de blé noir \n", + "1 1489069957 2017-03-09T14:32:37Z Banana Chips Sweetened (Whole) \n", + "2 1489069957 2017-03-09T14:32:37Z Peanuts \n", + "3 1489055731 2017-03-09T10:35:31Z Organic Salted Nut Mix \n", + "4 1489055653 2017-03-09T10:34:13Z Organic Polenta \n", + "\n", + " generic_name quantity ... fruits-vegetables-nuts_100g \\\n", + "0 NaN 1kg ... NaN \n", + "1 NaN NaN ... NaN \n", + "2 NaN NaN ... NaN \n", + "3 NaN NaN ... NaN \n", + "4 NaN NaN ... NaN \n", + "\n", + " fruits-vegetables-nuts-estimate_100g collagen-meat-protein-ratio_100g \\\n", + "0 NaN NaN \n", + "1 NaN NaN \n", + "2 NaN NaN \n", + "3 NaN NaN \n", + "4 NaN NaN \n", + "\n", + " cocoa_100g chlorophyl_100g carbon-footprint_100g nutrition-score-fr_100g \\\n", + "0 NaN NaN NaN NaN \n", + "1 NaN NaN NaN 14.0 \n", + "2 NaN NaN NaN 0.0 \n", + "3 NaN NaN NaN 12.0 \n", + "4 NaN NaN NaN NaN \n", + "\n", + " nutrition-score-uk_100g glycemic-index_100g water-hardness_100g \n", + "0 NaN NaN NaN \n", + "1 14.0 NaN NaN \n", + "2 0.0 NaN NaN \n", + "3 12.0 NaN NaN \n", + "4 NaN NaN NaN \n", + "\n", + "[5 rows x 163 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "food.head()" + ] }, { "cell_type": "markdown", @@ -62,12 +305,66 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "collapsed": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "(356027, 163)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "food.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "356027" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(food)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 356027 entries, 0 to 356026\n", + "Columns: 163 entries, code to water-hardness_100g\n", + "dtypes: float64(107), object(56)\n", + "memory usage: 442.8+ MB\n" + ] + } + ], + "source": [ + "food.info()" + ] }, { "cell_type": "markdown", @@ -78,12 +375,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "collapsed": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "163" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "food.columns.size" + ] }, { "cell_type": "markdown", @@ -94,12 +404,34 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "collapsed": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['code', 'url', 'creator', 'created_t', 'created_datetime',\n", + " 'last_modified_t', 'last_modified_datetime', 'product_name',\n", + " 'generic_name', 'quantity',\n", + " ...\n", + " 'fruits-vegetables-nuts_100g', 'fruits-vegetables-nuts-estimate_100g',\n", + " 'collagen-meat-protein-ratio_100g', 'cocoa_100g', 'chlorophyl_100g',\n", + " 'carbon-footprint_100g', 'nutrition-score-fr_100g',\n", + " 'nutrition-score-uk_100g', 'glycemic-index_100g',\n", + " 'water-hardness_100g'],\n", + " dtype='object', length=163)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "food.columns" + ] }, { "cell_type": "markdown", @@ -110,12 +442,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "collapsed": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "'-glucose_100g'" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "food.columns[104]" + ] }, { "cell_type": "markdown", @@ -126,12 +471,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": { "collapsed": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "dtype('float64')" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "food.dtypes['-glucose_100g']" + ] }, { "cell_type": "markdown", @@ -142,12 +500,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "collapsed": true }, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "RangeIndex(start=0, stop=356027, step=1)" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "food.index" + ] }, { "cell_type": "markdown", @@ -158,10 +529,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": { "collapsed": true }, + "outputs": [ + { + "data": { + "text/plain": [ + "'Lotus Organic Brown Jasmine Rice'" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "food.iat[18, 7]\n", + "food.iloc[18, 7]\n", + "food.values[18][7]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, "outputs": [], "source": [] } @@ -169,21 +562,21 @@ "metadata": { "anaconda-cloud": {}, "kernelspec": { - "display_name": "Python [default]", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" + "pygments_lexer": "ipython3", + "version": "3.9.6" } }, "nbformat": 4, diff --git a/course_resume_notes.ipynb b/course_resume_notes.ipynb new file mode 100644 index 000000000..9b5918d99 --- /dev/null +++ b/course_resume_notes.ipynb @@ -0,0 +1,85 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "6757754b", + "metadata": {}, + "source": [ + "| Role Title | Experience Level | Salary Range (USD) |\n", + "| ----------------------------------------- | ---------------- | ------------------ |\n", + "| Generative AI Engineer | Entry–Mid | \\$110K–\\$170K |\n", + "| ML Engineer (LLM/NLP Focus) | Entry–Mid | \\$120K–\\$180K |\n", + "| AI Product Manager | Mid | \\$130K–\\$190K |\n", + "| AI Solutions Architect | Mid–Senior | \\$150K–\\$220K |\n", + "| LangChain Developer / AI Agent Designer | Entry–Mid | \\$100K–\\$160K |\n", + "| Data Scientist (GenAI-enabled) | Entry–Mid | \\$115K–\\$180K |\n", + "| AI Consultant (e.g., Deloitte, Accenture) | Entry–Mid | \\$90K–\\$160K |\n", + "| GenAI Technical Program Manager | Mid–Senior | \\$140K–\\$200K |" + ] + }, + { + "cell_type": "markdown", + "id": "e17d634b", + "metadata": {}, + "source": [ + "AWS Sagemaker\n", + "AWS S3\n", + "ml.t2.medium (T2)\n", + "ml.t3.medium (T3)\n", + "Jupyter Notebook\n", + "Jupyter Lab\n", + "Python,\n", + "Google Colab, BERT, VS Code, Vector\n", + "Database (Chroma / Pinecone),\n", + "Transformers, RAG (Retreival Augmented\n", + "Generation), Quick Fine-Tuning Techniques" + ] + }, + { + "cell_type": "markdown", + "id": "ab248548", + "metadata": {}, + "source": [ + "Prompt Engineering\n", + "Solving Natural Language Problems\n", + "Building Generative AI Workflows\n", + "Python for Artificial Intelligence\n", + "Ethical AI Practices\n", + "Evaluating Generative AI Solutions\n", + "Fine-tuning LLMs\n", + "Agentic AI Development\n", + "Secure AI Development" + ] + }, + { + "cell_type": "markdown", + "id": "fbd30836", + "metadata": {}, + "source": [ + "Learning Outcomes:\n", + "Understand the theoretical foundations\n", + "of Generative AI and its applications.\n", + "Apply Generative AI techniques to create\n", + "text, image, and multimedia content.\n", + "Develop and train Generative Models using\n", + "contemporary Machine Learning\n", + "frameworks.\n", + "Evaluate the ethical implications of\n", + "Generative AI.\n", + "Implement best practices to mitigate\n", + "potential risks in Generative AI\n", + "solutions.\n", + "Critically analyze the impact of Generative\n", + "AI on various industries and society as\n", + "a whole." + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/streamdeck_script.sh b/streamdeck_script.sh new file mode 100755 index 000000000..e6440325c --- /dev/null +++ b/streamdeck_script.sh @@ -0,0 +1,2 @@ +#!/bin/bash +/opt/homebrew/bin/code ~/Code/python/pandas_exercises