diff --git a/python-assn/assn-01/Suryateja_R_Assn1.ipynb b/python-assn/assn-01/Suryateja_R_Assn1.ipynb new file mode 100644 index 0000000..c792e78 --- /dev/null +++ b/python-assn/assn-01/Suryateja_R_Assn1.ipynb @@ -0,0 +1,548 @@ +{ + "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": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def least_int(num):\n", + " list1=[]\n", + " string=str(num)\n", + " for i in string:\n", + " list1.append(int(i))\n", + " #print(list1)\n", + " for j in range(0,len(list1)):\n", + " for i in range(0,len(list1)-1):\n", + " if int(list1[i])>int(list1[i+1]):\n", + " temp=int(list1[i])\n", + " list1[i]=int(list1[i+1])\n", + " list1[i+1]=int(temp)\n", + " \n", + " for j in range(0,len(list1)):\n", + " print(list1[j],end='')\n", + " print('')\n", + " pass" + ] + }, + { + "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": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def function_a(string1):\n", + " string2=\" \"+string1+\" \"\n", + " prt=[]\n", + " for i in range(0,len(string2)-1):\n", + " if string2[i]==' 'and string2[i+1]=='a':\n", + " for j in range(i+1,len(string2)):\n", + " if string2[j]==' ':\n", + " prt.append(string2[j-1])\n", + " break\n", + " for i in range(0,len(prt)):\n", + " print(prt[i],end='')\n", + " print(\"\")\n", + " \n", + " \n", + " pass" + ] + }, + { + "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": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def remove_dup(mystring):\n", + " string=' '+mystring+' '\n", + " lists=[]\n", + " for i in range(0,len(string)):\n", + " if string[i]==' ':\n", + " for j in range(i+1,len(string)):\n", + " if string[j]==' ':\n", + " word=string[i+1:j+1]\n", + " if word not in lists:\n", + " lists.append(word)\n", + " \n", + " break\n", + " for k in lists:\n", + " print(k,end='')\n", + " print('')\n", + " pass" + ] + }, + { + "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": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "mystring is palindrome\n" + ] + } + ], + "source": [ + "mystring = 'SatanoscillatemymetallicsonataS' #give any random string\n", + "print(\"mystring is palindrome\" if mystring==mystring[::-1] else \"mystring is not palindrome\" )" + ] + }, + { + "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": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def list_of_avgs(a):\n", + " b=[]\n", + " for i in range(0,len(a)):\n", + " b.append(0)\n", + " for i in range(0,len(a)):\n", + " for j in range(0,i+1):\n", + " b[i]+=a[j]\n", + " b[i]=b[i]/(i+1)\n", + " print(b)\n", + " pass" + ] + }, + { + "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": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def asc_desc_list(a):\n", + " for i in range(0,len(a),2):\n", + " for j in range(0,len(a)-2,2):\n", + " if a[j]>a[j+2]:\n", + " temp = a[j]\n", + " a[j]=a[j+2]\n", + " a[j+2]=temp \n", + " for i in range(0,len(a),2):\n", + " for j in range(1,len(a)-2,2):\n", + " if a[j] n): \n", + " return\n", + " yield a\n", + " a, b = b, a + b\n", + " counter += 1\n", + "f = fibonacci(5)#f is iterator object\n", + "\n", + "print (next(f))\n", + "print (next(f))\n", + "print (next(f))\n", + "\n", + "print (next(f))\n", + "print (next(f))\n", + "\n", + "print (next(f))\n", + "#i kinda feel bad about this part...\n", + "#but ill practice this particular cell later" + ] + }, + { + "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": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sub_lists(a):\n", + " lists=[[]]\n", + " for i in range(0,len(a)):\n", + " for j in range(i,len(a)):\n", + " lists.append(a[i:j+1])\n", + " \n", + " print(lists) \n", + " \n", + " \n", + " pass" + ] + }, + { + "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": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2, 3, 6]\n", + "[1, 2, 3]\n" + ] + } + ], + "source": [ + "def modify_list(a):\n", + " b=len(a)\n", + " a.append(0)\n", + " for i in range(0,b):\n", + " a[b]+=a[i]\n", + " pass\n", + "\n", + "def reassign_list(a):\n", + " b=[]\n", + " for i in range(0,len(a)):\n", + " b.append(a[i]+1)\n", + " #print(b)\n", + " return(b)\n", + " pass\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": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def char_position(a):\n", + " dicti={}\n", + " for i in range(0,len(a)):\n", + " #dicti.append(dict(i,a[i]))\n", + " dicti[i]=a[i]\n", + " #print (dicti)\n", + " return (dicti)" + ] + }, + { + "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": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def sort_by_freq(a):\n", + " lists=[]\n", + " dicti={}\n", + " for i in range(0,len(a)):\n", + " dicti[a[i]]=0\n", + " for i in range(0,len(a)):\n", + " dicti[a[i]]+=1\n", + " for i in dict.keys(dicti):\n", + " lists.append((i,dicti[i]))\n", + " for k in range(0,len(dicti)):\n", + " for i in range(0,len(dicti)-1):\n", + " if lists[i][1]>lists[i+1][1]:\n", + " temp=lists[i]\n", + " lists[i]=lists[i+1]\n", + " lists[i+1]=temp\n", + " for i in range(0,len(dicti)):\n", + " for j in range(0,lists[i][1]):\n", + " print(lists[i][0],end='')\n", + " print('')\n", + " pass" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "---\n", + "**Q12)**\n", + "\n", + "**A) Create a file called myfile.txt**\n", + "\n", + "**B) Enter some a 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.**" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "enter the index to find word:3\n" + ] + } + ], + "source": [ + "import os\n", + "#os.mkdir(\"myfile.txt\")\n", + "fo=open(\"myfile.txt\",\"w\")\n", + "fo.write(\"Mathematicians seek out patterns and use them to formulate new conjectures. Mathematicians resolve the truth or falsity of conjectures by mathematical proof. When mathematical structures are good models of real phenomena, then mathematical reasoning can provide insight or predictions about nature. Through the use of abstraction and logic, mathematics developed from counting, calculation, measurement, and the systematic study of the shapes and motions of physical objects. Practical mathematics has been a human activity from as far back as written records exist. The research required to solve mathematical problems can take years or even centuries of sustained inquiry.\")\n", + "fo.close()\n", + "\n", + "\n", + "fo=open(\"myfile.txt\",\"r\")\n", + "string=fo.read()\n", + "finalpos=fo.seek(0,2)\n", + "#print(finalpos)\n", + "while (1):\n", + " nstr=fo.read()\n", + " string=string+nstr\n", + " #print(string)\n", + " nextpos=fo.tell()\n", + " if nextpos==finalpos:\n", + " break\n", + "fo.close()\n", + "sentence=' '+string+' '\n", + "listwords=[]\n", + "for i in range(0,len(sentence)):\n", + " if sentence[i] ==' ':\n", + " for j in range (i+1,len(sentence)):\n", + " if sentence[j]==' ':\n", + " listwords.append(sentence[i+1:j:])\n", + " break\n", + "wordind=input(\"enter the index to find word:\")\n", + "word=listwords[int(wordind)]\n", + "\n", + "\n", + "fo=open(word+\".txt\",\"a\")\n", + "for i in range(len(listwords)-1,-1,-1):\n", + " fo.write(listwords[i]+' ')\n", + "fo.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [default]", + "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.5.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/python-assn/assn-02/.ipynb_checkpoints/Untitled-checkpoint.ipynb b/python-assn/assn-02/.ipynb_checkpoints/Untitled-checkpoint.ipynb deleted file mode 100644 index 2fd6442..0000000 --- a/python-assn/assn-02/.ipynb_checkpoints/Untitled-checkpoint.ipynb +++ /dev/null @@ -1,6 +0,0 @@ -{ - "cells": [], - "metadata": {}, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/python-assn/assn-02/Suryateja_R_Assignment2.ipynb b/python-assn/assn-02/Suryateja_R_Assignment2.ipynb new file mode 100644 index 0000000..9386ea4 --- /dev/null +++ b/python-assn/assn-02/Suryateja_R_Assignment2.ipynb @@ -0,0 +1,350 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Numpy exercise\n", + "===\n", + "\n", + "This exercise is designed to get you familiarised with numpy and shows the most common operations that you will perform in the future.\n", + "\n", + "You will need the Iris.csv file from the GitHub repositry to perform this exercise.\n", + "\n", + "Write your code in the following way:\n", + "#################################
\n", + "\n", + "Your code here\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "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", + "A=A.reshape(4,4)\n", + "print(A)\n", + "#################################" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Expected output:
\n", + "[[ 0 1 2 3]\n", + " [ 4 5 6 7]\n", + " [ 8 9 10 11]\n", + " [12 13 14 15]]" + ] + }, + { + "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 and print B.\n", + "#################################\n", + " #B=np.square(A,np.ndarray((4,4),int))\n", + " #B=A*A\n", + "B=A**2\n", + "print(B)\n", + "#################################" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Expected output:
\n", + "[[ 0 1 4 9]\n", + " [ 16 25 36 49]\n", + " [ 64 81 100 121]\n", + " [144 169 196 225]]\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "#Create a numpy array of shape (28,28) whose values are chosen randomly from 0-255\n", + "#################################\n", + "x=np.random.randint(0,255+1,(28,28))\n", + "#print(A)\n", + "#################################\n", + "\n", + "#Convert x into a vector (Make it of single dimension)\n", + "#################################\n", + "x=x.reshape(28*28,)\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", + "x=np.insert(x,0,1,axis=0)\n", + "#print(x,np.shape(x))\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", + "W=np.random.normal(0,0.05,(785,10))\n", + "#print(W)\n", + "#################################\n", + "\n", + "#Multiply the 2 matrices W and x. (Keep in mind the shape of the two)\n", + "#################################\n", + "yw=x.dot(W)\n", + "#print(y1)\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "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", + "import pandas as pd\n", + "data=np.array(pd.read_csv('Iris.csv'))\n", + "np.random.shuffle(data)\n", + "#print (data)\n", + "\n", + "#################################\n", + "\n", + "\n", + "#Create a numpy array X that contains the firts 4 columns of data. Keep the last column of data in numpy array y.\n", + "#################################\n", + "X=data[:,0:4]\n", + "y=data[:,4]\n", + "#print(X)\n", + "#print(y)\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 5.5 2.6 4.4 1.2 1. ]\n", + " [ 6.9 3.1 5.4 2.1 2. ]\n", + " [ 5.7 4.4 1.5 0.4 0. ]\n", + " [ 6.4 2.8 5.6 2.1 2. ]\n", + " [ 6. 2.2 5. 1.5 2. ]\n", + " [ 5.1 3.7 1.5 0.4 0. ]\n", + " [ 5.4 3. 4.5 1.5 1. ]\n", + " [ 7. 3.2 4.7 1.4 1. ]\n", + " [ 4.8 3. 1.4 0.1 0. ]\n", + " [ 5.4 3.9 1.7 0.4 0. ]]\n", + "[[ 6.2 2.2 4.5 1.5 1. ]\n", + " [ 5.7 2.8 4.1 1.3 1. ]\n", + " [ 4.9 3.1 1.5 0.1 0. ]\n", + " [ 6.3 2.8 5.1 1.5 2. ]\n", + " [ 4.6 3.4 1.4 0.3 0. ]\n", + " [ 6.7 3.1 4.7 1.5 1. ]\n", + " [ 6.1 2.9 4.7 1.4 1. ]\n", + " [ 6.9 3.1 5.1 2.3 2. ]\n", + " [ 6.3 3.3 4.7 1.6 1. ]\n", + " [ 5.2 3.4 1.4 0.2 0. ]]\n", + "[ 6.9 3.1 5.4 2.1]\n", + "[ 6.4 2.8 5.6 2.1]\n", + "[ 6. 2.2 5. 1.5]\n", + "[ 6.7 2.5 5.8 1.8]\n", + "[ 7.6 3. 6.6 2.1]\n", + "[ 6.4 3.2 5.3 2.3]\n", + "[ 6.1 2.6 5.6 1.4]\n", + "[ 6.3 2.9 5.6 1.8]\n", + "[ 7.1 3. 5.9 2.1]\n", + "[ 5.8 2.7 5.1 1.9]\n", + "[ 6.8 3. 5.5 2.1]\n", + "[ 6.7 3. 5.2 2.3]\n", + "[ 6.5 3. 5.2 2. ]\n", + "[ 6.3 3.4 5.6 2.4]\n", + "[ 5.6 2.8 4.9 2. ]\n", + "[ 7.9 3.8 6.4 2. ]\n", + "[ 4.9 2.5 4.5 1.7]\n", + "[ 6.1 3. 4.9 1.8]\n", + "[ 6.7 3.3 5.7 2.1]\n", + "[ 5.9 3. 5.1 1.8]\n", + "[ 5.7 2.5 5. 2. ]\n", + "[ 5.8 2.8 5.1 2.4]\n", + "[ 6.2 2.8 4.8 1.8]\n", + "[ 5.8 2.7 5.1 1.9]\n", + "[ 6.3 3.3 6. 2.5]\n", + "[ 6.5 3. 5.8 2.2]\n", + "[ 6.5 3.2 5.1 2. ]\n", + "[ 6.7 3.3 5.7 2.5]\n", + "[ 7.7 2.6 6.9 2.3]\n", + "[ 6.9 3.2 5.7 2.3]\n", + "[ 7.7 3. 6.1 2.3]\n", + "[ 6.4 3.1 5.5 1.8]\n", + "[ 7.7 2.8 6.7 2. ]\n", + "[ 6.2 3.4 5.4 2.3]\n", + "[ 7.4 2.8 6.1 1.9]\n", + "[ 7.7 3.8 6.7 2.2]\n", + "[ 6.4 2.8 5.6 2.2]\n", + "[ 7.3 2.9 6.3 1.8]\n", + "[ 7.2 3.6 6.1 2.5]\n", + "[ 6.5 3. 5.5 1.8]\n", + "[ 6.3 2.5 5. 1.9]\n", + "[ 7.2 3. 5.8 1.6]\n", + "[ 6.3 2.7 4.9 1.8]\n", + "[ 6.8 3.2 5.9 2.3]\n", + "[ 6. 3. 4.8 1.8]\n", + "[ 6.7 3.1 5.6 2.4]\n", + "[ 7.2 3.2 6. 1.8]\n", + "[ 6.4 2.7 5.3 1.9]\n", + "[ 6.3 2.8 5.1 1.5]\n", + "[ 6.9 3.1 5.1 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", + "print(data[0:10])\n", + "print(data[-10:])\n", + "for i in range(0,np.shape(X)[0]):\n", + " if y[i]==2:\n", + " print( X[i] )\n", + "\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "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", + "y1=np.zeros((np.shape(y)[0],3))\n", + "for i in range (0,np.shape(y)[0]):\n", + " if y[i]==0:\n", + " y1[i]=(1,0,0)\n", + " elif y[i]==1:\n", + " y1[i]=(0,1,0)\n", + " elif y[i]==2:\n", + " y1[i]=(0,0,1)\n", + " \n", + "\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1, 32, 64, 3)\n" + ] + } + ], + "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", + "B=np.zeros((1,32,64,3))\n", + "for i in range (0,32):\n", + " B[0,i]=(A[i]) \n", + "#print(B,np.shape(B))\n", + "A=B\n", + "print(np.shape(A))\n", + "#################################" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Expected Output:
(1,32,64,3)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [default]", + "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.5.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/python-assn/assn-03/.ipynb_checkpoints/Assn-03-checkpoint.ipynb b/python-assn/assn-03/.ipynb_checkpoints/Assn-03-checkpoint.ipynb deleted file mode 100644 index 72fd792..0000000 --- a/python-assn/assn-03/.ipynb_checkpoints/Assn-03-checkpoint.ipynb +++ /dev/null @@ -1,2843 +0,0 @@ -{ - "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": 1, - "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": 2, - "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": 2, - "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": 3, - "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": 3, - "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": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['sepal length (cm)',\n", - " 'sepal width (cm)',\n", - " 'petal length (cm)',\n", - " 'petal width (cm)']" - ] - }, - "execution_count": 4, - "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": 5, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2
55.43.91.70.4
64.63.41.40.3
75.03.41.50.2
84.42.91.40.2
94.93.11.50.1
105.43.71.50.2
114.83.41.60.2
124.83.01.40.1
134.33.01.10.1
145.84.01.20.2
155.74.41.50.4
165.43.91.30.4
175.13.51.40.3
185.73.81.70.3
195.13.81.50.3
205.43.41.70.2
215.13.71.50.4
224.63.61.00.2
235.13.31.70.5
244.83.41.90.2
255.03.01.60.2
265.03.41.60.4
275.23.51.50.2
285.23.41.40.2
294.73.21.60.2
...............
1206.93.25.72.3
1215.62.84.92.0
1227.72.86.72.0
1236.32.74.91.8
1246.73.35.72.1
1257.23.26.01.8
1266.22.84.81.8
1276.13.04.91.8
1286.42.85.62.1
1297.23.05.81.6
1307.42.86.11.9
1317.93.86.42.0
1326.42.85.62.2
1336.32.85.11.5
1346.12.65.61.4
1357.73.06.12.3
1366.33.45.62.4
1376.43.15.51.8
1386.03.04.81.8
1396.93.15.42.1
1406.73.15.62.4
1416.93.15.12.3
1425.82.75.11.9
1436.83.25.92.3
1446.73.35.72.5
1456.73.05.22.3
1466.32.55.01.9
1476.53.05.22.0
1486.23.45.42.3
1495.93.05.11.8
\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": 5, - "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": 6, - "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", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2
55.43.91.70.4
64.63.41.40.3
75.03.41.50.2
84.42.91.40.2
94.93.11.50.1
\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": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Return the first 10 rows in df\n", - "### CODE HERE ###" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "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", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
1406.73.15.62.4
1416.93.15.12.3
1425.82.75.11.9
1436.83.25.92.3
1446.73.35.72.5
1456.73.05.22.3
1466.32.55.01.9
1476.53.05.22.0
1486.23.45.42.3
1495.93.05.11.8
\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": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Return the last 10 rows in df\n", - "### CODE HERE ###" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(150, 4)" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Get to know the shape of the data\n", - "### CODE HERE ###" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This tells us there are 150 rows and 4 columns in ```df```." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "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", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
count150.000000150.000000150.000000150.000000
mean5.8433333.0540003.7586671.198667
std0.8280660.4335941.7644200.763161
min4.3000002.0000001.0000000.100000
25%5.1000002.8000001.6000000.300000
50%5.8000003.0000004.3500001.300000
75%6.4000003.3000005.1000001.800000
max7.9000004.4000006.9000002.500000
\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": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Get a more detailed description of the dataset\n", - "### CODE HERE ###" - ] - }, - { - "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": 10, - "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": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Retrieve only sepal_length from df\n", - "### CODE HERE ###" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "sepal length (cm) 5.1\n", - "sepal width (cm) 3.5\n", - "petal length (cm) 1.4\n", - "petal width (cm) 0.2\n", - "Name: 0, dtype: float64" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Return 5th row of df\n", - "### CODE HERE ###" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.4" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Return petal length of 5th row of df\n", - "### CODE HERE ###" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
414.52.31.30.3
535.52.34.01.3
546.52.84.61.5
555.72.84.51.3
574.92.43.31.0
595.22.73.91.4
605.02.03.51.0
626.02.24.01.0
675.82.74.11.0
686.22.24.51.5
695.62.53.91.1
716.12.84.01.3
726.32.54.91.5
736.12.84.71.2
766.82.84.81.4
795.72.63.51.0
805.52.43.81.1
815.52.43.71.0
825.82.73.91.2
836.02.75.11.6
876.32.34.41.3
895.52.54.01.3
905.52.64.41.2
925.82.64.01.2
935.02.33.31.0
945.62.74.21.3
985.12.53.01.1
995.72.84.11.3
1015.82.75.11.9
1064.92.54.51.7
1086.72.55.81.8
1116.42.75.31.9
1135.72.55.02.0
1145.82.85.12.4
1187.72.66.92.3
1196.02.25.01.5
1215.62.84.92.0
1227.72.86.72.0
1236.32.74.91.8
1266.22.84.81.8
1286.42.85.62.1
1307.42.86.11.9
1326.42.85.62.2
1336.32.85.11.5
1346.12.65.61.4
1425.82.75.11.9
1466.32.55.01.9
\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": 12, - "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", - "### CODE HERE ###\n", - "\n", - "df1" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "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": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Get mean of each column in df\n", - "# Hint: use numpy.mean\n", - "import numpy as np\n", - "\n", - "### CODE HERE ###" - ] - }, - { - "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": 15, - "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": 16, - "metadata": {}, - "outputs": [], - "source": [ - "sl = df['sepal length (cm)']" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "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+6VJTeYXbly2xf6mWfCt74FW7Zk81u2ZPPFX3JjxsDatV37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\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": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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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')\n", - "\n", - "### CODE HERE ###" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEKCAYAAAARnO4WAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3X+YVPV59/H3zaqLPyECF4oUEeOSoiLIViMkuorRxFgTTXKpj2215Ak1Nra2T7VVH5+YH6RptH2S2mIuGpLYlqZWjIbHGuOPsmqUYACJv8FIQQm6riiIqMjC/fwxZ9bdYWbOd3bOOfPr87quvWDOnDnnniPee+ae+/v9mrsjIiLNb1itAxARkWwo4YuItAglfBGRFqGELyLSIpTwRURahBK+iEiLUMIXEWkRSvgiIi1CCV9EpEXsVesABho9erRPnDix1mGIiDSMlStXvubuY0L2rauEP3HiRFasWFHrMEREGoaZbQjdVyUdEZEWoYQvItIiUkv4ZjbZzFYP+HnTzK5I63wiIlJeajV8d18DTAMwszbgN8AdlR5n586dbNy4kXfffTfhCCXU8OHDGT9+PHvvvXetQxGRKmT1pe1s4AV3D/5yIW/jxo0ceOCBTJw4ETNLITQpx93ZvHkzGzdu5Igjjqh1OCJShaxq+BcAPyr2hJnNNbMVZrait7d3j+ffffddRo0apWRfI2bGqFGj9AlLpAmknvDNbB/gHOC2Ys+7+wJ373T3zjFjireSKtnXlq6/yJ56FvWwbOIyuod1s2ziMnoW9dQ6pFhZlHQ+Aaxy9/q/GiIiAXoW9bBm7hp2v70bgB0bdrBm7hoAxl40tpahlZVFSedCSpRzGsW8efM4+uijmTp1KtOmTWP58uWJHr+7u5uzzz47eHu17rzzTp555pn+x11dXRrwJlKBddeu60/2ebvf3s26a9fVKKIwqd7hm9l+wMeAP0rzPGlatmwZd911F6tWraK9vZ3XXnuN9957r9ZhVeXOO+/k7LPPZsqUKbUORaQh7XhxR0Xb60Wqd/ju/ra7j3L3rWmeZ6Ck62ovv/wyo0ePpr29HYDRo0czbtw4AFauXMkpp5zCjBkzOPPMM3n55ZeB3B3zFVdcwcyZMznmmGN47LHHAHjssceYOXMm06dPZ+bMmaxZsyY4ju3btzNnzhx+53d+h+nTp/OTn/wEgB/+8Iecd955fPzjH+eoo47iqquu6n/NwoUL6ejooKuriy984Qt86Utf4tFHH2XJkiVceeWVTJs2jRdeeAGA2267jRNOOIGOjg4efvjhqq6ZSLNrn9Be0fZ60VQjbfN1tR0bdoC/X1erJumfccYZvPTSS3R0dHDZZZfx4IMPArnxAZdffjmLFy9m5cqVzJkzh2uvvbb/ddu3b+fRRx9l/vz5zJkzB4APfehDPPTQQzz++ON89atf5ZprrgmOY968eZx22mn88pe/ZOnSpVx55ZVs374dgNWrV3Prrbfy5JNPcuutt/LSSy+xadMmvva1r/GLX/yC++67j+eeew6AmTNncs4553DDDTewevVqjjzySAD6+vp47LHH+Pa3v81XvvKVIV8vkVYwad4khu03OH0O228Yk+ZNqlFEYepq8rRqlaurDfWLlAMOOICVK1fy8MMPs3TpUs4//3y++c1v0tnZyVNPPcXHPvYxAHbt2sWhhx7a/7oLL7wQgJNPPpk333yTLVu2sG3bNi6++GKef/55zIydO3cGx3HvvfeyZMkSbrzxRiDXrvriiy8CMHv2bEaMGAHAlClT2LBhA6+99hqnnHIKBx98MACf+9znWLt2bcnjn3feeQDMmDGD9evXB8cl0orGXjSWl3/wMlse2NK/7aCTDqrrL2yhyRJ+WnW1trY2urq66Orq4thjj+WWW25hxowZHH300SxbtqzoawpbGc2M6667jlNPPZU77riD9evX09XVFRyDu3P77bczefLkQduXL1/eX27Kx9rX14e7h79B6D9G/vUiUtray9YOSvYAWx7YwtrL1tIxv6NGUcVrqpJOGnW1NWvW8Pzzz/c/Xr16NYcffjiTJ0+mt7e3P+Hv3LmTp59+un+/W2+9FYCf//znjBgxghEjRrB161YOO+wwIFd7r8SZZ57JTTfd1J/IH3/88bL7n3DCCTz44IO88cYb9PX1cfvtt/c/d+CBB7Jt27aKzi8i79u0YFNF2+tFUyX8NOpqb731FhdffDFTpkxh6tSpPPPMM1x//fXss88+LF68mL/8y7/kuOOOY9q0aTz66KP9r/vABz7AzJkzufTSS1m4cCEAV111FVdffTWzZs1i165dFcVx3XXXsXPnTqZOncoxxxzDddddV3b/ww47jGuuuYYTTzyR008/nSlTpvSXfS64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\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 ###" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzsvXmYXFWd//86tXb1ku6kO+nO3hCSMBCSDoQIEVmVZUBABmdwRgUcyeAo87ggKu76U58Z92G+CihKGNFBFAFHRAYR2ZckdJOwBsiedKfTnd6raz2/P6rO7Xtv3Vt79Xpez9NP0nWr7j1V3X0+9/3+fM7nCCklGo1Go9EAeCZ6ABqNRqOZPOigoNFoNBoDHRQ0Go1GY6CDgkaj0WgMdFDQaDQajYEOChqNRqMx0EFBo9FoNAY6KGg0Go3GQAcFjUaj0Rj4JnoAhdLU1CRbW1snehgajUYzpdiyZcthKeXcXM+raFAQQnwC+DAggW3A1VLKUdPxIHAHcBLQA/yDlHJXtnO2trayefPmio1Zo9FopiNCiN35PK9i9pEQYiHwb8A6KeUqwAtcYXvaPwNHpJTHAN8H/r1S49FoNBpNbiqdU/ABISGED6gGDtiOXwJsSv//N8A5QghR4TFpNBqNxoWKBQUp5X7gO8Ae4CDQL6V8yPa0hcDe9PPjQD/QWKkxaTQajSY7FcspCCFmk1ICRwF9wN1CiPdLKX9hfprDSzN6eQshNgIbAZYsWZLxglgsxr59+xgdHc04ppleVFVVsWjRIvx+/0QPRaOZllQy0fxOYKeUshtACHEPsAEwB4V9wGJgX9piqgd67SeSUt4K3Aqwbt26jKCxb98+6urqaG1tRbtP0xcpJT09Pezbt4+jjjpqooej0UxLKplT2AOcIoSoTucJzgFesT3nfuDK9P8vBx6RRez6Mzo6SmNjow4I0xwhBI2NjVoRajQVpJI5hWdJJY+3kipH9QC3CiG+JoS4OP2024BGIcQbwCeBzxZ7PR0QZgb656zRVJaKrlOQUn4Z+LLt4S+Zjo8C763kGDQajaZQthzYQkImWL9w/UQPZdzRbS6mAI8++igXXXRR3o+Xyr333svLL79sfH/mmWfmtWDw4MGDZRlPd3c3559/fsnn0WiK5VMPfYpP/9+nJ3oYE4IOCpoM7EEhX773ve9xzTXXlHz9uXPnMn/+fJ588smSz6XRFMOh4UOMxEYmehgTgg4KZWB4eJgLL7yQNWvWsGrVKu666y4AtmzZwhlnnMFJJ53Eeeedx8GDB4HUnffHP/5xNmzYwKpVq3juuecAeO6559iwYQNr165lw4YNvPbaawWN4UMf+hAnn3wya9eu5b777gPg9ttv57LLLuP8889n+fLl3HDDDcZrbrvtNlasWMGZZ57JNddcw8c+9jGeeuop7r//fj796U/T1tbGm2++CcDdd9/N+vXrWbFiBY8//rjjGH77298ad/iJRILrr7+eE044gdWrV3PTTTcBqTYlN954I6eeeirr1q1j69atnHfeeSxbtoybb77ZONell17KnXfemff712jKSU+4h2giOtHDmBCmXEO8XHz8wY/T3tle1nO2tbTxg/N/4Hr8wQcfZMGCBfzhD38AoL+/n1gsxnXXXcd9993H3Llzueuuu/j85z/Pz372MyA1iT/11FM89thjfOhDH2L79u0ce+yxPPbYY/h8Ph5++GFuvPFGfvvb3+Y1xm984xucffbZ/OxnP6Ovr4/169fzzne+E4D29nZeeOEFgsEgK1eu5LrrrsPr9fL1r3+drVu3UldXx9lnn82aNWvYsGEDF198MRdddBGXX365cf54PM5zzz3HAw88wFe/+lUefvhhy/V37tzJ7NmzCQaDANx6663s3LmTF154AZ/PR2/vWKXx4sWLefrpp/nEJz7BVVddxZNPPsno6CjHH3881157LQDr1q3jC1/4Ql7vXaMpJ1JKesO9zAnNmeihTAjTLihMBCeccALXX389n/nMZ7jooot4xzvewfbt29m+fTvvete7gNSd8/z5843XvO997wPg9NNPZ2BggL6+PgYHB7nyyivZsWMHQghisVjeY3jooYe4//77+c53vgOkynT37NkDwDnnnEN9fT0Axx13HLt37+bw4cOcccYZzJmT+sV/73vfy+uvv+56/ssuuwyAk046iV27dmUcP3jwIHPnjjVgfPjhh7n22mvx+VK/Yuo6ABdffLHxuQ0NDVFXV0ddXR1VVVX09fXR0NDAvHnzOHDA3hVFo6k8A5EB4sk4kXhkoocyIUy7oJDtjr5SrFixgi1btvDAAw/wuc99jnPPPZf3vOc9HH/88Tz99NOOr7GXVgoh+OIXv8hZZ53F7373O3bt2sWZZ56Z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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 ###" - ] - }, - { - "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": 21, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
05.63.04.51.51
15.13.71.50.40
25.63.04.11.31
35.13.51.40.30
46.93.15.12.32
56.73.35.72.52
65.74.41.50.40
75.13.81.50.30
85.84.01.20.20
96.02.24.01.01
104.83.01.40.30
117.73.06.12.32
124.43.21.30.20
135.54.21.40.20
145.03.41.60.40
155.72.63.51.01
166.72.55.81.82
176.42.85.62.12
185.03.61.40.20
195.72.84.11.31
206.43.25.32.32
214.92.43.31.01
225.82.85.12.42
236.12.94.71.41
246.73.05.01.71
255.43.41.70.20
267.72.66.92.32
276.83.05.52.12
286.22.24.51.51
294.83.41.60.20
..................
1206.82.84.81.41
1216.03.44.51.61
1226.62.94.61.31
1235.93.24.81.81
1247.23.26.01.82
1257.03.24.71.41
1266.43.24.51.51
1275.52.64.41.21
1285.03.01.60.20
1294.63.41.40.30
1304.52.31.30.30
1314.73.21.30.20
1326.73.05.22.32
1336.73.14.71.51
1346.33.36.02.52
1355.72.94.21.31
1365.33.71.50.20
1374.92.54.51.72
1386.53.05.51.82
1395.43.04.51.51
1405.03.31.40.20
1414.93.01.40.20
1426.42.75.31.92
1435.13.31.70.50
1444.33.01.10.10
1455.73.81.70.30
1467.32.96.31.82
1475.03.21.20.20
1484.83.41.90.20
1495.82.74.11.01
\n", - "

150 rows × 5 columns

\n", - "
" - ], - "text/plain": [ - " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n", - "0 5.6 3.0 4.5 1.5 \n", - "1 5.1 3.7 1.5 0.4 \n", - "2 5.6 3.0 4.1 1.3 \n", - "3 5.1 3.5 1.4 0.3 \n", - "4 6.9 3.1 5.1 2.3 \n", - "5 6.7 3.3 5.7 2.5 \n", - "6 5.7 4.4 1.5 0.4 \n", - "7 5.1 3.8 1.5 0.3 \n", - "8 5.8 4.0 1.2 0.2 \n", - "9 6.0 2.2 4.0 1.0 \n", - "10 4.8 3.0 1.4 0.3 \n", - "11 7.7 3.0 6.1 2.3 \n", - "12 4.4 3.2 1.3 0.2 \n", - "13 5.5 4.2 1.4 0.2 \n", - "14 5.0 3.4 1.6 0.4 \n", - "15 5.7 2.6 3.5 1.0 \n", - "16 6.7 2.5 5.8 1.8 \n", - "17 6.4 2.8 5.6 2.1 \n", - "18 5.0 3.6 1.4 0.2 \n", - "19 5.7 2.8 4.1 1.3 \n", - "20 6.4 3.2 5.3 2.3 \n", - "21 4.9 2.4 3.3 1.0 \n", - "22 5.8 2.8 5.1 2.4 \n", - "23 6.1 2.9 4.7 1.4 \n", - "24 6.7 3.0 5.0 1.7 \n", - "25 5.4 3.4 1.7 0.2 \n", - "26 7.7 2.6 6.9 2.3 \n", - "27 6.8 3.0 5.5 2.1 \n", - "28 6.2 2.2 4.5 1.5 \n", - "29 4.8 3.4 1.6 0.2 \n", - ".. ... ... ... ... \n", - "120 6.8 2.8 4.8 1.4 \n", - "121 6.0 3.4 4.5 1.6 \n", - "122 6.6 2.9 4.6 1.3 \n", - "123 5.9 3.2 4.8 1.8 \n", - "124 7.2 3.2 6.0 1.8 \n", - "125 7.0 3.2 4.7 1.4 \n", - "126 6.4 3.2 4.5 1.5 \n", - "127 5.5 2.6 4.4 1.2 \n", - "128 5.0 3.0 1.6 0.2 \n", - "129 4.6 3.4 1.4 0.3 \n", - "130 4.5 2.3 1.3 0.3 \n", - "131 4.7 3.2 1.3 0.2 \n", - "132 6.7 3.0 5.2 2.3 \n", - "133 6.7 3.1 4.7 1.5 \n", - "134 6.3 3.3 6.0 2.5 \n", - "135 5.7 2.9 4.2 1.3 \n", - "136 5.3 3.7 1.5 0.2 \n", - "137 4.9 2.5 4.5 1.7 \n", - "138 6.5 3.0 5.5 1.8 \n", - "139 5.4 3.0 4.5 1.5 \n", - "140 5.0 3.3 1.4 0.2 \n", - "141 4.9 3.0 1.4 0.2 \n", - "142 6.4 2.7 5.3 1.9 \n", - "143 5.1 3.3 1.7 0.5 \n", - "144 4.3 3.0 1.1 0.1 \n", - "145 5.7 3.8 1.7 0.3 \n", - "146 7.3 2.9 6.3 1.8 \n", - "147 5.0 3.2 1.2 0.2 \n", - "148 4.8 3.4 1.9 0.2 \n", - "149 5.8 2.7 4.1 1.0 \n", - "\n", - " target \n", - "0 1 \n", - "1 0 \n", - "2 1 \n", - "3 0 \n", - "4 2 \n", - "5 2 \n", - "6 0 \n", - "7 0 \n", - "8 0 \n", - "9 1 \n", - "10 0 \n", - "11 2 \n", - "12 0 \n", - "13 0 \n", - "14 0 \n", - "15 1 \n", - "16 2 \n", - "17 2 \n", - "18 0 \n", - "19 1 \n", - "20 2 \n", - "21 1 \n", - "22 2 \n", - "23 1 \n", - "24 1 \n", - "25 0 \n", - "26 2 \n", - "27 2 \n", - "28 1 \n", - "29 0 \n", - ".. ... \n", - "120 1 \n", - "121 1 \n", - "122 1 \n", - "123 1 \n", - "124 2 \n", - "125 1 \n", - "126 1 \n", - "127 1 \n", - "128 0 \n", - "129 0 \n", - "130 0 \n", - "131 0 \n", - "132 2 \n", - "133 1 \n", - "134 2 \n", - "135 1 \n", - "136 0 \n", - "137 2 \n", - "138 2 \n", - "139 1 \n", - "140 0 \n", - "141 0 \n", - "142 2 \n", - "143 0 \n", - "144 0 \n", - "145 0 \n", - "146 2 \n", - "147 0 \n", - "148 0 \n", - "149 1 \n", - "\n", - "[150 rows x 5 columns]" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# Join target variable to dataframe\n", - "### CODE HERE ###\n", - "\n", - "# Randomly shuffle dataframe\n", - "### CODE HERE ###\n", - "\n", - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "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": 22, - "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": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 1, 0, 0, 2, 1, 0, 2, 1, 1, 2, 0, 2, 0, 2, 2, 2, 2, 0, 1, 0, 0,\n", - " 2, 2, 2, 2, 2, 2, 2, 1])" - ] - }, - "execution_count": 23, - "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": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9333333333333333" - ] - }, - "execution_count": 24, - "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": 25, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Assn-03.ipynb dataframe.csv model.pkl\r\n" - ] - } - ], - "source": [ - "ls" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [], - "source": [ - "import pickle\n", - "\n", - "# Save dataframe to csv\n", - "### CODE HERE ###\n", - "\n", - "# Save model to model.pkl\n", - "### CODE HERE ###" - ] - }, - { - "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/Suryateja_R_Assn-03.ipynb b/python-assn/assn-03/Suryateja_R_Assn-03.ipynb new file mode 100644 index 0000000..21f51a4 --- /dev/null +++ b/python-assn/assn-03/Suryateja_R_Assn-03.ipynb @@ -0,0 +1,2535 @@ +{ + "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": { + "collapsed": true + }, + "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, 0,\n", + " 0, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 2, 2, 2, 2,\n", + " 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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2
55.43.91.70.4
64.63.41.40.3
75.03.41.50.2
84.42.91.40.2
94.93.11.50.1
105.43.71.50.2
114.83.41.60.2
124.83.01.40.1
134.33.01.10.1
145.84.01.20.2
155.74.41.50.4
165.43.91.30.4
175.13.51.40.3
185.73.81.70.3
195.13.81.50.3
205.43.41.70.2
215.13.71.50.4
224.63.61.00.2
235.13.31.70.5
244.83.41.90.2
255.03.01.60.2
265.03.41.60.4
275.23.51.50.2
285.23.41.40.2
294.73.21.60.2
...............
1206.93.25.72.3
1215.62.84.92.0
1227.72.86.72.0
1236.32.74.91.8
1246.73.35.72.1
1257.23.26.01.8
1266.22.84.81.8
1276.13.04.91.8
1286.42.85.62.1
1297.23.05.81.6
1307.42.86.11.9
1317.93.86.42.0
1326.42.85.62.2
1336.32.85.11.5
1346.12.65.61.4
1357.73.06.12.3
1366.33.45.62.4
1376.43.15.51.8
1386.03.04.81.8
1396.93.15.42.1
1406.73.15.62.4
1416.93.15.12.3
1425.82.75.11.9
1436.83.25.92.3
1446.73.35.72.5
1456.73.05.22.3
1466.32.55.01.9
1476.53.05.22.0
1486.23.45.42.3
1495.93.05.11.8
\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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2
55.43.91.70.4
64.63.41.40.3
75.03.41.50.2
84.42.91.40.2
94.93.11.50.1
\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", + "###\n", + "df[0:10] \n", + "###" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "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", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
1406.73.15.62.4
1416.93.15.12.3
1425.82.75.11.9
1436.83.25.92.3
1446.73.35.72.5
1456.73.05.22.3
1466.32.55.01.9
1476.53.05.22.0
1486.23.45.42.3
1495.93.05.11.8
\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", + "### \n", + "df[-10:] \n", + "###" + ] + }, + { + "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", + "###\n", + "df.shape\n", + "###" + ] + }, + { + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
count150.000000150.000000150.000000150.000000
mean5.8433333.0540003.7586671.198667
std0.8280660.4335941.7644200.763161
min4.3000002.0000001.0000000.100000
25%5.1000002.8000001.6000000.300000
50%5.8000003.0000004.3500001.300000
75%6.4000003.3000005.1000001.800000
max7.9000004.4000006.9000002.500000
\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", + "### \n", + "df.describe() \n", + "###" + ] + }, + { + "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": { + "scrolled": true + }, + "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", + "### \n", + "df['sepal length (cm)']\n", + "###" + ] + }, + { + "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", + "### \n", + "df.loc[4]\n", + "###" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.3999999999999999" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Return petal length of 5th row of df\n", + "###\n", + "df.loc[4,'petal length (cm)']\n", + "###" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 1)", + "output_type": "error", + "traceback": [ + "\u001b[1;36m File \u001b[1;32m\"\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m sepal width (cm )<2.9\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n" + ] + } + ], + "source": [ + "# Return all instances in df where sepal width is less than 2.9 and store it in a different DataFrame, df1\n", + "### \n", + "#df1=df[(df. < 2.9)]\n", + "df1=df.query('sepal width (cm)<2.9')\n", + "###\n", + "\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", + "\n", + "### \n", + "#np.mean(df)\n", + "df.apply(np.mean)\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": { + "collapsed": true + }, + "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": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sl = df['sepal length (cm)']" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nhpmZJfn/LoqNnTEJhqoAAAAASUVORK5CYII=\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": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X18XGWd9/HPL2natDW00LQW2oYUxVpaaSShCPSJLSgr\nCLverA9bdK33y95QKQX/WLjBbaur3j7sS+6iIIuKqK2iVt1l2bqsD6y06ioJFloK3RuhxQBatkIf\nSNLm4Xf/cZ05M3MymZk8TCdJv+/X67wy15nrXNdvTpLzm7muM+eYuyMiIgJQUe4ARERk+FBSEBGR\nmJKCiIjElBRERCSmpCAiIjElBRERiSkpiIhITElBRERiSgoiIhIbU+4A+qu2ttbr6+vLHYaIyIjS\n0tLy3+4+tVC9EZcU6uvraW5uLncYIiIjipntK6aeho9ERCSmpCAiIjElBRERiSkpiIhITElBRERi\nSgoiIhJTUhARkZiSgsiJKHkb3mJuy9vT07vc3Z297tix7HJ3Nxw9mr2uvT273NXVu91kX52dvdtN\n9pVst7u7d3zJdortKym5v5Jt5NqfufZ5rn1azHYlVLKkYGazzOwhM9ttZk+Y2docdczMbjezp83s\ncTM7p1TxnCg2b4b6eqioCD8vvhjGjAGz8HP16t51Vq/OLm/eHOr3Zzn55LBkrquszC5ffDGMHZu/\nnYsvDktynQyhDRvgxhvTBxf3UN6woe9tli2Dxsb0QaunB6qrw5I6aNbVhXJdXSh3d4c/uurqdGJY\nvBgmTAi/WIAlS6CmBpYuTbd70klhSfVVVwfjx6frpNodNy6dGGbNCu1WVKTrjB0LVVXp+JYsCe2k\n4svV1+mnhzqLF6fbmT49/GP0tf/Wrw/7Zv36vvdnrn0+axbMmJG9Txsbw77Ot12h39VguXtJFuBU\n4JzocQ3wX8BZiTpvB34EGPAW4NeF2m1sbHTJbdMm9wkT3MNfTt9LZWXhOsNtWb683Ht3lOjpcV+7\nNuzUtWtzl5O6u90bGkKdhoZQXrAg/cuZMsX96FF3s1A2C+VTTsn+Jba1ZZePHHGvrg6Pq6vdOzvd\nzz47/XxDg/uxY+k/2MrKUC7Ublube21tdny52sl8DQsW5K6Taqe21r2rq/f+yrVvkvsz1z5esyb7\ndeZqZyC/qzyAZi/m2F1MpaFYgH8GLkms+0fgvRnlPcCp+dpRUujb6aeX/+BdykWGSObBJbUUOshk\nHrQyD6RTpmSvSyWG1JI8gOdaUokhtZx9du++ku9kimm3trZ3fMl2FizITg656qQSQr79l4w3uT9z\nbbNmTe/tUglhML+rPhSbFCzULS0zqwceBua7+6GM9Q8An3b37VH5p8BN7t6c2H4VsAqgrq6ucd++\noi7hccKpqAh/NaPVaH5tx517eqgFwtBFakinLz09YUwwpbs7tDMm4xJqR4+GYZ2Urq6wVFen17W1\nhaGelM7OMMyT2S5k93XsWBgOymy3uzu7r2S7qbmKzPiS7RTbV+bz0Hv/dXdn18m1P3Ptc/fe+7Si\novB2hX5XOZhZi7s3FapX8olmM3sN8H3ghsyE0B/ufre7N7l709SpBS/yd8JKDZWK5OUexqUzZY5b\n55Ia7850zjnw2tdmr8s8+ANMm9Z7XeaBG8KcQqY3v7l3X+PH9243MyHkanf69N7xJds555yw5Ksz\nfXr2ZHOu/ZeMN7k/c22zdm3v7TLnbfrartDvarCK+Tgx0AWoAh4EPtLH8xo+GkKaU5CCNKegOYUC\nSynPPjLgq8CT7v75PqrdD7w/OgvpLcBBd3+xVDGNditWwN13hxMozMLP5cvTn04rK+Haa+HrX8+u\nc+212eVNm/rf9+TJYcmU/BS8fHn2KEEuy5eHJbnuJz/pf0ySg1n4Ra1dC7fdFsq33RbKkyfnHpao\nqIBJk6ChAVpaQvnRR8Mvc8wY+OMfw3DLzJlh+5kzQ3n//nQbHR3hHfiiRel1EyfCueeGTxILF4a2\nfvvbsH7ixNBXVRWcdlr4473wwlDObPfo0dDuzJnp1zd+PPzhDyFOsxBfVRVccEFo57TTQvnRR9N9\npV7PjBmhzvnnh/If/gC1taFO6nS6zP1XUQFXXBH2zRVXhHJyf+ba5xs3hr6mT0/v05aW0M6kSenY\n+/u7Goo/kZBAStCw2SJgG7ATSH0eugWoA3D3u6LE8UXgUqANWOmJ+YSkpqYm1/0URAbJPfugkizn\n0tNTeEw815h9V1f2UE97e/YQTVdX9rh/avgks69c8w6p0077ajfXfEGynWL7yjWnkLm/kvsm1/7M\ntc89x3xBrjmF/v6ucih2TqFkN9nxMHmcN/LoI82HSxWDiPQheVAp5iCTPFgly5B9kIZwME0eUJNj\n9mMSh6Fc7SY/YhbTbvL5XO0U21dScn8l28m1P3Pt80Lt9LVdCekbzSIiElNSEBGRmJKCiIjElBRE\nRCSmpCAiIjElBRERiSkpiIhITElBRERiSgoiIhJTUhARkZiSgoiIxJQUREQkpqQgIiIxJQUREYkp\nKYiISExJQUREYkoKIiISU1IQEZGYkoKIiMSUFEREJKakICIiMSUFERGJKSmIiEhMSUFERGJKCiIi\nElNSEBGRmJKCiIjElBRERCSmpCAiIjElBRERiSkpiIhITElBRERiSgoiIhJTUhARkZiSgoiIxJQU\nREQkpqQgIiIxJQUREYmVLCmY2T1mtt/MdvXx/DIzO2hmO6JlXaliERGR4owpYdv3Al8EvpGnzjZ3\nv7yEMYiISD+U7JOCuz8M/KlU7YuIyNAr95zCBWb2uJn9yMzmlTkWEZETXimHjwp5FKhz9yNm9nbg\nn4Azc1U0s1XAKoC6urrjF6GIyAmmbJ8U3P2Qux+JHm8Fqsysto+6d7t7k7s3TZ069bjGKSJyIilb\nUjCz6WZm0eOFUSwHyhWPiIiUcPjIzL4NLANqzawVWA9UAbj7XcBVwLVm1gW0A+9xdy9VPCIiUljJ\nkoK7v7fA818knLIqIiLDRLnPPhIRkWFESUFERGJKCiIiElNSEBGRmJKCiIjElBRERCSmpCAiIjEl\nBRERiSkpiIhITElBRERiSgoiIhJTUhARkZiSgoiIxJQUREQkpqQgIiIxJQUREYkpKYiISExJQURE\nYkoKIiISU1IQEZGYkoKIiMSUFEREJKakICIiMSUFERGJKSmIiEhMSUFERGJKCiIiElNSEBGRmJKC\niIjElBRERCSWNymYWaWZPXS8ghERkfLKmxTcvRvoMbNJxykeEREpozFF1DkC7DSzHwOvpla6+/Ul\ni0pERMqimKTwg2gREZFRrmBScPevm9l4oM7d9xyHmEREpEwKnn1kZu8AdgD/FpUbzOz+UgcmIiLH\nXzGnpG4AFgKvALj7DuCMEsYkIiJlUkxS6HT3g4l1PaUIRkREyquYieYnzOyvgUozOxO4HvhlacMS\nEZFyKOaTwhpgHnAU+DZwELih0EZmdo+Z7TezXX08b2Z2u5k9bWaPm9k5/QlcpN/c85dz6enJX+6r\nTrLtZB333nW6urLL3d3Q2Zm9rqMju3z0aO82kn0dO9a7TnK7trbCfSe36enp3Vd3d3Y51+ssZr9L\n2RSTFE5191vd/Vx3b3L3j7p7R+HNuBe4NM/zfw6cGS2rgC8V0eaoNWECmPW9XHwxzJiRv45Z4XZS\nbWWW582D+nqoqAg/N28OS3LdiLZhA9x4Y/qA5B7KGzb0vc2yZdDYmD7w9fSE8rJl+evMmAGzZqX7\nWr8+1Fm/Pt33+eeHJVXn9NOhpgbWrQvl7m4YMwbGjk0fnOvqYPz4sA7gpJOgujqsh3CwHzsWqqrS\n8aTqLFmSrlNVFdalDvKzZsHEieGPoa++Fy8O24wbl36dJ50UllRf69fD9OmwdGnfr7OY/S7l5e55\nF+DnwO+A+4APA28qtE3GtvXArj6e+0fgvRnlPYQElLfNxsZGH23Gj0+9nRoey9ix7lVV2esmTHDf\ntKnce2qAenrc164NL2Tt2tzlpO5u94aGUKehIXc5Xx1wX7Mmd53rr0/Xuf56985O9+rqUK6uDuVT\nTknXqax0b2/P/oUcPpxd7uhwHzcuXT77bPejR93NQtkslFP9pJZXX+1dnjIlXa6oCG0n+1qwIF1e\nsMC9q8u9tjaUa2tDOfk6i9nvUjJAsxdz3C6qEowFLgRuBZ4D/lTkdvmSwgPAoozyT4GmQm2OxqRQ\n7iRQ7HL66eXeU4OQeUBKLYUOTMmDfOaBvVCdNWt6r8ssX3999kEzlRAyy6ecEhJCf35J48aFhJC5\nLpUY+uon1zJlSkgI+eosWJCdHFIJodDrVEIoi2KTgoW6fTOzRcDiaJlM+M7CNnf/dqFPIWZWDzzg\n7vNzPPcA8Gl33x6Vfwrc5O7NOequIgwxUVdX17hv375CXY8oqU/tw51Z7iH1EcM9jIel9PQU3vk9\nPVBZmS53d2e30Vcds+x63d3ZdVI7MrNOZ2cY2klJzQ+khosA2tvDEFJKR0cY1slso6Iiu6+jR9PD\nPqk63d3Z2736ahhCytd3sq/U/EFmX11dYegp3+ssZr/LkDOzFndvKlSvmLOP/gNoAf4PsNXdj+Wv\nXrTngVkZ5ZnRul7c/W7gboCmpqb8WUxKJjV0PSK5h7HsTDfeCLfd1vcBKjWHkKmxEVpa0ge5vuos\nXtx7XaYbcpyrUVOTXZ42DQ4mzgbPTAiQfZAGeM1rYM6c/HVqanpPWGcmBIDXvhZefjl/O+fkODdk\n+vTscq7XWWi/S3kV+ihB+HRwGfAZ4GfAT4C/L+ZjCPmHjy4DfgQY8BbgN8W0ORqHjzSnUGKaU9Cc\nghQ9fFSwQmiLucA1wGbgWeDnRWzzbeBFoBNoBf5n1MY10fMG3EGYxN5JEfMJPkqTgnvhxLB8uftp\npxU+oBeTYJYvzy6fdVaYLzALPzdtCkty3Yi2fn32gSh1gFq/vu9tli7NnkNIHeCXLs1fZ/p09xkz\n0n2tWxfqrFuX7vu888KSqlNXFw7Yf/d3odzVlf4FHTsW1s2aFcpVVaFcUxPKs2aFcmdn+IVVVKTj\nqakJ6xYvTtfJPLi7u8+cmV7XV9+LFqXfMaRe58SJYUn1tW5dSAhLlvT9OovZ71ISxSaFYuYUngGe\nArYDD0fv6IdqCKnfmpqavLm517SDSGHu2UMWyXIuPT29x8NzzSnkGjPPbDtZJ/V/l1knOR7f3R22\ny5xnSI7rJ+cLurpCP5l9HTuWPTfQ1RXaztyurS2cz5yv72RfueYLknMnuV5nMftdhtxQzim83t1H\n8vSiSJA8EBVzYEomgGR5oHVy9T0m8e9YWZl9gIXe4/qZB+lcbUB2QkjVSdbLTAh99Z3sK9frTG6T\n63UqIQxrxXx57TQz+2H07eT9ZvZ9M5tZ8shEROS4KyYpfA24HzgtWv4lWiciIqNMMUlhqrt/zd27\nouVeYGqJ4xIRkTIoJikcMLOrzawyWq4GDpQ6MBEROf6KSQofBN4F/IFwiulVwMpSBiUiIuVRzD2a\n9wFXHIdYRESkzPpMCmZ2e74N3f36oQ9HRETKKd8nhXcSrop6MvBynnoiIjJK5EsKh4AfE65PtIxw\nWQoRERnF8iWFuwj3ODiDcJXUFAM8Wi8iIqNIn2cfufvt7j4XuMfdz8hYZru7EoKIyChU8JRUd7/2\neAQiIiLlV8z3FERE5AShpCAiIjElBRERiSkpiIhITElBRERiSgoiIhJTUhARkZiSgoiIxJQUREQk\npqQgIiIxJQUREYkpKYiISExJQUREYkoKIiISU1IQEZGYkoKIiMSUFEREJKakICIiMSUFERGJKSmI\niEhMSUFERGJKCiIiElNSEBGRmJKCiIjElBRERCSmpCAiIrGSJgUzu9TM9pjZ02Z2c47nl5nZQTPb\nES3rShmPiIjkN6ZUDZtZJXAHcAnQCjxiZve7++5E1W3ufnmp4hARkeKV8pPCQuBpd3/G3Y8B9wFX\nlrA/EREZpFImhRnA7zPKrdG6pAvM7HEz+5GZzSthPCIiUkDJho+K9ChQ5+5HzOztwD8BZyYrmdkq\nYBVAXV3d8Y1QROQEUspPCs8DszLKM6N1MXc/5O5HosdbgSozq0025O53u3uTuzdNnTq1hCGLiJzY\nSpkUHgHONLPZZjYWeA9wf2YFM5tuZhY9XhjFc6CEMYmISB4lGz5y9y4zuw54EKgE7nH3J8zsmuj5\nu4CrgGvNrAtoB97j7l6qmEREJD8bacfgpqYmb25uLncYIiIjipm1uHtToXr6RrOIiMSUFEREJKak\nICIiMSUFERGJKSmIiEhMSUFERGJKCiIiElNSEBGRmJKCiIjElBRERCSmpCAiIjElBRERiSkpiIhI\nTElBRERiSgoiIhJTUhARkZiSgoiIxJQUREQkVrJ7NIvIiauzs5PW1lY6OjrKHcoJp7q6mpkzZ1JV\nVTWg7ZUURGTItba2UlNTQ319PWZW7nBOGO7OgQMHaG1tZfbs2QNqQ8NHIjLkOjo6mDJlihLCcWZm\nTJkyZVCf0JQURKQklBDKY7D7XUlBRAS49957eeGFFwrW+8AHPsCWLVv63f5dd93FN77xjV7r9+7d\ny/z58wHYsWMHW7dujZ/bsGED//AP/9DvvgZDSUFEhOKTwkBdc801vP/9789bJ5kUykFJQUTKbvNm\nqK+Hiorwc/PmwbW3d+9e3vjGN7JixQrmzp3LVVddRVtbGwAtLS0sXbqUxsZG3va2t/Hiiy+yZcsW\nmpubWbFiBQ0NDbS3t/Pxj3+cc889l/nz57Nq1Srcvc/+9u/fT2NjIwCPPfYYZsZzzz0HwOte9zra\n2tqy3vW3tLSwYMECFixYwB133AHAsWPHWLduHd/5zndoaGjgO9/5DgC7d+9m2bJlnHHGGdx+++2D\n2zFFUFIQkbLavBlWrYJ9+8A9/Fy1avCJYc+ePaxevZonn3ySk046iTvvvJPOzk7WrFnDli1baGlp\n4YMf/CC33norV111FU1NTWzevJkdO3Ywfvx4rrvuOh555BF27dpFe3s7DzzwQJ99TZs2jY6ODg4d\nOsS2bdtoampi27Zt7Nu3j2nTpjFhwoSs+itXruQLX/gCjz32WLxu7NixfPzjH+fd7343O3bs4N3v\nfjcATz31FA8++CC/+c1v+NjHPkZnZ+fgdkwBSgoiUla33grRm/hYW1tYPxizZs3iwgsvBODqq69m\n+/bt7Nmzh127dnHJJZfQ0NDAJz7xCVpbW3Nu/9BDD3Heeefxpje9iZ/97Gc88cQTefu74IIL+MUv\nfsHDDz/MLbfcwsMPP8y2bdtYvHhxVr1XXnmFV155hSVLlgDwvve9L2+7l112GePGjaO2tpZp06bx\nxz/+sdhdMCD6noKIlFU0ylL0+mIlz8IxM9ydefPm8atf/Srvth0dHaxevZrm5mZmzZrFhg0bCp7m\nuWTJkvjTwZVXXslnPvMZzIzLLrtsUK9j3Lhx8ePKykq6uroG1V4h+qQgImVVV9e/9cV67rnn4oP/\nt771LRYtWsScOXN46aWX4vWdnZ3xJ4CamhoOHz4MECeA2tpajhw5UtTZRosXL2bTpk2ceeaZVFRU\ncMopp7B161YWLVqUVW/y5MlMnjyZ7du3A7A5Y5wsM4ZyUVIQkbL65CchMeTOhAlh/WDMmTOHO+64\ng7lz5/Lyyy9z7bXXMnbsWLZs2cJNN93EggULaGho4Je//CUQTjW95ppraGhoYNy4cXzoQx9i/vz5\nvO1tb+Pcc88t2F99fT3uHg8LLVq0iMmTJ3PyySf3qvu1r32ND3/4wzQ0NGRNYF900UXs3r07a6L5\neLN8M+rDUVNTkzc3N5c7DBHJ48knn2Tu3LlF19+8OcwhPPdc+ITwyU/CihUD73/v3r1cfvnl7Nq1\na+CNjGC59r+Ztbh7U6FtNacgImW3YsXgkoAMHQ0ficioU19ff8J+ShgsJQUREYkpKYiISExJQURE\nYkoKIiISU1IQEWHwl84e6CW1C/nUpz4VP868zHapKCmISPklvy9Vhu9PlfrS2QOVmRSOh5ImBTO7\n1Mz2mNnTZnZzjufNzG6Pnn/czM4pZTzDWvKfoKen9/PJde3t2eWjR+HIkex1yT/yQ4dCvUyvvppd\nznVtlWTfybLIQG3YADfemP4fcA/lDRsG3OTxvnR2Uq4+AJYtW8ZNN93EwoULecMb3sC2bdsAaGtr\n413vehdnnXUWf/mXf8l5551Hc3MzN998M+3t7TQ0NLAi+iJHd3c3H/rQh5g3bx5vfetbaU8eBwbL\n3UuyAJXA74AzgLHAY8BZiTpvB34EGPAW4NeF2m1sbPSBmDzZPfy19b2MH1/4+U2b3E8/3d0s/Lz2\n2uzypk0DCG79eve1a917ekJ53Tr3hobw0z2snzHDffp09+7usC4V1Pnnh3JHR3rd4cPZdSCUDx5M\nlzs6wrrq6uw6nZ1h3aRJ6fiWLg3xpPru7g7lpUsH8GLlRLB79+7iKvb0hL99SP8PJMsD8Oyzzzrg\n27dvd3f3lStX+uc+9zk/duyYn3/++b5//353d7/vvvt85cqV7u6+dOlSf+SRR+I2Dhw4ED+++uqr\n/f7773d397/5m7/x733ve736TK0v1MdHPvIRd3f/13/9V1++fLm7u3/uc5/zVatWubv7zp07vbKy\nMo5l4sSJWa+rsrLSf/vb37q7+1/91V/5N7/5zV6x5Nr/QLMXcewu5TeaFwJPu/szAGZ2H3AlsDuj\nzpXAN6KA/9PMJpvZqe7+4lAGcvLJ8MorhesVSrjt7XD11enyvn3wpS9ll1etCo+L/namewhu48ZQ\n/vzn4f77YceOUF6/Hm64AZ5/PpQbGyG6VgsAv/pVCCzz4jE1Nen6KS+8ADNmpMvV1eFTReaVH199\nFWpr0+u6usJdTw4eDPE0NkJLS/i5Ywc0NIRPDBUahZQBMoPbbguPN25M/x+sXRvWD+J+w8lLZ99+\n++1ceuml8aWzIbzrPvXUU3Nu/9BDD/HZz36WtrY2/vSnPzFv3jze8Y53FOw38/Lcufp45zvfCUBj\nYyN79+4FYPv27axduxaA+fPnc/bZZ/fZ/uzZs2loaOjVxlApZVKYAfw+o9wKnFdEnRnAkCaFYhLC\nUEldB77opNDXP0VDQzjwVlaG8po1sG1bWJfr6mFJmQkgVxngNa/JXa6uhsOHYUz055GZCFLxNDSE\n9UoIMlip/4HU3z4MOiGEZo/vpbNTCvWRuhT2QC+DnbyU9lAPH42I/2gzW2VmzWbW/NJLL5U7nIL6\nfR34zMSQ0tKSXd64sfe65J1JOjrCwTxT8hPDwYPZnw6g9zxEZkKAcOBP9q2EIEMlNYeQKXOOYYCO\n96WzU/L10ZcLL7yQ7373u0C4/ebOnTvj56qqqkp+t7VMpfyvfh6YlVGeGa3rbx3c/W53b3L3pqlT\npw55oEOt39eBz/VPEd3vNbZ2be91yU8I1dVh6ChT8hPCpEmhXqbkJ4aamuzJ5p6e3n03NmqyWQYv\n9be/cWP4G+/pCT83bhx0Yjjel85OyddHX1avXs1LL73EWWedxUc/+lHmzZvHpEmTAFi1ahVnn312\nPNFccsVMPAxkIQxNPQPMJj3RPC9R5zKyJ5p/U6jdgUw0FzPJPFTLhAn9nGxOTqylJnEhPbm7Zk26\ng4YG97a27E6TZXB//vn8ZXA/cqR3OTXxXF0dJp1zxZMsiyQUPdHs3vtEi9T/xPr1A+7/2Wef9Xnz\n5g14++Otq6vL29vb3d396aef9vr6ej969OiA2xuWE83u3mVm1wEPEs5EusfdnzCza6Ln7wK2Es5A\n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\nD8sBrO/h0FaZAAAAAElFTkSuQmCC\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')\n", + "\n", + "###\n", + "pw = df['petal width (cm)']\n", + "pl = df['petal length (cm)']\n", + "\n", + "ax0 = fig.add_subplot(111) \n", + "\n", + "ax0.scatter(pw, y, c = 'b', marker='o', label='petal width')\n", + "ax0.set_xlabel('petal width (cm)')\n", + "ax0.set_ylabel('flower')\n", + "ax0.legend()\n", + "\n", + "ax0.scatter(pl, y, c = 'r', marker='x', label='petal length')\n", + "ax0.set_xlabel('petal length (cm)')\n", + "ax0.set_ylabel('flower')\n", + "ax0.legend()\n", + "\n", + "plt.show()\n", + "###" + ] + }, + { + "cell_type": "code", + "execution_count": 90, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAEKCAYAAAARnO4WAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X28HVV97/HPL+cEwgkUJESLpDkH4YLymCesAQqRBLUE\nocX2Vnq8BcTXqQlSUYtW0eKtoq+Kelu4Bm7KkzapWiN4laJepICKSjyJyEMAFZvEFCoHkDxBJA+/\n+8fMTs7Z2XvP2mfPzJ695/t+veZ1Mmse1tqj/Pbs36y1xtwdERHpfhPa3QAREcmHAr6ISEko4IuI\nlIQCvohISSjgi4iUhAK+iEhJKOCLiJSEAr6ISEko4IuIlERvuxsw2iGHHOIDAwPtboaISMdYtWrV\nM+4+NWTfQgX8gYEBhoeH290MEZGOYWbrQvdVSkdEpCQU8EVESiKzgG9mR5vZA6OWTWZ2WVb1iYhI\nY5nl8N39cWAGgJn1AP8J3NbsebZv386GDRvYtm1byi2UeiZNmsS0adOYOHFiu5siIinK66HtfOAJ\ndw9+uFCxYcMGDjjgAAYGBjCzDJomo7k7zz77LBs2bODwww9vd3NEJEV55fDfCnyx1gYzGzKzYTMb\nHhkZ2Wv7tm3bmDJlioJ9TsyMKVOm6BeVSBfKPOCb2T7AOcBXam1396XuPsfd50ydWrsrqYJ9vnS9\nRZItXw4DAzBhQvR3+fJ2tyhZHimdPwRWu/uvc6hLRCRzy5fD0BC88EK0vm5dtA4wONi+diXJI6Vz\nPnXSOWV3zz33cPbZZwNwyy238K53vSv1Om655RaefPLJ3esDAwM888wzqdcjUiZXXLEn2Fe88EJU\nXmSZBnwzmwycCdyaZT1SX3XAF5HWrV/fXHlRZBrw3X2ru09x941Z1jNa2nm1rVu3snDhQk488USO\nO+44vvzlL7Nq1SpOP/10Zs+ezRvf+EaeeuopAObNm8e73/1uZsyYwXHHHcfKlSsBWLlyJXPnzmXm\nzJmcfPLJPP744w3rHBkZ4S1veQsnnXQSJ510Evfddx8AH/3oR3n729/OvHnzeNWrXsU111yz+5iP\nfexjHH300Zx66qmcf/75fPrTn2bFihUMDw8zODjIjBkzePHFFwG49tprmTVrFscffzyPPfZYaxdI\npISmT2+uvDDcvTDL7NmzvdqaNWv2Kqtn2TL3vj532LP09UXl47VixQp/xzvesXv9+eef97lz5/rT\nTz/t7u5f+tKX/KKLLnJ399NPP333vvfee68fe+yx7u6+ceNG3759u7u733nnnX7eeee5u/vdd9/t\nCxcudHf3m2++2S+55BJ3dz///PP9e9/7nru7r1u3zl/96le7u/uVV17pc+fO9W3btvnIyIgffPDB\n/tJLL/nKlSv9xBNP9BdffNE3bdrkRx55pF999dW72/TjH/94d/v7+/v9mmuucXf3z33uc37xxRfX\n/NzNXHeRsski1owXMOyBMbZQk6e1qlFebbwPUo4//nje97738YEPfICzzz6bl73sZTz88MOceeaZ\nAOzcuZNDDz109/7nn38+AKeddhqbNm3i+eefZ/PmzVxwwQX8/Oc/x8zYvn17wzq/853vsGbNmt3r\nmzZtYsuWLQAsXLiQfffdl3333ZeXv/zl/PrXv+a+++7j3HPPZdKkSUyaNIk3v/nNDc9/3nnnATB7\n9mxuvVXZNpFmDQ7CzTfDXXftKZs7t9gPbKFgs2W2Kou82lFHHcXq1au54447+PCHP8wZZ5zBscce\nyw9/+MOa+1d3aTQzPvKRj/D617+e2267jbVr1zJv3ryGde7atYsf/ehHTJo0aa9t++677+5/9/T0\nsGPHjqY/U+Uc4z1epOwWLx4b7CFaX7wYlixpT5tCdNXkaVnk1Z588kn6+vp429vexuWXX87999/P\nyMjI7oC/fft2Hnnkkd37f/nLXwbg+9//PgceeCAHHnggGzdu5LDDDgOih6hJ3vCGN3DttdfuXn/g\ngQca7n/KKafwjW98g23btrFlyxZuv/323dsOOOAANm/eHPx5RSTZ0qXNlRdFV93hX3XV2L6xAH19\nUfl4PfTQQ1x++eVMmDCBiRMnct1119Hb28tf/dVfsXHjRnbs2MFll13GscceC0Tz0MycOZPt27dz\n0003AfD+97+fCy64gI9//OMsXLgwsc5rrrmGSy65hBNOOIEdO3Zw2mmncf3119fd/6STTuKcc87h\nhBNO4BWveAXHH388Bx54IAAXXngh73znO9lvv/3q/ioRkebs3NlceWGEJvvzWFp9aOsePTTp73c3\ni/7m+RCl+gFpnjZv3uzu7lu3bvXZs2f7qlWrWjqfHtpKmSXFkZ6esQ9sK0tPT/5tpawPbSF6aFL0\nBydZGBoaYs2aNWzbto0LLriAWbNmtbtJIh0pZBTt0BBcd93ex1b2KyqLviCKYc6cOV79isNHH32U\n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\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", + "### \n", + "pl = df['petal length (cm)']\n", + "sl = df['sepal length (cm)']\n", + "\n", + "ax0 = fig.add_subplot(111) \n", + "\n", + "ax0.scatter(sl, pl, c = 'b', marker='o', label='sepallength')\n", + "ax0.set_xlabel('sepal length (cm)')\n", + "ax0.set_ylabel('petal length (cm)')\n", + "ax0.legend()\n", + "\n", + "plt.show()\n", + "\n", + "\n", + "###" + ] + }, + { + "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", + "### \n", + "ins = np.arange(0,df.shape[0])\n", + "sl = df['sepal length (cm)']\n", + "\n", + "ax0 = fig.add_subplot(111)\n", + "\n", + "ax0.plot(ins, sl, c = 'g', marker='', label='sepal length')\n", + "ax0.set_xlabel('sepal length (cm)')\n", + "ax0.set_ylabel('petal length (cm)')\n", + "ax0.legend()\n", + "\n", + "plt.show()\n", + "\n", + "###" + ] + }, + { + "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": 92, + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
06.32.55.01.92.0
16.02.75.11.61.0
25.03.51.60.60.0
35.62.93.61.31.0
46.83.25.92.32.0
56.43.15.51.82.0
66.62.94.61.31.0
76.22.94.31.31.0
86.73.35.72.12.0
96.93.15.12.32.0
106.53.25.12.02.0
115.93.24.81.81.0
126.73.14.71.51.0
135.52.54.01.31.0
145.84.01.20.20.0
155.13.31.70.50.0
165.03.01.60.20.0
177.23.66.12.52.0
184.52.31.30.30.0
195.13.81.90.40.0
205.03.41.50.20.0
216.53.05.22.02.0
224.93.11.50.10.0
234.63.61.00.20.0
246.12.84.71.21.0
255.72.55.02.02.0
265.03.61.40.20.0
276.72.55.81.82.0
285.72.84.11.31.0
294.43.21.30.20.0
..................
1205.03.31.40.20.0
1214.93.01.40.20.0
1224.63.11.50.20.0
1235.13.41.50.20.0
1247.73.06.12.32.0
1257.23.05.81.62.0
1266.33.36.02.52.0
1276.22.24.51.51.0
1286.03.04.81.82.0
1295.43.91.70.40.0
1304.83.01.40.30.0
1316.52.84.61.51.0
1326.32.85.11.52.0
1335.22.73.91.41.0
1346.93.14.91.51.0
1356.83.05.52.12.0
1365.93.04.21.51.0
1375.13.51.40.20.0
1384.92.54.51.72.0
1395.63.04.11.31.0
1407.93.86.42.02.0
1415.73.04.21.21.0
1426.82.84.81.41.0
1436.73.14.41.41.0
1445.13.51.40.30.0
1455.82.75.11.92.0
1465.24.11.50.10.0
1475.13.71.50.40.0
1485.63.04.51.51.0
1495.43.04.51.51.0
\n", + "

