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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
agesexcptrestbpscholfbsrestecgthalachexangoldpeakslopecathaltarget
063131452331015002.30011
137121302500118703.50021
241011302040017201.42021
356111202360117800.82021
457001203540116310.62021
.............................................
29857001402410112310.21030
29945131102640113201.21030
30068101441931114103.41230
30157101301310111511.21130
30257011302360017400.01120
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
agesexcptrestbpscholfbsrestecgthalachexangoldpeakslopecathaltarget
063131452331015002.30011
137121302500118703.50021
241011302040017201.42021
356111202360117800.82021
457001203540116310.62021
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
agesexcptrestbpscholfbsrestecgthalachexangoldpeakslopecathaltarget
29857001402410112310.21030
29945131102640113201.21030
30068101441931114103.41230
30157101301310111511.21130
30257011302360017400.01120
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
agesexcptrestbpscholfbsrestecgthalachexangoldpeakslopecathaltarget
count303.000000303.000000303.000000303.000000303.000000303.000000303.000000303.000000303.000000303.000000303.000000303.000000303.000000303.000000
mean54.3663370.6831680.966997131.623762246.2640260.1485150.528053149.6468650.3267331.0396041.3993400.7293732.3135310.544554
std9.0821010.4660111.03205217.53814351.8307510.3561980.52586022.9051610.4697941.1610750.6162261.0226060.6122770.498835
min29.0000000.0000000.00000094.000000126.0000000.0000000.00000071.0000000.0000000.0000000.0000000.0000000.0000000.000000
25%47.5000000.0000000.000000120.000000211.0000000.0000000.000000133.5000000.0000000.0000001.0000000.0000002.0000000.000000
50%55.0000001.0000001.000000130.000000240.0000000.0000001.000000153.0000000.0000000.8000001.0000000.0000002.0000001.000000
75%61.0000001.0000002.000000140.000000274.5000000.0000001.000000166.0000001.0000001.6000002.0000001.0000003.0000001.000000
max77.0000001.0000003.000000200.000000564.0000001.0000002.000000202.0000001.0000006.2000002.0000004.0000003.0000001.000000
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
animal_idnamedatetimedatetime2found_locationintake_typeintake_conditionanimal_typesex_upon_intakeage_upon_intakebreedcolor
0A786884*Brock2019-01-03T16:19:00.0002019-01-03T16:19:00.0002501 Magin Meadow Dr in Austin (TX)StrayNormalDogNeutered Male2 yearsBeagle MixTricolor
1A706918Belle2015-07-05T12:59:00.0002015-07-05T12:59:00.0009409 Bluegrass Dr in Austin (TX)StrayNormalDogSpayed Female8 yearsEnglish Springer SpanielWhite/Liver
2A724273Runster2016-04-14T18:43:00.0002016-04-14T18:43:00.0002818 Palomino Trail in Austin (TX)StrayNormalDogIntact Male11 monthsBasenji MixSable/White
3A665644NaN2013-10-21T07:59:00.0002013-10-21T07:59:00.000Austin (TX)StraySickCatIntact Female4 weeksDomestic Shorthair MixCalico
4A857105Johnny Ringo2022-05-12T00:23:00.0002022-05-12T00:23:00.0004404 Sarasota Drive in Austin (TX)Public AssistNormalCatNeutered Male2 yearsDomestic ShorthairOrange Tabby
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
animal_idnamedatetimedatetime2found_locationintake_typeintake_conditionanimal_typesex_upon_intakeage_upon_intakebreedcolor
0A786884*Brock2019-01-03 16:19:002019-01-03T16:19:00.0002501 Magin Meadow Dr in Austin (TX)StrayNormalDogNeutered Male2 yearsBeagle MixTricolor
1A706918Belle2015-07-05 12:59:002015-07-05T12:59:00.0009409 Bluegrass Dr in Austin (TX)StrayNormalDogSpayed Female8 yearsEnglish Springer SpanielWhite/Liver
2A724273Runster2016-04-14 18:43:002016-04-14T18:43:00.0002818 Palomino Trail in Austin (TX)StrayNormalDogIntact Male11 monthsBasenji MixSable/White
3A665644NaN2013-10-21 07:59:002013-10-21T07:59:00.000Austin (TX)StraySickCatIntact Female4 weeksDomestic Shorthair MixCalico
4A857105Johnny Ringo2022-05-12 00:23:002022-05-12T00:23:00.0004404 Sarasota Drive in Austin (TX)Public AssistNormalCatNeutered Male2 yearsDomestic ShorthairOrange Tabby
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
05.13.51.40.20
14.93.01.40.20
24.73.21.30.20
34.63.11.50.20
45.03.61.40.20
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
736.12.84.71.21
185.73.81.70.30
1187.72.66.92.32
786.02.94.51.51
766.82.84.81.41
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
count150.000000150.000000150.000000150.000000150.000000
mean5.8433333.0573333.7580001.1993331.000000
std0.8280660.4358661.7652980.7622380.819232
min4.3000002.0000001.0000000.1000000.000000
25%5.1000002.8000001.6000000.3000000.000000
50%5.8000003.0000004.3500001.3000001.000000
75%6.4000003.3000005.1000001.8000002.000000
max7.9000004.4000006.9000002.5000002.000000
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
count50.0000050.00000050.00000050.00000050.0
mean5.006003.4280001.4620000.2460000.0
std0.352490.3790640.1736640.1053860.0
min4.300002.3000001.0000000.1000000.0
25%4.800003.2000001.4000000.2000000.0
50%5.000003.4000001.5000000.2000000.0
75%5.200003.6750001.5750000.3000000.0
max5.800004.4000001.9000000.6000000.0
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
count50.00000050.00000050.00000050.00000050.0
mean5.9360002.7700004.2600001.3260001.0
std0.5161710.3137980.4699110.1977530.0
min4.9000002.0000003.0000001.0000001.0
25%5.6000002.5250004.0000001.2000001.0
50%5.9000002.8000004.3500001.3000001.0
75%6.3000003.0000004.6000001.5000001.0
max7.0000003.4000005.1000001.8000001.0
\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": "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y479FixYwPh8Pps7dy7bsWMH27JlC1u6dKnTPq4UFhay+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