From 08b59dab18a82285c17f4a89f6beed0a1daaf0d0 Mon Sep 17 00:00:00 2001 From: githubtemp5 Date: Sat, 17 Aug 2024 23:40:13 +0100 Subject: [PATCH] microsoft link exercises https://learn.microsoft.com/en-gb/training/modules/explore-analyze-data-with-python/ --- 2-Regression/2-Data/01-numpy-and-pandas.ipynb | 2728 +++++++++++++++++ 2-Regression/2-Data/02-visualize-data.ipynb | 902 ++++++ 2-Regression/2-Data/03-real-world-data.ipynb | 620 ++++ 2-Regression/2-Data/grades.csv | 25 + 2-Regression/2-Data/notebook.ipynb | 510 ++- 5 files changed, 4767 insertions(+), 18 deletions(-) create mode 100644 2-Regression/2-Data/01-numpy-and-pandas.ipynb create mode 100644 2-Regression/2-Data/02-visualize-data.ipynb create mode 100644 2-Regression/2-Data/03-real-world-data.ipynb create mode 100644 2-Regression/2-Data/grades.csv diff --git a/2-Regression/2-Data/01-numpy-and-pandas.ipynb b/2-Regression/2-Data/01-numpy-and-pandas.ipynb new file mode 100644 index 000000000..fc99c0ca2 --- /dev/null +++ b/2-Regression/2-Data/01-numpy-and-pandas.ipynb @@ -0,0 +1,2728 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exploring Data with Python\n", + "\n", + "A significant part of a a data scientist's role is to explore, analyze, and visualize data. There are many tools and programming languages that they can use to do this. One of the most popular approaches is to use Jupyter notebooks (like this one) and Python.\n", + "\n", + "Python is a flexible programming language that's used in a wide range of scenarios, from web applications to device programming. It's extremely popular in the data-science and machine-learning communities because of the many packages it supports for data analysis and visualization.\n", + "\n", + "In this notebook, we'll explore some of these packages and apply basic techniques to analyze data. This isn't intended to be a comprehensive Python programming exercise or even a deep dive into data analysis. Rather, it's intended as a crash course in some of the common ways in which data scientists can use Python to work with data.\n", + "\n", + "> **Note**: If you've never used the Jupyter Notebooks environment before, there are a few things of which you should be aware:\n", + "> \n", + "> - Notebooks are made up of *cells*. Some cells (like this one) contain *markdown* text, while others (like the one following this one) contain code.\n", + "> - You can run each code cell by using the **► Run** button. The **► Run** button shows up when you hover over the cell.\n", + "> - The output from each code cell is displayed immediately below the cell.\n", + "> - Even though you can run the code cells individually, some variables the code uses are global to the notebook. That means that you should run all of the code cells **in order**. There might be dependencies between code cells, so if you skip a cell, subsequent cells might not run correctly.\n", + "> \n", + "\n", + "\n", + "## Exploring data arrays with NumPy\n", + "\n", + "Let's start by looking at some simple data.\n", + "\n", + "Suppose a college professor takes a sample of student grades from a class to analyze.\n", + "\n", + "Run the code in the following cell by selecting the **► Run** button to see the data." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[50, 50, 47, 97, 49, 3, 53, 42, 26, 74, 82, 62, 37, 15, 70, 27, 36, 35, 48, 52, 63, 64]\n" + ] + } + ], + "source": [ + "data = [50,50,47,97,49,3,53,42,26,74,82,62,37,15,70,27,36,35,48,52,63,64]\n", + "print(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The data has been loaded into a Python **list** structure, which is a good data type for general data manipulation, but it's not optimized for numeric analysis. For that, we're going to use the **NumPy** package, which includes specific data types and functions for working with *Num*bers in *Py*thon.\n", + "\n", + "Run the following cell to load the data into a NumPy **array**." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[50 50 47 97 49 3 53 42 26 74 82 62 37 15 70 27 36 35 48 52 63 64]\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "grades = np.array(data)\n", + "print(grades)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just in case you're wondering about the differences between a **list** and a NumPy **array**, let's compare how these data types behave when we use them in an expression that multiplies them by two." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " x 2: [50, 50, 47, 97, 49, 3, 53, 42, 26, 74, 82, 62, 37, 15, 70, 27, 36, 35, 48, 52, 63, 64, 50, 50, 47, 97, 49, 3, 53, 42, 26, 74, 82, 62, 37, 15, 70, 27, 36, 35, 48, 52, 63, 64]\n", + "---\n", + " x 2: [100 100 94 194 98 6 106 84 52 148 164 124 74 30 140 54 72 70\n", + " 96 104 126 128]\n" + ] + } + ], + "source": [ + "print (type(data),'x 2:', data * 2)\n", + "print('---')\n", + "print (type(grades),'x 2:', grades * 2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that multiplying a list by two creates a new list of twice the length with the original sequence of list elements repeated. Multiplying a NumPy array, on the other hand, performs an element-wise calculation in which the array behaves like a *vector*, so we end up with an array of the same size in which each element has been multiplied by two.\n", + "\n", + "The key takeaway from this is that NumPy arrays are specifically designed to support mathematical operations on numeric data, which makes them more useful for data analysis than a generic list.\n", + "\n", + "You might have spotted that the class type for the preceding NumPy array is **numpy.ndarray**. The **nd** indicates that this is a structure that can consist of multiple *dimensions*. (It can have *n* dimensions.) Our specific instance has a single dimension of student grades.\n", + "\n", + "Run the following cell to view the **shape** of the array." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(22,)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grades.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The shape confirms that this array has only one dimension, which contains 22 elements. (There are 22 grades in the original list.) You can access the individual elements in the array by their zero-based ordinal position. Let's get the first element (the one in position 0)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.int64(50)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grades[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that you know your way around a NumPy array, it's time to perform some analysis of the grades data.\n", + "\n", + "You can apply aggregations across the elements in the array, so let's find the simple average grade (in other words, the *mean* grade value)." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(49.18181818181818)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grades.mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So the mean grade is just around 50, more or less in the middle of the possible range from 0 to 100.\n", + "\n", + "Let's add a second set of data for the same students. This time, we'll record the typical number of hours per week they devoted to studying." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[10. , 11.5 , 9. , 16. , 9.25, 1. , 11.5 , 9. , 8.5 ,\n", + " 14.5 , 15.5 , 13.75, 9. , 8. , 15.5 , 8. , 9. , 6. ,\n", + " 10. , 12. , 12.5 , 12. ],\n", + " [50. , 50. , 47. , 97. , 49. , 3. , 53. , 42. , 26. ,\n", + " 74. , 82. , 62. , 37. , 15. , 70. , 27. , 36. , 35. ,\n", + " 48. , 52. , 63. , 64. ]])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Define an array of study hours\n", + "study_hours = [10.0,11.5,9.0,16.0,9.25,1.0,11.5,9.0,8.5,14.5,15.5,\n", + " 13.75,9.0,8.0,15.5,8.0,9.0,6.0,10.0,12.0,12.5,12.0]\n", + "\n", + "# Create a 2D array (an array of arrays)\n", + "student_data = np.array([study_hours, grades])\n", + "\n", + "# display the array\n", + "student_data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now the data consists of a two-dimensional array; an array of arrays. Let's look at its shape." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2, 22)" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Show shape of 2D array\n", + "student_data.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The **student_data** array contains two elements, each of which is an array containing 22 elements.\n", + "\n", + "To navigate this structure, you need to specify the position of each element in the hierarchy. So to find the first value in the first array (which contains the study hours data), you can use the following code." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(10.0)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Show the first element of the first element\n", + "student_data[0][0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now you have a multidimensional array containing both the student's study time and grade information, which you can use to compare study time to a student's grade." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average study hours: 10.52\n", + "Average grade: 49.18\n" + ] + } + ], + "source": [ + "# Get the mean value of each sub-array\n", + "avg_study = student_data[0].mean()\n", + "avg_grade = student_data[1].mean()\n", + "\n", + "print('Average study hours: {:.2f}\\nAverage grade: {:.2f}'.format(avg_study, avg_grade))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exploring tabular data with Pandas\n", + "\n", + "NumPy provides a lot of the functionality and tools you need to work with numbers, such as arrays of numeric values. However, when you start to deal with two-dimensional tables of data, the **Pandas** package offers a more convenient structure to work with: the **DataFrame**.\n", + "\n", + "Run the following cell to import the Pandas library and create a DataFrame with three columns. The first column is a list of student names, and the second and third columns are the NumPy arrays containing the study time and grade data." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameStudyHoursGrade
0Dan10.0050.0
1Joann11.5050.0
2Pedro9.0047.0
3Rosie16.0097.0
4Ethan9.2549.0
5Vicky1.003.0
6Frederic11.5053.0
7Jimmie9.0042.0
8Rhonda8.5026.0
9Giovanni14.5074.0
10Francesca15.5082.0
11Rajab13.7562.0
12Naiyana9.0037.0
13Kian8.0015.0
14Jenny15.5070.0
15Jakeem8.0027.0
16Helena9.0036.0
17Ismat6.0035.0
18Anila10.0048.0
19Skye12.0052.0
20Daniel12.5063.0
21Aisha12.0064.0
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "0 Dan 10.00 50.0\n", + "1 Joann 11.50 50.0\n", + "2 Pedro 9.00 47.0\n", + "3 Rosie 16.00 97.0\n", + "4 Ethan 9.25 49.0\n", + "5 Vicky 1.00 3.0\n", + "6 Frederic 11.50 53.0\n", + "7 Jimmie 9.00 42.0\n", + "8 Rhonda 8.50 26.0\n", + "9 Giovanni 14.50 74.0\n", + "10 Francesca 15.50 82.0\n", + "11 Rajab 13.75 62.0\n", + "12 Naiyana 9.00 37.0\n", + "13 Kian 8.00 15.0\n", + "14 Jenny 15.50 70.0\n", + "15 Jakeem 8.00 27.0\n", + "16 Helena 9.00 36.0\n", + "17 Ismat 6.00 35.0\n", + "18 Anila 10.00 48.0\n", + "19 Skye 12.00 52.0\n", + "20 Daniel 12.50 63.0\n", + "21 Aisha 12.00 64.0" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "df_students = pd.DataFrame({'Name': ['Dan', 'Joann', 'Pedro', 'Rosie', 'Ethan', 'Vicky', 'Frederic', 'Jimmie', \n", + " 'Rhonda', 'Giovanni', 'Francesca', 'Rajab', 'Naiyana', 'Kian', 'Jenny',\n", + " 'Jakeem','Helena','Ismat','Anila','Skye','Daniel','Aisha'],\n", + " 'StudyHours':student_data[0],\n", + " 'Grade':student_data[1]})\n", + "\n", + "df_students " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that in addition to the columns you specified, the DataFrame includes an *index* to uniquely identify each row. We could've specified the index explicitly and assigned any kind of appropriate value (for example, an email address). However, because we didn't specify an index, one has been created with a unique integer value for each row.\n", + "\n", + "### Finding and filtering data in a DataFrame\n", + "\n", + "You can use the DataFrame's **loc** method to retrieve data for a specific index value, like this." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Name Vicky\n", + "StudyHours 1.0\n", + "Grade 3.0\n", + "Name: 5, dtype: object" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the data for index value 5\n", + "df_students.loc[5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can also get the data at a range of index values, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "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", + "
NameStudyHoursGrade
0Dan10.0050.0
1Joann11.5050.0
2Pedro9.0047.0
3Rosie16.0097.0
4Ethan9.2549.0
5Vicky1.003.0
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "0 Dan 10.00 50.0\n", + "1 Joann 11.50 50.0\n", + "2 Pedro 9.00 47.0\n", + "3 Rosie 16.00 97.0\n", + "4 Ethan 9.25 49.0\n", + "5 Vicky 1.00 3.0" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get the rows with index values from 0 to 5\n", + "df_students.loc[0:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In addition to being able to use the **loc** method to find rows based on the index, you can use the **iloc** method to find rows based on their ordinal position in the DataFrame (regardless of the index):" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "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", + "
NameStudyHoursGrade
0Dan10.0050.0
1Joann11.5050.0
2Pedro9.0047.0
3Rosie16.0097.0
4Ethan9.2549.0
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "0 Dan 10.00 50.0\n", + "1 Joann 11.50 50.0\n", + "2 Pedro 9.00 47.0\n", + "3 Rosie 16.00 97.0\n", + "4 Ethan 9.25 49.0" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get data in the first five rows\n", + "df_students.iloc[0:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Look carefully at the `iloc[0:5]` results and compare them to the `loc[0:5]` results you obtained previously. Can you spot the difference?\n", + "\n", + "The **loc** method returned rows with index *label* in the list of values from *0* to *5*, which includes *0*, *1*, *2*, *3*, *4*, and *5* (six rows). However, the **iloc** method returns the rows in the *positions* included in the range 0 to 5. Since integer ranges don't include the upper-bound value, this includes positions *0*, *1*, *2*, *3*, and *4* (five rows).\n", + "\n", + "**iloc** identifies data values in a DataFrame by *position*, which extends beyond rows to columns. So, for example, you can use it to find the values for the columns in positions 1 and 2 in row 0, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "StudyHours 10.0\n", + "Grade 50.0\n", + "Name: 0, dtype: object" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_students.iloc[0,[1,2]]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's return to the **loc** method and see how it works with columns. Remember that you use **loc** to locate data items based on index values rather than positions. In the absence of an explicit index column, the rows in our DataFrame are indexed as integer values, but the columns are identified by name:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(50.0)" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_students.loc[0,'Grade']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's another useful trick. You can use the **loc** method to find indexed rows based on a filtering expression that references named columns other than the index, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameStudyHoursGrade
21Aisha12.064.0
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "21 Aisha 12.0 64.0" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_students.loc[df_students['Name']=='Aisha']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Actually, you don't need to explicitly use the **loc** method to do this. You can simply apply a DataFrame filtering expression, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameStudyHoursGrade
21Aisha12.064.0
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "21 Aisha 12.0 64.0" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_students[df_students['Name']=='Aisha']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And for good measure, you can achieve the same results by using the DataFrame's **query** method, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameStudyHoursGrade
21Aisha12.064.0
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "21 Aisha 12.0 64.0" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_students.query('Name==\"Aisha\"')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The three previous examples underline a confusing truth about working with Pandas. Often, there are multiple ways to achieve the same results. Another example of this is the way you refer to a DataFrame column name. You can specify the column name as a named index value (as in the `df_students['Name']` examples we've seen so far), or you can use the column as a property of the DataFrame, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameStudyHoursGrade
21Aisha12.064.0
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "21 Aisha 12.0 64.0" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_students[df_students.Name == 'Aisha']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Loading a DataFrame from a file\n", + "\n", + "We constructed the DataFrame from some existing arrays. However, in many real-world scenarios, data is loaded from sources such as files. Let's replace the student grades DataFrame with the contents of a text file." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "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", + "
NameStudyHoursGrade
0Dan10.0050.0
1Joann11.5050.0
2Pedro9.0047.0
3Rosie16.0097.0
4Ethan9.2549.0
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "0 Dan 10.00 50.0\n", + "1 Joann 11.50 50.0\n", + "2 Pedro 9.00 47.0\n", + "3 Rosie 16.00 97.0\n", + "4 Ethan 9.25 49.0" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "df_students = pd.read_csv('grades.csv',delimiter=',',header='infer')\n", + "df_students.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The DataFrame's **read_csv** method is used to load data from text files. As you can see in the example code, you can specify options such as the column delimiter and which row (if any) contains column headers. (In this case, the delimiter is a comma and the first row contains the column names. These are the default settings, so we could've omitted the parameters.)\n", + "\n", + "\n", + "### Handling missing values\n", + "\n", + "One of the most common issues data scientists need to deal with is incomplete or missing data. So how would we know that the DataFrame contains missing values? You can use the **isnull** method to identify which individual values are null, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameStudyHoursGrade
0FalseFalseFalse
1FalseFalseFalse
2FalseFalseFalse
3FalseFalseFalse
4FalseFalseFalse
5FalseFalseFalse
6FalseFalseFalse
7FalseFalseFalse
8FalseFalseFalse
9FalseFalseFalse
10FalseFalseFalse
11FalseFalseFalse
12FalseFalseFalse
13FalseFalseFalse
14FalseFalseFalse
15FalseFalseFalse
16FalseFalseFalse
17FalseFalseFalse
18FalseFalseFalse
19FalseFalseFalse
20FalseFalseFalse
21FalseFalseFalse
22FalseFalseTrue
23FalseTrueTrue
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "0 False False False\n", + "1 False False False\n", + "2 False False False\n", + "3 False False False\n", + "4 False False False\n", + "5 False False False\n", + "6 False False False\n", + "7 False False False\n", + "8 False False False\n", + "9 False False False\n", + "10 False False False\n", + "11 False False False\n", + "12 False False False\n", + "13 False False False\n", + "14 False False False\n", + "15 False False False\n", + "16 False False False\n", + "17 False False False\n", + "18 False False False\n", + "19 False False False\n", + "20 False False False\n", + "21 False False False\n", + "22 False False True\n", + "23 False True True" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_students.isnull()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Of course, with a larger DataFrame, it would be inefficient to review all of the rows and columns individually, so we can get the sum of missing values for each column like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Name 0\n", + "StudyHours 1\n", + "Grade 2\n", + "dtype: int64" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_students.isnull().sum()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So now we know that there's one missing **StudyHours** value and two missing **Grade** values.\n", + "\n", + "To see them in context, we can filter the DataFrame to include only rows where any of the columns (axis 1 of the DataFrame) are null." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "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", + "
NameStudyHoursGrade
22Bill8.0NaN
23TedNaNNaN
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "22 Bill 8.0 NaN\n", + "23 Ted NaN NaN" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_students[df_students.isnull().any(axis=1)]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When the DataFrame is retrieved, the missing numeric values show up as **NaN** (*not a number*).\n", + "\n", + "So now that we've found the null values, what can we do about them?\n", + "\n", + "One common approach is to *impute* replacement values. For example, if the number of study hours is missing, we could just assume that the student studied for an average amount of time and replace the missing value with the mean study hours. To do this, we can use the **fillna** method, like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameStudyHoursGrade
0Dan10.00000050.0
1Joann11.50000050.0
2Pedro9.00000047.0
3Rosie16.00000097.0
4Ethan9.25000049.0
5Vicky1.0000003.0
6Frederic11.50000053.0
7Jimmie9.00000042.0
8Rhonda8.50000026.0
9Giovanni14.50000074.0
10Francesca15.50000082.0
11Rajab13.75000062.0
12Naiyana9.00000037.0
13Kian8.00000015.0
14Jenny15.50000070.0
15Jakeem8.00000027.0
16Helena9.00000036.0
17Ismat6.00000035.0
18Anila10.00000048.0
19Skye12.00000052.0
20Daniel12.50000063.0
21Aisha12.00000064.0
22Bill8.000000NaN
23Ted10.413043NaN
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "0 Dan 10.000000 50.0\n", + "1 Joann 11.500000 50.0\n", + "2 Pedro 9.000000 47.0\n", + "3 Rosie 16.000000 97.0\n", + "4 Ethan 9.250000 49.0\n", + "5 Vicky 1.000000 3.0\n", + "6 Frederic 11.500000 53.0\n", + "7 Jimmie 9.000000 42.0\n", + "8 Rhonda 8.500000 26.0\n", + "9 Giovanni 14.500000 74.0\n", + "10 Francesca 15.500000 82.0\n", + "11 Rajab 13.750000 62.0\n", + "12 Naiyana 9.000000 37.0\n", + "13 Kian 8.000000 15.0\n", + "14 Jenny 15.500000 70.0\n", + "15 Jakeem 8.000000 27.0\n", + "16 Helena 9.000000 36.0\n", + "17 Ismat 6.000000 35.0\n", + "18 Anila 10.000000 48.0\n", + "19 Skye 12.000000 52.0\n", + "20 Daniel 12.500000 63.0\n", + "21 Aisha 12.000000 64.0\n", + "22 Bill 8.000000 NaN\n", + "23 Ted 10.413043 NaN" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_students.StudyHours = df_students.StudyHours.fillna(df_students.StudyHours.mean())\n", + "df_students" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively, it might be important to ensure that you only use data you know to be absolutely correct. In this case, you can drop rows or columns that contain null values by using the **dropna** method. For example, we'll remove rows (axis 0 of the DataFrame) where any of the columns contain null values:" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameStudyHoursGrade
0Dan10.0050.0
1Joann11.5050.0
2Pedro9.0047.0
3Rosie16.0097.0
4Ethan9.2549.0
5Vicky1.003.0
6Frederic11.5053.0
7Jimmie9.0042.0
8Rhonda8.5026.0
9Giovanni14.5074.0
10Francesca15.5082.0
11Rajab13.7562.0
12Naiyana9.0037.0
13Kian8.0015.0
14Jenny15.5070.0
15Jakeem8.0027.0
16Helena9.0036.0
17Ismat6.0035.0
18Anila10.0048.0
19Skye12.0052.0
20Daniel12.5063.0
21Aisha12.0064.0
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "0 Dan 10.00 50.0\n", + "1 Joann 11.50 50.0\n", + "2 Pedro 9.00 47.0\n", + "3 Rosie 16.00 97.0\n", + "4 Ethan 9.25 49.0\n", + "5 Vicky 1.00 3.0\n", + "6 Frederic 11.50 53.0\n", + "7 Jimmie 9.00 42.0\n", + "8 Rhonda 8.50 26.0\n", + "9 Giovanni 14.50 74.0\n", + "10 Francesca 15.50 82.0\n", + "11 Rajab 13.75 62.0\n", + "12 Naiyana 9.00 37.0\n", + "13 Kian 8.00 15.0\n", + "14 Jenny 15.50 70.0\n", + "15 Jakeem 8.00 27.0\n", + "16 Helena 9.00 36.0\n", + "17 Ismat 6.00 35.0\n", + "18 Anila 10.00 48.0\n", + "19 Skye 12.00 52.0\n", + "20 Daniel 12.50 63.0\n", + "21 Aisha 12.00 64.0" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_students = df_students.dropna(axis=0, how='any')\n", + "df_students" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Explore data in the DataFrame\n", + "\n", + "Now that we've cleaned up the missing values, we're ready to explore the data in the DataFrame. Let's start by comparing the mean study hours and grades." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average weekly study hours: 10.52\n", + "Average grade: 49.18\n" + ] + } + ], + "source": [ + "# Get the mean study hours using to column name as an index\n", + "mean_study = df_students['StudyHours'].mean()\n", + "\n", + "# Get the mean grade using the column name as a property (just to make the point!)\n", + "mean_grade = df_students.Grade.mean()\n", + "\n", + "# Print the mean study hours and mean grade\n", + "print('Average weekly study hours: {:.2f}\\nAverage grade: {:.2f}'.format(mean_study, mean_grade))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "OK, let's filter the DataFrame to find only the students who studied for more than the average amount of time." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "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", + "
NameStudyHoursGrade
1Joann11.5050.0
3Rosie16.0097.0
6Frederic11.5053.0
9Giovanni14.5074.0
10Francesca15.5082.0
11Rajab13.7562.0
14Jenny15.5070.0
19Skye12.0052.0
20Daniel12.5063.0
21Aisha12.0064.0
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade\n", + "1 Joann 11.50 50.0\n", + "3 Rosie 16.00 97.0\n", + "6 Frederic 11.50 53.0\n", + "9 Giovanni 14.50 74.0\n", + "10 Francesca 15.50 82.0\n", + "11 Rajab 13.75 62.0\n", + "14 Jenny 15.50 70.0\n", + "19 Skye 12.00 52.0\n", + "20 Daniel 12.50 63.0\n", + "21 Aisha 12.00 64.0" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Get students who studied for the mean or more hours\n", + "df_students[df_students.StudyHours > mean_study]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that the filtered result is itself a DataFrame, so you can work with its columns just like any other DataFrame.\n", + "\n", + "For example, let's find the average grade for students who undertook more than the average amount of study time." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(66.7)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# What was their mean grade?\n", + "df_students[df_students.StudyHours > mean_study].Grade.mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's assume that the passing grade for the course is 60.\n", + "\n", + "We can use that information to add a new column to the DataFrame that indicates whether or not each student passed.\n", + "\n", + "First, we'll create a Pandas **Series** containing the pass/fail indicator (True or False), and then we'll concatenate that series as a new column (axis 1) in the DataFrame." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameStudyHoursGradePass
0Dan10.0050.0False
1Joann11.5050.0False
2Pedro9.0047.0False
3Rosie16.0097.0True
4Ethan9.2549.0False
5Vicky1.003.0False
6Frederic11.5053.0False
7Jimmie9.0042.0False
8Rhonda8.5026.0False
9Giovanni14.5074.0True
10Francesca15.5082.0True
11Rajab13.7562.0True
12Naiyana9.0037.0False
13Kian8.0015.0False
14Jenny15.5070.0True
15Jakeem8.0027.0False
16Helena9.0036.0False
17Ismat6.0035.0False
18Anila10.0048.0False
19Skye12.0052.0False
20Daniel12.5063.0True
21Aisha12.0064.0True
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade Pass\n", + "0 Dan 10.00 50.0 False\n", + "1 Joann 11.50 50.0 False\n", + "2 Pedro 9.00 47.0 False\n", + "3 Rosie 16.00 97.0 True\n", + "4 Ethan 9.25 49.0 False\n", + "5 Vicky 1.00 3.0 False\n", + "6 Frederic 11.50 53.0 False\n", + "7 Jimmie 9.00 42.0 False\n", + "8 Rhonda 8.50 26.0 False\n", + "9 Giovanni 14.50 74.0 True\n", + "10 Francesca 15.50 82.0 True\n", + "11 Rajab 13.75 62.0 True\n", + "12 Naiyana 9.00 37.0 False\n", + "13 Kian 8.00 15.0 False\n", + "14 Jenny 15.50 70.0 True\n", + "15 Jakeem 8.00 27.0 False\n", + "16 Helena 9.00 36.0 False\n", + "17 Ismat 6.00 35.0 False\n", + "18 Anila 10.00 48.0 False\n", + "19 Skye 12.00 52.0 False\n", + "20 Daniel 12.50 63.0 True\n", + "21 Aisha 12.00 64.0 True" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "passes = pd.Series(df_students['Grade'] >= 60)\n", + "df_students = pd.concat([df_students, passes.rename(\"Pass\")], axis=1)\n", + "\n", + "df_students" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "DataFrames are designed for tabular data, and you can use them to perform many of the same kinds of data-analytics operations you can do in a relational database, such as grouping and aggregating tables of data.\n", + "\n", + "For example, you can use the **groupby** method to group the student data into groups based on the **Pass** column you added previously and to count the number of names in each group. In other words, you can determine how many students passed and failed." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pass\n", + "False 15\n", + "True 7\n", + "Name: Name, dtype: int64\n" + ] + } + ], + "source": [ + "print(df_students.groupby(df_students.Pass).Name.count())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can aggregate multiple fields in a group using any available aggregation function. For example, you can find the mean study time and grade for the groups of students who passed and failed the course." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " StudyHours Grade\n", + "Pass \n", + "False 8.783333 38.000000\n", + "True 14.250000 73.142857\n" + ] + } + ], + "source": [ + "print(df_students.groupby(df_students.Pass)[['StudyHours', 'Grade']].mean())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "DataFrames are amazingly versatile and make it easy to manipulate data. Many DataFrame operations return a new copy of the DataFrame, so if you want to modify a DataFrame but keep the existing variable, you need to assign the result of the operation to the existing variable. For example, the following code sorts the student data into descending order by Grade and assigns the resulting sorted DataFrame to the original **df_students** variable." + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameStudyHoursGradePass
3Rosie16.0097.0True
10Francesca15.5082.0True
9Giovanni14.5074.0True
14Jenny15.5070.0True
21Aisha12.0064.0True
20Daniel12.5063.0True
11Rajab13.7562.0True
6Frederic11.5053.0False
19Skye12.0052.0False
0Dan10.0050.0False
1Joann11.5050.0False
4Ethan9.2549.0False
18Anila10.0048.0False
2Pedro9.0047.0False
7Jimmie9.0042.0False
12Naiyana9.0037.0False
16Helena9.0036.0False
17Ismat6.0035.0False
15Jakeem8.0027.0False
8Rhonda8.5026.0False
13Kian8.0015.0False
5Vicky1.003.0False
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade Pass\n", + "3 Rosie 16.00 97.0 True\n", + "10 Francesca 15.50 82.0 True\n", + "9 Giovanni 14.50 74.0 True\n", + "14 Jenny 15.50 70.0 True\n", + "21 Aisha 12.00 64.0 True\n", + "20 Daniel 12.50 63.0 True\n", + "11 Rajab 13.75 62.0 True\n", + "6 Frederic 11.50 53.0 False\n", + "19 Skye 12.00 52.0 False\n", + "0 Dan 10.00 50.0 False\n", + "1 Joann 11.50 50.0 False\n", + "4 Ethan 9.25 49.0 False\n", + "18 Anila 10.00 48.0 False\n", + "2 Pedro 9.00 47.0 False\n", + "7 Jimmie 9.00 42.0 False\n", + "12 Naiyana 9.00 37.0 False\n", + "16 Helena 9.00 36.0 False\n", + "17 Ismat 6.00 35.0 False\n", + "15 Jakeem 8.00 27.0 False\n", + "8 Rhonda 8.50 26.0 False\n", + "13 Kian 8.00 15.0 False\n", + "5 Vicky 1.00 3.0 False" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a DataFrame with the data sorted by Grade (descending)\n", + "df_students = df_students.sort_values('Grade', ascending=False)\n", + "\n", + "# Show the DataFrame\n", + "df_students" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "NumPy and DataFrames are the workhorses of data science in Python. They provide us ways to load, explore, and analyze tabular data. As we will learn in subsequent modules, even advanced analysis methods typically rely on NumPy and Pandas for these important roles.\n", + "\n", + "In our next workbook, we'll take a look at how create graphs and explore your data in more interesting ways." + ] + } + ], + "metadata": { + "kernel_info": { + "name": "conda-env-azureml_py38-py" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.5" + }, + "nteract": { + "version": "nteract-front-end@1.0.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/2-Regression/2-Data/02-visualize-data.ipynb b/2-Regression/2-Data/02-visualize-data.ipynb new file mode 100644 index 000000000..c34eab8ac --- /dev/null +++ b/2-Regression/2-Data/02-visualize-data.ipynb @@ -0,0 +1,902 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exploring data with Python - visualize data\n", + "\n", + "In this notebook, we'll apply a few techniques to analyze data with basic statistics and visualize it using graphs.\n", + "\n", + "## Loading our data\n", + "\n", + "Before we begin, let's load the same data about study hours that we analyzed in the previous notebook. We'll also recalculate who passed the class in the same way as last time.\n", + "\n", + "Run the code in the cell below by clicking the **► Run** button to see the data." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
NameStudyHoursGradePass
0Dan10.0050.0False
1Joann11.5050.0False
2Pedro9.0047.0False
3Rosie16.0097.0True
4Ethan9.2549.0False
5Vicky1.003.0False
6Frederic11.5053.0False
7Jimmie9.0042.0False
8Rhonda8.5026.0False
9Giovanni14.5074.0True
10Francesca15.5082.0True
11Rajab13.7562.0True
12Naiyana9.0037.0False
13Kian8.0015.0False
14Jenny15.5070.0True
15Jakeem8.0027.0False
16Helena9.0036.0False
17Ismat6.0035.0False
18Anila10.0048.0False
19Skye12.0052.0False
20Daniel12.5063.0True
21Aisha12.0064.0True
\n", + "
" + ], + "text/plain": [ + " Name StudyHours Grade Pass\n", + "0 Dan 10.00 50.0 False\n", + "1 Joann 11.50 50.0 False\n", + "2 Pedro 9.00 47.0 False\n", + "3 Rosie 16.00 97.0 True\n", + "4 Ethan 9.25 49.0 False\n", + "5 Vicky 1.00 3.0 False\n", + "6 Frederic 11.50 53.0 False\n", + "7 Jimmie 9.00 42.0 False\n", + "8 Rhonda 8.50 26.0 False\n", + "9 Giovanni 14.50 74.0 True\n", + "10 Francesca 15.50 82.0 True\n", + "11 Rajab 13.75 62.0 True\n", + "12 Naiyana 9.00 37.0 False\n", + "13 Kian 8.00 15.0 False\n", + "14 Jenny 15.50 70.0 True\n", + "15 Jakeem 8.00 27.0 False\n", + "16 Helena 9.00 36.0 False\n", + "17 Ismat 6.00 35.0 False\n", + "18 Anila 10.00 48.0 False\n", + "19 Skye 12.00 52.0 False\n", + "20 Daniel 12.50 63.0 True\n", + "21 Aisha 12.00 64.0 True" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Load data from a text file\n", + "df_students = pd.read_csv('grades.csv',delimiter=',',header='infer')\n", + "\n", + "# Remove any rows with missing data\n", + "df_students = df_students.dropna(axis=0, how='any')\n", + "\n", + "# Calculate who passed, assuming '60' is the grade needed to pass\n", + "passes = pd.Series(df_students['Grade'] >= 60)\n", + "\n", + "# Save who passed to the Pandas dataframe\n", + "df_students = pd.concat([df_students, passes.rename(\"Pass\")], axis=1)\n", + "\n", + "\n", + "# Print the result out into this notebook\n", + "df_students " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Visualizing data with Matplotlib\n", + "\n", + "DataFrames provide a great way to explore and analyze tabular data, but sometimes a picture is worth a thousand rows and columns. The **Matplotlib** library provides the foundation for plotting data visualizations that can greatly enhance your ability to analyze the data.\n", + "\n", + "Let's start with a simple bar chart that shows the grade of each student.\n", + "\n", + "**Note**: This first graph may take one to two minutes to render. Subsequent graphs will render more quickly." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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6pFHHtGaNWv08MMPa9CgQUpMTJSZaevWrbrooosUExOjXbt2BbXfvn17rV+/XnfffbcqVaqkpk2bSpLq1aunpUuXnnbdZGZmyuv1atu2bXrrrbdUWFgYFLSzs7Oddf2vf/1LmZmZCg0N1e23364dO3Y4I89OfG7S8W1YfOzu27dPBw8e1H333eecN5KTk4NGcX300UfOfvnaa68FbbeT2y/er/bt26cZM2bo97//vWrVqiXp/78RKJ7n0ksv1X/+8x8nzM+dO1crVqzQsWPHnP03MzNTnTp10tq1a7VhwwbVr19f4eHhzov7Rx99pNTUVN1www16//339fHHHwcd0ye+eBbvzyfupy1atFDv3r2VmZmpjIwM/elPf9J7772nPn36KCIiQk888YRq166tLVu2OPtQ8fPNzMzU3r17VatWLV177bXOdjxy5Ihz/pg5c6aOHj2qW265RZ9++qn27NmjoqIi+Xw+58VaCt4ni9fPL42oCQQC6tKli3JyctS8eXNdcsklio+Pd+po1KiRduzYoXffffeUZVNSUpz9etasWbrpppvk8Xi0bt06RUZGqkGDBioqKtKNN96ol19+Wf/4xz80duzYoO148raX5LyZqlSpkvx+v+bOnastW7botddeU25urjNf8T61du1affjhhxo+fLjWrFmjW2+99ZRaT7d/Fa+bIUOGaP78+Ro7dqzTZsOGDU953SoNBJSfsGjRIq1Zs0ZZWVlasWKFioqK9Nhjj6lNmzaqVauWdu7cGTR/8TuWE4egFV8BqFevnnNf27Ztdfvtt6tp06aqUaOGNm3adMpj+3w+1ahRQ9WqVXNenKKionTs2DHt3r1bISEhKl++vGrUqKEaNWo4PbYTExNPORF/+umnp31+Xq9X9957r0aMGOFcoXjzzTed+1evXq3CwkLnJC8dH02SnZ2t9u3bq2HDhpo+ffpPtr1t2zalpqY6NZYrV05hYWE/OYLiu+++0/r16/XYY4/J7/drxYoVWrBggaTTh4bo6GhFRkZqz549p22vWPfu3TVv3jytXbtWn376aVBNd955p3bt2qWZM2dq8+bNCgkJCVp/R44cCRrlUr58eWcb+P3+026DM1G7dm2FhIRo/PjxQe/0f4rP51N0dLQ+/vhj1a1bV7m5ufL7/dq8ebNq1aqliIgIxcXFyesNPpzr1q2rgoIC50QSHR2tVatWyev1OqGv+ErG3//+d7311ls6duyYateuLY/Ho+eee075+flKTEx0Rvakpqbqq6+++sWaQ0JCFBUVdcrQzWLFL37F+3rVqlUlSdOnT1dkZKQ++eQT9ejRQ0OHDtWjjz6qbt26ye/3a+vWrZKOXw3Mz8/X3r17JR3ff/bs2aMuXbpoyJAh2rlzpzOqJjw8XPv27XMe++RgExoaql27dmnWrFm69tprnRAnHT9m//jHP+rSSy9V/fr15fP5dOTIEZUrV04ffPCB84Jw6NChU57jrl279N1336lGjRq68MILNWbMGOcq16FDhxQIBJwXhgsuuMDZl37qHX2x4mG/d9xxhzp37qzy5cv/5NcQ3HbbbRo/fry6d++uiy66SLNnz9asWbMUFxenvLw81ahRQzExMYqMjHQe3+v1qlmzZs66veCCC9SmTRvt3LlTnTt3VqtWrYKO6dON+mrWrJmzn4aHhysuLs55nMTERHk8HlWrVk3Jycn67LPPFBoaqvnz5we1UXxOGDFihOLj41WuXLmg7SgdHyU3d+5cZWZmqkqVKlq9erVWrVql1atXKxAInPJCf+zYsZ9dt6dzYh0ZGRk6cuSIU0erVq00b948/f73v9dLL70UtFzVqlW1detWTZkyRV988YWys7Od15WOHTtq48aNMjPNnDlTV199tbp06fKL9R09elSLFy+WJCfQZmZmqmPHjqpUqZLWrFlz2n2qffv2uvfee/X666/rmmuu+VXP/5NPPlHfvn11xRVXqGHDhkpOTv6vfT0BAUXHL6nm5uZqx44dWrlypcaOHasePXro8ssv14033qgaNWqosLBQTzzxhDZv3qznnntO06ZNC2qj+EAdOnSocnJy9MUXX+ipp56SdHwIrSTVrFlT//73v/Xuu+/qq6++0siRI7V8+fIzqjEiIkJ9+vTRjTfeqB9//FHfffedli1bpnHjxumdd96RJLVu3Vo5OTl69NFHtWHDBj355JPOxzunc/XVV8vn82n9+vVKTEzUkCFD9OSTT+qll15S586d5ff7df/990uSRo0apQULFmjjxo3av3+/du7cqerVqys3N1fffvutJDkHbUpKivbu3asrrrhCCxcu1KZNm7Rx40Zt27btJw/A+Ph4JSQk6Pnnn9cll1yioUOHBl3iPp0mTZpoy5Ytko5/zLRy5Uo98cQTp8x3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eLhdfPHFQR1ci4cZF7v88sutefPmQa8rxef2pUuXmiRn1FyNGjUsJCTEAoGAc94uX76800H9xE6yJ3aKL96/itfNli1brGPHjhYeHm5Vq1a1J5980jnmS5vH7IQecPjVunXrpho1aujJJ58816XgN3juued05513aufOnadcqmbbutt1110nn8+n559//qzaMTPVrFlTt99++ynv0EvDb92vSmJ/7Ny5s+rXr+9c1ULp+rnzC34ZH/H8Rvv27dPbb7+txYsXKyMj41yXg1/pxx9/1KZNmzR+/HjdcsstQScPtq27HT16VF988YWWLFmi+vXrn1Vb3377rZ588knl5uaW+jfB/tb9qiT2x3379mn+/PlavHixBgwY8JvawJn7ufMLfoVSv0ZznurZs6dVrlzZ7r333qCPLVA2jB492vx+v3Xq1CnomxvN2LZu99lnn1l4eLhdeumltnfv3rNqSzr+BXkvvPBCCVX3037rflUS+2PxN8w+8sgjv2l5/Do/d37BmeMjHgAA4Dp8xAMAAFyHgAIAAFyHgAIAAFyHgAIAAFyHgAIAAFyHgAIAAFyHgAIAAFyHgAIAAFyHgAIAAFzn/wFxzeNTPHfyQwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Ensure plots are displayed inline in the notebook\n", + "%matplotlib inline\n", + "\n", + "from matplotlib import pyplot as plt\n", + "\n", + "# Create a bar plot of name vs grade\n", + "plt.bar(x=df_students.Name, height=df_students.Grade)\n", + "\n", + "# Display the plot\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Well, that worked, but the chart could use some improvements to make it clearer what we're looking at.\n", + "\n", + "Note that you used the **pyplot** class from Matplotlib to plot the chart. This class provides many ways to improve the visual elements of the plot. For example, the following code:\n", + "\n", + "- Specifies the color of the bar chart.\n", + "- Adds a title to the chart (so we know what it represents)\n", + "- Adds labels to the X and Y axes (so we know which axis shows which data)\n", + "- Adds a grid (to make it easier to determine the values for the bars)\n", + "- Rotates the X markers (so we can read them)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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er0UabJz7tw5tGrVSprO7jTcv39/bNiwAZMmTUJycjI+/PBDxMfHo3nz5ti3bx+sra2ldb7//nuMGDECbdq0gZmZGXr06IGlS5e+8m0hIiKi4qnYdFAuSuygTEREVPKU+A7KRERERMbAZIeIiIhMGpMdIiIiMmnFdgRlKuG25h5/Vg+9X/vuZEREZAQ8s0NEREQmjckOERERmTQmO0RERGTSmOwQERGRSWOyQ0RERCaNyQ4RERGZNCY7REREZNKY7BAREZFJY7JDREREJo3JDhEREZk0JjtERERk0pjsEBERkUljskNEREQmjckOERERmTQmO0RERGTSmOwQERGRSWOyQ0RERCaNyQ4RERGZNCY7REREZNKY7BAREZFJY7JDREREJo3JDhEREZk0JjtERERk0pjsEBERkUljskNEREQmjckOERERmTQmO0RERGTSmOwQERGRSWOyQ0RERCaNyQ4RERGZNCY7REREZNKY7BAREZFJY7JDREREJo3JDhEREZk0JjtERERk0pjsEBERkUljskNEREQmjckOERERmTQmO0RERGTSmOwQERGRSWOyQ0RERCaNyQ4RERGZNCY7REREZNKY7BAREZFJY7JDREREJo3JDhEREZk0JjtERERk0pjsEBERkUljskNEREQmjckOERERmTQmO0RERGTSmOwQERGRSWOyQ0RERCaNyQ4RERGZNPOiDoCISKOtCsPr6C0Mr4OISjye2SEiIiKTxmSHiIiITFqxTnYyMjIwdepU+Pn5wcbGBhUqVMDnn38OIf47NS2EwLRp0+Dl5QUbGxsEBQXhzp07RRg1ERERFSfFOtlZsGABVq5cieXLl+PGjRtYsGABFi5ciGXLlknLLFy4EEuXLsWqVatw+vRp2NnZITg4GKmpqUUYORERERUXxbqD8smTJ9G1a1d07NgRAODr64sffvgBZ86cAZB1Vmfx4sX47LPP0LVrVwDApk2b4OHhgV27dqFXr15FFjsREREVD8U62WnatCnWrFmD27dvo1KlSrh06RKOHz+ORYsWAQDu3buHx48fIygoSFrHyckJjRo1QlhYWJ7JjkqlgkqlkqYTExMBAIfPnIWdnV2+MTnZ26N+YA1Z2bkrV5GQlFTg9viVKwf/8uWk6fT0dBw5e67A9QCgfo3qcHJwkKZjYmNx9XbBl+uUSiVaNmwgK7sRGYnoJ08LXNfdzRWBlSrJyo6fD4fq5csC162CKiiLm9J0ElxwGj0LXA8AmmELrJEsTUdFR+POg6gC17OztUHjWrVkZRdu3EBcfEKB63p7eSLA11dWFhp2Sqt4a1etAjdnZ2k6Nj4eF2/czHuFHNo0aSybvnP/PqIePS5wPVdnJ9SpWlVWdurSJSSnvChw3QAfb3iXKSNNp6pUOBF+Qat4G9WqCXtbW2n6n5gnuHn3boHrWVlaonm9urKyK7dv40lsXD5rfQQAKIObqIojsjmHEYIMWBT4ujViY+Hh5iZNJzx/jnNXrxW4HgC82aA+zM3/ayLvPvwb9/7+u8D12EZo2Ub4+6Osh7s0nZSSgtOXLhe4HgA0q1sH1lZW0jTbCHWvRxsBJCcn5zs/W7FOdqZMmYLExERUqVIFSqUSGRkZmDNnDvr06QMAePw4a4d7eHjI1vPw8JDmaTJv3jzMnDlTrVylUkFpnv9bkvMDJq2XlobUHMlTXtIz0mXTAtBqPQDIzJTfQpuZkanVuubmSrWytPR0rdZNS0tXK1O9fKnVurm/iATMkAqHPJaWE7murqYbsq1a7pu09Ay1Mu33TabatLbraopDu32Tplam7b5Jz5DHK4T225qzvxwAZGRqF68maWkFHYdZx0sarNXmqGCPdFgW+BqZGbn3jdB+W3NNp2do97lhG6FlG5Ep/8wJocO+ybVz2EZoWO61aCMgO3GRn2Kd7Gzfvh3ff/89tm7diurVq+PixYsYM2YMypQpg/79++td7yeffIJx48ZJ04mJiShfvjysrKw0NlQ5WVmo/5q0srAocD0AMFfK324FNDeMmpiZycccMVOaabWuUqn+4bYwN9dqXQsL9cPDyrLgLxgAUEL+QVMgE9Z4rtW6Csg/aOZabqum2Cy03DcWGhpB7feNmdq0tutqikO7faPhOLS0RLqGBjk3c6U8XoVC+21VKOTHodJMu3g175uCjsOs48UC6v3vrJAEcy3O7Jgpc+8bhfbbmmvaXKnd54ZthJZthJn8dRUKHfZNrp3DNkLDcq9FGwFkpKsn3BrjErnTsGKkfPnymDJlCoYPHy6VzZ49G1u2bMHNmzdx9+5dVKhQARcuXEDt2rWlZd58803Url0bS5Ys0ep1EhMT4eTkhISEBDg6Ohp7M15PHBCODMVjiIgKoO33d7G+GyslJUUtI1YqldIpQT8/P3h6eiI0NFSan5iYiNOnT6NJkyavNFYiIiIqnor1ZazOnTtjzpw58Pb2RvXq1XHhwgUsWrQIISEhALJOl40ZMwazZ89GQEAA/Pz8MHXqVJQpUwbdunUr2uCJiIioWCjWyc6yZcswdepUDBs2DE+ePEGZMmXw0UcfYdq0adIykyZNQnJyMj788EPEx8ejefPm2LdvH6yt1Ts1EhER0eunWPfZeVXYZ6cQsL8FGYrHEBEVwCT67BAREREZiskOERERmTQmO0RERGTSmOwQERGRSWOyQ0RERCaNyQ4RERGZNCY7REREZNKY7BAREZFJY7JDREREJo3JDhEREZk0JjtERERk0pjsEBERkUljskNEREQmjckOERERmTQmO0RERGTSzIs6ACIyAVsVhtfRWxheBxGRBjyzQ0RERCaNyQ4RERGZNCY7REREZNKY7BAREZFJY7JDREREJo3JDhEREZk0JjtERERk0pjsEBERkUljskNEREQmjckOERERmTQmO0RERGTSmOwQERGRSWOyQ0RERCaNTz0nIjJ1hj6Vnk+kpxKOZ3aIiIjIpDHZISIiIpPGZIeIiIhMGpMdIiIiMmlMdoiIiMikMdkhIiIik8Zkh4iIiEwakx0iIiIyaUx2iIiIyKQx2SEiIiKTxmSHiIiITBqTHSIiIjJpTHaIiIjIpDHZISIiIpPGZIeIiIhMGpMdIiIiMmlMdoiIiMikMdkhIiIik8Zkh4iIiEwakx0iIiIyaUx2iIiIyKSZF3UAREREVMxtVRi2fm9hnDj0xDM7REREZNKY7BAREZFJ42UsIiIiU1LCLzkVBp7ZISIiIpPGZIeIiIhMGpMdIiIiMmnss0NErw/2ZSB6LfHMDhEREZk0JjtERERk0pjsEBERkUkr9snOP//8gw8++ABubm6wsbFBYGAgzp07J80XQmDatGnw8vKCjY0NgoKCcOfOnSKMmIiIiIqTYp3sPHv2DM2aNYOFhQX++OMPXL9+HV999RVcXFykZRYuXIilS5di1apVOH36NOzs7BAcHIzU1NQijJyIiIiKi2J9N9aCBQtQvnx5rF+/Xirz8/OT/hdCYPHixfjss8/QtWtXAMCmTZvg4eGBXbt2oVevXhrrValUUKlU0nRiYiIA4PCZs7Czs8s3Jid7e9QPrCErO3flKhKSkgrcHr9y5eBfvpw0nZ6ejiNnz+Wzxn/q16gOJwcHaTomNhZXbxd8BkupVKJlwwayshuRkYh+8rTAdd3dXBFYqZKs7Pj5cKhevixw3SqogrK4KU0nwQWn0bPA9QCgGbbAGsnSdFR0NO48iCpwPTtbGzSuVUtWduHGDcTFJxS4rreXJwJ8fWVloWGntIq3dtUqcHN2lqZj4+Nx8cbNvFfIoU2TxrLpO/fvI+rR4wLXc3V2Qp2qVWVlpy5dQnLKiwLXDfDxhneZMtJ0qkqFE+EXtIq3Ua2asLe1lab/iXmCm3fvAvgo3/WskIzm2CIru4K2eAL//wrU3u+sOsvgJqriiGzOYYQgAxYFxlsjNhYebm7SdAI8cA7dClwPAN7EOpgjTZq+i/q4p8UxUTzbiLz3jxJpaIl1srIbeBPRqPJfQR7bbVAb4e+Psh7u0nRSSgpOX7pc4HoA0KxuHVhbWUnTbCNy+wiu+Bt18Jus9BR6Ihkueazzn4DoaPU2ooDPeLZG2A57PJOm/0EV3MSbeR5D2awsLdG8Xl1Z2ZXbt/EkNi7f9ZKTk/Odn61YJzt79uxBcHAw3n33XRw5cgRly5bFsGHDMGTIEADAvXv38PjxYwQFBUnrODk5oVGjRggLC8sz2Zk3bx5mzpypVq5SqaA0z/8tyfkBk9ZLS0NqjuQpL+kZ6bJpAWi1HgBkZspvec3MyNRqXXNzpVpZWnq6VuumpaWrlalevtRq3dxfRAJmSIVDHkvLiVwnHNMN2VYt901aeoZamfb7JlNtWtt1NcWh3b5JUyvTdt+kZ8jjFUL7bRVCfhxmZGbHq92+zSkN1vJjQi0GB2m53FSwRzosC3yNzFzbmgmlDseh/Db1dFhq9T4VzzYi7202h3piUvC++d9yhrQRmfLPnBBCh+NQPs02IjcHpMFGrVQFO62Of41thJ7tdwYsstbVY3vT0gr+rlJpWW+xTnbu3r2LlStXYty4cfj0009x9uxZjBo1CpaWlujfvz8eP87Kbj08PGTreXh4SPM0+eSTTzBu3DhpOjExEeXLl4eVlZXGhionKwv1X5NWFhYFrgcA5kr5262A5oZREzMzecNrpjTTal2lUv3DbWFurtW6Fhbqh4eVZcFfMEDWr8WcFMiENZ5rta4C8g+auZbbqik2Cy33jYWGRlD7fWOmNq3tupri0G7faDgOLS2RrqFBzs1cKY9XodB+WxUK+XGoNMuON/99awX1X18WSJUfE2oxPJeWU68vCeZanNkxy7WtZsjQ4TiUf6Oa46V2x2GxbCPy3ubcn1VAm33zv+UMaSPM5J85hUKhw3Eon2YbkdtzWED9LK8VkrX6kaCxjdCz/VYiLWvdgr5bNe6bgr+rMtLVE26NcYncP9WKEUtLS9SvXx8nT56UykaNGoWzZ88iLCwMJ0+eRLNmzRAdHQ0vLy9pmZ49e0KhUODHH3/U6nUSExPh5OSEhIQEODo6Gn07XkuGDt4GcAC3kqQw9ndxrLOkHpOv63a/rgpjfxfTY0jb7+9i3UHZy8sL1apVk5VVrVoVUVFZ12Y9PT0BADExMbJlYmJipHlERET0eivWyU6zZs1w69YtWdnt27fh4+MDIKuzsqenJ0JDQ6X5iYmJOH36NJo0afJKYyUiIqLiqVj32Rk7diyaNm2KuXPnomfPnjhz5gzWrFmDNWvWAMi6xjtmzBjMnj0bAQEB8PPzw9SpU1GmTBl069ataIMnIiKiYqFYJzsNGjTAL7/8gk8++QSzZs2Cn58fFi9ejD59+kjLTJo0CcnJyfjwww8RHx+P5s2bY9++fbC2Vr+Dg4iIiF4/xTrZAYBOnTqhU6dOec5XKBSYNWsWZs2a9QqjIiIiopKiWPfZISIiIjIUkx0iIiIyaUx2iIiIyKQx2SEiIiKTxmSHiIiITBqTHSIiIjJpTHaIiIjIpOmd7Bw7dgwffPABmjRpgn/++QcAsHnzZhw/ftxowREREREZSq9k5+eff0ZwcDBsbGxw4cIFqFQqAEBCQgLmzp1r1ACJiIiIDKFXsjN79mysWrUK3377LSwsLKTyZs2aITw83GjBERERERlKr2Tn1q1baNGihVq5k5MT4uPjDY2JiIiIyGj0SnY8PT0RERGhVn78+HH4+/sbHBQRERGRseiV7AwZMgSjR4/G6dOnoVAoEB0dje+//x4TJkzA0KFDjR0jERERkd70eur5lClTkJmZiTZt2iAlJQUtWrSAlZUVJkyYgJEjRxo7RiIiIiK96ZXsKBQK/N///R8mTpyIiIgIJCUloVq1arC3tzd2fEREREQG0SvZyWZpaYlq1aoZKxYiIiIio9M62Xn77be1rnTnzp16BUNERERkbFp3UHZycpL+HB0dERoainPnzknzz58/j9DQUDg5ORVKoERERET60PrMzvr166X/J0+ejJ49e2LVqlVQKpUAgIyMDAwbNgyOjo7Gj5KopNiqMLyO3sLwOoiISKLXrefr1q3DhAkTpEQHAJRKJcaNG4d169YZLTgiIiIiQ+mV7KSnp+PmzZtq5Tdv3kRmZqbBQREREREZi153Yw0cOBCDBg1CZGQkGjZsCAA4ffo05s+fj4EDBxo1QCIiIpPFS9+vhF7JzpdffglPT0989dVXePToEQDAy8sLEydOxPjx440aIBEREZEh9Ep2zMzMMGnSJEyaNAmJiYkAwI7JREREVCwZNKggwCSHiIiIije9k50dO3Zg+/btiIqKwsuXL2XzwsPDDQ6MiIiIyBj0uhtr6dKlGDhwIDw8PHDhwgU0bNgQbm5uuHv3Ljp06GDsGImIiIj0pley880332DNmjVYtmwZLC0tMWnSJBw4cACjRo1CQkKCsWMkIiIi0pteyU5UVBSaNm0KALCxscHz588BAH379sUPP/xgvOiIiIiIDKRXnx1PT0/ExcXBx8cH3t7eOHXqFGrVqoV79+5BCN7vL1MYYygYWifHZCAioteIXmd2WrdujT179gDIGmBw7NixaNu2Ld577z10797dqAESERERGUKvMztr1qyRHgsxfPhwuLm54eTJk+jSpQs++ugjowZIREREZAidk5309HTMnTsXISEhKFeuHACgV69e6NWrl9GDI5Lh5TsiItKDzpexzM3NsXDhQqSnpxdGPERERERGpVefnTZt2uDIkSPGjoWIiIjI6PTqs9OhQwdMmTIFV65cQb169WBnZyeb36VLF6MER0RERGQovZKdYcOGAQAWLVqkNk+hUCAjI8OwqIiIiIoj9h0skfRKdrLvxCIiIiIq7nRKdl68eIHQ0FB06tQJAPDJJ59ApVL9V5m5OWbNmgVra2vjRklERESkJ52SnY0bN+K3336Tkp3ly5ejevXqsLGxAQDcvHkTnp6eGDdunPEjJSIiItKDTsnO999/j0mTJsnKtm7dCn9/fwDAli1bsGLFCiY7JRGvQxMRkYnS6dbziIgIBAYGStPW1tYwM/uvioYNG+L69evGi46IiIjIQDqd2YmPj5f10Xn69KlsfmZmpmw+ERERUVHT6cxOuXLlcPXq1TznX758WXqEBBEREVFxoFOy89Zbb2HatGlITU1Vm/fixQvMnDkTHTt2NFpwRERERIbS6TLWp59+iu3bt6Ny5coYMWIEKlWqBAC4desWli9fjvT0dHz66aeFEigRERGRPnRKdjw8PHDy5EkMHToUU6ZMgRBZd+AoFAq0bdsW33zzDTw8PAolUCIiIiJ96DyCsp+fH/bt24e4uDhEREQAACpWrAhXV1ejB0dERERkKL0eFwEArq6uaNiwoTFjISIiIjI6nTooExEREZU0THaIiIjIpDHZISIiIpPGZIeIiIhMGpMdIiIiMmlMdoiIiMikMdkhIiIik8Zkh4iIiEwakx0iIiIyaXqPoExEr8hWheF19BaG10FEVELxzA4RERGZNCY7REREZNJKVLIzf/58KBQKjBkzRipLTU3F8OHD4ebmBnt7e/To0QMxMTFFFyQREREVKyUm2Tl79ixWr16NmjVrysrHjh2LvXv34qeffsKRI0cQHR2Nt99+u4iiJCIiouKmRCQ7SUlJ6NOnD7799lu4uLhI5QkJCVi7di0WLVqE1q1bo169eli/fj1OnjyJU6dOFWHEREREVFyUiLuxhg8fjo4dOyIoKAizZ8+Wys+fP4+0tDQEBQVJZVWqVIG3tzfCwsLQuHFjjfWpVCqoVCppOjExEQBw+MxZ2NnZ5RuLk7096gfWkJWdu3IVCUlJeazxkfSfH87DH+ek6XRY4AhC8n09AEDYKdSvUR1ODg5SUQz8cRVtC1xViTS0xDpZ2Y3ISEQ/eZpnnNnccReBOCArO44PoIKG9yhMnlxWQRWUxU1pOgkuOI2eBcYLAM2wBdZIlqajoqNx50GUxhhzssMzNMZ2WdkFdEQcymmMMSdvL08E+PrKykLzWT6n2lWrwM3ZWZqORXlcxFtardsGq2XTd9AEUWqvq77drvgbdfCbrOwUeiIZLmrLApBte4CPN7zLlJGmU1UqnAi/oFW8jWrVhL2trTT9T8wT3Lx7V2OMOVkhGc2xRVZ2BW3xBP4aY8ySVWcZ3ERVHJHNOYwQZMCiwHhrxMbCw81Nmk6AB86hW4HrAcCbWAdzpEnTd1Ef97Q4JnRvI/7jV64c/MuXk6bT09Nx5Oy5fNb4j1obERuLq7fv/G8q7/2jsY3Am4hGlf8K8thudzdXBFaqJCs7fj4cqpcvC4y3ir8/ynq4S9NJKSk4felygesBQLO6dWBtZSVN/9dG5M/O1gaNa9WSlV24cQNx8QkFrquxjSjguM9WG7/DDQ+l6dj4eFy8kd0+5l+HxjYC8iscmj47OrcROQRER6u3EVpuayNshz2eSdP/oApu4s18218AsLK0RPN6dWVlV27fxpPYuHzXS05Oznd+tmKf7Gzbtg3h4eE4e/as2rzHjx/D0tISzjm+aADAw8MDjx8/zrPOefPmYebMmWrlKpUKSvP835KcHzBpvbQ0pOZInuT+a3zSYSmbI6BAao75eVKpkJkpv3U4ExZarWsO9UYnLT1dQ7zqdaXBWj0U2Gl+3Vz15f4iEjDTblv/t2xO6RmZ/4s3//U1bits/nvdPPcRkJaeoVaW9z6Vy8zMlE9DqfW2qsUBKy33jY1aWZ77BpBte3qGPF4htN9WIeTHYUZmhlb7RpM0WMvjzWO7NR+H9mqfJ00yM/TfNwLyW/7TYanV+6R7G5HjNTLSc8Wgy3GYq42QPjdAfvtH8+emoH3zv+XS0tXKVC9fahVzRqb8MyeE0OE4lE+ny7Y1b+bmSrWyNC33jcY2QstjKRPy183M1G7faIwDVuqvq+Gzo3MbkYPGNkLP9jsj+7tKy32bU1qapu8qOZWW9RbrZOfhw4cYPXo0Dhw4AGtr9QZPX5988gnGjRsnTScmJqJ8+fKwsrLS2FDlZGWh/mvSysIin/WeS//lblQUELDOMT/vF7WCmZm84TVDmlbrKnP8Ms1mYW6uIV71uiyQqh4K8siic9WX+3UVyNRuW/+3bE7mSrP/xZv/+ppis8CL/143n31roaERLOhYyGZmJv9wmyFD621ViwMqLffNC7UyKyTnnQDkqNNcKY9XodB+WxUK+XGoNFMasG9S5e9THtut+ThMgrkWZ3bMlPrvGwXk36jmeKnV+6R7G5HjNZTyJlkBXY7DXG2E9LkB8ts/GtuIAvfN/5azUP8KsbIsOAkFso6dnBQKhQ7HoXzaXLatedMUm4WW+0ZjG6HlsWQGeaJkZqbdvtEYB1Tqr6vhs6NzG5GDxjZCz/Zbmf1dVdB3q8Z9o+m7Si4jXT3h1hiXyP1TrRjZtWsXunfvDqXyv4MsIyMDCoUCZmZm2L9/P4KCgvDs2TPZ2R0fHx+MGTMGY8eO1ep1EhMT4eTkhISEBDg6Ohp3IwpjQDhD69Q0wJyx6ywp221sxXG7NdVpbCVlu0vCMVQYXtftLgyva1tZTI8hbb+/i/WZnTZt2uDKlSuysoEDB6JKlSqYPHkyypcvDwsLC4SGhqJHjx4AgFu3biEqKgpNmjQpipCJiIiomCnWyY6DgwNq1JB39LOzs4Obm5tUPmjQIIwbNw6urq5wdHTEyJEj0aRJkzw7JxMREdHrpVgnO9r4+uuvYWZmhh49ekClUiE4OBjffPNNUYdFRERExUSJS3YOHz4sm7a2tsaKFSuwYsWKogmIiIiIirUSMaggERERkb6Y7BAREZFJY7JDREREJo3JDhEREZm0EtdBmYio2CgJAz4SEc/sEBERkWljskNEREQmjZexiIio6PGSIBUintkhIiIik8Zkh4iIiEwakx0iIiIyaeyzQ0REpsnQfkDsA2QyeGaHiIiITBqTHSIiIjJpTHaIiIjIpDHZISIiIpPGZIeIiIhMGpMdIiIiMmlMdoiIiMikMdkhIiIik8Zkh4iIiEwakx0iIiIyaUx2iIiIyKQx2SEiIiKTxmSHiIiITBqTHSIiIjJpTHaIiIjIpDHZISIiIpPGZIeIiIhMGpMdIiIiMmlMdoiIiMikMdkhIiIik8Zkh4iIiEwakx0iIiIyaUx2iIiIyKQx2SEiIiKTxmSHiIiITBqTHSIiIjJpTHaIiIjIpDHZISIiIpNmXtQBEBFRCbNVYXgdvYXhdRBpiWd2iIiIyKQx2SEiIiKTxmSHiIiITBr77BC9jgztc8H+FkRUgvDMDhEREZk0JjtERERk0pjsEBERkUljskNEREQmjckOERERmTQmO0RERGTSmOwQERGRSWOyQ0RERCaNyQ4RERGZNCY7REREZNKY7BAREZFJY7JDREREJo3JDhEREZk0JjtERERk0pjsEBERkUljskNEREQmjckOERERmbRinezMmzcPDRo0gIODA9zd3dGtWzfcunVLtkxqaiqGDx8ONzc32Nvbo0ePHoiJiSmiiImIiKi4KdbJzpEjRzB8+HCcOnUKBw4cQFpaGtq1a4fk5GRpmbFjx2Lv3r346aefcOTIEURHR+Ptt98uwqiJiIioODEv6gDys2/fPtn0hg0b4O7ujvPnz6NFixZISEjA2rVrsXXrVrRu3RoAsH79elStWhWnTp1C48aNiyJsIiIiKkaKdbKTW0JCAgDA1dUVAHD+/HmkpaUhKChIWqZKlSrw9vZGWFhYnsmOSqWCSqWSphMTEwEAh8+chZ2dXb4xONnbo35gDVnZuStXkZCUlMcaH0n/+eE8/HFOmk6HBY4gJN/XAwCEnUL9GtXh5OAgFcXAH1fRtsBVlUhDS6yTld2IjET0k6d5xpnNHXcRiAOysuP4ACpoeI/CTskmq6AKyuKmNJ0EF5xGzwLjBYBm2AJr/Hf2Lio6GnceRGmMMSc7PENjbJeVXUBHxKGcxhhz8vbyRICvr6wsNJ/lc6pdtQrcnJ2l6ViUx0W8pdW6bbBaNn0HTRCl9rrq2+2Kv1EHv8nKTqEnkuGi+YVy1Bng4w3vHLNSYYcT+ECreBthO+zxTJr+J+YJbt69qzHGnKyQjObYIiu7grZ4An+NMWbJqrMMbqIqjsjmHEYIMmBRYLw1YmPh4eYmTSfAA+fQrcD1AOBNrIM50qTpu6iPe1rsGyc8QX38Iis7h+5IgLvmF8pRp1+5cvAvX06aTk9Px5Gz5zStpUatjYiNxdXbd/KMM5vGNgJvIhpVNMaYsz6d2ohcqsQ8QVmP/94Tg9oI1MQdNMkzzmwFthG55ahPYxtRwHGfrTZ+hxseStOx8fG4eCO7fcy/Do1tBGrmGWd2nTq3ETkEREfDu0wZaTpVpcIJLbdVrY1AFdzEm/m2vwBgZWmJ5vXqysqu3L6NJ7Fx+a6X80pPfkpMspOZmYkxY8agWbNmqFEjK9l4/PgxLC0t4ZzjiwYAPDw88Pjx4zzrmjdvHmbOnKlWrlKpoDTP/y2xtrJSXy8tDak5kie5/xqfdFjK5ggokJpjfp5UKmRmCllRJiy0WtccL9XK0tLTNcSrXlcarNVDgZ3m181VX+4vIgEz7bb1f8vmlJ6R+b94819f47bC5r/XzXMfAWnpGWplee9TuczMTPk0lFpvq1ocsNJy39ioleW5bwDZtqdnyOM1ZN9kZGZotW80SYO1/HXz2G7Nx6G92udJk8wM/feNgEI2nQ5LrfaNNZ6rlalyHodqM3Pum/RcMehyHOZqI6TPjeY4s2n+3Biyb/I5DnPIyJR/5gxqI2CZtW4B+6fANiK3HPVpbCO0jDcTSvl0pnb7RpM0WKm/robt1rmNyEGtjRDab6taG5H9XaXlcZxTWpqm7yo5lZb1lphkZ/jw4bh69SqOHz9ucF2ffPIJxo0bJ00nJiaifPnysLKy0pjM5GRlof5r0srCIp/1/mv4cn/QFBAaG0b1F7CCmZm84TVDmlbrKnP8Ms1mYW6uIV71uiyQqh4K8siic9WX+3UVyNRuW/+3bE7mSrP/xZv/+ppis8CL/143n31rYa5UKyvoWMhmZib/cJshQ+ttVYsDKi33zQu1Misk550A5KjTXCmP15B9ozRTGrBvUuWvm8d2az4Ok2CuxZkdM6X++0YBefJgjpda7RsrjfvmRd6vK9s38iZZAV2Ow1xthPS50RxnNo1thEH7Rrtf2koz+WfOoDYCL7PWLWD/FNhG5JajPo1thJbxmkGeKJmZabdvNLGASv11NWy3zm1EDmpthEL7bVVrI7K/qwr6brVUj8vCQtN3lVxGenq+86W4hBCi4MWK1ogRI7B7924cPXoUfn5+UvnBgwfRpk0bPHv2THZ2x8fHB2PGjMHYsWO1qj8xMRFOTk5ISEiAo6OjcYPfqih4mYL0zrWLDK0zd32FUWdJ2W5jK47bXRh1loQYC6POVxFjYSgJ210c62RbWbh1GoG239/F+m4sIQRGjBiBX375BQcPHpQlOgBQr149WFhYIDQ0VCq7desWoqKi0KRJk1cdLhERERVDxfoy1vDhw7F161bs3r0bDg4OUj8cJycn2NjYwMnJCYMGDcK4cePg6uoKR0dHjBw5Ek2aNOGdWERERASgmCc7K1euBAC0bNlSVr5+/XoMGDAAAPD111/DzMwMPXr0gEqlQnBwML755ptXHCkREREVV8U62dGmO5G1tTVWrFiBFStWvIKIiIiIqKQp1n12iIiIiAzFZIeIiIhMGpMdIiIiMmlMdoiIiMikMdkhIiIik8Zkh4iIiEwakx0iIiIyaUx2iIiIyKQx2SEiIiKTxmSHiIiITBqTHSIiIjJpxfrZWEREr52tCsPr6F3wcwWJXic8s0NEREQmjckOERERmTQmO0RERGTSmOwQERGRSWOyQ0RERCaNyQ4RERGZNCY7REREZNKY7BAREZFJY7JDREREJo3JDhEREZk0JjtERERk0pjsEBERkUljskNEREQmjckOERERmTQmO0RERGTSmOwQERGRSWOyQ0RERCaNyQ4RERGZNCY7REREZNKY7BAREZFJY7JDREREJo3JDhEREZk0JjtERERk0pjsEBERkUljskNEREQmjckOERERmTQmO0RERGTSmOwQERGRSWOyQ0RERCaNyQ4RERGZNCY7REREZNKY7BAREZFJY7JDREREJo3JDhEREZk0JjtERERk0pjsEBERkUljskNEREQmjckOERERmTQmO0RERGTSmOwQERGRSWOyQ0RE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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create a bar plot of name vs grade\n", + "plt.bar(x=df_students.Name, height=df_students.Grade, color='orange')\n", + "\n", + "# Customize the chart\n", + "plt.title('Student Grades')\n", + "plt.xlabel('Student')\n", + "plt.ylabel('Grade')\n", + "plt.grid(color='#95a5a6', linestyle='--', linewidth=2, axis='y', alpha=0.7)\n", + "plt.xticks(rotation=90)\n", + "\n", + "# Display the plot\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A plot is technically contained within a **Figure**. In the previous examples, the figure was created implicitly for you, but you can create it explicitly. For example, the following code creates a figure with a specific size." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Bw5Ely5d9J4pgYiIiIhMR54mt2fOnMH7778vLaeOg+3ZsydWrlyJkSNHIi4uDp9//jmioqLQsGFD7N69W5rjFgB++eUXDBw4EM2aNYOZmRk6deqEefPmGX1biIiIiCjv5Zsxt3mJY26JiIiI8re3fp5bIi3r0l+bqoCu7/x3OyIiIpOSby8oIyIiIiLKLia3RERERGQymNwSERERkclgcktEREREJoPJLRERERGZDCa3RERERGQymNwSERERkclgcktEREREJoPJLRERERGZDCa3RERERGQymNwSERERkclgcktEREREJoPJLRERERGZDCa3RERERGQymNwSERERkclgcktEREREJoPJLRERERGZDCa3RERERGQymNwSERERkclgcktEREREJoPJLRERERGZDCa3RERERGQymNwSERERkclgcktEREREJoPJLRERERGZDCa3RERERGQymNwSERERkclgcktEREREJoPJLRERERGZDCa3RERERGQymNwSERERkclgcktEREREJoPJLRERERGZDPO8bkBmkpOT8e2332Lt2rV49OgRihUrhl69emHs2LFQqVQAACEEJkyYgJ9//hlRUVFo0KABFi5cCG9v7zxuPRFRFtaplK+zq1C+TiKit0i+PnP73XffYeHChZg/fz6uXr2K7777DjNmzMCPP/4oPWfGjBmYN28eFi1ahJMnT8LW1hb+/v549epVHraciIiIiPJCvj5ze+zYMbRr1w6tWrUCAHh4eODXX3/FqVOnALw+aztnzhyMHTsW7dq1AwCsXr0arq6u2LZtG7p06ZJnbSciIiIi48vXZ27r16+P4OBg3LhxAwBw4cIFHDlyBC1btgQA3L59G48ePYKfn5+0joODA+rUqYPjx4/nSZuJiIiIKO/k6zO3o0ePRkxMDMqXLw+1Wo3k5GRMmTIF3bp1AwA8evQIAODq6ipbz9XVVXpMF41GA41GIy3HxMQAAA6eOg1bW9tM2+RgZwdfn8qysjOXQhEdG5vl9niWKAGvkiWk5aSkJBw6fSbL9QDAt3IlOBQsKC0/fvYMoTduZrmeWq1Gk9q1ZGVXw8Px4MnTLNd1cXaCT9mysrIjZ0OgSUjIct3yXl4o7uoiLcfGx+PkhYtZrgcADWpUh7WVlbQc8eABbt6NAPBFpuvZ4jnqYoOs7BxaIRIlMlgDwPETAIBS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oVOnTrKbOBARERHRu+etS24PHjwoW7a2tsaCBQuwYMGCvGkQEREREeUbb11yS0RE+RQvXCOifMAs66cQEREREb0deOaWiIjoXfCWTwNFpC+euSUiIiIik8HkloiIiIhMBoclEBERkTJ4USHlAzxzS0REREQmg8ktEREREZkMJrdEREREZDKY3BIRERGRyWByS0REREQmg8ktEREREZkMJrdEREREZDKY3BIRERGRyWByS0REREQmg8ktEREREZkMJrdEREREZDKY3BIRERGRyWByS0REREQmg8ktEREREZkMJrdEREREZDKY3BIRERGRyWByS0REREQmwzyvG0BERPROW6dStr6uQtn6iN4yPHNLRERERCaDZ26J6O3Cs1xERJQJnrklIiIiIpPB5JaIiIiITAaTWyIiIiIyGUxuiYiIiMhkMLklIiIiIpPB5JaIiIiITAaTWyIiIiIyGUxuiYiIiMhk5Ovkdtq0aahVqxYKFiwIFxcXtG/fHtevX5c959WrVxgwYACcnZ1hZ2eHTp064fHjx3nUYiIiIiLKS/k6uT106BAGDBiAEydOYN++fUhMTMQHH3yAuLg46TlDhw7Fzp07sXHjRhw6dAgPHjxAx44d87DVRERERJRX8vXtd3fv3i1bXrlyJVxcXHD27Fk0atQI0dHRWLZsGdatW4emTZsCAFasWIEKFSrgxIkTqFu3bl40m4iIiIjySL4+c5tedHQ0AMDJyQkAcPbsWSQmJsLPz096Tvny5VGqVCkcP348T9pIRERERHknX5+5TSslJQVfffUVGjRogMqVKwMAHj16BEtLSzg6Osqe6+rqikePHmVYl0ajgUajkZZjYmIAAAdPnYatrW2m7XCws4OvT2VZ2ZlLoYiOjc1yGzxLlIBXyRLSchIscAiBWa4HAL7YBge8GUv8GF4IRXP5k46f0FpPjUA0wXJZ2VU0xgOUzzKmC27BB/tkZUfOhkCTkKDj2V/IlsrjEIrjmrQci0I4iY+zjAkADbAW1mmWIx48wM27EVox0rPFc9TFBlnZObRCJEpksAak16xUUTd4e3jIHgrOIl6qavgTzrgnLT9DSZzHhzrjpNesnvzXhZt37iDiYcbHbionRwdUr1BBVnbiwgXExb/U8Wz5dnjjOErhorT8CrY4is+yjAkAdbABdnguLd9//ATXbt3SGSctK8ShIdbKyi6hOZ7AK/OAx0+gmEsRVChdWlZ8EIFIhkWW7a2MfXDFLWk5Gq44g/ZaMXRpDAuYI1FavgVf3EbNLGM64Al8sVVWdgYdEK0zjvw188RZeOGMtGxQH/HsGUJv3NQZJy01EnPWRxw/ARdnJ/iULSsrPoLPoEHm/SiQjT5Cx+vWoEZ1WFtZSctv+ojM2RawQd2qVWVl565eRWRUdAZrvHndSuEivCE/aZLjPiIqCuevXkvzjIzraYbFsuWbqIcIVMk84PETuvsIfIw4FMqyvXr3ETr2TR0UkvcRKI9raJxlzEz7iCzeO8VwDRVwSPZojvuIFy9wJvSyzjjpNcbynPURl0K18wh0QDRcslw3W31EutfNt3IlOKRZ1plH6JBpH5FB/5lKZx+RYR4hV97LC8Vd37wmsfHxOHjqdJbrAW9RcjtgwACEhobiyJEjBtc1bdo0TJw4Uatco9FAbZ75S5K2Q5XWS0zEqzTJckaSkpNkywIqvELBLNcDgBSo0y1baK+row3msNMqS4S1XnETZSnmfyESEjLYVnl96TsVATO9t1Wk+0EhKTnlv5iZr28O7TdLImwyj/vftiQmJWs9lPN9o9Zr3+iSmJSs17GUmJioVabvvkmCpWzZkH2TnJK2vfrVkUqv41CjQWJSknYx7LS2Q5eUdMdhdvaNgEq2nARLvV4na7zQKtPAJof7xoA+QnrfaMdJS/f7Rs99k6hr39jq1Wa9+wgdr5sQ8uUk2bZmzNxcrVWWmGn//aY9idDu+3O8b1LSt1f/904irPTcNzr6CD33jd59hK59k76P0PVZpSfpOMzivaPzsyqnfUSK0Hvf5LiP0LlvsvisShMjfRsyXC/d65aSIn/j6MwjdMi0j8jifaezj8jws0ouOUX+uSyEkJ2YzMxbkdwOHDgQv//+O/7++2+UKPHmLJybmxsSEhIQFRUlO3v7+PFjuLm5ZVjfmDFjEBQUJC3HxMSgZMmSsLKy0pm8pmVlof1N0MrCIsv1AMBcLX+5VRA6Pwh1MUNyuuVE7XV1tEEN7TPKFnilV1wLvNIqs7LMqLOQ16eG/M2rQore26pCimzZXG323+ub+fpWiNMqs8DLzOP+95pZ6PjQy/m+SdZr3+hiYa7W61iy0HUcWloiSUeSnv51S99RGbJv1GZp25txHbr3jR7HoZUVLHR84bRCLMz1OCtjlu44zM6+UUH+QWCOBL1eJytonz23wssM9mtW+8aAPkJ632jHSSv9exXIxr6x0LVvtPe1PnEzPA51vG4qeU6Rpo/InK7+yyLT/vtNeyyg/aGa431jlr69+tWT2g799o2OPgJxeiV8evcRuvZN+j5C12eVDpn2EVm8d3R+VuW0jzBT6b1vctxH6Nw3WXxWpYmRvg0ZrpfudTMzk79xdOYROmTaR2TxvtPZR2SYR6SLayb/XFapVLDS87NUJUT678D5hxACgwYNwtatW3Hw4EF4e3vLHo+OjkaRIkXw66+/olOnTgCA69evo3z58jh+/LjeF5TFxMTAwcEB0dHRsLe3V3w7dFqnyvo52dVVx65UOo6uGMaK87a+ZhnFMRZTe914TDOOsZjSsWasOKZ2rDFO9mPkIn3ztXx95nbAgAFYt24dtm/fjoIFC0rjaB0cHGBjYwMHBwf07t0bQUFBcHJygr29PQYNGoR69epxpgQiIiKid1C+Tm4XLlwIAGjSpImsfMWKFejVqxcAYPbs2TAzM0OnTp2g0Wjg7++Pn376ycgtJSIiIqL8IF8nt/qMmLC2tsaCBQuwYMECI7SIiIiIiPKzt2qeWyIiIiKizDC5JSIiIiKTweSWiIiIiEwGk1siIiIiMhlMbomIiIjIZOTr2RKIiIi0mNrNIohIUTxzS0REREQmg8ktEREREZkMJrdEREREZDKY3BIRERGRyWByS0REREQmg8ktEREREZkMJrdEREREZDKY3BIRERGRyWByS0REREQmg8ktEREREZkMJrdEREREZDKY3BIRERGRyWByS0REREQmg8ktEREREZkMJrdEREREZDKY3BIRERGRyWByS0REREQmg8ktEREREZkMJrdEREREZDKY3BIRERGRyWByS0REREQmg8ktEREREZkMJrdEREREZDKY3BIRERGRyWByS0REREQmg8ktEREREZkM87xuANE7a51K+Tq7CuXrJCIieovwzC0RERERmQwmt0RERERkMkwmuV2wYAE8PDxgbW2NOnXq4NSpU3ndJCIiIiIyMpNIbn/77TcEBQVhwoQJCAkJQdWqVeHv748nT57kddOIiIiIyIhMIrmdNWsW+vbti4CAAFSsWBGLFi1CgQIFsHz58rxuGhEREREZ0Vs/W0JCQgLOnj2LMWPGSGVmZmbw8/PD8ePHda6j0Wig0Wik5ejoaADA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p76PTpw4IcqVK2dwG62trTN8j8TGxooGDRoYHCf93dtS/1LLlJKcnCwmTZokihUrJtRqtXRcjx07VixdulSxOKns7e1FWFiYEELeD9y5c8fgfiCt//3vf0KlUony5cuLxo0biyZNmkh/77//viIxgoODRb169cSBAwfEv//+K6Kjo2V/hkjd/1n9KXksCPH68/mDDz4Qt2/fVrTeVG3atBH+/v5i0qRJwsLCQvzzzz9SXG9v71yJmdt45jYfiYyMhKura4aPu7q64vnz5wbFaNq0KXbs2IHq1asjICAAQ4cOxaZNm3DmzJksf57MqTp16uCXX37JlbpTDR06FG3btsXPP/8s3c87KSkJffr0wVdffYW///5bkTjGmg+yX79+6NevH54+fQobGxvY2dnlShxHR0c8fPhQ64rfc+fOGTzOzthjQjt37oy9e/fiyy+/zNU469evR48ePeDv74+9e/figw8+wI0bN/D48WNF55CeM2cOunXrhm3btuGbb76RxmBv2rRJ+vXFWMqVK6d1gU52WVhYSBcRubi4ICIiAhUqVICDg4MiV/+vWbMG3bt3h6Ojo+ysWWxsLFq0aIEnT57g4MGDBsUw1pCUyZMnY9WqVZgxYwb69u0rlVeuXBlz5sxB7969FY1nZWWl8wzdjRs3UKRIEcXizJw5E8uXL0evXr0UqzO91KEbuTFna17NR/7JJ58gPj4epUuXRoECBbTOeBs6pHD+/Pno378/Nm3ahIULF0p9/65duwz+tSOv8IKyfEStVuPRo0cZdiaPHz9GsWLFDH5zpqSkSAng+vXrcezYMXh7e0tTtCgt9YKlW7duYc6cOYpdsJSWjY0Nzp07pzXO6sqVK/D19ZV+csmJ9He8CQsLM8p8kMYwfPhwnDx5Ehs3bkTZsmUREhKCx48fo0ePHujRo8dbNaPBtGnTMGvWLLRq1UrnT55KzaFZpUoVfPHFFxgwYIA0TZOnpye++OILFC1aVPFx3um9evUKarVaa/sMcebMmQxnUFHqBigffPABevXqha5du6Jv3764ePEiBg8ejDVr1uD58+c4efKkwTGWLl2KIUOG4I8//kCTJk0QFxeHFi1a4NGjRzh06BCKFSumwJbkvjJlymDx4sVo1qyZbCqwa9euoV69egaf5EjPWLMzuLm54fDhw7lyR8RUmc3feunSJa1rGbLr+PHj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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create a Figure\n", + "fig = plt.figure(figsize=(8,3))\n", + "\n", + "# Create a bar plot of name vs grade\n", + "plt.bar(x=df_students.Name, height=df_students.Grade, color='orange')\n", + "\n", + "# Customize the chart\n", + "plt.title('Student Grades')\n", + "plt.xlabel('Student')\n", + "plt.ylabel('Grade')\n", + "plt.grid(color='#95a5a6', linestyle='--', linewidth=2, axis='y', alpha=0.7)\n", + "plt.xticks(rotation=90)\n", + "\n", + "# Show the figure\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A figure can contain multiple subplots, each on its own *axis*.\n", + "\n", + "For example, the following code creates a figure with two subplots: one is a bar chart showing student grades, and the other is a pie chart comparing the number of passing grades to non-passing grades." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\billg\\AppData\\Local\\Temp\\ipykernel_2980\\2786848323.py:7: UserWarning: set_ticklabels() should only be used with a fixed number of ticks, i.e. after set_ticks() or using a FixedLocator.\n", + " ax[0].set_xticklabels(df_students.Name, rotation=90)\n", + "C:\\Users\\billg\\AppData\\Local\\Temp\\ipykernel_2980\\2786848323.py:19: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " fig.show()\n" + ] + }, + { + "data": { + "image/png": "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owNXrlyBXC5HRESEs6dMREREtCAxQCEC0Nvbi8jISEgkEiQnJ2PlypUA7pTtzc/Px/j4OOrr6202mRwbG8PWrVtx4sQJKBQKV06diIiIaEFhgEL0f+3t7di/fz8qKytNPVs8PDzw7LPP4vjx46YEeFseeugh1NTUMEAhIiIimgUGKETTGAwGtLa2AgDkcjkefPBBh85LTU3F4sWLBe95QkRERLSQMUAhcpKUlBRotVooFAqsWbPGot+LEInyRERERAsNq3gRzVJbWxtkMhkaGhqwevVqAEBLS4vZZ1hti4iIiMgxXEEhmiWxWIzu7m4EBgYCAOLi4pCXl2czoZ6IiIiIbBPN/BEismd6jF9WVgaj0ThHsyEiIiKa3xigEDkZFyWJiIiI7h0DFKJZ8vDwsMgxYc4JERER0b1hkjzRLN2+fRuJiYlYvHgxAGBkZASvv/66RRWv7777bi6mR0RERDSvMEAhmqWEhASzv+Pj4+doJkRERETzH6t4ERERERGR22AOChERERERuQ0GKERERERE5DYYoBARERERkdtggEJERERERG6DAQoREREREbkNBihEREREROQ2GKAQEREREZHbYIBCRERERERu43+ZTgHKsJ1YzwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create a figure for 2 subplots (1 row, 2 columns)\n", + "fig, ax = plt.subplots(1, 2, figsize = (10,4))\n", + "\n", + "# Create a bar plot of name vs grade on the first axis\n", + "ax[0].bar(x=df_students.Name, height=df_students.Grade, color='orange')\n", + "ax[0].set_title('Grades')\n", + "ax[0].set_xticklabels(df_students.Name, rotation=90)\n", + "\n", + "# Create a pie chart of pass counts on the second axis\n", + "pass_counts = df_students['Pass'].value_counts()\n", + "ax[1].pie(pass_counts, labels=pass_counts)\n", + "ax[1].set_title('Passing Grades')\n", + "ax[1].legend(pass_counts.keys().tolist())\n", + "\n", + "# Add a title to the Figure\n", + "fig.suptitle('Student Data')\n", + "\n", + "# Show the figure\n", + "fig.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Until now, you've used methods of the `Matplotlib.pyplot` object to plot charts. However, Matplotlib is so foundational to graphics in Python that many packages, including Pandas, provide methods that abstract the underlying Matplotlib functions and simplify plotting. For example, the DataFrame provides its own methods for plotting data as shown in the following example, which plots a bar chart of study hours." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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SPZqedlJAKmT1JUT88MEgIioCNFoNHB3d4eLi4ushXGo6DM1NdXrl382JgBEREWQsbGxIl8CpF4cBEhERKRCTACIiIhUiAkAERGRCjEBICIiUiEmAERERCrEBICIiEiFmAAQERGpEOsAEL3jNBMnFnhfMX68AVtCRP8l7AEgIiJSISYAREREKsQEgIiISIWYABAREakQEwAiIiIVkpwAHDp0CEFBQfDw8IBGo8GWLVteu+/XX38NjUaD8PBwPZpIRERESpOcAKSmpqJq1apYsGDBG/fbvHkzTpw4AQ8PD9mNIyIiIsOQXAcgMDAQgYGBb9znzz//xIABA7B79260aNHijftmZGQgIyNDez85OVlqk4iIiEgixccAZGVloWvXrhg+fDgqVar01v3DwsJgb2+vvZUqVUrpJhEREVEuiicAM2bMgImJCQYOHFig/UePHo2kpCTtLT4+XukmERERUS6KlgI+e/Ys5syZg+joaGg0mgI9x9zcHObm5ko2g4iIiN5C0R6Aw4cP49GjRyhdujRMTExgYmKCu3fvYujQofD09FTyUERERKQHRXsAunbtiqZNm+psCwgIQNeuXdGjRw8lD0VERER6kJwApKSkIDY2Vnv/9u3bOH/+PJycnFC6dGk4Ozvr7G9qago3NzeUK1dO/9YS0TuLqxYSFS2SE4AzZ86gUaNG2vuhoaEAgG7duiEiIkKxhhEREZHhSE4AGjZsCCFEgfe/c+eO1EMQERGRgXEtACIiIhViAkBERKRCTACIiIhUiAkAERGRCjEBICIiUiEmAERERCrEBICIiEiFmAAQERGpEBMAIiIiFWICQEREpEJMAIiIiFSICQAREZEKMQEgIiJSISYAREREKsQEgIiISIWYABAREakQEwAiIiIVYgJARESkQkwAiIiIVIgJABERkQqZFHYDiIiIiirNxIkF3leMH2/AlkjHHgAiIiIVYgJARESkQkwAiIiIVIgJABERkQoxASAiIlIhyQnAoUOHEBQUBA8PD2g0GmzZskX72IsXLzBy5Ej4+fnB2toaHh4eCA4Oxv3795VsMxEREelJcgKQmpqKqlWrYsGCBXkeS0tLQ3R0NMaOHYvo6Ghs2rQJ169fR6tWrRRpLBERESlDch2AwMBABAYG5vuYvb099uzZo7Nt/vz5qF27Nu7du4fSpUvneU5GRgYyMjK095OTk6U2iYiIiCQyeCGgpKQkaDQaODg45Pt4WFgYJkoopEBERCRHUSraU9C26tNOgw4CTE9Px8iRI9GpUyfY2dnlu8/o0aORlJSkvcXHxxuySURERAQD9gC8ePECn332GYQQWLhw4Wv3Mzc3h7m5uaGaQURERPkwSAKQ/eV/9+5d7N+//7W//omIiKhwKJ4AZH/537x5EwcOHICzs7PShyAiIiI9SU4AUlJSEBsbq71/+/ZtnD9/Hk5OTnB3d0f79u0RHR2NHTt2IDMzEwkJCQAAJycnmJmZKddyIiIikk1yAnDmzBk0atRIez80NBQA0K1bN0yYMAHbtm0DAPj7++s878CBA2jYsKH8lhIREZFiJCcADRs2hBDitY+/6TEiIiJ6N3AtACIiIhUyeCGgd92/UWyB9Mf3iYhIWewBICIiUiEmAERERCrEBICIiEiFmAAQERGpEBMAIiIiFWICQEREpEJMAIiIiFSICQAREZEKMQEgIiJSISYAREREKsQEgIiISIWYABAREakQEwAiIiIVYgJARESkQkwAiIiIVIgJABERkQoxASAiIlIhJgBEREQqxASAiIhIhZgAEBERqRATACIiIhViAkBERKRCTACIiIhUSHICcOjQIQQFBcHDwwMajQZbtmzReVwIgXHjxsHd3R2WlpZo2rQpbt68qVR7iYiISAGSE4DU1FRUrVoVCxYsyPfxmTNnYu7cuVi0aBFOnjwJa2trBAQEID09Xe/GEhERkTJMpD4hMDAQgYGB+T4mhEB4eDjGjBmD1q1bAwAiIyPh6uqKLVu2oGPHjvq1loiIiBSh6BiA27dvIyEhAU2bNtVus7e3x/vvv4/jx4/n+5yMjAwkJyfr3IiIiMiwJPcAvElCQgIAwNXVVWe7q6ur9rHcwsLCMHHixALF1xRwPzF+fIH2IyKid1NBz/cAz/lyFfosgNGjRyMpKUl7i4+PL+wmERER/ecpmgC4ubkBAB4+fKiz/eHDh9rHcjM3N4ednZ3OjYiIiAxL0QTAy8sLbm5u2Ldvn3ZbcnIyTp48iTp16ih5KCIiItKD5DEAKSkpiI2N1d6/ffs2zp8/DycnJ5QuXRqDBw/GlClT4OvrCy8vL4wdOxYeHh5o06aNku0mIiIiPUhOAM6cOYNGjRpp74eGhgIAunXrhoiICIwYMQKpqan48ssv8ezZM9SrVw+7du2ChYWFcq0mIiIivUhOABo2bAghxGsf12g0mDRpEiZNmqRXw4iIiMhwCn0WABEREf37mAAQERGpEBMAIiIiFWICQEREpEJMAIiIiFSICQAREZEKMQEgIiJSIUVXA6SihattERGpF3sAiIiIVIgJABERkQoxASAiIlIhjgEwAF5bLxoK+j7xPSo8/FtSHl9TysYeACIiIhViAkBERKRCTACIiIhUiAkAERGRCjEBICIiUiEmAERERCrEBICIiEiFmAAQERGpEAsBESmIxYWIqKhgDwAREZEKMQEgIiJSISYAREREKsQEgIiISIWYABAREamQ4glAZmYmxo4dCy8vL1haWuK9997D5MmTIYRQ+lBEREQkk+LTAGfMmIGFCxdi1apVqFSpEs6cOYMePXrA3t4eAwcOVPpwREREJIPiCcCxY8fQunVrtGjRAgDg6emJtWvX4tSpU/nun5GRgYyMDO395ORkpZtEREREuSieAHz44YdYsmQJbty4gbJly+LChQs4cuQIZs+ene/+YWFhmFjA4ilEREooKgWbiko7qWhSPAEYNWoUkpOTUb58eRgbGyMzMxNTp05Fly5d8t1/9OjRCA0N1d5PTk5GqVKllG4WERER5aB4ArB+/Xr8+OOP+Omnn1CpUiWcP38egwcPhoeHB7p165Znf3Nzc5ibmyvdDCIiInoDxROA4cOHY9SoUejYsSMAwM/PD3fv3kVYWFi+CQARERH9+xSfBpiWlgYjI92wxsbGyMrKUvpQREREJJPiPQBBQUGYOnUqSpcujUqVKuHcuXOYPXs2QkJClD4UERERyaR4AjBv3jyMHTsWffv2xaNHj+Dh4YGvvvoK48aNU/pQREREJJPiCYCtrS3Cw8MRHh6udGgiIiJSCNcCICIiUiEmAERERCrEBICIiEiFmAAQERGpEBMAIiIiFWICQEREpEJMAIiIiFSICQAREZEKMQEgIiJSISYAREREKsQEgIiISIWYABAREakQEwAiIiIVYgJARESkQkwAiIiIVIgJABERkQoxASAiIlIhJgBEREQqxASAiIhIhZgAEBERqRATACIiIhViAkBERKRCTACIiIhUiAkAERGRCjEBICIiUiEmAERERCpkkATgzz//xBdffAFnZ2dYWlrCz88PZ86cMcShiIiISAYTpQM+ffoUdevWRaNGjfDbb7+hePHiuHnzJhwd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KaJu3bqSYxpiaeGJEycKb29vsWbNGmFpaan9PK1bt0588MEHsmLmVLx4ce0XVs6/p99//12ULFlSVkwHBwe9ftzkpuTr+ralqvUtqb57927RrFkzxX5UBAUFiYCAADFp0iRhamqqrf64e/du4evrq8gxiswYADMzM9y9e/e183Pv378PLy8vZGRkFDimIZYYNbSPPvoIPj4+WLp0qbbdL1++RK9evXDr1i0cOnRIcsw1a9Zg69atBi0IooRhw4bh5MmT+OWXX1C2bFlER0fj4cOHCA4ORnBwsKRpS0pOKcxPz549UatWLXz99dd6xcm2bt06BAcHIyAgAL///juaNWuGGzdu4OHDh2jbtq3iNS3S09NhbGycpwu3oM6cOfPa2TVyalUUL15c+7dZtmxZzJs3DwEBAbh27Rpq1KghadT2hg0b0LVrV/z888869QNSUlLQvHlzPHr0CAcPHpS0MIySSwtn8/HxweLFi9GkSROdMUrXrl1DnTp18PTpU8kxczLELAM3NzccPnxYdg2J3N70usbExOQZZ1SYHB0dkZaWhpcvX8LKyirP347Uad/37t1D3759ER8fj4EDB6Jnz54AgCFDhiAzM/OtS5oXRJFJAIyNjZGQkIDixYvn+/jDhw/h4eGhzApJCsoetX7r1i2Eh4fLHrWezdLSEufOncszKObKlSuoWbMm0tLSChQnd4nN2NhYvcqY/hvlO58/f45+/fohIiICmZmZMDExQWZmJjp37oyIiAgYGxvLimsIYWFhmD17Nlq0aJHvtVCp66JXqVIFX331Ffr166f9MvDy8sJXX30Fd3d3vcaAKD0S3BDJSrNmzdC9e3d07twZvXv3xsWLFzFw4ECsXr0aT58+xcmTJyXFW7ZsGQYNGoRff/0VDRs2RGpqKpo3b46EhARERUXptSqcUiwtLXHt2jWUKVNGJwG4cuUKateurfeU36SkJLRv3x5nzpzB33//DQ8PD+0sg507d8qarhoWFoYHDx4o8uWUn7///htr167FsmXLcPbsWcnn++PHj+PJkyfasS4AEBkZifHjxyM1NRVt2rTBvHnztJUIpTD0jwpDKDKDAIUQ6N69+2vfGCm//HN69uwZli9fjqtXrwJ4VW8+JCREkapOuUetT5kyBS4uLrhw4QKWL18uadR6Njs7O9y7dy9PAhAfH68zkOdtlC500bp1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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df_students.plot.bar(x='Name', y='StudyHours', color='teal', figsize=(6,4))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting started with statistical analysis\n", + "\n", + "Now that you know how to use Python to manipulate and visualize data, you can start analyzing it.\n", + "\n", + "A lot of data science is rooted in *statistics*, so we'll explore some basic statistical techniques.\n", + "\n", + "> **Note**: This section is not intended to teach you statistics; that's much too big a topic for this notebook. It will, however, introduce you to some statistical concepts and techniques that data scientists use as they explore data in preparation for machine learning modeling.\n", + "\n", + "### Descriptive statistics and data distribution\n", + "\n", + "When examining a *variable* (for example, a sample of student grades), data scientists are particularly interested in its *distribution* (in other words, how all the different grade values are spread across the sample). The starting point for this exploration is often to visualize the data as a histogram and see how frequently each value for the variable occurs.\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\billg\\AppData\\Local\\Temp\\ipykernel_2980\\4182697007.py:16: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " fig.show()\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAGJCAYAAAC90mOkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA45UlEQVR4nO3deXwV1f3/8feFkBsguQkISVgCiYIssgeV4BKUJSxSIq3SFBuWoKCgQVwqVEXk0QbkCwUVWbSEWkUQK6gIhjRssimrLCqLLGFJggrkkiiXmDu/P/x56zXLJJckNyGv5+Mxj3bOnJn5DD22vHtmzrUYhmEIAAAAAFCkGt4uAAAAAAAqO4ITAAAAAJggOAEAAACACYITAAAAAJggOAEAAACACYITAAAAAJggOAEAAACACYITAAAAAJggOAEAAACACYITAOCaMXz4cIWHh1fIvcLDwzV8+HDX/uLFi2WxWLRz584KuX+PHj3Uo0ePCrkXAIDgBADVwi9/qf9l8/PzU+PGjRUTE6OXX35Zly5d8vjaW7du1QsvvKCLFy+WXcGSXnjhBbea69Spo2bNmmngwIFKTk6Ww+Eok/t8+eWXeuGFF3TixIkyuV5Zqsy1AUB14+PtAgAAFefFF19URESE8vLylJmZqQ0bNmj8+PGaNWuWPvzwQ3Xo0KHU19y6daumTJmi4cOHKygoqMxrnjdvnvz9/eVwOHTmzBmlpKRo5MiRmj17tlatWqWwsDBX39dff11Op7NU1//yyy81ZcoU9ejRo1SzVYcOHVKNGuX7/z8WV9vatWvL9d4AAHcEJwCoRvr166euXbu69idOnKh169bpnnvu0e9+9zt99dVXql27thcrLOgPf/iDGjRo4Np//vnn9fbbbys+Pl733Xeftm/f7jpWq1atcq3FMAxdvnxZtWvXltVqLdd7mfH19fXq/QGguuFVPQCo5u6++24999xzOnnypN566y1X+759+zR8+HBdf/318vPzU2hoqEaOHKnvv//e1eeFF17QU089JUmKiIhwvVb3y6tlycnJuvvuuxUcHCyr1aq2bdtq3rx5V13z0KFDNWrUKH322WdKTU11tRf2jdPSpUsVGRmpgIAA2Ww2tW/fXnPmzJH08yuM9913nyTprrvuctW/YcMGST9/x3TPPfcoJSVFXbt2Ve3atbVgwQLXsV9/4/SLH374QaNHj9Z1110nm82m+Ph4Xbhwwa2PxWLRCy+8UODcX1/TrLbCvnE6d+6cEhISFBISIj8/P3Xs2FH/+te/3PqcOHFCFotF//d//6eFCxfqhhtukNVq1c0336wdO3YU+ucNAGDGCQAg6c9//rMmTZqktWvX6sEHH5Qkpaam6tixYxoxYoRCQ0N18OBBLVy4UAcPHtT27dtlsVg0ePBgHT58WO+8847+8Y9/uGaGGjZsKOnn1+xuuukm/e53v5OPj48++ugjPfLII3I6nRo7duxV17xw4UKtXbtWvXv3LrRPamqq4uLi1LNnT02fPl2S9NVXX2nLli1KTEzUnXfeqccee0wvv/yyJk2apDZt2kiS61+ln1/Ji4uL0+jRo/Xggw+qVatWxdY1btw4BQUF6YUXXtChQ4c0b948nTx5Uhs2bJDFYinx85Wktl/78ccf1aNHDx09elTjxo1TRESEli9fruHDh+vixYtKTEx0679kyRJdunRJo0ePlsVi0UsvvaTBgwfr2LFj5T5zBwBVEcEJAKCmTZsqMDBQ33zzjavtkUce0RNPPOHWr1u3boqLi9PmzZt1xx13qEOHDurSpYveeecdxcbGFpjt2bhxo9urf+PGjVPfvn01a9asqw5O7dq1kyS3mn/r448/ls1mU0pKimrWrFng+PXXX6877rhDL7/8snr37l3oKnVHjx7VJ598opiYmBLV5evrq7S0NFf4aN68uZ5++ml99NFH+t3vfleia5S0tl9buHChvvrqK7311lsaOnSoJGnMmDGKjo7Ws88+q5EjRyogIMDVPz09XUeOHFG9evUkSa1atdKgQYOUkpKie+65p8R1AkB1wat6AABJkr+/v9vqer8OPJcvX9Z3332nbt26SZJ2795domv++hrZ2dn67rvvFB0drWPHjik7O/uq65VU7IqAQUFBys3NdXudr7QiIiJKHJok6aGHHnKbsXn44Yfl4+Oj1atXe1xDSaxevVqhoaGKi4tztdWqVUuPPfaYcnJytHHjRrf+Q4YMcYUmSbrjjjskSceOHSvXOgGgqiI4AQAkSTk5OW4zEufPn1diYqJCQkJUu3ZtNWzYUBEREZJU4tCzZcsW9erVS3Xr1lVQUJAaNmyoSZMmleoaxdUrya3m33rkkUd04403ql+/fmratKlGjhypTz75pFT3+eWZS6ply5Zu+/7+/mrUqFG5Lyl+8uRJtWzZssBKf7+82nfy5Em39mbNmrnt/xKifvs9FgDgZ7yqBwDQ6dOnlZ2drRYtWrja7r//fm3dulVPPfWUOnXqJH9/fzmdTvXt27dES35/88036tmzp1q3bq1Zs2YpLCxMvr6+Wr16tf7xj3+Uetnw3zpw4IAkudX8W8HBwdq7d69SUlK0Zs0arVmzRsnJyYqPjy+waEJRKnKVwfz8/Aq7V2GvLko/rxwIACiI4AQA0L///W9Jcr2SduHCBaWlpWnKlCl6/vnnXf2OHDlS4NyiFjz46KOP5HA49OGHH7rNbqxfv75cai6Kr6+vBg4cqIEDB8rpdOqRRx7RggUL9Nxzz6lFixalWrChJI4cOaK77rrLtZ+Tk6OMjAz179/f1VavXr0CPxh85coVZWRkuLWVprbmzZtr3759cjqdbrNOX3/9tes4AMBzvKoHANXcunXrNHXqVEVERLgWFfhlNuK3sw+zZ88ucH7dunUlqUAQKOwa2dnZSk5OvuqalyxZojfeeENRUVHq2bNnkf1+vXS6JNWoUcP1I78Oh6PY+j21cOFC5eXlufbnzZunn376Sf369XO13XDDDdq0aVOB834741Sa2vr376/MzEwtW7bM1fbTTz/plVdekb+/v6Kjoz15HADA/8eMEwBUI2vWrNHXX3+tn376SVlZWVq3bp1SU1PVvHlzffjhh/Lz85Mk2Ww23XnnnXrppZeUl5enJk2aaO3atTp+/HiBa0ZGRkqS/vrXv+qPf/yjatWqpYEDB6pPnz6u2Z7Ro0crJydHr7/+uoKDgwvMrBTnvffek7+/v65cuaIzZ84oJSVFW7ZsUceOHbV8+fJizx01apTOnz+vu+++W02bNtXJkyf1yiuvqFOnTq5vfzp16qSaNWtq+vTpys7OltVqdf32lCeuXLminj176v7779ehQ4f02muv6fbbb3dbUW/UqFEaM2aMfv/736t379764osvlJKS4vZDv6Wt7aGHHtKCBQs0fPhw7dq1S+Hh4Xrvvfe0ZcsWzZ49u9hvwQAAJWAAAK55ycnJhiTX5uvra4SGhhq9e/c25syZY9jt9gLnnD592rj33nuNoKAgIzAw0LjvvvuMs2fPGpKMyZMnu/WdOnWq0aRJE6NGjRqGJOP48eOGYRjGhx9+aHTo0MHw8/MzwsPDjenTpxuLFi1y61OUyZMnu9Xs5+dnNG3a1LjnnnuMRYsWGZcvXy5wzrBhw4zmzZu79t977z2jT58+RnBwsOHr62s0a9bMGD16tJGRkeF23uuvv25cf/31Rs2aNQ1Jxvr16w3DMIzmzZsbAwYMKLS+5s2bG8OGDSvwZ7xx40bjoYceMurVq2f4+/sbQ4cONb7//nu3c/Pz842//OUvRoMGDYw6deoYMTExxtGjRwtcs7jaoqOjjejoaLe+WVlZxogRI4wGDRoYvr6+Rvv27Y3k5GS3PsePHzckGTNmzCjwTIX9ZwsA+JnFMPgKFAAAAACKwzdOAAAAAGCC4AQAAAAAJghOAAAAAGCC4AQAAAAAJghOAAAAAGCC4AQAAAAAJqrdD+A6nU6dPXtWAQEBslgs3i4HAAAAgJcYhqFLly6pcePGqlGj+Dmlaheczp49q7CwMG+XAQAAAKCSOHXqlJo2bVpsn2oXnAICAiT9/Idjs9m8XA0AAAAAb7Hb7QoLC3NlhOJUu+D0y+t5NpuN4AQAAACgRJ/wsDgEAAAAAJggOAEAAACACYITAAAAAJggOAEAAACACYITAAAAAJggOAEAAACACYITAAAAAJioNMFp2rRpslgsGj9+fLH9li9frtatW8vPz0/t27fX6tWrK6ZAAAAAANVWpQhOO3bs0IIFC9ShQ4di+23dulVxcXFKSEjQnj17FBsbq9jYWB04cKCCKgUAAABQHXk9OOXk5Gjo0KF6/fXXVa9evWL7zpkzR3379tVTTz2lNm3aaOrUqerSpYteffXVCqoWAAAAQHXk9eA0duxYDRgwQL169TLtu23btgL9YmJitG3btiLPcTgcstvtbhsAAAAAlIaPN2++dOlS7d69Wzt27ChR/8zMTIWEhLi1hYSEKDMzs8hzkpKSNGXKlKuqEwCqsvBnPvZ2CahiTkwb4O0SAKDS8dqM06lTp5SYmKi3335bfn5+5XafiRMnKjs727WdOnWq3O4FAAAA4NrktRmnXbt26dy5c+rSpYurLT8/X5s2bdKrr74qh8OhmjVrup0TGhqqrKwst7asrCyFhoYWeR+r1Sqr1Vq2xQMAAACoVrw249SzZ0/t379fe/fudW1du3bV0KFDtXfv3gKhSZKioqKUlpbm1paamqqoqKiKKhsAAABANeS1GaeAgAC1a9fOra1u3bq67rrrXO3x8fFq0qSJkpKSJEmJiYmKjo7WzJkzNWDAAC1dulQ7d+7UwoULK7x+AAAAANWH11fVK056eroyMjJc+927d9eSJUu0cOFCdezYUe+9955WrlxZIIABAAAAQFmyGIZheLuIimS32xUYGKjs7GzZbDZvlwMA5Y5V9VBarKoHoLooTTao1DNOAAAAAFAZEJwAAAAAwATBCQAAAABMEJwAAAAAwATBCQAAAABMEJwAAAAAwATBCQAAAABMEJwAAAAAwATBCQAAAABMEJwAAAAAwATBCQAAAABMEJwAAAAAwATBCQAAAABMEJwAAAAAwATBCQAAAABMEJwAAAAAwATBCQAAAABMEJwAAAAAwATBCQAAAABMEJwAAAAAwATBCQAAAABMEJwAAAAAwATBCQAAAABMEJwAAAAAwATBCQAAAABMEJwAAAAAwIRXg9O8efPUoUMH2Ww22Ww2RUVFac2aNUX2X7x4sSwWi9vm5+dXgRUDAAAAqI58vHnzpk2batq0aWrZsqUMw9C//vUvDRo0SHv27NFNN91U6Dk2m02HDh1y7VsslooqFwAAAEA15dXgNHDgQLf9v/3tb5o3b562b99eZHCyWCwKDQ2tiPIAAAAAQFIl+sYpPz9fS5cuVW5urqKioorsl5OTo+bNmyssLEyDBg3SwYMHi72uw+GQ3W532wAAAACgNLwenPbv3y9/f39ZrVaNGTNGK1asUNu2bQvt26pVKy1atEgffPCB3nrrLTmdTnXv3l2nT58u8vpJSUkKDAx0bWFhYeX1KAAAAACuURbDMAxvFnDlyhWlp6crOztb7733nt544w1t3LixyPD0a3l5eWrTpo3i4uI0derUQvs4HA45HA7Xvt1uV1hYmLKzs2Wz2crsOQCgsgp/5mNvl4Aq5sS0Ad4uAQAqhN1uV2BgYImygVe/cZIkX19ftWjRQpIUGRmpHTt2aM6cOVqwYIHpubVq1VLnzp119OjRIvtYrVZZrdYyqxcAAABA9eP1V/V+y+l0us0QFSc/P1/79+9Xo0aNyrkqAAAAANWZV2ecJk6cqH79+qlZs2a6dOmSlixZog0bNiglJUWSFB8fryZNmigpKUmS9OKLL6pbt25q0aKFLl68qBkzZujkyZMaNWqUNx8DAAAAwDXOq8Hp3Llzio+PV0ZGhgIDA9WhQwelpKSod+/ekqT09HTVqPG/SbELFy7owQcfVGZmpurVq6fIyEht3bq1RN9DAQAAAICnvL44REUrzQdgAHAtYHEIlBaLQwCoLkqTDSrdN04AAAAAUNkQnAAAAADABMEJAAAAAEwQnAAAAADABMEJAAAAAEwQnAAAAADABMEJAAAAAEwQnAAAAADABMEJAAAAAEwQnAAAAADABMEJAAAAAEwQnAAAAADABMEJAAAAAEwQnAAAAADABMEJAAAAAEwQnAAAAADABMEJAAAAAEwQnAAAAADABMEJAAAAAEwQnAAAAADABMEJAAAAAEwQnAAAAADABMEJAAAAAEwQnAAAAADABMEJAAAAAEwQnAAAAADAhFeD07x589ShQwfZbDbZbDZFRUVpzZo1xZ6zfPlytW7dWn5+fmrfvr1Wr15dQdUCAAAAqK68GpyaNm2qadOmadeuXdq5c6fuvvtuDRo0SAcPHiy0/9atWxUXF6eEhATt2bNHsbGxio2N1YEDByq4cgAAAADVicUwDMPbRfxa/fr1NWPGDCUkJBQ4NmTIEOXm5mrVqlWutm7duqlTp06aP39+ia5vt9sVGBio7Oxs2Wy2MqsbACqr8Gc+9nYJqGJOTBvg7RIAoEKUJhtUmm+c8vPztXTpUuXm5ioqKqrQPtu2bVOvXr3c2mJiYrRt27Yir+twOGS32902AAAAACgNH28XsH//fkVFReny5cvy9/fXihUr1LZt20L7ZmZmKiQkxK0tJCREmZmZRV4/KSlJU6ZMKdOaAVROzKwAZYN/lorGbBxQfXl9xqlVq1bau3evPvvsMz388MMaNmyYvvzyyzK7/sSJE5Wdne3aTp06VWbXBgAAAFA9eH3GydfXVy1atJAkRUZGaseOHZozZ44WLFhQoG9oaKiysrLc2rKyshQaGlrk9a1Wq6xWa9kWDQAAAKBa8fqM0285nU45HI5Cj0VFRSktLc2tLTU1tchvogAAAACgLHh1xmnixInq16+fmjVrpkuXLmnJkiXasGGDUlJSJEnx8fFq0qSJkpKSJEmJiYmKjo7WzJkzNWDAAC1dulQ7d+7UwoULvfkYAAAAAK5xXg1O586dU3x8vDIyMhQYGKgOHTooJSVFvXv3liSlp6erRo3/TYp1795dS5Ys0bPPPqtJkyapZcuWWrlypdq1a+etRwAAAABQDVS633Eqb/yOE3DtYiUwAOWNVfWAa0uV/B0nAAAAAKisCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmvBqckpKSdPPNNysgIEDBwcGKjY3VoUOHij1n8eLFslgsbpufn18FVQwAAACgOvIoOB07dqxMbr5x40aNHTtW27dvV2pqqvLy8tSnTx/l5uYWe57NZlNGRoZrO3nyZJnUAwAAAACF8fHkpBYtWig6OloJCQn6wx/+4PGMzyeffOK2v3jxYgUHB2vXrl268847izzPYrEoNDTUo3sCAAAAQGl5NOO0e/dudejQQRMmTFBoaKhGjx6tzz///KqLyc7OliTVr1+/2H45OTlq3ry5wsLCNGjQIB08eLDIvg6HQ3a73W0DAAAAgNLwKDh16tRJc+bM0dmzZ7Vo0SJlZGTo9ttvV7t27TRr1ix9++23pb6m0+nU+PHjddttt6ldu3ZF9mvVqpUWLVqkDz74QG+99ZacTqe6d++u06dPF9o/KSlJgYGBri0sLKzUtQEAAACo3iyGYRhXexGHw6HXXntNEydO1JUrV+Tr66v7779f06dPV6NGjUp0jYcfflhr1qzR5s2b1bRp0xLfOy8vT23atFFcXJymTp1aaG0Oh8O1b7fbFRYWpuzsbNlsthLfB0DlF/7Mx94uAcA17sS0Ad4uAUAZstvtCgwMLFE2uKpV9Xbu3KlHHnlEjRo10qxZs/Tkk0/qm2++UWpqqs6ePatBgwaV6Drjxo3TqlWrtH79+lKFJkmqVauWOnfurKNHjxZ63Gq1ymazuW0AAAAAUBoeLQ4xa9YsJScn69ChQ+rfv7/efPNN9e/fXzVq/JzDIiIitHjxYoWHhxd7HcMw9Oijj2rFihXasGGDIiIiSl1Lfn6+9u/fr/79+3vyKAAAAABgyqPgNG/ePI0cOVLDhw8v8lW84OBg/fOf/yz2OmPHjtWSJUv0wQcfKCAgQJmZmZKkwMBA1a5dW5IUHx+vJk2aKCkpSZL04osvqlu3bmrRooUuXryoGTNm6OTJkxo1apQnjwIAAAAApjwKTkeOHDHt4+vrq2HDhhXbZ968eZKkHj16uLUnJydr+PDhkqT09HTXTJYkXbhwQQ8++KAyMzNVr149RUZGauvWrWrbtm3pHgIAAAAASsijxSGSk5Pl7++v++67z619+fLl+uGHH0wDkzeV5gMwAFULi0MAKG8sDgFcW8p9cYikpCQ1aNCgQHtwcLD+/ve/e3JJAAAAAKi0PApO6enphS7k0Lx5c6Wnp191UQAAAABQmXgUnIKDg7Vv374C7V988YWuu+66qy4KAAAAACoTj4JTXFycHnvsMa1fv175+fnKz8/XunXrlJiYqD/+8Y9lXSMAAAAAeJVHq+pNnTpVJ06cUM+ePeXj8/MlnE6n4uPj+cYJAAAAwDXHo+Dk6+urZcuWaerUqfriiy9Uu3ZttW/fXs2bNy/r+gAAAADA6zwKTr+48cYbdeONN5ZVLQAAAABQKXkUnPLz87V48WKlpaXp3LlzcjqdbsfXrVtXJsUBAAAAQGXgUXBKTEzU4sWLNWDAALVr104Wi6Ws6wIAAACASsOj4LR06VK9++676t+/f1nXAwAAAACVjkfLkfv6+qpFixZlXQsAAAAAVEoeBacnnnhCc+bMkWEYZV0PAAAAAFQ6Hr2qt3nzZq1fv15r1qzRTTfdpFq1arkdf//998ukOAAAAACoDDwKTkFBQbr33nvLuhYAAAAAqJQ8Ck7JycllXQcAAAAAVFoefeMkST/99JP++9//asGCBbp06ZIk6ezZs8rJySmz4gAAAACgMvBoxunkyZPq27ev0tPT5XA41Lt3bwUEBGj69OlyOByaP39+WdcJAAAAAF7j0YxTYmKiunbtqgsXLqh27dqu9nvvvVdpaWllVhwAAAAAVAYezTh9+umn2rp1q3x9fd3aw8PDdebMmTIpDAAAAAAqC49mnJxOp/Lz8wu0nz59WgEBAVddFAAAAABUJh4Fpz59+mj27NmufYvFopycHE2ePFn9+/cvq9oAAAAAoFLw6FW9mTNnKiYmRm3bttXly5f1pz/9SUeOHFGDBg30zjvvlHWNAAAAAOBVHgWnpk2b6osvvtDSpUu1b98+5eTkKCEhQUOHDnVbLAIAAAAArgUeBSdJ8vHx0QMPPFCWtQAAAABApeRRcHrzzTeLPR4fH+9RMQAAAABQGXkUnBITE9328/Ly9MMPP8jX11d16tQhOAEAAAC4pni0qt6FCxfctpycHB06dEi33357qRaHSEpK0s0336yAgAAFBwcrNjZWhw4dMj1v+fLlat26tfz8/NS+fXutXr3ak8cAAAAAgBLxKDgVpmXLlpo2bVqB2ajibNy4UWPHjtX27duVmpqqvLw89enTR7m5uUWes3XrVsXFxSkhIUF79uxRbGysYmNjdeDAgbJ4DAAAAAAowGIYhlFWF9u7d6/uvPNO2e12j87/9ttvFRwcrI0bN+rOO+8stM+QIUOUm5urVatWudq6deumTp06af78+ab3sNvtCgwMVHZ2tmw2m0d1Aqicwp/52NslALjGnZg2wNslAChDpckGHn3j9OGHH7rtG4ahjIwMvfrqq7rttts8uaQkKTs7W5JUv379Ivts27ZNEyZMcGuLiYnRypUrC+3vcDjkcDhc+56GOgAAAADVl0fBKTY21m3fYrGoYcOGuvvuuzVz5kyPCnE6nRo/frxuu+02tWvXrsh+mZmZCgkJcWsLCQlRZmZmof2TkpI0ZcoUj2oCKiNmVQDAe/jv4MIxE4fqwKPg5HQ6y7oOjR07VgcOHNDmzZvL9LoTJ050m6Gy2+0KCwsr03sAAAAAuLZ5/AO4ZWncuHFatWqVNm3apKZNmxbbNzQ0VFlZWW5tWVlZCg0NLbS/1WqV1Wots1oBAAAAVD8eBafffmNUnFmzZhV5zDAMPfroo1qxYoU2bNigiIgI0+tFRUUpLS1N48ePd7WlpqYqKiqqxDUBAAAAQGl4FJz27NmjPXv2KC8vT61atZIkHT58WDVr1lSXLl1c/SwWS7HXGTt2rJYsWaIPPvhAAQEBru+UAgMDVbt2bUlSfHy8mjRpoqSkJEk///hudHS0Zs6cqQEDBmjp0qXauXOnFi5c6MmjAAAAAIApj4LTwIEDFRAQoH/961+qV6+epJ9/FHfEiBG644479MQTT5ToOvPmzZMk9ejRw609OTlZw4cPlySlp6erRo3//dxU9+7dtWTJEj377LOaNGmSWrZsqZUrVxa7oAQAAAAAXA2PfsepSZMmWrt2rW666Sa39gMHDqhPnz46e/ZsmRVY1vgdJ1R1rOgEAKhsWFUPVVVpskGNYo8Wc4Nvv/22QPu3336rS5cueXJJAAAAAKi0PApO9957r0aMGKH3339fp0+f1unTp/Wf//xHCQkJGjx4cFnXCAAAAABe5dE3TvPnz9eTTz6pP/3pT8rLy/v5Qj4+SkhI0IwZM8q0QAAAAADwNo+CU506dfTaa69pxowZ+uabbyRJN9xwg+rWrVumxQEAAABAZeDRq3q/yMjIUEZGhlq2bKm6devKg3UmAAAAAKDS8yg4ff/99+rZs6duvPFG9e/fXxkZGZKkhISEEi9FDgAAAABVhUfB6fHHH1etWrWUnp6uOnXquNqHDBmiTz75pMyKAwAAAIDKwKNvnNauXauUlBQ1bdrUrb1ly5Y6efJkmRQGAAAAAJWFRzNOubm5bjNNvzh//rysVutVFwUAAAAAlYlHwemOO+7Qm2++6dq3WCxyOp166aWXdNddd5VZcQAAAABQGXj0qt5LL72knj17aufOnbpy5YqefvppHTx4UOfPn9eWLVvKukYAAAAA8CqPZpzatWunw4cP6/bbb9egQYOUm5urwYMHa8+ePbrhhhvKukYAAAAA8KpSzzjl5eWpb9++mj9/vv7617+WR00AAAAAUKmUesapVq1a2rdvX3nUAgAAAACVkkev6j3wwAP65z//Wda1AAAAAECl5NHiED/99JMWLVqk//73v4qMjFTdunXdjs+aNatMigMAAACAyqBUwenYsWMKDw/XgQMH1KVLF0nS4cOH3fpYLJayqw4AAAAAKoFSBaeWLVsqIyND69evlyQNGTJEL7/8skJCQsqlOAAAAACoDEr1jZNhGG77a9asUW5ubpkWBAAAAACVjUeLQ/zit0EKAAAAAK5FpQpOFoulwDdMfNMEAAAA4FpXqm+cDMPQ8OHDZbVaJUmXL1/WmDFjCqyq9/7775ddhQAAAADgZaUKTsOGDXPbf+CBB8q0GAAAAACojEoVnJKTk8urDgAAAACotK5qcQgAAAAAqA4ITgAAAABgwqvBadOmTRo4cKAaN24si8WilStXFtt/w4YNrpX9fr1lZmZWTMEAAAAAqiWvBqfc3Fx17NhRc+fOLdV5hw4dUkZGhmsLDg4upwoBAAAAoJSLQ5S1fv36qV+/fqU+Lzg4WEFBQWVfEAAAAAAUokp+49SpUyc1atRIvXv31pYtW4rt63A4ZLfb3TYAAAAAKI0qFZwaNWqk+fPn6z//+Y/+85//KCwsTD169NDu3buLPCcpKUmBgYGuLSwsrAIrBgAAAHAtsBiGYXi7CEmyWCxasWKFYmNjS3VedHS0mjVrpn//+9+FHnc4HHI4HK59u92usLAwZWdny2azXU3JgFeEP/Oxt0sAAMDNiWkDvF0C4BG73a7AwMASZQOvfuNUFm655RZt3ry5yONWq1VWq7UCKwIAAABwralSr+oVZu/evWrUqJG3ywAAAABwDfPqjFNOTo6OHj3q2j9+/Lj27t2r+vXrq1mzZpo4caLOnDmjN998U5I0e/ZsRURE6KabbtLly5f1xhtvaN26dVq7dq23HgEAAABANeDV4LRz507dddddrv0JEyZIkoYNG6bFixcrIyND6enpruNXrlzRE088oTNnzqhOnTrq0KGD/vvf/7pdAwAAAADKWqVZHKKilOYDMKAyYnEIAEBlw+IQqKpKkw2q/DdOAAAAAFDeCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmCE4AAAAAYILgBAAAAAAmvBqcNm3apIEDB6px48ayWCxauXKl6TkbNmxQly5dZLVa1aJFCy1evLjc6wQAAABQvXk1OOXm5qpjx46aO3duifofP35cAwYM0F133aW9e/dq/PjxGjVqlFJSUsq5UgAAAADVmY83b96vXz/169evxP3nz5+viIgIzZw5U5LUpk0bbd68Wf/4xz8UExNTXmUCAAAAqOaq1DdO27ZtU69evdzaYmJitG3btiLPcTgcstvtbhsAAAAAlIZXZ5xKKzMzUyEhIW5tISEhstvt+vHHH1W7du0C5yQlJWnKlCkVVaJHwp/52NslAAAAeIy/y6C0Tkwb4O0SSq1KzTh5YuLEicrOznZtp06d8nZJAAAAAKqYKjXjFBoaqqysLLe2rKws2Wy2QmebJMlqtcpqtVZEeQAAAACuUVVqxikqKkppaWlubampqYqKivJSRQAAAACqA68Gp5ycHO3du1d79+6V9PNy43v37lV6erqkn1+zi4+Pd/UfM2aMjh07pqefflpff/21XnvtNb377rt6/PHHvVE+AAAAgGrCq8Fp586d6ty5szp37ixJmjBhgjp37qznn39ekpSRkeEKUZIUERGhjz/+WKmpqerYsaNmzpypN954g6XIAQAAAJQri2EYhreLqEh2u12BgYHKzs6WzWbzdjmSWIkGAAAA1UtlWVWvNNmgSn3jBAAAAADeQHACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABOVIjjNnTtX4eHh8vPz06233qrPP/+8yL6LFy+WxWJx2/z8/CqwWgAAAADVjdeD07JlyzRhwgRNnjxZu3fvVseOHRUTE6Nz584VeY7NZlNGRoZrO3nyZAVWDAAAAKC68XpwmjVrlh588EGNGDFCbdu21fz581WnTh0tWrSoyHMsFotCQ0NdW0hISAVWDAAAAKC68WpwunLlinbt2qVevXq52mrUqKFevXpp27ZtRZ6Xk5Oj5s2bKywsTIMGDdLBgweL7OtwOGS32902AAAAACgNrwan7777Tvn5+QVmjEJCQpSZmVnoOa1atdKiRYv0wQcf6K233pLT6VT37t11+vTpQvsnJSUpMDDQtYWFhZX5cwAAAAC4tnn9Vb3SioqKUnx8vDp16qTo6Gi9//77atiwoRYsWFBo/4kTJyo7O9u1nTp1qoIrBgAAAFDV+Xjz5g0aNFDNmjWVlZXl1p6VlaXQ0NASXaNWrVrq3Lmzjh49Wuhxq9Uqq9V61bUCAAAAqL68OuPk6+uryMhIpaWludqcTqfS0tIUFRVVomvk5+dr//79atSoUXmVCQAAAKCa8+qMkyRNmDBBw4YNU9euXXXLLbdo9uzZys3N1YgRIyRJ8fHxatKkiZKSkiRJL774orp166YWLVro4sWLmjFjhk6ePKlRo0Z58zEAAAAAXMO8HpyGDBmib7/9Vs8//7wyMzPVqVMnffLJJ64FI9LT01Wjxv8mxi5cuKAHH3xQmZmZqlevniIjI7V161a1bdvWW48AAAAA4BpnMQzD8HYRFclutyswMFDZ2dmy2WzeLkeSFP7Mx94uAQAAAKgwJ6YN8HYJkkqXDarcqnoAAAAAUNEITgAAAABgguAEAAAAACYITgAAAABgguAEAAAAACYITgAAAABgguAEAAAAACYITgAAAABgguAEAAAAACYITgAAAABgguAEAAAAACYITgAAAABgguAEAAAAACYITgAAAABgguAEAAAAACYITgAAAABgguAEAAAAACYITgAAAABgguAEAAAAACYITgAAAABgguAEAAAAACYITgAAAABgguAEAAAAACYITgAAAABgguAEAAAAACYITgAAAABgolIEp7lz5yo8PFx+fn669dZb9fnnnxfbf/ny5WrdurX8/PzUvn17rV69uoIqBQAAAFAdeT04LVu2TBMmTNDkyZO1e/dudezYUTExMTp37lyh/bdu3aq4uDglJCRoz549io2NVWxsrA4cOFDBlQMAAACoLiyGYRjeLODWW2/VzTffrFdffVWS5HQ6FRYWpkcffVTPPPNMgf5DhgxRbm6uVq1a5Wrr1q2bOnXqpPnz55vez263KzAwUNnZ2bLZbGX3IFch/JmPvV0CAAAAUGFOTBvg7RIklS4b+FRQTYW6cuWKdu3apYkTJ7raatSooV69emnbtm2FnrNt2zZNmDDBrS0mJkYrV64stL/D4ZDD4XDtZ2dnS/r5D6mycDp+8HYJAAAAQIWpLH8X/6WOkswleTU4fffdd8rPz1dISIhbe0hIiL7++utCz8nMzCy0f2ZmZqH9k5KSNGXKlALtYWFhHlYNAAAA4GoEzvZ2Be4uXbqkwMDAYvt4NThVhIkTJ7rNUDmdTp0/f17XXXedLBZLia5ht9sVFhamU6dOVZrX+1D1Ma5QHhhXKA+MK5QHxhXKQ2nHlWEYunTpkho3bmza16vBqUGDBqpZs6aysrLc2rOyshQaGlroOaGhoaXqb7VaZbVa3dqCgoI8qtdms/EPNsoc4wrlgXGF8sC4QnlgXKE8lGZcmc00/cKrq+r5+voqMjJSaWlprjan06m0tDRFRUUVek5UVJRbf0lKTU0tsj8AAAAAXC2vv6o3YcIEDRs2TF27dtUtt9yi2bNnKzc3VyNGjJAkxcfHq0mTJkpKSpIkJSYmKjo6WjNnztSAAQO0dOlS7dy5UwsXLvTmYwAAAAC4hnk9OA0ZMkTffvutnn/+eWVmZqpTp0765JNPXAtApKenq0aN/02Mde/eXUuWLNGzzz6rSZMmqWXLllq5cqXatWtXbjVarVZNnjy5wCt/wNVgXKE8MK5QHhhXKA+MK5SH8hxXXv8dJwAAAACo7Lz6jRMAAAAAVAUEJwAAAAAwQXACAAAAABMEJwAAAAAwQXAqgblz5yo8PFx+fn669dZb9fnnn3u7JFQRSUlJuvnmmxUQEKDg4GDFxsbq0KFDbn0uX76ssWPH6rrrrpO/v79+//vfF/iRZ6A406ZNk8Vi0fjx411tjCt44syZM3rggQd03XXXqXbt2mrfvr127tzpOm4Yhp5//nk1atRItWvXVq9evXTkyBEvVozKLj8/X88995wiIiJUu3Zt3XDDDZo6dap+vTYZ4wpmNm3apIEDB6px48ayWCxauXKl2/GSjKHz589r6NChstlsCgoKUkJCgnJyckpVB8HJxLJlyzRhwgRNnjxZu3fvVseOHRUTE6Nz5855uzRUARs3btTYsWO1fft2paamKi8vT3369FFubq6rz+OPP66PPvpIy5cv18aNG3X27FkNHjzYi1WjKtmxY4cWLFigDh06uLUzrlBaFy5c0G233aZatWppzZo1+vLLLzVz5kzVq1fP1eell17Syy+/rPnz5+uzzz5T3bp1FRMTo8uXL3uxclRm06dP17x58/Tqq6/qq6++0vTp0/XSSy/plVdecfVhXMFMbm6uOnbsqLlz5xZ6vCRjaOjQoTp48KBSU1O1atUqbdq0SQ899FDpCjFQrFtuucUYO3asaz8/P99o3LixkZSU5MWqUFWdO3fOkGRs3LjRMAzDuHjxolGrVi1j+fLlrj5fffWVIcnYtm2bt8pEFXHp0iWjZcuWRmpqqhEdHW0kJiYahsG4gmf+8pe/GLfffnuRx51OpxEaGmrMmDHD1Xbx4kXDarUa77zzTkWUiCpowIABxsiRI93aBg8ebAwdOtQwDMYVSk+SsWLFCtd+ScbQl19+aUgyduzY4eqzZs0aw2KxGGfOnCnxvZlxKsaVK1e0a9cu9erVy9VWo0YN9erVS9u2bfNiZaiqsrOzJUn169eXJO3atUt5eXluY6x169Zq1qwZYwymxo4dqwEDBriNH4lxBc98+OGH6tq1q+677z4FBwerc+fOev31113Hjx8/rszMTLdxFRgYqFtvvZVxhSJ1795daWlpOnz4sCTpiy++0ObNm9WvXz9JjCtcvZKMoW3btikoKEhdu3Z19enVq5dq1Kihzz77rMT38im7sq893333nfLz8xUSEuLWHhISoq+//tpLVaGqcjqdGj9+vG677Ta1a9dOkpSZmSlfX18FBQW59Q0JCVFmZqYXqkRVsXTpUu3evVs7duwocIxxBU8cO3ZM8+bN04QJEzRp0iTt2LFDjz32mHx9fTVs2DDX2CnsfxMZVyjKM888I7vdrtatW6tmzZrKz8/X3/72Nw0dOlSSGFe4aiUZQ5mZmQoODnY77uPjo/r165dqnBGcgAoyduxYHThwQJs3b/Z2KajiTp06pcTERKWmpsrPz8/b5eAa4XQ61bVrV/3973+XJHXu3FkHDhzQ/PnzNWzYMC9Xh6rq3Xff1dtvv60lS5bopptu0t69ezV+/Hg1btyYcYUqh1f1itGgQQPVrFmzwEpUWVlZCg0N9VJVqIrGjRunVatWaf369WratKmrPTQ0VFeuXNHFixfd+jPGUJxdu3bp3Llz6tKli3x8fOTj46ONGzfq5Zdflo+Pj0JCQhhXKLVGjRqpbdu2bm1t2rRRenq6JLnGDv+biNJ46qmn9Mwzz+iPf/yj2rdvrz//+c96/PHHlZSUJIlxhatXkjEUGhpaYGG3n376SefPny/VOCM4FcPX11eRkZFKS0tztTmdTqWlpSkqKsqLlaGqMAxD48aN04oVK7Ru3TpFRES4HY+MjFStWrXcxtihQ4eUnp7OGEORevbsqf3792vv3r2urWvXrho6dKjr3zOuUFq33XZbgZ9LOHz4sJo3by5JioiIUGhoqNu4stvt+uyzzxhXKNIPP/ygGjXc/7pZs2ZNOZ1OSYwrXL2SjKGoqChdvHhRu3btcvVZt26dnE6nbr311pLf7KqXtrjGLV261LBarcbixYuNL7/80njooYeMoKAgIzMz09uloQp4+OGHjcDAQGPDhg1GRkaGa/vhhx9cfcaMGWM0a9bMWLdunbFz504jKirKiIqK8mLVqIp+vaqeYTCuUHqff/654ePjY/ztb38zjhw5Yrz99ttGnTp1jLfeesvVZ9q0aUZQUJDxwQcfGPv27TMGDRpkREREGD/++KMXK0dlNmzYMKNJkybGqlWrjOPHjxvvv/++0aBBA+Ppp5929WFcwcylS5eMPXv2GHv27DEkGbNmzTL27NljnDx50jCMko2hvn37Gp07dzY+++wzY/PmzUbLli2NuLi4UtVBcCqBV155xWjWrJnh6+tr3HLLLcb27du9XRKqCEmFbsnJya4+P/74o/HII48Y9erVM+rUqWPce++9RkZGhveKRpX02+DEuIInPvroI6Ndu3aG1Wo1WrdubSxcuNDtuNPpNJ577jkjJCTEsFqtRs+ePY1Dhw55qVpUBXa73UhMTDSaNWtm+Pn5Gddff73x17/+1XA4HK4+jCuYWb9+faF/nxo2bJhhGCUbQ99//70RFxdn+Pv7GzabzRgxYoRx6dKlUtVhMYxf/XQzAAAAAKAAvnECAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAAAAABMEJwAAAAAwQXACAFQ7PXr00Pjx471dBgCgCiE4AQCqlIEDB6pv376FHvv0009lsVi0b9++Cq4KAHCtIzgBAKqUhIQEpaam6vTp0wWOJScnq2vXrurQoYMXKgMAXMsITgCAKuWee+5Rw4YNtXjxYrf2nJwcLV++XLGxsYqLi1OTJk1Up04dtW/fXu+8806x17RYLFq5cqVbW1BQkNs9Tp06pfvvv19BQUGqX7++Bg0apBMnTpTNQwEAKj2CEwCgSvHx8VF8fLwWL14swzBc7cuXL1d+fr4eeOABRUZG6uOPP9aBAwf00EMP6c9//rM+//xzj++Zl5enmJgYBQQE6NNPP9WWLVvk7++vvn376sqVK2XxWACASo7gBACockaOHKlvvvlGGzdudLUlJyfr97//vZo3b64nn3xSnTp10vXXX69HH31Uffv21bvvvuvx/ZYtWyan06k33nhD7du3V5s2bZScnKz09HRt2LChDJ4IAFDZEZwAAFVO69at1b17dy1atEiSdPToUX366adKSEhQfn6+pk6dqvbt26t+/fry9/dXSkqK0tPTPb7fF198oaNHjyogIED+/v7y9/dX/fr1dfnyZX3zzTdl9VgAgErMx9sFAADgiYSEBD366KOaO3eukpOTdcMNNyg6OlrTp0/XnDlzNHv2bLVv315169bV+PHji32lzmKxuL32J/38et4vcnJyFBkZqbfffrvAuQ0bNiy7hwIAVFoEJwBAlXT//fcrMTFRS5Ys0ZtvvqmHH35YFotFW7Zs0aBBg/TAAw9IkpxOpw4fPqy2bdsWea2GDRsqIyPDtX/kyBH98MMPrv0uXbpo2bJlCg4Ols1mK7+HAgBUWryqBwCokvz9/TVkyBBNnDhRGRkZGj58uCSpZcuWSk1N1datW/XVV19p9OjRysrKKvZad999t1599VXt2bNHO3fu1JgxY1SrVi3X8aFDh6pBgwYaNGiQPv30Ux0/flwbNmzQY489Vuiy6ACAaw/BCQBQZSUkJOjChQuKiYlR48aNJUnPPvusunTpopiYGPXo0UOhoaGKjY0t9jozZ85UWFiY7rjjDv3pT3/Sk08+qTp16riO16lTR5s2bVKzZs00ePBgtWnTRgkJCbp8+TIzUABQTViM377UDQAAAABww4wTAAAAAJggOAEAAACACYITAAAAAJggOAEAAACACYITAAAAAJggOAEAAACACYITAAAAAJggOAEAAACACYITAAAAAJggOAEAAACACYITAAAAAJj4f6LcqYkcUhKRAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Get the variable to examine\n", + "var_data = df_students['Grade']\n", + "\n", + "# Create a Figure\n", + "fig = plt.figure(figsize=(10,4))\n", + "\n", + "# Plot a histogram\n", + "plt.hist(var_data)\n", + "\n", + "# Add titles and labels\n", + "plt.title('Data Distribution')\n", + "plt.xlabel('Value')\n", + "plt.ylabel('Frequency')\n", + "\n", + "# Show the figure\n", + "fig.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The histogram for grades is a symmetric shape, where the most frequently occurring grades tend to be in the middle of the range (around 50), with fewer grades at the extreme ends of the scale.\n", + "\n", + "#### Measures of central tendency\n", + "\n", + "To understand the distribution better, we can examine so-called *measures of central tendency*, which is a fancy way of describing statistics that represent the \"middle\" of the data. The goal of this analysis is to try to find a \"typical\" value. Common ways to define the middle of the data include:\n", + "\n", + "- The *mean*: A simple average based on adding together all of the values in the sample set and then dividing the total by the number of samples.\n", + "- The *median*: The value in the middle of the range of all of the sample values.\n", + "- The *mode*: The most commonly occurring value in the sample set\\*.\n", + "\n", + "Let's calculate these values, along with the minimum and maximum values for comparison, and show them on the histogram.\n", + "\n", + "> \\*Of course, in some sample sets, there might be a tie for the most common value. In those cases, the dataset is described as *bimodal* or even *multimodal*." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Minimum:3.00\n", + "Mean:49.18\n", + "Median:49.50\n", + "Mode:50.00\n", + "Maximum:97.00\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\billg\\AppData\\Local\\Temp\\ipykernel_2980\\2664441753.py:36: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " fig.show()\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAGJCAYAAAC90mOkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABI7ElEQVR4nO3dd3hUZeL+/3tSZtImAwRSSEITpEgTEA3qgoLSRJBdVMQNKGIDBWNZQdfGxw3ql+biUlSIriIuu4gVMQsGC6iAoGKhQ4AkIC0zCSSBmfP7w5+zjpRJQpKTybxf1zWXe555zpl79Ijn3lPGYhiGIQAAAADAGYWYHQAAAAAAajuKEwAAAAD4QXECAAAAAD8oTgAAAADgB8UJAAAAAPygOAEAAACAHxQnAAAAAPCD4gQAAAAAflCcAAAAAMAPihMAoM4YNWqUmjVrViOf1axZM40aNcq7nJWVJYvFonXr1tXI5/fq1Uu9evWqkc8CAFCcACAo/HpQ/+srIiJCjRs3Vt++ffX888/L5XJVeturV6/WE088oaNHj1ZdYElPPPGET+aoqCg1adJEgwYN0oIFC1RaWloln/PDDz/oiSee0K5du6pke1WpNmcDgGATZnYAAEDNeeqpp9S8eXOdOHFCBQUFysnJ0YQJEzRt2jS988476tixY4W3uXr1aj355JMaNWqU6tWrV+WZZ8+erZiYGJWWlmrfvn1avny5br31Vs2YMUPvvfeeUlNTvXNffPFFeTyeCm3/hx9+0JNPPqlevXpV6GzV5s2bFRJSvf//49myffTRR9X62QAAXxQnAAgi/fv3V7du3bzLEydO1MqVK3XNNdfo2muv1Y8//qjIyEgTE57qT3/6kxo2bOhdfuyxx/T6668rPT1dw4YN0xdffOF9Lzw8vFqzGIahkpISRUZGymazVetn+WO1Wk39fAAINlyqBwBB7sorr9Rf//pX7d69W6+99pp3/Ntvv9WoUaPUokULRUREKDExUbfeeqsOHTrknfPEE0/owQcflCQ1b97ce1ndr5eWLViwQFdeeaXi4+Nls9nUrl07zZ49+5wzjxgxQrfddpu+/PJLZWdne8dPd4/TokWL1LVrV9ntdsXGxqpDhw6aOXOmpF8uYRw2bJgk6YorrvDmz8nJkfTLfUzXXHONli9frm7duikyMlJz5871vvfbe5x+dezYMd1xxx2Ki4tTbGys0tPTdeTIEZ85FotFTzzxxCnr/nab/rKd7h6nAwcOaPTo0UpISFBERIQ6deqkV155xWfOrl27ZLFY9P/+3//TvHnzdN5558lms+miiy7S2rVrT/v3GwDAGScAgKQ///nPmjRpkj766CONGTNGkpSdna0dO3bolltuUWJior7//nvNmzdP33//vb744gtZLBYNHTpUW7Zs0RtvvKHp06d7zww1atRI0i+X2V1wwQW69tprFRYWpnfffVd33323PB6Pxo4de86Z582bp48++khXXXXVaedkZ2dr+PDh6t27t5555hlJ0o8//qjPP/9c48eP1x/+8Afde++9ev755zVp0iS1bdtWkrx/lX65JG/48OG64447NGbMGLVu3fqsucaNG6d69erpiSee0ObNmzV79mzt3r1bOTk5slgs5f5+5cn2W8ePH1evXr20bds2jRs3Ts2bN9fixYs1atQoHT16VOPHj/eZv3DhQrlcLt1xxx2yWCx69tlnNXToUO3YsaPaz9wBQCCiOAEAlJKSIofDoe3bt3vH7r77bt1///0+8y655BINHz5cn332mS6//HJ17NhRXbp00RtvvKEhQ4accrZn1apVPpf+jRs3Tv369dO0adPOuTi1b99eknwy/97777+v2NhYLV++XKGhoae836JFC11++eV6/vnnddVVV532KXXbtm3Thx9+qL59+5Yrl9Vq1YoVK7zlo2nTpnrooYf07rvv6tprry3XNsqb7bfmzZunH3/8Ua+99ppGjBghSbrzzjvVs2dPPfroo7r11ltlt9u983Nzc7V161bVr19fktS6dWsNHjxYy5cv1zXXXFPunAAQLLhUDwAgSYqJifF5ut5vC09JSYkOHjyoSy65RJL09ddfl2ubv91GYWGhDh48qJ49e2rHjh0qLCw857ySzvpEwHr16qm4uNjncr6Kat68eblLkyTdfvvtPmds7rrrLoWFhemDDz6odIby+OCDD5SYmKjhw4d7x8LDw3XvvfeqqKhIq1at8pl/ww03eEuTJF1++eWSpB07dlRrTgAIVBQnAIAkqaioyOeMxOHDhzV+/HglJCQoMjJSjRo1UvPmzSWp3KXn888/V58+fRQdHa169eqpUaNGmjRpUoW2cba8knwy/97dd9+t888/X/3791dKSopuvfVWffjhhxX6nF+/c3m1atXKZzkmJkZJSUnV/kjx3bt3q1WrVqc86e/XS/t2797tM96kSROf5V9L1O/vxwIA/IJL9QAA2rt3rwoLC9WyZUvv2PXXX6/Vq1frwQcfVOfOnRUTEyOPx6N+/fqV65Hf27dvV+/evdWmTRtNmzZNqampslqt+uCDDzR9+vQKPzb89zZt2iRJPpl/Lz4+Xhs3btTy5cu1bNkyLVu2TAsWLFB6evopD004k5p8yqDb7a6xzzrdpYvSL08OBACciuIEANA///lPSfJeknbkyBGtWLFCTz75pB577DHvvK1bt56y7pkeePDuu++qtLRU77zzjs/ZjY8//rhaMp+J1WrVoEGDNGjQIHk8Ht19992aO3eu/vrXv6ply5YVemBDeWzdulVXXHGFd7moqEj5+fkaMGCAd6x+/fqn/GBwWVmZ8vPzfcYqkq1p06b69ttv5fF4fM46/fTTT973AQCVx6V6ABDkVq5cqcmTJ6t58+behwr8ejbi92cfZsyYccr60dHRknRKETjdNgoLC7VgwYJzzrxw4UK99NJLSktLU+/evc8477ePTpekkJAQ74/8lpaWnjV/Zc2bN08nTpzwLs+ePVsnT55U//79vWPnnXeePvnkk1PW+/0Zp4pkGzBggAoKCvTmm296x06ePKm///3viomJUc+ePSvzdQAA/z/OOAFAEFm2bJl++uknnTx5Uvv379fKlSuVnZ2tpk2b6p133lFERIQkKTY2Vn/4wx/07LPP6sSJE0pOTtZHH32knTt3nrLNrl27SpIeeeQR3XjjjQoPD9egQYN09dVXe8/23HHHHSoqKtKLL76o+Pj4U86snM2///1vxcTEqKysTPv27dPy5cv1+eefq1OnTlq8ePFZ173tttt0+PBhXXnllUpJSdHu3bv197//XZ07d/be+9O5c2eFhobqmWeeUWFhoWw2m/e3pyqjrKxMvXv31vXXX6/NmzfrH//4hy677DKfJ+rddtttuvPOO/XHP/5RV111lb755hstX77c54d+K5rt9ttv19y5czVq1CitX79ezZo107///W99/vnnmjFjxlnvBQMAlIMBAKjzFixYYEjyvqxWq5GYmGhcddVVxsyZMw2n03nKOnv37jWuu+46o169eobD4TCGDRtm5OXlGZKMxx9/3Gfu5MmTjeTkZCMkJMSQZOzcudMwDMN45513jI4dOxoRERFG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Dh066M9//rPuu+8+ZWZmSmK/wrkrzz6UmJh4yoPdTp48qcOHD1doP6M4nYXValXXrl21YsUK75jH49GKFSuUlpZmYjIECsMwNG7cOL311ltauXKlmjdv7vN+165dFR4e7rOPbd68Wbm5uexjOKPevXvru+++08aNG72vbt26acSIEd7/zX6Firr00ktP+bmELVu2qGnTppKk5s2bKzEx0We/cjqd+vLLL9mvcEbHjh1TSIjv4WZoaKg8Ho8k9iucu/LsQ2lpaTp69KjWr1/vnbNy5Up5PB5dfPHF5f+wc360RR23aNEiw2azGVlZWcYPP/xg3H777Ua9evWMgoICs6MhANx1112Gw+EwcnJyjPz8fO/r2LFj3jl33nmn0aRJE2PlypXGunXrjLS0NCMtLc3E1AhEv32qnmGwX6HivvrqKyMsLMx4+umnja1btxqvv/66ERUVZbz22mveOVOmTDHq1atnvP3228a3335rDB482GjevLlx/PhxE5OjNhs5cqSRnJxsvPfee8bOnTuNJUuWGA0bNjQeeugh7xz2K/jjcrmMDRs2GBs2bDAkGdOmTTM2bNhg7N692zCM8u1D/fr1My688ELjyy+/ND777DOjVatWxvDhwyuUg+JUDn//+9+NJk2aGFar1ejevbvxxRdfmB0JAULSaV8LFizwzjl+/Lhx9913G/Xr1zeioqKM6667zsjPzzcvNALS74sT+xUq49133zXat29v2Gw2o02bNsa8efN83vd4PMZf//pXIyEhwbDZbEbv3r2NzZs3m5QWgcDpdBrjx483mjRpYkRERBgtWrQwHnnkEaO0tNQ7h/0K/nz88cenPZ4aOXKkYRjl24cOHTpkDB8+3IiJiTFiY2ONW265xXC5XBXKYTGM3/x0MwAAAADgFNzjBAAAAAB+UJwAAAAAwA+KEwAAAAD4QXECAAAAAD8oTgAAAADgB8UJAAAAAPygOAEAAACAHxQnAAAAAPCD4gQACDq9evXShAkTzI4BAAggFCcAQEAZNGiQ+vXrd9r3Pv30U1ksFn377bc1nAoAUNdRnAAAAWX06NHKzs7W3r17T3lvwYIF6tatmzp27GhCMgBAXUZxAgAElGuuuUaNGjVSVlaWz3hRUZEWL16sIUOGaPjw4UpOTlZUVJQ6dOigN95446zbtFgsWrp0qc9YvXr1fD5jz549uv7661WvXj01aNBAgwcP1q5du6rmSwEAaj2KEwAgoISFhSk9PV1ZWVkyDMM7vnjxYrndbt18883q2rWr3n//fW3atEm33367/vznP+urr76q9GeeOHFCffv2ld1u16effqrPP/9cMTEx6tevn8rKyqriawEAajmKEwAg4Nx6663avn27Vq1a5R1bsGCB/vjHP6pp06Z64IEH1LlzZ7Vo0UL33HOP+vXrp3/961+V/rw333xTHo9HL730kjp06KC2bdtqwYIFys3NVU5OThV8IwBAbUdxAgAEnDZt2qhHjx6aP3++JGnbtm369NNPNXr0aLndbk2ePFkdOnRQgwYNFBMTo+XLlys3N7fSn/fNN99o27ZtstvtiomJUUxMjBo0aKCSkhJt3769qr4WAKAWCzM7AAAAlTF69Gjdc889euGFF7RgwQKdd9556tmzp5555hnNnDlTM2bMUIcOHRQdHa0JEyac9ZI6i8Xic9mf9Mvleb8qKipS165d9frrr5+ybqNGjaruSwEAai2KEwAgIF1//fUaP368Fi5cqFdffVV33XWXLBaLPv/8cw0ePFg333yzJMnj8WjLli1q167dGbfVqFEj5efne5e3bt2qY8eOeZe7dOmiN998U/Hx8YqNja2+LwUAqLW4VA8AEJBiYmJ0ww03aOLEicrPz9eoUaMkSa1atVJ2drZWr16tH3/8UXfccYf2799/1m1deeWVmjVrljZs2KB169bpzjvvVHh4uPf9ESNGqGHDhho8eLA+/fRT7dy5Uzk5Obr33ntP+1h0AEDdQ3ECAASs0aNH68iRI+rbt68aN24sSXr00UfVpUsX9e3bV7169VJiYqKGDBly1u1MnTpVqampuvzyy3XTTTfpgQceUFRUlPf9qKgoffLJJ2rSpImGDh2qtm3bavTo0SopKeEMFAAECYvx+4u6AQAAAAA+OOMEAAAAAH5QnAAAAADAD4oTAAAAAPhBcQIAAAAAPyhOAAAAAOAHxQkAAAAA/KA4AQAAAIAfFCcAAAAA8IPiBAAAAAB+UJwAAAAAwA+KEwAAAAD48f8BZAhruTsbbz4AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Get the variable to examine\n", + "var = df_students['Grade']\n", + "\n", + "# Get statistics\n", + "min_val = var.min()\n", + "max_val = var.max()\n", + "mean_val = var.mean()\n", + "med_val = var.median()\n", + "mod_val = var.mode()[0]\n", + "\n", + "print('Minimum:{:.2f}\\nMean:{:.2f}\\nMedian:{:.2f}\\nMode:{:.2f}\\nMaximum:{:.2f}\\n'.format(min_val,\n", + " mean_val,\n", + " med_val,\n", + " mod_val,\n", + " max_val))\n", + "\n", + "# Create a Figure\n", + "fig = plt.figure(figsize=(10,4))\n", + "\n", + "# Plot a histogram\n", + "plt.hist(var)\n", + "\n", + "# Add lines for the statistics\n", + "plt.axvline(x=min_val, color = 'gray', linestyle='dashed', linewidth = 2)\n", + "plt.axvline(x=mean_val, color = 'cyan', linestyle='dashed', linewidth = 2)\n", + "plt.axvline(x=med_val, color = 'red', linestyle='dashed', linewidth = 2)\n", + "plt.axvline(x=mod_val, color = 'yellow', linestyle='dashed', linewidth = 2)\n", + "plt.axvline(x=max_val, color = 'gray', linestyle='dashed', linewidth = 2)\n", + "\n", + "# Add titles and labels\n", + "plt.title('Data Distribution')\n", + "plt.xlabel('Value')\n", + "plt.ylabel('Frequency')\n", + "\n", + "# Show the figure\n", + "fig.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For the grade data, the mean, median, and mode all seem to be more or less in the middle of the minimum and maximum, at around 50.\n", + "\n", + "Another way to visualize the distribution of a variable is to use a *box* plot (sometimes called a *box-and-whiskers* plot). Let's create one for the grade data." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\billg\\AppData\\Local\\Temp\\ipykernel_2980\\4088679524.py:14: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " fig.show()\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAz8AAAF2CAYAAABAnSbOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAjwElEQVR4nO3de5xXBZ3/8fcgwgzCDF5iRpLLZNRgeQlslbS8YWh5W1lLf1iiKZRQXtos2sBLF1ZrlXANxS20Vau1x6NW2wR9YOIjRbJxqy0BMVEpnHHLmBGUAZ3v7w9/fn+OkIF+hxHO8/l4nAd8zznfcz4D//DifM/5VpVKpVIAAAB2cL16egAAAIBtQfwAAACFIH4AAIBCED8AAEAhiB8AAKAQxA8AAFAI4gcAACgE8QMAABSC+AEAAApB/ADwpjJx4sQMHz58m5xr+PDhmThxYvn1DTfckKqqqvzyl7/cJuc//PDDc/jhh2+TcwEgfgC2Gy//w/zlpbq6OoMHD864ceMye/bsPPvss6/72Pfff38uueSSrFmzpnIDJ7nkkku6zNyvX78MHTo0xx9/fObNm5eOjo6KnOfhhx/OJZdckscff7wix6ukN/NsAEXTu6cHAGDrXHbZZWlsbMzGjRvT0tKSe+65J+eff36uvPLK3Hbbbdlvv/22+pj3339/Lr300kycODEDBw6s+Mxz5sxJ//7909HRkT/+8Y9ZsGBBzjrrrMyaNSs/+clPMmTIkPK+119/fTo7O7fq+A8//HAuvfTSHH744Vt11Wj58uXp1at7/x/wtWa78847u/XcAHQlfgC2M8cee2wOPPDA8utp06bl7rvvznHHHZcTTjghS5cuTU1NTQ9OuKl/+Id/yB577FF+PWPGjNx88835+Mc/nlNOOSUPPPBAedvOO+/crbOUSqWsX78+NTU16du3b7ee62/p06dPj54foGh87A1gB3DkkUdm+vTpeeKJJ3LTTTeV1//mN7/JxIkT87a3vS3V1dVpaGjIWWedlT//+c/lfS655JJ87nOfS5I0NjaWP6L28se05s2blyOPPDKDBg1K3759s88++2TOnDlveOYJEybk7LPPzpIlS3LXXXeV12/unp/vf//7GT16dAYMGJDa2trsu++++eY3v5nkpY8DnnLKKUmSI444ojz/Pffck+Sl+3qOO+64LFiwIAceeGBqampy3XXXlbe98p6flz333HOZPHlydt9999TW1ubjH/94/vKXv3TZp6qqKpdccskm733lMf/WbJu75+fpp5/OJz7xidTX16e6ujr7779/brzxxi77PP7446mqqso3vvGNzJ07N3vvvXf69u2b9773vXnwwQc3++cNgCs/ADuMj33sY/niF7+YO++8M+ecc06S5K677spjjz2WM888Mw0NDfnd736XuXPn5ne/+10eeOCBVFVV5eSTT84jjzyS733ve7nqqqvKV2je8pa3JHnpI2vvete7csIJJ6R37965/fbbc+6556azszNTpkx5wzPPnTs3d955Z44++ujN7nPXXXfltNNOy1FHHZXLL788SbJ06dLcd999Oe+88/KBD3wgn/nMZzJ79ux88YtfzMiRI5Ok/Gvy0sfbTjvttEyePDnnnHNO3vnOd77mXFOnTs3AgQNzySWXZPny5ZkzZ06eeOKJ3HPPPamqqtrin29LZnul559/PocffngeffTRTJ06NY2Njbn11lszceLErFmzJuedd16X/W+55ZY8++yzmTx5cqqqqnLFFVfk5JNPzmOPPdbtV9AAtkfiB2AHsddee6Wuri6///3vy+vOPffcfPazn+2y38EHH5zTTjstP//5z/P+978/++23X0aNGpXvfe97Oemkkza56rJo0aIuH6ObOnVqjjnmmFx55ZVvOH7e/e53J0mXmV/tv/7rv1JbW5sFCxZkp5122mT72972trz//e/P7Nmzc/TRR2/26WmPPvpo5s+fn3Hjxm3RXH369MnChQvLATFs2LBcdNFFuf3223PCCSds0TG2dLZXmjt3bpYuXZqbbropEyZMSJJ88pOfzGGHHZYvfelLOeusszJgwIDy/k8++WRWrFiRXXfdNUnyzne+MyeeeGIWLFiQ4447bovnBCgKH3sD2IH079+/y1PfXhkt69evz5/+9KccfPDBSZKHHnpoi475ymO0tbXlT3/6Uw477LA89thjaWtre8PzJnnNJ9UNHDgw69at6/LRuK3V2Ni4xeGTJJMmTepy5eRTn/pUevfunZ/+9Keve4Yt8dOf/jQNDQ057bTTyut23nnnfOYzn8natWuzaNGiLvt/9KMfLYdPkrz//e9Pkjz22GPdOifA9kr8AOxA1q5d2+XKwDPPPJPzzjsv9fX1qampyVve8pY0NjYmyRaHy3333ZexY8dml112ycCBA/OWt7wlX/ziF7fqGK81b5IuM7/aueeem3e84x059thjs9dee+Wss87K/Pnzt+o8L//MW2rEiBFdXvfv3z977rlntz+u+oknnsiIESM2eQLdyx+Te+KJJ7qsHzp0aJfXL4fQq+9PAuAlPvYGsIP4wx/+kLa2trz97W8vr/vIRz6S+++/P5/73OdywAEHpH///uns7MwxxxyzRY+T/v3vf5+jjjoqTU1NufLKKzNkyJD06dMnP/3pT3PVVVdt9SOpX+23v/1tknSZ+dUGDRqUX/3qV1mwYEHuuOOO3HHHHZk3b14+/vGPb/IggL9mWz797sUXX9xm59rcxwCTl55oB8CmxA/ADuLf//3fk6T88a6//OUvWbhwYS699NLMmDGjvN+KFSs2ee9fu4n/9ttvT0dHR2677bYuVxl+9rOfdcvMf02fPn1y/PHH5/jjj09nZ2fOPffcXHfddZk+fXre/va3b9VDCLbEihUrcsQRR5Rfr127Nk899VQ+9KEPldftuuuum3wp7IYNG/LUU091Wbc1sw0bNiy/+c1v0tnZ2eXqz7Jly8rbAXj9fOwNYAdw991358tf/nIaGxvLN8q/fFXg1VcBZs2atcn7d9lllyTZ5B/zmztGW1tb5s2b94ZnvuWWW/Jv//ZvGTNmTI466qi/ut8rH8udJL169Sp/kWtHR8drzv96zZ07Nxs3biy/njNnTl544YUce+yx5XV777137r333k3e9+orP1sz24c+9KG0tLTkBz/4QXndCy+8kKuvvjr9+/fPYYcd9np+HAD+H1d+ALYzd9xxR5YtW5YXXnghra2tufvuu3PXXXdl2LBhue2221JdXZ0kqa2tzQc+8IFcccUV2bhxY9761rfmzjvvzMqVKzc55ujRo5Mk//RP/5RTTz01O++8c44//vh88IMfLF91mTx5ctauXZvrr78+gwYN2uQKx2v54Q9/mP79+2fDhg354x//mAULFuS+++7L/vvvn1tvvfU133v22WfnmWeeyZFHHpm99torTzzxRK6++uoccMAB5XthDjjggOy00065/PLL09bWlr59+5a/m+j12LBhQ4466qh85CMfyfLly/Otb30rhx56aJcnvZ199tn55Cc/mfHjx+foo4/Or3/96yxYsKDLl7lu7WyTJk3Kddddl4kTJ6a5uTnDhw/PD3/4w9x3332ZNWvWa94bBcAWKAGwXZg3b14pSXnp06dPqaGhoXT00UeXvvnNb5ba29s3ec8f/vCH0t///d+XBg4cWKqrqyudcsoppdWrV5eSlC6++OIu+375y18uvfWtby316tWrlKS0cuXKUqlUKt12222l/fbbr1RdXV0aPnx46fLLLy995zvf6bLPX3PxxRd3mbm6urq01157lY477rjSd77zndL69es3ec8ZZ5xRGjZsWPn1D3/4w9IHP/jB0qBBg0p9+vQpDR06tDR58uTSU0891eV9119/feltb3tbaaeddiolKf3sZz8rlUql0rBhw0of/vCHNzvfsGHDSmecccYmf8aLFi0qTZo0qbTrrruW+vfvX5owYULpz3/+c5f3vvjii6XPf/7zpT322KPUr1+/0rhx40qPPvroJsd8rdkOO+yw0mGHHdZl39bW1tKZZ55Z2mOPPUp9+vQp7bvvvqV58+Z12WflypWlJKWvf/3rm/xMm/u7BeAlVaWSuyIBAIAdn3t+AACAQhA/AABAIYgfAACgEMQPAABQCOIHAAAoBPEDAAAUwnb5JaednZ1ZvXp1BgwYkKqqqp4eBwAA6CGlUinPPvtsBg8enF69XvvaznYZP6tXr86QIUN6egwAAOBNYtWqVdlrr71ec5+tjp977703X//619Pc3JynnnoqP/rRj3LSSSeVt5dKpVx88cW5/vrrs2bNmhxyyCGZM2dORowYUd7nmWeeyac//encfvvt6dWrV8aPH59vfvOb6d+//xbNMGDAgPIPWFtbu7U/AgAAsINob2/PkCFDyo3wWrY6ftatW5f9998/Z511Vk4++eRNtl9xxRWZPXt2brzxxjQ2Nmb69OkZN25cHn744VRXVydJJkyYkKeeeip33XVXNm7cmDPPPDOTJk3KLbfcskUzvPxRt9raWvEDAABs0e0wVaVSqfRGTvDKKz+lUimDBw/OZz/72fzjP/5jkqStrS319fW54YYbcuqpp2bp0qXZZ5998uCDD+bAAw9MksyfPz8f+tCH8oc//CGDBw/+m+dtb29PXV1d2traxA8AABTY1rRBRZ/2tnLlyrS0tGTs2LHldXV1dTnooIOyePHiJMnixYszcODAcvgkydixY9OrV68sWbJks8ft6OhIe3t7lwUAAGBrVDR+WlpakiT19fVd1tfX15e3tbS0ZNCgQV229+7d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pb9TAN4Y8QOwA7queUM+OuOGjGxq6ulRqICly5blun/5PzmhpwcB2M6JH4AdUMvaUp4f+I5k8AE9PQoV8HxLZ1rWlnp6DIDtng+DAwAAhSB+AACAQhA/AABAIYgfAACgEMQPAABQCOIHAAAoBPEDAAAUgvgBAAAKQfwAAACFIH4AAIBCED8AAEAhiB8AAKAQxA8AAFAI4gcAACgE8QMAABSC+AEAAApB/AAAAIUgfgAAgEIQPwAAQCGIHwAAoBDEDwAAUAjdHj///M//nKqqqpx//vnldevXr8+UKVOy++67p3///hk/fnxaW1u7exQAAKDAujV+HnzwwVx33XXZb7/9uqy/4IILcvvtt+fWW2/NokWLsnr16px88sndOQoAAFBw3RY/a9euzYQJE3L99ddn1113La9va2vLt7/97Vx55ZU58sgjM3r06MybNy/3339/Hnjgge4aBwAAKLhui58pU6bkwx/+cMaOHdtlfXNzczZu3NhlfVNTU4YOHZrFixdv9lgdHR1pb2/vsgAAAGyN3t1x0O9///t56KGH8uCDD26yraWlJX369MnAgQO7rK+vr09LS8tmjzdz5sxceuml3TEqAABQEBW/8rNq1aqcd955ufnmm1NdXV2RY06bNi1tbW3lZdWqVRU5LgAAUBwVj5/m5uY8/fTTGTVqVHr37p3evXtn0aJFmT17dnr37p36+vps2LAha9as6fK+1tbWNDQ0bPaYffv2TW1tbZcFAABga1T8Y29HHXVU/ud//qfLujPPPDNNTU35/Oc/nyFDhmTnnXfOwoULM378+CTJ8uXL8+STT2bMmDGVHgcAACBJN8TPgAED8u53v7vLul122SW77757ef0nPvGJXHjhhdltt91SW1ubT3/60xkzZkwOPvjgSo8DAACQpJseePC3XHXVVenVq1fGjx+fjo6OjBs3Lt/61rd6YhQAAKAgtkn83HPPPV1eV1dX55prrsk111yzLU4PAADQfd/zAwAA8GYifgAAgEIQPwAAQCH0yAMPAOg+zz33XJLkoYce6uFJut/zzz+fxx9/PMOHD09NTU1Pj9Ntli5d2tMjAOwQxA/ADmbZsmVJknPOOaeHJ6HSBgwY0NMjAGzXxA/ADuakk05KkjQ1NaVfv349O0w3W7p0aU4//fTcdNNNGTlyZE+P060GDBiQESNG9PQYANs18QOw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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Get the variable to examine\n", + "var = df_students['Grade']\n", + "\n", + "# Create a Figure\n", + "fig = plt.figure(figsize=(10,4))\n", + "\n", + "# Plot a histogram\n", + "plt.boxplot(var)\n", + "\n", + "# Add titles and labels\n", + "plt.title('Data Distribution')\n", + "\n", + "# Show the figure\n", + "fig.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The box plot shows the distribution of the grade values in a format different from the histogram. The *box* part of the plot shows where the inner two *quartiles* of the data reside. In this case, half of the grades are between approximately 36 and 63. The *whiskers* extending from the box show the outer two quartiles, so the other half of the grades in this case are between 0 and 36 or 63 and 100. The line in the box indicates the *median* value.\n", + "\n", + "For learning, it's useful to combine histograms and box plots, with the box plot's orientation changed to align it with the histogram. (In some ways, it's helpful to think of the histogram as a \"front elevation\" view of the distribution, and the box plot as a \"plan\" view of the distribution from above.)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Minimum:3.00\n", + "Mean:49.18\n", + "Median:49.50\n", + "Mode:50.00\n", + "Maximum:97.00\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\billg\\AppData\\Local\\Temp\\ipykernel_2980\\1918122812.py:40: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n", + " fig.show()\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAGbCAYAAAACx5u5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA+tklEQVR4nO3dd3xUZcL28WvSJm2S0EIIIRAVBaUooC6LLigoTZbiWhAklBXUsAZZG7gKPD5K8ZFVlKWtBn0VUXzUBVxElhJEEWmKSFU6SUBBMkMghcz9/uHLvI4gJEPCyeT8vp9PPjrn3HPOFb1xzuUp4zDGGAEAAACATYRYHQAAAAAALiZKEAAAAABboQQBAAAAsBVKEAAAAABboQQBAAAAsBVKEAAAAABboQQBAAAAsBVKEAAAAABboQQBAAAAsBVKEACg0g0cOFCNGjW6KPtq1KiRBg4c6Hs9e/ZsORwOrVu37qLsv0OHDurQocNF2RcAIDCUIACw0OkD9NM/kZGRSk5OVufOnTVlyhR5PJ6At/35559r7NixOnbsWMUFljR27Fi/zNHR0UpNTVWPHj2UlZWloqKiCtnPli1bNHbsWO3Zs6dCtleRqnI2AMD5hVkdAAAg/dd//ZfS0tJUUlKivLw8rVixQiNGjNDkyZM1f/58tWjRotzb/PzzzzVu3DgNHDhQCQkJFZ552rRpio2NVVFRkQ4ePKjFixdr8ODBevHFF7Vw4UI1aNDAN3bWrFnyer3l2v6WLVs0btw4dejQoVxnkbZv366QkMr9f3znyvbJJ59U6r4BABeOEgQAVUDXrl3Vpk0b3+tRo0Zp2bJluu222/THP/5RW7duVVRUlIUJz/SnP/1JtWvX9r1++umn9dZbb2nAgAG644479MUXX/jWhYeHV2oWY4wKCwsVFRUlp9NZqfs6n4iICEv3DwA4Py6HA4Aq6uabb9ZTTz2lvXv36s033/Qt37RpkwYOHKhLLrlEkZGRSkpK0uDBg3XkyBHfmLFjx+rRRx+VJKWlpfkuXTt9+VZWVpZuvvlmJSYmyul06sorr9S0adMuOHO/fv305z//WWvWrNGSJUt8y892T9DcuXPVunVruVwuxcXFqXnz5nrppZck/XyZ4B133CFJuummm3z5V6xYIenn+35uu+02LV68WG3atFFUVJRmzJjhW/fLe4JOO3HihIYNG6ZatWopLi5OAwYM0E8//eQ3xuFwaOzYsWe895fbPF+2s90TdPjwYQ0ZMkR169ZVZGSkWrZsqddff91vzJ49e+RwOPQ///M/mjlzpi699FI5nU5de+21Wrt27Vn/eQMAAsOZIACowu69916NHj1an3zyie677z5J0pIlS7Rr1y4NGjRISUlJ+vbbbzVz5kx9++23+uKLL+RwONSnTx/t2LFDb7/9tv7+97/7ztjUqVNH0s+Xsl111VX64x//qLCwMC1YsEAPPvigvF6vMjIyLjjzzJkz9cknn+iWW24565glS5aob9++6tixoyZOnChJ2rp1qz777DNlZmbqD3/4gx566CFNmTJFo0ePVtOmTSXJ91fp58ve+vbtq2HDhum+++7TFVdccc5cw4cPV0JCgsaOHavt27dr2rRp2rt3r1asWCGHw1Hm368s2X7p5MmT6tChg7777jsNHz5caWlpmjdvngYOHKhjx44pMzPTb/ycOXPk8Xg0bNgwORwOTZo0SX369NGuXbsq/YwaANgFJQgAqrCUlBTFx8fr+++/9y178MEH9de//tVv3O9+9zv17dtXq1at0o033qgWLVqoVatWevvtt9WrV68zzsJkZ2f7XV43fPhwdenSRZMnT77gEtSsWTNJ8sv8ax999JHi4uK0ePFihYaGnrH+kksu0Y033qgpU6bolltuOevT1r777jt9/PHH6ty5c5lyRUREaOnSpb4i0bBhQz322GNasGCB/vjHP5ZpG2XN9kszZ87U1q1b9eabb6pfv36SpPvvv1/t27fX3/72Nw0ePFgul8s3ft++fdq5c6dq1KghSbriiivUs2dPLV68WLfddluZcwIAfhuXwwFAFRcbG+v3lLhflpfCwkL9+OOP+t3vfidJ2rBhQ5m2+ctt5Ofn68cff1T79u21a9cu5efnX3BeSed8sl1CQoIKCgr8Lpkrr7S0tDIXIEkaOnSo35mUBx54QGFhYfr3v/8dcIay+Pe//62kpCT17dvXtyw8PFwPPfSQjh8/ruzsbL/xd911l68ASdKNN94oSdq1a1el5gQAO6EEAUAVd/z4cb8zBUePHlVmZqbq1q2rqKgo1alTR2lpaZJU5gLz2WefqVOnToqJiVFCQoLq1Kmj0aNHl2sb58oryS/zrz344IO6/PLL1bVrV6WkpGjw4MH6+OOPy7Wf079zWTVu3Njv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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create a function that we can re-use\n", + "def show_distribution(var_data):\n", + " from matplotlib import pyplot as plt\n", + "\n", + " # Get statistics\n", + " min_val = var_data.min()\n", + " max_val = var_data.max()\n", + " mean_val = var_data.mean()\n", + " med_val = var_data.median()\n", + " mod_val = var_data.mode()[0]\n", + "\n", + " print('Minimum:{:.2f}\\nMean:{:.2f}\\nMedian:{:.2f}\\nMode:{:.2f}\\nMaximum:{:.2f}\\n'.format(min_val,\n", + " mean_val,\n", + " med_val,\n", + " mod_val,\n", + " max_val))\n", + "\n", + " # Create a figure for 2 subplots (2 rows, 1 column)\n", + " fig, ax = plt.subplots(2, 1, figsize = (10,4))\n", + "\n", + " # Plot the histogram \n", + " ax[0].hist(var_data)\n", + " ax[0].set_ylabel('Frequency')\n", + "\n", + " # Add lines for the mean, median, and mode\n", + " ax[0].axvline(x=min_val, color = 'gray', linestyle='dashed', linewidth = 2)\n", + " ax[0].axvline(x=mean_val, color = 'cyan', linestyle='dashed', linewidth = 2)\n", + " ax[0].axvline(x=med_val, color = 'red', linestyle='dashed', linewidth = 2)\n", + " ax[0].axvline(x=mod_val, color = 'yellow', linestyle='dashed', linewidth = 2)\n", + " ax[0].axvline(x=max_val, color = 'gray', linestyle='dashed', linewidth = 2)\n", + "\n", + " # Plot the boxplot \n", + " ax[1].boxplot(var_data, vert=False)\n", + " ax[1].set_xlabel('Value')\n", + "\n", + " # Add a title to the Figure\n", + " fig.suptitle('Data Distribution')\n", + "\n", + " # Show the figure\n", + " fig.show()\n", + "\n", + "# Get the variable to examine\n", + "col = df_students['Grade']\n", + "# Call the function\n", + "show_distribution(col)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All of the measurements of central tendency are right in the middle of the data distribution, which is symmetric with values becoming progressively lower in both directions from the middle.\n", + "\n", + "To explore this distribution in more detail, you need to understand that statistics is fundamentally about taking *samples* of data and using probability functions to extrapolate information about the full *population* of data.\n", + "\n", + "What does this mean? *Samples* refer to the data we have on hand, such as information about these 22 students' study habits and grades. The *population* refers to all possible data we could collect, such as every student's grades and study habits across every educational institution throughout the history of time. Usually, we're interested in the population, but it's simply not practical to collect all of that data. Instead, we need to try estimate what the population is like from the small amount of data (samples) that we have.\n", + "\n", + "If we have enough samples, we can calculate something called a *probability density function*, which estimates the distribution of grades for the full population.\n", + "\n", + "The **pyplot** class from Matplotlib provides a helpful plot function to show this density." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2gAAAF2CAYAAAAbVbv/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB+OElEQVR4nO3deVxU1f/H8dcMOyqgIpug4oo7ioqomSWJZhmtaotltpmZRat+c6m+v6xMM8u0VetbltliZmYSmlbihvu+byC4oKAg69zfH+AUiTt4Wd7Px2MeMOeeufOe6wh85tx7jsUwDAMRERERERExndXsACIiIiIiIlJABZqIiIiIiEgZoQJNRERERESkjFCBJiIiIiIiUkaoQBMRERERESkjVKCJiIiIiIiUESrQREREREREyggVaCIiIiIiImWECjQREREREZEyQgWaiIhIJbF3714sFgvTp083O4qIiJyDCjQRESlTpk+fjsVisd9cXV0JCAggKiqKSZMmcfLkycve99KlSxkzZgwnTpwoucDAmDFjimR2d3enTp063HzzzUybNo3s7OwSfb6SNG/ePMaMGWN2DBERKaQCTUREyqRXXnmF//3vf0yZMoWhQ4cC8NRTT9GyZUvWr19/WftcunQpL7/8cokXaGdMmTKF//3vf7z77rs89NBDpKam8uCDD9KhQwcOHDhQKs95KerWrcvp06e577777G3z5s3j5ZdfNjGViIj8k6PZAURERIrTq1cv2rVrZ78/fPhwFi5cyE033USfPn3YsmULbm5uJiY82x133IG3t7f9/qhRo/jyyy8ZMGAAd955J8uWLTMxHfYRSRERKbs0giYiIuXG9ddfz8iRI9m3bx9ffPGFvX39+vU88MAD1K9fH1dXV/z8/HjwwQc5duyYvc+YMWN47rnnAAgODrafjrh3714Apk2bxvXXX4+Pjw8uLi40a9aMKVOmXHHme+65h4ceeojly5cTGxtbZNvy5cvp2bMnnp6euLu7c+211/LXX38V6XPm9MmdO3fywAMP4OXlhaenJwMHDiQzM7NI39jYWLp06YKXlxdVq1alSZMmjBgxwr7939egPfDAA0yePBmgyCmahmFQr149brnllrNeT1ZWFp6enjz66KNXfGxERORsGkETEZFy5b777mPEiBEsWLCAhx9+GCgoTHbv3s3AgQPx8/Nj06ZNfPjhh2zatIlly5ZhsVi47bbb2L59O1999RVvv/22faSrVq1aQMHpic2bN6dPnz44Ojry008/8fjjj2Oz2RgyZMgVZ/7www9ZsGABN9xwAwALFy6kV69ehIWFMXr0aKxWq71I/OOPP+jQoUORfdx1110EBwczduxYVq9ezccff4yPjw9vvPEGAJs2beKmm26iVatWvPLKK7i4uLBz586zCr5/evTRR0lKSiI2Npb//e9/9naLxcK9997Lm2++SWpqKjVq1LBv++mnn0hPT+fee++9omMiIiLnYIiIiJQh06ZNMwBj5cqV5+zj6elptGnTxn4/MzPzrD5fffWVARhLliyxt40bN84AjD179pzVv7h9REVFGfXr179g5tGjRxuAceTIkWK3Hz9+3ACMW2+91TAMw7DZbEajRo2MqKgow2azFckQHBxs3HDDDWft+8EHHyyyz1tvvdWoWbOm/f7bb7993gyGYRh79uwxAGPatGn2tiFDhhjF/Tmwbds2AzCmTJlSpL1Pnz5GvXr1iuQWEZGSo1McRUSk3KlatWqR2Rz/eS1aVlYWR48epWPHjgCsXr36ovb5z32kpaVx9OhRrr32Wnbv3k1aWtoV5wXsmdeuXcuOHTu4++67OXbsGEePHuXo0aNkZGTQvXt3lixZgs1mK7KPxx57rMj9a665hmPHjpGeng6Al5cXAD/++ONZj70cjRs3Jjw8nC+//NLelpqayi+//MI999yDxWK54ucQEZGzqUATEZFy59SpU1SrVs1+PzU1lWHDhuHr64ubmxu1atUiODgY4KKLq7/++ovIyEiqVKmCl5cXtWrVsl+/daUF2qlTpwDsmXfs2AHA/fffT61atYrcPv74Y7Kzs896zjp16hS5X716dQCOHz8OQN++fencuTMPPfQQvr6+9OvXj2+++eaKirUBAwbw119/sW/fPgBmzZpFbm5ukVkgRUSkZOkaNBERKVcOHjxIWloaDRs2tLfdddddLF26lOeee47Q0FCqVq2KzWajZ8+eF1Wg7Nq1i+7duxMSEsKECRMICgrC2dmZefPm8fbbb1/xiNTGjRsB7JnP7G/cuHGEhoYW+5gzo25nODg4FNvPMAygYARwyZIlLFq0iJ9//pn58+czc+ZMrr/+ehYsWHDOx59Pv379ePrpp/nyyy8ZMWIEX3zxBe3ataNJkyaXvC8REbk4KtBERKRcOTOZRVRUFFAwghQXF8fLL7/MqFGj7P3OjFL907lOy/vpp5/Izs5mzpw5RUaqFi1aVCqZGzRoAICHhweRkZEl8hwAVquV7t270717dyZMmMBrr73Gf/7zHxYtWnTO5znfqYo1atSgd+/efPnll9xzzz389ddfTJw4scTyiojI2XSKo4iIlBsLFy7k1VdfJTg4mHvuuQf4e2TpzEjSGcUVElWqVAE4a6Hq4vaRlpbGtGnTrjjzjBkz+Pjjj4mIiKB79+4AhIWF0aBBA9566y376Y//dOTIkUt+ntTU1LPazozOZWdnn/Nx5zomZ9x3331s3ryZ5557DgcHB/r163fJ2URE5OJpBE1ERMqkX375ha1bt5KXl0dKSgoLFy4kNjaWunXrMmfOHPuCyx4eHnTt2pU333yT3NxcateuzYIFC9izZ89Z+wwLCwPgP//5D/369cPJyYmbb76ZHj164OzszM0338yjjz7KqVOn+Oijj/Dx8eHQoUMXnfnbb7+latWq5OTkkJiYyK+//spff/1F69atmTVrlr2f1Wrl448/plevXjRv3pyBAwdSu3ZtEhMTWbRoER4eHvz000+XdLxeeeUVlixZQu/evalbty6HDx/m/fffJzAwkC5dupzzcWeOyZNPPklUVNRZRVjv3r2pWbMms2bNolevXvj4+FxSLhERuTQq0EREpEw6c7qis7MzNWrUoGXLlkycOJGBAwcWmSAECkaphg4dyuTJkzEMgx49evDLL78QEBBQpF/79u159dVXmTp1KvPnz8dms7Fnzx6aNGnCt99+y0svvcSzzz6Ln58fgwcPplatWjz44IMXnXnw4MEAuLq64u3tTWhoKJ9++il33303Li4uRfp269aN+Ph4Xn31Vd577z1OnTqFn58f4eHhl7UIdJ8+fdi7dy+ffvopR48exdvbm2uvvZaXX34ZT0/Pcz7utttuY+jQoXz99dd88cUXGIZRpEBzdnamb9++vP/++5ocRETkKrAY/z4nREREROQfnn76aT755BOSk5Nxd3c3O46ISIWma9BERETknLKysvjiiy+4/fbbVZyJiFwFOsVRREREznL48GF+++03vv32W44dO8awYcPMjiQiUimoQBMREZGzbN68mXvuuQcfHx8mTZp0zvXaRESkZOkaNBERERERkTJC16CJiIiIiIiUESrQRERE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BqhAk8t1IjOHBZtTmL8xmT92HCE3v+C/qcUCnRt4c3tYbaKa++HurKUMRcoizeIoUr7k5NlYvP0Is9ckErslhZw8m31bg1pViGruR88WfrSs7amRNblsKtDKABVocin2H8tk8fbDLNicQvyuY/Z1XKDgk7xb29bm1ja18ffUpB8iZZ0KNJHyK+10LvM3HmLehmSW7jpq/5AUIMDTletCfOjauBadGtSkmquu95aLpwKtDFCBJudzOiefZXuOsXjbERZvP8KeoxlFtof4VePGlv70auGntctEyhkVaCIVQ3pWLou2HubXTcks2nqE07n59m2OVgtt61Sna2NvujauRTN/DxwddB24nJsKtDJABZr8U3pWLgn7jrNyTyor96ay7mBakVMoHK0WwupWp1sTH3q28CPYu4qJaUXkSqhAE6l4snLz+XPHUZbsOMKS7UfY+4/JuqBgiZu2davTvl4N2terQWiQF27ODiallbLoYmsDXcAiUgpy8mxsTznJpqQ0NiSmkbDvBFuT0/n3xyG1vdzo2rgW3ZroVAkREZGyzNXJgchmvkQ28wUKL03YcYQ/th8hfvcxTmbl8ceOo/yx4yhQsDB2U38PWtT2pGXhrbFvNc22LBekAk3kChiGwaG0LHYdOcXOw6fYnnKSjYnpbEs+SU6+7az+9Wq62z9Zax9cg3o13XWxsYiISDlUp6Y799Wsy30d65JvM9iecpKVe1NZubfgbJnk9CzWH0xj/cE0+2OcHCw08atGY99qNPSpSiOfgq91arhrDTaxKxMF2uTJkxk3bhzJycm0bt2ad999lw4dOpyz/6xZsxg5ciR79+6lUaNGvPHGG9x444327YZhMHr0aD766CNOnDhB586dmTJlCo0aNbL3SU1NZejQofz0009YrVZuv/123nnnHapWrWrvs379eoYMGcLKlSupVasWQ4cO5fnnny+dgyBlVm6+jeS0LA4eP03iidMcPJ7J3qMZ7DqSwa4jp+yLXf6bh6sjLQM9aRHgSatAL9rXq46Ph+tVTi8iIiKlzcFaMFrW1N+DARH1MAyDg8dPs+7gCTYmprMxseCMmrTTuYX304s83tnBSv1aVQj2rkJgdTeCargXfK3uTu3qbpq1uZIx/V975syZxMTEMHXqVMLDw5k4cSJRUVFs27YNHx+fs/ovXbqU/v37M3bsWG666SZmzJhB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Mf/+21Ku3MGDBzl27Jj9Z0qJvdcvbT4TKQ1Lly413n77bWPt2rXGrl27jC+++MKoVauWMWDAAHufEydOGL6+vsZ9991nbNy40fj6668Nd3d344MPPjAxefl28OBBo2HDhkb37t2NgwcPGocOHbLfzpg+fboxY8YMY8uWLcaWLVuM//u//zOsVqvx6aefmpi8fPv6668NFxcXY/r06cbmzZuNRx55xPDy8jKSk5PNjlZhDB482PD09DR+//33Iu/rzMxMwzAMY+fOncYrr7xirFq1ytizZ4/x448/GvXr1ze6du1qcvLy65lnnjF+//13Y8+ePcZff/1lREZGGt7e3sbhw4cNwzCMxx57zKhTp46xcOFCY9WqVUZERIQRERFhcuqKIT8/36hTp47xwgsvFGnX+7zknDx50lizZo2xZs0aAzAmTJhgrFmzxj5j4Ouvv254eXkZP/74o7F+/XrjlltuMYKDg43Tp0/b99GzZ0+jTZs2xvLly40///zTaNSokdG/f3+zXlKZd75jnpOTY/Tp08cIDAw01q5dW+Tn/JnZvi/mb0s52/mO+8mTJ41nn33WiI+PN/bs2WP89ttvRtu2bY1GjRoZWVlZ9n2UxHtdBVoZkJCQYISHhxuenp6Gq6ur0bRpU+O1114r8o9tGIaxbt06o0uXLoaLi4tRu3Zt4/XXXzcpccUwbdo0Ayj2dsb06dONpk2bGu7u7oaHh4fRoUOHIlNly+V59913jTp16hjOzs5Ghw4djGXLlpkdqUI51/t62rRphmEYxv79+42uXbsaNWrUMFxcXIyGDRsazz33nJGWlmZu8HKsb9++hr+/v+Hs7GzUrl3b6Nu3r7Fz50779tOnTxuPP/64Ub16dcPd3d249dZbi3wYJJfv119/NQBj27ZtRdr1Pi85ixYtKvZnyv33328YRsFU+yNHjjR8fX0NFxcXo3v37mf9exw7dszo37+/UbVqVcPDw8MYOHCgcfLkSRNeTflwvmN+Zgmg4m6LFi0yDOPi/7aUos533DMzM40ePXoYtWrVMpycnIy6desaDz/88FkfMJfEe91iGIZxiaN5IiIiIiIiUgq0DpqIiIiIiEgZoQJNRERERESkjFCBJiIiIiIiUkaoQBMRERERESkjVKCJiIiIiIiUESrQREREREREyggVaCIiIiIiImWECjQREREREZEyQgWaiIiIiIhIGaECTUREREREpIxQgSYiIiIiIlJGqEATEREREREpI/4fMWh5hNDAflsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def show_density(var_data):\n", + " from matplotlib import pyplot as plt\n", + "\n", + " fig = plt.figure(figsize=(10,4))\n", + "\n", + " # Plot density\n", + " var_data.plot.density()\n", + "\n", + " # Add titles and labels\n", + " plt.title('Data Density')\n", + "\n", + " # Show the mean, median, and mode\n", + " plt.axvline(x=var_data.mean(), color = 'cyan', linestyle='dashed', linewidth = 2)\n", + " plt.axvline(x=var_data.median(), color = 'red', linestyle='dashed', linewidth = 2)\n", + " plt.axvline(x=var_data.mode()[0], color = 'yellow', linestyle='dashed', linewidth = 2)\n", + "\n", + " # Show the figure\n", + " plt.show()\n", + "\n", + "# Get the density of Grade\n", + "col = df_students['Grade']\n", + "show_density(col)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As expected from the histogram of the sample, the density shows the characteristic \"bell curve\" of what statisticians call a *normal* distribution with the mean and mode at the center and symmetric tails.\n", + "\n", + "## Summary\n", + "\n", + "Well done! There were a number of new concepts in here, so let's summarize. \n", + "\n", + "Here, we:\n", + "\n", + "1. Made graphs with Matplotlib.\n", + "2. Learned how to customize these graphs.\n", + "3. Calculated basic statistics, such as medians.\n", + "4. Looked at the spread of data using box plots and histograms.\n", + "5. Learned about samples versus populations.\n", + "6. Estimated what the population of grades might look like from a sample of grades.\n", + "\n", + "In our next notebook, we'll look at spotting unusual data and finding relationships between data.\n", + "\n", + "## Further Reading\n", + "\n", + "To learn more about the Python packages you explored in this notebook, see the following documentation:\n", + "\n", + "- [NumPy](https://numpy.org/doc/stable/)\n", + "- [Pandas](https://pandas.pydata.org/pandas-docs/stable/)\n", + "- [Matplotlib](https://matplotlib.org/contents.html)" + ] + } + ], + "metadata": { + "kernel_info": { + "name": "conda-env-azureml_py38-py" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.5" + }, + "nteract": { + "version": "nteract-front-end@1.0.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/2-Regression/2-Data/03-real-world-data.ipynb b/2-Regression/2-Data/03-real-world-data.ipynb new file mode 100644 index 000000000..99449094c --- /dev/null +++ b/2-Regression/2-Data/03-real-world-data.ipynb @@ -0,0 +1,620 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Exploring data with Python - real world data\n", + "\n", + "In the last notebook, we looked at grades for our student data and investigated the data visually with histograms and box plots. Now we'll look into more complex cases, describe the data more fully, and discuss how to make basic comparisons between data.\n", + "\n", + "### Real world data distributions\n", + "\n", + "Previously, we looked at grades for our student data and estimated from this sample what the full population of grades might look like. Let's refresh our memory and take a look at this data again.\n", + "\n", + "Run the following code to print out the data and make a histogram plus box plot that shows the grades for our sample of students." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from matplotlib import pyplot as plt\n", + "\n", + "# Load data from a text file\n", + "!wget https://raw.githubusercontent.com/MicrosoftDocs/mslearn-introduction-to-machine-learning/main/Data/ml-basics/grades.csv\n", + "df_students = pd.read_csv('grades.csv',delimiter=',',header='infer')\n", + "\n", + "# Remove any rows with missing data\n", + "df_students = df_students.dropna(axis=0, how='any')\n", + "\n", + "# Calculate who passed, assuming '60' is the grade needed to pass\n", + "passes = pd.Series(df_students['Grade'] >= 60)\n", + "\n", + "# Save who passed to the Pandas dataframe\n", + "df_students = pd.concat([df_students, passes.rename(\"Pass\")], axis=1)\n", + "\n", + "\n", + "# Print the result out into this notebook\n", + "print(df_students)\n", + "\n", + "\n", + "# Create a function that we can re-use\n", + "def show_distribution(var_data):\n", + " '''\n", + " This function will make a distribution (graph) and display it\n", + " '''\n", + "\n", + " # Get statistics\n", + " min_val = var_data.min()\n", + " max_val = var_data.max()\n", + " mean_val = var_data.mean()\n", + " med_val = var_data.median()\n", + " mod_val = var_data.mode()[0]\n", + "\n", + " print('Minimum:{:.2f}\\nMean:{:.2f}\\nMedian:{:.2f}\\nMode:{:.2f}\\nMaximum:{:.2f}\\n'.format(min_val,\n", + " mean_val,\n", + " med_val,\n", + " mod_val,\n", + " max_val))\n", + "\n", + " # Create a figure for 2 subplots (2 rows, 1 column)\n", + " fig, ax = plt.subplots(2, 1, figsize = (10,4))\n", + "\n", + " # Plot the histogram \n", + " ax[0].hist(var_data)\n", + " ax[0].set_ylabel('Frequency')\n", + "\n", + " # Add lines for the mean, median, and mode\n", + " ax[0].axvline(x=min_val, color = 'gray', linestyle='dashed', linewidth = 2)\n", + " ax[0].axvline(x=mean_val, color = 'cyan', linestyle='dashed', linewidth = 2)\n", + " ax[0].axvline(x=med_val, color = 'red', linestyle='dashed', linewidth = 2)\n", + " ax[0].axvline(x=mod_val, color = 'yellow', linestyle='dashed', linewidth = 2)\n", + " ax[0].axvline(x=max_val, color = 'gray', linestyle='dashed', linewidth = 2)\n", + "\n", + " # Plot the boxplot \n", + " ax[1].boxplot(var_data, vert=False)\n", + " ax[1].set_xlabel('Value')\n", + "\n", + " # Add a title to the Figure\n", + " fig.suptitle('Data Distribution')\n", + "\n", + " # Show the figure\n", + " fig.show()\n", + "\n", + "\n", + "show_distribution(df_students['Grade'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you might recall, our data had the mean and mode at the center, with data spread symmetrically from there.\n", + "\n", + "Now let's take a look at the distribution of the study hours data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Get the variable to examine\n", + "col = df_students['StudyHours']\n", + "# Call the function\n", + "show_distribution(col)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The distribution of the study time data is significantly different from that of the grades.\n", + "\n", + "Note that the whiskers of the box plot only begin at around 6.0, indicating that the vast majority of the first quarter of the data is above this value. The minimum is marked with an **o**, indicating that it is statistically an *outlier*: a value that lies significantly outside the range of the rest of the distribution.\n", + "\n", + "Outliers can occur for many reasons. Maybe a student meant to record \"10\" hours of study time, but entered \"1\" and missed the \"0\". Or maybe the student was abnormally lazy when it comes to studying! Either way, it's a statistical anomaly that doesn't represent a typical student. Let's see what the distribution looks like without it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Get the variable to examine\n", + "# We will only get students who have studied more than one hour\n", + "col = df_students[df_students.StudyHours>1]['StudyHours']\n", + "\n", + "# Call the function\n", + "show_distribution(col)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For learning purposes, we've just treated the value **1** as a true outlier here and excluded it. In the real world, it would be unusual to exclude data at the extremes without more justification when our sample size is so small. This is because the smaller our sample size, the more likely it is that our sampling is a bad representation of the whole population. (Here, the population means grades for all students, not just our 22.) For example, if we sampled study time for another 1,000 students, we might find that it's actually quite common to not study much!\n", + "\n", + "When we have more data available, our sample becomes more reliable. This makes it easier to consider outliers as being values that fall below or above percentiles within which most of the data lie. For example, the following code uses the Pandas **quantile** function to exclude observations below the 0.01th percentile (the value above which 99% of the data reside)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# calculate the 0.01th percentile\n", + "q01 = df_students.StudyHours.quantile(0.01)\n", + "# Get the variable to examine\n", + "col = df_students[df_students.StudyHours>q01]['StudyHours']\n", + "# Call the function\n", + "show_distribution(col)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> **Tip**: You can also eliminate outliers at the upper end of the distribution by defining a threshold at a high percentile value. For example, you could use the **quantile** function to find the 0.99 percentile, below which 99% of the data reside.\n", + "\n", + "With the outliers removed, the box plot shows all data within the four quartiles. Note that the distribution is not symmetric like it is for the grade data. There are some students with very high study times of around 16 hours, but the bulk of the data is between 7 and 13 hours. The few extremely high values pull the mean towards the higher end of the scale.\n", + "\n", + "Let's look at the density for this distribution." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def show_density(var_data):\n", + " fig = plt.figure(figsize=(10,4))\n", + "\n", + " # Plot density\n", + " var_data.plot.density()\n", + "\n", + " # Add titles and labels\n", + " plt.title('Data Density')\n", + "\n", + " # Show the mean, median, and mode\n", + " plt.axvline(x=var_data.mean(), color = 'cyan', linestyle='dashed', linewidth = 2)\n", + " plt.axvline(x=var_data.median(), color = 'red', linestyle='dashed', linewidth = 2)\n", + " plt.axvline(x=var_data.mode()[0], color = 'yellow', linestyle='dashed', linewidth = 2)\n", + "\n", + " # Show the figure\n", + " plt.show()\n", + "\n", + "# Get the density of StudyHours\n", + "show_density(col)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This kind of distribution is called *right skewed*. The mass of the data is on the left side of the distribution, creating a long tail to the right because of the values at the extreme high end, which pull the mean to the right.\n", + "\n", + "#### Measures of variance\n", + "\n", + "So now we have a good idea where the middle of the grade and study hours data distributions are. However, there's another aspect of the distributions we should examine: how much variability is there in the data?\n", + "\n", + "Typical statistics that measure variability in the data include:\n", + "\n", + "- **Range**: The difference between the maximum and minimum. There's no built-in function for this, but it's easy to calculate using the **min** and **max** functions.\n", + "- **Variance**: The average of the squared difference from the mean. You can use the built-in **var** function to find this.\n", + "- **Standard Deviation**: The square root of the variance. You can use the built-in **std** function to find this." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "for col_name in ['Grade','StudyHours']:\n", + " col = df_students[col_name]\n", + " rng = col.max() - col.min()\n", + " var = col.var()\n", + " std = col.std()\n", + " print('\\n{}:\\n - Range: {:.2f}\\n - Variance: {:.2f}\\n - Std.Dev: {:.2f}'.format(col_name, rng, var, std))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Of these statistics, the standard deviation is generally the most useful. It provides a measure of variance in the data on the same scale as the data itself (so grade points for the Grade distribution and hours for the StudyHours distribution). The higher the standard deviation, the more variance there is when comparing values in the distribution to the distribution mean; in other words, the data is more spread out.\n", + "\n", + "When working with a *normal* distribution, the standard deviation works with the particular characteristics of a normal distribution to provide even greater insight. Run the following cell to see the relationship between standard deviations and the data in the normal distribution." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import scipy.stats as stats\n", + "\n", + "# Get the Grade column\n", + "col = df_students['Grade']\n", + "\n", + "# get the density\n", + "density = stats.gaussian_kde(col)\n", + "\n", + "# Plot the density\n", + "col.plot.density()\n", + "\n", + "# Get the mean and standard deviation\n", + "s = col.std()\n", + "m = col.mean()\n", + "\n", + "# Annotate 1 stdev\n", + "x1 = [m-s, m+s]\n", + "y1 = density(x1)\n", + "plt.plot(x1,y1, color='magenta')\n", + "plt.annotate('1 std (68.26%)', (x1[1],y1[1]))\n", + "\n", + "# Annotate 2 stdevs\n", + "x2 = [m-(s*2), m+(s*2)]\n", + "y2 = density(x2)\n", + "plt.plot(x2,y2, color='green')\n", + "plt.annotate('2 std (95.45%)', (x2[1],y2[1]))\n", + "\n", + "# Annotate 3 stdevs\n", + "x3 = [m-(s*3), m+(s*3)]\n", + "y3 = density(x3)\n", + "plt.plot(x3,y3, color='orange')\n", + "plt.annotate('3 std (99.73%)', (x3[1],y3[1]))\n", + "\n", + "# Show the location of the mean\n", + "plt.axvline(col.mean(), color='cyan', linestyle='dashed', linewidth=1)\n", + "\n", + "plt.axis('off')\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The horizontal lines show the percentage of data within one, two, and three standard deviations of the mean (plus or minus).\n", + "\n", + "In any normal distribution:\n", + "- Approximately 68.26% of values fall within one standard deviation from the mean.\n", + "- Approximately 95.45% of values fall within two standard deviations from the mean.\n", + "- Approximately 99.73% of values fall within three standard deviations from the mean.\n", + "\n", + "So, because we know that the mean grade is 49.18, the standard deviation is 21.74, and distribution of grades is approximately normal, we can calculate that 68.26% of students should achieve a grade between 27.44 and 70.92.\n", + "\n", + "The descriptive statistics we've used to understand the distribution of the student data variables are the basis of statistical analysis. Because they're such an important part of exploring your data, there's a built-in `describe` method of the DataFrame object that returns the main descriptive statistics for all numeric columns." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df_students.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Comparing data\n", + "\n", + "Now that you know something about the statistical distribution of the data in your dataset, you're ready to examine your data to identify any apparent relationships between variables.\n", + "\n", + "First of all, let's get rid of any rows that contain outliers so that we have a sample that is representative of a typical class of students. We identified that the StudyHours column contains some outliers with extremely low values, so we'll remove those rows." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df_sample = df_students[df_students['StudyHours']>1]\n", + "df_sample" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Comparing numeric and categorical variables\n", + "\n", + "The data includes two *numeric* variables (**StudyHours** and **Grade**) and two *categorical* variables (**Name** and **Pass**). Let's start by comparing the numeric **StudyHours** column to the categorical **Pass** column to see if there's an apparent relationship between the number of hours studied and a passing grade.\n", + "\n", + "To make this comparison, let's create box plots showing the distribution of StudyHours for each possible Pass value (true and false)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df_sample.boxplot(column='StudyHours', by='Pass', figsize=(8,5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Comparing the StudyHours distributions, it's immediately apparent (if not particularly surprising) that students who passed the course tended to study for more hours than students who didn't. So if you wanted to predict whether or not a student is likely to pass the course, the amount of time they spend studying may be a good predictive indicator.\n", + "\n", + "### Comparing numeric variables\n", + "\n", + "Now let's compare two numeric variables. We'll start by creating a bar chart that shows both grade and study hours." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a bar plot of name vs grade and study hours\n", + "df_sample.plot(x='Name', y=['Grade','StudyHours'], kind='bar', figsize=(8,5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The chart shows bars for both grade and study hours for each student, but it's not easy to compare because the values are on different scales. A grade is measured in grade points (and ranges from 3 to 97), and study time is measured in hours (and ranges from 1 to 16).\n", + "\n", + "A common technique when dealing with numeric data in different scales is to *normalize* the data so that the values retain their proportional distribution but are measured on the same scale. To accomplish this, we'll use a technique called *MinMax* scaling that distributes the values proportionally on a scale of 0 to 1. You could write the code to apply this transformation, but the **Scikit-Learn** library provides a scaler to do it for you." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.preprocessing import MinMaxScaler\n", + "\n", + "# Get a scaler object\n", + "scaler = MinMaxScaler()\n", + "\n", + "# Create a new dataframe for the scaled values\n", + "df_normalized = df_sample[['Name', 'Grade', 'StudyHours']].copy()\n", + "\n", + "# Normalize the numeric columns\n", + "df_normalized[['Grade','StudyHours']] = scaler.fit_transform(df_normalized[['Grade','StudyHours']])\n", + "\n", + "# Plot the normalized values\n", + "df_normalized.plot(x='Name', y=['Grade','StudyHours'], kind='bar', figsize=(8,5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the data normalized, it's easier to see an apparent relationship between grade and study time. It's not an exact match, but it definitely seems like students with higher grades tend to have studied more.\n", + "\n", + "So there seems to be a correlation between study time and grade. In fact, there's a statistical *correlation* measurement we can use to quantify the relationship between these columns." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "df_normalized.Grade.corr(df_normalized.StudyHours)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The correlation statistic is a value between -1 and 1 that indicates the strength of a relationship. Values above 0 indicate a *positive* correlation (high values of one variable tend to coincide with high values of the other), while values below 0 indicate a *negative* correlation (high values of one variable tend to coincide with low values of the other). In this case, the correlation value is close to 1, showing a strongly positive correlation between study time and grade.\n", + "\n", + "> **Note**: Data scientists often quote the maxim \"*correlation* is not *causation*.\" In other words, as tempting as it might be, you shouldn't interpret the statistical correlation as explaining *why* one of the values is high. In the case of the student data, the statistics demonstrate that students with high grades tend to also have high amounts of study time, but this is not the same as proving that they achieved high grades *because* they studied a lot. You could equally use the statistic as evidence to support the nonsensical conclusion that the students studied a lot *because* their grades were going to be high.\n", + "\n", + "Another way to visualize the apparent correlation between two numeric columns is to use a *scatter* plot." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a scatter plot\n", + "df_sample.plot.scatter(title='Study Time vs Grade', x='StudyHours', y='Grade')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Again, it looks like there's a discernible pattern in which the students who studied the most hours are also the students who got the highest grades.\n", + "\n", + "We can see this more clearly by adding a *regression* line (or a *line of best fit*) to the plot that shows the general trend in the data. To do this, we'll use a statistical technique called *least squares regression*.\n", + "\n", + "Remember when you were learning how to solve linear equations in school, and recall that the *slope-intercept* form of a linear equation looks like this: \n", + "\n", + "$ y = mx + b $\n", + "\n", + "In this equation, *y* and *x* are the coordinate variables, *m* is the slope of the line, and *b* is the y-intercept (where the line goes through the Y-axis).\n", + "\n", + "In the case of our scatter plot for our student data, we already have our values for *x* (*StudyHours*) and *y* (*Grade*), so we just need to calculate the intercept and slope of the straight line that lies closest to those points. Then, we can form a linear equation that calculates a new *y* value on that line for each of our *x* (*StudyHours*) values. To avoid confusion, we'll call this new *y* value *f(x)* (because it's the output from a linear equation ***f***unction based on *x*). The difference between the original *y* (*Grade*) value and the *f(x)* value is the *error* between our regression line and the actual *Grade* achieved by the student. Our goal is to calculate the slope and intercept for a line with the lowest overall error.\n", + "\n", + "Specifically, we define the overall error by taking the error for each point, squaring it, and adding all the squared errors together. The line of best fit is the line that gives us the lowest value for the sum of the squared errors, hence the name *least squares regression*.\n", + "\n", + "Fortunately, you don't need to code the regression calculation yourself. The **SciPy** package includes a **stats** class that provides a **linregress** method to do the hard work for you. This returns (among other things) the coefficients you need for the slope equation: slope (*m*) and intercept (*b*) based on a given pair of variable samples you want to compare." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from scipy import stats\n", + "\n", + "#\n", + "df_regression = df_sample[['Grade', 'StudyHours']].copy()\n", + "\n", + "# Get the regression slope and intercept\n", + "m, b, r, p, se = stats.linregress(df_regression['StudyHours'], df_regression['Grade'])\n", + "print('slope: {:.4f}\\ny-intercept: {:.4f}'.format(m,b))\n", + "print('so...\\n f(x) = {:.4f}x + {:.4f}'.format(m,b))\n", + "\n", + "# Use the function (mx + b) to calculate f(x) for each x (StudyHours) value\n", + "df_regression['fx'] = (m * df_regression['StudyHours']) + b\n", + "\n", + "# Calculate the error between f(x) and the actual y (Grade) value\n", + "df_regression['error'] = df_regression['fx'] - df_regression['Grade']\n", + "\n", + "# Create a scatter plot of Grade vs StudyHours\n", + "df_regression.plot.scatter(x='StudyHours', y='Grade')\n", + "\n", + "# Plot the regression line\n", + "plt.plot(df_regression['StudyHours'],df_regression['fx'], color='cyan')\n", + "\n", + "# Display the plot\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that this time, the code plotted two distinct things: the scatter plot of the sample study hours and grades is plotted as before, and then a line of best fit based on the least squares regression coefficients is plotted.\n", + "\n", + "The slope and intercept coefficients calculated for the regression line are shown above the plot.\n", + "\n", + "The line is based on the ***f*(x)** values calculated for each **StudyHours** value. Run the following cell to see a table that includes the following values:\n", + "\n", + "- The **StudyHours** for each student\n", + "- The **Grade** achieved by each student\n", + "- The ***f(x)*** value calculated using the regression line coefficients\n", + "- The *error* between the calculated ***f(x)*** value and the actual **Grade** value\n", + "\n", + "Some of the errors, particularly at the extreme ends, are quite large (up to more than 17.5 grade points). But, in general, the line is pretty close to the actual grades." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Show the original x,y values, the f(x) value, and the error\n", + "df_regression[['StudyHours', 'Grade', 'fx', 'error']]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Using the regression coefficients for prediction\n", + "\n", + "Now that you have the regression coefficients for the study time and grade relationship, you can use them in a function to estimate the expected grade for a given amount of study." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Define a function based on our regression coefficients\n", + "def f(x):\n", + " m = 6.3134\n", + " b = -17.9164\n", + " return m*x + b\n", + "\n", + "study_time = 14\n", + "\n", + "# Get f(x) for study time\n", + "prediction = f(study_time)\n", + "\n", + "# Grade can't be less than 0 or more than 100\n", + "expected_grade = max(0,min(100,prediction))\n", + "\n", + "#Print the estimated grade\n", + "print ('Studying for {} hours per week may result in a grade of {:.0f}'.format(study_time, expected_grade))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So by applying statistics to sample data, you've determined a relationship between study time and grade and encapsulated that relationship in a general function that can be used to predict a grade for a given amount of study time.\n", + "\n", + "This technique is, in fact, the basic premise of machine learning. You can take a set of sample data that includes one or more *features* (in this case, the number of hours studied) and a known *label* value (in this case, the grade achieved) and use the sample data to derive a function that calculates predicted label values for any given set of features.\n", + "\n", + "## Summary\n", + "\n", + "Here we've looked at:\n", + "\n", + "1. What an outlier is and how to remove them\n", + "2. How data can be skewed\n", + "3. How to look at the spread of data\n", + "4. Basic ways to compare variables, such as grades and study time \n", + "\n", + "## Further Reading\n", + "\n", + "To learn more about the Python packages you explored in this notebook, see the following documentation:\n", + "\n", + "- [NumPy](https://numpy.org/doc/stable/)\n", + "- [Pandas](https://pandas.pydata.org/pandas-docs/stable/)\n", + "- [Matplotlib](https://matplotlib.org/contents.html)\n" + ] + } + ], + "metadata": { + "kernel_info": { + "name": "conda-env-azureml_py38-py" + }, + "kernelspec": { + "display_name": "azureml_py38", + "language": "python", + "name": "conda-env-azureml_py38-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.9" + }, + "nteract": { + "version": "nteract-front-end@1.0.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/2-Regression/2-Data/grades.csv b/2-Regression/2-Data/grades.csv new file mode 100644 index 000000000..f159dc801 --- /dev/null +++ b/2-Regression/2-Data/grades.csv @@ -0,0 +1,25 @@ +Name,StudyHours,Grade +Dan,10,50 +Joann,11.5,50 +Pedro,9,47 +Rosie,16,97 +Ethan,9.25,49 +Vicky,1,3 +Frederic,11.5,53 +Jimmie,9,42 +Rhonda,8.5,26 +Giovanni,14.5,74 +Francesca,15.5,82 +Rajab,13.75,62 +Naiyana,9,37 +Kian,8,15 +Jenny,15.5,70 +Jakeem,8,27 +Helena,9,36 +Ismat,6,35 +Anila,10,48 +Skye,12,52 +Daniel,12.5,63 +Aisha,12,64 +Bill,8, +Ted,, diff --git a/2-Regression/2-Data/notebook.ipynb b/2-Regression/2-Data/notebook.ipynb index c9b9925ba..a5748716d 100644 --- a/2-Regression/2-Data/notebook.ipynb +++ b/2-Regression/2-Data/notebook.ipynb @@ -1,5 +1,493 @@ { + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Imports" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
City NameTypePackageVarietySub VarietyGradeDateLow PriceHigh PriceMostly Low...Unit of SaleQualityConditionAppearanceStorageCropRepackTrans ModeUnnamed: 24Unnamed: 25
70BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN9/24/1615.015.015.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
71BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN9/24/1618.018.018.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
72BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN10/1/1618.018.018.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
73BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN10/1/1617.017.017.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
74BALTIMORENaN1 1/9 bushel cartonsPIE TYPENaNNaN10/8/1615.015.015.0...NaNNaNNaNNaNNaNNaNNNaNNaNNaN
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " City Name Type Package Variety Sub Variety Grade \\\n", + "70 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "71 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "72 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "73 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "74 BALTIMORE NaN 1 1/9 bushel cartons PIE TYPE NaN NaN \n", + "\n", + " Date Low Price High Price Mostly Low ... Unit of Sale Quality \\\n", + "70 9/24/16 15.0 15.0 15.0 ... NaN NaN \n", + "71 9/24/16 18.0 18.0 18.0 ... NaN NaN \n", + "72 10/1/16 18.0 18.0 18.0 ... NaN NaN \n", + "73 10/1/16 17.0 17.0 17.0 ... NaN NaN \n", + "74 10/8/16 15.0 15.0 15.0 ... NaN NaN \n", + "\n", + " Condition Appearance Storage Crop Repack Trans Mode Unnamed: 24 \\\n", + "70 NaN NaN NaN NaN N NaN NaN \n", + "71 NaN NaN NaN NaN N NaN NaN \n", + "72 NaN NaN NaN NaN N NaN NaN \n", + "73 NaN NaN NaN NaN N NaN NaN \n", + "74 NaN NaN NaN NaN N NaN NaN \n", + "\n", + " Unnamed: 25 \n", + "70 NaN \n", + "71 NaN \n", + "72 NaN \n", + "73 NaN \n", + "74 NaN \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "pumpkins = pd.read_csv(\"../data/US-pumpkins.csv\")\n", + "\n", + "#filters out any non-bushel Package\n", + "pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]\n", + "#prints first few rows of the dataset\n", + "pumpkins.head()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "City Name 0\n", + "Type 406\n", + "Package 0\n", + "Variety 0\n", + "Sub Variety 167\n", + "Grade 415\n", + "Date 0\n", + "Low Price 0\n", + "High Price 0\n", + "Mostly Low 24\n", + "Mostly High 24\n", + "Origin 0\n", + "Origin District 396\n", + "Item Size 114\n", + "Color 145\n", + "Environment 415\n", + "Unit of Sale 404\n", + "Quality 415\n", + "Condition 415\n", + "Appearance 415\n", + "Storage 415\n", + "Crop 415\n", + "Repack 0\n", + "Trans Mode 415\n", + "Unnamed: 24 415\n", + "Unnamed: 25 391\n", + "dtype: int64" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#How many cells in each column are empty\n", + "pumpkins.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "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", + "
PackageDateLow PriceHigh Price
701 1/9 bushel cartons9/24/1615.015.0
711 1/9 bushel cartons9/24/1618.018.0
721 1/9 bushel cartons10/1/1618.018.0
731 1/9 bushel cartons10/1/1617.017.0
741 1/9 bushel cartons10/8/1615.015.0
\n", + "
" + ], + "text/plain": [ + " Package Date Low Price High Price\n", + "70 1 1/9 bushel cartons 9/24/16 15.0 15.0\n", + "71 1 1/9 bushel cartons 9/24/16 18.0 18.0\n", + "72 1 1/9 bushel cartons 10/1/16 18.0 18.0\n", + "73 1 1/9 bushel cartons 10/1/16 17.0 17.0\n", + "74 1 1/9 bushel cartons 10/8/16 15.0 15.0" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_columns = ['Package', 'Month', 'Low Price','High Price','Date']\n", + "\n", + "pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1)\n", + "\n", + "pumpkins.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Month Package Price\n", + "70 9 1 1/9 bushel cartons 13.50\n", + "71 9 1 1/9 bushel cartons 16.20\n", + "72 10 1 1/9 bushel cartons 16.20\n", + "73 10 1 1/9 bushel cartons 15.30\n", + "74 10 1 1/9 bushel cartons 13.50\n", + "... ... ... ...\n", + "1738 9 1/2 bushel cartons 30.00\n", + "1739 9 1/2 bushel cartons 28.75\n", + "1740 9 1/2 bushel cartons 25.75\n", + "1741 9 1/2 bushel cartons 24.00\n", + "1742 9 1/2 bushel cartons 24.00\n", + "\n", + "[415 rows x 3 columns]\n" + ] + } + ], + "source": [ + "price = (pumpkins['Low Price']+ pumpkins['High Price'])/2\n", + "\n", + "month = pd.DatetimeIndex(pumpkins['Date']).month\n", + "\n", + "refined_data = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Price': price})\n", + "\n", + "refined_data.loc[refined_data['Package'].str.contains('1 1/9'), 'Price'] = price/(1+ 1/9)\n", + "\n", + "refined_data.loc[refined_data['Package'].str.contains('1/2'), 'Price'] = price/(1/2)\n", + "\n", + "print(refined_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGdCAYAAAAxCSikAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9WklEQVR4nO3deXxU9b3/8fckkIUlg0GySYAgLg0YFCs0lkUEC2gRqL1XvCqLV6wLrUBLJf5AoEqjcOuCIFi8XlR663IVqxWxiE2QmoIsKWIsigYCkkWJzGRPSM7vD27mMslMck4ySc6E1/PxmMfDOfM93/l8z/ecM28mZ44OwzAMAQAA2FhIRxcAAADQHAILAACwPQILAACwPQILAACwPQILAACwPQILAACwPQILAACwPQILAACwvS4dXUCg1NXV6cSJE+rZs6ccDkdHlwMAAEwwDEMlJSVKSEhQSIj/71E6TWA5ceKEEhMTO7oMAADQAseOHVPfvn39vt5pAkvPnj0lnRlwVFRUB1cDAADMcLvdSkxM9HyO+9NpAkv9n4GioqIILAAABJnmLufgolsAAGB7BBYAAGB7BBYAAGB7BBYAAGB7BBYAAGB7BBYAAGB7BBYAAGB7BBYAAGB7nebGcZ1dRXWtfrslR0dOlmtA72568PpkRYaFmlq3tPK05r+yX3nfVajfeZF64uYr1COic0x9bZ2h3bnFKiqpVEzPCA1PilZoCP8vKQDobByGYRhWVtixY4dWrVqlvXv3Kj8/X5s3b9bUqVMlSTU1NVq8eLG2bNmir776Sk6nU+PHj9ejjz6qhISEJvtdu3atVq1apYKCAg0dOlRPP/20hg8fbrout9stp9Mpl8vV6e50O+fFj7Utp6jR8uuSY7RhxlVNrnvjmg914Li70fKUvlF6a+6ogNXYEbYezNfyt3OU76r0LIt3Rmjp5GRNHBLfgZUBAMwy+/lt+U9CZWVlGjp0qNauXdvotfLycu3bt09LlizRvn379MYbb+jQoUO68cYbm+zzlVde0YIFC7R06VLt27dPQ4cO1YQJE1RU1PhD+lzjL6xI0racIs158WO/6/oLK5J04LhbN675MCA1doStB/N1z6Z9XmFFkgpclbpn0z5tPZjfQZUBANqC5W9YvFZ2OLy+YfHl448/1vDhw3X06FH169fPZ5sRI0boqquu0po1ayRJdXV1SkxM1M9//nMtWrTIVC2d8RuWiupafe+hrc22++w3Exv9eai08rSGLHuv2XUPLpsQdH8eqq0zNPKxDxqFlXoOSXHOCO184Fr+PAQANtdm37BY5XK55HA41KtXL5+vV1dXa+/evRo/fvz/FRUSovHjxysrK8tvv1VVVXK73V6Pzua3W3Ja3G7+K/tNrWu2nZ3szi32G1YkyZCU76rU7tzi9isKANCm2jSwVFZW6oEHHtAtt9ziNzV9++23qq2tVWxsrNfy2NhYFRQU+O07PT1dTqfT80hMTAxo7XZw5GR5i9vlfVdhal2z7eykqMR/WGlJOwCA/bVZYKmpqdG//uu/yjAMrVu3LuD9p6WlyeVyeR7Hjh0L+Ht0tAG9u7W4Xb/zIk2ta7adncT0jAhoOwCA/bVJYKkPK0ePHtW2bdua/JvU+eefr9DQUBUWFnotLywsVFxcnN/1wsPDFRUV5fXobB68PrnF7Z64+QpT65ptZyfDk6IV74yQv6tTHDrza6HhSdHtWRYAoA0FPLDUh5UvvvhC77//vnr37t1k+7CwMF155ZXavn27Z1ldXZ22b9+u1NTUQJcXVCLDQnVdckyTba5LjvF5P5YeEV2U0rfpEJfSNyroLriVpNAQh5ZOPhPSGoaW+udLJydzwS0AdCKWA0tpaamys7OVnZ0tScrNzVV2drby8vJUU1Ojn/70p9qzZ4/+8Ic/qLa2VgUFBSooKFB1dbWnj3Hjxnl+ESRJCxYs0IYNG/TCCy/os88+0z333KOysjLNnj279SMMchtmXOU3tDR3H5a35o7yG1qC/T4sE4fEa91twxTn9P6zT5wzQutuG8Z9WACgk7H8s+aMjAyNHTu20fKZM2dq2bJlSkpK8rneX//6V11zzTWSpAEDBmjWrFlatmyZ5/U1a9Z4bhx3+eWXa/Xq1RoxYoTpujrjz5rPxp1ufeNOtwAQ3Mx+frfqPix20tkDCwAAnZFt7sMCAADQWgQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABge5YDy44dOzR58mQlJCTI4XDozTff9Hr9jTfe0I9+9CP17t1bDodD2dnZzfa5ceNGORwOr0dERITV0gAAQCdlObCUlZVp6NChWrt2rd/XR44cqccee8xSv1FRUcrPz/c8jh49arU0AADQSXWxusKkSZM0adIkv6/ffvvtkqQjR45Y6tfhcCguLs5qOQAA4Bxgm2tYSktL1b9/fyUmJmrKlCn69NNPm2xfVVUlt9vt9QAAAJ2TLQLLJZdcoueff15/+tOftGnTJtXV1enqq6/W8ePH/a6Tnp4up9PpeSQmJrZjxQAAoD3ZIrCkpqZqxowZuvzyyzVmzBi98cYb6tOnj5599lm/66Slpcnlcnkex44da8eKAQBAe7J8DUt76Nq1q6644godPnzYb5vw8HCFh4e3Y1UAAKCj2OIbloZqa2v1ySefKD4+vqNLAQAANmD5G5bS0lKvbz5yc3OVnZ2t6Oho9evXT8XFxcrLy9OJEyckSYcOHZIkxcXFeX4FNGPGDF1wwQVKT0+XJP3mN7/RD37wAw0aNEinTp3SqlWrdPToUd15552tHiAAAAh+lgPLnj17NHbsWM/zBQsWSJJmzpypjRs36q233tLs2bM9r0+fPl2StHTpUi1btkySlJeXp5CQ//ty57vvvtOcOXNUUFCg8847T1deeaU++ugjJScnt2hQAACgc3EYhmF0dBGB4Ha75XQ65XK5FBUV1dHlAAAAE8x+ftvyGhYAAICzEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtEVgAAIDtdenoAuysts7Q7txiFZVUKqZnhIYnRSs0xNFm71daeVrzX9mvvO8q1O+8SD1x8xXqEXFmigpOVerHT++Qu/K0oiK66M8/H624XhGm+j1cUKpJqzNVUyd1DZHe/cUYDYrr0aIaq0/X6aWsIzpaXK7+0d10e+oAhXVpfe5t6bZuapshuLXVvuYqr9EdG3frhKtSCc4IPT9ruJzduvpsm1tUpolPZaqq1lB4qENb7x+jpJjura63vc8tgWBlu1nRVvNsRTDOx7nIYRiGYWWFHTt2aNWqVdq7d6/y8/O1efNmTZ061fP6G2+8ofXr12vv3r0qLi7W/v37dfnllzfb72uvvaYlS5boyJEjuuiii/TYY4/p+uuvN12X2+2W0+mUy+VSVFSUlSH5tPVgvpa/naN8V6VnWbwzQksnJ2vikPhW99/QjWs+1IHj7kbLU/pG6YvCUlXU1DV6LbJriD57eFKT/SYteke+JtghKffRGyzVmL4lRxs+zFXdWR2GOKQ5o5KUdn2ypb7O1tJt3dQ2e2vuqBbXg47XVvvamFUf6OjJikbL+/eOVObCa72WDUx7x+v9z67jq3TvY8dKve19bgkEK9vNiraaZyuCcT46G7Of35ZjbFlZmYYOHaq1a9f6fX3kyJF67LHHTPf50Ucf6ZZbbtG///u/a//+/Zo6daqmTp2qgwcPWi0vILYezNc9m/Z57cCSVOCq1D2b9mnrwfyAvp+/D15JOnDc7TOsSFJFTZ2+t+Rdv/36CyuSZPzv62alb8nRsztyG53A6wzp2R25St+SY7qvs7V0Wze3zW5c82GL6kHHa6t9zd+HriQdPVmhMas+8Dz3F1bq6xiY9n/HjpV62/vcEghWtpsVbTXPVgTjfJzLLAeWSZMm6ZFHHtG0adN8vn777bfroYce0vjx4033+dRTT2nixIlauHChvve97+nhhx/WsGHDtGbNGqvltVptnaHlb+f4/KCvX7b87RzV+jubWVRaedrvB68ZFTV1KjhV2Wj54YJSv2GlnvG/7ZpTfbpOGz7MbbLNhg9zVX3ad7Dyp6Xb2sw2O3DcrdLK05bqQcdrq33NVV7j90O33tGTFXKV1yi3qMxvWKlXZ5z5c5GVetv73BIIVrabFW01z1YE43yc62xx0W1WVlajgDNhwgRlZWX5Xaeqqkput9vrEQi7c4sbpe2zGZLyXZXanVsckPeb/8r+Vvfx46d3NFo2aXWmqXXNtHsp64ipE/hLWUdMvWe9lm5rs9ssENsW7aut9rU7Nu423W7iU+aOnYlPZVqqt73PLYFgZbtZ0VbzbEUwzse5zhaBpaCgQLGxsV7LYmNjVVBQ4Hed9PR0OZ1OzyMxMTEgtRSV+N+BW9KuOXnfNf2vFzPcPr5J8PNXpBa1O1pcbqovs+3qtXRbm91mgdi2aF9tta+daOKDqWG7qlpz/6KuqjUs1dve55ZAsLLdrGirebYiGOfjXGeLwNISaWlpcrlcnsexY8cC0m9MT3O/vDHbrjn9zotsdR9RPn4V09XkzJpp1z+6m6m+zLar19JtbXabBWLbon211b6W4DS3ryU4IxQeau7XIeGhDkv1tve5JRCsbDcr2mqerQjG+TjX2SKwxMXFqbCw0GtZYWGh4uLi/K4THh6uqKgor0cgDE+KVrwzQv5OWQ6duYJ8eFJ0QN7viZuvaHUff/756EbL3v3FGFPrmml3e+oANfcLvxDHmXZWtHRbm91mgdi2aF9tta89P2u46XZb7zd37Gy9f4yletv73BIIVrabFW01z1YE43yc62wRWFJTU7V9+3avZdu2bVNqamq71xIa4tDSyWd+TtdwR65/vnRycsB+o98jootS+rY8bEV2DfF5P5ZBcT38Hoj1HP/brjlhXUI0Z1RSk23mjEqyfO+Elm5rM9sspW8U92MJQm21rzm7dVX/3k1/49a/d6Sc3boqKaa7qQ/TpJjulupt73NLIFjZbla01TxbEYzzca6zvDeUlpYqOztb2dnZkqTc3FxlZ2crLy9PklRcXKzs7Gzl5Jz5SdqhQ4eUnZ3tdT3KjBkzlJaW5nl+//33a+vWrfrd736nf/7zn1q2bJn27NmjuXPntmZsLTZxSLzW3TZMcQ2+5oxzRmjdbcMC/tv8t+aO8vsBnNI3SpF+/m7T3H1Ych+9ocl/PVi5D0va9cn62eikRifyEIf0s9Etv2dCS7d1c9uM+7AEr7ba1zIXXuv3w7fh/US+Sr/Bb2hpeB8WK/W297klEKxsNyvaap6tCMb5OJdZvnFcRkaGxo4d22j5zJkztXHjRm3cuFGzZ89u9PrSpUu1bNkySdI111yjAQMGaOPGjZ7XX3vtNS1evNhz47iVK1d26I3jJO506wt3ukV74U639sKdbtFWzH5+Ww4sdtUWgQUAALStNrvTLQAAQHsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANsjsAAAANuzHFh27NihyZMnKyEhQQ6HQ2+++abX64Zh6KGHHlJ8fLwiIyM1fvx4ffHFF032uWzZMjkcDq/HpZdearU0AADQSVkOLGVlZRo6dKjWrl3r8/WVK1dq9erVWr9+vXbt2qXu3btrwoQJqqysbLLfwYMHKz8/3/PYuXOn1dIAAEAn1cXqCpMmTdKkSZN8vmYYhp588kktXrxYU6ZMkSS9+OKLio2N1Ztvvqnp06f7L6RLF8XFxVktBwAAnAMCeg1Lbm6uCgoKNH78eM8yp9OpESNGKCsrq8l1v/jiCyUkJGjgwIG69dZblZeX12T7qqoqud1urwcAAOicAhpYCgoKJEmxsbFey2NjYz2v+TJixAht3LhRW7du1bp165Sbm6tRo0appKTE7zrp6elyOp2eR2JiYmAGAQAAbMcWvxKaNGmS/uVf/kUpKSmaMGGCtmzZolOnTunVV1/1u05aWppcLpfncezYsXasGAAAtKeABpb6a1AKCwu9lhcWFlq6PqVXr166+OKLdfjwYb9twsPDFRUV5fUAAACdU0ADS1JSkuLi4rR9+3bPMrfbrV27dik1NdV0P6Wlpfryyy8VHx8fyPIAAECQshxYSktLlZ2drezsbElnLrTNzs5WXl6eHA6H5s2bp0ceeURvvfWWPvnkE82YMUMJCQmaOnWqp49x48ZpzZo1nue/+tWvlJmZqSNHjuijjz7StGnTFBoaqltuuaXVAwQAAMHP8s+a9+zZo7Fjx3qeL1iwQJI0c+ZMbdy4Ub/+9a9VVlamu+66S6dOndLIkSO1detWRUREeNb58ssv9e2333qeHz9+XLfccotOnjypPn36aOTIkfr73/+uPn36tGZsAACgk3AYhmF0dBGB4Ha75XQ65XK5uJ4FAIAgYfbz2xa/EgIAAGgKgQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANgegQUAANhe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HV1Si7hcLklSdHS0JGnv3r2qqanxmrtLL71U/fr1C8q5azi+en/4wx90/vnna8iQIUpLS1N5eXlHlNditbW1evnll1VWVqbU1NRON28Nx1cv2Oftvvvu0w033OA1T1LnOO78ja1eMM/dF198oYSEBA0cOFC33nqr8vLyJHWOees0//PDliooKJAkxcbGei2PjY31vBbMJk6cqJ/85CdKSkrSl19+qQcffFCTJk1SVlaWQkNDO7o80+rq6jRv3jz98Ic/1JAhQySdmbuwsDD16tXLq20wzp2v8UnSv/3bv6l///5KSEjQgQMH9MADD+jQoUN64403OrBacz755BOlpqaqsrJSPXr00ObNm5WcnKzs7OxOMW/+xicF97xJ0ssvv6x9+/bp448/bvRasB93TY1NCu65GzFihDZu3KhLLrlE+fn5Wr58uUaNGqWDBw8G/bxJBJZOb/r06Z7/vuyyy5SSkqILL7xQGRkZGjduXAdWZs19992ngwcPev09tjPxN7677rrL89+XXXaZ4uPjNW7cOH355Ze68MIL27tMSy655BJlZ2fL5XLpf/7nfzRz5kxlZmZ2dFkB4298ycnJQT1vx44d0/33369t27YpIiKio8sJKDNjC+a5mzRpkue/U1JSNGLECPXv31+vvvqqIiMjO7CywDjn/yQUFxcnSY2ulC4sLPS81pkMHDhQ559/vg4fPtzRpZg2d+5c/fnPf9Zf//pX9e3b17M8Li5O1dXVOnXqlFf7YJs7f+PzZcSIEZIUFPMXFhamQYMG6corr1R6erqGDh2qp556qtPMm7/x+RJM87Z3714VFRVp2LBh6tKli7p06aLMzEytXr1aXbp0UWxsbNDOX3Njq62tbbROMM1dQ7169dLFF1+sw4cPd4rj7pwPLElJSYqLi9P27ds9y9xut3bt2uX19+jO4vjx4zp58qTi4+M7upRmGYahuXPnavPmzfrggw+UlJTk9fqVV16prl27es3doUOHlJeXFxRz19z4fMnOzpakoJi/hurq6lRVVRX08+ZP/fh8CaZ5GzdunD755BNlZ2d7Ht///vd16623ev47WOevubH5+jN5MM1dQ6Wlpfryyy8VHx/fOY67jr7qtz2UlJQY+/fvN/bv329IMh5//HFj//79xtGjRw3DMIxHH33U6NWrl/GnP/3JOHDggDFlyhQjKSnJqKio6ODKm9fU2EpKSoxf/epXRlZWlpGbm2u8//77xrBhw4yLLrrIqKys7OjSm3XPPfcYTqfTyMjIMPLz8z2P8vJyT5u7777b6Nevn/HBBx8Ye/bsMVJTU43U1NQOrNq85sZ3+PBh4ze/+Y2xZ88eIzc31/jTn/5kDBw40Bg9enQHV968RYsWGZmZmUZubq5x4MABY9GiRYbD4TD+8pe/GIYR3PNmGE2PL5jnzZ+Gv5wJ9vk729ljC/a5++Uvf2lkZGQYubm5xt/+9jdj/Pjxxvnnn28UFRUZhhH883ZOBJa//vWvhqRGj5kzZxqGceanzUuWLDFiY2ON8PBwY9y4ccahQ4c6tmiTmhpbeXm58aMf/cjo06eP0bVrV6N///7GnDlzjIKCgo4u2xRf45Jk/Nd//ZenTUVFhXHvvfca5513ntGtWzdj2rRpRn5+fscVbUFz48vLyzNGjx5tREdHG+Hh4cagQYOMhQsXGi6Xq2MLN+GOO+4w+vfvb4SFhRl9+vQxxo0b5wkrhhHc82YYTY8vmOfNn4aBJdjn72xnjy3Y5+7mm2824uPjjbCwMOOCCy4wbr75ZuPw4cOe14N93hyGYRjt930OAACAdef8NSwAAMD+CCwAAMD2CCwAAMD2CCwAAMD2CCwAAMD2CCwAAMD2CCwAAMD2CCwAAMD2CCwAAMD2CCwAAMD2CCwAAMD2CCwAAMD2/j9AhLmOJqoU+QAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#scatter plot\n", + "import matplotlib.pyplot as plt\n", + "\n", + "price = refined_data.Price\n", + "month = refined_data.Month\n", + "\n", + "plt.scatter(price, month)\n", + "plt.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Pumpkin price')" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#bar graph\n", + "refined_data.groupby(['Month'])['Price'].mean().plot(kind='bar')\n", + "\n", + "plt.ylabel(\"Pumpkin price\")" + ] + } + ], "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, "language_info": { "codemirror_mode": { "name": "ipython", @@ -10,24 +498,10 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.3-final" + "version": "3.12.5" }, - "orig_nbformat": 2, - "kernelspec": { - "name": "python3", - "display_name": "Python 3", - "language": "python" - } + "orig_nbformat": 2 }, "nbformat": 4, - "nbformat_minor": 2, - "cells": [ - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ] -} \ No newline at end of file + "nbformat_minor": 2 +}