diff --git a/python-assn/assn-01/Assignment1.ipynb b/python-assn/assn-01/.ipynb_checkpoints/Assignment1-checkpoint.ipynb similarity index 53% rename from python-assn/assn-01/Assignment1.ipynb rename to python-assn/assn-01/.ipynb_checkpoints/Assignment1-checkpoint.ipynb index 2456c0b..e81e1d2 100644 --- a/python-assn/assn-01/Assignment1.ipynb +++ b/python-assn/assn-01/.ipynb_checkpoints/Assignment1-checkpoint.ipynb @@ -24,13 +24,31 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "23455\n" + ] + } + ], "source": [ "def least_int(num):\n", - " #write your code here\n", - " pass" + " lis=str(num)\n", + " num=[]\n", + " ans=0\n", + " for i in range(len(lis)):\n", + " num.append(int(lis[i]))\t\n", + " for i in range(1,10):\n", + " a=num.count(i)\n", + " for j in range(a):\n", + " ans=ans*10+i\n", + " print(ans)\n", + " pass\n", + "least_int(54235)" ] }, { @@ -51,13 +69,27 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "eed\n" + ] + } + ], "source": [ "def function_a(string1):\n", - " #write your code here\n", - " pass" + " element=list(map(str,string1.split()))\n", + " for ele in element:\n", + " if ele[0]=='a':\n", + " print(ele[len(ele)-1],end='')\n", + " print()\n", + " pass\n", + "mystring = 'apple banana aeroplace machine learning python append'\n", + "function_a(mystring)" ] }, { @@ -76,13 +108,27 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ML at is Vedang Pro \n" + ] + } + ], "source": [ "def remove_dup(mystring):\n", - " #write your code here\n", - " pass" + " abc=set(map(str,mystring.split()))\n", + " strg=''\n", + " for i in abc:\n", + " strg=strg+i+' '\n", + " print(strg)\n", + " pass\n", + "mystr='Vedang Pro is Pro at ML'\n", + "remove_dup(mystr)" ] }, { @@ -100,12 +146,24 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Yes Palindrome\n" + ] + } + ], "source": [ - "mystring = '' #give any random string\n", - "#write your code here" + "mystring='SatanoscillatemymetallicsonataS'\n", + "yourstring=mystring[::-1]\n", + "if mystring==yourstring:\n", + "\tprint(\"Yes Palindrome\")\n", + "else:\n", + "\tprint(\"not pali...\")" ] }, { @@ -124,13 +182,25 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1.0, 1.5, 2.0, 2.5, 3.0]\n" + ] + } + ], "source": [ "def list_of_avgs(a):\n", - " #write your code here\n", - " pass" + " lis=[]\n", + " lis.extend(sum(a[i-1] for i in range(1,n+1))/n for n in range(1,len(a)+1))\n", + " print(lis)\n", + " pass\n", + "a = [1, 2, 3, 4, 5]\n", + "list_of_avgs(a)" ] }, { @@ -150,13 +220,46 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 9, 2, 8, 3, 5, 4, 5, 4]\n" + ] + } + ], "source": [ - "def asc_decc_list(a):\n", - " #write your code here\n", - " pass\n" + "def asc_desc_list(a):\n", + " lis_e=[]\n", + " lis_o=[]\n", + " final=[]\n", + " x=y=0\n", + " flag=0\n", + " for i in range(len(a)):\n", + " if flag==0:\n", + " lis_e.append(a[i])\n", + " flag=1\n", + " else:\n", + " lis_o.append(a[i])\n", + " flag=0\n", + " lis_e.sort()\n", + " lis_o.sort(reverse=True)\n", + " flag=0\n", + " for i in range(len(a)):\n", + " if flag==0:\n", + " final.append(lis_e[x])\n", + " x+=1\n", + " flag=1\n", + " else:\n", + " final.append(lis_o[y])\n", + " y+=1\n", + " flag=0\n", + " print(final)\n", + "a = [1, 8, 4, 5, 2, 5, 3, 9, 4]\n", + "asc_desc_list(a)" ] }, { @@ -169,11 +272,40 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "1\n", + "2\n", + "3\n", + "5\n", + "8\n", + "13\n", + "21\n", + "34\n" + ] + } + ], "source": [ - "#write your code here" + "def fibo(n):\n", + " abcd=[0,1]\n", + " if n==0:\n", + " print(0)\n", + " return abcd[n]\n", + " if n==1:\n", + " print(1)\n", + " return abcd[n]\n", + " for i in range(2,n):\n", + " a=abcd[i-1]+abcd[i-2]\n", + " abcd.append(abcd[i-1]+abcd[i-2])\n", + " for i in range(1,len(abcd)):\n", + " print(abcd[i])\n", + "fibo(10)" ] }, { @@ -192,45 +324,60 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3]" + ] + } + ], "source": [ "def sub_lists(a):\n", - " #write your code here\n", - " pass" + " list1=[]\n", + " print(list1,end='')\n", + " for i in range(0,len(a)):\n", + " for j in range(i+1,len(a)+1):\n", + " print(',',a[i:j],end='')\n", + "a=[1,2,3]\n", + "sub_lists(a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "---\n", + "___\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": 26, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[1, 2, 3]\n", + "[1, 2, 3, 6]\n", "[1, 2, 3]\n" ] } ], "source": [ "def modify_list(a):\n", - " #write your code here\n", + " sum1=sum(a)\n", + " a.append(sum1)\n", " pass\n", "\n", "def reassign_list(a):\n", - " #write your code here\n", + " list1=[a[i]+1 for i in range(len(a))]\n", + " a=list1\n", " pass\n", "a = [1, 2, 3]\n", "modify_list(a)\n", @@ -259,13 +406,27 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 31, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1: 'M', 2: 'a', 3: 'c', 4: 'h', 5: 'i', 6: 'n', 7: 'e', 9: 'L', 10: 'e', 11: 'a', 12: 'r', 13: 'n', 14: 'i', 15: 'n', 16: 'g'}\n" + ] + } + ], "source": [ "def char_position(a):\n", - " #write your code here\n", - " pass" + " abcd=dict({i+1: a[i] for i in range(len(a))})\n", + " for x in list(abcd.keys()):\n", + " if abcd[x].isalpha()==False:\n", + " del abcd[x]\n", + " print(abcd)\n", + " pass\n", + "a = 'Machine Learning'\n", + "char_position(a)" ] }, { @@ -286,13 +447,36 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hggaasssiiiuuuuddddbbbbfffff\n" + ] + } + ], "source": [ + "import string\n", "def sort_by_freq(a):\n", - " #write your code here\n", - " pass" + " d = dict.fromkeys(string.ascii_lowercase, 0)\n", + " for i in range(0,len(a)):\n", + " d[a[i]]+=1\n", + " pass\n", + " flag=1\n", + " str1=''\n", + " while flag:\n", + " abc=max(d, key=d.get)\n", + " if d[abc]==0:\n", + " break\n", + " for x in range(0,d[abc]):\n", + " str1=abc+str1 \n", + " d[abc]=0\n", + " print(str1)\n", + "a = 'ifadhaiusbdufbugfsdbfubgsidf'\n", + "sort_by_freq(a)" ] }, { @@ -312,6 +496,42 @@ "**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": [ + "4\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n=int(input())\n", + "fo=open(\"myfile.txt\",'r')\n", + "abcd=fo.read().split()\n", + "name=abcd[n-1]\n", + "f1=open(name,'w')\n", + "for i in range(len(abcd)-1,-1,-1):\n", + " f1.write(abcd[i])\n", + " f1.write(' ')\n", + "fo.close\n", + "f1.close" + ] } ], "metadata": { @@ -330,7 +550,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.5" + "version": "3.6.1" } }, "nbformat": 4, diff --git a/python-assn/assn-01/.ipynb_checkpoints/Vinayak_Assignment1-checkpoint.ipynb b/python-assn/assn-01/.ipynb_checkpoints/Vinayak_Assignment1-checkpoint.ipynb new file mode 100644 index 0000000..0844b46 --- /dev/null +++ b/python-assn/assn-01/.ipynb_checkpoints/Vinayak_Assignment1-checkpoint.ipynb @@ -0,0 +1,558 @@ +{ + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "23455\n" + ] + } + ], + "source": [ + "def least_int(num):\n", + " lis=str(num)\n", + " num=[]\n", + " ans=0\n", + " for i in range(len(lis)):\n", + " num.append(int(lis[i]))\t\n", + " for i in range(1,10):\n", + " a=num.count(i)\n", + " for j in range(a):\n", + " ans=ans*10+i\n", + " print(ans)\n", + " pass\n", + "least_int(54235)" + ] + }, + { + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "eed\n" + ] + } + ], + "source": [ + "def function_a(string1):\n", + " element=list(map(str,string1.split()))\n", + " for ele in element:\n", + " if ele[0]=='a':\n", + " print(ele[len(ele)-1],end='')\n", + " print()\n", + " pass\n", + "mystring = 'apple banana aeroplace machine learning python append'\n", + "function_a(mystring)" + ] + }, + { + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Vedang Pro ML is at \n" + ] + } + ], + "source": [ + "def remove_dup(mystring):\n", + " abc=set(map(str,mystring.split()))\n", + " strg=''\n", + " for i in abc:\n", + " strg=strg+i+' '\n", + " print(strg)\n", + " pass\n", + "mystr='Vedang Pro is Pro at ML'\n", + "remove_dup(mystr)" + ] + }, + { + "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": [ + "Yes Palindrome\n" + ] + } + ], + "source": [ + "mystring='SatanoscillatemymetallicsonataS'\n", + "yourstring=mystring[::-1]\n", + "if mystring==yourstring:\n", + "\tprint(\"Yes Palindrome\")\n", + "else:\n", + "\tprint(\"not pali...\")" + ] + }, + { + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1.0, 1.5, 2.0, 2.5, 3.0]\n" + ] + } + ], + "source": [ + "def list_of_avgs(a):\n", + " lis=[]\n", + " lis.extend(sum(a[i-1] for i in range(1,n+1))/n for n in range(1,len(a)+1))\n", + " print(lis)\n", + " pass\n", + "a = [1, 2, 3, 4, 5]\n", + "list_of_avgs(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "___\n", + "**Q6) Given a list of random integers, modify the list such that all the elements in even places are in ascending order and all those in the odd places appear in a decreasing order. Assume labeling of the places start from the number zero.**\n", + "\n", + "For e.g.\n", + "```\n", + ">>> a = [1, 8, 4, 5, 2, 5, 3, 9, 4]\n", + ">>> asc_desc_list(a)\n", + "[1, 9, 2, 8, 3, 5, 4, 5, 4]\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 9, 2, 8, 3, 5, 4, 5, 4]\n" + ] + } + ], + "source": [ + "def asc_desc_list(a):\n", + " lis_e=[]\n", + " lis_o=[]\n", + " final=[]\n", + " x=y=0\n", + " flag=0\n", + " for i in range(len(a)):\n", + " if flag==0:\n", + " lis_e.append(a[i])\n", + " flag=1\n", + " else:\n", + " lis_o.append(a[i])\n", + " flag=0\n", + " lis_e.sort()\n", + " lis_o.sort(reverse=True)\n", + " flag=0\n", + " for i in range(len(a)):\n", + " if flag==0:\n", + " final.append(lis_e[x])\n", + " x+=1\n", + " flag=1\n", + " else:\n", + " final.append(lis_o[y])\n", + " y+=1\n", + " flag=0\n", + " print(final)\n", + "a = [1, 8, 4, 5, 2, 5, 3, 9, 4]\n", + "asc_desc_list(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "___\n", + "**Q7) Write an iterator function to return the elements of the Fibonacci series.**" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "1\n", + "2\n", + "3\n", + "5\n", + "8\n", + "13\n", + "21\n", + "34\n" + ] + } + ], + "source": [ + "def fibo(n):\n", + " abcd=[0,1]\n", + " if n==0:\n", + " print(0)\n", + " return abcd[n]\n", + " if n==1:\n", + " print(1)\n", + " return abcd[n]\n", + " for i in range(2,n):\n", + " a=abcd[i-1]+abcd[i-2]\n", + " abcd.append(abcd[i-1]+abcd[i-2])\n", + " for i in range(1,len(abcd)):\n", + " print(abcd[i])\n", + "fibo(10)" + ] + }, + { + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3]" + ] + } + ], + "source": [ + "def sub_lists(a):\n", + " list1=[]\n", + " print(list1,end='')\n", + " for i in range(0,len(a)):\n", + " for j in range(i+1,len(a)+1):\n", + " print(',',a[i:j],end='')\n", + "a=[1,2,3]\n", + "sub_lists(a)" + ] + }, + { + "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", + " sum1=sum(a)\n", + " a.append(sum1)\n", + " pass\n", + "\n", + "def reassign_list(a):\n", + " list1=[a[i]+1 for i in range(len(a))]\n", + " a=list1\n", + " pass\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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1: 'M', 2: 'a', 3: 'c', 4: 'h', 5: 'i', 6: 'n', 7: 'e', 9: 'L', 10: 'e', 11: 'a', 12: 'r', 13: 'n', 14: 'i', 15: 'n', 16: 'g'}\n" + ] + } + ], + "source": [ + "def char_position(a):\n", + " abcd=dict({i+1: a[i] for i in range(len(a))})\n", + " for x in list(abcd.keys()):\n", + " if abcd[x].isalpha()==False:\n", + " del abcd[x]\n", + " print(abcd)\n", + " pass\n", + "a = 'Machine Learning'\n", + "char_position(a)" + ] + }, + { + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hggaasssiiiuuuuddddbbbbfffff\n" + ] + } + ], + "source": [ + "import string\n", + "def sort_by_freq(a):\n", + " d = dict.fromkeys(string.ascii_lowercase, 0)\n", + " for i in range(0,len(a)):\n", + " d[a[i]]+=1\n", + " pass\n", + " flag=1\n", + " str1=''\n", + " while flag:\n", + " abc=max(d, key=d.get)\n", + " if d[abc]==0:\n", + " break\n", + " for x in range(0,d[abc]):\n", + " str1=abc+str1 \n", + " d[abc]=0\n", + " print(str1)\n", + "a = 'ifadhaiusbdufbugfsdbfubgsidf'\n", + "sort_by_freq(a)" + ] + }, + { + "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": [ + "4\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n=int(input())\n", + "fo=open(\"myfile.txt\",'r')\n", + "abcd=fo.read().split()\n", + "name=abcd[n-1]\n", + "f1=open(name,'w')\n", + "for i in range(len(abcd)-1,-1,-1):\n", + " f1.write(abcd[i])\n", + " f1.write(' ')\n", + "fo.close\n", + "f1.close" + ] + } + ], + "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.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/python-assn/assn-01/Vinayak_Assignment1.ipynb b/python-assn/assn-01/Vinayak_Assignment1.ipynb new file mode 100644 index 0000000..0844b46 --- /dev/null +++ b/python-assn/assn-01/Vinayak_Assignment1.ipynb @@ -0,0 +1,558 @@ +{ + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "23455\n" + ] + } + ], + "source": [ + "def least_int(num):\n", + " lis=str(num)\n", + " num=[]\n", + " ans=0\n", + " for i in range(len(lis)):\n", + " num.append(int(lis[i]))\t\n", + " for i in range(1,10):\n", + " a=num.count(i)\n", + " for j in range(a):\n", + " ans=ans*10+i\n", + " print(ans)\n", + " pass\n", + "least_int(54235)" + ] + }, + { + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "eed\n" + ] + } + ], + "source": [ + "def function_a(string1):\n", + " element=list(map(str,string1.split()))\n", + " for ele in element:\n", + " if ele[0]=='a':\n", + " print(ele[len(ele)-1],end='')\n", + " print()\n", + " pass\n", + "mystring = 'apple banana aeroplace machine learning python append'\n", + "function_a(mystring)" + ] + }, + { + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Vedang Pro ML is at \n" + ] + } + ], + "source": [ + "def remove_dup(mystring):\n", + " abc=set(map(str,mystring.split()))\n", + " strg=''\n", + " for i in abc:\n", + " strg=strg+i+' '\n", + " print(strg)\n", + " pass\n", + "mystr='Vedang Pro is Pro at ML'\n", + "remove_dup(mystr)" + ] + }, + { + "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": [ + "Yes Palindrome\n" + ] + } + ], + "source": [ + "mystring='SatanoscillatemymetallicsonataS'\n", + "yourstring=mystring[::-1]\n", + "if mystring==yourstring:\n", + "\tprint(\"Yes Palindrome\")\n", + "else:\n", + "\tprint(\"not pali...\")" + ] + }, + { + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1.0, 1.5, 2.0, 2.5, 3.0]\n" + ] + } + ], + "source": [ + "def list_of_avgs(a):\n", + " lis=[]\n", + " lis.extend(sum(a[i-1] for i in range(1,n+1))/n for n in range(1,len(a)+1))\n", + " print(lis)\n", + " pass\n", + "a = [1, 2, 3, 4, 5]\n", + "list_of_avgs(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "___\n", + "**Q6) Given a list of random integers, modify the list such that all the elements in even places are in ascending order and all those in the odd places appear in a decreasing order. Assume labeling of the places start from the number zero.**\n", + "\n", + "For e.g.\n", + "```\n", + ">>> a = [1, 8, 4, 5, 2, 5, 3, 9, 4]\n", + ">>> asc_desc_list(a)\n", + "[1, 9, 2, 8, 3, 5, 4, 5, 4]\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 9, 2, 8, 3, 5, 4, 5, 4]\n" + ] + } + ], + "source": [ + "def asc_desc_list(a):\n", + " lis_e=[]\n", + " lis_o=[]\n", + " final=[]\n", + " x=y=0\n", + " flag=0\n", + " for i in range(len(a)):\n", + " if flag==0:\n", + " lis_e.append(a[i])\n", + " flag=1\n", + " else:\n", + " lis_o.append(a[i])\n", + " flag=0\n", + " lis_e.sort()\n", + " lis_o.sort(reverse=True)\n", + " flag=0\n", + " for i in range(len(a)):\n", + " if flag==0:\n", + " final.append(lis_e[x])\n", + " x+=1\n", + " flag=1\n", + " else:\n", + " final.append(lis_o[y])\n", + " y+=1\n", + " flag=0\n", + " print(final)\n", + "a = [1, 8, 4, 5, 2, 5, 3, 9, 4]\n", + "asc_desc_list(a)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "___\n", + "**Q7) Write an iterator function to return the elements of the Fibonacci series.**" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n", + "1\n", + "2\n", + "3\n", + "5\n", + "8\n", + "13\n", + "21\n", + "34\n" + ] + } + ], + "source": [ + "def fibo(n):\n", + " abcd=[0,1]\n", + " if n==0:\n", + " print(0)\n", + " return abcd[n]\n", + " if n==1:\n", + " print(1)\n", + " return abcd[n]\n", + " for i in range(2,n):\n", + " a=abcd[i-1]+abcd[i-2]\n", + " abcd.append(abcd[i-1]+abcd[i-2])\n", + " for i in range(1,len(abcd)):\n", + " print(abcd[i])\n", + "fibo(10)" + ] + }, + { + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[], [1], [1, 2], [1, 2, 3], [2], [2, 3], [3]" + ] + } + ], + "source": [ + "def sub_lists(a):\n", + " list1=[]\n", + " print(list1,end='')\n", + " for i in range(0,len(a)):\n", + " for j in range(i+1,len(a)+1):\n", + " print(',',a[i:j],end='')\n", + "a=[1,2,3]\n", + "sub_lists(a)" + ] + }, + { + "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", + " sum1=sum(a)\n", + " a.append(sum1)\n", + " pass\n", + "\n", + "def reassign_list(a):\n", + " list1=[a[i]+1 for i in range(len(a))]\n", + " a=list1\n", + " pass\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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{1: 'M', 2: 'a', 3: 'c', 4: 'h', 5: 'i', 6: 'n', 7: 'e', 9: 'L', 10: 'e', 11: 'a', 12: 'r', 13: 'n', 14: 'i', 15: 'n', 16: 'g'}\n" + ] + } + ], + "source": [ + "def char_position(a):\n", + " abcd=dict({i+1: a[i] for i in range(len(a))})\n", + " for x in list(abcd.keys()):\n", + " if abcd[x].isalpha()==False:\n", + " del abcd[x]\n", + " print(abcd)\n", + " pass\n", + "a = 'Machine Learning'\n", + "char_position(a)" + ] + }, + { + "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": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hggaasssiiiuuuuddddbbbbfffff\n" + ] + } + ], + "source": [ + "import string\n", + "def sort_by_freq(a):\n", + " d = dict.fromkeys(string.ascii_lowercase, 0)\n", + " for i in range(0,len(a)):\n", + " d[a[i]]+=1\n", + " pass\n", + " flag=1\n", + " str1=''\n", + " while flag:\n", + " abc=max(d, key=d.get)\n", + " if d[abc]==0:\n", + " break\n", + " for x in range(0,d[abc]):\n", + " str1=abc+str1 \n", + " d[abc]=0\n", + " print(str1)\n", + "a = 'ifadhaiusbdufbugfsdbfubgsidf'\n", + "sort_by_freq(a)" + ] + }, + { + "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": [ + "4\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "n=int(input())\n", + "fo=open(\"myfile.txt\",'r')\n", + "abcd=fo.read().split()\n", + "name=abcd[n-1]\n", + "f1=open(name,'w')\n", + "for i in range(len(abcd)-1,-1,-1):\n", + " f1.write(abcd[i])\n", + " f1.write(' ')\n", + "fo.close\n", + "f1.close" + ] + } + ], + "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.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/python-assn/assn-01/myfile.txt b/python-assn/assn-01/myfile.txt new file mode 100644 index 0000000..8e5580f --- /dev/null +++ b/python-assn/assn-01/myfile.txt @@ -0,0 +1 @@ +hey sjdfj foasidu namename oslakj iosdfupo lajhio soadfoin hofsu asdoyuf hasdof asoasd asdhklf asdfhl ioasfu diff --git a/python-assn/assn-01/namename b/python-assn/assn-01/namename new file mode 100644 index 0000000..e69de29 diff --git a/python-assn/assn-02/.ipynb_checkpoints/Assignment2-checkpoint.ipynb b/python-assn/assn-02/.ipynb_checkpoints/Assignment2-checkpoint.ipynb new file mode 100644 index 0000000..fe61c52 --- /dev/null +++ b/python-assn/assn-02/.ipynb_checkpoints/Assignment2-checkpoint.ipynb @@ -0,0 +1,353 @@ +{ + "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": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "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.resize(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": 9, + "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=A*A\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": 118, + "metadata": {}, + "outputs": [], + "source": [ + "#Create a numpy array of shape (28,28) whose values are chosen randomly from 0-255\n", + "import random\n", + "#################################\n", + "C=np.random.randint(0,256,28*28)\n", + "C.resize(28,28)\n", + "#print(C)\n", + "#################################\n", + "\n", + "#Convert x into a vector (Make it of single dimension)\n", + "#################################\n", + "x=np.array([3,2,5,7,5,4,6,8,9])\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.append([1],x)\n", + "#print(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.01, (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", + "abc=np.matmul(W,x)\n", + "#print(abc)\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "scrolled": true + }, + "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", + "data=np.genfromtxt('Iris.csv',delimiter=',')\n", + "np.random.shuffle(data)\n", + "#print(data)\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:,0:4]\n", + "Y=data[0:,4:5]\n", + "#print(X,Y)\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "first 10 value:\n", + " [[ 5.9 3. 4.2 1.5 1. ]\n", + " [ 5.9 3.2 4.8 1.8 1. ]\n", + " [ 5.5 3.5 1.3 0.2 0. ]\n", + " [ 6.3 3.4 5.6 2.4 2. ]\n", + " [ 5.5 4.2 1.4 0.2 0. ]\n", + " [ 4.9 2.4 3.3 1. 1. ]\n", + " [ 5.8 2.7 5.1 1.9 2. ]\n", + " [ 6.1 2.6 5.6 1.4 2. ]\n", + " [ 6.5 3. 5.2 2. 2. ]\n", + " [ 7. 3.2 4.7 1.4 1. ]]\n", + "last 10 value:\n", + " [[ 7.7 3. 6.1 2.3 2. ]\n", + " [ 6.3 2.5 4.9 1.5 1. ]\n", + " [ 5.2 4.1 1.5 0.1 0. ]\n", + " [ 5.7 3.8 1.7 0.3 0. ]\n", + " [ 6.5 3.2 5.1 2. 2. ]\n", + " [ 5.8 2.7 4.1 1. 1. ]\n", + " [ 5. 2.3 3.3 1. 1. ]\n", + " [ 5.2 3.5 1.5 0.2 0. ]\n", + " [ 5.4 3.4 1.7 0.2 0. ]\n", + " [ 7.1 3. 5.9 2.1 2. ]]\n", + "All rows of X whose corresponding value in y is 2\n", + "[ 6.3 3.4 5.6 2.4]\n", + "[ 5.8 2.7 5.1 1.9]\n", + "[ 6.1 2.6 5.6 1.4]\n", + "[ 6.5 3. 5.2 2. ]\n", + "[ 6.3 2.7 4.9 1.8]\n", + "[ 6.4 2.8 5.6 2.2]\n", + "[ 7.2 3. 5.8 1.6]\n", + "[ 6.9 3.2 5.7 2.3]\n", + "[ 6.4 3.2 5.3 2.3]\n", + "[ 7.6 3. 6.6 2.1]\n", + "[ 6.3 2.5 5. 1.9]\n", + "[ 6. 3. 4.8 1.8]\n", + "[ 6.5 3. 5.8 2.2]\n", + "[ 7.2 3.2 6. 1.8]\n", + "[ 6.7 3.1 5.6 2.4]\n", + "[ 5.8 2.7 5.1 1.9]\n", + "[ 7.9 3.8 6.4 2. ]\n", + "[ 5.8 2.8 5.1 2.4]\n", + "[ 6.9 3.1 5.1 2.3]\n", + "[ 6.7 2.5 5.8 1.8]\n", + "[ 6.7 3.3 5.7 2.5]\n", + "[ 6. 2.2 5. 1.5]\n", + "[ 5.6 2.8 4.9 2. ]\n", + "[ 6.2 3.4 5.4 2.3]\n", + "[ 6.5 3. 5.5 1.8]\n", + "[ 6.2 2.8 4.8 1.8]\n", + "[ 6.4 3.1 5.5 1.8]\n", + "[ 7.3 2.9 6.3 1.8]\n", + "[ 6.4 2.7 5.3 1.9]\n", + "[ 6.7 3. 5.2 2.3]\n", + "[ 7.7 2.6 6.9 2.3]\n", + "[ 5.9 3. 5.1 1.8]\n", + "[ 7.2 3.6 6.1 2.5]\n", + "[ 6.8 3.2 5.9 2.3]\n", + "[ 7.7 2.8 6.7 2. ]\n", + "[ 6.9 3.1 5.4 2.1]\n", + "[ 6.8 3. 5.5 2.1]\n", + "[ 5.7 2.5 5. 2. ]\n", + "[ 6.3 2.8 5.1 1.5]\n", + "[ 7.7 3.8 6.7 2.2]\n", + "[ 4.9 2.5 4.5 1.7]\n", + "[ 6.1 3. 4.9 1.8]\n", + "[ 6.3 3.3 6. 2.5]\n", + "[ 6.3 2.9 5.6 1.8]\n", + "[ 7.4 2.8 6.1 1.9]\n", + "[ 6.7 3.3 5.7 2.1]\n", + "[ 6.4 2.8 5.6 2.1]\n", + "[ 7.7 3. 6.1 2.3]\n", + "[ 6.5 3.2 5.1 2. ]\n", + "[ 7.1 3. 5.9 2.1]\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(\"first 10 value:\\n\",data[0:10])\n", + "print(\"last 10 value:\\n\",data[-10::1])\n", + "print(\"All rows of X whose corresponding value in y is 2\",)\n", + "for i in data:\n", + " if i[4]==2:\n", + " print(i[0:4])\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "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", + "y1 = np.empty((0,3),int)\n", + "for i in range(0,len(Y)):\n", + " if(Y[i])==0:\n", + " y1=np.append(y1,np.array([[1,0,0]]),axis=0)\n", + " elif(Y[i])==1:\n", + " y1=np.append(y1,np.array([[0,1,0]]),axis=0)\n", + " elif(Y[i])==2:\n", + " y1=np.append(y1,np.array([[0,0,1]]),axis=0) \n", + "#print(y1)\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "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", + "temp=np.empty((1,32,64,3),int)\n", + "for i in range(0,32):\n", + " for j in range(0,64):\n", + " for k in range(0,3):\n", + " temp[0][i][j][k]=A[i][j][k]\n", + "A=mat\n", + "print(A.shape)\n", + "#################################" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Expected Output:
(1,32,64,3)" + ] + } + ], + "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.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/python-assn/assn-02/Assignment2.ipynb b/python-assn/assn-02/Assignment2.ipynb deleted file mode 100644 index 512dbcc..0000000 --- a/python-assn/assn-02/Assignment2.ipynb +++ /dev/null @@ -1,206 +0,0 @@ -{ - "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": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "A=np.arange(16) #This creates a vector with values from 0 to 15.\n", - "\n", - "#Reshape A into a 4x4 numpy array and print the array\n", - "#################################\n", - "\n", - "#################################" - ] - }, - { - "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": null, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "#Create another array B which is made of square of each elements of B and print B.\n", - "#################################\n", - "\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": null, - "metadata": {}, - "outputs": [], - "source": [ - "#Create a numpy array of shape (28,28) whose values are chosen randomly from 0-255\n", - "#################################\n", - "\n", - "#################################\n", - "\n", - "#Convert x into a vector (Make it of single dimension)\n", - "#################################\n", - "\n", - "#################################\n", - "\n", - "#Add the number 1 at the start of x\n", - "# e.g.: If x is [3,2,5,7,5,...], new x should be [1,3,2,5,7,5,...]\n", - "#################################\n", - "\n", - "#################################\n", - "\n", - "#Create vector W of shape (785,10) whose values follow a normal distribution with mean=0 and standard dev=0.01\n", - "#################################\n", - "\n", - "#################################\n", - "\n", - "#Multiply the 2 matrices W and x. (Keep in mind the shape of the two)\n", - "#################################\n", - "\n", - "#################################" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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", - "\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", - "\n", - "#################################" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Print the following:\n", - "# 1) First 10 values of data\n", - "# 2) Last 10 values of data\n", - "# 3) All rows of X whose corresponding value in y is 2\n", - "\n", - "#################################\n", - "\n", - "#################################" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "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", - "#################################" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "A=np.random.randint(100,size=(32,64,3))\n", - "# Convert A into shape (1,32,64,3) without using np.reshape()\n", - "#################################\n", - "\n", - "#################################" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Expected Output:
(1,32,64,3)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/python-assn/assn-02/Vinayak_Assignment2.ipynb b/python-assn/assn-02/Vinayak_Assignment2.ipynb new file mode 100644 index 0000000..fe61c52 --- /dev/null +++ b/python-assn/assn-02/Vinayak_Assignment2.ipynb @@ -0,0 +1,353 @@ +{ + "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": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "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.resize(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": 9, + "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=A*A\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": 118, + "metadata": {}, + "outputs": [], + "source": [ + "#Create a numpy array of shape (28,28) whose values are chosen randomly from 0-255\n", + "import random\n", + "#################################\n", + "C=np.random.randint(0,256,28*28)\n", + "C.resize(28,28)\n", + "#print(C)\n", + "#################################\n", + "\n", + "#Convert x into a vector (Make it of single dimension)\n", + "#################################\n", + "x=np.array([3,2,5,7,5,4,6,8,9])\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.append([1],x)\n", + "#print(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.01, (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", + "abc=np.matmul(W,x)\n", + "#print(abc)\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 85, + "metadata": { + "scrolled": true + }, + "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", + "data=np.genfromtxt('Iris.csv',delimiter=',')\n", + "np.random.shuffle(data)\n", + "#print(data)\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:,0:4]\n", + "Y=data[0:,4:5]\n", + "#print(X,Y)\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "first 10 value:\n", + " [[ 5.9 3. 4.2 1.5 1. ]\n", + " [ 5.9 3.2 4.8 1.8 1. ]\n", + " [ 5.5 3.5 1.3 0.2 0. ]\n", + " [ 6.3 3.4 5.6 2.4 2. ]\n", + " [ 5.5 4.2 1.4 0.2 0. ]\n", + " [ 4.9 2.4 3.3 1. 1. ]\n", + " [ 5.8 2.7 5.1 1.9 2. ]\n", + " [ 6.1 2.6 5.6 1.4 2. ]\n", + " [ 6.5 3. 5.2 2. 2. ]\n", + " [ 7. 3.2 4.7 1.4 1. ]]\n", + "last 10 value:\n", + " [[ 7.7 3. 6.1 2.3 2. ]\n", + " [ 6.3 2.5 4.9 1.5 1. ]\n", + " [ 5.2 4.1 1.5 0.1 0. ]\n", + " [ 5.7 3.8 1.7 0.3 0. ]\n", + " [ 6.5 3.2 5.1 2. 2. ]\n", + " [ 5.8 2.7 4.1 1. 1. ]\n", + " [ 5. 2.3 3.3 1. 1. ]\n", + " [ 5.2 3.5 1.5 0.2 0. ]\n", + " [ 5.4 3.4 1.7 0.2 0. ]\n", + " [ 7.1 3. 5.9 2.1 2. ]]\n", + "All rows of X whose corresponding value in y is 2\n", + "[ 6.3 3.4 5.6 2.4]\n", + "[ 5.8 2.7 5.1 1.9]\n", + "[ 6.1 2.6 5.6 1.4]\n", + "[ 6.5 3. 5.2 2. ]\n", + "[ 6.3 2.7 4.9 1.8]\n", + "[ 6.4 2.8 5.6 2.2]\n", + "[ 7.2 3. 5.8 1.6]\n", + "[ 6.9 3.2 5.7 2.3]\n", + "[ 6.4 3.2 5.3 2.3]\n", + "[ 7.6 3. 6.6 2.1]\n", + "[ 6.3 2.5 5. 1.9]\n", + "[ 6. 3. 4.8 1.8]\n", + "[ 6.5 3. 5.8 2.2]\n", + "[ 7.2 3.2 6. 1.8]\n", + "[ 6.7 3.1 5.6 2.4]\n", + "[ 5.8 2.7 5.1 1.9]\n", + "[ 7.9 3.8 6.4 2. ]\n", + "[ 5.8 2.8 5.1 2.4]\n", + "[ 6.9 3.1 5.1 2.3]\n", + "[ 6.7 2.5 5.8 1.8]\n", + "[ 6.7 3.3 5.7 2.5]\n", + "[ 6. 2.2 5. 1.5]\n", + "[ 5.6 2.8 4.9 2. ]\n", + "[ 6.2 3.4 5.4 2.3]\n", + "[ 6.5 3. 5.5 1.8]\n", + "[ 6.2 2.8 4.8 1.8]\n", + "[ 6.4 3.1 5.5 1.8]\n", + "[ 7.3 2.9 6.3 1.8]\n", + "[ 6.4 2.7 5.3 1.9]\n", + "[ 6.7 3. 5.2 2.3]\n", + "[ 7.7 2.6 6.9 2.3]\n", + "[ 5.9 3. 5.1 1.8]\n", + "[ 7.2 3.6 6.1 2.5]\n", + "[ 6.8 3.2 5.9 2.3]\n", + "[ 7.7 2.8 6.7 2. ]\n", + "[ 6.9 3.1 5.4 2.1]\n", + "[ 6.8 3. 5.5 2.1]\n", + "[ 5.7 2.5 5. 2. ]\n", + "[ 6.3 2.8 5.1 1.5]\n", + "[ 7.7 3.8 6.7 2.2]\n", + "[ 4.9 2.5 4.5 1.7]\n", + "[ 6.1 3. 4.9 1.8]\n", + "[ 6.3 3.3 6. 2.5]\n", + "[ 6.3 2.9 5.6 1.8]\n", + "[ 7.4 2.8 6.1 1.9]\n", + "[ 6.7 3.3 5.7 2.1]\n", + "[ 6.4 2.8 5.6 2.1]\n", + "[ 7.7 3. 6.1 2.3]\n", + "[ 6.5 3.2 5.1 2. ]\n", + "[ 7.1 3. 5.9 2.1]\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(\"first 10 value:\\n\",data[0:10])\n", + "print(\"last 10 value:\\n\",data[-10::1])\n", + "print(\"All rows of X whose corresponding value in y is 2\",)\n", + "for i in data:\n", + " if i[4]==2:\n", + " print(i[0:4])\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "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", + "y1 = np.empty((0,3),int)\n", + "for i in range(0,len(Y)):\n", + " if(Y[i])==0:\n", + " y1=np.append(y1,np.array([[1,0,0]]),axis=0)\n", + " elif(Y[i])==1:\n", + " y1=np.append(y1,np.array([[0,1,0]]),axis=0)\n", + " elif(Y[i])==2:\n", + " y1=np.append(y1,np.array([[0,0,1]]),axis=0) \n", + "#print(y1)\n", + "#################################" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "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", + "temp=np.empty((1,32,64,3),int)\n", + "for i in range(0,32):\n", + " for j in range(0,64):\n", + " for k in range(0,3):\n", + " temp[0][i][j][k]=A[i][j][k]\n", + "A=mat\n", + "print(A.shape)\n", + "#################################" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Expected Output:
(1,32,64,3)" + ] + } + ], + "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.1" + } + }, + "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 index 72fd792..1ec3dbf 100644 --- a/python-assn/assn-03/.ipynb_checkpoints/Assn-03-checkpoint.ipynb +++ b/python-assn/assn-03/.ipynb_checkpoints/Assn-03-checkpoint.ipynb @@ -29,7 +29,9 @@ { "cell_type": "code", "execution_count": 1, - "metadata": {}, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "# Just to load the data. Don't worry about scikit-learn for now.\n", @@ -40,161 +42,163 @@ { "cell_type": "code", "execution_count": 2, - "metadata": {}, + "metadata": { + "scrolled": true + }, "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]])" + "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, @@ -219,13 +223,13 @@ { "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])" + "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": 3, @@ -278,23 +282,25 @@ { "cell_type": "code", "execution_count": 5, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "data": { "text/html": [ "
\n", - "\n", "\n", @@ -838,17 +844,17 @@ "data": { "text/html": [ "
\n", - "\n", "
\n", @@ -957,7 +963,8 @@ ], "source": [ "# Return the first 10 rows in df\n", - "### CODE HERE ###" + "### CODE HERE ###\n", + "df[0:10]" ] }, { @@ -969,17 +976,17 @@ "data": { "text/html": [ "
\n", - "\n", "
\n", @@ -1088,7 +1095,8 @@ ], "source": [ "# Return the last 10 rows in df\n", - "### CODE HERE ###" + "### CODE HERE ###\n", + "df[-10:]" ] }, { @@ -1109,7 +1117,8 @@ ], "source": [ "# Get to know the shape of the data\n", - "### CODE HERE ###" + "### CODE HERE ###\n", + "df.shape" ] }, { @@ -1128,17 +1137,17 @@ "data": { "text/html": [ "
\n", - "\n", "
\n", @@ -1241,7 +1250,8 @@ ], "source": [ "# Get a more detailed description of the dataset\n", - "### CODE HERE ###" + "### CODE HERE ###\n", + "df.describe()" ] }, { @@ -1256,7 +1266,9 @@ { "cell_type": "code", "execution_count": 10, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "data": { @@ -1332,7 +1344,8 @@ ], "source": [ "# Retrieve only sepal_length from df\n", - "### CODE HERE ###" + "### CODE HERE ###\n", + "df[\"sepal length (cm)\"]" ] }, { @@ -1343,11 +1356,11 @@ { "data": { "text/plain": [ - "sepal length (cm) 5.1\n", - "sepal width (cm) 3.5\n", + "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: 0, dtype: float64" + "Name: 4, dtype: float64" ] }, "execution_count": 11, @@ -1357,50 +1370,276 @@ ], "source": [ "# Return 5th row of df\n", - "### CODE HERE ###" + "### CODE HERE ###\n", + "df.loc[4]" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "1.4" + "1.3999999999999999" ] }, - "execution_count": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Return petal length of 5th row of df\n", + "### CODE HERE ###\n", + "df.loc[4][\"petal length (cm)\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "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", + "dfl=df[df['sepal width (cm)']<2.9]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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\n" + ] + } + ], + "source": [ + "# Get mean of each column in df\n", + "# Hint: use numpy.mean\n", + "import numpy as np\n", + "print(np.mean(df))\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": 12, + "execution_count": 15, + "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": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sl = df['sepal length (cm)']" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "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": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nDaObUAAAAABJRU5ErkJggg==\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", + "### CODE HERE ###\n", + "fig1= fig.add_subplot(111)\n", + "pw=df['petal width (cm)']\n", + "pl=df['petal length (cm)']\n", + "fig1.scatter(pw,y,c='b',marker='o',label='petal width')\n", + "fig1.scatter(pl,y,c='r',marker='x',label='petal length')\n", + "fig1.set_ylabel('flower')\n", + "fig1.set_xlabel('lenth/width cm')\n", + "fig1.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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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 ###\n", + "plt.scatter(pl,sl,c='m')\n", + "plt.ylabel('sepal length (cm)')\n", + "plt.xlabel('petal length (cm)')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nZuajXYreAAAAAElFTkSuQmCC\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", + "### CODE HERE ###.\n", + "x=range(len(sl))\n", + "plt.plot(x,sl,c='C')\n", + "plt.xlabel('instance')\n", + "plt.ylabel('sepal length')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Using Scikit-Learn**\n", + "\n", + "Scikit-Learn offers a variety of classifiers for learning the data and creating a model for it. This task is a classification task and hence a regression method such as Linear Regression cannot be used for it. We'll use Logistic Regression to create a classifier for this data. " + ] + }, + { + "cell_type": "markdown", "metadata": {}, + "source": [ + "Before using a model on the data, we will need some data to test the model on. For this, we'll keep some data aside called the 'test set'.\n", + "\n", + "Also, we can have some problems in learning the data if the data is not randomly shuffled and chosen first. (More on this later)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, "outputs": [ { "data": { "text/html": [ "
\n", - "\n", "
\n", @@ -1411,64 +1650,73 @@ " \n", " \n", " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1476,97 +1724,79 @@ " \n", " \n", " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", @@ -1574,583 +1804,114 @@ " \n", " \n", " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \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 width (cm)petal length (cm)petal width (cm)target
414.52.31.30.3955.73.04.21.21
535.52.34.01.3845.43.04.51.51
546.52.84.61.5244.83.41.90.20
555.72.84.51.31495.93.05.11.82
574.92.43.31.01126.83.05.52.12
595.22.73.91.41326.42.85.62.22
601466.32.55.02.03.51.01.92
626.02.24.01.0175.13.51.40.30
672.74.11.01
686.22.24.51.5
695.61446.73.35.72.53.91.1
716.12.84.01.32
726.32.54.9665.63.04.51.51
736.12.84.7355.03.21.20.20
766.82.84.8656.73.14.41.41
795.72.63.5574.92.43.31.01
805.52.4185.73.81.11.70.30
815.52.43.71.01336.32.85.11.52
825.82.73.91.21057.63.06.62.12
836.01015.82.75.11.6
876.32.34.41.3
895.52.54.01.31.92
902.64.41.21
925.82.64.01.2
935.02.33.31.0
945.62.74.21.31027.13.05.92.12
985.12.51456.73.01.15.22.32
995.7716.12.84.14.01.31
1015.82.75.11.9756.63.04.41.41
1064.92.54.51.7285.23.41.40.20
1086.72.55.81.8746.42.94.31.31
1111156.42.73.25.31.9
1135.72.55.02.0
1145.82.85.12.4
1187.72.66.92.3
1196.02.25.01.52.32
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", @@ -2158,71 +1919,7 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", @@ -2230,300 +1927,220 @@ " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", - " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", + " \n", " \n", - " \n", - " \n", + " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", + " \n", + " \n", " \n", - " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", - " \n", - " \n", - " \n", + " \n", + " \n", + " \n", + " \n", + " \n", " \n", " \n", " \n", - " \n", - " \n", + " \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.315.62.84.92.02
35.1435.03.51.40.31.60.60
46.93.15.12.32507.03.24.71.41
56.73.35.72.51346.12.65.61.42
65.74.41.50.40
75.13.81.50.30..................
81046.53.05.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
14265.03.41.60
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
23636.12.94.71
246.73.05.01.71
255.43.41.70.20
267.72.66.92.32
276.83.05.52.12
286.22.24.5374.93.11.51
294.83.41.60.20.10
..................
1206.82.84.81.41
1216.03.44.51.61
1226.6976.22.94.64.31.31
1235.93.24.81.81
1247.23.26.01.82395.13.41.50.20
1257.0474.63.24.71.40.20
795.72.63.51.01
1266.43.24.51.5985.12.53.01.11
1275.51187.72.64.46.92.32
145.84.01.210.20
128935.03.01.62.33.31.01
365.53.51.30.20
1294.63.41.40.3275.23.51.50.20
1304.52.31.30.3344.93.11.50.10
131294.73.21.31.60.20
1326.73.05.22.32
1336.73.14.71.5815.52.43.71.01
1346.33.36.01086.72.55.81.82
1355.72.9335.54.21.31
1365.33.71.51.40.20
1374.9695.62.54.51.72
1386.53.05.51.823.91.11
139105.43.04.53.71.51
1405.03.31.40.20
1414.9255.03.01.41.60.20
1426.42.75.31.92705.93.24.81.81
1435.13.31.70.501196.02.25.01.52
1444.33.01.10.101236.32.74.91.82
1455.73.81.7414.52.31.30.30
1467.32.96.31.81145.82.85.12.42
1475.03.21.20.2195.13.81.50.30
1484.864.63.41.90.21.40.30
1495.82.74.11.011307.42.86.11.92
\n", @@ -2532,130 +2149,130 @@ ], "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", + "95 5.7 3.0 4.2 1.2 \n", + "84 5.4 3.0 4.5 1.5 \n", + "24 4.8 3.4 1.9 0.2 \n", + "149 5.9 3.0 5.1 1.8 \n", + "112 6.8 3.0 5.5 2.1 \n", + "132 6.4 2.8 5.6 2.2 \n", + "146 6.3 2.5 5.0 1.9 \n", + "17 5.1 3.5 1.4 0.3 \n", + "67 5.8 2.7 4.1 1.0 \n", + "144 6.7 3.3 5.7 2.5 \n", + "66 5.6 3.0 4.5 1.5 \n", + "35 5.0 3.2 1.2 0.2 \n", + "65 6.7 3.1 4.4 1.4 \n", + "57 4.9 2.4 3.3 1.0 \n", + "18 5.7 3.8 1.7 0.3 \n", + "133 6.3 2.8 5.1 1.5 \n", + "105 7.6 3.0 6.6 2.1 \n", + "101 5.8 2.7 5.1 1.9 \n", + "90 5.5 2.6 4.4 1.2 \n", + "102 7.1 3.0 5.9 2.1 \n", + "145 6.7 3.0 5.2 2.3 \n", + "71 6.1 2.8 4.0 1.3 \n", + "75 6.6 3.0 4.4 1.4 \n", + "28 5.2 3.4 1.4 0.2 \n", + "74 6.4 2.9 4.3 1.3 \n", + "115 6.4 3.2 5.3 2.3 \n", + "121 5.6 2.8 4.9 2.0 \n", + "43 5.0 3.5 1.6 0.6 \n", + "50 7.0 3.2 4.7 1.4 \n", + "134 6.1 2.6 5.6 1.4 \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", + "104 6.5 3.0 5.8 2.2 \n", + "26 5.0 3.4 1.6 0.4 \n", + "63 6.1 2.9 4.7 1.4 \n", + "37 4.9 3.1 1.5 0.1 \n", + "97 6.2 2.9 4.3 1.3 \n", + "39 5.1 3.4 1.5 0.2 \n", + "47 4.6 3.2 1.4 0.2 \n", + "79 5.7 2.6 3.5 1.0 \n", + "98 5.1 2.5 3.0 1.1 \n", + "118 7.7 2.6 6.9 2.3 \n", + "14 5.8 4.0 1.2 0.2 \n", + "93 5.0 2.3 3.3 1.0 \n", + "36 5.5 3.5 1.3 0.2 \n", + "27 5.2 3.5 1.5 0.2 \n", + "34 4.9 3.1 1.5 0.1 \n", + "29 4.7 3.2 1.6 0.2 \n", + "81 5.5 2.4 3.7 1.0 \n", + "108 6.7 2.5 5.8 1.8 \n", + "33 5.5 4.2 1.4 0.2 \n", + "69 5.6 2.5 3.9 1.1 \n", + "10 5.4 3.7 1.5 0.2 \n", + "25 5.0 3.0 1.6 0.2 \n", + "70 5.9 3.2 4.8 1.8 \n", + "119 6.0 2.2 5.0 1.5 \n", + "123 6.3 2.7 4.9 1.8 \n", + "41 4.5 2.3 1.3 0.3 \n", + "114 5.8 2.8 5.1 2.4 \n", + "19 5.1 3.8 1.5 0.3 \n", + "6 4.6 3.4 1.4 0.3 \n", + "130 7.4 2.8 6.1 1.9 \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", + "95 1 \n", + "84 1 \n", + "24 0 \n", + "149 2 \n", + "112 2 \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", + "17 0 \n", + "67 1 \n", + "144 2 \n", + "66 1 \n", + "35 0 \n", + "65 1 \n", + "57 1 \n", + "18 0 \n", + "133 2 \n", + "105 2 \n", + "101 2 \n", + "90 1 \n", + "102 2 \n", + "145 2 \n", + "71 1 \n", + "75 1 \n", + "28 0 \n", + "74 1 \n", + "115 2 \n", + "121 2 \n", + "43 0 \n", + "50 1 \n", + "134 2 \n", + ".. ... \n", + "104 2 \n", + "26 0 \n", + "63 1 \n", + "37 0 \n", + "97 1 \n", + "39 0 \n", + "47 0 \n", + "79 1 \n", + "98 1 \n", + "118 2 \n", + "14 0 \n", + "93 1 \n", + "36 0 \n", + "27 0 \n", + "34 0 \n", + "29 0 \n", + "81 1 \n", + "108 2 \n", + "33 0 \n", + "69 1 \n", + "10 0 \n", + "25 0 \n", + "70 1 \n", + "119 2 \n", + "123 2 \n", + "41 0 \n", + "114 2 \n", + "19 0 \n", + "6 0 \n", + "130 2 \n", "\n", "[150 rows x 5 columns]" ] @@ -2668,10 +2285,12 @@ "source": [ "# Join target variable to dataframe\n", "### CODE HERE ###\n", - "\n", + "from sklearn.utils import shuffle\n", + "#df = pd.DataFrame(X, columns=headers) ##incase we again run only scikit we need to uncomment the above to get good accuracy as the data is shuffled\n", + "df['target']=data.target\n", "# Randomly shuffle dataframe\n", + "df = shuffle(df)\n", "### CODE HERE ###\n", - "\n", "df" ] }, @@ -2720,8 +2339,8 @@ { "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])" + "array([2, 0, 1, 0, 0, 2, 0, 2, 0, 2, 2, 0, 0, 2, 2, 2, 2, 0, 1, 1, 1, 0, 0,\n", + " 2, 2, 0, 1, 1, 0, 2])" ] }, "execution_count": 23, @@ -2744,7 +2363,7 @@ { "data": { "text/plain": [ - "0.9333333333333333" + "0.96666666666666667" ] }, "execution_count": 24, @@ -2788,7 +2407,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Assn-03.ipynb dataframe.csv model.pkl\r\n" + "Assn-03.ipynb\r\n" ] } ], @@ -2798,17 +2417,16 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "import pickle\n", "\n", "# Save dataframe to csv\n", - "### CODE HERE ###\n", - "\n", + "df.to_csv('data.csv')\n", "# Save model to model.pkl\n", - "### CODE HERE ###" + "pickle.dump(clf,open('model.pkl','wb'))" ] }, { @@ -2835,7 +2453,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.6.1" } }, "nbformat": 4, diff --git a/python-assn/assn-03/.ipynb_checkpoints/Vinayak_Assn-03-checkpoint.ipynb b/python-assn/assn-03/.ipynb_checkpoints/Vinayak_Assn-03-checkpoint.ipynb new file mode 100644 index 0000000..5cd6ec2 --- /dev/null +++ b/python-assn/assn-03/.ipynb_checkpoints/Vinayak_Assn-03-checkpoint.ipynb @@ -0,0 +1,2463 @@ +{ + "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": { + "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": 2, + "metadata": { + "scrolled": true + }, + "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, 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": 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": { + "scrolled": true + }, + "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 ###\n", + "df[0:10]" + ] + }, + { + "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 ###\n", + "df[-10:]" + ] + }, + { + "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 ###\n", + "df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This tells us there are 150 rows and 4 columns in ```df```." + ] + }, + { + "cell_type": "code", + "execution_count": 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 ###\n", + "df.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This gives us the statistics of each of features in detail. ```count``` is the number of values in that feature, ```mean``` and ```std``` are the mean and standard deviation and the other values are the minimum, maximum and values for each of the quartiles (1st, 2nd and 3rd).\n", + "\n", + "Other methods:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "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": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Retrieve only sepal_length from df\n", + "### CODE HERE ###\n", + "df[\"sepal length (cm)\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "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": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Return 5th row of df\n", + "### CODE HERE ###\n", + "df.loc[4]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.3999999999999999" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Return petal length of 5th row of df\n", + "### CODE HERE ###\n", + "df.loc[4][\"petal length (cm)\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "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", + "dfl=df[df['sepal width (cm)']<2.9]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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\n" + ] + } + ], + "source": [ + "# Get mean of each column in df\n", + "# Hint: use numpy.mean\n", + "import numpy as np\n", + "print(np.mean(df))\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": { + "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": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sl = df['sepal length (cm)']" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "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": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nDaObUAAAAABJRU5ErkJggg==\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", + "### CODE HERE ###\n", + "fig1= fig.add_subplot(111)\n", + "pw=df['petal width (cm)']\n", + "pl=df['petal length (cm)']\n", + "fig1.scatter(pw,y,c='b',marker='o',label='petal width')\n", + "fig1.scatter(pl,y,c='r',marker='x',label='petal length')\n", + "fig1.set_ylabel('flower')\n", + "fig1.set_xlabel('lenth/width cm')\n", + "fig1.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X+cXXV95/HXOz8JVDIapgkjxhglP8S1EadUxNpgarcg\npe5qW1xaEdtGiJVSHl1ry9baddnW7j724Y8tYMoP4WFKW6lYagNWkKmIEQ0x8sMkU4wgJCFEtplI\nwUjIZ/+4Z8aZe8+dOffHufeee97Px+M+mHvu+fE5mcv9zDmf7/18FRGYmZkBzOp2AGZm1jucFMzM\nbIKTgpmZTXBSMDOzCU4KZmY2wUnBzMwmOCmYmdkEJwUzM5vgpGBmZhPmdDuARp1wwgmxbNmybodh\nZlYo99133/cjYnCm9QqXFJYtW8bWrVu7HYaZWaFIejTLernePpL0e5IekvSgpJskHVP1uiR9XNLD\nku6XdGqe8ZiZ2fRySwqSXgxcAgxHxKuA2cB5VaudBZycPNYDV+UVj5mZzSzvQvMcYIGkOcCxwN6q\n138ZuDEqvgYMSDox55jMzKyO3JJCROwB/jfwPWAfMBYR/1y12ouBxyY9fzxZZmZmXZDn7aMXUrkS\neBkwBBwn6deb3Nd6SVslbT1w4EA7wzQzs0nyvH3088B3I+JARDwHfBZ4fdU6e4CXTHp+UrJsiojY\nGBHDETE8ODjjiCozM2tSnknhe8DrJB0rScA6YEfVOrcC70xGIb2Oyi2mfTnGZGbWNvs37WfLsi2M\nzBphy7It7N+0v9shtSy37ylExL2Sbga2AUeAbwIbJV2UvH41sBk4G3gYeAa4MK94zMzaaf+m/exa\nv4ujzxwF4PCjh9m1fhcAi89f3M3QWqKizdE8PDwc/vKamXXblmVbOPzo4Zrl8186n9MfOb0LEU1P\n0n0RMTzTeu59ZGbWhMPfq00I0y0vCicFM7MmzF86v6HlReGkYGbWhOVXLGfWsVM/QmcdO4vlVyzv\nUkTt4aRgZtaExecvZuXGlcx/6XxQpZawcuPKQheZoYBdUs3MesXi8xcXPglU85WCmZlNcFIwM7MJ\nTgpmZjbBScHMSqubbSpGN4wyMmeEEY0wMmeE0Q2jPRGjC81mVkrdbFMxumGUvVdNml7meSaer7hy\nRVdj9JWCmZXS7st3T3zYjjv6zFF2X74792Pv3Vg931j68m7E6KRgZqXU1TYVz2db3o0YnRTMrJS6\n2qZidrbl3YjRScHMSqmTbSqqi8UDawdS1xtaP9S1GCf2n9uezcx6WKfaVIwXiw8/ehiiUiw+tOUQ\nA+sGfnxlMBuGLh6aUmTuZIyTeT4FM7Mc9cq8C55PwcysBxRt3gUnBTOzHBVt3oXckoKklZK2T3oc\nknRp1TprJY1NWueDecVjZtYNRZt3IbdvNEfELmANgKTZwB7glpRV746Ic/KKw8ysm8aLwrsv383h\n7x1m/tL5LL9iec+23O5Um4t1wHci4tEOHc/MrGcUad6FTtUUzgNuqvPa6yXdL+k2Sad0KB4zM0uR\ne1KQNA84F/hMysvbgKUR8WrgE8Dn6uxjvaStkrYeOHAgv2DNzEquE1cKZwHbIqKm32tEHIqIp5Of\nNwNzJZ2Qst7GiBiOiOHBwcH8IzYzK6lOJIV3UOfWkaQlkpT8fFoSz1MdiMnMrKvzKfSqXAvNko4D\n3gy8Z9KyiwAi4mrg7cDFko4AzwLnRdG+Ym1mhdTN+RR6mdtcmFkp9Ur7iU5xmwszs2kUrf1Epzgp\nmFkpFa39RKc4KZhZKRWt/USnOCmYWSk1MldBmUYpdarNhZlZz8nSfqJso5R8pWBmNo3dl++eSAjj\njj5zlN2X7+5SRPlyUjAzm0bZRik5KZiZTaNso5ScFMys0LIWgdPWy7Jt2UYpudBsZoWVtQictt7O\nd+8kIuA5pt22aJPktMptLsyssLK2qqi3Xhq3uTAzK6isReBGisL9WkDOyknBzAoraxG4kaJwvxaQ\ns3JSMLPCyloETltP8wRzp+6vnwvIWTkpmFlh1WtVAUwZVQTUrLfqulWsvn51pjYXZeJCs5n1leqR\nRlC5Aij7B74LzWZWSmVrS9FuTgpm1lfK1pai3XJLCpJWSto+6XFI0qVV60jSxyU9LOl+SafmFY+Z\nlUPZ2lK0W25JISJ2RcSaiFgDvBZ4BrilarWzgJOTx3rgqrziMSujMs0DMK5sbSnarVO3j9YB34mI\nR6uW/zJwY1R8DRiQdGKHYjLra+MF18OPHob4cRuHfk8MjUyeY7U61fvoPOCmlOUvBh6b9PzxZNm+\nTgRl1s+mK7j2+wdklslzLF3uVwqS5gHnAp9pYR/rJW2VtPXAgQPtC86sj7ngas3oxO2js4BtEZF2\nzboHeMmk5ycly6aIiI0RMRwRw4ODgzmFadZfXHC1ZnQiKbyD9FtHALcC70xGIb0OGIsI3zoya4NG\nCq6NFKRbKV63WvguY+G803KtKUg6Dngz8J5Jyy4CiIirgc3A2cDDVEYnXZhnPGZlknUegEYmpm9l\nEvtWtm3H9paN21yYlVzWOQkaXbeV4+Sxfdm5zYWZZdJIQbqV4nWrhW8XzjvDScGs5BopSLdSvG61\n8O3CeWdMmxQknS7pL5MWFAckfU/SZknvlbSwU0GaWX4aKUi38m3hVr9p7G8qd0bdpCDpNuC3gC8A\nvwicCLwS+G/AMcA/SDq3E0GaWftUj+CB2rkG6n0DuJVvC2ed+6DeiKJGju1RSs2rW2iWdEJEfH/a\njTOs024uNJs1r9fmGsgjnl47x17RcqG5+sNe0vGSXjT+SFvHzHpbr801kEc8vXaORTPj9xQkvQf4\nU+CHwPhlRQC+kWdWML02giePeHrtHIsmy+ij3wdeFRHLIuJlycMJwayAem0ETx7x9No5Fk2WpPAd\nKt82NrMuaGdbiUVnL2poBE/WYzcbY70RRYvOXpS6v9ENo4zMGWFEI4zMGWF0w2jL52hTzfiNZkmv\nAa4H7gUmrr8i4pJ8Q0vnQrOVSStF03rbLrlgCU9tfmra1heNHLvVwu7+TfuntOJYdPYinrjhiZr9\nHX/68Ry882DtDmYBk0oIjZxjmWQtNGdJCl8HvgI8wKR/+oi4odUgm+GkYGVShLYS7W4/UW9/jXDr\ni1pZk0KWhnhzI+KyNsRkZg0qQluJdhd221EQdlG5eVlqCrclk9ycWD0k1czyVYS2Eu0u7LajIOyi\ncvOyJIV3AH8IfBW4L3n4/o1ZBxShrUS720/U29/AuoH0Dao+xVxUbs2MSWHSMNSXeUiqWWctPn8x\nSy5YArOTBbNhyQVLMrV2gOztK+odO8v2rbS+aOS4a+5Yw9DFQ1P+LYYuHmL1javbdmzLVmh+L7Ap\nIg4mz18IvCMiruxAfDVcaLYy6dQIIOt/7ZxP4bfHEwJARPwb8NutBGdm2WRt2eDWDtYuWZLCbEka\nfyJpNjAvv5DMbFy3RgBZeWVJCrcDfytpnaR1wE3JMjPLWbdGAFl5ZUkKfwB8Cbg4edwJvD/LziUN\nSLpZ0k5JOySdXvX6WkljkrYnjw82egJm/ayREUCapynLNE+5jMJJa2nRzlYcjc594LkT2mvGL69F\nxFHg6uTRqI8Bt0fE2yXNA45NWefuiDiniX2b9b3xIvHkNhD1WjZUDxqZaRBJM6oL2ocfPcyOC3cg\nifhRTCzbtX7XlPgb2V/WbduxvdWabpKdfwQ2UvlQf67qteXAu4BHIuK6OtsvBLYDy6POQSStBX6/\nkaTg0UdmtdrdaqLR46TppVYc1p7RR78N/CywU9I3krmZvyTpu8AngfvqJYTEy4ADwPWSvinpGknH\npaz3+mQO6NsknVLnZNZL2ipp64EDB2Y6J7PS6VShuZH99VIrDstuupnXnoiI90fEy4FfAT4MXAac\nEhFvjoh/mGHfc4BTgasi4jXAvwMfqFpnG7A0Il4NfAL4XJ1YNkbEcEQMDw4OZjoxszLpVKG5kf31\nUisOyy5LoZmIeCQitkTE9ojIOrfC48DjEXFv8vxmKkli8n4PRcTTyc+bgbmSTsi4fzNLtLvVRCPH\nYS41Re5ea8Vh2WVKCs2IiCeAxyStTBatA749eR1JS8a/AyHptCSep/KKyazXNTupDbTW0iKrtBYU\nq69fzarrVtUce+yesZoJcdL2l9bGI8u29eLxt7hbM2Obi5Z2Lq0BrqHyZbfdwIXArwFExNWSfofK\nMNcjwLPAZRHx1en26UKz9at+amkxumGUvVftrVk+dPEQK65cMfE87Vw0R8SR2s+l6m2tMW2bZKfX\nOClYv+rWpDZ5GJkzAs+nvDAb1h5ZO/G0oQl1qra1xrRtkh1JZwAfAl6arC8g3CnVrL36qqVFWkJI\nWd5QzPX2aW2VZea1a4HfozKPgn8tZjmZv3R++hVASkuLLOt11WzqXilMVu9c6u7Tcpel0DwWEbdF\nxJMR8dT4I/fIzEqm3kiaRWcvmlJUXnT2oswjbrIWrkc3jKYWdpttaTG0fij1ONXL085Zc6aOZJpp\nn1m5HUY2da8UJI0PH71L0v8CPgtMpPSI2JZzbGalktbSYtHZi3jihiemtHF44oYnWHLBEp7a/NS0\nrS+ytoCoKQo/D3uv2sszo89waMuhKdvvfPfOSvuMpMdBvX2OF4T3btxbuWKYXflQry4Up53zglcs\n4OCdB2knt8PIbro2F3dNs11ExJvyCWl6LjRbmbRSVM66bd2icAPaWeTOWqRuRBGK83lrudAcEWcm\nO1oeEVNm6kh6H5lZzlopKmfetg2VwrYWuTMWqRtRiOJ8j8hSU7g5Zdln2h2ImdVqpY1D5m3bUMBt\na5G7XjwtxOl2GNnVTQqSVkl6G7BQ0n+e9HgXcEzHIjQrsVbaOGTdtl4Bd2DdQG0ReJ5g7tT12t1W\nImuRuhFuh5HddFcKK4FzgAHglyY9TsVzNJvlImv7CmDGkTT1WkBUb7vwjIUMXTw0pdXE0MVDrLlj\nTc32q65bxerrVzfdViLLCKAVV65IjaeVbzO7HUZ2M36jWdLpEbGlQ/HMyIVm61edaHPRzRYZRWjP\n0c/a1uZC0ieA6pXGgK0Z2me3nZOC9atOtLno5igcjwDqrnZMsjNuPrAG+Nfk8WrgJOA3JX20pSjN\nbEIn2lx0cxSORwAVQ5Y2F68GzoiI5wEkXQXcDbwBeCDH2MxKpRNtLrrZIqMQ7Tks05XCC4GfmPT8\nOOBFSZJwijebpJVWCllHyGRth7F/0/6a9hULXrEg87bt1sgIILek6J4sVwp/AWyXNEKlQ+obgf+Z\nzLd8R46xmRVKq60U0lo+pLWvyNoOY+e7dk6dl+B5OHjnQQbWDfDsw89Ou20eLSCynp9bUnRXpvkU\nJJ0InJY8/UZE1M6e0SEuNFuv6sUibqqMcxp0qwDca/H0i3YWmsfXOwD8G/AKSW9sJTizftSLRdxU\nGec06FYBuNfiKZssk+x8hMoUmg8B4wOMA/hyjnGZFU4vFnFTZZzToFsF4F6Lp2yyXCm8FVgZEW+J\niF9KHudm2bmkAUk3S9opaYek06tel6SPS3pY0v2T2nWbFU43Wym0Mi9Br7WA6LV4yiZLUthNTbeT\nzD4G3B4Rq4CfAnZUvX4WcHLyWA9c1eRxzLpu8fmLWXLBkintGZZcsCSX4mj1qKKxe8ZqW1J8alVq\nu4iFZyzM1Epj8fmLm55kpxVuSdFdWb7R/PdUPtDvZOokO5fMsN1CYDuwPOocRNIngZGIuCl5vgtY\nGxH76u3XhWbrVZ1q41AzKU4iS3+gRmJMW1fzNGWSnem2t97SzkLzrcCHga9Smad5/DGTl1EpTl8v\n6ZuSrkmGsU72YuCxSc8fT5aZFc7uy3dP+QAFOPrMUXZfvrvOFs3ZuzF98F+95ZM1EmPauvGjqQlh\nuu2tmGYsNEfEDZIWAEsjYleD+z4VeF9E3CvpY8AHgD9uNEhJ66ncXmLp0qWNbm7WER0bNdPCJDSN\nxNhI3B4Z1D9mvFKQ9EtUbgPdnjxfI+nWDPt+HHg8Iu5Nnt9MJUlMtgd4yaTnJyXLpoiIjRExHBHD\ng4ODGQ5t1nkdm8ilhUloGomxkbg9Mqh/ZLl99CEqX1w7CBAR24EZhwFExBPAY5JWJovWAd+uWu1W\n4J3JKKTXAWPT1RPMelmn2ji0MgnN8iuWVybKmUTzlBpj6oimear91JiLRwb1kSxtLp6LiDFpyhvp\naL2Vq7wP2CRpHpVRTBdKugggIq4GNgNnAw8DzwAXZg3crNd0qo3DeDF578a9lVtGsysJIeskNNXj\nPuoNNqnXTmPftfsqtYVE1WeDFVyW0UfXUhl59AHgbcAlwNyIuCj/8Gp59JEVXS+2w8h6bLegKK52\njj56H3AKleGoNwGHgEtbC8+svHqxHUbWY7sFRf+bMSlExDMRcXlE/HRS7L08In7YieDM+lHHCtI5\nHLubsVtn1K0pSPpHaqfhnJC11UXR7N+0f8Z7wmaQ/l6B2ppC9bLqVtXQ2XYYaV9ey3rs5VcsZ8c7\nd0ytKs5yobmf1K0pSPq56TaMiH/JJaIZ5FlT8MTillXae4W5laLrlCJsnW8AL7lgCU9tfqorf3y0\n8ofP9p/fzsE7D9YsH1g3wJo71rQ7VGujrDWFTPMp9JI8k4KLaJZVQ/MXpCjqe2pEI3VfWxtrOxaH\nNa7d8ymUgotollWr7wm/p6xXOSlM4iKaZdXqe8LvKetVTgqTuI+7ZZX2XmEuqd8Wrm48X+T31MC6\ngYaWW/F49NEkWb+ROp2sRTyPcuqsdv9713uvpC0bu2dsyrePl1ywhLF7xthxwY6mvpGcx/k0chxg\nSrHZReb+4tFHbZR19JJHOXVWN/+9U+ckmCPiSO3/d1nmQ6i3zzzOx+/T/uLRR12QdfSSRzl1Vi+2\nlUg1G9YeWdv0Ptt9Pn6f9pesSWHGhniSTgb+DHglcMz48ogo5k3RHGUdveRRTp3Vi20lUmWYD2G6\nfbb7fPw+LacshebrqcydfAQ4E7gR+HSeQRVV1tFLHuXUWb3YViJVhvkQpttnu8/H79NyypIUFkTE\nnVRuNT0aER8C3pJvWMWUdfSSRzl11nT/3q3Ma5Bl27T5C+r9X5dlPoTxfVaPaGp1ToO0c/H7tJyy\nJIXDkmYB/yrpdyT9J+Anco6rkBafv5iVG1cy/6XzQZV7r2lFuazrWXvU+/cG2LV+V+W+efx4XoMs\niWG8CJtl29S6XfUUBLNg4RkLM59T9RwGrcxpUO9cAL9PSyjLfAo/DewABoAPAwuBv4iIr+UfXq1e\nLjRbsbRSSG11UEGabs1p4IJyObSt0BwR30h2OAu4JCJ+0Ib4zLqulUJqq4MKmj1uI8du9bguKJfT\njLePJA1LegC4H3hA0rckvTb/0Mzy1UohtdVBBc0et5Fjt3pcF5TLKUtN4TpgQ0Qsi4hlwHupjEia\nkaRHJD0gabukmns+ktZKGkte3y7pgw1Fb9aCVgqprQwqSGuH0eicBu0sALugbJPNePsIeD4i7h5/\nEhFfkXSkgWOcGRHfn+b1uyPinAb213FZJ1NxAa5YpmtVsWXZlhl/3ys3rkxtaVHdviJtvbT91Xv/\npL3/0vbZ7PuvHe1drH9kKTR/FFhAZX7mAH4N+CHJdxUiYts02z4CDNdLCpLWAr/fSFLodKE5tU1B\nnYlTPDKj+Fr5fY9uGGXvVXtr9pm1fUXWePxes2a0rc2FpLumeTki4k3TbPtdYIzK302fjIiNVa+v\nBT4LPA7soZIgHpounk4nhTxGj1jvauX3PTJnJP1byRnbVzQSj99r1qh2jj46s4U43hAReyT9JPBF\nSTsj4suTXt8GLI2IpyWdDXwOOLl6J5LWA+sBli5d2kI4jctj9Ij1rpZ+3/XaVGRsX9FIPH6vWV6y\njD5aLOlaSbclz18p6Tez7Dwi9iT/fRK4BTit6vVDEfF08vNmYK6kE1L2szEihiNieHBwMMuh2yaP\n0SPWu1r6fddrU5GxfUUj8fi9ZnnJMvroU8AXgPHv4I8Cl860kaTjJL1g/GfgF4AHq9ZZouSrmJJO\nS+J5KmvwnZDWpkBz6k+cMrphlJE5I4xohJE5I4xuGE3db9b1rLPSRuJknSinXpuKrO0rssYz69hZ\nLDp7UdPtOcymkyUpnBARfwccBYiII2S7IF4MfEXSt4CvA/8UEbdLukjSRck6bwceTNb5OHBe9GAv\n7+qQQsHQbw3VfP1/7J6xSqFx/F/nedh71d6aD/yJguQM61nnpbXEWHXdKlZfv3rGdg8rrlzB0MVD\nP74ymN1akblePEsuWMITNzzRVHsOs5lkKTSPAG8DvhgRp0p6HfCRiJh2Ep689EqhOa3Ql7XQmEdB\n0srDxWdrRtsKzcBlwK3AyyXdAwxS+Qu/FBoq9GUtNOZQkLTycPHZ8pRl9NG2ZGrOlVR6O+6KiOdm\n2KxvzF86P/2vsrRC32zqXgE0tZ5Ziobek2YNyjL66FeozKnwEPBW4G8lnZp7ZD2ikRYAWQuNeRQk\nrTzclsLylKXQ/McR8QNJbwDWAddSmYmtFBqZ+2DFlSsYWDcwZdnAuoGaQmMeBUkrD8/HYXnKUmj+\nZkS8RtKfAQ9ExF+PL+tMiFP18nwKbklgZr0qa6E5y5XCHkmfpNLzaLOk+Rm3K53dl++ekhAAjj5z\nlN2X7+5SRGZmjcny4f6rVL689h8j4iDwIuC/5hpVQXlUiJkVXZbRR89QaVo3/nwfsC/PoIrKo0LM\nrOh8G6hJ+zftr2kzsPyK5ZUWGJNojjwqpE+lvQfMis5JoQnjBeXqNgP7rt9HHKlqiXEkGLtnrEuR\nWl7qvQecGKzonBSaUK+gfPDOg6nr791YO/GKFZsHFVi/clJoQsOFY7ev6DseVGD9ykmhCQ0Xjt2+\nou94ngPrV04KTajXZqD628zj3L6i/7jVhPUrJ4UmLD5/MceffvyUZceffjxr7ljD3KGps7HMHZrL\nwjMW1oxSyTpypQwjXIp4jm41Yf1qxjYXvaYX2lxMTJJTZe7QXJ7bm9JAdhbJFEUVmqfKxD2TVk1r\nh1GGthllOEezXtDONhdWpd5ootSEAFMSAkD8aGpCgPSRK2UY4VKGczQrEieFZuQ0mqh65EoZRriU\n4RzNiiTXpCDpEUkPSNouqeaejyo+LulhSfcXZp6GnEYTVY9cKcMIlzKco1mRdOJK4cyIWFPnXtZZ\nwMnJYz09ME9DWtGzetnA2vRRRtVF5roEVK2aNnKlDCNcWj1HF+zN2ivLHM15+mXgxqhUu78maUDS\niUnTvY6rLnoefvQwOy7cgaRKHSBZdvjx9Fsbx60+joN707/VPEXAgpMXcPTfj3L4e4eZv3Q+y69Y\nXlNYHX+++/Ld065XZK2cY9rva9f6XVP228h6Zpbz6CNJ3wXGqNyF/2REbKx6/fPAn0fEV5LndwJ/\nEBF1hxflOfpoy7ItqV1O87I21nbsWP2o3u9r/kvnc/ojpze8nlk/yzr6KO8rhTdExB5JPwl8UdLO\niPhyozuRtJ7K7SWWLl3a7hgnuLhZLFmL1C5mm2WXa00hIvYk/30SuAU4rWqVPcBLJj0/KVlWvZ+N\nETEcEcODg4N5heviZsFkLVK7mG2WXW5JQdJxkl4w/jPwC8CDVavdCrwzGYX0OmCsW/UESC96Mrfy\nZbMp6ow+qtfmotV1Ld3yK5bX/G40r3b+in4s2LtwbnnJ80phMfAVSd8Cvg78U0TcLukiSRcl62wG\ndgMPA38FbMgxnhmltS5Yff1qVl23asqyofVDtf9ys+DwvvTbEbMGpq48sG6ANXesyeksyqW6JpZW\nI+u3lhSey8Hy5DYXTWimIO2icvuVtYBc1vO21rjNRY5coOwNZS0gl/W8rTOcFJrgAmVvKGsBuazn\nbZ3hpNCEeoXLBa9ckLq+i8r56McCchZlPW/rDCeFJtSbT+FnHvqZmgQwsG6AY1ccy8icEUY0wsic\nEUY3jGY+lkeZ1NdvBeSsynre1hkuNDeh3nwKQxcPseLKFU2vW81zDZhZu7jQnKN68ymkLW9k3Wqe\na8DMOs1JoRn15lNIW97IulU8ysTMOs1JoRn15lNIW97IulU8ysTMOs1JIYOs8ykMrR/KtGy65ZN5\nlImZdZqTwgzSWgoc2nKoMspo/K/92fULxwvPWFh7VTA7WT4DjzIxs07z6KMZtNpSwC0JzKwXePRR\nm7Ra7HWx2MyKxElhBq0We10sNrMicVKYQavFXheLzaxISpMUmm0XUa/YO3bPWGrriurjAC4Wm1lh\nlKLQ3O52EfVaVwysG+DQlkNuS2FmPceF5kna3S6iXouKg3cedFsKMyu0UiSFto8AytCioi3HMTPr\nsFIkhbaPAMrQoqItxzEz67Dck4Kk2ZK+KenzKa+tlTQmaXvy+GAeMbQ6Aihrm4uBdQMeaWRmhdaJ\nK4XfBXZM8/rdEbEmefz3PAJopV1EI20u1tyxxiONzKzQ5uS5c0knAW8BrgAuy/NYM1l8/uKmPpzr\nFamfffhZ1h5Z27bjmJn1gryvFD4KvB84Os06r5d0v6TbJJ2StoKk9ZK2Stp64MCBXAKtx20qzKxM\ncksKks4BnoyI+6ZZbRuwNCJeDXwC+FzaShGxMSKGI2J4cHAwh2jrc5sKMyuTPK8UzgDOlfQI8DfA\nmyR9evIKEXEoIp5Oft4MzJV0Qo4xNcxtKsysTHJLChHxhxFxUkQsA84DvhQRvz55HUlLJCn5+bQk\nnqfyiqkZi89fzPGnHz9l2fjzZtpmmJn1slwLzWkkXQQQEVcDbwculnQEeBY4L3qs78bohlEO3nlw\nyrKDdx7k4F0HJyolhx89zK71uwBcZDazQitF76NWjMwZyfwNZk+cY2a9yr2P2qWBlhYekWRmReek\nMJMGWlp4RJKZFV2pk0KWORaG1g+lb1z1L+cRSWbWD0qbFNLaV+xav6smMay4cgVDFw/VtLRYfeNq\nt7Mws75T2kLzlmVbKgmhiovFZtaPXGiegdtXmJnVKm1ScPsKM7NapU0Kbl9hZlartEmhlTkWzMz6\nVcfbXPQSz31gZjZVaa8UzMyslpOCmZlNcFIwM7MJTgpmZjbBScHMzCY4KZiZ2YTC9T6SdAB4tIVd\nnAB8v03V1XXKAAAGsElEQVThdFs/nQv01/n007lAf51PWc/lpRExONNKhUsKrZK0NUtTqCLop3OB\n/jqffjoX6K/z8blMz7ePzMxsgpOCmZlNKGNS2NjtANqon84F+ut8+ulcoL/Ox+cyjdLVFMzMrL4y\nXimYmVkdpUkKkq6T9KSkB7sdS6skvUTSXZK+LekhSb/b7ZiaJekYSV+X9K3kXP602zG1StJsSd+U\n9Plux9IqSY9IekDSdkmtz4PbZZIGJN0saaekHZIKOfeupJXJ72T8cUjSpW3Zd1luH0l6I/A0cGNE\nvKrb8bRC0onAiRGxTdILgPuAt0bEt7scWsMkCTguIp6WNBf4CvC7EfG1LofWNEmXAcPA8RFxTrfj\naYWkR4DhiOiLcf2SbgDujohrJM0Djo2Ig92OqxWSZgN7gJ+JiFa+wwWU6EohIr4M/L9ux9EOEbEv\nIrYlP/8A2AG8uLtRNScqnk6ezk0ehf1LRdJJwFuAa7odi00laSHwRuBagIj4UdETQmId8J12JAQo\nUVLoV5KWAa8B7u1uJM1LbrdsB54EvhgRhT0X4KPA+4Gj3Q6kTQK4Q9J9ktZ3O5gWvQw4AFyf3N67\nRtJx3Q6qDc4DbmrXzpwUCkzSTwB/D1waEYe6HU+zIuL5iFgDnAScJqmQt/cknQM8GRH3dTuWNnpD\n8rs5C3hvchu2qOYApwJXRcRrgH8HPtDdkFqT3AI7F/hMu/bppFBQyf33vwc2RcRnux1POySX8ncB\nv9jtWJp0BnBuch/+b4A3Sfp0d0NqTUTsSf77JHALcFp3I2rJ48Djk65Eb6aSJIrsLGBbROxv1w6d\nFAooKc5eC+yIiP/T7XhaIWlQ0kDy8wLgzcDO7kbVnIj4w4g4KSKWUbmk/1JE/HqXw2qapOOSgQwk\nt1l+ASjs6L2IeAJ4TNLKZNE6oHCDM6q8gzbeOoLK5VQpSLoJWAucIOlx4E8i4truRtW0M4DfAB5I\n7sUD/FFEbO5iTM06EbghGUExC/i7iCj8UM4+sRi4pfI3CHOAv46I27sbUsveB2xKbrvsBi7scjxN\nSxL1m4H3tHW/ZRmSamZmM/PtIzMzm+CkYGZmE5wUzMxsgpOCmZlNcFIwM7MJTgrWdyS9S9JQhvU+\nJentWZe3Ia4/mvTzsqwdeyVdKumdbTj+70h6d6v7sf7mpGD96F3AjEmhC/5o5lWmkjQHeDfw1204\n/nVUxumb1eWkYD0t+Yt6p6RNSf/7myUdm7z2Wkn/kjRr+4KkE5O/8IepfEFpu6QFkj4o6RuSHpS0\nMflGeNbj1xwjWT4i6SPJXBCjkn42WX6spL9L5rq4RdK9koYl/TmwIIlpU7L72ZL+KplH4p+Tb3RX\nexOVNgZHkv2/QtIdyfwT2yS9XNLaJMZ/kLRb0p9LOj+J7QFJLweIiGeARyQVuVWF5cxJwYpgJXBl\nRKwGDgEbkt5PnwDeHhGvpfJX8BURcTOwFTg/ItZExLPA/42In07m0VgAZJrjoN4xJq0yJyJOAy4F\n/iRZtgH4t4h4JfDHwGsBIuIDwLNJTOcn654M/GVEnAIcBN6WEsYZVObLGLcp2eangNcD+5LlPwVc\nBKym8m33FUls1zD16mAr8LNZzt/KqTRtLqzQHouIe5KfPw1cAtwOvAr4YvKH/2x+/AFZ7UxJ7weO\nBV4EPAT8Y4bjrpzhGOONCO8DliU/vwH4GEBEPCjp/mn2/92IGG9TMnkfk51IZb4Mkj5EL46IW5L9\n/zBZDvCNiNiXPP8O8M/J9g8AZ07a35PAqmlispJzUrAiqO7FEoCAhyJi2ukUJR0DXEll9rDHJH0I\nOCbjcWc6xuHkv8/T3P9Lhyf9/DyVq5hqz5It3sn7Ojrp+dGq2I5J9mmWyrePrAiW6sdz6f4XKlN2\n7gIGx5dLmivplGSdHwAvSH4e/0D9fjL/RCOjiqY7Rj33AL+arP9K4D9Meu255JZUI3YAr4CJWfYe\nl/TWZP/zx+srDVhBgTudWv6cFKwIdlGZ4GUH8EIqk6T8iMoH/EckfQvYTuUeO8CngKuTDrKHgb+i\n8kH4BeAbWQ86wzHquZJKIvk28D+o3KoaS17bCNw/qdCcxW1UppAc9xvAJcltqa8CSxrYF1RqFF9s\ncBsrEXdJtZ6mynSjn0+KxD0vaQE+NyJ+mIz6uQNYmSSYZvd5C/D+iPjXFmN7DXBZRPxGK/ux/uaa\ngll7HQvcldwmErChlYSQ+ACVgnNLSQE4gcqIKLO6fKVgZmYTXFMwM7MJTgpmZjbBScHMzCY4KZiZ\n2QQnBTMzm+CkYGZmE/4/AFkrB2ZssXAAAAAASUVORK5CYII=\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot sepal length vs petal length for each instance\n", + "fig = plt.figure('Sepal length vs petal length')\n", + "\n", + "### CODE HERE ###\n", + "plt.scatter(pl,sl,c='m')\n", + "plt.ylabel('sepal length (cm)')\n", + "plt.xlabel('petal length (cm)')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nZuajXYreAAAAAElFTkSuQmCC\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", + "### CODE HERE ###.\n", + "x=range(len(sl))\n", + "plt.plot(x,sl,c='C')\n", + "plt.xlabel('instance')\n", + "plt.ylabel('sepal length')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Using Scikit-Learn**\n", + "\n", + "Scikit-Learn offers a variety of classifiers for learning the data and creating a model for it. This task is a classification task and hence a regression method such as Linear Regression cannot be used for it. We'll use Logistic Regression to create a classifier for this data. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before using a model on the data, we will need some data to test the model on. For this, we'll keep some data aside called the 'test set'.\n", + "\n", + "Also, we can have some problems in learning the data if the data is not randomly shuffled and chosen first. (More on this later)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "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
315.43.41.50.40
285.23.41.40.20
586.62.94.61.31
1317.93.86.42.02
507.03.24.71.41
14.93.01.40.20
546.52.84.61.51
845.43.04.51.51
985.12.53.01.11
445.13.81.90.40
1097.23.66.12.52
615.93.04.21.51
945.62.74.21.31
75.03.41.50.20
1177.73.86.72.22
134.33.01.10.10
786.02.94.51.51
1126.83.05.52.12
686.22.24.51.51
645.62.93.61.31
465.13.81.60.20
1236.32.74.91.82
1366.33.45.62.42
1227.72.86.72.02
405.03.51.30.30
815.52.43.71.01
1276.13.04.91.82
935.02.33.31.01
395.13.41.50.20
205.43.41.70.20
..................
1346.12.65.61.42
1116.42.75.31.92
885.63.04.11.31
1036.32.95.61.82
344.93.11.50.10
1196.02.25.01.52
876.32.34.41.31
746.42.94.31.31
995.72.84.11.31
665.63.04.51.51
1187.72.66.92.32
34.63.11.50.20
1486.23.45.42.32
1446.73.35.72.52
605.02.03.51.01
1086.72.55.81.82
325.24.11.50.10
365.53.51.30.20
45.03.61.40.20
856.03.44.51.61
24.73.21.30.20
435.03.51.60.60
224.63.61.00.20
695.62.53.91.11
424.43.21.30.20
516.43.24.51.51
805.52.43.81.11
776.73.05.01.71
1077.32.96.31.82
736.12.84.71.21
\n", + "

150 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n", + "31 5.4 3.4 1.5 0.4 \n", + "28 5.2 3.4 1.4 0.2 \n", + "58 6.6 2.9 4.6 1.3 \n", + "131 7.9 3.8 6.4 2.0 \n", + "50 7.0 3.2 4.7 1.4 \n", + "1 4.9 3.0 1.4 0.2 \n", + "54 6.5 2.8 4.6 1.5 \n", + "84 5.4 3.0 4.5 1.5 \n", + "98 5.1 2.5 3.0 1.1 \n", + "44 5.1 3.8 1.9 0.4 \n", + "109 7.2 3.6 6.1 2.5 \n", + "61 5.9 3.0 4.2 1.5 \n", + "94 5.6 2.7 4.2 1.3 \n", + "7 5.0 3.4 1.5 0.2 \n", + "117 7.7 3.8 6.7 2.2 \n", + "13 4.3 3.0 1.1 0.1 \n", + "78 6.0 2.9 4.5 1.5 \n", + "112 6.8 3.0 5.5 2.1 \n", + "68 6.2 2.2 4.5 1.5 \n", + "64 5.6 2.9 3.6 1.3 \n", + "46 5.1 3.8 1.6 0.2 \n", + "123 6.3 2.7 4.9 1.8 \n", + "136 6.3 3.4 5.6 2.4 \n", + "122 7.7 2.8 6.7 2.0 \n", + "40 5.0 3.5 1.3 0.3 \n", + "81 5.5 2.4 3.7 1.0 \n", + "127 6.1 3.0 4.9 1.8 \n", + "93 5.0 2.3 3.3 1.0 \n", + "39 5.1 3.4 1.5 0.2 \n", + "20 5.4 3.4 1.7 0.2 \n", + ".. ... ... ... ... \n", + "134 6.1 2.6 5.6 1.4 \n", + "111 6.4 2.7 5.3 1.9 \n", + "88 5.6 3.0 4.1 1.3 \n", + "103 6.3 2.9 5.6 1.8 \n", + "34 4.9 3.1 1.5 0.1 \n", + "119 6.0 2.2 5.0 1.5 \n", + "87 6.3 2.3 4.4 1.3 \n", + "74 6.4 2.9 4.3 1.3 \n", + "99 5.7 2.8 4.1 1.3 \n", + "66 5.6 3.0 4.5 1.5 \n", + "118 7.7 2.6 6.9 2.3 \n", + "3 4.6 3.1 1.5 0.2 \n", + "148 6.2 3.4 5.4 2.3 \n", + "144 6.7 3.3 5.7 2.5 \n", + "60 5.0 2.0 3.5 1.0 \n", + "108 6.7 2.5 5.8 1.8 \n", + "32 5.2 4.1 1.5 0.1 \n", + "36 5.5 3.5 1.3 0.2 \n", + "4 5.0 3.6 1.4 0.2 \n", + "85 6.0 3.4 4.5 1.6 \n", + "2 4.7 3.2 1.3 0.2 \n", + "43 5.0 3.5 1.6 0.6 \n", + "22 4.6 3.6 1.0 0.2 \n", + "69 5.6 2.5 3.9 1.1 \n", + "42 4.4 3.2 1.3 0.2 \n", + "51 6.4 3.2 4.5 1.5 \n", + "80 5.5 2.4 3.8 1.1 \n", + "77 6.7 3.0 5.0 1.7 \n", + "107 7.3 2.9 6.3 1.8 \n", + "73 6.1 2.8 4.7 1.2 \n", + "\n", + " target \n", + "31 0 \n", + "28 0 \n", + "58 1 \n", + "131 2 \n", + "50 1 \n", + "1 0 \n", + "54 1 \n", + "84 1 \n", + "98 1 \n", + "44 0 \n", + "109 2 \n", + "61 1 \n", + "94 1 \n", + "7 0 \n", + "117 2 \n", + "13 0 \n", + "78 1 \n", + "112 2 \n", + "68 1 \n", + "64 1 \n", + "46 0 \n", + "123 2 \n", + "136 2 \n", + "122 2 \n", + "40 0 \n", + "81 1 \n", + "127 2 \n", + "93 1 \n", + "39 0 \n", + "20 0 \n", + ".. ... \n", + "134 2 \n", + "111 2 \n", + "88 1 \n", + "103 2 \n", + "34 0 \n", + "119 2 \n", + "87 1 \n", + "74 1 \n", + "99 1 \n", + "66 1 \n", + "118 2 \n", + "3 0 \n", + "148 2 \n", + "144 2 \n", + "60 1 \n", + "108 2 \n", + "32 0 \n", + "36 0 \n", + "4 0 \n", + "85 1 \n", + "2 0 \n", + "43 0 \n", + "22 0 \n", + "69 1 \n", + "42 0 \n", + "51 1 \n", + "80 1 \n", + "77 1 \n", + "107 2 \n", + "73 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", + "from sklearn.utils import shuffle\n", + "#df = pd.DataFrame(X, columns=headers) ##incase we again run only scikit we need to uncomment the above to get good accuracy as the data is shuffled\n", + "df['target']=data.target\n", + "# Randomly shuffle dataframe\n", + "df = shuffle(df)\n", + "### CODE HERE ###\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([2, 1, 0, 1, 0, 0, 2, 2, 0, 2, 0, 0, 1, 0, 1, 2, 0, 0, 0, 0, 1, 2, 2,\n", + " 1, 2, 0, 2, 1, 0, 0])" + ] + }, + "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.96666666666666667" + ] + }, + "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": [ + "Vinayak_Assn-03.ipynb\r\n" + ] + } + ], + "source": [ + "ls" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "import pickle\n", + "\n", + "# Save dataframe to csv\n", + "df.to_csv('data.csv')\n", + "# Save model to model.pkl\n", + "pickle.dump(clf,open('model.pkl','wb'))" + ] + }, + { + "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.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/python-assn/assn-03/Assn-03.ipynb b/python-assn/assn-03/Assn-03.ipynb deleted file mode 100644 index 72fd792..0000000 --- a/python-assn/assn-03/Assn-03.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/Vinayak_Assn-03.ipynb b/python-assn/assn-03/Vinayak_Assn-03.ipynb new file mode 100644 index 0000000..8c779cf --- /dev/null +++ b/python-assn/assn-03/Vinayak_Assn-03.ipynb @@ -0,0 +1,2462 @@ +{ + "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": { + "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": 2, + "metadata": { + "scrolled": true + }, + "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, 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": 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": { + "scrolled": true + }, + "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 ###\n", + "df[0:10]" + ] + }, + { + "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 ###\n", + "df[-10:]" + ] + }, + { + "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 ###\n", + "df.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This tells us there are 150 rows and 4 columns in ```df```." + ] + }, + { + "cell_type": "code", + "execution_count": 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 ###\n", + "df.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This gives us the statistics of each of features in detail. ```count``` is the number of values in that feature, ```mean``` and ```std``` are the mean and standard deviation and the other values are the minimum, maximum and values for each of the quartiles (1st, 2nd and 3rd).\n", + "\n", + "Other methods:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "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": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Retrieve only sepal_length from df\n", + "### CODE HERE ###\n", + "df[\"sepal length (cm)\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "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": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Return 5th row of df\n", + "### CODE HERE ###\n", + "df.loc[4]" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.4\n" + ] + } + ], + "source": [ + "# Return petal length of 5th row of df\n", + "### CODE HERE ###\n", + "print(df.loc[4][\"petal length (cm)\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "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", + "dfl=df[df['sepal width (cm)']<2.9]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "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\n" + ] + } + ], + "source": [ + "# Get mean of each column in df\n", + "# Hint: use numpy.mean\n", + "import numpy as np\n", + "print(np.mean(df))\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": { + "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": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "sl = df['sepal length (cm)']" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "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": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nDaObUAAAAABJRU5ErkJggg==\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", + "### CODE HERE ###\n", + "fig1= fig.add_subplot(111)\n", + "pw=df['petal width (cm)']\n", + "pl=df['petal length (cm)']\n", + "fig1.scatter(pw,y,c='b',marker='o',label='petal width')\n", + "fig1.scatter(pl,y,c='r',marker='x',label='petal length')\n", + "fig1.set_ylabel('flower')\n", + "fig1.set_xlabel('lenth/width cm')\n", + "fig1.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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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 ###\n", + "plt.scatter(pl,sl,c='m')\n", + "plt.ylabel('sepal length (cm)')\n", + "plt.xlabel('petal length (cm)')\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\nZuajXYreAAAAAElFTkSuQmCC\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", + "### CODE HERE ###.\n", + "x=range(len(sl))\n", + "plt.plot(x,sl,c='C')\n", + "plt.xlabel('instance')\n", + "plt.ylabel('sepal length')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Using Scikit-Learn**\n", + "\n", + "Scikit-Learn offers a variety of classifiers for learning the data and creating a model for it. This task is a classification task and hence a regression method such as Linear Regression cannot be used for it. We'll use Logistic Regression to create a classifier for this data. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before using a model on the data, we will need some data to test the model on. For this, we'll keep some data aside called the 'test set'.\n", + "\n", + "Also, we can have some problems in learning the data if the data is not randomly shuffled and chosen first. (More on this later)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "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
1466.32.55.01.92
1057.63.06.62.12
384.43.01.30.20
1196.02.25.01.52
665.63.04.51.51
976.22.94.31.31
75.03.41.50.20
1266.22.84.81.82
1015.82.75.11.92
1326.42.85.62.22
344.93.11.50.10
84.42.91.40.20
1106.53.25.12.02
335.54.21.40.20
916.13.04.61.41
374.93.11.50.10
595.22.73.91.41
285.23.41.40.20
566.33.34.71.61
395.13.41.50.20
656.73.14.41.41
1376.43.15.51.82
1476.53.05.22.02
716.12.84.01.31
1486.23.45.42.32
325.24.11.50.10
454.83.01.40.30
1257.23.26.01.82
1307.42.86.11.92
736.12.84.71.21
..................
1116.42.75.31.92
1064.92.54.51.72
815.52.43.71.01
304.83.11.60.20
1425.82.75.11.92
34.63.11.50.20
526.93.14.91.51
605.02.03.51.01
185.73.81.70.30
1446.73.35.72.52
955.73.04.21.21
1386.03.04.81.82
55.43.91.70.40
1166.53.05.51.82
895.52.54.01.31
1097.23.66.12.52
365.53.51.30.20
414.52.31.30.30
586.62.94.61.31
836.02.75.11.61
1077.32.96.31.82
1135.72.55.02.02
485.33.71.50.20
795.72.63.51.01
776.73.05.01.71
105.43.71.50.20
615.93.04.21.51
235.13.31.70.50
507.03.24.71.41
574.92.43.31.01
\n", + "

150 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n", + "146 6.3 2.5 5.0 1.9 \n", + "105 7.6 3.0 6.6 2.1 \n", + "38 4.4 3.0 1.3 0.2 \n", + "119 6.0 2.2 5.0 1.5 \n", + "66 5.6 3.0 4.5 1.5 \n", + "97 6.2 2.9 4.3 1.3 \n", + "7 5.0 3.4 1.5 0.2 \n", + "126 6.2 2.8 4.8 1.8 \n", + "101 5.8 2.7 5.1 1.9 \n", + "132 6.4 2.8 5.6 2.2 \n", + "34 4.9 3.1 1.5 0.1 \n", + "8 4.4 2.9 1.4 0.2 \n", + "110 6.5 3.2 5.1 2.0 \n", + "33 5.5 4.2 1.4 0.2 \n", + "91 6.1 3.0 4.6 1.4 \n", + "37 4.9 3.1 1.5 0.1 \n", + "59 5.2 2.7 3.9 1.4 \n", + "28 5.2 3.4 1.4 0.2 \n", + "56 6.3 3.3 4.7 1.6 \n", + "39 5.1 3.4 1.5 0.2 \n", + "65 6.7 3.1 4.4 1.4 \n", + "137 6.4 3.1 5.5 1.8 \n", + "147 6.5 3.0 5.2 2.0 \n", + "71 6.1 2.8 4.0 1.3 \n", + "148 6.2 3.4 5.4 2.3 \n", + "32 5.2 4.1 1.5 0.1 \n", + "45 4.8 3.0 1.4 0.3 \n", + "125 7.2 3.2 6.0 1.8 \n", + "130 7.4 2.8 6.1 1.9 \n", + "73 6.1 2.8 4.7 1.2 \n", + ".. ... ... ... ... \n", + "111 6.4 2.7 5.3 1.9 \n", + "106 4.9 2.5 4.5 1.7 \n", + "81 5.5 2.4 3.7 1.0 \n", + "30 4.8 3.1 1.6 0.2 \n", + "142 5.8 2.7 5.1 1.9 \n", + "3 4.6 3.1 1.5 0.2 \n", + "52 6.9 3.1 4.9 1.5 \n", + "60 5.0 2.0 3.5 1.0 \n", + "18 5.7 3.8 1.7 0.3 \n", + "144 6.7 3.3 5.7 2.5 \n", + "95 5.7 3.0 4.2 1.2 \n", + "138 6.0 3.0 4.8 1.8 \n", + "5 5.4 3.9 1.7 0.4 \n", + "116 6.5 3.0 5.5 1.8 \n", + "89 5.5 2.5 4.0 1.3 \n", + "109 7.2 3.6 6.1 2.5 \n", + "36 5.5 3.5 1.3 0.2 \n", + "41 4.5 2.3 1.3 0.3 \n", + "58 6.6 2.9 4.6 1.3 \n", + "83 6.0 2.7 5.1 1.6 \n", + "107 7.3 2.9 6.3 1.8 \n", + "113 5.7 2.5 5.0 2.0 \n", + "48 5.3 3.7 1.5 0.2 \n", + "79 5.7 2.6 3.5 1.0 \n", + "77 6.7 3.0 5.0 1.7 \n", + "10 5.4 3.7 1.5 0.2 \n", + "61 5.9 3.0 4.2 1.5 \n", + "23 5.1 3.3 1.7 0.5 \n", + "50 7.0 3.2 4.7 1.4 \n", + "57 4.9 2.4 3.3 1.0 \n", + "\n", + " target \n", + "146 2 \n", + "105 2 \n", + "38 0 \n", + "119 2 \n", + "66 1 \n", + "97 1 \n", + "7 0 \n", + "126 2 \n", + "101 2 \n", + "132 2 \n", + "34 0 \n", + "8 0 \n", + "110 2 \n", + "33 0 \n", + "91 1 \n", + "37 0 \n", + "59 1 \n", + "28 0 \n", + "56 1 \n", + "39 0 \n", + "65 1 \n", + "137 2 \n", + "147 2 \n", + "71 1 \n", + "148 2 \n", + "32 0 \n", + "45 0 \n", + "125 2 \n", + "130 2 \n", + "73 1 \n", + ".. ... \n", + "111 2 \n", + "106 2 \n", + "81 1 \n", + "30 0 \n", + "142 2 \n", + "3 0 \n", + "52 1 \n", + "60 1 \n", + "18 0 \n", + "144 2 \n", + "95 1 \n", + "138 2 \n", + "5 0 \n", + "116 2 \n", + "89 1 \n", + "109 2 \n", + "36 0 \n", + "41 0 \n", + "58 1 \n", + "83 1 \n", + "107 2 \n", + "113 2 \n", + "48 0 \n", + "79 1 \n", + "77 1 \n", + "10 0 \n", + "61 1 \n", + "23 0 \n", + "50 1 \n", + "57 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", + "from sklearn.utils import shuffle\n", + "#df = pd.DataFrame(X, columns=headers) ##incase we again run only scikit we need to uncomment the above to get good accuracy as the data is shuffled\n", + "df['target']=data.target\n", + "# Randomly shuffle dataframe\n", + "df = shuffle(df)\n", + "### CODE HERE ###\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, 0, 0, 0, 2, 0, 1, 1, 2, 2, 1, 2, 1, 1, 0, 2, 0, 2, 0, 2, 1, 0, 0,\n", + " 0, 0, 2, 1, 1, 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.96666666666666667" + ] + }, + "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": [ + "Vinayak_Assn-03.ipynb\r\n" + ] + } + ], + "source": [ + "ls" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pickle\n", + "\n", + "# Save dataframe to csv\n", + "df.to_csv('data.csv')\n", + "# Save model to model.pkl\n", + "pickle.dump(clf,open('model.pkl','wb'))" + ] + }, + { + "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.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/python-assn/assn-03/data.csv b/python-assn/assn-03/data.csv new file mode 100644 index 0000000..46fc1ca --- /dev/null +++ b/python-assn/assn-03/data.csv @@ -0,0 +1,151 @@ +,sepal length (cm),sepal width (cm),petal length (cm),petal width (cm),target +146,6.3,2.5,5.0,1.9,2 +105,7.6,3.0,6.6,2.1,2 +38,4.4,3.0,1.3,0.2,0 +119,6.0,2.2,5.0,1.5,2 +66,5.6,3.0,4.5,1.5,1 +97,6.2,2.9,4.3,1.3,1 +7,5.0,3.4,1.5,0.2,0 +126,6.2,2.8,4.8,1.8,2 +101,5.8,2.7,5.1,1.9,2 +132,6.4,2.8,5.6,2.2,2 +34,4.9,3.1,1.5,0.1,0 +8,4.4,2.9,1.4,0.2,0 +110,6.5,3.2,5.1,2.0,2 +33,5.5,4.2,1.4,0.2,0 +91,6.1,3.0,4.6,1.4,1 +37,4.9,3.1,1.5,0.1,0 +59,5.2,2.7,3.9,1.4,1 +28,5.2,3.4,1.4,0.2,0 +56,6.3,3.3,4.7,1.6,1 +39,5.1,3.4,1.5,0.2,0 +65,6.7,3.1,4.4,1.4,1 +137,6.4,3.1,5.5,1.8,2 +147,6.5,3.0,5.2,2.0,2 +71,6.1,2.8,4.0,1.3,1 +148,6.2,3.4,5.4,2.3,2 +32,5.2,4.1,1.5,0.1,0 +45,4.8,3.0,1.4,0.3,0 +125,7.2,3.2,6.0,1.8,2 +130,7.4,2.8,6.1,1.9,2 +73,6.1,2.8,4.7,1.2,1 +62,6.0,2.2,4.0,1.0,1 +114,5.8,2.8,5.1,2.4,2 +124,6.7,3.3,5.7,2.1,2 +24,4.8,3.4,1.9,0.2,0 +149,5.9,3.0,5.1,1.8,2 +75,6.6,3.0,4.4,1.4,1 +134,6.1,2.6,5.6,1.4,2 +139,6.9,3.1,5.4,2.1,2 +25,5.0,3.0,1.6,0.2,0 +78,6.0,2.9,4.5,1.5,1 +49,5.0,3.3,1.4,0.2,0 +102,7.1,3.0,5.9,2.1,2 +21,5.1,3.7,1.5,0.4,0 +63,6.1,2.9,4.7,1.4,1 +35,5.0,3.2,1.2,0.2,0 +93,5.0,2.3,3.3,1.0,1 +115,6.4,3.2,5.3,2.3,2 +29,4.7,3.2,1.6,0.2,0 +76,6.8,2.8,4.8,1.4,1 +141,6.9,3.1,5.1,2.3,2 +118,7.7,2.6,6.9,2.3,2 +121,5.6,2.8,4.9,2.0,2 +74,6.4,2.9,4.3,1.3,1 +51,6.4,3.2,4.5,1.5,1 +19,5.1,3.8,1.5,0.3,0 +0,5.1,3.5,1.4,0.2,0 +67,5.8,2.7,4.1,1.0,1 +42,4.4,3.2,1.3,0.2,0 +136,6.3,3.4,5.6,2.4,2 +90,5.5,2.6,4.4,1.2,1 +108,6.7,2.5,5.8,1.8,2 +53,5.5,2.3,4.0,1.3,1 +46,5.1,3.8,1.6,0.2,0 +135,7.7,3.0,6.1,2.3,2 +140,6.7,3.1,5.6,2.4,2 +6,4.6,3.4,1.4,0.3,0 +112,6.8,3.0,5.5,2.1,2 +68,6.2,2.2,4.5,1.5,1 +82,5.8,2.7,3.9,1.2,1 +86,6.7,3.1,4.7,1.5,1 +11,4.8,3.4,1.6,0.2,0 +87,6.3,2.3,4.4,1.3,1 +47,4.6,3.2,1.4,0.2,0 +98,5.1,2.5,3.0,1.1,1 +131,7.9,3.8,6.4,2.0,2 +9,4.9,3.1,1.5,0.1,0 +55,5.7,2.8,4.5,1.3,1 +85,6.0,3.4,4.5,1.6,1 +16,5.4,3.9,1.3,0.4,0 +26,5.0,3.4,1.6,0.4,0 +122,7.7,2.8,6.7,2.0,2 +143,6.8,3.2,5.9,2.3,2 +84,5.4,3.0,4.5,1.5,1 +43,5.0,3.5,1.6,0.6,0 +44,5.1,3.8,1.9,0.4,0 +88,5.6,3.0,4.1,1.3,1 +22,4.6,3.6,1.0,0.2,0 +27,5.2,3.5,1.5,0.2,0 +31,5.4,3.4,1.5,0.4,0 +99,5.7,2.8,4.1,1.3,1 +40,5.0,3.5,1.3,0.3,0 +1,4.9,3.0,1.4,0.2,0 +128,6.4,2.8,5.6,2.1,2 +133,6.3,2.8,5.1,1.5,2 +104,6.5,3.0,5.8,2.2,2 +54,6.5,2.8,4.6,1.5,1 +69,5.6,2.5,3.9,1.1,1 +15,5.7,4.4,1.5,0.4,0 +129,7.2,3.0,5.8,1.6,2 +20,5.4,3.4,1.7,0.2,0 +120,6.9,3.2,5.7,2.3,2 +103,6.3,2.9,5.6,1.8,2 +80,5.5,2.4,3.8,1.1,1 +145,6.7,3.0,5.2,2.3,2 +70,5.9,3.2,4.8,1.8,1 +127,6.1,3.0,4.9,1.8,2 +123,6.3,2.7,4.9,1.8,2 +13,4.3,3.0,1.1,0.1,0 +4,5.0,3.6,1.4,0.2,0 +94,5.6,2.7,4.2,1.3,1 +72,6.3,2.5,4.9,1.5,1 +100,6.3,3.3,6.0,2.5,2 +64,5.6,2.9,3.6,1.3,1 +14,5.8,4.0,1.2,0.2,0 +17,5.1,3.5,1.4,0.3,0 +96,5.7,2.9,4.2,1.3,1 +92,5.8,2.6,4.0,1.2,1 +12,4.8,3.0,1.4,0.1,0 +2,4.7,3.2,1.3,0.2,0 +117,7.7,3.8,6.7,2.2,2 +111,6.4,2.7,5.3,1.9,2 +106,4.9,2.5,4.5,1.7,2 +81,5.5,2.4,3.7,1.0,1 +30,4.8,3.1,1.6,0.2,0 +142,5.8,2.7,5.1,1.9,2 +3,4.6,3.1,1.5,0.2,0 +52,6.9,3.1,4.9,1.5,1 +60,5.0,2.0,3.5,1.0,1 +18,5.7,3.8,1.7,0.3,0 +144,6.7,3.3,5.7,2.5,2 +95,5.7,3.0,4.2,1.2,1 +138,6.0,3.0,4.8,1.8,2 +5,5.4,3.9,1.7,0.4,0 +116,6.5,3.0,5.5,1.8,2 +89,5.5,2.5,4.0,1.3,1 +109,7.2,3.6,6.1,2.5,2 +36,5.5,3.5,1.3,0.2,0 +41,4.5,2.3,1.3,0.3,0 +58,6.6,2.9,4.6,1.3,1 +83,6.0,2.7,5.1,1.6,1 +107,7.3,2.9,6.3,1.8,2 +113,5.7,2.5,5.0,2.0,2 +48,5.3,3.7,1.5,0.2,0 +79,5.7,2.6,3.5,1.0,1 +77,6.7,3.0,5.0,1.7,1 +10,5.4,3.7,1.5,0.2,0 +61,5.9,3.0,4.2,1.5,1 +23,5.1,3.3,1.7,0.5,0 +50,7.0,3.2,4.7,1.4,1 +57,4.9,2.4,3.3,1.0,1 diff --git a/python-assn/assn-03/model.pkl b/python-assn/assn-03/model.pkl new file mode 100644 index 0000000..1f44a86 Binary files /dev/null and b/python-assn/assn-03/model.pkl differ