150 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n", + "0 6.3 2.5 5.0 1.9 \n", + "1 6.0 2.7 5.1 1.6 \n", + "2 5.0 3.5 1.6 0.6 \n", + "3 5.6 2.9 3.6 1.3 \n", + "4 6.8 3.2 5.9 2.3 \n", + "5 6.4 3.1 5.5 1.8 \n", + "6 6.6 2.9 4.6 1.3 \n", + "7 6.2 2.9 4.3 1.3 \n", + "8 6.7 3.3 5.7 2.1 \n", + "9 6.9 3.1 5.1 2.3 \n", + "10 6.5 3.2 5.1 2.0 \n", + "11 5.9 3.2 4.8 1.8 \n", + "12 6.7 3.1 4.7 1.5 \n", + "13 5.5 2.5 4.0 1.3 \n", + "14 5.8 4.0 1.2 0.2 \n", + "15 5.1 3.3 1.7 0.5 \n", + "16 5.0 3.0 1.6 0.2 \n", + "17 7.2 3.6 6.1 2.5 \n", + "18 4.5 2.3 1.3 0.3 \n", + "19 5.1 3.8 1.9 0.4 \n", + "20 5.0 3.4 1.5 0.2 \n", + "21 6.5 3.0 5.2 2.0 \n", + "22 4.9 3.1 1.5 0.1 \n", + "23 4.6 3.6 1.0 0.2 \n", + "24 6.1 2.8 4.7 1.2 \n", + "25 5.7 2.5 5.0 2.0 \n", + "26 5.0 3.6 1.4 0.2 \n", + "27 6.7 2.5 5.8 1.8 \n", + "28 5.7 2.8 4.1 1.3 \n", + "29 4.4 3.2 1.3 0.2 \n", + ".. ... ... ... ... \n", + "120 5.0 3.3 1.4 0.2 \n", + "121 4.9 3.0 1.4 0.2 \n", + "122 4.6 3.1 1.5 0.2 \n", + "123 5.1 3.4 1.5 0.2 \n", + "124 7.7 3.0 6.1 2.3 \n", + "125 7.2 3.0 5.8 1.6 \n", + "126 6.3 3.3 6.0 2.5 \n", + "127 6.2 2.2 4.5 1.5 \n", + "128 6.0 3.0 4.8 1.8 \n", + "129 5.4 3.9 1.7 0.4 \n", + "130 4.8 3.0 1.4 0.3 \n", + "131 6.5 2.8 4.6 1.5 \n", + "132 6.3 2.8 5.1 1.5 \n", + "133 5.2 2.7 3.9 1.4 \n", + "134 6.9 3.1 4.9 1.5 \n", + "135 6.8 3.0 5.5 2.1 \n", + "136 5.9 3.0 4.2 1.5 \n", + "137 5.1 3.5 1.4 0.2 \n", + "138 4.9 2.5 4.5 1.7 \n", + "139 5.6 3.0 4.1 1.3 \n", + "140 7.9 3.8 6.4 2.0 \n", + "141 5.7 3.0 4.2 1.2 \n", + "142 6.8 2.8 4.8 1.4 \n", + "143 6.7 3.1 4.4 1.4 \n", + "144 5.1 3.5 1.4 0.3 \n", + "145 5.8 2.7 5.1 1.9 \n", + "146 5.2 4.1 1.5 0.1 \n", + "147 5.1 3.7 1.5 0.4 \n", + "148 5.6 3.0 4.5 1.5 \n", + "149 5.4 3.0 4.5 1.5 \n", + "\n", + " target \n", + "0 2.0 \n", + "1 1.0 \n", + "2 0.0 \n", + "3 1.0 \n", + "4 2.0 \n", + "5 2.0 \n", + "6 1.0 \n", + "7 1.0 \n", + "8 2.0 \n", + "9 2.0 \n", + "10 2.0 \n", + "11 1.0 \n", + "12 1.0 \n", + "13 1.0 \n", + "14 0.0 \n", + "15 0.0 \n", + "16 0.0 \n", + "17 2.0 \n", + "18 0.0 \n", + "19 0.0 \n", + "20 0.0 \n", + "21 2.0 \n", + "22 0.0 \n", + "23 0.0 \n", + "24 1.0 \n", + "25 2.0 \n", + "26 0.0 \n", + "27 2.0 \n", + "28 1.0 \n", + "29 0.0 \n", + ".. ... \n", + "120 0.0 \n", + "121 0.0 \n", + "122 0.0 \n", + "123 0.0 \n", + "124 2.0 \n", + "125 2.0 \n", + "126 2.0 \n", + "127 1.0 \n", + "128 2.0 \n", + "129 0.0 \n", + "130 0.0 \n", + "131 1.0 \n", + "132 2.0 \n", + "133 1.0 \n", + "134 1.0 \n", + "135 2.0 \n", + "136 1.0 \n", + "137 0.0 \n", + "138 2.0 \n", + "139 1.0 \n", + "140 2.0 \n", + "141 1.0 \n", + "142 1.0 \n", + "143 1.0 \n", + "144 0.0 \n", + "145 2.0 \n", + "146 0.0 \n", + "147 0.0 \n", + "148 1.0 \n", + "149 1.0 \n", + "\n", + "[150 rows x 5 columns]" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Join target variable to dataframe\n", + "### \n", + "headers.append('target')\n", + "\n", + "k=np.column_stack((X,y))\n", + "\n", + "df = pd.DataFrame(k, columns=headers)\n", + "###\n", + "\n", + "# Randomly shuffle dataframe\n", + "### \n", + "\n", + "df = df.sample(frac=1).reset_index(drop=True)\n", + "###\n", + "\n", + "df" + ] + }, + { + "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., 2., 0., 2., 2., 2., 1., 2., 1., 2., 0., 0.,\n", + " 0., 0., 0., 1., 0., 0., 2., 2., 2., 2., 1., 1., 0.,\n", + " 2., 2., 1., 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": [ + "0.93333333333333335" + ] + }, + "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": [ + " Volume in drive C is teja\n", + " Volume Serial Number is 9E29-9EE1\n", + "\n", + " Directory of C:\\Users\\Teja\\Downloads\\QSTP-ML-master\\QSTP-ML-master\\python-assn\\assn-03\n", + "\n", + "28-05-2018 06:52 PM .\n", + "28-05-2018 06:52 PM ..\n", + "28-05-2018 11:14 AM .ipynb_checkpoints\n", + "28-05-2018 06:52 PM 155,537 Assn-03.ipynb\n", + "28-05-2018 11:16 AM 589 Untitled.ipynb\n", + " 2 File(s) 156,126 bytes\n", + " 3 Dir(s) 43,915,026,432 bytes free\n" + ] + } + ], + "source": [ + "ls" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pickle\n", + "\n", + "# Save dataframe to csv\n", + "### \n", + "df.to_csv('dataframe.csv')\n", + "###\n", + "\n", + "# Save model to model.pkl\n", + "### \n", + "filename = 'model.pkl'\n", + "pickle.dump(pred, open(filename, 'wb'))\n", + "###" + ] + }, + { + "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 [default]", + "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.5.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/python-assn/assn-03/dataframe.csv b/python-assn/assn-03/dataframe.csv new file mode 100644 index 0000000..e48afc2 --- /dev/null +++ b/python-assn/assn-03/dataframe.csv @@ -0,0 +1,151 @@ +,sepal length (cm),sepal width (cm),petal length (cm),petal width (cm),target +0,6.3,2.5,5.0,1.9,2.0 +1,6.0,2.7,5.1,1.6,1.0 +2,5.0,3.5,1.6,0.6,0.0 +3,5.6,2.9,3.6,1.3,1.0 +4,6.8,3.2,5.9,2.3,2.0 +5,6.4,3.1,5.5,1.8,2.0 +6,6.6,2.9,4.6,1.3,1.0 +7,6.2,2.9,4.3,1.3,1.0 +8,6.7,3.3,5.7,2.1,2.0 +9,6.9,3.1,5.1,2.3,2.0 +10,6.5,3.2,5.1,2.0,2.0 +11,5.9,3.2,4.8,1.8,1.0 +12,6.7,3.1,4.7,1.5,1.0 +13,5.5,2.5,4.0,1.3,1.0 +14,5.8,4.0,1.2,0.2,0.0 +15,5.1,3.3,1.7,0.5,0.0 +16,5.0,3.0,1.6,0.2,0.0 +17,7.2,3.6,6.1,2.5,2.0 +18,4.5,2.3,1.3,0.3,0.0 +19,5.1,3.8,1.9,0.4,0.0 +20,5.0,3.4,1.5,0.2,0.0 +21,6.5,3.0,5.2,2.0,2.0 +22,4.9,3.1,1.5,0.1,0.0 +23,4.6,3.6,1.0,0.2,0.0 +24,6.1,2.8,4.7,1.2,1.0 +25,5.7,2.5,5.0,2.0,2.0 +26,5.0,3.6,1.4,0.2,0.0 +27,6.7,2.5,5.8,1.8,2.0 +28,5.7,2.8,4.1,1.3,1.0 +29,4.4,3.2,1.3,0.2,0.0 +30,6.1,2.9,4.7,1.4,1.0 +31,5.1,3.8,1.6,0.2,0.0 +32,6.5,3.0,5.5,1.8,2.0 +33,4.7,3.2,1.3,0.2,0.0 +34,6.7,3.3,5.7,2.5,2.0 +35,6.9,3.1,5.4,2.1,2.0 +36,7.7,2.8,6.7,2.0,2.0 +37,4.6,3.2,1.4,0.2,0.0 +38,7.2,3.2,6.0,1.8,2.0 +39,5.4,3.9,1.3,0.4,0.0 +40,5.5,2.4,3.8,1.1,1.0 +41,6.4,3.2,5.3,2.3,2.0 +42,5.8,2.8,5.1,2.4,2.0 +43,5.8,2.7,3.9,1.2,1.0 +44,5.9,3.0,5.1,1.8,2.0 +45,4.8,3.0,1.4,0.1,0.0 +46,5.3,3.7,1.5,0.2,0.0 +47,4.4,2.9,1.4,0.2,0.0 +48,5.5,4.2,1.4,0.2,0.0 +49,4.6,3.4,1.4,0.3,0.0 +50,6.9,3.2,5.7,2.3,2.0 +51,4.8,3.4,1.6,0.2,0.0 +52,6.2,3.4,5.4,2.3,2.0 +53,5.7,2.9,4.2,1.3,1.0 +54,6.0,2.2,4.0,1.0,1.0 +55,6.3,2.9,5.6,1.8,2.0 +56,4.9,2.4,3.3,1.0,1.0 +57,5.0,3.4,1.6,0.4,0.0 +58,5.1,2.5,3.0,1.1,1.0 +59,5.4,3.7,1.5,0.2,0.0 +60,7.6,3.0,6.6,2.1,2.0 +61,5.0,3.5,1.3,0.3,0.0 +62,5.7,3.8,1.7,0.3,0.0 +63,5.6,2.5,3.9,1.1,1.0 +64,6.4,2.8,5.6,2.1,2.0 +65,6.1,2.6,5.6,1.4,2.0 +66,6.4,2.8,5.6,2.2,2.0 +67,5.8,2.7,4.1,1.0,1.0 +68,6.1,3.0,4.9,1.8,2.0 +69,6.0,2.9,4.5,1.5,1.0 +70,6.6,3.0,4.4,1.4,1.0 +71,4.8,3.1,1.6,0.2,0.0 +72,6.1,2.8,4.0,1.3,1.0 +73,6.3,2.3,4.4,1.3,1.0 +74,6.3,2.5,4.9,1.5,1.0 +75,6.7,3.1,5.6,2.4,2.0 +76,6.2,2.8,4.8,1.8,2.0 +77,6.4,2.7,5.3,1.9,2.0 +78,4.8,3.4,1.9,0.2,0.0 +79,5.0,2.0,3.5,1.0,1.0 +80,5.5,3.5,1.3,0.2,0.0 +81,5.6,2.7,4.2,1.3,1.0 +82,6.1,3.0,4.6,1.4,1.0 +83,6.7,3.0,5.0,1.7,1.0 +84,6.3,3.4,5.6,2.4,2.0 +85,6.5,3.0,5.8,2.2,2.0 +86,5.7,4.4,1.5,0.4,0.0 +87,7.7,2.6,6.9,2.3,2.0 +88,7.0,3.2,4.7,1.4,1.0 +89,7.4,2.8,6.1,1.9,2.0 +90,5.4,3.4,1.7,0.2,0.0 +91,5.8,2.6,4.0,1.2,1.0 +92,6.0,3.4,4.5,1.6,1.0 +93,6.7,3.0,5.2,2.3,2.0 +94,5.5,2.4,3.7,1.0,1.0 +95,5.0,2.3,3.3,1.0,1.0 +96,5.8,2.7,5.1,1.9,2.0 +97,5.2,3.4,1.4,0.2,0.0 +98,5.7,2.8,4.5,1.3,1.0 +99,5.0,3.2,1.2,0.2,0.0 +100,5.5,2.3,4.0,1.3,1.0 +101,4.3,3.0,1.1,0.1,0.0 +102,7.3,2.9,6.3,1.8,2.0 +103,7.7,3.8,6.7,2.2,2.0 +104,5.6,2.8,4.9,2.0,2.0 +105,5.5,2.6,4.4,1.2,1.0 +106,6.3,2.7,4.9,1.8,2.0 +107,4.4,3.0,1.3,0.2,0.0 +108,6.4,3.2,4.5,1.5,1.0 +109,5.4,3.4,1.5,0.4,0.0 +110,4.7,3.2,1.6,0.2,0.0 +111,6.0,2.2,5.0,1.5,2.0 +112,5.1,3.8,1.5,0.3,0.0 +113,5.2,3.5,1.5,0.2,0.0 +114,4.9,3.1,1.5,0.1,0.0 +115,6.4,2.9,4.3,1.3,1.0 +116,4.9,3.1,1.5,0.1,0.0 +117,5.7,2.6,3.5,1.0,1.0 +118,6.3,3.3,4.7,1.6,1.0 +119,7.1,3.0,5.9,2.1,2.0 +120,5.0,3.3,1.4,0.2,0.0 +121,4.9,3.0,1.4,0.2,0.0 +122,4.6,3.1,1.5,0.2,0.0 +123,5.1,3.4,1.5,0.2,0.0 +124,7.7,3.0,6.1,2.3,2.0 +125,7.2,3.0,5.8,1.6,2.0 +126,6.3,3.3,6.0,2.5,2.0 +127,6.2,2.2,4.5,1.5,1.0 +128,6.0,3.0,4.8,1.8,2.0 +129,5.4,3.9,1.7,0.4,0.0 +130,4.8,3.0,1.4,0.3,0.0 +131,6.5,2.8,4.6,1.5,1.0 +132,6.3,2.8,5.1,1.5,2.0 +133,5.2,2.7,3.9,1.4,1.0 +134,6.9,3.1,4.9,1.5,1.0 +135,6.8,3.0,5.5,2.1,2.0 +136,5.9,3.0,4.2,1.5,1.0 +137,5.1,3.5,1.4,0.2,0.0 +138,4.9,2.5,4.5,1.7,2.0 +139,5.6,3.0,4.1,1.3,1.0 +140,7.9,3.8,6.4,2.0,2.0 +141,5.7,3.0,4.2,1.2,1.0 +142,6.8,2.8,4.8,1.4,1.0 +143,6.7,3.1,4.4,1.4,1.0 +144,5.1,3.5,1.4,0.3,0.0 +145,5.8,2.7,5.1,1.9,2.0 +146,5.2,4.1,1.5,0.1,0.0 +147,5.1,3.7,1.5,0.4,0.0 +148,5.6,3.0,4.5,1.5,1.0 +149,5.4,3.0,4.5,1.5,1.0 diff --git a/python-assn/assn-03/model.pkl b/python-assn/assn-03/model.pkl new file mode 100644 index 0000000..3319d2d Binary files /dev/null and b/python-assn/assn-03/model.pkl differ