From 999545086258b0cffb364de0bb66bc30c5c8f0d1 Mon Sep 17 00:00:00 2001
From: waferlite <39323227+waferlite@users.noreply.github.com>
Date: Wed, 30 May 2018 12:09:35 +0530
Subject: [PATCH 1/3] Add files via upload
---
.../assn-01/Omkar_Rajebhosale-01.ipynb | 569 ++++++++++++++++++
1 file changed, 569 insertions(+)
create mode 100644 python-assn/assn-01/Omkar_Rajebhosale-01.ipynb
diff --git a/python-assn/assn-01/Omkar_Rajebhosale-01.ipynb b/python-assn/assn-01/Omkar_Rajebhosale-01.ipynb
new file mode 100644
index 0000000..f0bec73
--- /dev/null
+++ b/python-assn/assn-01/Omkar_Rajebhosale-01.ipynb
@@ -0,0 +1,569 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Assignment 1: Strings, Lists and Files\n",
+ "\n",
+ "This assignment is based on basic python operations and to help you get a better understanding of lists, dictionaries, string operations, file I/O and other basic python operations. All the best!"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Q1) Given an positive integer, write a function to print the smallest integer that can be formed by rearranging the digits of the given number.**\n",
+ "\n",
+ "For e.g.:\n",
+ "```\n",
+ " >>> least_int(54235)\n",
+ " 23455\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "23455\n"
+ ]
+ }
+ ],
+ "source": [
+ "def least_int(num):\n",
+ " #write your code here\n",
+ " \n",
+ " l=list(str(num)) \n",
+ " l.sort()\n",
+ " print (\"\".join(l))\n",
+ "\n",
+ "least_int(54235)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "
\n",
+ "\n",
+ "**Q2) Given a string consisting of words and whitespaces, write a function to print a word consisting of the last letters of all the words beginning with the letter 'a'. Assume that all the alphabets in the strings are lower case.**\n",
+ "\n",
+ "For e.g.: \n",
+ "```\n",
+ ">>> mystring = 'apple banana aeroplace machine learning python append'\n",
+ ">>> function_a(mystring)\n",
+ "eed\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "eed"
+ ]
+ }
+ ],
+ "source": [
+ "def function_a(string1):\n",
+ " #write your code here\n",
+ " \n",
+ " l= string1.split() \n",
+ " for i in range(len(l)):\n",
+ " for x in range(len(l[i])): \n",
+ " if l[i][0]==\"a\": \n",
+ " print (l[i][-1],end=\"\") \n",
+ " break\n",
+ " \n",
+ "function_a(\"apple banana aeroplace machine learning python append\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "***\n",
+ "**Q3) Given a string in the form of a sentence, remove all duplicate words from the sentence.(Order of words in the return value can differ from original)**\n",
+ "For e.g.:\n",
+ "```\n",
+ ">>> mystr = 'Vedang Pro is Pro at ML'\n",
+ ">>> remove_dup(mystr)\n",
+ "'Vedang at ML Pro is'\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "'is Vedang at Pro ML'\n"
+ ]
+ }
+ ],
+ "source": [
+ "def remove_dup(mystring):\n",
+ " #write your code here\n",
+ " l= list(set(mystring.split()))\n",
+ " return \"'\"+(\" \".join(l))+\"'\"\n",
+ "\n",
+ "print(remove_dup(\"Vedang Pro is Pro at ML\"))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "______\n",
+ "**Q4) Write a single line of code to check if a given string ```mystring``` is a palindrome or not.**\n",
+ "For e.g.:\n",
+ "```\n",
+ ">>> mystring = 'SatanoscillatemymetallicsonataS'\n",
+ "#your code\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "malayalam\n",
+ "Is_palindrame\n"
+ ]
+ }
+ ],
+ "source": [
+ "#give any random string\n",
+ "mystring=input()\n",
+ "if(mystring==mystring[::-1]):\n",
+ " print (\"Is_palindrame\")\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "___\n",
+ "**Q5) Given a list of integers, create a new list where the i'th entry in the list is the average of previous i - 1 entries in the original list.**\n",
+ "For e.g.:\n",
+ "```\n",
+ ">>> a = [1, 2, 3, 4, 5]\n",
+ ">>> list_of_avgs(a)\n",
+ "[1.0, 1.5, 2.0, 2.5, 3.0]\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[1.0, 1.5, 2.0, 2.5, 3.0]\n"
+ ]
+ }
+ ],
+ "source": [
+ "def list_of_avgs(a):\n",
+ " new_list=a[::] \n",
+ " for i in range(len(a)):\n",
+ " total=0\n",
+ " for prev in range(0,i+1):\n",
+ " total+=a[prev] \n",
+ " new_list[i]=total/(i+1) \n",
+ " print (new_list)\n",
+ "\n",
+ "a=[1,2,3,4,5]\n",
+ "list_of_avgs(a)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "___\n",
+ "**Q6) Given a list of random integers, modify the list such that all the elements in even places are in ascending order and all those in the odd places appear in a decreasing order. Assume labeling of the places start from the number zero.**\n",
+ "\n",
+ "For e.g.\n",
+ "```\n",
+ ">>> a = [1, 8, 4, 5, 2, 5, 3, 9, 4]\n",
+ ">>> asc_desc_list(a)\n",
+ "[1, 9, 2, 8, 3, 5, 4, 5, 4]\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[1, 9, 2, 8, 3, 5, 4, 5, 4]\n"
+ ]
+ }
+ ],
+ "source": [
+ "def asc_desc_list(a):\n",
+ " #write your code here\n",
+ " list_e= a[::2]\n",
+ " list_o= a[1::2]\n",
+ " list_e.sort()\n",
+ " list_o.sort(reverse=True)\n",
+ " new_list=[0]*(len(list_e)+len(list_o))\n",
+ " new_list[::2]=list_e\n",
+ " new_list[1::2]=list_o\n",
+ " print (new_list)\n",
+ " \n",
+ "a = [1, 8, 4, 5, 2, 5, 3, 9, 4] \n",
+ "asc_desc_list(a)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "___\n",
+ "**Q7) Write an iterator function to return the elements of the Fibonacci series.**"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[0,\n",
+ " 1,\n",
+ " 1,\n",
+ " 2,\n",
+ " 3,\n",
+ " 5,\n",
+ " 8,\n",
+ " 13,\n",
+ " 21,\n",
+ " 34,\n",
+ " 55,\n",
+ " 89,\n",
+ " 144,\n",
+ " 233,\n",
+ " 377,\n",
+ " 610,\n",
+ " 987,\n",
+ " 1597,\n",
+ " 2584,\n",
+ " 4181,\n",
+ " 6765,\n",
+ " 10946,\n",
+ " 17711,\n",
+ " 28657,\n",
+ " 46368,\n",
+ " 75025,\n",
+ " 121393,\n",
+ " 196418,\n",
+ " 317811,\n",
+ " 514229,\n",
+ " 832040,\n",
+ " 1346269,\n",
+ " 2178309,\n",
+ " 3524578,\n",
+ " 5702887,\n",
+ " 9227465,\n",
+ " 14930352,\n",
+ " 24157817,\n",
+ " 39088169,\n",
+ " 63245986,\n",
+ " 102334155,\n",
+ " 165580141,\n",
+ " 267914296,\n",
+ " 433494437,\n",
+ " 701408733,\n",
+ " 1134903170,\n",
+ " 1836311903,\n",
+ " 2971215073,\n",
+ " 4807526976,\n",
+ " 7778742049]"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "def fibonacci(n):\n",
+ " list=[0,1]\n",
+ " a = 0\n",
+ " b = 1\n",
+ " if n < 0:\n",
+ " print(\"Incorrect input\")\n",
+ " elif n == 0:\n",
+ " return [a]\n",
+ " elif n == 1:\n",
+ " return [a,b]\n",
+ " else:\n",
+ " for i in range(2,n):\n",
+ " c = a + b\n",
+ " a = b\n",
+ " b = c\n",
+ " list.extend([c])\n",
+ " return list\n",
+ "\n",
+ "fibonacci(50)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "**Q8) Print all the sublists of a list, seperated by a comma and a whitespace.**\n",
+ "For e.g.:\n",
+ "```\n",
+ ">>> a = [1, 2]\n",
+ ">>> sub_lists(a)\n",
+ "[], [1], [1, 2] [2][\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3], None\n"
+ ]
+ }
+ ],
+ "source": [
+ "def sub_lists(a):\n",
+ " print ([], end=', ') \n",
+ " for i in range(len(a)):\n",
+ " for j in range(i+1,len(a)+1): \n",
+ " print (a[i:j],end=\", \") \n",
+ " \n",
+ "\n",
+ "print (sub_lists([1,2,3]))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "**Q9) Write two functions, each of which take a list as an argument. The first function modifies the list by appending the sum of entries of the list passed as an argument. The second function reassigns a new list to the argument passed, where each entry in the new list is one more than the corresponding entry given as an argument. Is the change reflected outside the functions in both cases? Why/Why not?**\n",
+ "Note: For reassign_list(a), you have to reassign a new list to the argument, and not change the existing list."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[1, 2, 3, 6]\n",
+ "[1, 2, 3]\n"
+ ]
+ }
+ ],
+ "source": [
+ "def modify_list(a):\n",
+ " sum=0 \n",
+ " for i in range(len(a)):\n",
+ " sum+=a[i]\n",
+ " a.extend([sum])\n",
+ " pass\n",
+ " \n",
+ "def reassign_list(a):\n",
+ " new=[0]*len(a)\n",
+ " for i in range(len(a)):\n",
+ " new[i]=a[i]+1\n",
+ " pass\n",
+ "\n",
+ "\n",
+ "a = [1, 2, 3]\n",
+ "modify_list(a)\n",
+ "print(a)\n",
+ "\n",
+ "a = [1, 2, 3]\n",
+ "reassign_list(a)\n",
+ "print(a)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "**Q10) Given a string, return a dictionary consisting of each character in the string and the position at which it occurs. (Positions are to be taken as keys, and position numbering starts from 1)**\n",
+ "\n",
+ "For e.g.)\n",
+ "\n",
+ "```\n",
+ ">>> a = 'Machine Learning'\n",
+ ">>> char_position(a)\n",
+ "{1: 'M', 2: 'a', 3: 'c', 4: 'h', 5: 'i', 6: 'n', 7: 'e', 9: 'L', 10: 'e', 11: 'a', 12: 'r', 13: 'n', 14: 'i', 15: 'n', 16: 'g'}\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{1: 'M', 2: 'a', 3: 'c', 4: 'h', 5: 'i', 6: 'n', 7: 'e', 9: 'L', 10: 'e', 11: 'a', 12: 'r', 13: 'n', 14: 'i', 15: 'n', 16: 'g'}\n"
+ ]
+ }
+ ],
+ "source": [
+ "def char_position(a):\n",
+ " l= list(a)\n",
+ " d={} \n",
+ " for i in range(len(l)):\n",
+ " if l[i]==\" \":\n",
+ " continue\n",
+ " d[i+1]=l[i]\n",
+ " return (d) \n",
+ "\n",
+ "print(char_position(\"Machine Learning\"))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "\n",
+ "**Q11) Given a string, arrange the characters in increasing order of their frequency at which they appear(Ignore any whitespaces)**\n",
+ "\n",
+ "For e.g.:\n",
+ "```\n",
+ ">>> a = 'ifadhaiusbdufbugfsdbfubgsidf'\n",
+ ">>> sort_by_freq(a)\n",
+ "'haaggiiisssdddduuuubbbbfffff'\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def sort_by_freq(a): \n",
+ " dict = {}\n",
+ " l = list(a)\n",
+ " for i in l: \n",
+ " keys = dict.keys()\n",
+ " if i in keys:\n",
+ " dict[i] += 1\n",
+ " else:\n",
+ " dict[i] = 1\n",
+ " print (dict)\n",
+ " \n",
+ " maxf = max_freq(dict)\n",
+ " print (maxf)\n",
+ "\n",
+ " \n",
+ " for t in range(1,maxf+1):\n",
+ " freq_t = []\n",
+ " \n",
+ " for char in dict:\n",
+ " if dict[char]==t:\n",
+ " freq_t.append(char*t)\n",
+ " \n",
+ " \n",
+ " freq_t.sort()\n",
+ " print (\"\".join(freq_t),end=\"\")\n",
+ " \n",
+ "def max_freq(dict):\n",
+ " maxf = 1\n",
+ " for key in dict:\n",
+ " if(dict[key]> maxf):\n",
+ " maxf= dict[key]\n",
+ " return maxf\n",
+ " \n",
+ "a=\"ifadhaiusbdufbugfsdbfubgsidf\"\n",
+ "sort_by_freq(a)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "---\n",
+ "---\n",
+ "**Q12)**\n",
+ "\n",
+ "**A) Create a file called myfile.txt**\n",
+ "\n",
+ "**B) Enter some random paragraph into the file.**\n",
+ "\n",
+ "**C) Take an integer input n from the user. Create a file with the name as the nth word in myfile.txt.(Assume that n is less than the number of words in your file.)**\n",
+ "\n",
+ "**D) Enter the paragraph from myfile.txt into your new file, in reverse order. \n",
+ "Note: In part (D) only the order of the words should change, the words are not reversed in themselves.**"
+ ]
+ }
+ ],
+ "metadata": {
+ "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.6.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
From 096d867a716ebe4ed3f9f102370a6e15abe4ecab Mon Sep 17 00:00:00 2001
From: waferlite <39323227+waferlite@users.noreply.github.com>
Date: Wed, 30 May 2018 12:10:12 +0530
Subject: [PATCH 2/3] Add files via upload
---
.../assn-02/Omkar_Rajebhosale-02.ipynb | 323 ++++++++++++++++++
1 file changed, 323 insertions(+)
create mode 100644 python-assn/assn-02/Omkar_Rajebhosale-02.ipynb
diff --git a/python-assn/assn-02/Omkar_Rajebhosale-02.ipynb b/python-assn/assn-02/Omkar_Rajebhosale-02.ipynb
new file mode 100644
index 0000000..b23a899
--- /dev/null
+++ b/python-assn/assn-02/Omkar_Rajebhosale-02.ipynb
@@ -0,0 +1,323 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[[ 0 1 2 3]\n",
+ " [ 4 5 6 7]\n",
+ " [ 8 9 10 11]\n",
+ " [12 13 14 15]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "A = np.arange(16) #This creates a vector with values from 0 to 15.\n",
+ "\n",
+ "#Reshape A into a 4x4 numpy array and print the array\n",
+ "#################################\n",
+ "\n",
+ "R = A.reshape((4,4))\n",
+ "print (R)\n",
+ "\n",
+ "################################# "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[[ 0 1 4 9]\n",
+ " [ 16 25 36 49]\n",
+ " [ 64 81 100 121]\n",
+ " [144 169 196 225]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Create another array B which is made of square of each elements of B[changed to R] and print B.\n",
+ "#################################\n",
+ "\n",
+ "B = np.square(R)\n",
+ "print (B)\n",
+ "\n",
+ "#################################"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([ 50.01026923, 37.57927816, 51.59954058, 21.46386098,\n",
+ " -48.78244569, -21.39896047, -29.12738484, -57.2421675 ,\n",
+ " -46.57999874, -9.67706059])"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Create a numpy array of shape (28,28) whose values are chosen randomly from 0-255\n",
+ "#################################\n",
+ "\n",
+ "X = np.random.randint(255,size=(28,28))\n",
+ "\n",
+ "#################################\n",
+ "\n",
+ "#Convert x into a vector (Make it of single dimension)\n",
+ "#################################\n",
+ "\n",
+ "X = X.flatten() \n",
+ "\n",
+ "#################################\n",
+ "\n",
+ "#Add the number 1 at the start of x\n",
+ "# e.g.: If x is [3,2,5,7,5,...], new x should be [1,3,2,5,7,5,...]\n",
+ "#################################\n",
+ "\n",
+ "X = np.insert(X,0,1)\n",
+ "\n",
+ "#################################\n",
+ "\n",
+ "#Create vector W of shape (785,10) whose values follow a normal distribution with mean=0 and standard dev=0.01\n",
+ "#################################\n",
+ "\n",
+ "W=np.random.normal(0,0.01,size = (785,10))\n",
+ "\n",
+ "#################################\n",
+ "\n",
+ "#Multiply the 2 matrices W and x. (Keep in mind the shape of the two)\n",
+ "#################################\n",
+ "\n",
+ "np.matmul(X,W) \n",
+ "\n",
+ "#################################\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [],
+ "source": [
+ "#Load the Iris.csv file into numpy array 'data' and shuffle the data.(The data array should contain rows in random order)\n",
+ "#################################\n",
+ "\n",
+ "data = np.genfromtxt('Iris.csv',delimiter=',')\n",
+ "np.random.shuffle(data) \n",
+ "\n",
+ "#################################\n",
+ "\n",
+ "\n",
+ "#Create a numpy array X that contains the first 4 columns of data. Keep the last column of data in numpy array y.\n",
+ "#################################\n",
+ "\n",
+ "X=np.array(data[:,0:4])\n",
+ "Y=np.array(data[:,4])\n",
+ "\n",
+ "#################################\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[[5.7 2.9 4.2 1.3 1. ]\n",
+ " [6.1 2.9 4.7 1.4 1. ]\n",
+ " [4.6 3.6 1. 0.2 0. ]\n",
+ " [6.7 3.1 4.4 1.4 1. ]\n",
+ " [5. 3. 1.6 0.2 0. ]\n",
+ " [6. 2.2 5. 1.5 2. ]\n",
+ " [6.7 3.3 5.7 2.1 2. ]\n",
+ " [6.1 2.6 5.6 1.4 2. ]\n",
+ " [5.4 3.4 1.5 0.4 0. ]\n",
+ " [5.4 3. 4.5 1.5 1. ]]\n",
+ "[[5.7 2.5 5. 2. 2. ]\n",
+ " [6.3 2.5 4.9 1.5 1. ]\n",
+ " [4.9 3. 1.4 0.2 0. ]\n",
+ " [5. 2. 3.5 1. 1. ]\n",
+ " [5.5 2.6 4.4 1.2 1. ]\n",
+ " [6. 2.2 4. 1. 1. ]\n",
+ " [5.9 3. 5.1 1.8 2. ]\n",
+ " [6.1 3. 4.9 1.8 2. ]\n",
+ " [4.8 3.4 1.9 0.2 0. ]\n",
+ " [6.2 3.4 5.4 2.3 2. ]]\n",
+ "[[6. 2.2 5. 1.5]\n",
+ " [6.7 3.3 5.7 2.1]\n",
+ " [6.1 2.6 5.6 1.4]\n",
+ " [6.4 2.8 5.6 2.2]\n",
+ " [7.7 3. 6.1 2.3]\n",
+ " [7.7 3.8 6.7 2.2]\n",
+ " [6.7 3.3 5.7 2.5]\n",
+ " [5.6 2.8 4.9 2. ]\n",
+ " [6.9 3.2 5.7 2.3]\n",
+ " [7.2 3. 5.8 1.6]\n",
+ " [5.8 2.7 5.1 1.9]\n",
+ " [6.7 3. 5.2 2.3]\n",
+ " [6.3 2.7 4.9 1.8]\n",
+ " [6.5 3. 5.5 1.8]\n",
+ " [6.4 3.1 5.5 1.8]\n",
+ " [6.9 3.1 5.4 2.1]\n",
+ " [7.7 2.6 6.9 2.3]\n",
+ " [6.9 3.1 5.1 2.3]\n",
+ " [6.4 2.8 5.6 2.1]\n",
+ " [5.8 2.8 5.1 2.4]\n",
+ " [7.2 3.6 6.1 2.5]\n",
+ " [6.8 3.2 5.9 2.3]\n",
+ " [6.3 3.4 5.6 2.4]\n",
+ " [6.5 3. 5.2 2. ]\n",
+ " [6.3 3.3 6. 2.5]\n",
+ " [6.2 2.8 4.8 1.8]\n",
+ " [6.3 2.5 5. 1.9]\n",
+ " [7.4 2.8 6.1 1.9]\n",
+ " [6.3 2.8 5.1 1.5]\n",
+ " [6.3 2.9 5.6 1.8]\n",
+ " [7.3 2.9 6.3 1.8]\n",
+ " [6.5 3.2 5.1 2. ]\n",
+ " [6.5 3. 5.8 2.2]\n",
+ " [6.4 3.2 5.3 2.3]\n",
+ " [6.4 2.7 5.3 1.9]\n",
+ " [6.8 3. 5.5 2.1]\n",
+ " [7.7 2.8 6.7 2. ]\n",
+ " [7.6 3. 6.6 2.1]\n",
+ " [5.8 2.7 5.1 1.9]\n",
+ " [7.2 3.2 6. 1.8]\n",
+ " [6.7 2.5 5.8 1.8]\n",
+ " [4.9 2.5 4.5 1.7]\n",
+ " [7.1 3. 5.9 2.1]\n",
+ " [7.9 3.8 6.4 2. ]\n",
+ " [6. 3. 4.8 1.8]\n",
+ " [6.7 3.1 5.6 2.4]\n",
+ " [5.7 2.5 5. 2. ]\n",
+ " [5.9 3. 5.1 1.8]\n",
+ " [6.1 3. 4.9 1.8]\n",
+ " [6.2 3.4 5.4 2.3]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Print the following:\n",
+ "# 1) First 10 values of data\n",
+ "# 2) Last 10 values of data\n",
+ "# 3) All rows of X whose corresponding value in y is 2\n",
+ "\n",
+ "#################################\n",
+ "\n",
+ "print(data[0:10])\n",
+ "print(data[-10:]) \n",
+ "print(X[Y==2.0])\n",
+ "\n",
+ "#################################"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Create a numpy array y1 of same length as y and number of columns 3. \n",
+ "# Values of y1 are such that,\n",
+ "# If y contains 0, y1 should have (1,0,0)\n",
+ "# If y contains 1, y1 should have (0,1,0)\n",
+ "# If y contains 2, y1 should have (0,0,1)\n",
+ "# This type of encoding is known as one-hot encoding\n",
+ "#################################\n",
+ "\n",
+ "length = int(data.size)//5\n",
+ "y1 = np.zeros([length,3])\n",
+ "row=0\n",
+ "for num in Y:\n",
+ " col = int(num)\n",
+ " y1[row][col] = 1\n",
+ " row+=1\n",
+ " \n",
+ "#################################"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(1, 32, 64, 3)"
+ ]
+ },
+ "execution_count": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "A=np.random.randint(100,size=(32,64,3))\n",
+ "# Convert A into shape (1,32,64,3) without using np.reshape()\n",
+ "#################################\n",
+ "\n",
+ "A=np.array([A])\n",
+ "A.shape\n",
+ "\n",
+ "#################################"
+ ]
+ }
+ ],
+ "metadata": {
+ "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.6.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
From a6903154a46f4ab72384eb68a621b8d393974b8c Mon Sep 17 00:00:00 2001
From: waferlite <39323227+waferlite@users.noreply.github.com>
Date: Wed, 30 May 2018 12:10:54 +0530
Subject: [PATCH 3/3] Add files via upload
---
.../assn-03/Omkar_Rajebhosale-03.ipynb | 2228 +++++++++++++++++
.../assn-03/Omkar_Rajebhosale_dataframe.csv | 151 ++
python-assn/assn-03/Omkar_Rajebhosale_model | Bin 0 -> 936 bytes
3 files changed, 2379 insertions(+)
create mode 100644 python-assn/assn-03/Omkar_Rajebhosale-03.ipynb
create mode 100644 python-assn/assn-03/Omkar_Rajebhosale_dataframe.csv
create mode 100644 python-assn/assn-03/Omkar_Rajebhosale_model
diff --git a/python-assn/assn-03/Omkar_Rajebhosale-03.ipynb b/python-assn/assn-03/Omkar_Rajebhosale-03.ipynb
new file mode 100644
index 0000000..f457500
--- /dev/null
+++ b/python-assn/assn-03/Omkar_Rajebhosale-03.ipynb
@@ -0,0 +1,2228 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Using Pandas, Matplotlib and Scikit-Learn**\n",
+ "\n",
+ "NOTE: SAVE FILE BEFORE ATTEMPTING.\n",
+ "\n",
+ "Since the outputs will get cleared as you run cells. Take screenshots to compare answers to expected answers."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Using Pandas**\n",
+ "\n",
+ "We start out by practicing how to handle data given to us. The rows in any dataset are called tuples or instances and the columns are the features with one of the columns being the label (there may also not be a label if it is an Unsupervised learning task). \n",
+ "\n",
+ "Storing this data as a list of lists might be cumbersome and difficult depending on the complexity and size of the data.\n",
+ "\n",
+ "Pandas offers a data structure called a DataFrame, which makes it easy to handle data and visualise the intricacies of it.\n",
+ "\n",
+ "In this example we'll try to handle and analyse the Iris dataset and build a simple model for learning it using Scikit-Learn. The problem is to look at a few features of the data (sepal length, sepal width, etc.) and determine which of the three given flowers (here called 0, 1 and 2) are we looking at."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 72,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Just to load the data. Don't worry about scikit-learn for now.\n",
+ "from sklearn.datasets import load_iris\n",
+ "data = load_iris()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 73,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([[5.1, 3.5, 1.4, 0.2],\n",
+ " [4.9, 3. , 1.4, 0.2],\n",
+ " [4.7, 3.2, 1.3, 0.2],\n",
+ " [4.6, 3.1, 1.5, 0.2],\n",
+ " [5. , 3.6, 1.4, 0.2],\n",
+ " [5.4, 3.9, 1.7, 0.4],\n",
+ " [4.6, 3.4, 1.4, 0.3],\n",
+ " [5. , 3.4, 1.5, 0.2],\n",
+ " [4.4, 2.9, 1.4, 0.2],\n",
+ " [4.9, 3.1, 1.5, 0.1],\n",
+ " [5.4, 3.7, 1.5, 0.2],\n",
+ " [4.8, 3.4, 1.6, 0.2],\n",
+ " [4.8, 3. , 1.4, 0.1],\n",
+ " [4.3, 3. , 1.1, 0.1],\n",
+ " [5.8, 4. , 1.2, 0.2],\n",
+ " [5.7, 4.4, 1.5, 0.4],\n",
+ " [5.4, 3.9, 1.3, 0.4],\n",
+ " [5.1, 3.5, 1.4, 0.3],\n",
+ " [5.7, 3.8, 1.7, 0.3],\n",
+ " [5.1, 3.8, 1.5, 0.3],\n",
+ " [5.4, 3.4, 1.7, 0.2],\n",
+ " [5.1, 3.7, 1.5, 0.4],\n",
+ " [4.6, 3.6, 1. , 0.2],\n",
+ " [5.1, 3.3, 1.7, 0.5],\n",
+ " [4.8, 3.4, 1.9, 0.2],\n",
+ " [5. , 3. , 1.6, 0.2],\n",
+ " [5. , 3.4, 1.6, 0.4],\n",
+ " [5.2, 3.5, 1.5, 0.2],\n",
+ " [5.2, 3.4, 1.4, 0.2],\n",
+ " [4.7, 3.2, 1.6, 0.2],\n",
+ " [4.8, 3.1, 1.6, 0.2],\n",
+ " [5.4, 3.4, 1.5, 0.4],\n",
+ " [5.2, 4.1, 1.5, 0.1],\n",
+ " [5.5, 4.2, 1.4, 0.2],\n",
+ " [4.9, 3.1, 1.5, 0.1],\n",
+ " [5. , 3.2, 1.2, 0.2],\n",
+ " [5.5, 3.5, 1.3, 0.2],\n",
+ " [4.9, 3.1, 1.5, 0.1],\n",
+ " [4.4, 3. , 1.3, 0.2],\n",
+ " [5.1, 3.4, 1.5, 0.2],\n",
+ " [5. , 3.5, 1.3, 0.3],\n",
+ " [4.5, 2.3, 1.3, 0.3],\n",
+ " [4.4, 3.2, 1.3, 0.2],\n",
+ " [5. , 3.5, 1.6, 0.6],\n",
+ " [5.1, 3.8, 1.9, 0.4],\n",
+ " [4.8, 3. , 1.4, 0.3],\n",
+ " [5.1, 3.8, 1.6, 0.2],\n",
+ " [4.6, 3.2, 1.4, 0.2],\n",
+ " [5.3, 3.7, 1.5, 0.2],\n",
+ " [5. , 3.3, 1.4, 0.2],\n",
+ " [7. , 3.2, 4.7, 1.4],\n",
+ " [6.4, 3.2, 4.5, 1.5],\n",
+ " [6.9, 3.1, 4.9, 1.5],\n",
+ " [5.5, 2.3, 4. , 1.3],\n",
+ " [6.5, 2.8, 4.6, 1.5],\n",
+ " [5.7, 2.8, 4.5, 1.3],\n",
+ " [6.3, 3.3, 4.7, 1.6],\n",
+ " [4.9, 2.4, 3.3, 1. ],\n",
+ " [6.6, 2.9, 4.6, 1.3],\n",
+ " [5.2, 2.7, 3.9, 1.4],\n",
+ " [5. , 2. , 3.5, 1. ],\n",
+ " [5.9, 3. , 4.2, 1.5],\n",
+ " [6. , 2.2, 4. , 1. ],\n",
+ " [6.1, 2.9, 4.7, 1.4],\n",
+ " [5.6, 2.9, 3.6, 1.3],\n",
+ " [6.7, 3.1, 4.4, 1.4],\n",
+ " [5.6, 3. , 4.5, 1.5],\n",
+ " [5.8, 2.7, 4.1, 1. ],\n",
+ " [6.2, 2.2, 4.5, 1.5],\n",
+ " [5.6, 2.5, 3.9, 1.1],\n",
+ " [5.9, 3.2, 4.8, 1.8],\n",
+ " [6.1, 2.8, 4. , 1.3],\n",
+ " [6.3, 2.5, 4.9, 1.5],\n",
+ " [6.1, 2.8, 4.7, 1.2],\n",
+ " [6.4, 2.9, 4.3, 1.3],\n",
+ " [6.6, 3. , 4.4, 1.4],\n",
+ " [6.8, 2.8, 4.8, 1.4],\n",
+ " [6.7, 3. , 5. , 1.7],\n",
+ " [6. , 2.9, 4.5, 1.5],\n",
+ " [5.7, 2.6, 3.5, 1. ],\n",
+ " [5.5, 2.4, 3.8, 1.1],\n",
+ " [5.5, 2.4, 3.7, 1. ],\n",
+ " [5.8, 2.7, 3.9, 1.2],\n",
+ " [6. , 2.7, 5.1, 1.6],\n",
+ " [5.4, 3. , 4.5, 1.5],\n",
+ " [6. , 3.4, 4.5, 1.6],\n",
+ " [6.7, 3.1, 4.7, 1.5],\n",
+ " [6.3, 2.3, 4.4, 1.3],\n",
+ " [5.6, 3. , 4.1, 1.3],\n",
+ " [5.5, 2.5, 4. , 1.3],\n",
+ " [5.5, 2.6, 4.4, 1.2],\n",
+ " [6.1, 3. , 4.6, 1.4],\n",
+ " [5.8, 2.6, 4. , 1.2],\n",
+ " [5. , 2.3, 3.3, 1. ],\n",
+ " [5.6, 2.7, 4.2, 1.3],\n",
+ " [5.7, 3. , 4.2, 1.2],\n",
+ " [5.7, 2.9, 4.2, 1.3],\n",
+ " [6.2, 2.9, 4.3, 1.3],\n",
+ " [5.1, 2.5, 3. , 1.1],\n",
+ " [5.7, 2.8, 4.1, 1.3],\n",
+ " [6.3, 3.3, 6. , 2.5],\n",
+ " [5.8, 2.7, 5.1, 1.9],\n",
+ " [7.1, 3. , 5.9, 2.1],\n",
+ " [6.3, 2.9, 5.6, 1.8],\n",
+ " [6.5, 3. , 5.8, 2.2],\n",
+ " [7.6, 3. , 6.6, 2.1],\n",
+ " [4.9, 2.5, 4.5, 1.7],\n",
+ " [7.3, 2.9, 6.3, 1.8],\n",
+ " [6.7, 2.5, 5.8, 1.8],\n",
+ " [7.2, 3.6, 6.1, 2.5],\n",
+ " [6.5, 3.2, 5.1, 2. ],\n",
+ " [6.4, 2.7, 5.3, 1.9],\n",
+ " [6.8, 3. , 5.5, 2.1],\n",
+ " [5.7, 2.5, 5. , 2. ],\n",
+ " [5.8, 2.8, 5.1, 2.4],\n",
+ " [6.4, 3.2, 5.3, 2.3],\n",
+ " [6.5, 3. , 5.5, 1.8],\n",
+ " [7.7, 3.8, 6.7, 2.2],\n",
+ " [7.7, 2.6, 6.9, 2.3],\n",
+ " [6. , 2.2, 5. , 1.5],\n",
+ " [6.9, 3.2, 5.7, 2.3],\n",
+ " [5.6, 2.8, 4.9, 2. ],\n",
+ " [7.7, 2.8, 6.7, 2. ],\n",
+ " [6.3, 2.7, 4.9, 1.8],\n",
+ " [6.7, 3.3, 5.7, 2.1],\n",
+ " [7.2, 3.2, 6. , 1.8],\n",
+ " [6.2, 2.8, 4.8, 1.8],\n",
+ " [6.1, 3. , 4.9, 1.8],\n",
+ " [6.4, 2.8, 5.6, 2.1],\n",
+ " [7.2, 3. , 5.8, 1.6],\n",
+ " [7.4, 2.8, 6.1, 1.9],\n",
+ " [7.9, 3.8, 6.4, 2. ],\n",
+ " [6.4, 2.8, 5.6, 2.2],\n",
+ " [6.3, 2.8, 5.1, 1.5],\n",
+ " [6.1, 2.6, 5.6, 1.4],\n",
+ " [7.7, 3. , 6.1, 2.3],\n",
+ " [6.3, 3.4, 5.6, 2.4],\n",
+ " [6.4, 3.1, 5.5, 1.8],\n",
+ " [6. , 3. , 4.8, 1.8],\n",
+ " [6.9, 3.1, 5.4, 2.1],\n",
+ " [6.7, 3.1, 5.6, 2.4],\n",
+ " [6.9, 3.1, 5.1, 2.3],\n",
+ " [5.8, 2.7, 5.1, 1.9],\n",
+ " [6.8, 3.2, 5.9, 2.3],\n",
+ " [6.7, 3.3, 5.7, 2.5],\n",
+ " [6.7, 3. , 5.2, 2.3],\n",
+ " [6.3, 2.5, 5. , 1.9],\n",
+ " [6.5, 3. , 5.2, 2. ],\n",
+ " [6.2, 3.4, 5.4, 2.3],\n",
+ " [5.9, 3. , 5.1, 1.8]])"
+ ]
+ },
+ "execution_count": 73,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# We retrieve the X vector which contains the features of each tuple\n",
+ "X = data['data']\n",
+ "\n",
+ "X"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 74,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
+ " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
+ " 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
+ " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n",
+ " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
+ " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n",
+ " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])"
+ ]
+ },
+ "execution_count": 74,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# And the y vector which is the numpy array containing the labels.\n",
+ "y = data['target']\n",
+ "\n",
+ "y"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 75,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['sepal length (cm)',\n",
+ " 'sepal width (cm)',\n",
+ " 'petal length (cm)',\n",
+ " 'petal width (cm)']"
+ ]
+ },
+ "execution_count": 75,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Here we store the names of the features for our understanding later.\n",
+ "headers = data['feature_names']\n",
+ "\n",
+ "headers"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "There are also a lot of other keys in the dictionary that is the variable ```data```, but we'll not use these.\n",
+ "\n",
+ "We'll now make a DataFrame object to handle the data properly."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 76,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 5.1 | \n",
+ " 3.5 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 4.9 | \n",
+ " 3.0 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 4.7 | \n",
+ " 3.2 | \n",
+ " 1.3 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4.6 | \n",
+ " 3.1 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5.0 | \n",
+ " 3.6 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 5.4 | \n",
+ " 3.9 | \n",
+ " 1.7 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 4.6 | \n",
+ " 3.4 | \n",
+ " 1.4 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 5.0 | \n",
+ " 3.4 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 4.4 | \n",
+ " 2.9 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 4.9 | \n",
+ " 3.1 | \n",
+ " 1.5 | \n",
+ " 0.1 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 5.4 | \n",
+ " 3.7 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 11 | \n",
+ " 4.8 | \n",
+ " 3.4 | \n",
+ " 1.6 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 12 | \n",
+ " 4.8 | \n",
+ " 3.0 | \n",
+ " 1.4 | \n",
+ " 0.1 | \n",
+ "
\n",
+ " \n",
+ " | 13 | \n",
+ " 4.3 | \n",
+ " 3.0 | \n",
+ " 1.1 | \n",
+ " 0.1 | \n",
+ "
\n",
+ " \n",
+ " | 14 | \n",
+ " 5.8 | \n",
+ " 4.0 | \n",
+ " 1.2 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 15 | \n",
+ " 5.7 | \n",
+ " 4.4 | \n",
+ " 1.5 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 16 | \n",
+ " 5.4 | \n",
+ " 3.9 | \n",
+ " 1.3 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 17 | \n",
+ " 5.1 | \n",
+ " 3.5 | \n",
+ " 1.4 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 18 | \n",
+ " 5.7 | \n",
+ " 3.8 | \n",
+ " 1.7 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 19 | \n",
+ " 5.1 | \n",
+ " 3.8 | \n",
+ " 1.5 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 20 | \n",
+ " 5.4 | \n",
+ " 3.4 | \n",
+ " 1.7 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 21 | \n",
+ " 5.1 | \n",
+ " 3.7 | \n",
+ " 1.5 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 22 | \n",
+ " 4.6 | \n",
+ " 3.6 | \n",
+ " 1.0 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 23 | \n",
+ " 5.1 | \n",
+ " 3.3 | \n",
+ " 1.7 | \n",
+ " 0.5 | \n",
+ "
\n",
+ " \n",
+ " | 24 | \n",
+ " 4.8 | \n",
+ " 3.4 | \n",
+ " 1.9 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 25 | \n",
+ " 5.0 | \n",
+ " 3.0 | \n",
+ " 1.6 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 26 | \n",
+ " 5.0 | \n",
+ " 3.4 | \n",
+ " 1.6 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 27 | \n",
+ " 5.2 | \n",
+ " 3.5 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 28 | \n",
+ " 5.2 | \n",
+ " 3.4 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 29 | \n",
+ " 4.7 | \n",
+ " 3.2 | \n",
+ " 1.6 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 120 | \n",
+ " 6.9 | \n",
+ " 3.2 | \n",
+ " 5.7 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 121 | \n",
+ " 5.6 | \n",
+ " 2.8 | \n",
+ " 4.9 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 122 | \n",
+ " 7.7 | \n",
+ " 2.8 | \n",
+ " 6.7 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 123 | \n",
+ " 6.3 | \n",
+ " 2.7 | \n",
+ " 4.9 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 124 | \n",
+ " 6.7 | \n",
+ " 3.3 | \n",
+ " 5.7 | \n",
+ " 2.1 | \n",
+ "
\n",
+ " \n",
+ " | 125 | \n",
+ " 7.2 | \n",
+ " 3.2 | \n",
+ " 6.0 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 126 | \n",
+ " 6.2 | \n",
+ " 2.8 | \n",
+ " 4.8 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 127 | \n",
+ " 6.1 | \n",
+ " 3.0 | \n",
+ " 4.9 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 128 | \n",
+ " 6.4 | \n",
+ " 2.8 | \n",
+ " 5.6 | \n",
+ " 2.1 | \n",
+ "
\n",
+ " \n",
+ " | 129 | \n",
+ " 7.2 | \n",
+ " 3.0 | \n",
+ " 5.8 | \n",
+ " 1.6 | \n",
+ "
\n",
+ " \n",
+ " | 130 | \n",
+ " 7.4 | \n",
+ " 2.8 | \n",
+ " 6.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 131 | \n",
+ " 7.9 | \n",
+ " 3.8 | \n",
+ " 6.4 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 132 | \n",
+ " 6.4 | \n",
+ " 2.8 | \n",
+ " 5.6 | \n",
+ " 2.2 | \n",
+ "
\n",
+ " \n",
+ " | 133 | \n",
+ " 6.3 | \n",
+ " 2.8 | \n",
+ " 5.1 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 134 | \n",
+ " 6.1 | \n",
+ " 2.6 | \n",
+ " 5.6 | \n",
+ " 1.4 | \n",
+ "
\n",
+ " \n",
+ " | 135 | \n",
+ " 7.7 | \n",
+ " 3.0 | \n",
+ " 6.1 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 136 | \n",
+ " 6.3 | \n",
+ " 3.4 | \n",
+ " 5.6 | \n",
+ " 2.4 | \n",
+ "
\n",
+ " \n",
+ " | 137 | \n",
+ " 6.4 | \n",
+ " 3.1 | \n",
+ " 5.5 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 138 | \n",
+ " 6.0 | \n",
+ " 3.0 | \n",
+ " 4.8 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 139 | \n",
+ " 6.9 | \n",
+ " 3.1 | \n",
+ " 5.4 | \n",
+ " 2.1 | \n",
+ "
\n",
+ " \n",
+ " | 140 | \n",
+ " 6.7 | \n",
+ " 3.1 | \n",
+ " 5.6 | \n",
+ " 2.4 | \n",
+ "
\n",
+ " \n",
+ " | 141 | \n",
+ " 6.9 | \n",
+ " 3.1 | \n",
+ " 5.1 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 142 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 5.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 143 | \n",
+ " 6.8 | \n",
+ " 3.2 | \n",
+ " 5.9 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 144 | \n",
+ " 6.7 | \n",
+ " 3.3 | \n",
+ " 5.7 | \n",
+ " 2.5 | \n",
+ "
\n",
+ " \n",
+ " | 145 | \n",
+ " 6.7 | \n",
+ " 3.0 | \n",
+ " 5.2 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 146 | \n",
+ " 6.3 | \n",
+ " 2.5 | \n",
+ " 5.0 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 147 | \n",
+ " 6.5 | \n",
+ " 3.0 | \n",
+ " 5.2 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 148 | \n",
+ " 6.2 | \n",
+ " 3.4 | \n",
+ " 5.4 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 149 | \n",
+ " 5.9 | \n",
+ " 3.0 | \n",
+ " 5.1 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
150 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n",
+ "0 5.1 3.5 1.4 0.2\n",
+ "1 4.9 3.0 1.4 0.2\n",
+ "2 4.7 3.2 1.3 0.2\n",
+ "3 4.6 3.1 1.5 0.2\n",
+ "4 5.0 3.6 1.4 0.2\n",
+ "5 5.4 3.9 1.7 0.4\n",
+ "6 4.6 3.4 1.4 0.3\n",
+ "7 5.0 3.4 1.5 0.2\n",
+ "8 4.4 2.9 1.4 0.2\n",
+ "9 4.9 3.1 1.5 0.1\n",
+ "10 5.4 3.7 1.5 0.2\n",
+ "11 4.8 3.4 1.6 0.2\n",
+ "12 4.8 3.0 1.4 0.1\n",
+ "13 4.3 3.0 1.1 0.1\n",
+ "14 5.8 4.0 1.2 0.2\n",
+ "15 5.7 4.4 1.5 0.4\n",
+ "16 5.4 3.9 1.3 0.4\n",
+ "17 5.1 3.5 1.4 0.3\n",
+ "18 5.7 3.8 1.7 0.3\n",
+ "19 5.1 3.8 1.5 0.3\n",
+ "20 5.4 3.4 1.7 0.2\n",
+ "21 5.1 3.7 1.5 0.4\n",
+ "22 4.6 3.6 1.0 0.2\n",
+ "23 5.1 3.3 1.7 0.5\n",
+ "24 4.8 3.4 1.9 0.2\n",
+ "25 5.0 3.0 1.6 0.2\n",
+ "26 5.0 3.4 1.6 0.4\n",
+ "27 5.2 3.5 1.5 0.2\n",
+ "28 5.2 3.4 1.4 0.2\n",
+ "29 4.7 3.2 1.6 0.2\n",
+ ".. ... ... ... ...\n",
+ "120 6.9 3.2 5.7 2.3\n",
+ "121 5.6 2.8 4.9 2.0\n",
+ "122 7.7 2.8 6.7 2.0\n",
+ "123 6.3 2.7 4.9 1.8\n",
+ "124 6.7 3.3 5.7 2.1\n",
+ "125 7.2 3.2 6.0 1.8\n",
+ "126 6.2 2.8 4.8 1.8\n",
+ "127 6.1 3.0 4.9 1.8\n",
+ "128 6.4 2.8 5.6 2.1\n",
+ "129 7.2 3.0 5.8 1.6\n",
+ "130 7.4 2.8 6.1 1.9\n",
+ "131 7.9 3.8 6.4 2.0\n",
+ "132 6.4 2.8 5.6 2.2\n",
+ "133 6.3 2.8 5.1 1.5\n",
+ "134 6.1 2.6 5.6 1.4\n",
+ "135 7.7 3.0 6.1 2.3\n",
+ "136 6.3 3.4 5.6 2.4\n",
+ "137 6.4 3.1 5.5 1.8\n",
+ "138 6.0 3.0 4.8 1.8\n",
+ "139 6.9 3.1 5.4 2.1\n",
+ "140 6.7 3.1 5.6 2.4\n",
+ "141 6.9 3.1 5.1 2.3\n",
+ "142 5.8 2.7 5.1 1.9\n",
+ "143 6.8 3.2 5.9 2.3\n",
+ "144 6.7 3.3 5.7 2.5\n",
+ "145 6.7 3.0 5.2 2.3\n",
+ "146 6.3 2.5 5.0 1.9\n",
+ "147 6.5 3.0 5.2 2.0\n",
+ "148 6.2 3.4 5.4 2.3\n",
+ "149 5.9 3.0 5.1 1.8\n",
+ "\n",
+ "[150 rows x 4 columns]"
+ ]
+ },
+ "execution_count": 76,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "df = pd.DataFrame(X, columns=headers)\n",
+ "\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This will give you a very user-friendly version of the data which you can manipulate using the methods in ```DataFrame```.\n",
+ "\n",
+ "The advantage of using a DataFrame over a list of lists or any other Python data structure is that it is much more versatile and easy to use."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 77,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 5.1 | \n",
+ " 3.5 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 4.9 | \n",
+ " 3.0 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 4.7 | \n",
+ " 3.2 | \n",
+ " 1.3 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4.6 | \n",
+ " 3.1 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5.0 | \n",
+ " 3.6 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 5.4 | \n",
+ " 3.9 | \n",
+ " 1.7 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 4.6 | \n",
+ " 3.4 | \n",
+ " 1.4 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 5.0 | \n",
+ " 3.4 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 4.4 | \n",
+ " 2.9 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 4.9 | \n",
+ " 3.1 | \n",
+ " 1.5 | \n",
+ " 0.1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n",
+ "0 5.1 3.5 1.4 0.2\n",
+ "1 4.9 3.0 1.4 0.2\n",
+ "2 4.7 3.2 1.3 0.2\n",
+ "3 4.6 3.1 1.5 0.2\n",
+ "4 5.0 3.6 1.4 0.2\n",
+ "5 5.4 3.9 1.7 0.4\n",
+ "6 4.6 3.4 1.4 0.3\n",
+ "7 5.0 3.4 1.5 0.2\n",
+ "8 4.4 2.9 1.4 0.2\n",
+ "9 4.9 3.1 1.5 0.1"
+ ]
+ },
+ "execution_count": 77,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Return the first 10 rows in df\n",
+ "df[0:10]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 78,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 140 | \n",
+ " 6.7 | \n",
+ " 3.1 | \n",
+ " 5.6 | \n",
+ " 2.4 | \n",
+ "
\n",
+ " \n",
+ " | 141 | \n",
+ " 6.9 | \n",
+ " 3.1 | \n",
+ " 5.1 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 142 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 5.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 143 | \n",
+ " 6.8 | \n",
+ " 3.2 | \n",
+ " 5.9 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 144 | \n",
+ " 6.7 | \n",
+ " 3.3 | \n",
+ " 5.7 | \n",
+ " 2.5 | \n",
+ "
\n",
+ " \n",
+ " | 145 | \n",
+ " 6.7 | \n",
+ " 3.0 | \n",
+ " 5.2 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 146 | \n",
+ " 6.3 | \n",
+ " 2.5 | \n",
+ " 5.0 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 147 | \n",
+ " 6.5 | \n",
+ " 3.0 | \n",
+ " 5.2 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 148 | \n",
+ " 6.2 | \n",
+ " 3.4 | \n",
+ " 5.4 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 149 | \n",
+ " 5.9 | \n",
+ " 3.0 | \n",
+ " 5.1 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n",
+ "140 6.7 3.1 5.6 2.4\n",
+ "141 6.9 3.1 5.1 2.3\n",
+ "142 5.8 2.7 5.1 1.9\n",
+ "143 6.8 3.2 5.9 2.3\n",
+ "144 6.7 3.3 5.7 2.5\n",
+ "145 6.7 3.0 5.2 2.3\n",
+ "146 6.3 2.5 5.0 1.9\n",
+ "147 6.5 3.0 5.2 2.0\n",
+ "148 6.2 3.4 5.4 2.3\n",
+ "149 5.9 3.0 5.1 1.8"
+ ]
+ },
+ "execution_count": 78,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Return the last 10 rows in df\n",
+ "df[-10:]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 79,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(150, 4)"
+ ]
+ },
+ "execution_count": 79,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Get to know the shape of the data\n",
+ "df.shape"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This tells us there are 150 rows and 4 columns in ```df```."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 80,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | count | \n",
+ " 150.000000 | \n",
+ " 150.000000 | \n",
+ " 150.000000 | \n",
+ " 150.000000 | \n",
+ "
\n",
+ " \n",
+ " | mean | \n",
+ " 5.843333 | \n",
+ " 3.054000 | \n",
+ " 3.758667 | \n",
+ " 1.198667 | \n",
+ "
\n",
+ " \n",
+ " | std | \n",
+ " 0.828066 | \n",
+ " 0.433594 | \n",
+ " 1.764420 | \n",
+ " 0.763161 | \n",
+ "
\n",
+ " \n",
+ " | min | \n",
+ " 4.300000 | \n",
+ " 2.000000 | \n",
+ " 1.000000 | \n",
+ " 0.100000 | \n",
+ "
\n",
+ " \n",
+ " | 25% | \n",
+ " 5.100000 | \n",
+ " 2.800000 | \n",
+ " 1.600000 | \n",
+ " 0.300000 | \n",
+ "
\n",
+ " \n",
+ " | 50% | \n",
+ " 5.800000 | \n",
+ " 3.000000 | \n",
+ " 4.350000 | \n",
+ " 1.300000 | \n",
+ "
\n",
+ " \n",
+ " | 75% | \n",
+ " 6.400000 | \n",
+ " 3.300000 | \n",
+ " 5.100000 | \n",
+ " 1.800000 | \n",
+ "
\n",
+ " \n",
+ " | max | \n",
+ " 7.900000 | \n",
+ " 4.400000 | \n",
+ " 6.900000 | \n",
+ " 2.500000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) \\\n",
+ "count 150.000000 150.000000 150.000000 \n",
+ "mean 5.843333 3.054000 3.758667 \n",
+ "std 0.828066 0.433594 1.764420 \n",
+ "min 4.300000 2.000000 1.000000 \n",
+ "25% 5.100000 2.800000 1.600000 \n",
+ "50% 5.800000 3.000000 4.350000 \n",
+ "75% 6.400000 3.300000 5.100000 \n",
+ "max 7.900000 4.400000 6.900000 \n",
+ "\n",
+ " petal width (cm) \n",
+ "count 150.000000 \n",
+ "mean 1.198667 \n",
+ "std 0.763161 \n",
+ "min 0.100000 \n",
+ "25% 0.300000 \n",
+ "50% 1.300000 \n",
+ "75% 1.800000 \n",
+ "max 2.500000 "
+ ]
+ },
+ "execution_count": 80,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Get a more detailed description of the dataset\n",
+ "df.describe()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This gives us the statistics of each of features in detail. ```count``` is the number of values in that feature, ```mean``` and ```std``` are the mean and standard deviation and the other values are the minimum, maximum and values for each of the quartiles (1st, 2nd and 3rd).\n",
+ "\n",
+ "Other methods:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 81,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 5.1\n",
+ "1 4.9\n",
+ "2 4.7\n",
+ "3 4.6\n",
+ "4 5.0\n",
+ "5 5.4\n",
+ "6 4.6\n",
+ "7 5.0\n",
+ "8 4.4\n",
+ "9 4.9\n",
+ "10 5.4\n",
+ "11 4.8\n",
+ "12 4.8\n",
+ "13 4.3\n",
+ "14 5.8\n",
+ "15 5.7\n",
+ "16 5.4\n",
+ "17 5.1\n",
+ "18 5.7\n",
+ "19 5.1\n",
+ "20 5.4\n",
+ "21 5.1\n",
+ "22 4.6\n",
+ "23 5.1\n",
+ "24 4.8\n",
+ "25 5.0\n",
+ "26 5.0\n",
+ "27 5.2\n",
+ "28 5.2\n",
+ "29 4.7\n",
+ " ... \n",
+ "120 6.9\n",
+ "121 5.6\n",
+ "122 7.7\n",
+ "123 6.3\n",
+ "124 6.7\n",
+ "125 7.2\n",
+ "126 6.2\n",
+ "127 6.1\n",
+ "128 6.4\n",
+ "129 7.2\n",
+ "130 7.4\n",
+ "131 7.9\n",
+ "132 6.4\n",
+ "133 6.3\n",
+ "134 6.1\n",
+ "135 7.7\n",
+ "136 6.3\n",
+ "137 6.4\n",
+ "138 6.0\n",
+ "139 6.9\n",
+ "140 6.7\n",
+ "141 6.9\n",
+ "142 5.8\n",
+ "143 6.8\n",
+ "144 6.7\n",
+ "145 6.7\n",
+ "146 6.3\n",
+ "147 6.5\n",
+ "148 6.2\n",
+ "149 5.9\n",
+ "Name: sepal length (cm), Length: 150, dtype: float64"
+ ]
+ },
+ "execution_count": 81,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Retrieve only sepal_length from df\n",
+ "df['sepal length (cm)']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 82,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "sepal length (cm) 5.0\n",
+ "sepal width (cm) 3.6\n",
+ "petal length (cm) 1.4\n",
+ "petal width (cm) 0.2\n",
+ "Name: 4, dtype: float64"
+ ]
+ },
+ "execution_count": 82,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Return 5th row of df\n",
+ "df.iloc[4]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 83,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1.4"
+ ]
+ },
+ "execution_count": 83,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Return petal length of 5th row of df\n",
+ "df.iloc[4,2]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 84,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 41 | \n",
+ " 4.5 | \n",
+ " 2.3 | \n",
+ " 1.3 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 53 | \n",
+ " 5.5 | \n",
+ " 2.3 | \n",
+ " 4.0 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 54 | \n",
+ " 6.5 | \n",
+ " 2.8 | \n",
+ " 4.6 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 55 | \n",
+ " 5.7 | \n",
+ " 2.8 | \n",
+ " 4.5 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 57 | \n",
+ " 4.9 | \n",
+ " 2.4 | \n",
+ " 3.3 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 59 | \n",
+ " 5.2 | \n",
+ " 2.7 | \n",
+ " 3.9 | \n",
+ " 1.4 | \n",
+ "
\n",
+ " \n",
+ " | 60 | \n",
+ " 5.0 | \n",
+ " 2.0 | \n",
+ " 3.5 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 62 | \n",
+ " 6.0 | \n",
+ " 2.2 | \n",
+ " 4.0 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 67 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 4.1 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 68 | \n",
+ " 6.2 | \n",
+ " 2.2 | \n",
+ " 4.5 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 69 | \n",
+ " 5.6 | \n",
+ " 2.5 | \n",
+ " 3.9 | \n",
+ " 1.1 | \n",
+ "
\n",
+ " \n",
+ " | 71 | \n",
+ " 6.1 | \n",
+ " 2.8 | \n",
+ " 4.0 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 72 | \n",
+ " 6.3 | \n",
+ " 2.5 | \n",
+ " 4.9 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 73 | \n",
+ " 6.1 | \n",
+ " 2.8 | \n",
+ " 4.7 | \n",
+ " 1.2 | \n",
+ "
\n",
+ " \n",
+ " | 76 | \n",
+ " 6.8 | \n",
+ " 2.8 | \n",
+ " 4.8 | \n",
+ " 1.4 | \n",
+ "
\n",
+ " \n",
+ " | 79 | \n",
+ " 5.7 | \n",
+ " 2.6 | \n",
+ " 3.5 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 80 | \n",
+ " 5.5 | \n",
+ " 2.4 | \n",
+ " 3.8 | \n",
+ " 1.1 | \n",
+ "
\n",
+ " \n",
+ " | 81 | \n",
+ " 5.5 | \n",
+ " 2.4 | \n",
+ " 3.7 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 82 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 3.9 | \n",
+ " 1.2 | \n",
+ "
\n",
+ " \n",
+ " | 83 | \n",
+ " 6.0 | \n",
+ " 2.7 | \n",
+ " 5.1 | \n",
+ " 1.6 | \n",
+ "
\n",
+ " \n",
+ " | 87 | \n",
+ " 6.3 | \n",
+ " 2.3 | \n",
+ " 4.4 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 89 | \n",
+ " 5.5 | \n",
+ " 2.5 | \n",
+ " 4.0 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 90 | \n",
+ " 5.5 | \n",
+ " 2.6 | \n",
+ " 4.4 | \n",
+ " 1.2 | \n",
+ "
\n",
+ " \n",
+ " | 92 | \n",
+ " 5.8 | \n",
+ " 2.6 | \n",
+ " 4.0 | \n",
+ " 1.2 | \n",
+ "
\n",
+ " \n",
+ " | 93 | \n",
+ " 5.0 | \n",
+ " 2.3 | \n",
+ " 3.3 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 94 | \n",
+ " 5.6 | \n",
+ " 2.7 | \n",
+ " 4.2 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 98 | \n",
+ " 5.1 | \n",
+ " 2.5 | \n",
+ " 3.0 | \n",
+ " 1.1 | \n",
+ "
\n",
+ " \n",
+ " | 99 | \n",
+ " 5.7 | \n",
+ " 2.8 | \n",
+ " 4.1 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 101 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 5.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 106 | \n",
+ " 4.9 | \n",
+ " 2.5 | \n",
+ " 4.5 | \n",
+ " 1.7 | \n",
+ "
\n",
+ " \n",
+ " | 108 | \n",
+ " 6.7 | \n",
+ " 2.5 | \n",
+ " 5.8 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 111 | \n",
+ " 6.4 | \n",
+ " 2.7 | \n",
+ " 5.3 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 113 | \n",
+ " 5.7 | \n",
+ " 2.5 | \n",
+ " 5.0 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 114 | \n",
+ " 5.8 | \n",
+ " 2.8 | \n",
+ " 5.1 | \n",
+ " 2.4 | \n",
+ "
\n",
+ " \n",
+ " | 118 | \n",
+ " 7.7 | \n",
+ " 2.6 | \n",
+ " 6.9 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 119 | \n",
+ " 6.0 | \n",
+ " 2.2 | \n",
+ " 5.0 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 121 | \n",
+ " 5.6 | \n",
+ " 2.8 | \n",
+ " 4.9 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 122 | \n",
+ " 7.7 | \n",
+ " 2.8 | \n",
+ " 6.7 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 123 | \n",
+ " 6.3 | \n",
+ " 2.7 | \n",
+ " 4.9 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 126 | \n",
+ " 6.2 | \n",
+ " 2.8 | \n",
+ " 4.8 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 128 | \n",
+ " 6.4 | \n",
+ " 2.8 | \n",
+ " 5.6 | \n",
+ " 2.1 | \n",
+ "
\n",
+ " \n",
+ " | 130 | \n",
+ " 7.4 | \n",
+ " 2.8 | \n",
+ " 6.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 132 | \n",
+ " 6.4 | \n",
+ " 2.8 | \n",
+ " 5.6 | \n",
+ " 2.2 | \n",
+ "
\n",
+ " \n",
+ " | 133 | \n",
+ " 6.3 | \n",
+ " 2.8 | \n",
+ " 5.1 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 134 | \n",
+ " 6.1 | \n",
+ " 2.6 | \n",
+ " 5.6 | \n",
+ " 1.4 | \n",
+ "
\n",
+ " \n",
+ " | 142 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 5.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 146 | \n",
+ " 6.3 | \n",
+ " 2.5 | \n",
+ " 5.0 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n",
+ "41 4.5 2.3 1.3 0.3\n",
+ "53 5.5 2.3 4.0 1.3\n",
+ "54 6.5 2.8 4.6 1.5\n",
+ "55 5.7 2.8 4.5 1.3\n",
+ "57 4.9 2.4 3.3 1.0\n",
+ "59 5.2 2.7 3.9 1.4\n",
+ "60 5.0 2.0 3.5 1.0\n",
+ "62 6.0 2.2 4.0 1.0\n",
+ "67 5.8 2.7 4.1 1.0\n",
+ "68 6.2 2.2 4.5 1.5\n",
+ "69 5.6 2.5 3.9 1.1\n",
+ "71 6.1 2.8 4.0 1.3\n",
+ "72 6.3 2.5 4.9 1.5\n",
+ "73 6.1 2.8 4.7 1.2\n",
+ "76 6.8 2.8 4.8 1.4\n",
+ "79 5.7 2.6 3.5 1.0\n",
+ "80 5.5 2.4 3.8 1.1\n",
+ "81 5.5 2.4 3.7 1.0\n",
+ "82 5.8 2.7 3.9 1.2\n",
+ "83 6.0 2.7 5.1 1.6\n",
+ "87 6.3 2.3 4.4 1.3\n",
+ "89 5.5 2.5 4.0 1.3\n",
+ "90 5.5 2.6 4.4 1.2\n",
+ "92 5.8 2.6 4.0 1.2\n",
+ "93 5.0 2.3 3.3 1.0\n",
+ "94 5.6 2.7 4.2 1.3\n",
+ "98 5.1 2.5 3.0 1.1\n",
+ "99 5.7 2.8 4.1 1.3\n",
+ "101 5.8 2.7 5.1 1.9\n",
+ "106 4.9 2.5 4.5 1.7\n",
+ "108 6.7 2.5 5.8 1.8\n",
+ "111 6.4 2.7 5.3 1.9\n",
+ "113 5.7 2.5 5.0 2.0\n",
+ "114 5.8 2.8 5.1 2.4\n",
+ "118 7.7 2.6 6.9 2.3\n",
+ "119 6.0 2.2 5.0 1.5\n",
+ "121 5.6 2.8 4.9 2.0\n",
+ "122 7.7 2.8 6.7 2.0\n",
+ "123 6.3 2.7 4.9 1.8\n",
+ "126 6.2 2.8 4.8 1.8\n",
+ "128 6.4 2.8 5.6 2.1\n",
+ "130 7.4 2.8 6.1 1.9\n",
+ "132 6.4 2.8 5.6 2.2\n",
+ "133 6.3 2.8 5.1 1.5\n",
+ "134 6.1 2.6 5.6 1.4\n",
+ "142 5.8 2.7 5.1 1.9\n",
+ "146 6.3 2.5 5.0 1.9"
+ ]
+ },
+ "execution_count": 84,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Return all instances in df where sepal width is less than 2.9 and store it in a different DataFrame, df1\n",
+ "df1=df.loc[df['sepal width (cm)'] < 2.9]\n",
+ "df1"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 85,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "sepal length (cm) 5.843333\n",
+ "sepal width (cm) 3.054000\n",
+ "petal length (cm) 3.758667\n",
+ "petal width (cm) 1.198667\n",
+ "dtype: float64"
+ ]
+ },
+ "execution_count": 85,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Get mean of each column in df\n",
+ "# Hint: use numpy.mean\n",
+ "import numpy as np\n",
+ "np.mean(df)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "While we can always get the mean using ```df.describe()```, ```df.apply()``` can be used to apply any function to each column, such as ```np.sum```, ```np.max``` and so on."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Using Matplotlib**\n",
+ "\n",
+ "It is important to visualise the data we have so we can get useful inferences from it, such as by plotting one feature against another. If we can guess beforehand which features are more likely to decide the value of the target variable, we'll be able to create a better model accordingly.\n",
+ "\n",
+ "```matplotlib.pyplot``` is the library for creating 2D graphs in Python. It mimics the functions used in Matlab, which is a much more comprehensive tool for a wide range of experimental purposes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 86,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "# Only for jupyter-notebooks; don't bother about this line elsewhere.\n",
+ "%matplotlib inline"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We'll try to plot the features from the Iris dataset."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 87,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sl = df['sepal length (cm)']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 88,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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mDp1Kj/4wQ8AuOqqqzjxxBOZO3cukyZN4pxzztm6zBVXXMG+++7LrFmz+PM//3POOuss7r//fpYuXcrnP/95pkyZwjPPZDcjve6665g+fTr77rsv9913X98GrZyI2GmmadOmhZk1npUrVya3vfrqiObmCNg2NTdn5Ttqw4YNcdBBB8WkSZNi0aJFcffdd0dExMaNG+PQQw+Nl156KSIirr322jjllFMiImLmzJlx+umnR0TEPffcE5MnT46IiPXr18emTZsiIuKOO+6IE088MSIi7rrrrvjIRz6y3bqLy88999z43ve+FxERr776akyaNCneeOON+M53vhMTJ06M1157Ld5+++0YN25crFmzJn7961/H+PHjY926dbFx48Y4/PDD41Of+lRERCxYsCCuu+66reuZOXNmfPazn42IiB/96Ecxe/bs7WIp9z6Q3Z8o6Tu2prukJM0F/pnsBkrfjogvl9TvCvwbMA1YB5wUEc/ldecCpwFbgLMj4rZaxmpmjeG88+Ctt7qWvfVWVn7yyTvW52677cayZcu47777uOuuuzjppJP48pe/TFtbGytWrODII48EYMuWLey9995bl5s/fz4AH/rQh3j99dd57bXX2LBhAwsWLODpp59GEps2bUqO4/bbb2fp0qV87WtfA7Kzx9asWQPA7NmzGTFiBACtra08//zzvPzyy8ycOZM999wTgI9//OM89dRT3fZ/4oknAjBt2jSee+655LhS1WyXlKQm4FLgGKAVmC+pdGfbacCrEfF7wD8BX8mXbSW7petkYC7wL3l/NVFp83fOHJC2TXPm9G55gMmTu/YxeXLX+jPPhCFDsrohQ7L5UmPGdO1jzJjerWPYsK71w4Ztv45KbSqNRcp4VHodKWNRSUof1d7tYdWRf38ml6dqampi1qxZ/O3f/i3f/OY3ueGGG4gIJk+ezPLly1m+fDmPPfYYt99++9ZlSs8sksT555/PEUccwYoVK/jhD3/Yq1NVI4Ibbrhh6/rWrFnD/vvvD7B1d1kh1s2bNxO9vMFdoY/C8tVWy2MY04HVEfFsRGwErgWOL2lzPPDd/Pn1wGxl79DxwLUR8ZuI+BWwOu+v6pYsgYUL4fnns43f55/P5gtfHnPmwJ13dl3mzju3fVFWWh6yL+6VJTeYXbly2xf6mWfCt74FW7Zk81u2ZPPFX3JjxsDatV37WLt225dtpXUMGwal/wht2tQ1IVRqU2ksUsaj0utIGYtKUvpIed+sPsaN6115ilWrVvH0009vnV++fDnjx49nv/32o7OzkwceeADIfpH++OOPb233/e9/H4Cf/exnjBgxghEjRrB+/XrG5B/Yq666qldxHH300VxyySVbE8EjjzzSY/vp06dzzz338Oqrr7J582ZuuOGGrXW77747GzZs6NX6+6qWCWMM8ELRfEdeVrZNRGwG1gN7JS5bFT1t/sL2X5AFhfJKy8P2X+Sl5YsXl68vLi/9ki0tr7SO7raai8srtak0FlB5PCq9jpSxqCSlj5T3zerj4ouhublrWXNzVr6j3njjDRYsWEBraysHHnggK1eu5MILL2TYsGFcf/31/NVf/RUHHXQQU6ZM4f7779+63MiRI5kxYwZnnHEGV1xxBQDnnHMO5557LocddhhbCv+VJDr//PPZtGkTBx54IAcccADnn39+j+3HjBnDX//1X3PIIYcwZ84cWltbt+62mjdvHl/96leZOnXq1oPeNZd6sKO3E/BxsuMWhfk/BS4pafM4MLZo/hmyhHEp8Imi8iuAj3aznoVAO9A+bty47Q7oVCJ1PbhWmKTCAaHup5TlU/qoVF+NPvpjHdUYz5R1VFKNOK26enPQOyI7wD1+fPZ+jB/ftwPeO2rmzJnx8MMP9/+KS2zYsCEiIjZt2hTHHnts3HjjjTvcV18PetdyC6MD2KdofixQ+v/l1jaShgAjgFcSlwUgIhZHRFtEtLW0tPQ6yL5u/lZj87mpm6Mz3ZU3sr6ORzXGIqWPWuz2sOo5+WR47jl4993scUcPdu8MLrzwQqZMmcIBBxzAxIkTOeGEE+oXTGpm6e1E9qPAZ4GJwDDgl8DkkjafAi7Ln88D/iN/Pjlvv2u+/LNAU6V17shptZVO4Zs9u/x/ooUz1lJOAWxtLd9Ha2tWv2hR+fpFi7b1MXp0+TajR6etY+jQ8vVDh25bR6U2lcYiZTwqvY6UsagkpY9anLpp3evtFobVRl+3MGqWMLI4+DDwFNmupvPysouA4/Lnw4HryA5qPwS8r2jZ8/LlVgHHpKxvR3+HUWnzt/SLsvT05pTN59Iv9MIXecGiRRFNTVldU1P5L8jSL9vCl2zqOkoTQnGySG1TaSxSxqPS60gZi0pS+miE3R6DhRNGY+hrwlDWfufQ1tYWtb6Wipn13hNPPMHv//7v+wKEdRQRPPnkk1tP4y2QtCwi2lL68KVBzKzmhg8fzrp169iZ/kEdSCKy+2EMHz68T/344oNmVnNjx46lo6ODzs7OeocyaBXuuNcXThhmVnNDhw7t053erDF4l5SZmSVxwjAzsyROGGZmlmSnOq1WUifwfB1DGAW8XMf1p3Kc1TdQYnWc1bUzxDk+IpIuk7FTJYx6k9Seej5zPTnO6hsosTrO6hpscXqXlJmZJXHCMDOzJE4Y1dWLuzbUleOsvoESq+OsrkEVp49hmJlZEm9hmJlZEieMHSSpSdIjkm4pU/dJSZ2SlufT6XWK8TlJj+UxbHcZX2W+IWm1pEclHdygcc6StL5oPP+mTnHuIel6SU9KekLSoSX1jTKeleJslPHcryiG5ZJel/SZkjZ1H9PEOBtlTP9S0uOSVki6RtLwkvpdJX0/H88HJU3oTf++ltSO+wvgCeC93dR/PyLO6sd4unNERHR3/vUxwKR8OgT4Vv5YDz3FCXBfRBzbb9GU98/ArRHxMUnDgJI7TzfMeFaKExpgPCNiFTAFsn/AgF8DN5U0q/uYJsYJdR5TSWOAs4HWiHhb0n+Q3ZjuqqJmpwGvRsTvSZoHfAU4KXUd3sLYAZLGAh8Bvl3vWProeODf8vuo/BzYQ9Le9Q6qEUl6L/AhsvvLExEbI+K1kmZ1H8/EOBvRbOCZiCj94W3dx7REd3E2iiHAb+W3vG5m+1tbHw98N39+PTBbvbhJiRPGjvk6cA7wbg9tPppvQl8vaZ8e2tVSALdLWiZpYZn6McALRfMdeVl/qxQnwKGSfinpx5Im92dwufcBncB38l2R35b0npI2jTCeKXFC/cez1DzgmjLljTCmxbqLE+o8phHxa+BrwBrgRWB9RNxe0mzreEbEZmA9sFfqOpwweknSscBLEbGsh2Y/BCZExIHAT9iW0fvbYRFxMNlm/ackfaikvtx/FvU4ba5SnL8gu3zBQcAlwM39HSDZf24HA9+KiKnAm8AXSto0wnimxNkI47lVvtvsOLLbNW9XXaasLqd2Voiz7mMqaSTZFsREYDTwHkmfKG1WZtHk8XTC6L3DgOMkPQdcC/wvSVcXN4iIdRHxm3z2X4Fp/Rvi1jjW5o8vke1znV7SpAMo3voZy/absDVXKc6IeD0i3sif/ycwVNKofg6zA+iIiAfz+evJvphL29R7PCvG2SDjWewY4BcR8T9l6hphTAu6jbNBxnQO8KuI6IyITcCNwIySNlvHM99tNQJ4JXUFThi9FBHnRsTYiJhAtnn604joksVL9rEeR3ZwvF9Jeo+k3QvPgaOAFSXNlgJ/lp+J8kGyTdgXGy1OSb9b2M8qaTrZ53Zdf8YZEf8NvCBpv7xoNrCypFndxzMlzkYYzxLz6X43T93HtEi3cTbImK4BPiipOY9lNtt/9ywFFuTPP0b2/ZW8heGzpKpE0kVAe0QsBc6WdBywmSx7f7IOIf0OcFP+GR4C/HtE3CrpDICIuAz4T+DDwGrgLeDyiLWVAAAEOUlEQVSUBo3zY8AiSZuBt4F5vfmQV9GngSX5rolngVMacDxT4myU8URSM3Ak8H+KyhpuTBPirPuYRsSDkq4n2z22GXgEWFzy3XQF8D1Jq8m+m+b1Zh3+pbeZmSXxLikzM0vihGFmZkmcMMzMLIkThpmZJXHCMDOzJE4YZmXkVx8tdyXisuVVWN8JklqL5u+WVPEezJL2rkY8klok3drXfmzn5oRh1hhOAForttreZ8muJtAnEdEJvCjpsL72ZTsvJwwbkPJfiP8ov9jbCkkn5eXTJN2TX8jwtsKv7vP/2L8u6f68/fS8fHpe9kj+uF9P6y0Tw5WSHs6XPz4v/6SkGyXdKulpSf9QtMxpkp7K4/lXSd+UNIPsigBfVXYvhffnzT8u6aG8/R92E8ZHgVvzvpskfU3ZvUUelfTpvPw5SX8v6QFJ7ZIOzsfmmcKPz3I3Ayenvn4bfPxLbxuo5gJrI+IjAJJGSBpKduG34yOiM08iFwOn5su8JyJmKLu44ZXAAcCTwIciYrOkOcDfk30JpziP7NIKp0raA3hI0k/yuinAVOA3wCpJlwBbgPPJru20Afgp8MuIuF/SUuCWiLg+fz0AQyJiuqQPAxeQXStoK0kTye5tULhu2UKyC89NzV/PnkXNX4iIQyX9E9n9EQ4DhgOPA5flbdqBv0t87TYIOWHYQPUY8DVJXyH7or1P0gFkSeCO/Au3iewyzwXXAETEvZLem3/J7w58V9Iksqt2Du1FDEeRXYjyc/n8cGBc/vzOiFgPIGklMB4YBdwTEa/k5dcB+/bQ/4354zJgQpn6vckuZV4wB7gsv2w1hfXkluaPjwG7RcQGYIOkdyTtkd8z4yWyq5yaleWEYQNSRDwlaRrZdYb+n6Tbya50+3hEHNrdYmXmvwTcFRF/rOx2lXf3IgwBH83vyLatUDqEbMuiYAvZ31ryjWpyhT4Ky5d6myxJFcfT3bV+Cn29WxLbu0V9D8/7NCvLxzBsQJI0GngrIq4mu2nMwcAqoEX5PawlDVXXG9kUjnMcTnbV0/Vkl3f+dV7/yV6GcRvw6fzKoEiaWqH9Q8BMSSOVXVq6eNfXBrKtnd54iq5bHrcDZ+R9U7JLKsW+bH9FY7OtnDBsoPoDsmMGy8mOJfxdRGwku2roVyT9ElhO1/sBvCrpfrJ99qflZf9AtoXyX2S7sHrjS2S7sB6VtCKf71Z+R7S/Bx4ku7HWSrI7nkF2b5XP5wfP399NF6X9vQk8I+n38qJvk13i+tH89f9JL1/PEcCPermMDSK+Wq0NCpLuBj4XEe11jmO3iHgj3wq4CbgyIm7qQ39/DEyLiC9WIbZ7yU4YeLWvfdnOyVsYZv3rwnyraAXwK/p4K8882TzX16AktQD/6GRhPfEWhpmZJfEWhpmZJXHCMDOzJE4YZmaWxAnDzMySOGGYmVkSJwwzM0vy/wHhvJ4DCiohdQAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Create a plt.figure object\n",
+ "fig = plt.figure('Sepal length vs y')\n",
+ "\n",
+ "ax0 = fig.add_subplot(111) # This means there's only 1 plot in the whole figure. 211 would mean 2 plots\n",
+ "# and the top plot is being added. 212 means 2 plots and bottom plot is being added.\n",
+ "ax0.scatter(sl, y, c = 'b', marker='o', label='Sepal length')\n",
+ "ax0.set_xlabel('sepal length (cm)')\n",
+ "ax0.set_ylabel('flower')\n",
+ "ax0.legend()\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 89,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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iIgUrpivFGYDr7n7H929FbgX+HQRxxMRkT4qZlKYCLyVVt6SqIv7MzP7rZk9YGaTixiPiIjkUcykYFnqPFb+F6DG3WuBx4A7s3ZkttjMms2sefv27f0cpoiIJBUzKWwB0v/znwRsTW/g7jvd/VCi+A9AfbaO3H21uze4e8P48eOLEqyIiBQ3KTwHTDOzqWY2ArgQWJvewMyOSysuAl4uYjwiIpJH0a4+cvd2M7sc+BVQBvzE3V8ys78Gmt19LXCFmS0C2oH3gL8sVjwiIpKfucen+Qe2hoYGb25uLnUYIiKDipm1uHtDvnZ6R7OIiESUFEREJKKkICIiESUFERGJKCmIiEhESUFERCJKCiIiElFSEBGRiJKCiIhElBRERCSipCAiIhElBRERiSgpiIhIRElBREQiSgoiIhJRUhARkYiSgoiIRJQUREQkUrTPaBaRD5e2tja2bNnCwYMHSx3Kh1pFRQWTJk2ivLy8V/srKYhIv9iyZQuVlZXU1NRgZqUO50PJ3dm5cydbtmxh6tSpvepD00ci0i8OHjzIuHHjlBBKyMwYN25cn16tKSmISL9RQii9vj4HSgoiMmR8+9vfZsaMGdTW1lJXV8czzzzTr/2vW7eOhQsXFlzfVw8//DCbNm2Kyk1NTTQ3N/f7OOm0piAiQ8KGDRt45JFHeP755xk5ciQ7duygtbW11GH1ycMPP8zChQuZPn36YRtTrxREpCTuugtqamDYsPD1rrv61t8777xDVVUVI0eOBKCqqorjjz8egJaWFhobG6mvr+ecc87hnXfeAcJ/3ldeeSVz587lxBNP5NlnnwXg2WefZe7cuZx88snMnTuXV155peA49u3bxxe/+EVmzZrFySefzM9//nMA7rjjDi644ALOPfdcpk2bxjXXXBPtc9ttt/Gxj32MpqYm/uqv/orLL7+cp59+mrVr13L11VdTV1fH66+/DsD999/P7Nmz+djHPsb69ev7dtCycfdBtdXX17uIDDybNm0quO2aNe6jR7tDahs9OtT31p49e3zmzJk+bdo0X7Jkia9bt87d3VtbW/20007zbdu2ubv7vffe61/4whfc3b2xsdG//OUvu7v7E0884TNmzHB39927d3tbW5u7uz/66KN+wQUXuLv7448/7uedd16XsdPrr7vuOv/pT3/q7u7vv/++T5s2zffu3eu33367T5061Xft2uUHDhzw6upqf/PNN/3tt9/2KVOm+M6dO721tdXPOOMMv+yyy9zd/ZJLLvH7778/GqexsdG/9rWvubv7L37xC1+wYEHWY5HtuQCavYBzrKaPROSwu/562L8/s27//lB/8cW96/OII46gpaWF9evX8/jjj/PZz36W733vezQ0NPDiiy9y1llnAdDR0cFxxx0X7XfRRRcBMH/+fD744AN27drFnj17uOSSS3j11VcxM9ra2gqO49e//jVr167lb//2b4FwVdabb74JwIIFCxg7diwA06dPZ/PmzezYsYPGxkaOOeYYAD7zmc/whz/8odv+L7jgAgDq6+t54403Co6rUEoKInLYJc6RBdcXqqysjKamJpqamjjppJO48847qa+vZ8aMGWzYsCHrPvGrdcyM5cuX84lPfIKHHnqIN954g6ampoJjcHcefPBBTjjhhIz6Z555JpraSsba3t5O+Ce+cMk+kvv3N60piMhhV13ds/pCvPLKK7z66qtReePGjUyZMoUTTjiB7du3R0mhra2Nl156KWp33333AfDUU08xduxYxo4dy+7du5k4cSIQ1gJ64pxzzuHv/u7vopP9Cy+8kLP97NmzeeKJJ3j//fdpb2/nwQcfjH5WWVnJnj17ejR+XykpiMhh9+1vw+jRmXWjR4f63tq7dy+XXHIJ06dPp7a2lk2bNrFq1SpGjBjBAw88wDe+8Q1mzpxJXV0dTz/9dLTf0Ucfzdy5c7n00ku57bbbALjmmmu47rrrOP300+no6OhRHMuXL6etrY3a2lpOPPFEli9fnrP9xIkT+eY3v8mpp57KmWeeyfTp06MppgsvvJDvf//7nHzyydFCc9EVsvAwkDYtNIsMTD1ZaHYPi8pTpribha99WWTurcbGRn/uuecO/8Axe/bscXf3trY2X7hwof/sZz/rU39aaBaRQefii3u/qDzUrFq1iscee4yDBw9y9tlnc/7555csFiUFEfnQWrduXalDAIiuVBoItKYgIiIRJQUREYkoKYiISERJQUREIkoKIjJklJWVUVdXx4knnshnPvMZ9sfvpRHzne98p6B+a2pq2LFjR8H1ffHGG29w9913R+U77riDyy+/vF/HyEVJQURKI357hx7e7iGbUaNGsXHjRl588UVGjBjBrbfemrN9oUnhcIonhcOtqEnBzM41s1fM7DUzuzbLz0ea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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Plot petal width vs y with blue o's and petal length vs y with red x's\n",
+ "fig = plt.figure('Petal width vs y,Petal length vs y')\n",
+ "\n",
+ "### CODE HERE ###\n",
+ "ax0 = fig.add_subplot(111)\n",
+ "pw=df['petal width (cm)']\n",
+ "pl=df['petal length (cm)']\n",
+ "ax0.scatter(pw, y, c = 'b', marker='o', label='Sepal length')\n",
+ "ax0.scatter(pl,y,c='r',marker='x',label='Petal length')\n",
+ "ax0.set_xlabel('length/width')\n",
+ "ax0.set_ylabel('flower')\n",
+ "ax0.legend()\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 90,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEKCAYAAAARnO4WAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3X2UXFWZ7/Hvkw50eE0kyQo2mRCjdjRgSEgLksxASxAUEQV1AYt7B43XKBlRxjsyV1jcQZ3Mi6ALx7nBFY2KY8ZBgiCXi4owNKCJwQSiQCCNZhKIDU0IJoEAMZ0894+qajqdqjq7us45VafO77NWr6R2nTp71yE8feqpZ+9t7o6IiLS+UY0egIiIpEMBX0QkJxTwRURyQgFfRCQnFPBFRHJCAV9EJCcU8EVEckIBX0QkJxTwRURyYnSjBzDUhAkTfOrUqY0ehohIZqxdu/Z5d58YcmxTBfypU6eyZs2aRg9DRCQzzGxz6LFK6YiI5IQCvohITiQW8M1supmtG/Kz08wuT6o/ERGpLrEcvrtvAGYBmFkb8Afg1lrPs2fPHrZs2cKrr74a8wgl1JgxY5g8eTIHHXRQo4ciInVI60vb+cDv3T34y4WSLVu2cMQRRzB16lTMLIGhSTXuzrZt29iyZQtveMMbGj0cEalDWjn8C4EflHvCzBaa2RozW7N169YDnn/11VcZP368gn2DmBnjx4/XJyyRFpB4wDezg4FzgZvLPe/uS929y927Jk4sX0qqYN9Yuv4iB+pf3s+qqavoGdXDqqmr6F/e3+ghRUojpfMe4CF3b/6rISISoH95PxsWbmDfy/sA2L15NxsWbgBg0sWTGjm0qtJI6VxEhXROVixevJjjjjuOmTNnMmvWLFavXh3r+Xt6ejjnnHOC2+t12223sX79+sHH3d3dmvAmUoONV20cDPYl+17ex8arNjZoRGESvcM3s0OBdwGfSLKfJK1atYo77riDhx56iPb2dp5//nn+9Kc/NXpYdbnttts455xzmDFjRqOHIpJJu5/aXVN7s0j0Dt/dX3b38e6+I8l+hoo7r/bMM88wYcIE2tvbAZgwYQIdHR0ArF27ltNOO405c+Zw1lln8cwzzwCFO+bLL7+cuXPncvzxx/Pggw8C8OCDDzJ37lxmz57N3Llz2bBhQ/A4du3axYIFC3j729/O7Nmz+fGPfwzAd7/7Xc4//3ze/e538+Y3v5krrrhi8DXLli2js7OT7u5uPv7xj/OpT32KlStXcvvtt/O5z32OWbNm8fvf/x6Am2++mZNOOonOzk4eeOCBuq6ZSKtrn9JeU3uzaKmZtqW82u7Nu8Ffy6vVE/TPPPNMnn76aTo7O1m0aBH33XcfUJgfcNlll7FixQrWrl3LggULuOqqqwZft2vXLlauXMmSJUtYsGABAG95y1u4//77efjhh/niF7/IlVdeGTyOxYsXc/rpp/PrX/+ae++9l8997nPs2rULgHXr1nHTTTfxyCOPcNNNN/H000/T19fHl770JX71q1/x85//nCeeeAKAuXPncu6553Lttdeybt063vjGNwIwMDDAgw8+yPXXX88XvvCFEV8vkTyYtngaow7dP3yOOnQU0xZPa9CIwjTV4mn1qpZXG+kXKYcffjhr167lgQce4N577+WCCy7gn/7pn+jq6uLRRx/lXe96FwB79+7l9a9//eDrLrroIgBOPfVUdu7cyfbt23nxxRe55JJLePLJJzEz9uzZEzyOu+66i9tvv53rrrsOKJSrPvXUUwDMnz+fsWPHAjBjxgw2b97M888/z2mnncZRRx0FwIc//GF6e3srnv/8888HYM6cOWzatCl4XCJ5NOniSTzznWfYfs/2wbYjTzmyqb+whRYL+Enl1dra2uju7qa7u5u3ve1t3HjjjcyZM4fjjjuOVatWlX3N8FJGM+Pqq6/mne98J7feeiubNm2iu7s7eAzuzi233ML06dP3a1+9evVguqk01oGBAdw9/A3C4DlKrxeRynoX9e4X7AG237Od3kW9dC7pbNCoorVUSieJvNqGDRt48sknBx+vW7eOY489lunTp7N169bBgL9nzx4ee+yxweNuuukmAH7xi18wduxYxo4dy44dOzjmmGOAQu69FmeddRZf//rXBwP5ww8/XPX4k046ifvuu48//vGPDAwMcMsttww+d8QRR/Diiy/W1L+IvKZvaV9N7c2ipQJ+Enm1l156iUsuuYQZM2Ywc+ZM1q9fzzXXXMPBBx/MihUr+Nu//VtOOOEEZs2axcqVKwdf97rXvY65c+fyyU9+kmXLlgFwxRVX8PnPf5558+axd+/emsZx9dVXs2fPHmbOnMnxxx/P1VdfXfX4Y445hiuvvJKTTz6ZM844gxkzZgymfS688EKuvfZaZs+ePfilrYjUoNL/vrX9b506q/Wjf5K6urp8eD34448/zlvf+tbgc/Qv72fjVRvZ/dRu2qe0M23xtNTzat3d3Vx33XV0dXWl2u9wL730EocffjgDAwOcd955LFiwgPPOO29E56r1v4NIlkXFkZ7RPeWDext0D3SnNUwAzGytuwcFm5bK4UPhy5Rm/+IkLddccw133303r776KmeeeSYf+MAHGj0kkaYXMou2Y2EHfTccmL7pWNiR3kBHoOUCfjPo6elp9BAABit6RCRcSLVf6YvZvqV9hTv9tkKwb+YvbCEjAd/dtYBXAzVT2k8kaaHVfp1LOps+wA/X9F/ajhkzhm3btinoNEhpPfwxY8Y0eigiqcjqLNoQTX+HP3nyZLZs2UK5tfIlHaUdr0TyYNriafvl8CEbs2hDNH3AP+igg7TTkoikppSnT7rarxEVhU0f8EVE0pZ0tV+j1tNv+hy+iEiradR6+gr4IiIpa9R6+gr4IpIpWdxLdrhGVQIp4ItIZiSx50UjNGo9fQV8EcmMrO4lO9ykiycxfel02o9tB4P2Y9uZvnS6qnREREqyupdsOY1Y90t3+CKSGa08CzYNCvgikhlZ3Uu2WSjgi0hTqVaFE5L7TquKJ4vVQsrhi0jTCJmBWi33ndYM1kbNlK2X7vBFpGnUW4WTVhVPVquFEg34ZjbOzFaY2RNm9riZnZJkfyKSbfVW4aRVxZPVaqGk7/C/BvzU3d8CnAA8nnB/Ik0ni7neRqm3CietKp6sVgslFvDN7EjgVGAZgLv/yd23J9WfSDNqlZmhaRl/9via2odLq4onq9VCSd7hTwO2At8xs4fN7FtmdliC/Yk0nazmehtl253bamofLq0ZrI2aKVsvS2rrQDPrAn4FzHP31Wb2NWCnu1897LiFwEKAKVOmzNm8eXMi4xFphJ5RPVDufzGD7n3dKY+mujQ25IjqI0vXq1mY2Vp37wo5Nsk7/C3AFndfXXy8Ajhx+EHuvtTdu9y9a+LEiQkORyR9Wcn1ppF6CukjK9crqxIL+O7+LPC0mU0vNs0H1ifVn0gzykquN43UU0gfWbleWZV0lc5lwHIz+y0wC/iHhPsTaSpx5XrrrfSJen0aZYYhfUy6eBJHX3I0tBUb2uDoS45u+tx4ViQ609bd1wFBuSWRVlXvqoj1zuoMeX37lPZCqmWYOFMpIX30L+/n2Rufhb3Fhr3w7I3PMnbeWAX9GGimrUiTS2P2aRqplJA+VNWULAV8kSaXxuzTNMoMQ/rI6gzWrNDiaSJNrt50S+jro1JPcZRtRvWRRmopz3SHL9Lk6k23HPKmQ2pqLyetGcOq0kmWAr5Ik6s33bK9p/yKJpXay0krt57VGaxZoZSOSBVxpDF6F/XSt7SvUHnSBh0LO+hc0hn8PNRZ6bO3xvYy0sytN2Kv17zQHb5IBXGkMXoX9dJ3Q99+ZYZ9N/TRu6g36PlYVPq/vIb/+zUDtjUo4ItUEEcao29pX9X2qOfjYIdYTe3lKLfeGhTwRSqIJY0RlU4JTLfUM9PWXy6/QOLw9nr3kpXmpxy+SAWxlAi2UT6ol5YOMCquDllS70zb0Bmu9ewlK9mgO3yRCuJIY3Qs7Kja3nZYW9nnh7bXm1rSDFcpUcAXqSCONEbnkk46Lu3YbzGwjktfq8LZu6t8Tmdoe72pJc1wlRKldESqiGP2aeeSzgPKLEtC0i1xpJbimOGaxgYpkizd4YuMUBxlmyHplmZY2Ex787YGBXyREYoj7x2SbmmGhc2U428NSumIjFBcee8dv9zB7i3FO+ctu9nxyx0HBPM0KmSq9aEcf2vQHb7ICMUx+zSVmbYx0Ezb1qCALzJCceTW05hpGwfNtG0NCvgiIxRLbj2FmbZxvF4zbVuDcvgidag7tx41E5d09rQNoZm22ac7fJEGipqJC+nsaSv5oDt8kQYqTciqth5+GnvaSj4o4EtmrTtjHdvveW3XpnHzxzHr7lmDj0NmhqYxezSqj2ozcSG9PW2jaKZt9imlI5k0PNgDbL9nO+vOWAeEzQxNY/ZoHH2MP3t8Te3DxVFho5m2rSHRgG9mm8zsETNbZ2ZrkuxL8mV4sB/eHpK3TiO3HUcf2+7cVlP7cHFU2Oh7gNaQRkrnne7+fAr9SAupN30QkrdOI7cdRx/NkINvhjFI/ZTSkaYTR/ogZGZo21EV1qKv0D4ScfRR7yzXtK6nNL+kA74Dd5nZWjNbmHBf0iJC0gfj5o8r+9pSe0je2qiw12uF9pGIo496c/BxpGM007Y1JB3w57n7icB7gL8ys1OHH2BmC81sjZmt2bp1a8LDkWZRbeZnSPpg1t2zDgj6Q6t0QvLWAy8MlO1naHu9M1RD+ohSbw4+jnTMpIsncfQlR++3kcvRlxytKp2MSTSH7+59xT+fM7NbgZOA+4cdsxRYCtDV1VV+t2VpKVEzP0PLCIeWYJZT76YfccxQbTusjb0vHTiVttLWhpXUM8s1jrLM/uX9PHvjs/st8vbsjc8ydt5YBf0MSewO38wOM7MjSn8HzgQeTao/yY6oFENa6YOofuJIhYRsYZi0OK6nqnRaQ5J3+JOAW82s1M+/u/tPE+xPMiIqxTB0040kJ/lE9RNLZUqlz6wpfpaN43qqSqc1JBbw3X0jcEJS55fsCkkxxLFQV72lnbHs8xqwOFoaQq5ntfcS12xdaSyVZUrq0kjZxDHTNo59XkMWR2sG9V4LyQYFfEldGmurxzHTNo59XjuXdNJxacd+1S0dl3ZUXTunEeq9FpINkSkdM2sHPghMHXq8u38xuWFJq0t6bfW4ZtpW2282NK89dt5Ytt25rZAqmdzO2Hlja3ovcYhKPYW8l3rTQtJ4IXf4PwbeDwwAu4b8iDStkJmhUcdE7Tcb0kczLDoWMoY4ZtI2w3uV6kIC/mR3v8Ddv+zuXyn9JD4ykTqE5Jyjjonabzakj2YoZwwZg0o38yEk4K80s7clPhKRGIXknCOPidhvNqSPuMoZo2b81jtzOY4cvUo3m1/FHL6ZPUKhWng08FEz2wjsBgxwd5+ZzhBFRiYk51z1GKN8vfyQZXDqnc0bImrGb1wzl+v9XkWlm82v2h3+OcD7KKyD8yYKM2XfN6RdpKVVWv6glmUR0kiVZGXmsjRexYDv7pvdfTPw96W/D21Lb4gijRHHsghppEpCZi6nUVKp0s3mFzLT9rihD8ysDZiTzHDyLSslbXGMM+ocaV2L3kW9FTcQj2WmLdGpkqhzRI0jrZnLIdLqR0am4h2+mX3ezF4EZprZzuLPi8BzFEo1JUZZKWmLY5xR50jrWkSVXcYx0zZKyDmixqFUioSqltL5R3c/ArjW3Y8s/hzh7uPd/fMpjjEXslLSFsc4681JxyWq7DKOmbZRQs4RNQ6lUiRUSErnZjM7cVjbDmCzu4fv4iBVZaWkLWSc9c7qTO1aRJRdQvUUReg4q12P0HPUmyrJSrpQkhVSh78E+BWFTUq+Wfz7fwC9ZnZmgmPLlazsGRo1zjhmdaZ2LSoV2wQW4cQx0zaNGa5ZSRdK8kIC/iZgtrt3ufscYBaFjUzOAL6c4NhyJSt52Dg2DWmWnHS9K1nGMdO2Gco2JT9CAv5b3P2x0gN3X0/hF4D+tcQoK3nYqHHGMaszrWtR70qWIfu8hpRM1rtXbNOkyKTpheTwN5jZDRTSOAAXUEjntAN7EhtZDmWlpK3aOOOa1ZnWtehc0jnipYpD9nkN2Te33r1i4yjblHwIucP/CPA74HLgr4GNxbY9wDuTGphkU1ZSU3GII30VR7qlWVJk0vwi7/Dd/RXgK8Wf4V6KfUSSaWntR9sMQtNXkOy+uVF95Om/iVRn7tV3UzazecA1wLHsvwFK7LcHXV1dvmbNmrhPK00oqkyw2gzYuPqo16qpq8qnSo5t55RNp6R2Dsk3M1vr7l0hx4akdJYBXwX+HHj7kB+REYkqE4yaARtHH3GII1WidIukKSTg73D3n7j7c+6+rfST+MikZUXlraNmwMbRRxziqCbKSnWWtIaQKp17zexa4EcU1sMHwN0fSmxU0tIi89YBM2Ahnhms9Yqjmigr1VmSfSEB/+Tin0NzRA6cHv9wJA9GHzWagW0Hrsox+qjiP8eAjUfi2vRDJE9CqnRUeimx8rLR/LX2tsPa2PvSgbf5QzceqZaymXTxJKYtnrbfLwRQblwkModvZpPMbJmZ/aT4eIaZfSy0AzNrM7OHzeyOegYq2dG7qJee0T30WA89o3sO+LJ17wsVNhYptodsPBLXph/17BUrkjUhKZ3vAt8Brio+7gVuolC9E+IzwOPAkbUOTrJnsMKmpFhhAwRvLBKSjmk7qo2928p8CjjqtU8BIRuP1LNXrEjWhFTpTHD3HwL7AIpLIgft8WZmk4H3At8a8QglU0IqbOKYGWpDE/pDVGovR4uOSd6EBPxdZjae4tdoZvYOCuvhh7geuILiL4tyzGyhma0xszVbt24NPK00rcA15utdPG3ghfJbMVRqL0eLjknehKR0PgvcDrzRzH4JTAQ+FPUiMzsHeM7d15pZd6Xj3H0phbX26erqqj7tV+qW+EYYbZQP+oFrzJdEpWPiqMLRomOSN5F3+MV6+9OAucAngOPc/bcB554HnGtmmyistHm6mX2/jrFKndKYfRqyxnwc4xh/9via2svRomOSNxXX0jGz86u90N1/FNxJ4Q7/b9z9nGrHaS2dZKW1bkvUOjjNtAZN1CcebQ0oza6WtXSqpXTeV+U5pzDzVjIkrZz02Hlj2XbntkKQnNzO2HljYx9HXO+lWdblF0lDxYDv7h+NqxN37wF64jqfjEwaOemQUsY08u8icqCQKh1pEWnkpOPYFCSE8usitVPAz5E0VmaMY0/bEFplUqR2kRugpElf2mbfAxMeKD8Ddnwbf/H8XzRgRCKtLZYvbeOs0pH8iGMGrIgkQ1U6Eqs4ZsCKSDJSqdKR/AitnlF9u0j6QpZWwMzeCxwHjCm1ufsXkxqUZFfIOvRahVKkMULWw/8GcAFwGYU9hz4MHJvwuCSjQqpntAqlSGOE3OHPdfeZZvZbd/+CmX0F5e8bIitpkKjZqSGlm1l5ryJZEhLwXyn++bKZdQDbgDckNyQpp5XSIFF5/lZ6ryLNJGTi1R1mNg64FngI2ERh9UtJUSulQaJmybbSexVpJiF3+F92993ALcV9accAryY7LBmulTbjKN2lV0rZtNJ7FWkmIQF/FXAiQDHw7zazh0ptko5WWyysWp6/1d6rSLOomNIxs6PNbA5wiJnNNrMTiz/dwKGpjVCAfC0Wlqf3KpKmanf4ZwEfASYDXx3SvhO4MsExSRlRaZBWkqf3KpKmajNtbwRuNLMPuvstKY4pt1SK+BptPCISv5AqnV+a2TIz+wmAmc0ws48lPK7cidrnNY39aEWktYUE/O8APwNKu1D3ApcnNqKciipFVKmiiNQrJOBPcPcfAvsA3H2AwvbUEqOoUkSVKopIvUIC/i4zG09hSWTM7B3AjkRHlUOVSg5L7VHPi4hECQn4nwVuB95oZr8EvkdhITWJUVQpokoVRaRekROv3P0hMzsNmE5htcwN7r4n8ZHlTFQpokoVRaRekXvamtkYYBHw5xTSOg8A33D32JdX0J62IiK1iWVP2yG+B7wIfL34+CLg3yisiy8iIhkREvCnu/sJQx7fa2a/iXpR8ZPB/UB7sZ8V7v53IxumiIjUK+RL24eLlTkAmNnJwC8DXrcbOL34y2IW8O6h55Fk9C/vZ9XUVfSM6mHV1FWamCUig0Lu8E8G/tLMnio+ngI8bmaPAO7uM8u9yAtfDrxUfHhQ8af6FwZSF20cIiLVhAT8d4/05GbWBqwF3gT8H3dfPdJzSbRqs3EV8EUkpCxz80hP7u57gVnFHbNuNbPj3f3RoceY2UJgIcCUKVNG2pWg2bgiUl1IDr9u7r4d6KHMpwV3X+ruXe7eNXHixDSG07I0G1dEqkks4JvZxOKdPWZ2CHAG8ERS/Ylm44pIdSE5/JF6PYX19Nso/GL5obvfkWB/uafZuCJSTWIB391/C8xO6vxSnjYOEZFKUsnhi4hI4yngi4jkhAK+iEhOKOCLiOSEAr6ISE4o4IuI5IQCvohITijgi4jkhAK+iEhOKOCLiOSEAr6ISE4o4IuI5IQCvohITijgi4jkhAK+iEhOKOCLiOSEAr6ISE4o4IuI5IQCvohITijgi4jkhAK+iEhOKOCLiOSEAr6ISE4o4IuI5ERiAd/M/szM7jWzx83sMTP7TFJ9iYhItNEJnnsA+J/u/pCZHQGsNbOfu/v6BPsUEZEKErvDd/dn3P2h4t9fBB4HjkmqPxERqS6VHL6ZTQVmA6vT6E9ERA6UeMA3s8OBW4DL3X1nmecXmtkaM1uzdevWpIfTUP3L+1k1dRU9o3pYNXUV/cv7M9mHiGRTogHfzA6iEOyXu/uPyh3j7kvdvcvduyZOnJjkcBqqf3k/GxZuYPfm3eCwe/NuNizcEGtATqMPEcmuJKt0DFgGPO7uX02qn6zYeNVG9r28b7+2fS/vY+NVGzPVh4hkV5J3+POA/w6cbmbrij9nJ9hfU9v91O6a2pu1DxHJrsTKMt39F4Aldf6saZ/SXki1lGnPUh8ikl2aaZuSaYunMerQ/S/3qENHMW3xtEz1ISLZpYCfkkkXT2L60um0H9sOBu3HtjN96XQmXTwpU32ISHYlOdNWhpl08aSWCL69i3rpW9oHe4E26FjYQeeSzlj76F/ez8arNrL7qd20T2ln2uJpLXHtRBpJAb+FlMoyS5U6pbJMILZg2buol74b+l5r2Mvg47iCfhrvQySPlNJpIWmUZfYt7aupfSRUXiqSDN3hxyQkBVFvKmTdGevYfs/2wcfj5o9j1t2zBh+nUpa5t8b2EVB5qUgydIcfg5AZroOpkFJgLKZCehf1BvUxPNgDbL9nO+vOWDf4uO2otrKvrdQ+IpVOFWMXlcpIVV4qUh8F/BiEpCDqTYUMD/bl2q3CtIdK7SPRsbCjpvaRUHmpSDIU8GMQlIJIIRUy8MJATe0j0bmkk45LO167o2+DjkvjrdJRealIMpTDD1QtRx80w7WN8sF9SCokKkcfJWQcId8jqCRSpDXpDj9AVI4+JAURlQqJytEfMuOQsq8f2j7qsPL/OUvtId8jRL3Xer+LCKFVP0WSoYAfICpHH5KCiEqFROXo9+3aV/b5oe2vrH+l7DGl9pDvEaLeq8oyRbIrFymdelMUITn6pGfRxlKqGPA9QmQ/AedI43qLSO1a/g4/jvSAHVqh+qVCezn1pkLiGEPF/9pD2iNLIiPKMuO43irLFElGywf8ONID/orX1F5OZCrk4AovPDi+MdghFX5pDGmP+j4i6ruIOK63yjJFktHyAT8kPRC5D2z59Pl+7ZHniEqF7KnwfKk9YAxR/OUKvzSGtEd9H9G5pJNx88ft9/px88cNfhcRRzpGZZkiyWj5HL4daviuAwNdKRUStFBXREllHOeILKkcRfngPvRXdr19FFX7PqJ/eT87V+2/F/3OVTvpX97PpIsn0XZUG3u3HTiIWmf7tsrKoiLNpOXv8KNSISEpiDjSGFHniEpjhKRj6u0jRNR7TWO2r4iMTMsH/KhUSEgKIqqkMo5zRKUxQtIx9fYRIuq9pjHbV0RGpuVTOnGlOTqXdFZcPiCOc0D1NEYafYSIGkea++pqRrBIbVr+Dj+NNEcaVSXjzx5fU3tSot5rWhU2mo0rUruWD/hppDnSqCrZdue2mtqTEvVe06qw0WxckdqZe3gdd9K6urp8zZo1Nb8uDx/te0b1QLn/VAbd+7pTHk3j6XqIFJjZWnfvCjk283f4eflor9mn+9P1EKld5gN+Xj7aa/bp/nQ9RGqXWMA3s2+b2XNm9mhSfUB6C21FzqRNmGaf7k/XQ6R2SZZlfhf4V+B7CfaRShlg0EzaFGj26f50PURqk9gdvrvfD7yQ1PlL0vhon5e0kYi0tobn8M1soZmtMbM1W7durfn1aXy01/rsItIKGj7T1t2XAkuhUJY5knMk/dE+zdmjIiJJafgdfhaoIkREWoECfgBVhIhIK0gspWNmPwC6gQlmtgX4O3dfllR/SVNFiIhkXWIB390vSurcIiJSO6V0RERyQgFfRCQnFPBFRHJCAV9EJCcU8EVEcqKpNkAxs63A5gYOYQLwfAP7D6Vxxi8rY9U449UK4zzW3SeGnKSpAn6jmdma0J1jGknjjF9Wxqpxxitv41RKR0QkJxTwRURyQgF/f0sbPYBAGmf8sjJWjTNeuRqncvgiIjmhO3wRkZzIbcA3szYze9jM7ijz3EfMbKuZrSv+/I8GjXGTmT1SHMOaMs+bmf2Lmf3OzH5rZic26Ti7zWzHkOv5vxs0znFmtsLMnjCzx83slGHPN8v1jBpns1zP6UPGsM7MdprZ5cOOafg1DRxns1zTvzazx8zsUTP7gZmNGfZ8u5ndVLyeq81sai3nb/iOVw30GeBx4MgKz9/k7p9KcTyVvNPdK9Xfvgd4c/HnZOCG4p+NUG2cAA+4+zmpjaa8rwE/dfcPmdnBwKHDnm+W6xk1TmiC6+nuG4BZULiBAv4A3DrssIZf08BxQoOvqZkdA3wamOHur5jZD4ELge8OOexjwB/d/U1mdiHwz8AFoX3k8g7fzCYD7wW+1eix1On9wPe84FfAODN7faMH1YzM7EjgVGAZgLv/yd23DzuGX/PNAAAFzklEQVSs4dczcJzNaD7we3cfPnGy4dd0mErjbBajgUPMbDSFX/R9w55/P3Bj8e8rgPlmZqEnz2XAB64HrgD2VTnmg8WPoCvM7M9SGtdwDtxlZmvNbGGZ548Bnh7yeEuxLW1R4wQ4xcx+Y2Y/MbPj0hxc0TRgK/CdYirvW2Z22LBjmuF6howTGn89h7sQ+EGZ9ma4pkNVGic0+Jq6+x+A64CngGeAHe5+17DDBq+nuw8AO4DxoX3kLuCb2TnAc+6+tsph/xeY6u4zgbt57Tdq2ua5+4kUPhb/lZmdOuz5cr/ZG1F2FTXOhyhM/z4B+DpwW9oDpHDndCJwg7vPBnYB/2vYMc1wPUPG2QzXc1Ax7XQucHO5p8u0NaQ0MGKcDb+mZvY6CnfwbwA6gMPM7L8NP6zMS4OvZ+4CPjAPONfMNgH/AZxuZt8feoC7b3P33cWH3wTmpDvEwXH0Ff98jkLO8aRhh2wBhn76mMyBHwETFzVOd9/p7i8V/34ncJCZTUh5mFuALe6+uvh4BYXAOvyYRl/PyHE2yfUc6j3AQ+7eX+a5ZrimJRXH2STX9Azgv9x9q7vvAX4EzB12zOD1LKZ9xgIvhHaQu4Dv7p9398nuPpXCx7v/dPf9fosOyzGeS+HL3VSZ2WFmdkTp78CZwKPDDrsd+MtiJcQ7KHwEfKbZxmlmR5fyjGZ2EoV/d9vSHKe7Pws8bWbTi03zgfXDDmv49QwZZzNcz2EuonKapOHXdIiK42ySa/oU8A4zO7Q4lvkcGHtuBy4p/v1DFOJX8B1+nqt09mNmXwTWuPvtwKfN7FxggMJvz480YEiTgFuL/wZHA//u7j81s08CuPs3gDuBs4HfAS8DH23ScX4IuNTMBoBXgAtr+Ucao8uA5cWP9huBjzbh9QwZZ7NcT8zsUOBdwCeGtDXdNQ0YZ8OvqbuvNrMVFNJLA8DDwNJhsWkZ8G9m9jsKsenCWvrQTFsRkZzIXUpHRCSvFPBFRHJCAV9EJCcU8EVEckIBX0QkJxTwRYqKKyaWWz21bHsM/X3AzGYMedxjZk2/v6pklwK+SON8AJgReZRITBTwJTOKs3r/X3GBq0fN7IJi+xwzu6+4eNvPSjOli3fM15vZyuLxJxXbTyq2PVz8c3q1fsuM4dtm9uvi699fbP+Imf3IzH5qZk+a2ZeHvOZjZtZbHM83zexfzWwuhVnc11ph/fU3Fg//sJk9WDz+L2K6dCKAZtpKtrwb6HP39wKY2VgzO4jCYlfvd/etxV8Ci4EFxdcc5u5ziwu6fRs4HngCONXdB8zsDOAfgA8GjuEqCtPZF5jZOOBBM7u7+NwsYDawG9hgZl8H9gJXU1gP50XgP4HfuPtKM7sduMPdVxTfD8Bodz/JzM4G/o7C+ioisVDAlyx5BLjOzP6ZQqB8wMyOpxDEf14MmG0UlpYt+QGAu99vZkcWg/QRwI1m9mYKKw0eVMMYzqSw+N7fFB+PAaYU/36Pu+8AMLP1wLHABOA+d3+h2H4z0Fnl/D8q/rkWmFrDuEQiKeBLZrh7r5nNobA2yz+a2V0UVud8zN1PqfSyMo+/BNzr7udZYYu4nhqGYcAHi7sovdZodjKFO/uSvRT+/wrenKKodI7S60Vioxy+ZIaZdQAvu/v3KWwUcSKwAZhoxX1fzewg23/zilKe/88prNS4g8KSsn8oPv+RGofxM+CyISsrzo44/kHgNDN7nRWWsx2aOnqRwqcNkVToDkKy5G0UvuTcB+wBLnX3P5nZh4B/MbOxFP5NXw88VnzNH81sJYW9i0t5/S9TSOl8lkJOvRZfKp7/t8WgvwmouA+qu//BzP4BWE1hHfj1FHYpgsJ+DN80s09TWK1RJFFaLVNalpn1AH/j7msaPI7D3f2l4h3+rcC33b3cJtoiiVJKRyR515jZOgobw/wXDd6SUPJLd/giIjmhO3wRkZxQwBcRyQkFfBGRnFDAFxHJCQV8EZGcUMAXEcmJ/w8DsaCILhypnwAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Plot sepal length vs petal length for each instance\n",
+ "fig = plt.figure('Sepal length vs petal length')\n",
+ "\n",
+ "### CODE HERE ###\n",
+ "ax0=fig.add_subplot(111)\n",
+ "\n",
+ "ax0.scatter(sl,pl,c='m',marker='o',label='Sepal length')\n",
+ "ax0.set_xlabel(\"sepal length\")\n",
+ "ax0.set_ylabel(\"petal length\")\n",
+ "ax0.legend()\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 91,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Plot sepal length as a line graph for each instance\n",
+ "# Hint: use numpy.arange() for x axis\n",
+ "\n",
+ "fig = plt.figure('Sepal length')\n",
+ "\n",
+ "### CODE HERE ###\n",
+ "import numpy as np\n",
+ "ax0=fig.add_subplot(111)\n",
+ "ax0.set_ylabel(\"sepal length\")\n",
+ "ax0.set_xlabel(\"instance\")\n",
+ "ax0.plot(sl,color='magenta')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Using Scikit-Learn**\n",
+ "\n",
+ "Scikit-Learn offers a variety of classifiers for learning the data and creating a model for it. This task is a classification task and hence a regression method such as Linear Regression cannot be used for it. We'll use Logistic Regression to create a classifier for this data. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Before using a model on the data, we will need some data to test the model on. For this, we'll keep some data aside called the 'test set'.\n",
+ "\n",
+ "Also, we can have some problems in learning the data if the data is not randomly shuffled and chosen first. (More on this later)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 92,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Join target variable to dataframe\n",
+ "### CODE HERE ###\n",
+ "from sklearn.datasets import load_iris\n",
+ "import pandas as pd\n",
+ "data = load_iris()\n",
+ "X = data['data']\n",
+ "header=data['feature_names']\n",
+ "df=pd.DataFrame(X,columns=header)\n",
+ "header=data['target']\n",
+ "df2=pd.DataFrame(header,columns=['target'])\n",
+ "df['target']=df2\n",
+ "# Randomly shuffle dataframe\n",
+ "### CODE HERE ###"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 93,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
+ " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
+ " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
+ " verbose=0, warm_start=False)"
+ ]
+ },
+ "execution_count": 93,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.linear_model import LogisticRegression\n",
+ "from sklearn.model_selection import train_test_split\n",
+ "\n",
+ "# We divide df into training and testing sets such that the training set is 80% of df and test set is 20%\n",
+ "train, test = train_test_split(df, test_size=0.2)\n",
+ "\n",
+ "y_train = train['target']\n",
+ "y_test = test['target']\n",
+ "X_train = train[['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']]\n",
+ "X_test = test[['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']]\n",
+ "\n",
+ "# Create a classifier\n",
+ "clf = LogisticRegression()\n",
+ "# Train it on the training set\n",
+ "clf.fit(X_train, y_train)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 94,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([0, 1, 0, 2, 0, 2, 1, 2, 1, 2, 2, 0, 1, 0, 1, 1, 1, 1, 1, 2, 0, 1,\n",
+ " 0, 0, 1, 2, 0, 2, 0, 0])"
+ ]
+ },
+ "execution_count": 94,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Calculate the predictions on the test set\n",
+ "pred = clf.predict(X_test)\n",
+ "\n",
+ "pred"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 95,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1.0"
+ ]
+ },
+ "execution_count": 95,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "from sklearn.metrics import accuracy_score\n",
+ "\n",
+ "# Find the accuracy on the test set\n",
+ "accuracy_score(pred, y_test)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Since the accuracy is high, we can assume this is a good model we have created. However, there are a lot of factors that decide how relevant the accuracy is to the actual performance of the model. (Again, more on this later!)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Saving data and model**\n",
+ "\n",
+ "To save the data, we'll use the csv format, which is quite popular with data scientists since it is easy to read from and write to. \n",
+ "\n",
+ "To store the model, we'll use the pickle module in python to save it to disk.\n",
+ "\n",
+ "Both of these shall be in the same directory as this."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 96,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "dataframe.csv new_Assignment.ipynb Rohan Prabhu_model\r\n",
+ "model Rohan Prabhu_dataframe.csv Sahil_Jain.ipynb\r\n",
+ "model.pkl Rohan Prabhu K.ipynb\r\n"
+ ]
+ }
+ ],
+ "source": [
+ "ls"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 97,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pickle\n",
+ "\n",
+ "# Save dataframe to csv\n",
+ "### CODE HERE ###\n",
+ "df.to_csv('Omkar_Rajebhosale_dataframe.csv')\n",
+ "# Save model to model.pkl\n",
+ "### CODE HERE ###\n",
+ "pickle_out = open(\"Omkar_Rajebhosale_model\",\"wb\")\n",
+ "pickle.dump(clf, pickle_out)\n",
+ "pickle_out.close()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It is recommended you practice these functions to get a good idea of how to create a model for a dataset in Python. Hope you enjoyed it!"
+ ]
+ }
+ ],
+ "metadata": {
+ "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.6.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/python-assn/assn-03/Omkar_Rajebhosale_dataframe.csv b/python-assn/assn-03/Omkar_Rajebhosale_dataframe.csv
new file mode 100644
index 0000000..819dfde
--- /dev/null
+++ b/python-assn/assn-03/Omkar_Rajebhosale_dataframe.csv
@@ -0,0 +1,151 @@
+,sepal length (cm),sepal width (cm),petal length (cm),petal width (cm),target
+0,5.1,3.5,1.4,0.2,0
+1,4.9,3.0,1.4,0.2,0
+2,4.7,3.2,1.3,0.2,0
+3,4.6,3.1,1.5,0.2,0
+4,5.0,3.6,1.4,0.2,0
+5,5.4,3.9,1.7,0.4,0
+6,4.6,3.4,1.4,0.3,0
+7,5.0,3.4,1.5,0.2,0
+8,4.4,2.9,1.4,0.2,0
+9,4.9,3.1,1.5,0.1,0
+10,5.4,3.7,1.5,0.2,0
+11,4.8,3.4,1.6,0.2,0
+12,4.8,3.0,1.4,0.1,0
+13,4.3,3.0,1.1,0.1,0
+14,5.8,4.0,1.2,0.2,0
+15,5.7,4.4,1.5,0.4,0
+16,5.4,3.9,1.3,0.4,0
+17,5.1,3.5,1.4,0.3,0
+18,5.7,3.8,1.7,0.3,0
+19,5.1,3.8,1.5,0.3,0
+20,5.4,3.4,1.7,0.2,0
+21,5.1,3.7,1.5,0.4,0
+22,4.6,3.6,1.0,0.2,0
+23,5.1,3.3,1.7,0.5,0
+24,4.8,3.4,1.9,0.2,0
+25,5.0,3.0,1.6,0.2,0
+26,5.0,3.4,1.6,0.4,0
+27,5.2,3.5,1.5,0.2,0
+28,5.2,3.4,1.4,0.2,0
+29,4.7,3.2,1.6,0.2,0
+30,4.8,3.1,1.6,0.2,0
+31,5.4,3.4,1.5,0.4,0
+32,5.2,4.1,1.5,0.1,0
+33,5.5,4.2,1.4,0.2,0
+34,4.9,3.1,1.5,0.1,0
+35,5.0,3.2,1.2,0.2,0
+36,5.5,3.5,1.3,0.2,0
+37,4.9,3.1,1.5,0.1,0
+38,4.4,3.0,1.3,0.2,0
+39,5.1,3.4,1.5,0.2,0
+40,5.0,3.5,1.3,0.3,0
+41,4.5,2.3,1.3,0.3,0
+42,4.4,3.2,1.3,0.2,0
+43,5.0,3.5,1.6,0.6,0
+44,5.1,3.8,1.9,0.4,0
+45,4.8,3.0,1.4,0.3,0
+46,5.1,3.8,1.6,0.2,0
+47,4.6,3.2,1.4,0.2,0
+48,5.3,3.7,1.5,0.2,0
+49,5.0,3.3,1.4,0.2,0
+50,7.0,3.2,4.7,1.4,1
+51,6.4,3.2,4.5,1.5,1
+52,6.9,3.1,4.9,1.5,1
+53,5.5,2.3,4.0,1.3,1
+54,6.5,2.8,4.6,1.5,1
+55,5.7,2.8,4.5,1.3,1
+56,6.3,3.3,4.7,1.6,1
+57,4.9,2.4,3.3,1.0,1
+58,6.6,2.9,4.6,1.3,1
+59,5.2,2.7,3.9,1.4,1
+60,5.0,2.0,3.5,1.0,1
+61,5.9,3.0,4.2,1.5,1
+62,6.0,2.2,4.0,1.0,1
+63,6.1,2.9,4.7,1.4,1
+64,5.6,2.9,3.6,1.3,1
+65,6.7,3.1,4.4,1.4,1
+66,5.6,3.0,4.5,1.5,1
+67,5.8,2.7,4.1,1.0,1
+68,6.2,2.2,4.5,1.5,1
+69,5.6,2.5,3.9,1.1,1
+70,5.9,3.2,4.8,1.8,1
+71,6.1,2.8,4.0,1.3,1
+72,6.3,2.5,4.9,1.5,1
+73,6.1,2.8,4.7,1.2,1
+74,6.4,2.9,4.3,1.3,1
+75,6.6,3.0,4.4,1.4,1
+76,6.8,2.8,4.8,1.4,1
+77,6.7,3.0,5.0,1.7,1
+78,6.0,2.9,4.5,1.5,1
+79,5.7,2.6,3.5,1.0,1
+80,5.5,2.4,3.8,1.1,1
+81,5.5,2.4,3.7,1.0,1
+82,5.8,2.7,3.9,1.2,1
+83,6.0,2.7,5.1,1.6,1
+84,5.4,3.0,4.5,1.5,1
+85,6.0,3.4,4.5,1.6,1
+86,6.7,3.1,4.7,1.5,1
+87,6.3,2.3,4.4,1.3,1
+88,5.6,3.0,4.1,1.3,1
+89,5.5,2.5,4.0,1.3,1
+90,5.5,2.6,4.4,1.2,1
+91,6.1,3.0,4.6,1.4,1
+92,5.8,2.6,4.0,1.2,1
+93,5.0,2.3,3.3,1.0,1
+94,5.6,2.7,4.2,1.3,1
+95,5.7,3.0,4.2,1.2,1
+96,5.7,2.9,4.2,1.3,1
+97,6.2,2.9,4.3,1.3,1
+98,5.1,2.5,3.0,1.1,1
+99,5.7,2.8,4.1,1.3,1
+100,6.3,3.3,6.0,2.5,2
+101,5.8,2.7,5.1,1.9,2
+102,7.1,3.0,5.9,2.1,2
+103,6.3,2.9,5.6,1.8,2
+104,6.5,3.0,5.8,2.2,2
+105,7.6,3.0,6.6,2.1,2
+106,4.9,2.5,4.5,1.7,2
+107,7.3,2.9,6.3,1.8,2
+108,6.7,2.5,5.8,1.8,2
+109,7.2,3.6,6.1,2.5,2
+110,6.5,3.2,5.1,2.0,2
+111,6.4,2.7,5.3,1.9,2
+112,6.8,3.0,5.5,2.1,2
+113,5.7,2.5,5.0,2.0,2
+114,5.8,2.8,5.1,2.4,2
+115,6.4,3.2,5.3,2.3,2
+116,6.5,3.0,5.5,1.8,2
+117,7.7,3.8,6.7,2.2,2
+118,7.7,2.6,6.9,2.3,2
+119,6.0,2.2,5.0,1.5,2
+120,6.9,3.2,5.7,2.3,2
+121,5.6,2.8,4.9,2.0,2
+122,7.7,2.8,6.7,2.0,2
+123,6.3,2.7,4.9,1.8,2
+124,6.7,3.3,5.7,2.1,2
+125,7.2,3.2,6.0,1.8,2
+126,6.2,2.8,4.8,1.8,2
+127,6.1,3.0,4.9,1.8,2
+128,6.4,2.8,5.6,2.1,2
+129,7.2,3.0,5.8,1.6,2
+130,7.4,2.8,6.1,1.9,2
+131,7.9,3.8,6.4,2.0,2
+132,6.4,2.8,5.6,2.2,2
+133,6.3,2.8,5.1,1.5,2
+134,6.1,2.6,5.6,1.4,2
+135,7.7,3.0,6.1,2.3,2
+136,6.3,3.4,5.6,2.4,2
+137,6.4,3.1,5.5,1.8,2
+138,6.0,3.0,4.8,1.8,2
+139,6.9,3.1,5.4,2.1,2
+140,6.7,3.1,5.6,2.4,2
+141,6.9,3.1,5.1,2.3,2
+142,5.8,2.7,5.1,1.9,2
+143,6.8,3.2,5.9,2.3,2
+144,6.7,3.3,5.7,2.5,2
+145,6.7,3.0,5.2,2.3,2
+146,6.3,2.5,5.0,1.9,2
+147,6.5,3.0,5.2,2.0,2
+148,6.2,3.4,5.4,2.3,2
+149,5.9,3.0,5.1,1.8,2
diff --git a/python-assn/assn-03/Omkar_Rajebhosale_model b/python-assn/assn-03/Omkar_Rajebhosale_model
new file mode 100644
index 0000000000000000000000000000000000000000..ee1c38e10cac79a21197da53e480c43f5f4ec0c5
GIT binary patch
literal 936
zcmZuwOHb5L6z)6_C=WqJ0r80n2vmkQ3U+j2FxJeX#@LN1ZRawrblN%X9dJxce1HQQ
zV_cB<3yj7Mi80Z{I4*TzOkm-{l_n&L8zg2hF$8b#47$*>xIOpu)^Wz{${C|VVESc6ceW*AoTP%8MOa`Hzr71xy~kP+80uu&Rw6f0&YWEU$KL0MGVMDkqQ97hh6
zOQqyu8fv~vsE|s?J)vBd4MGW(LQE?20x1(4GR20?v~+vifhyW3fl+N2LAAh0EXkcv
z9LnWj*fK-8EcueHy0Dd$=%G^>s`n0D04Rn
zjNZ7JaV<7hIR~`N{91zap1^C2OVAqArU$YI(F%;M2Xy!`Cqx7cl_7&
z@a&_e@BGWVlTX(&D_Q8q(4*4HTXace=-oi-^N{*Q81RsMQ*gAPgwYMh@=6SfF!X;V
ojuZKV-n#)FLs*rnh$|P~piFkmdtz{c?o$UB8sI{3GNp3A0S>4(9RL6T
literal 0
HcmV?d00001