diff --git a/.virtual_documents/Phase1/Lectures/06_PythonDataManipulation.ipynb b/.virtual_documents/Phase1/Lectures/06_PythonDataManipulation.ipynb
new file mode 100644
index 0000000..6c32875
--- /dev/null
+++ b/.virtual_documents/Phase1/Lectures/06_PythonDataManipulation.ipynb
@@ -0,0 +1,572 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+# Create your bento list
+bento = ['salmon', 'rice', 'edamame', 'seaweed salad', 'dumplings']
+
+
+
+
+
+type(bento)
+
+
+len(bento)
+
+
+# Run this cell without changes
+bento[4]
+
+
+# Try to get the last entry
+bento[-2]
+
+
+bento[5]
+
+
+
+
+
+# Run this cell without changes
+# Play around with these numbers, and start to build some understanding of
+# which elements are where exactly in the list
+bento[2:]
+
+
+bento
+
+
+bento[:3]
+
+
+
+
+
+# Code here to add to your list
+bento.append('kimchi')
+
+
+bento
+
+
+
+
+
+# Code here to test that out
+bento.pop()
+
+
+# Now check what your list looks like - is that last item still there?
+bento
+
+
+bento.remove('kimchi')
+
+
+bento
+
+
+
+
+
+bento[:-1]
+
+
+# Pay attention to what the .join is doing
+print("I'd like my bento to contain: " + ", ".join(bento[:-1]) + ", and " + bento[-1])
+
+
+
+
+
+# F-string formatting easier!
+print(f"My bento box will include: {', '.join(bento[:-1])}, and {bento[1]}.")
+
+
+print(f"My bento box will include: {bento[0]} and {bento[1]}.")
+
+
+# The above cell is the same as:
+print("My bento box will include: {} and {}.".format(bento[0], bento[1]))
+
+
+
+
+
+
+
+
+
+
+
+text_str = 'some string here'
+text_str.title()
+
+
+# Write a for loop to capitalize each ingredient in our bento list
+# for x in interable:
+# f(X)
+for item in bento:
+ print(item.title())
+
+
+bento.title()
+
+
+item
+
+
+bento
+
+
+
+
+
+bento.append('seared tuna')
+
+
+# Write your for loop with a conditional
+
+# Need to first define an empty list to become our new list
+s_bento = []
+r_bento = []
+other_bento = []
+# Now our loop
+for ingredient in bento:
+ if 's' in ingredient:
+ s_bento.append(ingredient)
+ if 'r' in ingredient:
+ r_bento.append(ingredient)
+ elif 'r' in ingredient:
+ r_bento.append(ingredient)
+ else:
+ other_bento.append(ingredient)
+
+
+# Check your work
+s_bento
+
+
+r_bento
+
+
+other_bento
+
+
+
+
+
+# Change our loop to a list comprehension
+s_bento = [ingredient for ingredient in bento if 's' in ingredient]
+s_bento
+
+
+# We could do the same with our earlier capitalization, too!
+[ingredient.title() for ingredient in bento]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+new_dict = {'key': 'value', 'key2': 'value2'}
+
+
+# Here's an example of zipping two lists together to form a dictionary
+example_bento_keys = ["ingredient1", "ingredient2", "ingredient3"]
+example_bento_values = ["rice", "tempura", "miso soup"]
+
+example_bento_dict = dict(zip(example_bento_keys, example_bento_values))
+
+print(example_bento_dict)
+print(type(example_bento_dict))
+
+
+# Now let's do that! What does our current list look like?
+bento
+
+
+# Let's define keys for our bento
+bento_keys = ['protein', 'main', 'vegetable1', 'vegetable2', 'side']
+
+
+# Now create your bento_dict!
+bento_dict = dict(zip(bento_keys, bento))
+
+
+# Code here to check your work - check type, and print your dictionary
+print(type(bento_dict))
+
+print(bento_dict)
+
+
+
+
+
+bento_dict['protein']
+
+
+bento_dict[0]
+
+
+dict1 = {'key1': 20, 'key2': 30}
+
+
+bracket_way = dict1['key3']
+type(bracket_way)
+
+
+# Potentially better way because it returns None rather than an error
+#bracket_way = dict1['key3']
+get_way = dict1.get('key3')
+type(get_way)
+
+
+get_way
+
+
+bracket_way
+
+
+
+
+
+bento_dict.items()
+
+
+# Write your loop using .items() to unpack key, value pairs
+for key, value in bento_dict.items():
+ if 'vegetable' in key:
+ print(value)
+
+
+for x in bento_dict:
+ print(x, bento_dict[x])
+
+
+
+
+
+# Need to first define an empty dictionary to become our new dict
+veggie_dict = {}
+
+for key, value in bento_dict.items():
+ if 'vegetable' in key:
+ number = key[-1]
+ veggie_dict[number] = value.title()
+
+
+# Check your work!
+veggie_dict
+
+
+
+
+
+# Change our loop to a dictionary comprehension
+{k[-1]: v.title() for k, v in bento_dict.items() if 'vegetable' in k}
+
+
+bento_dict.values()
+
+
+# You can get creative with it too!
+{f"Ingredient {x+1}": list(bento_dict.values())[x] for x in range(len((bento_dict.values())))}
+
+
+
+
+
+# Can go ahead and paste at least two other dictionaries
+james_bento = {
+ 'main': 'cheeseburger',
+ 'cheese': 'pepper jack',
+ 'side': 'french fries',
+ 'vegetable1': 'pickles',
+ 'vegetable2': 'onions',
+ 'drink': 'milkshake'}
+
+hannah_bento = {
+ "main": "salad",
+ "protein": "tempura shrimp",
+ "vegetable1": "radishes",
+ "vegetable2": "cucumbers",
+ "side": "tuna roll"}
+
+
+# Code here to create your nested dictionaries
+group_dict = {'Daniel': bento_dict, 'James': james_bento, 'Hannah': hannah_bento}
+
+
+# Check your work
+group_dict
+
+
+group_dict.values()
+
+
+
+
+
+# Code here to grab a list of who you have orders for
+group = list(group_dict.keys())
+group
+
+
+# Check your work
+type(group)
+
+
+
+
+
+# Access one dictionary's main
+group_dict['James']['main']
+
+
+group_dict.get('James').get('main')
+
+
+
+
+
+list(group_dict.values())[0]
+
+
+# Code here to write a for loop that prints each main
+# Think about what we are looping through and if you need .items()
+for order in group_dict.values():
+ print(order['main'])
+
+
+
+
+
+# An example of nested comprehensions
+{f"{name}'s vegetables": [v for k, v in order.items() if 'vegetable' in k]
+ for name, order in group_dict.items()}
+
+
+# But remember ... it's okay to easier to write this out as a for loop
+# THEN you can condense into a comprehension more easily!
+
+group_veggie_dict = {}
+
+for name, order in group_dict.items():
+ ingredient_list = []
+ for key, ingredient in order.items():
+ if 'vegetable' in key:
+ ingredient_list.append(ingredient)
+ group_veggie_dict[f"{name}'s vegetables"] = ingredient_list
+
+# Check it
+group_veggie_dict
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+def find_ingredients(nested_dict, ingredient_type='main'):
+ '''
+ Function that takes in a dictionary, where names are keys and values are
+ dictionaries of that person's bento order, and then checks which keys in
+ the bento order dictionary match the provided string. The output is a list
+ of tuples, with each person's name and a list of matched ingredients.
+
+ Inputs:
+ nested_dictionary : dictionary
+ ingredient_type : string (default is 'main')
+
+ Outputs:
+ output_list : tuple
+ '''
+ output_list = []
+ for name, order in nested_dict.items():
+ ingredient_list = []
+ for key, ingredient in order.items():
+ if ingredient_type in key:
+ ingredient_list.append(ingredient)
+ output_list.append((name, ingredient_list))
+
+
+ return output_list
+
+
+# version that outputs dictionary instead of list
+def find_ingredients_dict(nested_dict, ingredient_type='main'):
+ '''
+ Function that takes in a dictionary, where names are keys and values are
+ dictionaries of that person's bento order, and then checks which keys in
+ the bento order dictionary match the provided string. The output is a list
+ of tuples, with each person's name and a list of matched ingredients.
+
+ Inputs:
+ nested_dictionary : dictionary
+ ingredient_type : string (default is 'main')
+
+ Outputs:
+ output_list : tuple
+ '''
+ output_dict = {}
+ for name, order in nested_dict.items():
+ ingredient_list = []
+ for key, ingredient in order.items():
+ if ingredient_type in key:
+ ingredient_list.append(ingredient)
+ output_dict[name] = ingredient_list
+
+
+ return output_dict
+
+
+# Try it!
+output = find_ingredients(group_dict, 'side')
+output
+
+
+type(output[0])
+
+
+find_ingredients_dict(group_dict)
+
+
+
+
+
+
+
+
+nums = set(range(1000))
+
+
+# Your code here
+
+
+
+
+
+
+
+
+words = ['carbon', 'osmium', 'mercury', 'potassium', 'rhenium', 'einsteinium',
+ 'hydrogen', 'erbium', 'nitrogen', 'sulfur', 'iodine', 'oxygen', 'niobium']
+
+
+# Your code here
+
+
+
+
+
+
+
+
+names = ['Randy', 'Robert', 'Alex', 'Ranjit', 'Charlie', 'Richard', 'Ravdeep',
+ 'Vimal', 'Wu', 'Nelson']
+
+
+# Your code here (couple ways to do this)
+
+
+
+
+
+
+
+
+phone_nos = [{'name': 'greg', 'nums': {'home': 1234567, 'work': 7654321}},
+ {'name': 'max', 'nums': {'home': 9876543, 'work': 1010001}},
+ {'name': 'erin', 'nums': {'home': 3333333, 'work': 4444444}},
+ {'name': 'joél', 'nums': {'home': 2222222, 'work': 5555555}},
+ {'name': 'sean', 'nums': {'home': 9999999, 'work': 8888888}}]
+
+
+# Your code here
+
+
+
+
+
+
+
+
+customers = {
+ 'bill': {'purchases': {'movies': ['Terminator', 'Elf'],
+ 'books': []},
+ 'id': 1},
+ 'dolph': {'purchases': {'movies': ['It Happened One Night'],
+ 'books': ['The Far Side Gallery']},
+ 'id': 2},
+ 'pat': {'purchases': {'movies': [],
+ 'books': ['Seinfeld and Philosophy', 'I Am a Bunny']},
+ 'id': 3}
+}
+
+
+# Your code here
+
+
+
+
+
+
+
+
+# Your code here
+
+
+
+
+
+
+
+
+# Your code here
+
+
+
diff --git a/Phase1/Lectures/06_PythonDataManipulation.ipynb b/Phase1/Lectures/06_PythonDataManipulation.ipynb
index d908bfd..8014ab5 100644
--- a/Phase1/Lectures/06_PythonDataManipulation.ipynb
+++ b/Phase1/Lectures/06_PythonDataManipulation.ipynb
@@ -356,9 +356,7 @@
{
"cell_type": "code",
"execution_count": null,
- "metadata": {
- "scrolled": false
- },
+ "metadata": {},
"outputs": [],
"source": [
"# Write a for loop to capitalize each ingredient in our bento list\n",
@@ -1480,7 +1478,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.5"
+ "version": "3.12.4"
},
"toc": {
"base_numbering": 1,
@@ -1502,5 +1500,5 @@
}
},
"nbformat": 4,
- "nbformat_minor": 2
+ "nbformat_minor": 4
}
diff --git a/Phase1/Lectures/09_PandasDataframes.ipynb b/Phase1/Lectures/09_PandasDataframes.ipynb
index c7fefc7..7c465a0 100644
--- a/Phase1/Lectures/09_PandasDataframes.ipynb
+++ b/Phase1/Lectures/09_PandasDataframes.ipynb
@@ -52,7 +52,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
@@ -84,7 +84,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 23,
"metadata": {
"hidden": true
},
@@ -113,11 +113,276 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 24,
"metadata": {
"hidden": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " age \n",
+ " sex \n",
+ " cp \n",
+ " trestbps \n",
+ " chol \n",
+ " fbs \n",
+ " restecg \n",
+ " thalach \n",
+ " exang \n",
+ " oldpeak \n",
+ " slope \n",
+ " ca \n",
+ " thal \n",
+ " target \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 63 \n",
+ " 1 \n",
+ " 3 \n",
+ " 145 \n",
+ " 233 \n",
+ " 1 \n",
+ " 0 \n",
+ " 150 \n",
+ " 0 \n",
+ " 2.3 \n",
+ " 0 \n",
+ " 0 \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 37 \n",
+ " 1 \n",
+ " 2 \n",
+ " 130 \n",
+ " 250 \n",
+ " 0 \n",
+ " 1 \n",
+ " 187 \n",
+ " 0 \n",
+ " 3.5 \n",
+ " 0 \n",
+ " 0 \n",
+ " 2 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 41 \n",
+ " 0 \n",
+ " 1 \n",
+ " 130 \n",
+ " 204 \n",
+ " 0 \n",
+ " 0 \n",
+ " 172 \n",
+ " 0 \n",
+ " 1.4 \n",
+ " 2 \n",
+ " 0 \n",
+ " 2 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 56 \n",
+ " 1 \n",
+ " 1 \n",
+ " 120 \n",
+ " 236 \n",
+ " 0 \n",
+ " 1 \n",
+ " 178 \n",
+ " 0 \n",
+ " 0.8 \n",
+ " 2 \n",
+ " 0 \n",
+ " 2 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 57 \n",
+ " 0 \n",
+ " 0 \n",
+ " 120 \n",
+ " 354 \n",
+ " 0 \n",
+ " 1 \n",
+ " 163 \n",
+ " 1 \n",
+ " 0.6 \n",
+ " 2 \n",
+ " 0 \n",
+ " 2 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 298 \n",
+ " 57 \n",
+ " 0 \n",
+ " 0 \n",
+ " 140 \n",
+ " 241 \n",
+ " 0 \n",
+ " 1 \n",
+ " 123 \n",
+ " 1 \n",
+ " 0.2 \n",
+ " 1 \n",
+ " 0 \n",
+ " 3 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 299 \n",
+ " 45 \n",
+ " 1 \n",
+ " 3 \n",
+ " 110 \n",
+ " 264 \n",
+ " 0 \n",
+ " 1 \n",
+ " 132 \n",
+ " 0 \n",
+ " 1.2 \n",
+ " 1 \n",
+ " 0 \n",
+ " 3 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 300 \n",
+ " 68 \n",
+ " 1 \n",
+ " 0 \n",
+ " 144 \n",
+ " 193 \n",
+ " 1 \n",
+ " 1 \n",
+ " 141 \n",
+ " 0 \n",
+ " 3.4 \n",
+ " 1 \n",
+ " 2 \n",
+ " 3 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 301 \n",
+ " 57 \n",
+ " 1 \n",
+ " 0 \n",
+ " 130 \n",
+ " 131 \n",
+ " 0 \n",
+ " 1 \n",
+ " 115 \n",
+ " 1 \n",
+ " 1.2 \n",
+ " 1 \n",
+ " 1 \n",
+ " 3 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 302 \n",
+ " 57 \n",
+ " 0 \n",
+ " 1 \n",
+ " 130 \n",
+ " 236 \n",
+ " 0 \n",
+ " 0 \n",
+ " 174 \n",
+ " 0 \n",
+ " 0.0 \n",
+ " 1 \n",
+ " 1 \n",
+ " 2 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
303 rows × 14 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " age sex cp trestbps chol fbs restecg thalach exang oldpeak \\\n",
+ "0 63 1 3 145 233 1 0 150 0 2.3 \n",
+ "1 37 1 2 130 250 0 1 187 0 3.5 \n",
+ "2 41 0 1 130 204 0 0 172 0 1.4 \n",
+ "3 56 1 1 120 236 0 1 178 0 0.8 \n",
+ "4 57 0 0 120 354 0 1 163 1 0.6 \n",
+ ".. ... ... .. ... ... ... ... ... ... ... \n",
+ "298 57 0 0 140 241 0 1 123 1 0.2 \n",
+ "299 45 1 3 110 264 0 1 132 0 1.2 \n",
+ "300 68 1 0 144 193 1 1 141 0 3.4 \n",
+ "301 57 1 0 130 131 0 1 115 1 1.2 \n",
+ "302 57 0 1 130 236 0 0 174 0 0.0 \n",
+ "\n",
+ " slope ca thal target \n",
+ "0 0 0 1 1 \n",
+ "1 0 0 2 1 \n",
+ "2 2 0 2 1 \n",
+ "3 2 0 2 1 \n",
+ "4 2 0 2 1 \n",
+ ".. ... .. ... ... \n",
+ "298 1 0 3 0 \n",
+ "299 1 0 3 0 \n",
+ "300 1 2 3 0 \n",
+ "301 1 1 3 0 \n",
+ "302 1 1 2 0 \n",
+ "\n",
+ "[303 rows x 14 columns]"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Let's check this variable out\n",
"heart_df"
@@ -125,11 +390,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 25,
"metadata": {
"hidden": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "pandas.core.frame.DataFrame"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# What type is this variable?\n",
"type(heart_df)"
@@ -156,21 +432,67 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['age',\n",
+ " 'sex',\n",
+ " 'cp',\n",
+ " 'trestbps',\n",
+ " 'chol',\n",
+ " 'fbs',\n",
+ " 'restecg',\n",
+ " 'thalach',\n",
+ " 'exang',\n",
+ " 'oldpeak',\n",
+ " 'slope',\n",
+ " 'ca',\n",
+ " 'thal',\n",
+ " 'target']"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"list(heart_df.keys())"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 27,
"metadata": {
"hidden": true,
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 63\n",
+ "1 37\n",
+ "2 41\n",
+ "3 56\n",
+ "4 57\n",
+ " ..\n",
+ "298 57\n",
+ "299 45\n",
+ "300 68\n",
+ "301 57\n",
+ "302 57\n",
+ "Name: age, Length: 303, dtype: int64"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Let's grab just one column\n",
"age_series = heart_df['age']\n",
@@ -179,29 +501,377 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 28,
"metadata": {
"scrolled": false
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['age',\n",
+ " 'sex',\n",
+ " 'cp',\n",
+ " 'trestbps',\n",
+ " 'chol',\n",
+ " 'fbs',\n",
+ " 'restecg',\n",
+ " 'thalach',\n",
+ " 'exang',\n",
+ " 'oldpeak',\n",
+ " 'slope',\n",
+ " 'ca',\n",
+ " 'thal',\n",
+ " 'target']"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"list(heart_df.columns)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 29,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "54.366336633663366"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"age_series.mean()"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[63,\n",
+ " 37,\n",
+ " 41,\n",
+ " 56,\n",
+ " 57,\n",
+ " 57,\n",
+ " 56,\n",
+ " 44,\n",
+ " 52,\n",
+ " 57,\n",
+ " 54,\n",
+ " 48,\n",
+ " 49,\n",
+ " 64,\n",
+ " 58,\n",
+ " 50,\n",
+ " 58,\n",
+ " 66,\n",
+ " 43,\n",
+ " 69,\n",
+ " 59,\n",
+ " 44,\n",
+ " 42,\n",
+ " 61,\n",
+ " 40,\n",
+ " 71,\n",
+ " 59,\n",
+ " 51,\n",
+ " 65,\n",
+ " 53,\n",
+ " 41,\n",
+ " 65,\n",
+ " 44,\n",
+ " 54,\n",
+ " 51,\n",
+ " 46,\n",
+ " 54,\n",
+ " 54,\n",
+ " 65,\n",
+ " 65,\n",
+ " 51,\n",
+ " 48,\n",
+ " 45,\n",
+ " 53,\n",
+ " 39,\n",
+ " 52,\n",
+ " 44,\n",
+ " 47,\n",
+ " 53,\n",
+ " 53,\n",
+ " 51,\n",
+ " 66,\n",
+ " 62,\n",
+ " 44,\n",
+ " 63,\n",
+ " 52,\n",
+ " 48,\n",
+ " 45,\n",
+ " 34,\n",
+ " 57,\n",
+ " 71,\n",
+ " 54,\n",
+ " 52,\n",
+ " 41,\n",
+ " 58,\n",
+ " 35,\n",
+ " 51,\n",
+ " 45,\n",
+ " 44,\n",
+ " 62,\n",
+ " 54,\n",
+ " 51,\n",
+ " 29,\n",
+ " 51,\n",
+ " 43,\n",
+ " 55,\n",
+ " 51,\n",
+ " 59,\n",
+ " 52,\n",
+ " 58,\n",
+ " 41,\n",
+ " 45,\n",
+ " 60,\n",
+ " 52,\n",
+ " 42,\n",
+ " 67,\n",
+ " 68,\n",
+ " 46,\n",
+ " 54,\n",
+ " 58,\n",
+ " 48,\n",
+ " 57,\n",
+ " 52,\n",
+ " 54,\n",
+ " 45,\n",
+ " 53,\n",
+ " 62,\n",
+ " 52,\n",
+ " 43,\n",
+ " 53,\n",
+ " 42,\n",
+ " 59,\n",
+ " 63,\n",
+ " 42,\n",
+ " 50,\n",
+ " 68,\n",
+ " 69,\n",
+ " 45,\n",
+ " 50,\n",
+ " 50,\n",
+ " 64,\n",
+ " 57,\n",
+ " 64,\n",
+ " 43,\n",
+ " 55,\n",
+ " 37,\n",
+ " 41,\n",
+ " 56,\n",
+ " 46,\n",
+ " 46,\n",
+ " 64,\n",
+ " 59,\n",
+ " 41,\n",
+ " 54,\n",
+ " 39,\n",
+ " 34,\n",
+ " 47,\n",
+ " 67,\n",
+ " 52,\n",
+ " 74,\n",
+ " 54,\n",
+ " 49,\n",
+ " 42,\n",
+ " 41,\n",
+ " 41,\n",
+ " 49,\n",
+ " 60,\n",
+ " 62,\n",
+ " 57,\n",
+ " 64,\n",
+ " 51,\n",
+ " 43,\n",
+ " 42,\n",
+ " 67,\n",
+ " 76,\n",
+ " 70,\n",
+ " 44,\n",
+ " 60,\n",
+ " 44,\n",
+ " 42,\n",
+ " 66,\n",
+ " 71,\n",
+ " 64,\n",
+ " 66,\n",
+ " 39,\n",
+ " 58,\n",
+ " 47,\n",
+ " 35,\n",
+ " 58,\n",
+ " 56,\n",
+ " 56,\n",
+ " 55,\n",
+ " 41,\n",
+ " 38,\n",
+ " 38,\n",
+ " 67,\n",
+ " 67,\n",
+ " 62,\n",
+ " 63,\n",
+ " 53,\n",
+ " 56,\n",
+ " 48,\n",
+ " 58,\n",
+ " 58,\n",
+ " 60,\n",
+ " 40,\n",
+ " 60,\n",
+ " 64,\n",
+ " 43,\n",
+ " 57,\n",
+ " 55,\n",
+ " 65,\n",
+ " 61,\n",
+ " 58,\n",
+ " 50,\n",
+ " 44,\n",
+ " 60,\n",
+ " 54,\n",
+ " 50,\n",
+ " 41,\n",
+ " 51,\n",
+ " 58,\n",
+ " 54,\n",
+ " 60,\n",
+ " 60,\n",
+ " 59,\n",
+ " 46,\n",
+ " 67,\n",
+ " 62,\n",
+ " 65,\n",
+ " 44,\n",
+ " 60,\n",
+ " 58,\n",
+ " 68,\n",
+ " 62,\n",
+ " 52,\n",
+ " 59,\n",
+ " 60,\n",
+ " 49,\n",
+ " 59,\n",
+ " 57,\n",
+ " 61,\n",
+ " 39,\n",
+ " 61,\n",
+ " 56,\n",
+ " 43,\n",
+ " 62,\n",
+ " 63,\n",
+ " 65,\n",
+ " 48,\n",
+ " 63,\n",
+ " 55,\n",
+ " 65,\n",
+ " 56,\n",
+ " 54,\n",
+ " 70,\n",
+ " 62,\n",
+ " 35,\n",
+ " 59,\n",
+ " 64,\n",
+ " 47,\n",
+ " 57,\n",
+ " 55,\n",
+ " 64,\n",
+ " 70,\n",
+ " 51,\n",
+ " 58,\n",
+ " 60,\n",
+ " 77,\n",
+ " 35,\n",
+ " 70,\n",
+ " 59,\n",
+ " 64,\n",
+ " 57,\n",
+ " 56,\n",
+ " 48,\n",
+ " 56,\n",
+ " 66,\n",
+ " 54,\n",
+ " 69,\n",
+ " 51,\n",
+ " 43,\n",
+ " 62,\n",
+ " 67,\n",
+ " 59,\n",
+ " 45,\n",
+ " 58,\n",
+ " 50,\n",
+ " 62,\n",
+ " 38,\n",
+ " 66,\n",
+ " 52,\n",
+ " 53,\n",
+ " 63,\n",
+ " 54,\n",
+ " 66,\n",
+ " 55,\n",
+ " 49,\n",
+ " 54,\n",
+ " 56,\n",
+ " 46,\n",
+ " 61,\n",
+ " 67,\n",
+ " 58,\n",
+ " 47,\n",
+ " 52,\n",
+ " 58,\n",
+ " 57,\n",
+ " 58,\n",
+ " 61,\n",
+ " 42,\n",
+ " 52,\n",
+ " 59,\n",
+ " 40,\n",
+ " 61,\n",
+ " 46,\n",
+ " 59,\n",
+ " 57,\n",
+ " 57,\n",
+ " 55,\n",
+ " 61,\n",
+ " 58,\n",
+ " 58,\n",
+ " 67,\n",
+ " 44,\n",
+ " 63,\n",
+ " 63,\n",
+ " 59,\n",
+ " 57,\n",
+ " 45,\n",
+ " 68,\n",
+ " 57,\n",
+ " 57]"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"list(age_series)"
]
@@ -217,18 +887,51 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 63\n",
+ "1 37\n",
+ "2 41\n",
+ "3 56\n",
+ "4 57\n",
+ " ..\n",
+ "298 57\n",
+ "299 45\n",
+ "300 68\n",
+ "301 57\n",
+ "302 57\n",
+ "Name: age, Length: 303, dtype: int64"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"heart_df.age"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 32,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "pandas.core.series.Series"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# What type is the column?\n",
"type(age_series)"
@@ -245,32 +948,367 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 33,
"metadata": {
"hidden": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "RangeIndex(start=0, stop=303, step=1)"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"heart_df.index"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 34,
"metadata": {
"hidden": true,
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "RangeIndex(start=0, stop=303, step=1)"
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"age_series.index"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 35,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[0,\n",
+ " 1,\n",
+ " 2,\n",
+ " 3,\n",
+ " 4,\n",
+ " 5,\n",
+ " 6,\n",
+ " 7,\n",
+ " 8,\n",
+ " 9,\n",
+ " 10,\n",
+ " 11,\n",
+ " 12,\n",
+ " 13,\n",
+ " 14,\n",
+ " 15,\n",
+ " 16,\n",
+ " 17,\n",
+ " 18,\n",
+ " 19,\n",
+ " 20,\n",
+ " 21,\n",
+ " 22,\n",
+ " 23,\n",
+ " 24,\n",
+ " 25,\n",
+ " 26,\n",
+ " 27,\n",
+ " 28,\n",
+ " 29,\n",
+ " 30,\n",
+ " 31,\n",
+ " 32,\n",
+ " 33,\n",
+ " 34,\n",
+ " 35,\n",
+ " 36,\n",
+ " 37,\n",
+ " 38,\n",
+ " 39,\n",
+ " 40,\n",
+ " 41,\n",
+ " 42,\n",
+ " 43,\n",
+ " 44,\n",
+ " 45,\n",
+ " 46,\n",
+ " 47,\n",
+ " 48,\n",
+ " 49,\n",
+ " 50,\n",
+ " 51,\n",
+ " 52,\n",
+ " 53,\n",
+ " 54,\n",
+ " 55,\n",
+ " 56,\n",
+ " 57,\n",
+ " 58,\n",
+ " 59,\n",
+ " 60,\n",
+ " 61,\n",
+ " 62,\n",
+ " 63,\n",
+ " 64,\n",
+ " 65,\n",
+ " 66,\n",
+ " 67,\n",
+ " 68,\n",
+ " 69,\n",
+ " 70,\n",
+ " 71,\n",
+ " 72,\n",
+ " 73,\n",
+ " 74,\n",
+ " 75,\n",
+ " 76,\n",
+ " 77,\n",
+ " 78,\n",
+ " 79,\n",
+ " 80,\n",
+ " 81,\n",
+ " 82,\n",
+ " 83,\n",
+ " 84,\n",
+ " 85,\n",
+ " 86,\n",
+ " 87,\n",
+ " 88,\n",
+ " 89,\n",
+ " 90,\n",
+ " 91,\n",
+ " 92,\n",
+ " 93,\n",
+ " 94,\n",
+ " 95,\n",
+ " 96,\n",
+ " 97,\n",
+ " 98,\n",
+ " 99,\n",
+ " 100,\n",
+ " 101,\n",
+ " 102,\n",
+ " 103,\n",
+ " 104,\n",
+ " 105,\n",
+ " 106,\n",
+ " 107,\n",
+ " 108,\n",
+ " 109,\n",
+ " 110,\n",
+ " 111,\n",
+ " 112,\n",
+ " 113,\n",
+ " 114,\n",
+ " 115,\n",
+ " 116,\n",
+ " 117,\n",
+ " 118,\n",
+ " 119,\n",
+ " 120,\n",
+ " 121,\n",
+ " 122,\n",
+ " 123,\n",
+ " 124,\n",
+ " 125,\n",
+ " 126,\n",
+ " 127,\n",
+ " 128,\n",
+ " 129,\n",
+ " 130,\n",
+ " 131,\n",
+ " 132,\n",
+ " 133,\n",
+ " 134,\n",
+ " 135,\n",
+ " 136,\n",
+ " 137,\n",
+ " 138,\n",
+ " 139,\n",
+ " 140,\n",
+ " 141,\n",
+ " 142,\n",
+ " 143,\n",
+ " 144,\n",
+ " 145,\n",
+ " 146,\n",
+ " 147,\n",
+ " 148,\n",
+ " 149,\n",
+ " 150,\n",
+ " 151,\n",
+ " 152,\n",
+ " 153,\n",
+ " 154,\n",
+ " 155,\n",
+ " 156,\n",
+ " 157,\n",
+ " 158,\n",
+ " 159,\n",
+ " 160,\n",
+ " 161,\n",
+ " 162,\n",
+ " 163,\n",
+ " 164,\n",
+ " 165,\n",
+ " 166,\n",
+ " 167,\n",
+ " 168,\n",
+ " 169,\n",
+ " 170,\n",
+ " 171,\n",
+ " 172,\n",
+ " 173,\n",
+ " 174,\n",
+ " 175,\n",
+ " 176,\n",
+ " 177,\n",
+ " 178,\n",
+ " 179,\n",
+ " 180,\n",
+ " 181,\n",
+ " 182,\n",
+ " 183,\n",
+ " 184,\n",
+ " 185,\n",
+ " 186,\n",
+ " 187,\n",
+ " 188,\n",
+ " 189,\n",
+ " 190,\n",
+ " 191,\n",
+ " 192,\n",
+ " 193,\n",
+ " 194,\n",
+ " 195,\n",
+ " 196,\n",
+ " 197,\n",
+ " 198,\n",
+ " 199,\n",
+ " 200,\n",
+ " 201,\n",
+ " 202,\n",
+ " 203,\n",
+ " 204,\n",
+ " 205,\n",
+ " 206,\n",
+ " 207,\n",
+ " 208,\n",
+ " 209,\n",
+ " 210,\n",
+ " 211,\n",
+ " 212,\n",
+ " 213,\n",
+ " 214,\n",
+ " 215,\n",
+ " 216,\n",
+ " 217,\n",
+ " 218,\n",
+ " 219,\n",
+ " 220,\n",
+ " 221,\n",
+ " 222,\n",
+ " 223,\n",
+ " 224,\n",
+ " 225,\n",
+ " 226,\n",
+ " 227,\n",
+ " 228,\n",
+ " 229,\n",
+ " 230,\n",
+ " 231,\n",
+ " 232,\n",
+ " 233,\n",
+ " 234,\n",
+ " 235,\n",
+ " 236,\n",
+ " 237,\n",
+ " 238,\n",
+ " 239,\n",
+ " 240,\n",
+ " 241,\n",
+ " 242,\n",
+ " 243,\n",
+ " 244,\n",
+ " 245,\n",
+ " 246,\n",
+ " 247,\n",
+ " 248,\n",
+ " 249,\n",
+ " 250,\n",
+ " 251,\n",
+ " 252,\n",
+ " 253,\n",
+ " 254,\n",
+ " 255,\n",
+ " 256,\n",
+ " 257,\n",
+ " 258,\n",
+ " 259,\n",
+ " 260,\n",
+ " 261,\n",
+ " 262,\n",
+ " 263,\n",
+ " 264,\n",
+ " 265,\n",
+ " 266,\n",
+ " 267,\n",
+ " 268,\n",
+ " 269,\n",
+ " 270,\n",
+ " 271,\n",
+ " 272,\n",
+ " 273,\n",
+ " 274,\n",
+ " 275,\n",
+ " 276,\n",
+ " 277,\n",
+ " 278,\n",
+ " 279,\n",
+ " 280,\n",
+ " 281,\n",
+ " 282,\n",
+ " 283,\n",
+ " 284,\n",
+ " 285,\n",
+ " 286,\n",
+ " 287,\n",
+ " 288,\n",
+ " 289,\n",
+ " 290,\n",
+ " 291,\n",
+ " 292,\n",
+ " 293,\n",
+ " 294,\n",
+ " 295,\n",
+ " 296,\n",
+ " 297,\n",
+ " 298,\n",
+ " 299,\n",
+ " 300,\n",
+ " 301,\n",
+ " 302]"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"list(age_series.index)"
]
@@ -284,18 +1322,44 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 36,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Index(['age', 'sex', 'cp', 'trestbps', 'chol', 'fbs', 'restecg', 'thalach',\n",
+ " 'exang', 'oldpeak', 'slope', 'ca', 'thal', 'target'],\n",
+ " dtype='object')"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"heart_df.columns"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 37,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "ename": "AttributeError",
+ "evalue": "'Series' object has no attribute 'columns'",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
+ "\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_22108\\1967716809.py\u001b[0m in \u001b[0;36m?\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# This will throw an error!\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mage_series\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[1;32mc:\\Users\\Elif Surucu\\anaconda3\\Lib\\site-packages\\pandas\\core\\generic.py\u001b[0m in \u001b[0;36m?\u001b[1;34m(self, name)\u001b[0m\n\u001b[0;32m 6295\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mname\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_accessors\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6296\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_can_hold_identifiers_and_holds_name\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6297\u001b[0m \u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6298\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mname\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 6299\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mname\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[1;31mAttributeError\u001b[0m: 'Series' object has no attribute 'columns'"
+ ]
+ }
+ ],
"source": [
"# This will throw an error!\n",
"age_series.columns"
@@ -312,21 +1376,50 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 39,
"metadata": {
"hidden": true,
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[63., 1., 3., ..., 0., 1., 1.],\n",
+ " [37., 1., 2., ..., 0., 2., 1.],\n",
+ " [41., 0., 1., ..., 0., 2., 1.],\n",
+ " ...,\n",
+ " [68., 1., 0., ..., 2., 3., 0.],\n",
+ " [57., 1., 0., ..., 1., 3., 0.],\n",
+ " [57., 0., 1., ..., 1., 2., 0.]])"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"heart_df.values"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 38,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 63. , 1. , 3. , 145. , 233. , 1. , 0. , 150. , 0. ,\n",
+ " 2.3, 0. , 0. , 1. , 1. ])"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"#First row\n",
"heart_df.values[0]"
@@ -334,31 +1427,88 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 40,
"metadata": {
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[63, 1, 3, ..., 0, 1, 1],\n",
+ " [37, 1, 2, ..., 0, 2, 1],\n",
+ " [41, 0, 1, ..., 0, 2, 1],\n",
+ " ...,\n",
+ " [68, 1, 0, ..., 2, 3, 0],\n",
+ " [57, 1, 0, ..., 1, 3, 0],\n",
+ " [57, 0, 1, ..., 1, 2, 0]])"
+ ]
+ },
+ "execution_count": 40,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"heart_df.values.astype(int)"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 41,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "numpy.float64"
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"type(heart_df.values[0][0])"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 42,
"metadata": {
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([63, 37, 41, 56, 57, 57, 56, 44, 52, 57, 54, 48, 49, 64, 58, 50, 58,\n",
+ " 66, 43, 69, 59, 44, 42, 61, 40, 71, 59, 51, 65, 53, 41, 65, 44, 54,\n",
+ " 51, 46, 54, 54, 65, 65, 51, 48, 45, 53, 39, 52, 44, 47, 53, 53, 51,\n",
+ " 66, 62, 44, 63, 52, 48, 45, 34, 57, 71, 54, 52, 41, 58, 35, 51, 45,\n",
+ " 44, 62, 54, 51, 29, 51, 43, 55, 51, 59, 52, 58, 41, 45, 60, 52, 42,\n",
+ " 67, 68, 46, 54, 58, 48, 57, 52, 54, 45, 53, 62, 52, 43, 53, 42, 59,\n",
+ " 63, 42, 50, 68, 69, 45, 50, 50, 64, 57, 64, 43, 55, 37, 41, 56, 46,\n",
+ " 46, 64, 59, 41, 54, 39, 34, 47, 67, 52, 74, 54, 49, 42, 41, 41, 49,\n",
+ " 60, 62, 57, 64, 51, 43, 42, 67, 76, 70, 44, 60, 44, 42, 66, 71, 64,\n",
+ " 66, 39, 58, 47, 35, 58, 56, 56, 55, 41, 38, 38, 67, 67, 62, 63, 53,\n",
+ " 56, 48, 58, 58, 60, 40, 60, 64, 43, 57, 55, 65, 61, 58, 50, 44, 60,\n",
+ " 54, 50, 41, 51, 58, 54, 60, 60, 59, 46, 67, 62, 65, 44, 60, 58, 68,\n",
+ " 62, 52, 59, 60, 49, 59, 57, 61, 39, 61, 56, 43, 62, 63, 65, 48, 63,\n",
+ " 55, 65, 56, 54, 70, 62, 35, 59, 64, 47, 57, 55, 64, 70, 51, 58, 60,\n",
+ " 77, 35, 70, 59, 64, 57, 56, 48, 56, 66, 54, 69, 51, 43, 62, 67, 59,\n",
+ " 45, 58, 50, 62, 38, 66, 52, 53, 63, 54, 66, 55, 49, 54, 56, 46, 61,\n",
+ " 67, 58, 47, 52, 58, 57, 58, 61, 42, 52, 59, 40, 61, 46, 59, 57, 57,\n",
+ " 55, 61, 58, 58, 67, 44, 63, 63, 59, 57, 45, 68, 57, 57],\n",
+ " dtype=int64)"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"age_series.values"
]
@@ -394,11 +1544,159 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 43,
"metadata": {
"hidden": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " age \n",
+ " sex \n",
+ " cp \n",
+ " trestbps \n",
+ " chol \n",
+ " fbs \n",
+ " restecg \n",
+ " thalach \n",
+ " exang \n",
+ " oldpeak \n",
+ " slope \n",
+ " ca \n",
+ " thal \n",
+ " target \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 63 \n",
+ " 1 \n",
+ " 3 \n",
+ " 145 \n",
+ " 233 \n",
+ " 1 \n",
+ " 0 \n",
+ " 150 \n",
+ " 0 \n",
+ " 2.3 \n",
+ " 0 \n",
+ " 0 \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 37 \n",
+ " 1 \n",
+ " 2 \n",
+ " 130 \n",
+ " 250 \n",
+ " 0 \n",
+ " 1 \n",
+ " 187 \n",
+ " 0 \n",
+ " 3.5 \n",
+ " 0 \n",
+ " 0 \n",
+ " 2 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 41 \n",
+ " 0 \n",
+ " 1 \n",
+ " 130 \n",
+ " 204 \n",
+ " 0 \n",
+ " 0 \n",
+ " 172 \n",
+ " 0 \n",
+ " 1.4 \n",
+ " 2 \n",
+ " 0 \n",
+ " 2 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 56 \n",
+ " 1 \n",
+ " 1 \n",
+ " 120 \n",
+ " 236 \n",
+ " 0 \n",
+ " 1 \n",
+ " 178 \n",
+ " 0 \n",
+ " 0.8 \n",
+ " 2 \n",
+ " 0 \n",
+ " 2 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 57 \n",
+ " 0 \n",
+ " 0 \n",
+ " 120 \n",
+ " 354 \n",
+ " 0 \n",
+ " 1 \n",
+ " 163 \n",
+ " 1 \n",
+ " 0.6 \n",
+ " 2 \n",
+ " 0 \n",
+ " 2 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " age sex cp trestbps chol fbs restecg thalach exang oldpeak slope \\\n",
+ "0 63 1 3 145 233 1 0 150 0 2.3 0 \n",
+ "1 37 1 2 130 250 0 1 187 0 3.5 0 \n",
+ "2 41 0 1 130 204 0 0 172 0 1.4 2 \n",
+ "3 56 1 1 120 236 0 1 178 0 0.8 2 \n",
+ "4 57 0 0 120 354 0 1 163 1 0.6 2 \n",
+ "\n",
+ " ca thal target \n",
+ "0 0 1 1 \n",
+ "1 0 2 1 \n",
+ "2 0 2 1 \n",
+ "3 0 2 1 \n",
+ "4 0 2 1 "
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"heart_df.head()"
]
@@ -415,11 +1713,159 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 44,
"metadata": {
"hidden": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " age \n",
+ " sex \n",
+ " cp \n",
+ " trestbps \n",
+ " chol \n",
+ " fbs \n",
+ " restecg \n",
+ " thalach \n",
+ " exang \n",
+ " oldpeak \n",
+ " slope \n",
+ " ca \n",
+ " thal \n",
+ " target \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 298 \n",
+ " 57 \n",
+ " 0 \n",
+ " 0 \n",
+ " 140 \n",
+ " 241 \n",
+ " 0 \n",
+ " 1 \n",
+ " 123 \n",
+ " 1 \n",
+ " 0.2 \n",
+ " 1 \n",
+ " 0 \n",
+ " 3 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 299 \n",
+ " 45 \n",
+ " 1 \n",
+ " 3 \n",
+ " 110 \n",
+ " 264 \n",
+ " 0 \n",
+ " 1 \n",
+ " 132 \n",
+ " 0 \n",
+ " 1.2 \n",
+ " 1 \n",
+ " 0 \n",
+ " 3 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 300 \n",
+ " 68 \n",
+ " 1 \n",
+ " 0 \n",
+ " 144 \n",
+ " 193 \n",
+ " 1 \n",
+ " 1 \n",
+ " 141 \n",
+ " 0 \n",
+ " 3.4 \n",
+ " 1 \n",
+ " 2 \n",
+ " 3 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 301 \n",
+ " 57 \n",
+ " 1 \n",
+ " 0 \n",
+ " 130 \n",
+ " 131 \n",
+ " 0 \n",
+ " 1 \n",
+ " 115 \n",
+ " 1 \n",
+ " 1.2 \n",
+ " 1 \n",
+ " 1 \n",
+ " 3 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 302 \n",
+ " 57 \n",
+ " 0 \n",
+ " 1 \n",
+ " 130 \n",
+ " 236 \n",
+ " 0 \n",
+ " 0 \n",
+ " 174 \n",
+ " 0 \n",
+ " 0.0 \n",
+ " 1 \n",
+ " 1 \n",
+ " 2 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " age sex cp trestbps chol fbs restecg thalach exang oldpeak \\\n",
+ "298 57 0 0 140 241 0 1 123 1 0.2 \n",
+ "299 45 1 3 110 264 0 1 132 0 1.2 \n",
+ "300 68 1 0 144 193 1 1 141 0 3.4 \n",
+ "301 57 1 0 130 131 0 1 115 1 1.2 \n",
+ "302 57 0 1 130 236 0 0 174 0 0.0 \n",
+ "\n",
+ " slope ca thal target \n",
+ "298 1 0 3 0 \n",
+ "299 1 0 3 0 \n",
+ "300 1 2 3 0 \n",
+ "301 1 1 3 0 \n",
+ "302 1 1 2 0 "
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"heart_df.tail()"
]
@@ -436,11 +1882,39 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 45,
"metadata": {
"hidden": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 303 entries, 0 to 302\n",
+ "Data columns (total 14 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 age 303 non-null int64 \n",
+ " 1 sex 303 non-null int64 \n",
+ " 2 cp 303 non-null int64 \n",
+ " 3 trestbps 303 non-null int64 \n",
+ " 4 chol 303 non-null int64 \n",
+ " 5 fbs 303 non-null int64 \n",
+ " 6 restecg 303 non-null int64 \n",
+ " 7 thalach 303 non-null int64 \n",
+ " 8 exang 303 non-null int64 \n",
+ " 9 oldpeak 303 non-null float64\n",
+ " 10 slope 303 non-null int64 \n",
+ " 11 ca 303 non-null int64 \n",
+ " 12 thal 303 non-null int64 \n",
+ " 13 target 303 non-null int64 \n",
+ "dtypes: float64(1), int64(13)\n",
+ "memory usage: 33.3 KB\n"
+ ]
+ }
+ ],
"source": [
"heart_df.info()"
]
@@ -457,39 +1931,313 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 47,
"metadata": {
"hidden": true,
"scrolled": false
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " age \n",
+ " sex \n",
+ " cp \n",
+ " trestbps \n",
+ " chol \n",
+ " fbs \n",
+ " restecg \n",
+ " thalach \n",
+ " exang \n",
+ " oldpeak \n",
+ " slope \n",
+ " ca \n",
+ " thal \n",
+ " target \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " count \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " 303.000000 \n",
+ " \n",
+ " \n",
+ " mean \n",
+ " 54.366337 \n",
+ " 0.683168 \n",
+ " 0.966997 \n",
+ " 131.623762 \n",
+ " 246.264026 \n",
+ " 0.148515 \n",
+ " 0.528053 \n",
+ " 149.646865 \n",
+ " 0.326733 \n",
+ " 1.039604 \n",
+ " 1.399340 \n",
+ " 0.729373 \n",
+ " 2.313531 \n",
+ " 0.544554 \n",
+ " \n",
+ " \n",
+ " std \n",
+ " 9.082101 \n",
+ " 0.466011 \n",
+ " 1.032052 \n",
+ " 17.538143 \n",
+ " 51.830751 \n",
+ " 0.356198 \n",
+ " 0.525860 \n",
+ " 22.905161 \n",
+ " 0.469794 \n",
+ " 1.161075 \n",
+ " 0.616226 \n",
+ " 1.022606 \n",
+ " 0.612277 \n",
+ " 0.498835 \n",
+ " \n",
+ " \n",
+ " min \n",
+ " 29.000000 \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " 94.000000 \n",
+ " 126.000000 \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " 71.000000 \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 25% \n",
+ " 47.500000 \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " 120.000000 \n",
+ " 211.000000 \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " 133.500000 \n",
+ " 0.000000 \n",
+ " 0.000000 \n",
+ " 1.000000 \n",
+ " 0.000000 \n",
+ " 2.000000 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 50% \n",
+ " 55.000000 \n",
+ " 1.000000 \n",
+ " 1.000000 \n",
+ " 130.000000 \n",
+ " 240.000000 \n",
+ " 0.000000 \n",
+ " 1.000000 \n",
+ " 153.000000 \n",
+ " 0.000000 \n",
+ " 0.800000 \n",
+ " 1.000000 \n",
+ " 0.000000 \n",
+ " 2.000000 \n",
+ " 1.000000 \n",
+ " \n",
+ " \n",
+ " 75% \n",
+ " 61.000000 \n",
+ " 1.000000 \n",
+ " 2.000000 \n",
+ " 140.000000 \n",
+ " 274.500000 \n",
+ " 0.000000 \n",
+ " 1.000000 \n",
+ " 166.000000 \n",
+ " 1.000000 \n",
+ " 1.600000 \n",
+ " 2.000000 \n",
+ " 1.000000 \n",
+ " 3.000000 \n",
+ " 1.000000 \n",
+ " \n",
+ " \n",
+ " max \n",
+ " 77.000000 \n",
+ " 1.000000 \n",
+ " 3.000000 \n",
+ " 200.000000 \n",
+ " 564.000000 \n",
+ " 1.000000 \n",
+ " 2.000000 \n",
+ " 202.000000 \n",
+ " 1.000000 \n",
+ " 6.200000 \n",
+ " 2.000000 \n",
+ " 4.000000 \n",
+ " 3.000000 \n",
+ " 1.000000 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " age sex cp trestbps chol fbs \\\n",
+ "count 303.000000 303.000000 303.000000 303.000000 303.000000 303.000000 \n",
+ "mean 54.366337 0.683168 0.966997 131.623762 246.264026 0.148515 \n",
+ "std 9.082101 0.466011 1.032052 17.538143 51.830751 0.356198 \n",
+ "min 29.000000 0.000000 0.000000 94.000000 126.000000 0.000000 \n",
+ "25% 47.500000 0.000000 0.000000 120.000000 211.000000 0.000000 \n",
+ "50% 55.000000 1.000000 1.000000 130.000000 240.000000 0.000000 \n",
+ "75% 61.000000 1.000000 2.000000 140.000000 274.500000 0.000000 \n",
+ "max 77.000000 1.000000 3.000000 200.000000 564.000000 1.000000 \n",
+ "\n",
+ " restecg thalach exang oldpeak slope ca \\\n",
+ "count 303.000000 303.000000 303.000000 303.000000 303.000000 303.000000 \n",
+ "mean 0.528053 149.646865 0.326733 1.039604 1.399340 0.729373 \n",
+ "std 0.525860 22.905161 0.469794 1.161075 0.616226 1.022606 \n",
+ "min 0.000000 71.000000 0.000000 0.000000 0.000000 0.000000 \n",
+ "25% 0.000000 133.500000 0.000000 0.000000 1.000000 0.000000 \n",
+ "50% 1.000000 153.000000 0.000000 0.800000 1.000000 0.000000 \n",
+ "75% 1.000000 166.000000 1.000000 1.600000 2.000000 1.000000 \n",
+ "max 2.000000 202.000000 1.000000 6.200000 2.000000 4.000000 \n",
+ "\n",
+ " thal target \n",
+ "count 303.000000 303.000000 \n",
+ "mean 2.313531 0.544554 \n",
+ "std 0.612277 0.498835 \n",
+ "min 0.000000 0.000000 \n",
+ "25% 2.000000 0.000000 \n",
+ "50% 2.000000 1.000000 \n",
+ "75% 3.000000 1.000000 \n",
+ "max 3.000000 1.000000 "
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"heart_df.describe()"
]
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 48,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"heart_df['chol'].hist(bins='auto')"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 49,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "count 303.000000\n",
+ "mean 54.366337\n",
+ "std 9.082101\n",
+ "min 29.000000\n",
+ "25% 47.500000\n",
+ "50% 55.000000\n",
+ "75% 61.000000\n",
+ "max 77.000000\n",
+ "Name: age, dtype: float64"
+ ]
+ },
+ "execution_count": 49,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"heart_df.describe()['age']"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 50,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "count 303.000000\n",
+ "mean 54.366337\n",
+ "std 9.082101\n",
+ "min 29.000000\n",
+ "25% 47.500000\n",
+ "50% 55.000000\n",
+ "75% 61.000000\n",
+ "max 77.000000\n",
+ "Name: age, dtype: float64"
+ ]
+ },
+ "execution_count": 50,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"age_series.describe()"
]
@@ -506,11 +2254,36 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 51,
"metadata": {
"hidden": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "age int64\n",
+ "sex int64\n",
+ "cp int64\n",
+ "trestbps int64\n",
+ "chol int64\n",
+ "fbs int64\n",
+ "restecg int64\n",
+ "thalach int64\n",
+ "exang int64\n",
+ "oldpeak float64\n",
+ "slope int64\n",
+ "ca int64\n",
+ "thal int64\n",
+ "target int64\n",
+ "dtype: object"
+ ]
+ },
+ "execution_count": 51,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"heart_df.dtypes"
]
@@ -633,9 +2406,159 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 52,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " animal_id \n",
+ " name \n",
+ " datetime \n",
+ " datetime2 \n",
+ " found_location \n",
+ " intake_type \n",
+ " intake_condition \n",
+ " animal_type \n",
+ " sex_upon_intake \n",
+ " age_upon_intake \n",
+ " breed \n",
+ " color \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " A786884 \n",
+ " *Brock \n",
+ " 2019-01-03T16:19:00.000 \n",
+ " 2019-01-03T16:19:00.000 \n",
+ " 2501 Magin Meadow Dr in Austin (TX) \n",
+ " Stray \n",
+ " Normal \n",
+ " Dog \n",
+ " Neutered Male \n",
+ " 2 years \n",
+ " Beagle Mix \n",
+ " Tricolor \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " A706918 \n",
+ " Belle \n",
+ " 2015-07-05T12:59:00.000 \n",
+ " 2015-07-05T12:59:00.000 \n",
+ " 9409 Bluegrass Dr in Austin (TX) \n",
+ " Stray \n",
+ " Normal \n",
+ " Dog \n",
+ " Spayed Female \n",
+ " 8 years \n",
+ " English Springer Spaniel \n",
+ " White/Liver \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " A724273 \n",
+ " Runster \n",
+ " 2016-04-14T18:43:00.000 \n",
+ " 2016-04-14T18:43:00.000 \n",
+ " 2818 Palomino Trail in Austin (TX) \n",
+ " Stray \n",
+ " Normal \n",
+ " Dog \n",
+ " Intact Male \n",
+ " 11 months \n",
+ " Basenji Mix \n",
+ " Sable/White \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " A665644 \n",
+ " NaN \n",
+ " 2013-10-21T07:59:00.000 \n",
+ " 2013-10-21T07:59:00.000 \n",
+ " Austin (TX) \n",
+ " Stray \n",
+ " Sick \n",
+ " Cat \n",
+ " Intact Female \n",
+ " 4 weeks \n",
+ " Domestic Shorthair Mix \n",
+ " Calico \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " A857105 \n",
+ " Johnny Ringo \n",
+ " 2022-05-12T00:23:00.000 \n",
+ " 2022-05-12T00:23:00.000 \n",
+ " 4404 Sarasota Drive in Austin (TX) \n",
+ " Public Assist \n",
+ " Normal \n",
+ " Cat \n",
+ " Neutered Male \n",
+ " 2 years \n",
+ " Domestic Shorthair \n",
+ " Orange Tabby \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " animal_id name datetime datetime2 \\\n",
+ "0 A786884 *Brock 2019-01-03T16:19:00.000 2019-01-03T16:19:00.000 \n",
+ "1 A706918 Belle 2015-07-05T12:59:00.000 2015-07-05T12:59:00.000 \n",
+ "2 A724273 Runster 2016-04-14T18:43:00.000 2016-04-14T18:43:00.000 \n",
+ "3 A665644 NaN 2013-10-21T07:59:00.000 2013-10-21T07:59:00.000 \n",
+ "4 A857105 Johnny Ringo 2022-05-12T00:23:00.000 2022-05-12T00:23:00.000 \n",
+ "\n",
+ " found_location intake_type intake_condition \\\n",
+ "0 2501 Magin Meadow Dr in Austin (TX) Stray Normal \n",
+ "1 9409 Bluegrass Dr in Austin (TX) Stray Normal \n",
+ "2 2818 Palomino Trail in Austin (TX) Stray Normal \n",
+ "3 Austin (TX) Stray Sick \n",
+ "4 4404 Sarasota Drive in Austin (TX) Public Assist Normal \n",
+ "\n",
+ " animal_type sex_upon_intake age_upon_intake breed \\\n",
+ "0 Dog Neutered Male 2 years Beagle Mix \n",
+ "1 Dog Spayed Female 8 years English Springer Spaniel \n",
+ "2 Dog Intact Male 11 months Basenji Mix \n",
+ "3 Cat Intact Female 4 weeks Domestic Shorthair Mix \n",
+ "4 Cat Neutered Male 2 years Domestic Shorthair \n",
+ "\n",
+ " color \n",
+ "0 Tricolor \n",
+ "1 White/Liver \n",
+ "2 Sable/White \n",
+ "3 Calico \n",
+ "4 Orange Tabby "
+ ]
+ },
+ "execution_count": 52,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Accessing a CSV from a url\n",
"intakes_url = pd.read_csv('https://data.austintexas.gov/resource/wter-evkm.csv')\n",
@@ -644,9 +2567,159 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
+ "execution_count": 53,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " animal_id \n",
+ " name \n",
+ " datetime \n",
+ " datetime2 \n",
+ " found_location \n",
+ " intake_type \n",
+ " intake_condition \n",
+ " animal_type \n",
+ " sex_upon_intake \n",
+ " age_upon_intake \n",
+ " breed \n",
+ " color \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " A786884 \n",
+ " *Brock \n",
+ " 2019-01-03 16:19:00 \n",
+ " 2019-01-03T16:19:00.000 \n",
+ " 2501 Magin Meadow Dr in Austin (TX) \n",
+ " Stray \n",
+ " Normal \n",
+ " Dog \n",
+ " Neutered Male \n",
+ " 2 years \n",
+ " Beagle Mix \n",
+ " Tricolor \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " A706918 \n",
+ " Belle \n",
+ " 2015-07-05 12:59:00 \n",
+ " 2015-07-05T12:59:00.000 \n",
+ " 9409 Bluegrass Dr in Austin (TX) \n",
+ " Stray \n",
+ " Normal \n",
+ " Dog \n",
+ " Spayed Female \n",
+ " 8 years \n",
+ " English Springer Spaniel \n",
+ " White/Liver \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " A724273 \n",
+ " Runster \n",
+ " 2016-04-14 18:43:00 \n",
+ " 2016-04-14T18:43:00.000 \n",
+ " 2818 Palomino Trail in Austin (TX) \n",
+ " Stray \n",
+ " Normal \n",
+ " Dog \n",
+ " Intact Male \n",
+ " 11 months \n",
+ " Basenji Mix \n",
+ " Sable/White \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " A665644 \n",
+ " NaN \n",
+ " 2013-10-21 07:59:00 \n",
+ " 2013-10-21T07:59:00.000 \n",
+ " Austin (TX) \n",
+ " Stray \n",
+ " Sick \n",
+ " Cat \n",
+ " Intact Female \n",
+ " 4 weeks \n",
+ " Domestic Shorthair Mix \n",
+ " Calico \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " A857105 \n",
+ " Johnny Ringo \n",
+ " 2022-05-12 00:23:00 \n",
+ " 2022-05-12T00:23:00.000 \n",
+ " 4404 Sarasota Drive in Austin (TX) \n",
+ " Public Assist \n",
+ " Normal \n",
+ " Cat \n",
+ " Neutered Male \n",
+ " 2 years \n",
+ " Domestic Shorthair \n",
+ " Orange Tabby \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " animal_id name datetime datetime2 \\\n",
+ "0 A786884 *Brock 2019-01-03 16:19:00 2019-01-03T16:19:00.000 \n",
+ "1 A706918 Belle 2015-07-05 12:59:00 2015-07-05T12:59:00.000 \n",
+ "2 A724273 Runster 2016-04-14 18:43:00 2016-04-14T18:43:00.000 \n",
+ "3 A665644 NaN 2013-10-21 07:59:00 2013-10-21T07:59:00.000 \n",
+ "4 A857105 Johnny Ringo 2022-05-12 00:23:00 2022-05-12T00:23:00.000 \n",
+ "\n",
+ " found_location intake_type intake_condition \\\n",
+ "0 2501 Magin Meadow Dr in Austin (TX) Stray Normal \n",
+ "1 9409 Bluegrass Dr in Austin (TX) Stray Normal \n",
+ "2 2818 Palomino Trail in Austin (TX) Stray Normal \n",
+ "3 Austin (TX) Stray Sick \n",
+ "4 4404 Sarasota Drive in Austin (TX) Public Assist Normal \n",
+ "\n",
+ " animal_type sex_upon_intake age_upon_intake breed \\\n",
+ "0 Dog Neutered Male 2 years Beagle Mix \n",
+ "1 Dog Spayed Female 8 years English Springer Spaniel \n",
+ "2 Dog Intact Male 11 months Basenji Mix \n",
+ "3 Cat Intact Female 4 weeks Domestic Shorthair Mix \n",
+ "4 Cat Neutered Male 2 years Domestic Shorthair \n",
+ "\n",
+ " color \n",
+ "0 Tricolor \n",
+ "1 White/Liver \n",
+ "2 Sable/White \n",
+ "3 Calico \n",
+ "4 Orange Tabby "
+ ]
+ },
+ "execution_count": 53,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Same as the JSON output from this API endpoint, but different levels of detail for dates!\n",
"pd.read_json('https://data.austintexas.gov/resource/wter-evkm.json').head()"
@@ -654,9 +2727,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 54,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(1000, 12)"
+ ]
+ },
+ "execution_count": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# But this is only 1000 rows... website says there's 136K rows!\n",
"intakes_url.shape"
@@ -1478,9 +3562,9 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": "Python (Cohort_Env)",
"language": "python",
- "name": "python3"
+ "name": "cohort_env"
},
"language_info": {
"codemirror_mode": {
@@ -1492,7 +3576,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.5"
+ "version": "3.12.4"
},
"toc": {
"base_numbering": 1,
diff --git a/Phase1/Lectures/10_Plotting_with_Pandas.ipynb b/Phase1/Lectures/10_Plotting_with_Pandas.ipynb
index 387515e..24d99bb 100644
--- a/Phase1/Lectures/10_Plotting_with_Pandas.ipynb
+++ b/Phase1/Lectures/10_Plotting_with_Pandas.ipynb
@@ -31,7 +31,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
@@ -78,12 +78,106 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"metadata": {
"hidden": true,
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " sepal length (cm) \n",
+ " sepal width (cm) \n",
+ " petal length (cm) \n",
+ " petal width (cm) \n",
+ " target \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 5.1 \n",
+ " 3.5 \n",
+ " 1.4 \n",
+ " 0.2 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 4.9 \n",
+ " 3.0 \n",
+ " 1.4 \n",
+ " 0.2 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 4.7 \n",
+ " 3.2 \n",
+ " 1.3 \n",
+ " 0.2 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 4.6 \n",
+ " 3.1 \n",
+ " 1.5 \n",
+ " 0.2 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 5.0 \n",
+ " 3.6 \n",
+ " 1.4 \n",
+ " 0.2 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n",
+ "0 5.1 3.5 1.4 0.2 \n",
+ "1 4.9 3.0 1.4 0.2 \n",
+ "2 4.7 3.2 1.3 0.2 \n",
+ "3 4.6 3.1 1.5 0.2 \n",
+ "4 5.0 3.6 1.4 0.2 \n",
+ "\n",
+ " target \n",
+ "0 0 \n",
+ "1 0 \n",
+ "2 0 \n",
+ "3 0 \n",
+ "4 0 "
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# This iris dataset comes bundled with sklearn\n",
"data = load_iris()\n",
@@ -94,9 +188,24 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "target\n",
+ "0 50\n",
+ "1 50\n",
+ "2 50\n",
+ "Name: count, dtype: int64"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"df_iris['target'].value_counts()"
]
@@ -131,11 +240,105 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {
"hidden": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " sepal length (cm) \n",
+ " sepal width (cm) \n",
+ " petal length (cm) \n",
+ " petal width (cm) \n",
+ " target \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 73 \n",
+ " 6.1 \n",
+ " 2.8 \n",
+ " 4.7 \n",
+ " 1.2 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 18 \n",
+ " 5.7 \n",
+ " 3.8 \n",
+ " 1.7 \n",
+ " 0.3 \n",
+ " 0 \n",
+ " \n",
+ " \n",
+ " 118 \n",
+ " 7.7 \n",
+ " 2.6 \n",
+ " 6.9 \n",
+ " 2.3 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " 78 \n",
+ " 6.0 \n",
+ " 2.9 \n",
+ " 4.5 \n",
+ " 1.5 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " 76 \n",
+ " 6.8 \n",
+ " 2.8 \n",
+ " 4.8 \n",
+ " 1.4 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n",
+ "73 6.1 2.8 4.7 1.2 \n",
+ "18 5.7 3.8 1.7 0.3 \n",
+ "118 7.7 2.6 6.9 2.3 \n",
+ "78 6.0 2.9 4.5 1.5 \n",
+ "76 6.8 2.8 4.8 1.4 \n",
+ "\n",
+ " target \n",
+ "73 1 \n",
+ "18 0 \n",
+ "118 2 \n",
+ "78 1 \n",
+ "76 1 "
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Five random rows of the iris dataset\n",
"df_iris.sample(5, random_state=42)"
@@ -152,11 +355,135 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"metadata": {
"scrolled": false
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " sepal length (cm) \n",
+ " sepal width (cm) \n",
+ " petal length (cm) \n",
+ " petal width (cm) \n",
+ " target \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " count \n",
+ " 150.000000 \n",
+ " 150.000000 \n",
+ " 150.000000 \n",
+ " 150.000000 \n",
+ " 150.000000 \n",
+ " \n",
+ " \n",
+ " mean \n",
+ " 5.843333 \n",
+ " 3.057333 \n",
+ " 3.758000 \n",
+ " 1.199333 \n",
+ " 1.000000 \n",
+ " \n",
+ " \n",
+ " std \n",
+ " 0.828066 \n",
+ " 0.435866 \n",
+ " 1.765298 \n",
+ " 0.762238 \n",
+ " 0.819232 \n",
+ " \n",
+ " \n",
+ " min \n",
+ " 4.300000 \n",
+ " 2.000000 \n",
+ " 1.000000 \n",
+ " 0.100000 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 25% \n",
+ " 5.100000 \n",
+ " 2.800000 \n",
+ " 1.600000 \n",
+ " 0.300000 \n",
+ " 0.000000 \n",
+ " \n",
+ " \n",
+ " 50% \n",
+ " 5.800000 \n",
+ " 3.000000 \n",
+ " 4.350000 \n",
+ " 1.300000 \n",
+ " 1.000000 \n",
+ " \n",
+ " \n",
+ " 75% \n",
+ " 6.400000 \n",
+ " 3.300000 \n",
+ " 5.100000 \n",
+ " 1.800000 \n",
+ " 2.000000 \n",
+ " \n",
+ " \n",
+ " max \n",
+ " 7.900000 \n",
+ " 4.400000 \n",
+ " 6.900000 \n",
+ " 2.500000 \n",
+ " 2.000000 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) \\\n",
+ "count 150.000000 150.000000 150.000000 \n",
+ "mean 5.843333 3.057333 3.758000 \n",
+ "std 0.828066 0.435866 1.765298 \n",
+ "min 4.300000 2.000000 1.000000 \n",
+ "25% 5.100000 2.800000 1.600000 \n",
+ "50% 5.800000 3.000000 4.350000 \n",
+ "75% 6.400000 3.300000 5.100000 \n",
+ "max 7.900000 4.400000 6.900000 \n",
+ "\n",
+ " petal width (cm) target \n",
+ "count 150.000000 150.000000 \n",
+ "mean 1.199333 1.000000 \n",
+ "std 0.762238 0.819232 \n",
+ "min 0.100000 0.000000 \n",
+ "25% 0.300000 0.000000 \n",
+ "50% 1.300000 1.000000 \n",
+ "75% 1.800000 2.000000 \n",
+ "max 2.500000 2.000000 "
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"# Summary statistics of the iris dataset\n",
"df_iris.describe()"
@@ -164,29 +491,296 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"metadata": {
"scrolled": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " sepal length (cm) \n",
+ " sepal width (cm) \n",
+ " petal length (cm) \n",
+ " petal width (cm) \n",
+ " target \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " count \n",
+ " 50.00000 \n",
+ " 50.000000 \n",
+ " 50.000000 \n",
+ " 50.000000 \n",
+ " 50.0 \n",
+ " \n",
+ " \n",
+ " mean \n",
+ " 5.00600 \n",
+ " 3.428000 \n",
+ " 1.462000 \n",
+ " 0.246000 \n",
+ " 0.0 \n",
+ " \n",
+ " \n",
+ " std \n",
+ " 0.35249 \n",
+ " 0.379064 \n",
+ " 0.173664 \n",
+ " 0.105386 \n",
+ " 0.0 \n",
+ " \n",
+ " \n",
+ " min \n",
+ " 4.30000 \n",
+ " 2.300000 \n",
+ " 1.000000 \n",
+ " 0.100000 \n",
+ " 0.0 \n",
+ " \n",
+ " \n",
+ " 25% \n",
+ " 4.80000 \n",
+ " 3.200000 \n",
+ " 1.400000 \n",
+ " 0.200000 \n",
+ " 0.0 \n",
+ " \n",
+ " \n",
+ " 50% \n",
+ " 5.00000 \n",
+ " 3.400000 \n",
+ " 1.500000 \n",
+ " 0.200000 \n",
+ " 0.0 \n",
+ " \n",
+ " \n",
+ " 75% \n",
+ " 5.20000 \n",
+ " 3.675000 \n",
+ " 1.575000 \n",
+ " 0.300000 \n",
+ " 0.0 \n",
+ " \n",
+ " \n",
+ " max \n",
+ " 5.80000 \n",
+ " 4.400000 \n",
+ " 1.900000 \n",
+ " 0.600000 \n",
+ " 0.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) \\\n",
+ "count 50.00000 50.000000 50.000000 \n",
+ "mean 5.00600 3.428000 1.462000 \n",
+ "std 0.35249 0.379064 0.173664 \n",
+ "min 4.30000 2.300000 1.000000 \n",
+ "25% 4.80000 3.200000 1.400000 \n",
+ "50% 5.00000 3.400000 1.500000 \n",
+ "75% 5.20000 3.675000 1.575000 \n",
+ "max 5.80000 4.400000 1.900000 \n",
+ "\n",
+ " petal width (cm) target \n",
+ "count 50.000000 50.0 \n",
+ "mean 0.246000 0.0 \n",
+ "std 0.105386 0.0 \n",
+ "min 0.100000 0.0 \n",
+ "25% 0.200000 0.0 \n",
+ "50% 0.200000 0.0 \n",
+ "75% 0.300000 0.0 \n",
+ "max 0.600000 0.0 "
+ ]
+ },
+ "execution_count": 6,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"df_iris.loc[df_iris['target'] == 0].describe()"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " sepal length (cm) \n",
+ " sepal width (cm) \n",
+ " petal length (cm) \n",
+ " petal width (cm) \n",
+ " target \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " count \n",
+ " 50.000000 \n",
+ " 50.000000 \n",
+ " 50.000000 \n",
+ " 50.000000 \n",
+ " 50.0 \n",
+ " \n",
+ " \n",
+ " mean \n",
+ " 5.936000 \n",
+ " 2.770000 \n",
+ " 4.260000 \n",
+ " 1.326000 \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " std \n",
+ " 0.516171 \n",
+ " 0.313798 \n",
+ " 0.469911 \n",
+ " 0.197753 \n",
+ " 0.0 \n",
+ " \n",
+ " \n",
+ " min \n",
+ " 4.900000 \n",
+ " 2.000000 \n",
+ " 3.000000 \n",
+ " 1.000000 \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 25% \n",
+ " 5.600000 \n",
+ " 2.525000 \n",
+ " 4.000000 \n",
+ " 1.200000 \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 50% \n",
+ " 5.900000 \n",
+ " 2.800000 \n",
+ " 4.350000 \n",
+ " 1.300000 \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 75% \n",
+ " 6.300000 \n",
+ " 3.000000 \n",
+ " 4.600000 \n",
+ " 1.500000 \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " max \n",
+ " 7.000000 \n",
+ " 3.400000 \n",
+ " 5.100000 \n",
+ " 1.800000 \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) \\\n",
+ "count 50.000000 50.000000 50.000000 \n",
+ "mean 5.936000 2.770000 4.260000 \n",
+ "std 0.516171 0.313798 0.469911 \n",
+ "min 4.900000 2.000000 3.000000 \n",
+ "25% 5.600000 2.525000 4.000000 \n",
+ "50% 5.900000 2.800000 4.350000 \n",
+ "75% 6.300000 3.000000 4.600000 \n",
+ "max 7.000000 3.400000 5.100000 \n",
+ "\n",
+ " petal width (cm) target \n",
+ "count 50.000000 50.0 \n",
+ "mean 1.326000 1.0 \n",
+ "std 0.197753 0.0 \n",
+ "min 1.000000 1.0 \n",
+ "25% 1.200000 1.0 \n",
+ "50% 1.300000 1.0 \n",
+ "75% 1.500000 1.0 \n",
+ "max 1.800000 1.0 "
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"df_iris.loc[df_iris['target'] == 1].describe()"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 150 entries, 0 to 149\n",
+ "Data columns (total 5 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 sepal length (cm) 150 non-null float64\n",
+ " 1 sepal width (cm) 150 non-null float64\n",
+ " 2 petal length (cm) 150 non-null float64\n",
+ " 3 petal width (cm) 150 non-null float64\n",
+ " 4 target 150 non-null int32 \n",
+ "dtypes: float64(4), int32(1)\n",
+ "memory usage: 5.4 KB\n"
+ ]
+ }
+ ],
"source": [
"df_iris.info()"
]
@@ -202,11 +796,22 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {
"hidden": true
},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqYAAAHUCAYAAADoeerIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACl5UlEQVR4nOzdd3xT5fcH8M/NHm3TJk33ZJe990aWDEFxgDLdon4F/am4EEUBFUERAReKE1TEwZKNCigIsjd075W02eP5/VEbCc2Epk3Leb9efb3gPvfmnqRpenrvc87DMcYYCCGEEEIIqWe8+g6AEEIIIYQQgBJTQgghhBASJCgxJYQQQgghQYESU0IIIYQQEhQoMSWEEEIIIUGBElNCCCGEEBIUKDElhBBCCCFBgRJTQgghhBASFCgxJYQQQgghQYES00bo008/Bcdxji+BQICEhARMnz4dOTk5fj/eV199haVLl15XTAMHDsTAgQN92q9t27bXda5A2rRpE15++WWXYxzH4dFHH63bgPxw+vRpTJ48GU2aNIFEIkFkZCQ6d+6MRx99FFqttr7DAwC8/PLL4DjO5/2Ki4vrICr/nTp1Ci+//DLS09NrjF3ve7y0tBR33XUXoqKiwHEcxo0bd+2BenD154i7r5SUFADAtGnTEBISEpBYapvFYsGqVavQrVs3KJVKyGQyJCcn45ZbbsEPP/xQ3+EhPT0dHMfh008/re9QXEpPT8eoUaOgVCrBcRyeeOIJt/umpKS4fe9UVlYC+O+95urnhdx4BPUdAAmc1atXo1WrVjAYDNi7dy8WLFiAPXv24Pjx45DL5T4/zldffYUTJ054/PC5UWzatAnLly93m5wGqyNHjqBPnz5IS0vDSy+9hJSUFBQXF+Po0aP45ptv8NRTTyEsLKy+w2w0Tp06hXnz5mHgwIGOxK22vPrqq/jhhx/wySefoGnTplAqlbX6+NVGjRqF/fv3O23r1asXJkyYgCeffNKxTSwWB+T8gTR58mSsX78eTzzxBObNmwexWIxLly5hy5Yt2Lp1K8aPH1+v8cXGxmL//v1o2rRpvcbhzqxZs/Dnn3/ik08+QUxMDGJjYz3u36dPH7z11ls1tstkskCFSBowSkwbsbZt26Jr164AgEGDBsFms+HVV1/Fhg0bcPfdd9dzdKQuLV26FDweD7t370ZoaKhj+4QJE/Dqq6+CMVaP0RF/nDhxAk2bNq21n2HGGIxGI6RSqdN2tVoNtVpdY//o6Gj07NmzVs5dzWazwWq11kmSe/nyZaxduxYvvfQS5s2b59g+ZMgQ3H///bDb7QGPwRuxWFzrr3FtOnHiBLp37+7z1frw8PCgfj7+0uv1lFQHEN3Kv4FUfzBkZGQAqPqF9P7776Njx46QSqWIiIjAhAkTcOnSJccxAwcOxMaNG5GRkeF0C6bavHnz0KNHDyiVSoSFhaFz5874+OOPA57orF27Fr169YJcLkdISAiGDx+OI0eOOO1TfWvxwoULuPnmmxESEoLExEQ8+eSTMJlMTvtmZ2djwoQJCA0NRXh4OO6++24cPHjQ6XbatGnTsHz5cgBwei2uvv30+eefIy0tDTKZDB06dMAvv/zi8bkUFRVBJBLhxRdfrDF25swZcByHd999F0DVB+JTTz2F1NRUSCQSKJVKdO3aFV9//bXHc5SUlCAsLMztrdarb59v374dQ4YMQVhYGGQyGfr06YMdO3Y47VN9O/3IkSO49dZbERYWBoVCgXvuuQdFRUVO+65duxbDhg1DbGwspFIp0tLS8Oyzz0Kn03mM+3odOnQIY8eOhVKphEQiQadOnbBu3TqnfapvI+7atQsPP/wwIiMjoVKpcOuttyI3N9dpX5PJhCeffBIxMTGQyWTo378//v77b6SkpGDatGmOx7v99tsBVP1BWP0+ufq27MGDB9GvXz/IZDI0adIECxcu9JgUVd/e3b59O06fPu143N27dwOousX/yCOPID4+HiKRCE2aNMHzzz9f471ePeVk5cqVSEtLg1gsxmeffXYNr65r3n7eqp/HG2+8gfnz5yM1NRVisRi7du0C4Nv3DADy8/Px4IMPIiEhASKRCKmpqZg3bx6sVqvH+EpKSgDA7VU+Hu+/X4u7d+8Gx3H44osvMHv2bMTExEAqlWLAgAE1Pm/8iT0nJwcPPPAAEhMTIRKJEBcXhwkTJqCgoMDpNbr6PXP+/HlMmjQJUVFREIvFSEtLc3wmVbPb7Zg/fz5atmwJqVSK8PBwtG/fHu+8847H1wUAMjMzcc899zg9/uLFix3vy+rX48KFC9i8ebPbz8Da8sknn6BDhw6Oz7rx48fj9OnTjvGNGzeC4zgcPHjQse37778Hx3EYNWqU02O1b98et912m+P/vvz+A/6berN371707t0bMpkMM2bMAADs3LkTAwcOhEqlglQqRVJSEm677Tbo9fpAvBw3DkYandWrVzMA7ODBg07b33nnHQaAffDBB4wxxu6//34mFArZk08+ybZs2cK++uor1qpVKxYdHc3y8/MZY4ydPHmS9enTh8XExLD9+/c7vqpNmzaNffzxx2zbtm1s27Zt7NVXX2VSqZTNmzfP6dwDBgxgAwYM8Br7gAEDWJs2bTzu89prrzGO49iMGTPYL7/8wtavX8969erF5HI5O3nypGO/qVOnMpFIxNLS0thbb73Ftm/fzl566SXGcZxTfJWVlaxZs2ZMqVSy5cuXs61bt7JZs2ax1NRUBoCtXr2aMcbYhQsX2IQJExgAp9fCaDQyxhgDwFJSUlj37t3ZunXr2KZNm9jAgQOZQCBgFy9e9Picxo8fzxITE5nNZnPa/vTTTzORSMSKi4sZY4w9+OCDTCaTsbfffpvt2rWL/fLLL2zhwoVs2bJlHh9//vz5DACbOHEi2717N9Pr9W73/fzzzxnHcWzcuHFs/fr17Oeff2ajR49mfD6fbd++3bHf3LlzGQCWnJzM/u///o9t3bqVvf3220wul7NOnToxs9ns2PfVV19lS5YsYRs3bmS7d+9mK1euZKmpqWzQoEFO565+TG+q9ysqKnK7z86dO5lIJGL9+vVja9euZVu2bGHTpk1z+p4y9t/PS5MmTdhjjz3Gtm7dyj766CMWERFRI76JEycyHo/Hnn32Wfbrr7+ypUuXssTERKZQKNjUqVMZY4wVFhay119/nQFgy5cvd7xPCgsLGWNV73GVSsWaN2/OVq5cybZt28YeeeQRBoB99tlnbp+P0Whk+/fvZ506dWJNmjRxPK5Go2EGg4G1b9+eyeVy9tZbb7Fff/2Vvfjii0wgELCbb77Z6XEAsPj4eNa+fXv21VdfsZ07d7ITJ054fc2rj505c6bLMV9/3i5fvuyIYdCgQey7775jv/76K7t8+bLP37O8vDyWmJjIkpOT2apVq9j27dvZq6++ysRiMZs2bZrH51BZWcnCw8NZTEwMW7VqFbt8+bLbfXft2sUAsMTERHbLLbewn3/+mX3xxResWbNmLCwszOnn2tfYs7OzWWxsLIuMjGRvv/022759O1u7di2bMWMGO336tNNrdOVxJ0+eZAqFgrVr146tWbOG/frrr+zJJ59kPB6Pvfzyy479FixYwPh8Pps7dy7bsWMH27JlC1u6dKnTPq4UFhay+Ph4plar2cqVK9mWLVvYo48+ygCwhx9+mDHGmEajYfv372cxMTGsT58+NT4DXUlOTmY333wzs1gsTl9XftZV/wxe+b2o/hmaOHEi27hxI1uzZg1r0qQJUygU7Ny5c4wxxioqKphQKGSvv/6647iHHnqISaVSJpfLHZ9BBQUFjOM49v777zv28+X3H2NVP69KpZIlJiayZcuWsV27drE9e/awy5cvM4lEwoYOHco2bNjAdu/ezb788ks2efJkVlZW5vG1Jp5RYtoIVf+QHzhwgFksFlZRUcF++eUXplarWWhoKMvPz2f79+9nANjixYudjs3KymJSqZQ9/fTTjm2jRo1iycnJXs9rs9mYxWJhr7zyClOpVMxutzvGaisxzczMZAKBgD322GNO2ysqKlhMTAy74447HNumTp3KALB169Y57XvzzTezli1bOv6/fPlyBoBt3rzZab8HH3ywxi+HmTNnuk2cALDo6Gim1Wod2/Lz8xmPx2MLFixw/6QZYz/99BMDwH799VfHNqvVyuLi4thtt93m2Na2bVs2btw4j4/litFoZOPGjWMAGADG5/NZp06d2PPPP+9ImBhjTKfTMaVSycaMGeN0vM1mYx06dGDdu3d3bKtODmfNmuW075dffskAsC+++MJlLHa7nVksFrZnzx4GgB09erTGY3rjS2LaqlUr1qlTJ2axWJy2jx49msXGxjp+MVb/vDzyyCNO+73xxhsMAMvLy2OMVSUGANgzzzzjtN/XX3/NADgSU8YY+/bbbxkAtmvXrhpxDRgwgAFgf/75p9P21q1bs+HDh3t97q5+RlauXOnyvb5o0aIa7ysATKFQsNLSUq/nupq3xNSXn7fqpKtp06ZOf7ww5vv37MEHH2QhISEsIyPDab+33nqLAXD6A9WVjRs3ssjISMfPg0qlYrfffjv76aefnParTkw7d+7s9HmWnp7OhEIhu++++/yOfcaMGUwoFLJTp065jc9VYjp8+HCWkJDANBqN076PPvook0gkju/n6NGjWceOHT0+f1eeffZZl+/Lhx9+mHEcx86ePevYlpyczEaNGuXT4yYnJzte5yu/nn/+ecc+VyemZWVlTCqV1vijKjMzk4nFYjZp0iTHtr59+7LBgwc7/t+sWTP2f//3f4zH47E9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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"# Now, let's plot two variables from the iris dataset\n",
"fig, ax = plt.subplots(figsize=(8, 5))\n",
@@ -1528,9 +2133,9 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": "Python (Cohort_Env)",
"language": "python",
- "name": "python3"
+ "name": "cohort_env"
},
"language_info": {
"codemirror_mode": {
@@ -1542,7 +2147,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.5"
+ "version": "3.12.4"
},
"toc": {
"base_numbering": 1,
diff --git a/Phase1/Lectures/14_P1_CodeChallenge_Review.ipynb b/Phase1/Lectures/14_P1_CodeChallenge_Review.ipynb
index 2d1c942..0e02365 100644
--- a/Phase1/Lectures/14_P1_CodeChallenge_Review.ipynb
+++ b/Phase1/Lectures/14_P1_CodeChallenge_Review.ipynb
@@ -23,7 +23,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
@@ -51,11 +51,12 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
- "# Before anything else - need to import pandas!\n"
+ "# Before anything else - need to import pandas!\n",
+ "import pandas as pd\n"
]
},
{
@@ -840,9 +841,9 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Python (learn-env)",
+ "display_name": "Python (Cohort_Env)",
"language": "python",
- "name": "learn-env"
+ "name": "cohort_env"
},
"language_info": {
"codemirror_mode": {
@@ -854,7 +855,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.5"
+ "version": "3.12.4"
}
},
"nbformat": 4,
diff --git a/Phase1/anotherfile.txt b/Phase1/anotherfile.txt
new file mode 100644
index 0000000..e69de29
diff --git a/Phase1/new_file.txt b/Phase1/new_file.txt
new file mode 100644
index 0000000..4399a58
--- /dev/null
+++ b/Phase1/new_file.txt
@@ -0,0 +1 @@
+some text here
diff --git a/Phase2/dsc-getting-started-sql-intro b/Phase2/dsc-getting-started-sql-intro
new file mode 160000
index 0000000..a3b451b
--- /dev/null
+++ b/Phase2/dsc-getting-started-sql-intro
@@ -0,0 +1 @@
+Subproject commit a3b451b68ccfe93d4dbc45e506c74464796489e5
diff --git a/Phase2/dsc-intro-to-sqlite b/Phase2/dsc-intro-to-sqlite
new file mode 160000
index 0000000..3b58c42
--- /dev/null
+++ b/Phase2/dsc-intro-to-sqlite
@@ -0,0 +1 @@
+Subproject commit 3b58c420d3633dbdc7e272e0333a4d8274d54138
diff --git a/Phase2/dsc-selecting-data-v2-4 b/Phase2/dsc-selecting-data-v2-4
new file mode 160000
index 0000000..271be54
--- /dev/null
+++ b/Phase2/dsc-selecting-data-v2-4
@@ -0,0 +1 @@
+Subproject commit 271be54ca54a0a60a87262f95bc2d8978388b8b1
diff --git a/Phase2/dsc-sql-lab b/Phase2/dsc-sql-lab
new file mode 160000
index 0000000..05b901a
--- /dev/null
+++ b/Phase2/dsc-sql-lab
@@ -0,0 +1 @@
+Subproject commit 05b901addcfc01eb702a3f2be53ebd3c274eb2ee