diff --git a/python-assn/assn-01/Raghav_bansal.ipynb b/python-assn/assn-01/Raghav_bansal.ipynb
new file mode 100644
index 0000000..379c8cf
--- /dev/null
+++ b/python-assn/assn-01/Raghav_bansal.ipynb
@@ -0,0 +1,414 @@
+{
+ "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": [],
+ "source": [
+ "def least_int(num):\n",
+ " list1=list(num)\n",
+ " list1.sort()\n",
+ " list1.reverse()\n",
+ " a=1\n",
+ " t=0\n",
+ " for digit in list1:\n",
+ " t+=((int)(digit))*a\n",
+ " a=a*10\n",
+ " print(t) "
+ ]
+ },
+ {
+ "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": [],
+ "source": [
+ "def function_a(string1):\n",
+ " b=0\n",
+ " string1=string1+\" \"\n",
+ " for index in range(len(string1)):\n",
+ " if string1[index]==' ':\n",
+ " str=string1[b:index]\n",
+ " b=index+1\n",
+ " index+=1\n",
+ " if str[0]=='a':\n",
+ " print(str[len(str)-1],end='')\n",
+ " "
+ ]
+ },
+ {
+ "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": 20,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def remove_dup(mystring):\n",
+ " b=0\n",
+ " t=0\n",
+ " flag=1\n",
+ " mystring+=' '\n",
+ " dict={}\n",
+ " g=list1=list()\n",
+ " for index in range(len(mystring)):\n",
+ " if mystring[index]==' ':\n",
+ " str=mystring[b:index]\n",
+ " b=index+1\n",
+ " index+=1\n",
+ " list1.append(str)\n",
+ " dict=dict.fromkeys(list1)\n",
+ " dict=dict.keys()\n",
+ " g=list(dict)\n",
+ " print(\"'%s'\"%(''.join(g)))"
+ ]
+ },
+ {
+ "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": 21,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "mystring = 'SatanoscillatemymetallicsonataS'\n",
+ "if mystring[::1]==mystring[::-1]:\n",
+ " print(\"palindrome\")\n",
+ "else:\n",
+ " print(\"p\")"
+ ]
+ },
+ {
+ "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": 22,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def list_of_avgs(a):\n",
+ " b=[]\n",
+ " for i in range(len(a)):\n",
+ " t=0\n",
+ " for j in range(i+1):\n",
+ " t+=a[j]\n",
+ " b.append(t/(i+1))\n",
+ " print(b)"
+ ]
+ },
+ {
+ "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": 23,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def asc_descc_list(a):\n",
+ " for i in range(len(a)-2):\n",
+ " if i%2==0:\n",
+ " for j in range(len(a)-i-2):\n",
+ " if a[j]>a[j+2]:\n",
+ " temp=a[j]\n",
+ " a[j]=a[j+2]\n",
+ " a[j+2]=temp\n",
+ " else:\n",
+ " for j in range(len(a)-i-2):\n",
+ " if a[j] n): \n",
+ " return\n",
+ " yield a\n",
+ " a, b = b, a + b\n",
+ " counter += 1\n",
+ "f = fibonacci(5) #f is iterator object\n",
+ "\n",
+ "while True:\n",
+ " try:\n",
+ " print (next(f), end=\" \")\n",
+ " except StopIteration:\n",
+ " sys.exit()"
+ ]
+ },
+ {
+ "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": 25,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def sub_lists(a):\n",
+ " print([])\n",
+ " for i in range(len(a)+1):\n",
+ " for j in range(i+1):\n",
+ " if j!=i:\n",
+ " print(a[j:i])"
+ ]
+ },
+ {
+ "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": 26,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[1, 2, 3]\n",
+ "[1, 2, 3]\n"
+ ]
+ }
+ ],
+ "source": [
+ "def modify_list(a):\n",
+ " t= 0\n",
+ " for i in a:\n",
+ " total += i\n",
+ " a.append(total)\n",
+ " pass\n",
+ "\n",
+ "def reassign_list(a):\n",
+ " new_a=[]\n",
+ " for i in a:\n",
+ " new_a.append( i + 1)\n",
+ " a = new_a\n",
+ " print(a)\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": 28,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def char_position(a):\n",
+ " dict={}\n",
+ " c=1\n",
+ " for i in a:\n",
+ " if i!=' ':\n",
+ " dict[c]=i\n",
+ " c +=1\n",
+ " return dict\n",
+ " pass"
+ ]
+ },
+ {
+ "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": 29,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "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.**"
+ ]
+ }
+ ],
+ "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-02/Raghav_bansal.ipynb b/python-assn/assn-02/Raghav_bansal.ipynb
new file mode 100644
index 0000000..d12bbae
--- /dev/null
+++ b/python-assn/assn-02/Raghav_bansal.ipynb
@@ -0,0 +1,713 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Numpy exercise\n",
+ "===\n",
+ "\n",
+ "This exercise is designed to get you familiarised with numpy and shows the most common operations that you will perform in the future.\n",
+ "\n",
+ "You will need the Iris.csv file from the GitHub repositry to perform this exercise.\n",
+ "\n",
+ "Write your code in the following way:\n",
+ "#################################
\n",
+ "\n",
+ "Your code here\n",
+ "#################################"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {},
+ "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",
+ "A=A.reshape(4,4)\n",
+ "print(A)\n",
+ "#################################"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Expected output:
\n",
+ "[[ 0 1 2 3]\n",
+ " [ 4 5 6 7]\n",
+ " [ 8 9 10 11]\n",
+ " [12 13 14 15]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 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",
+ "B=np.square(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": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[[101 151 89 106 168 63 237 196 67 252 201 91 183 220 130 65 84 165\n",
+ " 21 9 161 185 180 98 217 188 134 53]\n",
+ " [ 28 25 240 227 109 167 57 231 13 35 77 117 205 61 138 132 102 165\n",
+ " 241 213 196 3 61 110 14 30 157 198]\n",
+ " [188 124 122 177 1 104 67 236 55 110 82 212 156 213 226 174 215 197\n",
+ " 118 212 201 6 18 88 140 94 114 138]\n",
+ " [ 52 67 71 204 10 52 72 93 129 181 200 30 219 179 34 32 78 170\n",
+ " 8 64 111 180 40 195 19 44 101 217]\n",
+ " [246 240 17 240 35 108 15 124 34 172 23 84 143 19 137 131 161 48\n",
+ " 172 124 119 150 86 48 249 114 187 229]\n",
+ " [250 128 149 250 162 19 56 190 228 161 0 84 127 114 118 207 188 139\n",
+ " 111 5 146 125 166 72 213 168 234 25]\n",
+ " [226 26 69 98 196 155 184 185 160 183 181 91 96 28 90 137 40 143\n",
+ " 52 104 103 186 43 242 163 230 182 153]\n",
+ " [ 71 165 97 62 82 131 184 142 75 104 249 88 138 152 125 108 45 192\n",
+ " 104 50 50 66 206 228 181 146 157 237]\n",
+ " [169 51 184 91 227 211 9 27 244 36 124 149 57 72 61 142 244 215\n",
+ " 46 81 180 115 69 252 239 22 136 74]\n",
+ " [ 99 142 69 197 93 143 87 161 242 167 214 150 151 83 252 152 138 252\n",
+ " 205 106 43 66 3 40 126 247 139 40]\n",
+ " [163 229 136 28 248 194 213 176 167 109 112 162 120 13 29 73 20 9\n",
+ " 199 215 30 167 66 47 48 107 7 238]\n",
+ " [169 90 251 135 101 58 254 170 51 17 85 239 212 115 186 176 95 248\n",
+ " 218 135 235 76 176 85 56 96 203 105]\n",
+ " [221 253 147 83 70 84 209 134 144 110 254 147 148 176 206 23 232 92\n",
+ " 24 43 50 163 54 104 230 241 40 198]\n",
+ " [175 233 211 5 19 161 63 29 246 234 107 47 170 95 3 198 153 146\n",
+ " 225 254 141 8 172 84 189 8 112 194]\n",
+ " [206 79 230 180 188 246 2 170 64 200 135 84 148 23 67 254 233 13\n",
+ " 196 144 72 248 153 176 182 247 189 73]\n",
+ " [234 22 30 220 165 154 12 152 180 39 164 23 26 252 244 153 43 11\n",
+ " 189 84 10 54 120 145 193 163 117 248]\n",
+ " [ 82 69 190 185 33 32 205 83 157 119 64 145 84 32 136 35 7 205\n",
+ " 2 154 162 14 33 194 216 236 158 165]\n",
+ " [183 110 152 168 107 246 144 230 12 60 2 62 246 65 133 115 118 244\n",
+ " 196 189 0 34 128 103 131 176 83 105]\n",
+ " [219 36 108 154 129 5 65 69 228 236 244 35 215 130 0 22 6 147\n",
+ " 101 76 63 206 217 232 235 251 150 221]\n",
+ " [ 7 34 158 104 58 21 81 106 88 210 124 112 199 30 130 76 98 70\n",
+ " 158 34 47 210 208 157 108 169 236 36]\n",
+ " [151 172 132 181 5 149 228 254 89 207 147 110 25 196 250 184 189 150\n",
+ " 220 123 177 12 3 128 223 117 127 67]\n",
+ " [180 15 27 176 180 132 93 211 250 215 78 161 196 23 219 217 201 106\n",
+ " 120 133 6 114 15 199 245 30 153 124]\n",
+ " [196 250 14 115 57 192 161 248 31 213 228 28 91 60 66 205 5 169\n",
+ " 178 169 31 115 143 220 127 230 119 240]\n",
+ " [126 95 128 253 134 125 143 190 162 196 182 121 105 119 188 227 238 44\n",
+ " 145 35 58 29 109 191 157 219 234 243]\n",
+ " [171 223 229 64 114 53 17 220 240 119 183 47 122 94 100 0 57 243\n",
+ " 107 146 251 121 206 50 72 159 46 134]\n",
+ " [241 69 17 144 16 113 196 27 37 21 38 169 16 149 85 41 44 177\n",
+ " 85 15 18 43 168 156 162 82 248 113]\n",
+ " [ 21 198 77 201 192 8 197 129 130 74 22 88 192 112 136 252 156 51\n",
+ " 150 106 226 24 182 64 253 185 148 74]\n",
+ " [ 81 86 38 13 127 16 30 124 15 1 214 83 95 49 142 237 185 205\n",
+ " 230 142 217 211 240 37 57 181 119 226]]\n",
+ "[101 151 89 106 168 63 237 196 67 252 201 91 183 220 130 65 84 165\n",
+ " 21 9 161 185 180 98 217 188 134 53 28 25 240 227 109 167 57 231\n",
+ " 13 35 77 117 205 61 138 132 102 165 241 213 196 3 61 110 14 30\n",
+ " 157 198 188 124 122 177 1 104 67 236 55 110 82 212 156 213 226 174\n",
+ " 215 197 118 212 201 6 18 88 140 94 114 138 52 67 71 204 10 52\n",
+ " 72 93 129 181 200 30 219 179 34 32 78 170 8 64 111 180 40 195\n",
+ " 19 44 101 217 246 240 17 240 35 108 15 124 34 172 23 84 143 19\n",
+ " 137 131 161 48 172 124 119 150 86 48 249 114 187 229 250 128 149 250\n",
+ " 162 19 56 190 228 161 0 84 127 114 118 207 188 139 111 5 146 125\n",
+ " 166 72 213 168 234 25 226 26 69 98 196 155 184 185 160 183 181 91\n",
+ " 96 28 90 137 40 143 52 104 103 186 43 242 163 230 182 153 71 165\n",
+ " 97 62 82 131 184 142 75 104 249 88 138 152 125 108 45 192 104 50\n",
+ " 50 66 206 228 181 146 157 237 169 51 184 91 227 211 9 27 244 36\n",
+ " 124 149 57 72 61 142 244 215 46 81 180 115 69 252 239 22 136 74\n",
+ " 99 142 69 197 93 143 87 161 242 167 214 150 151 83 252 152 138 252\n",
+ " 205 106 43 66 3 40 126 247 139 40 163 229 136 28 248 194 213 176\n",
+ " 167 109 112 162 120 13 29 73 20 9 199 215 30 167 66 47 48 107\n",
+ " 7 238 169 90 251 135 101 58 254 170 51 17 85 239 212 115 186 176\n",
+ " 95 248 218 135 235 76 176 85 56 96 203 105 221 253 147 83 70 84\n",
+ " 209 134 144 110 254 147 148 176 206 23 232 92 24 43 50 163 54 104\n",
+ " 230 241 40 198 175 233 211 5 19 161 63 29 246 234 107 47 170 95\n",
+ " 3 198 153 146 225 254 141 8 172 84 189 8 112 194 206 79 230 180\n",
+ " 188 246 2 170 64 200 135 84 148 23 67 254 233 13 196 144 72 248\n",
+ " 153 176 182 247 189 73 234 22 30 220 165 154 12 152 180 39 164 23\n",
+ " 26 252 244 153 43 11 189 84 10 54 120 145 193 163 117 248 82 69\n",
+ " 190 185 33 32 205 83 157 119 64 145 84 32 136 35 7 205 2 154\n",
+ " 162 14 33 194 216 236 158 165 183 110 152 168 107 246 144 230 12 60\n",
+ " 2 62 246 65 133 115 118 244 196 189 0 34 128 103 131 176 83 105\n",
+ " 219 36 108 154 129 5 65 69 228 236 244 35 215 130 0 22 6 147\n",
+ " 101 76 63 206 217 232 235 251 150 221 7 34 158 104 58 21 81 106\n",
+ " 88 210 124 112 199 30 130 76 98 70 158 34 47 210 208 157 108 169\n",
+ " 236 36 151 172 132 181 5 149 228 254 89 207 147 110 25 196 250 184\n",
+ " 189 150 220 123 177 12 3 128 223 117 127 67 180 15 27 176 180 132\n",
+ " 93 211 250 215 78 161 196 23 219 217 201 106 120 133 6 114 15 199\n",
+ " 245 30 153 124 196 250 14 115 57 192 161 248 31 213 228 28 91 60\n",
+ " 66 205 5 169 178 169 31 115 143 220 127 230 119 240 126 95 128 253\n",
+ " 134 125 143 190 162 196 182 121 105 119 188 227 238 44 145 35 58 29\n",
+ " 109 191 157 219 234 243 171 223 229 64 114 53 17 220 240 119 183 47\n",
+ " 122 94 100 0 57 243 107 146 251 121 206 50 72 159 46 134 241 69\n",
+ " 17 144 16 113 196 27 37 21 38 169 16 149 85 41 44 177 85 15\n",
+ " 18 43 168 156 162 82 248 113 21 198 77 201 192 8 197 129 130 74\n",
+ " 22 88 192 112 136 252 156 51 150 106 226 24 182 64 253 185 148 74\n",
+ " 81 86 38 13 127 16 30 124 15 1 214 83 95 49 142 237 185 205\n",
+ " 230 142 217 211 240 37 57 181 119 226]\n",
+ "[ 1 101 151 89 106 168 63 237 196 67 252 201 91 183 220 130 65 84\n",
+ " 165 21 9 161 185 180 98 217 188 134 53 28 25 240 227 109 167 57\n",
+ " 231 13 35 77 117 205 61 138 132 102 165 241 213 196 3 61 110 14\n",
+ " 30 157 198 188 124 122 177 1 104 67 236 55 110 82 212 156 213 226\n",
+ " 174 215 197 118 212 201 6 18 88 140 94 114 138 52 67 71 204 10\n",
+ " 52 72 93 129 181 200 30 219 179 34 32 78 170 8 64 111 180 40\n",
+ " 195 19 44 101 217 246 240 17 240 35 108 15 124 34 172 23 84 143\n",
+ " 19 137 131 161 48 172 124 119 150 86 48 249 114 187 229 250 128 149\n",
+ " 250 162 19 56 190 228 161 0 84 127 114 118 207 188 139 111 5 146\n",
+ " 125 166 72 213 168 234 25 226 26 69 98 196 155 184 185 160 183 181\n",
+ " 91 96 28 90 137 40 143 52 104 103 186 43 242 163 230 182 153 71\n",
+ " 165 97 62 82 131 184 142 75 104 249 88 138 152 125 108 45 192 104\n",
+ " 50 50 66 206 228 181 146 157 237 169 51 184 91 227 211 9 27 244\n",
+ " 36 124 149 57 72 61 142 244 215 46 81 180 115 69 252 239 22 136\n",
+ " 74 99 142 69 197 93 143 87 161 242 167 214 150 151 83 252 152 138\n",
+ " 252 205 106 43 66 3 40 126 247 139 40 163 229 136 28 248 194 213\n",
+ " 176 167 109 112 162 120 13 29 73 20 9 199 215 30 167 66 47 48\n",
+ " 107 7 238 169 90 251 135 101 58 254 170 51 17 85 239 212 115 186\n",
+ " 176 95 248 218 135 235 76 176 85 56 96 203 105 221 253 147 83 70\n",
+ " 84 209 134 144 110 254 147 148 176 206 23 232 92 24 43 50 163 54\n",
+ " 104 230 241 40 198 175 233 211 5 19 161 63 29 246 234 107 47 170\n",
+ " 95 3 198 153 146 225 254 141 8 172 84 189 8 112 194 206 79 230\n",
+ " 180 188 246 2 170 64 200 135 84 148 23 67 254 233 13 196 144 72\n",
+ " 248 153 176 182 247 189 73 234 22 30 220 165 154 12 152 180 39 164\n",
+ " 23 26 252 244 153 43 11 189 84 10 54 120 145 193 163 117 248 82\n",
+ " 69 190 185 33 32 205 83 157 119 64 145 84 32 136 35 7 205 2\n",
+ " 154 162 14 33 194 216 236 158 165 183 110 152 168 107 246 144 230 12\n",
+ " 60 2 62 246 65 133 115 118 244 196 189 0 34 128 103 131 176 83\n",
+ " 105 219 36 108 154 129 5 65 69 228 236 244 35 215 130 0 22 6\n",
+ " 147 101 76 63 206 217 232 235 251 150 221 7 34 158 104 58 21 81\n",
+ " 106 88 210 124 112 199 30 130 76 98 70 158 34 47 210 208 157 108\n",
+ " 169 236 36 151 172 132 181 5 149 228 254 89 207 147 110 25 196 250\n",
+ " 184 189 150 220 123 177 12 3 128 223 117 127 67 180 15 27 176 180\n",
+ " 132 93 211 250 215 78 161 196 23 219 217 201 106 120 133 6 114 15\n",
+ " 199 245 30 153 124 196 250 14 115 57 192 161 248 31 213 228 28 91\n",
+ " 60 66 205 5 169 178 169 31 115 143 220 127 230 119 240 126 95 128\n",
+ " 253 134 125 143 190 162 196 182 121 105 119 188 227 238 44 145 35 58\n",
+ " 29 109 191 157 219 234 243 171 223 229 64 114 53 17 220 240 119 183\n",
+ " 47 122 94 100 0 57 243 107 146 251 121 206 50 72 159 46 134 241\n",
+ " 69 17 144 16 113 196 27 37 21 38 169 16 149 85 41 44 177 85\n",
+ " 15 18 43 168 156 162 82 248 113 21 198 77 201 192 8 197 129 130\n",
+ " 74 22 88 192 112 136 252 156 51 150 106 226 24 182 64 253 185 148\n",
+ " 74 81 86 38 13 127 16 30 124 15 1 214 83 95 49 142 237 185\n",
+ " 205 230 142 217 211 240 37 57 181 119 226]\n",
+ "[[ 0.00397438 0.0052575 0.00944947 ... -0.00170334 0.02914983\n",
+ " -0.02069609]\n",
+ " [ 0.00174004 0.00962225 -0.00556126 ... -0.0020168 0.00665765\n",
+ " -0.00436573]\n",
+ " [-0.0125678 -0.01706139 0.00159456 ... 0.00040694 0.00640759\n",
+ " -0.01300514]\n",
+ " ...\n",
+ " [ 0.00931385 -0.01131872 0.00750438 ... 0.0063595 0.00798807\n",
+ " 0.00559677]\n",
+ " [ 0.00265882 0.00238207 0.01086633 ... 0.00718832 0.00026279\n",
+ " -0.00043161]\n",
+ " [ 0.00737909 0.00521057 -0.01454539 ... -0.00755656 -0.01642226\n",
+ " -0.01287195]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "#Create a numpy array of shape (28,28) whose values are chosen randomly from 0-255\n",
+ "#################################\n",
+ "import random \n",
+ "a=n.random.randint(0,255,(28,28))\n",
+ "print (a)\n",
+ "#################################\n",
+ "\n",
+ "#Convert x into a vector (Make it of single dimension)\n",
+ "#################################\n",
+ "x=a.flatten()\n",
+ "print(x)\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",
+ "x=np.insert(x,0,1)\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,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",
+ "if w.shape==x.shape:\n",
+ " print (np.multiply(w,x))\n",
+ "#################################"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[[4.4 2.9 1.4 0.2 0. ]\n",
+ " [4.9 2.4 3.3 1. 1. ]\n",
+ " [5.2 3.4 1.4 0.2 0. ]\n",
+ " [5.5 2.4 3.7 1. 1. ]\n",
+ " [5.7 3. 4.2 1.2 1. ]\n",
+ " [5.4 3.4 1.5 0.4 0. ]\n",
+ " [6.3 3.4 5.6 2.4 2. ]\n",
+ " [6.7 3.1 4.4 1.4 1. ]\n",
+ " [6.2 2.8 4.8 1.8 2. ]\n",
+ " [5. 3.4 1.5 0.2 0. ]\n",
+ " [6.3 3.3 6. 2.5 2. ]\n",
+ " [6.4 3.1 5.5 1.8 2. ]\n",
+ " [4.9 3.1 1.5 0.1 0. ]\n",
+ " [6.6 3. 4.4 1.4 1. ]\n",
+ " [5.5 2.5 4. 1.3 1. ]\n",
+ " [5.5 3.5 1.3 0.2 0. ]\n",
+ " [5.2 3.5 1.5 0.2 0. ]\n",
+ " [5.4 3.9 1.3 0.4 0. ]\n",
+ " [6.7 2.5 5.8 1.8 2. ]\n",
+ " [4.5 2.3 1.3 0.3 0. ]\n",
+ " [5.1 3.8 1.9 0.4 0. ]\n",
+ " [5.8 2.7 3.9 1.2 1. ]\n",
+ " [6.4 2.9 4.3 1.3 1. ]\n",
+ " [6.1 2.9 4.7 1.4 1. ]\n",
+ " [6. 3.4 4.5 1.6 1. ]\n",
+ " [4.4 3. 1.3 0.2 0. ]\n",
+ " [4.8 3. 1.4 0.1 0. ]\n",
+ " [4.8 3.1 1.6 0.2 0. ]\n",
+ " [6.3 2.5 5. 1.9 2. ]\n",
+ " [7. 3.2 4.7 1.4 1. ]\n",
+ " [5.1 3.8 1.5 0.3 0. ]\n",
+ " [5. 3.4 1.6 0.4 0. ]\n",
+ " [6.1 3. 4.6 1.4 1. ]\n",
+ " [5.1 3.8 1.6 0.2 0. ]\n",
+ " [5.4 3. 4.5 1.5 1. ]\n",
+ " [7.2 3.6 6.1 2.5 2. ]\n",
+ " [5.8 2.7 5.1 1.9 2. ]\n",
+ " [6.6 2.9 4.6 1.3 1. ]\n",
+ " [6.9 3.1 5.1 2.3 2. ]\n",
+ " [6. 2.7 5.1 1.6 1. ]\n",
+ " [5.5 4.2 1.4 0.2 0. ]\n",
+ " [4.8 3.4 1.6 0.2 0. ]\n",
+ " [5.8 2.7 5.1 1.9 2. ]\n",
+ " [4.6 3.4 1.4 0.3 0. ]\n",
+ " [7.7 2.6 6.9 2.3 2. ]\n",
+ " [4.6 3.1 1.5 0.2 0. ]\n",
+ " [6.4 2.8 5.6 2.1 2. ]\n",
+ " [4.9 2.5 4.5 1.7 2. ]\n",
+ " [4.8 3.4 1.9 0.2 0. ]\n",
+ " [5.6 2.5 3.9 1.1 1. ]\n",
+ " [5. 3.5 1.6 0.6 0. ]\n",
+ " [5.1 3.7 1.5 0.4 0. ]\n",
+ " [6.3 2.9 5.6 1.8 2. ]\n",
+ " [7.6 3. 6.6 2.1 2. ]\n",
+ " [6.7 3.1 4.7 1.5 1. ]\n",
+ " [5.8 2.8 5.1 2.4 2. ]\n",
+ " [5. 3. 1.6 0.2 0. ]\n",
+ " [5.8 2.6 4. 1.2 1. ]\n",
+ " [6.4 2.7 5.3 1.9 2. ]\n",
+ " [6.3 2.5 4.9 1.5 1. ]\n",
+ " [5.5 2.4 3.8 1.1 1. ]\n",
+ " [7.2 3.2 6. 1.8 2. ]\n",
+ " [5.7 4.4 1.5 0.4 0. ]\n",
+ " [6.8 3. 5.5 2.1 2. ]\n",
+ " [5.7 2.8 4.5 1.3 1. ]\n",
+ " [6.3 3.3 4.7 1.6 1. ]\n",
+ " [5. 3.5 1.3 0.3 0. ]\n",
+ " [5.4 3.7 1.5 0.2 0. ]\n",
+ " [4.9 3. 1.4 0.2 0. ]\n",
+ " [6.7 3. 5.2 2.3 2. ]\n",
+ " [4.6 3.6 1. 0.2 0. ]\n",
+ " [5.4 3.9 1.7 0.4 0. ]\n",
+ " [5.1 3.5 1.4 0.2 0. ]\n",
+ " [5. 2. 3.5 1. 1. ]\n",
+ " [6.9 3.1 5.4 2.1 2. ]\n",
+ " [6.5 2.8 4.6 1.5 1. ]\n",
+ " [5.7 2.6 3.5 1. 1. ]\n",
+ " [6.7 3. 5. 1.7 1. ]\n",
+ " [6.1 2.6 5.6 1.4 2. ]\n",
+ " [5.3 3.7 1.5 0.2 0. ]\n",
+ " [4.9 3.1 1.5 0.1 0. ]\n",
+ " [5.8 2.7 4.1 1. 1. ]\n",
+ " [6.5 3. 5.2 2. 2. ]\n",
+ " [7.7 3. 6.1 2.3 2. ]\n",
+ " [6.1 3. 4.9 1.8 2. ]\n",
+ " [6.5 3.2 5.1 2. 2. ]\n",
+ " [5.2 2.7 3.9 1.4 1. ]\n",
+ " [6.4 3.2 4.5 1.5 1. ]\n",
+ " [6.7 3.3 5.7 2.1 2. ]\n",
+ " [6.2 3.4 5.4 2.3 2. ]\n",
+ " [6.5 3. 5.5 1.8 2. ]\n",
+ " [7.9 3.8 6.4 2. 2. ]\n",
+ " [4.7 3.2 1.3 0.2 0. ]\n",
+ " [6.4 3.2 5.3 2.3 2. ]\n",
+ " [5. 2.3 3.3 1. 1. ]\n",
+ " [4.4 3.2 1.3 0.2 0. ]\n",
+ " [5. 3.2 1.2 0.2 0. ]\n",
+ " [6.7 3.3 5.7 2.5 2. ]\n",
+ " [5.7 2.9 4.2 1.3 1. ]\n",
+ " [5.1 3.4 1.5 0.2 0. ]\n",
+ " [6. 2.9 4.5 1.5 1. ]\n",
+ " [5.2 4.1 1.5 0.1 0. ]\n",
+ " [5.9 3. 5.1 1.8 2. ]\n",
+ " [7.1 3. 5.9 2.1 2. ]\n",
+ " [5.1 3.3 1.7 0.5 0. ]\n",
+ " [7.4 2.8 6.1 1.9 2. ]\n",
+ " [5. 3.6 1.4 0.2 0. ]\n",
+ " [6. 2.2 5. 1.5 2. ]\n",
+ " [6.8 2.8 4.8 1.4 1. ]\n",
+ " [6.9 3.2 5.7 2.3 2. ]\n",
+ " [6.3 2.8 5.1 1.5 2. ]\n",
+ " [4.9 3.1 1.5 0.1 0. ]\n",
+ " [7.7 3.8 6.7 2.2 2. ]\n",
+ " [5.6 3. 4.5 1.5 1. ]\n",
+ " [4.3 3. 1.1 0.1 0. ]\n",
+ " [7.7 2.8 6.7 2. 2. ]\n",
+ " [4.8 3. 1.4 0.3 0. ]\n",
+ " [5.6 3. 4.1 1.3 1. ]\n",
+ " [5.7 2.5 5. 2. 2. ]\n",
+ " [7.3 2.9 6.3 1.8 2. ]\n",
+ " [5.9 3.2 4.8 1.8 1. ]\n",
+ " [6.8 3.2 5.9 2.3 2. ]\n",
+ " [5.7 2.8 4.1 1.3 1. ]\n",
+ " [5.9 3. 4.2 1.5 1. ]\n",
+ " [6.3 2.7 4.9 1.8 2. ]\n",
+ " [6.2 2.2 4.5 1.5 1. ]\n",
+ " [5.6 2.7 4.2 1.3 1. ]\n",
+ " [4.7 3.2 1.6 0.2 0. ]\n",
+ " [6.4 2.8 5.6 2.2 2. ]\n",
+ " [6.7 3.1 5.6 2.4 2. ]\n",
+ " [6.1 2.8 4.7 1.2 1. ]\n",
+ " [6. 2.2 4. 1. 1. ]\n",
+ " [4.6 3.2 1.4 0.2 0. ]\n",
+ " [6.2 2.9 4.3 1.3 1. ]\n",
+ " [5.1 2.5 3. 1.1 1. ]\n",
+ " [5.1 3.5 1.4 0.3 0. ]\n",
+ " [5.8 4. 1.2 0.2 0. ]\n",
+ " [5.7 3.8 1.7 0.3 0. ]\n",
+ " [7.2 3. 5.8 1.6 2. ]\n",
+ " [6.1 2.8 4. 1.3 1. ]\n",
+ " [5.6 2.8 4.9 2. 2. ]\n",
+ " [5. 3.3 1.4 0.2 0. ]\n",
+ " [5.6 2.9 3.6 1.3 1. ]\n",
+ " [5.5 2.3 4. 1.3 1. ]\n",
+ " [6. 3. 4.8 1.8 2. ]\n",
+ " [6.9 3.1 4.9 1.5 1. ]\n",
+ " [5.4 3.4 1.7 0.2 0. ]\n",
+ " [6.5 3. 5.8 2.2 2. ]\n",
+ " [5.5 2.6 4.4 1.2 1. ]\n",
+ " [6.3 2.3 4.4 1.3 1. ]]\n",
+ "[[4.4 2.9 1.4 0.2]\n",
+ " [4.9 2.4 3.3 1. ]\n",
+ " [5.2 3.4 1.4 0.2]\n",
+ " [5.5 2.4 3.7 1. ]\n",
+ " [5.7 3. 4.2 1.2]\n",
+ " [5.4 3.4 1.5 0.4]\n",
+ " [6.3 3.4 5.6 2.4]\n",
+ " [6.7 3.1 4.4 1.4]\n",
+ " [6.2 2.8 4.8 1.8]\n",
+ " [5. 3.4 1.5 0.2]\n",
+ " [6.3 3.3 6. 2.5]\n",
+ " [6.4 3.1 5.5 1.8]\n",
+ " [4.9 3.1 1.5 0.1]\n",
+ " [6.6 3. 4.4 1.4]\n",
+ " [5.5 2.5 4. 1.3]\n",
+ " [5.5 3.5 1.3 0.2]\n",
+ " [5.2 3.5 1.5 0.2]\n",
+ " [5.4 3.9 1.3 0.4]\n",
+ " [6.7 2.5 5.8 1.8]\n",
+ " [4.5 2.3 1.3 0.3]\n",
+ " [5.1 3.8 1.9 0.4]\n",
+ " [5.8 2.7 3.9 1.2]\n",
+ " [6.4 2.9 4.3 1.3]\n",
+ " [6.1 2.9 4.7 1.4]\n",
+ " [6. 3.4 4.5 1.6]\n",
+ " [4.4 3. 1.3 0.2]\n",
+ " [4.8 3. 1.4 0.1]\n",
+ " [4.8 3.1 1.6 0.2]\n",
+ " [6.3 2.5 5. 1.9]\n",
+ " [7. 3.2 4.7 1.4]\n",
+ " [5.1 3.8 1.5 0.3]\n",
+ " [5. 3.4 1.6 0.4]\n",
+ " [6.1 3. 4.6 1.4]\n",
+ " [5.1 3.8 1.6 0.2]\n",
+ " [5.4 3. 4.5 1.5]\n",
+ " [7.2 3.6 6.1 2.5]\n",
+ " [5.8 2.7 5.1 1.9]\n",
+ " [6.6 2.9 4.6 1.3]\n",
+ " [6.9 3.1 5.1 2.3]\n",
+ " [6. 2.7 5.1 1.6]\n",
+ " [5.5 4.2 1.4 0.2]\n",
+ " [4.8 3.4 1.6 0.2]\n",
+ " [5.8 2.7 5.1 1.9]\n",
+ " [4.6 3.4 1.4 0.3]\n",
+ " [7.7 2.6 6.9 2.3]\n",
+ " [4.6 3.1 1.5 0.2]\n",
+ " [6.4 2.8 5.6 2.1]\n",
+ " [4.9 2.5 4.5 1.7]\n",
+ " [4.8 3.4 1.9 0.2]\n",
+ " [5.6 2.5 3.9 1.1]\n",
+ " [5. 3.5 1.6 0.6]\n",
+ " [5.1 3.7 1.5 0.4]\n",
+ " [6.3 2.9 5.6 1.8]\n",
+ " [7.6 3. 6.6 2.1]\n",
+ " [6.7 3.1 4.7 1.5]\n",
+ " [5.8 2.8 5.1 2.4]\n",
+ " [5. 3. 1.6 0.2]\n",
+ " [5.8 2.6 4. 1.2]\n",
+ " [6.4 2.7 5.3 1.9]\n",
+ " [6.3 2.5 4.9 1.5]\n",
+ " [5.5 2.4 3.8 1.1]\n",
+ " [7.2 3.2 6. 1.8]\n",
+ " [5.7 4.4 1.5 0.4]\n",
+ " [6.8 3. 5.5 2.1]\n",
+ " [5.7 2.8 4.5 1.3]\n",
+ " [6.3 3.3 4.7 1.6]\n",
+ " [5. 3.5 1.3 0.3]\n",
+ " [5.4 3.7 1.5 0.2]\n",
+ " [4.9 3. 1.4 0.2]\n",
+ " [6.7 3. 5.2 2.3]\n",
+ " [4.6 3.6 1. 0.2]\n",
+ " [5.4 3.9 1.7 0.4]\n",
+ " [5.1 3.5 1.4 0.2]\n",
+ " [5. 2. 3.5 1. ]\n",
+ " [6.9 3.1 5.4 2.1]\n",
+ " [6.5 2.8 4.6 1.5]\n",
+ " [5.7 2.6 3.5 1. ]\n",
+ " [6.7 3. 5. 1.7]\n",
+ " [6.1 2.6 5.6 1.4]\n",
+ " [5.3 3.7 1.5 0.2]\n",
+ " [4.9 3.1 1.5 0.1]\n",
+ " [5.8 2.7 4.1 1. ]\n",
+ " [6.5 3. 5.2 2. ]\n",
+ " [7.7 3. 6.1 2.3]\n",
+ " [6.1 3. 4.9 1.8]\n",
+ " [6.5 3.2 5.1 2. ]\n",
+ " [5.2 2.7 3.9 1.4]\n",
+ " [6.4 3.2 4.5 1.5]\n",
+ " [6.7 3.3 5.7 2.1]\n",
+ " [6.2 3.4 5.4 2.3]\n",
+ " [6.5 3. 5.5 1.8]\n",
+ " [7.9 3.8 6.4 2. ]\n",
+ " [4.7 3.2 1.3 0.2]\n",
+ " [6.4 3.2 5.3 2.3]\n",
+ " [5. 2.3 3.3 1. ]\n",
+ " [4.4 3.2 1.3 0.2]\n",
+ " [5. 3.2 1.2 0.2]\n",
+ " [6.7 3.3 5.7 2.5]\n",
+ " [5.7 2.9 4.2 1.3]\n",
+ " [5.1 3.4 1.5 0.2]\n",
+ " [6. 2.9 4.5 1.5]\n",
+ " [5.2 4.1 1.5 0.1]\n",
+ " [5.9 3. 5.1 1.8]\n",
+ " [7.1 3. 5.9 2.1]\n",
+ " [5.1 3.3 1.7 0.5]\n",
+ " [7.4 2.8 6.1 1.9]\n",
+ " [5. 3.6 1.4 0.2]\n",
+ " [6. 2.2 5. 1.5]\n",
+ " [6.8 2.8 4.8 1.4]\n",
+ " [6.9 3.2 5.7 2.3]\n",
+ " [6.3 2.8 5.1 1.5]\n",
+ " [4.9 3.1 1.5 0.1]\n",
+ " [7.7 3.8 6.7 2.2]\n",
+ " [5.6 3. 4.5 1.5]\n",
+ " [4.3 3. 1.1 0.1]\n",
+ " [7.7 2.8 6.7 2. ]\n",
+ " [4.8 3. 1.4 0.3]\n",
+ " [5.6 3. 4.1 1.3]\n",
+ " [5.7 2.5 5. 2. ]\n",
+ " [7.3 2.9 6.3 1.8]\n",
+ " [5.9 3.2 4.8 1.8]\n",
+ " [6.8 3.2 5.9 2.3]\n",
+ " [5.7 2.8 4.1 1.3]\n",
+ " [5.9 3. 4.2 1.5]\n",
+ " [6.3 2.7 4.9 1.8]\n",
+ " [6.2 2.2 4.5 1.5]\n",
+ " [5.6 2.7 4.2 1.3]\n",
+ " [4.7 3.2 1.6 0.2]\n",
+ " [6.4 2.8 5.6 2.2]\n",
+ " [6.7 3.1 5.6 2.4]\n",
+ " [6.1 2.8 4.7 1.2]\n",
+ " [6. 2.2 4. 1. ]\n",
+ " [4.6 3.2 1.4 0.2]\n",
+ " [6.2 2.9 4.3 1.3]\n",
+ " [5.1 2.5 3. 1.1]\n",
+ " [5.1 3.5 1.4 0.3]\n",
+ " [5.8 4. 1.2 0.2]\n",
+ " [5.7 3.8 1.7 0.3]\n",
+ " [7.2 3. 5.8 1.6]\n",
+ " [6.1 2.8 4. 1.3]\n",
+ " [5.6 2.8 4.9 2. ]\n",
+ " [5. 3.3 1.4 0.2]\n",
+ " [5.6 2.9 3.6 1.3]\n",
+ " [5.5 2.3 4. 1.3]\n",
+ " [6. 3. 4.8 1.8]\n",
+ " [6.9 3.1 4.9 1.5]\n",
+ " [5.4 3.4 1.7 0.2]\n",
+ " [6.5 3. 5.8 2.2]\n",
+ " [5.5 2.6 4.4 1.2]\n",
+ " [6.3 2.3 4.4 1.3]]\n",
+ "[0. 1. 0. 1. 1. 0. 2. 1. 2. 0. 2. 2. 0. 1. 1. 0. 0. 0. 2. 0. 0. 1. 1. 1.\n",
+ " 1. 0. 0. 0. 2. 1. 0. 0. 1. 0. 1. 2. 2. 1. 2. 1. 0. 0. 2. 0. 2. 0. 2. 2.\n",
+ " 0. 1. 0. 0. 2. 2. 1. 2. 0. 1. 2. 1. 1. 2. 0. 2. 1. 1. 0. 0. 0. 2. 0. 0.\n",
+ " 0. 1. 2. 1. 1. 1. 2. 0. 0. 1. 2. 2. 2. 2. 1. 1. 2. 2. 2. 2. 0. 2. 1. 0.\n",
+ " 0. 2. 1. 0. 1. 0. 2. 2. 0. 2. 0. 2. 1. 2. 2. 0. 2. 1. 0. 2. 0. 1. 2. 2.\n",
+ " 1. 2. 1. 1. 2. 1. 1. 0. 2. 2. 1. 1. 0. 1. 1. 0. 0. 0. 2. 1. 2. 0. 1. 1.\n",
+ " 2. 1. 0. 2. 1. 1.]\n"
+ ]
+ }
+ ],
+ "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",
+ "from numpy import genfromtxt\n",
+ "data = 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:4]\n",
+ "y=data[...,4]\n",
+ "print(X)\n",
+ "print(y)\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",
+ "print (data[0:2,...])\n",
+ "\n",
+ "print(data.shape)\n",
+ "print(data[148:150,...])\n",
+ "\n",
+ "get_indexes = lambda y, xs: [i for (t, i) in zip(xs, range(len(xs))) if y == t]\n",
+ "print(X[get_indexes(2.0,y)])\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",
+ "y1=np.zeros((150,3))\n",
+ "y=y.astype(int)\n",
+ "y1[np.arange(150),y]=1.0\n",
+ "print(y1) \n",
+ "#################################"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "A=np.random.randint(100,size=(32,64,3))\n",
+ "# Convert A into shape (1,32,64,3) without using np.reshape()\n",
+ "#################################\n",
+ "\n",
+ "A=np.resize(A,(1,32,64,3))\n",
+ "\n",
+ "print(A)\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.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/python-assn/assn-03/Raghav_bansal.ipynb b/python-assn/assn-03/Raghav_bansal.ipynb
new file mode 100644
index 0000000..ee5449a
--- /dev/null
+++ b/python-assn/assn-03/Raghav_bansal.ipynb
@@ -0,0 +1,2912 @@
+{
+ "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": 315,
+ "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": 316,
+ "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": 316,
+ "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": 317,
+ "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": 317,
+ "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": 318,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "['sepal length (cm)',\n",
+ " 'sepal width (cm)',\n",
+ " 'petal length (cm)',\n",
+ " 'petal width (cm)']"
+ ]
+ },
+ "execution_count": 318,
+ "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": 319,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 5.1 | \n",
+ " 3.5 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 4.9 | \n",
+ " 3.0 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 4.7 | \n",
+ " 3.2 | \n",
+ " 1.3 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4.6 | \n",
+ " 3.1 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5.0 | \n",
+ " 3.6 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 5.4 | \n",
+ " 3.9 | \n",
+ " 1.7 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 4.6 | \n",
+ " 3.4 | \n",
+ " 1.4 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 5.0 | \n",
+ " 3.4 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 4.4 | \n",
+ " 2.9 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 4.9 | \n",
+ " 3.1 | \n",
+ " 1.5 | \n",
+ " 0.1 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 5.4 | \n",
+ " 3.7 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 11 | \n",
+ " 4.8 | \n",
+ " 3.4 | \n",
+ " 1.6 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 12 | \n",
+ " 4.8 | \n",
+ " 3.0 | \n",
+ " 1.4 | \n",
+ " 0.1 | \n",
+ "
\n",
+ " \n",
+ " | 13 | \n",
+ " 4.3 | \n",
+ " 3.0 | \n",
+ " 1.1 | \n",
+ " 0.1 | \n",
+ "
\n",
+ " \n",
+ " | 14 | \n",
+ " 5.8 | \n",
+ " 4.0 | \n",
+ " 1.2 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 15 | \n",
+ " 5.7 | \n",
+ " 4.4 | \n",
+ " 1.5 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 16 | \n",
+ " 5.4 | \n",
+ " 3.9 | \n",
+ " 1.3 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 17 | \n",
+ " 5.1 | \n",
+ " 3.5 | \n",
+ " 1.4 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 18 | \n",
+ " 5.7 | \n",
+ " 3.8 | \n",
+ " 1.7 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 19 | \n",
+ " 5.1 | \n",
+ " 3.8 | \n",
+ " 1.5 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 20 | \n",
+ " 5.4 | \n",
+ " 3.4 | \n",
+ " 1.7 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 21 | \n",
+ " 5.1 | \n",
+ " 3.7 | \n",
+ " 1.5 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 22 | \n",
+ " 4.6 | \n",
+ " 3.6 | \n",
+ " 1.0 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 23 | \n",
+ " 5.1 | \n",
+ " 3.3 | \n",
+ " 1.7 | \n",
+ " 0.5 | \n",
+ "
\n",
+ " \n",
+ " | 24 | \n",
+ " 4.8 | \n",
+ " 3.4 | \n",
+ " 1.9 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 25 | \n",
+ " 5.0 | \n",
+ " 3.0 | \n",
+ " 1.6 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 26 | \n",
+ " 5.0 | \n",
+ " 3.4 | \n",
+ " 1.6 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 27 | \n",
+ " 5.2 | \n",
+ " 3.5 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 28 | \n",
+ " 5.2 | \n",
+ " 3.4 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 29 | \n",
+ " 4.7 | \n",
+ " 3.2 | \n",
+ " 1.6 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 120 | \n",
+ " 6.9 | \n",
+ " 3.2 | \n",
+ " 5.7 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 121 | \n",
+ " 5.6 | \n",
+ " 2.8 | \n",
+ " 4.9 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 122 | \n",
+ " 7.7 | \n",
+ " 2.8 | \n",
+ " 6.7 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 123 | \n",
+ " 6.3 | \n",
+ " 2.7 | \n",
+ " 4.9 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 124 | \n",
+ " 6.7 | \n",
+ " 3.3 | \n",
+ " 5.7 | \n",
+ " 2.1 | \n",
+ "
\n",
+ " \n",
+ " | 125 | \n",
+ " 7.2 | \n",
+ " 3.2 | \n",
+ " 6.0 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 126 | \n",
+ " 6.2 | \n",
+ " 2.8 | \n",
+ " 4.8 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 127 | \n",
+ " 6.1 | \n",
+ " 3.0 | \n",
+ " 4.9 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 128 | \n",
+ " 6.4 | \n",
+ " 2.8 | \n",
+ " 5.6 | \n",
+ " 2.1 | \n",
+ "
\n",
+ " \n",
+ " | 129 | \n",
+ " 7.2 | \n",
+ " 3.0 | \n",
+ " 5.8 | \n",
+ " 1.6 | \n",
+ "
\n",
+ " \n",
+ " | 130 | \n",
+ " 7.4 | \n",
+ " 2.8 | \n",
+ " 6.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 131 | \n",
+ " 7.9 | \n",
+ " 3.8 | \n",
+ " 6.4 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 132 | \n",
+ " 6.4 | \n",
+ " 2.8 | \n",
+ " 5.6 | \n",
+ " 2.2 | \n",
+ "
\n",
+ " \n",
+ " | 133 | \n",
+ " 6.3 | \n",
+ " 2.8 | \n",
+ " 5.1 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 134 | \n",
+ " 6.1 | \n",
+ " 2.6 | \n",
+ " 5.6 | \n",
+ " 1.4 | \n",
+ "
\n",
+ " \n",
+ " | 135 | \n",
+ " 7.7 | \n",
+ " 3.0 | \n",
+ " 6.1 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 136 | \n",
+ " 6.3 | \n",
+ " 3.4 | \n",
+ " 5.6 | \n",
+ " 2.4 | \n",
+ "
\n",
+ " \n",
+ " | 137 | \n",
+ " 6.4 | \n",
+ " 3.1 | \n",
+ " 5.5 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 138 | \n",
+ " 6.0 | \n",
+ " 3.0 | \n",
+ " 4.8 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 139 | \n",
+ " 6.9 | \n",
+ " 3.1 | \n",
+ " 5.4 | \n",
+ " 2.1 | \n",
+ "
\n",
+ " \n",
+ " | 140 | \n",
+ " 6.7 | \n",
+ " 3.1 | \n",
+ " 5.6 | \n",
+ " 2.4 | \n",
+ "
\n",
+ " \n",
+ " | 141 | \n",
+ " 6.9 | \n",
+ " 3.1 | \n",
+ " 5.1 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 142 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 5.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 143 | \n",
+ " 6.8 | \n",
+ " 3.2 | \n",
+ " 5.9 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 144 | \n",
+ " 6.7 | \n",
+ " 3.3 | \n",
+ " 5.7 | \n",
+ " 2.5 | \n",
+ "
\n",
+ " \n",
+ " | 145 | \n",
+ " 6.7 | \n",
+ " 3.0 | \n",
+ " 5.2 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 146 | \n",
+ " 6.3 | \n",
+ " 2.5 | \n",
+ " 5.0 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 147 | \n",
+ " 6.5 | \n",
+ " 3.0 | \n",
+ " 5.2 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 148 | \n",
+ " 6.2 | \n",
+ " 3.4 | \n",
+ " 5.4 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 149 | \n",
+ " 5.9 | \n",
+ " 3.0 | \n",
+ " 5.1 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
150 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n",
+ "0 5.1 3.5 1.4 0.2\n",
+ "1 4.9 3.0 1.4 0.2\n",
+ "2 4.7 3.2 1.3 0.2\n",
+ "3 4.6 3.1 1.5 0.2\n",
+ "4 5.0 3.6 1.4 0.2\n",
+ "5 5.4 3.9 1.7 0.4\n",
+ "6 4.6 3.4 1.4 0.3\n",
+ "7 5.0 3.4 1.5 0.2\n",
+ "8 4.4 2.9 1.4 0.2\n",
+ "9 4.9 3.1 1.5 0.1\n",
+ "10 5.4 3.7 1.5 0.2\n",
+ "11 4.8 3.4 1.6 0.2\n",
+ "12 4.8 3.0 1.4 0.1\n",
+ "13 4.3 3.0 1.1 0.1\n",
+ "14 5.8 4.0 1.2 0.2\n",
+ "15 5.7 4.4 1.5 0.4\n",
+ "16 5.4 3.9 1.3 0.4\n",
+ "17 5.1 3.5 1.4 0.3\n",
+ "18 5.7 3.8 1.7 0.3\n",
+ "19 5.1 3.8 1.5 0.3\n",
+ "20 5.4 3.4 1.7 0.2\n",
+ "21 5.1 3.7 1.5 0.4\n",
+ "22 4.6 3.6 1.0 0.2\n",
+ "23 5.1 3.3 1.7 0.5\n",
+ "24 4.8 3.4 1.9 0.2\n",
+ "25 5.0 3.0 1.6 0.2\n",
+ "26 5.0 3.4 1.6 0.4\n",
+ "27 5.2 3.5 1.5 0.2\n",
+ "28 5.2 3.4 1.4 0.2\n",
+ "29 4.7 3.2 1.6 0.2\n",
+ ".. ... ... ... ...\n",
+ "120 6.9 3.2 5.7 2.3\n",
+ "121 5.6 2.8 4.9 2.0\n",
+ "122 7.7 2.8 6.7 2.0\n",
+ "123 6.3 2.7 4.9 1.8\n",
+ "124 6.7 3.3 5.7 2.1\n",
+ "125 7.2 3.2 6.0 1.8\n",
+ "126 6.2 2.8 4.8 1.8\n",
+ "127 6.1 3.0 4.9 1.8\n",
+ "128 6.4 2.8 5.6 2.1\n",
+ "129 7.2 3.0 5.8 1.6\n",
+ "130 7.4 2.8 6.1 1.9\n",
+ "131 7.9 3.8 6.4 2.0\n",
+ "132 6.4 2.8 5.6 2.2\n",
+ "133 6.3 2.8 5.1 1.5\n",
+ "134 6.1 2.6 5.6 1.4\n",
+ "135 7.7 3.0 6.1 2.3\n",
+ "136 6.3 3.4 5.6 2.4\n",
+ "137 6.4 3.1 5.5 1.8\n",
+ "138 6.0 3.0 4.8 1.8\n",
+ "139 6.9 3.1 5.4 2.1\n",
+ "140 6.7 3.1 5.6 2.4\n",
+ "141 6.9 3.1 5.1 2.3\n",
+ "142 5.8 2.7 5.1 1.9\n",
+ "143 6.8 3.2 5.9 2.3\n",
+ "144 6.7 3.3 5.7 2.5\n",
+ "145 6.7 3.0 5.2 2.3\n",
+ "146 6.3 2.5 5.0 1.9\n",
+ "147 6.5 3.0 5.2 2.0\n",
+ "148 6.2 3.4 5.4 2.3\n",
+ "149 5.9 3.0 5.1 1.8\n",
+ "\n",
+ "[150 rows x 4 columns]"
+ ]
+ },
+ "execution_count": 319,
+ "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": 320,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 5.1 | \n",
+ " 3.5 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 4.9 | \n",
+ " 3.0 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 4.7 | \n",
+ " 3.2 | \n",
+ " 1.3 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4.6 | \n",
+ " 3.1 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5.0 | \n",
+ " 3.6 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 5 | \n",
+ " 5.4 | \n",
+ " 3.9 | \n",
+ " 1.7 | \n",
+ " 0.4 | \n",
+ "
\n",
+ " \n",
+ " | 6 | \n",
+ " 4.6 | \n",
+ " 3.4 | \n",
+ " 1.4 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 7 | \n",
+ " 5.0 | \n",
+ " 3.4 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 4.4 | \n",
+ " 2.9 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 4.9 | \n",
+ " 3.1 | \n",
+ " 1.5 | \n",
+ " 0.1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n",
+ "0 5.1 3.5 1.4 0.2\n",
+ "1 4.9 3.0 1.4 0.2\n",
+ "2 4.7 3.2 1.3 0.2\n",
+ "3 4.6 3.1 1.5 0.2\n",
+ "4 5.0 3.6 1.4 0.2\n",
+ "5 5.4 3.9 1.7 0.4\n",
+ "6 4.6 3.4 1.4 0.3\n",
+ "7 5.0 3.4 1.5 0.2\n",
+ "8 4.4 2.9 1.4 0.2\n",
+ "9 4.9 3.1 1.5 0.1"
+ ]
+ },
+ "execution_count": 320,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Return the first 10 rows in df\n",
+ "print(df.head(10))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 321,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 140 | \n",
+ " 6.7 | \n",
+ " 3.1 | \n",
+ " 5.6 | \n",
+ " 2.4 | \n",
+ "
\n",
+ " \n",
+ " | 141 | \n",
+ " 6.9 | \n",
+ " 3.1 | \n",
+ " 5.1 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 142 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 5.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 143 | \n",
+ " 6.8 | \n",
+ " 3.2 | \n",
+ " 5.9 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 144 | \n",
+ " 6.7 | \n",
+ " 3.3 | \n",
+ " 5.7 | \n",
+ " 2.5 | \n",
+ "
\n",
+ " \n",
+ " | 145 | \n",
+ " 6.7 | \n",
+ " 3.0 | \n",
+ " 5.2 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 146 | \n",
+ " 6.3 | \n",
+ " 2.5 | \n",
+ " 5.0 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 147 | \n",
+ " 6.5 | \n",
+ " 3.0 | \n",
+ " 5.2 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 148 | \n",
+ " 6.2 | \n",
+ " 3.4 | \n",
+ " 5.4 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 149 | \n",
+ " 5.9 | \n",
+ " 3.0 | \n",
+ " 5.1 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n",
+ "140 6.7 3.1 5.6 2.4\n",
+ "141 6.9 3.1 5.1 2.3\n",
+ "142 5.8 2.7 5.1 1.9\n",
+ "143 6.8 3.2 5.9 2.3\n",
+ "144 6.7 3.3 5.7 2.5\n",
+ "145 6.7 3.0 5.2 2.3\n",
+ "146 6.3 2.5 5.0 1.9\n",
+ "147 6.5 3.0 5.2 2.0\n",
+ "148 6.2 3.4 5.4 2.3\n",
+ "149 5.9 3.0 5.1 1.8"
+ ]
+ },
+ "execution_count": 321,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Return the last 10 rows in df\n",
+ "print(df.tail(10))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 322,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "(150, 4)"
+ ]
+ },
+ "execution_count": 322,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Get to know the shape of the data\n",
+ "print(df.shape)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This tells us there are 150 rows and 4 columns in ```df```."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 323,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | count | \n",
+ " 150.000000 | \n",
+ " 150.000000 | \n",
+ " 150.000000 | \n",
+ " 150.000000 | \n",
+ "
\n",
+ " \n",
+ " | Mean | \n",
+ " 5.843333 | \n",
+ " 3.054000 | \n",
+ " 3.758667 | \n",
+ " 1.198667 | \n",
+ "
\n",
+ " \n",
+ " | Std | \n",
+ " 0.828066 | \n",
+ " 0.433594 | \n",
+ " 1.764420 | \n",
+ " 0.763161 | \n",
+ "
\n",
+ " \n",
+ " | Min | \n",
+ " 4.300000 | \n",
+ " 2.000000 | \n",
+ " 1.000000 | \n",
+ " 0.100000 | \n",
+ "
\n",
+ " \n",
+ " | 25% | \n",
+ " 5.100000 | \n",
+ " 2.800000 | \n",
+ " 1.600000 | \n",
+ " 0.300000 | \n",
+ "
\n",
+ " \n",
+ " | 50% | \n",
+ " 5.800000 | \n",
+ " 3.000000 | \n",
+ " 4.350000 | \n",
+ " 1.300000 | \n",
+ "
\n",
+ " \n",
+ " | 75% | \n",
+ " 6.400000 | \n",
+ " 3.300000 | \n",
+ " 5.100000 | \n",
+ " 1.800000 | \n",
+ "
\n",
+ " \n",
+ " | Max | \n",
+ " 7.900000 | \n",
+ " 4.400000 | \n",
+ " 6.900000 | \n",
+ " 2.500000 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) \\\n",
+ "count 150.000000 150.000000 150.000000 \n",
+ "Mean 5.843333 3.054000 3.758667 \n",
+ "Std 0.828066 0.433594 1.764420 \n",
+ "Min 4.300000 2.000000 1.000000 \n",
+ "25% 5.100000 2.800000 1.600000 \n",
+ "50% 5.800000 3.000000 4.350000 \n",
+ "75% 6.400000 3.300000 5.100000 \n",
+ "Max 7.900000 4.400000 6.900000 \n",
+ "\n",
+ " petal width (cm) \n",
+ "count 150.000000 \n",
+ "Mean 1.198667 \n",
+ "Std 0.763161 \n",
+ "Min 0.100000 \n",
+ "25% 0.300000 \n",
+ "50% 1.300000 \n",
+ "75% 1.800000 \n",
+ "Max 2.500000 "
+ ]
+ },
+ "execution_count": 323,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Get a more detailed description of the dataset\n",
+ "print(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": 324,
+ "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": 324,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Retrieve only sepal_length from df\n",
+ "print(df.iloc[:,0])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 325,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "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\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Return 5th row of df\n",
+ "print(df.loc[4,:])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 326,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1.4\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Return petal length of 5th row of df\n",
+ "print(df.iloc[4,2])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 327,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 41 | \n",
+ " 4.5 | \n",
+ " 2.3 | \n",
+ " 1.3 | \n",
+ " 0.3 | \n",
+ "
\n",
+ " \n",
+ " | 53 | \n",
+ " 5.5 | \n",
+ " 2.3 | \n",
+ " 4.0 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 54 | \n",
+ " 6.5 | \n",
+ " 2.8 | \n",
+ " 4.6 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 55 | \n",
+ " 5.7 | \n",
+ " 2.8 | \n",
+ " 4.5 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 57 | \n",
+ " 4.9 | \n",
+ " 2.4 | \n",
+ " 3.3 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 59 | \n",
+ " 5.2 | \n",
+ " 2.7 | \n",
+ " 3.9 | \n",
+ " 1.4 | \n",
+ "
\n",
+ " \n",
+ " | 60 | \n",
+ " 5.0 | \n",
+ " 2.0 | \n",
+ " 3.5 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 62 | \n",
+ " 6.0 | \n",
+ " 2.2 | \n",
+ " 4.0 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 67 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 4.1 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 68 | \n",
+ " 6.2 | \n",
+ " 2.2 | \n",
+ " 4.5 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 69 | \n",
+ " 5.6 | \n",
+ " 2.5 | \n",
+ " 3.9 | \n",
+ " 1.1 | \n",
+ "
\n",
+ " \n",
+ " | 71 | \n",
+ " 6.1 | \n",
+ " 2.8 | \n",
+ " 4.0 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 72 | \n",
+ " 6.3 | \n",
+ " 2.5 | \n",
+ " 4.9 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 73 | \n",
+ " 6.1 | \n",
+ " 2.8 | \n",
+ " 4.7 | \n",
+ " 1.2 | \n",
+ "
\n",
+ " \n",
+ " | 76 | \n",
+ " 6.8 | \n",
+ " 2.8 | \n",
+ " 4.8 | \n",
+ " 1.4 | \n",
+ "
\n",
+ " \n",
+ " | 79 | \n",
+ " 5.7 | \n",
+ " 2.6 | \n",
+ " 3.5 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 80 | \n",
+ " 5.5 | \n",
+ " 2.4 | \n",
+ " 3.8 | \n",
+ " 1.1 | \n",
+ "
\n",
+ " \n",
+ " | 81 | \n",
+ " 5.5 | \n",
+ " 2.4 | \n",
+ " 3.7 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 82 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 3.9 | \n",
+ " 1.2 | \n",
+ "
\n",
+ " \n",
+ " | 83 | \n",
+ " 6.0 | \n",
+ " 2.7 | \n",
+ " 5.1 | \n",
+ " 1.6 | \n",
+ "
\n",
+ " \n",
+ " | 87 | \n",
+ " 6.3 | \n",
+ " 2.3 | \n",
+ " 4.4 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 89 | \n",
+ " 5.5 | \n",
+ " 2.5 | \n",
+ " 4.0 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 90 | \n",
+ " 5.5 | \n",
+ " 2.6 | \n",
+ " 4.4 | \n",
+ " 1.2 | \n",
+ "
\n",
+ " \n",
+ " | 92 | \n",
+ " 5.8 | \n",
+ " 2.6 | \n",
+ " 4.0 | \n",
+ " 1.2 | \n",
+ "
\n",
+ " \n",
+ " | 93 | \n",
+ " 5.0 | \n",
+ " 2.3 | \n",
+ " 3.3 | \n",
+ " 1.0 | \n",
+ "
\n",
+ " \n",
+ " | 94 | \n",
+ " 5.6 | \n",
+ " 2.7 | \n",
+ " 4.2 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 98 | \n",
+ " 5.1 | \n",
+ " 2.5 | \n",
+ " 3.0 | \n",
+ " 1.1 | \n",
+ "
\n",
+ " \n",
+ " | 99 | \n",
+ " 5.7 | \n",
+ " 2.8 | \n",
+ " 4.1 | \n",
+ " 1.3 | \n",
+ "
\n",
+ " \n",
+ " | 101 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 5.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 106 | \n",
+ " 4.9 | \n",
+ " 2.5 | \n",
+ " 4.5 | \n",
+ " 1.7 | \n",
+ "
\n",
+ " \n",
+ " | 108 | \n",
+ " 6.7 | \n",
+ " 2.5 | \n",
+ " 5.8 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 111 | \n",
+ " 6.4 | \n",
+ " 2.7 | \n",
+ " 5.3 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 113 | \n",
+ " 5.7 | \n",
+ " 2.5 | \n",
+ " 5.0 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 114 | \n",
+ " 5.8 | \n",
+ " 2.8 | \n",
+ " 5.1 | \n",
+ " 2.4 | \n",
+ "
\n",
+ " \n",
+ " | 118 | \n",
+ " 7.7 | \n",
+ " 2.6 | \n",
+ " 6.9 | \n",
+ " 2.3 | \n",
+ "
\n",
+ " \n",
+ " | 119 | \n",
+ " 6.0 | \n",
+ " 2.2 | \n",
+ " 5.0 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 121 | \n",
+ " 5.6 | \n",
+ " 2.8 | \n",
+ " 4.9 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 122 | \n",
+ " 7.7 | \n",
+ " 2.8 | \n",
+ " 6.7 | \n",
+ " 2.0 | \n",
+ "
\n",
+ " \n",
+ " | 123 | \n",
+ " 6.3 | \n",
+ " 2.7 | \n",
+ " 4.9 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 126 | \n",
+ " 6.2 | \n",
+ " 2.8 | \n",
+ " 4.8 | \n",
+ " 1.8 | \n",
+ "
\n",
+ " \n",
+ " | 128 | \n",
+ " 6.4 | \n",
+ " 2.8 | \n",
+ " 5.6 | \n",
+ " 2.1 | \n",
+ "
\n",
+ " \n",
+ " | 130 | \n",
+ " 7.4 | \n",
+ " 2.8 | \n",
+ " 6.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 132 | \n",
+ " 6.4 | \n",
+ " 2.8 | \n",
+ " 5.6 | \n",
+ " 2.2 | \n",
+ "
\n",
+ " \n",
+ " | 133 | \n",
+ " 6.3 | \n",
+ " 2.8 | \n",
+ " 5.1 | \n",
+ " 1.5 | \n",
+ "
\n",
+ " \n",
+ " | 134 | \n",
+ " 6.1 | \n",
+ " 2.6 | \n",
+ " 5.6 | \n",
+ " 1.4 | \n",
+ "
\n",
+ " \n",
+ " | 142 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 5.1 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ " | 146 | \n",
+ " 6.3 | \n",
+ " 2.5 | \n",
+ " 5.0 | \n",
+ " 1.9 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n",
+ "41 4.5 2.3 1.3 0.3\n",
+ "53 5.5 2.3 4.0 1.3\n",
+ "54 6.5 2.8 4.6 1.5\n",
+ "55 5.7 2.8 4.5 1.3\n",
+ "57 4.9 2.4 3.3 1.0\n",
+ "59 5.2 2.7 3.9 1.4\n",
+ "60 5.0 2.0 3.5 1.0\n",
+ "62 6.0 2.2 4.0 1.0\n",
+ "67 5.8 2.7 4.1 1.0\n",
+ "68 6.2 2.2 4.5 1.5\n",
+ "69 5.6 2.5 3.9 1.1\n",
+ "71 6.1 2.8 4.0 1.3\n",
+ "72 6.3 2.5 4.9 1.5\n",
+ "73 6.1 2.8 4.7 1.2\n",
+ "76 6.8 2.8 4.8 1.4\n",
+ "79 5.7 2.6 3.5 1.0\n",
+ "80 5.5 2.4 3.8 1.1\n",
+ "81 5.5 2.4 3.7 1.0\n",
+ "82 5.8 2.7 3.9 1.2\n",
+ "83 6.0 2.7 5.1 1.6\n",
+ "87 6.3 2.3 4.4 1.3\n",
+ "89 5.5 2.5 4.0 1.3\n",
+ "90 5.5 2.6 4.4 1.2\n",
+ "92 5.8 2.6 4.0 1.2\n",
+ "93 5.0 2.3 3.3 1.0\n",
+ "94 5.6 2.7 4.2 1.3\n",
+ "98 5.1 2.5 3.0 1.1\n",
+ "99 5.7 2.8 4.1 1.3\n",
+ "101 5.8 2.7 5.1 1.9\n",
+ "106 4.9 2.5 4.5 1.7\n",
+ "108 6.7 2.5 5.8 1.8\n",
+ "111 6.4 2.7 5.3 1.9\n",
+ "113 5.7 2.5 5.0 2.0\n",
+ "114 5.8 2.8 5.1 2.4\n",
+ "118 7.7 2.6 6.9 2.3\n",
+ "119 6.0 2.2 5.0 1.5\n",
+ "121 5.6 2.8 4.9 2.0\n",
+ "122 7.7 2.8 6.7 2.0\n",
+ "123 6.3 2.7 4.9 1.8\n",
+ "126 6.2 2.8 4.8 1.8\n",
+ "128 6.4 2.8 5.6 2.1\n",
+ "130 7.4 2.8 6.1 1.9\n",
+ "132 6.4 2.8 5.6 2.2\n",
+ "133 6.3 2.8 5.1 1.5\n",
+ "134 6.1 2.6 5.6 1.4\n",
+ "142 5.8 2.7 5.1 1.9\n",
+ "146 6.3 2.5 5.0 1.9"
+ ]
+ },
+ "execution_count": 327,
+ "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",
+ "df.loc[df['sepal width (cm)'] < 2.9]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 328,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | sepal length (cm) | \n",
+ " 5.843333 | \n",
+ "
\n",
+ " \n",
+ " | sepal width (cm) | \n",
+ " 3.054000 | \n",
+ "
\n",
+ " \n",
+ " | petal length (cm) | \n",
+ " 3.758667 | \n",
+ "
\n",
+ " \n",
+ " | petal width (cm) | \n",
+ " 1.198667 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " 0\n",
+ "sepal length (cm) 5.843333\n",
+ "sepal width (cm) 3.054000\n",
+ "petal length (cm) 3.758667\n",
+ "petal width (cm) 1.198667"
+ ]
+ },
+ "execution_count": 328,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Get mean of each column in df\n",
+ "# Hint: use numpy.mean\n",
+ "import numpy as np\n",
+ "df.apply(np.mean)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "While we can always get the mean using ```df.describe()```, ```df.apply()``` can be used to apply any function to each column, such as ```np.sum```, ```np.max``` and so on."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Using Matplotlib**\n",
+ "\n",
+ "It is important to visualise the data we have so we can get useful inferences from it, such as by plotting one feature against another. If we can guess beforehand which features are more likely to decide the value of the target variable, we'll be able to create a better model accordingly.\n",
+ "\n",
+ "```matplotlib.pyplot``` is the library for creating 2D graphs in Python. It mimics the functions used in Matlab, which is a much more comprehensive tool for a wide range of experimental purposes."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 329,
+ "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": 330,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "sl = df['sepal length (cm)']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 331,
+ "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": 332,
+ "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",
+ "s1 = df['petal width (cm)']\n",
+ "s2 = df['petal length (cm)']\n",
+ "ax0 = fig.add_subplot(111)\n",
+ "ax0.scatter(s1, y, c = 'b', marker='o', label='Petal width')\n",
+ "ax0.scatter(s2, y, c = 'r', marker='x', label='Petal length')\n",
+ "ax0.set_xlabel('length/width (cm)')\n",
+ "ax0.set_ylabel('flower')\n",
+ "ax0.legend()\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 333,
+ "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",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "# Only for jupyter-notebooks; don't bother about this line elsewhere.\n",
+ "%matplotlib inline\n",
+ "\n",
+ "s1=df['sepal length (cm)']\n",
+ "s2=df['petal length (cm)']\n",
+ "fig = plt.figure('Sepal length vs petal length')\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(s1, s2, c = 'm', marker='o', label='Sepal length')\n",
+ "ax0.set_xlabel('sepal length (cm)')\n",
+ "ax0.set_ylabel('petal length (cm)')\n",
+ "ax0.legend()\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 334,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEKCAYAAAD9xUlFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzsvXl4HNWZ7/85vaq1WLIlW/KGZcCYMWDLYBxwuOwhcEOAMCQh9yYxZAYPmRnmlzuZkGUm+5PJnUkySSZzEyAhwcwwGUJCgCSEEIYQ9sU2EjarAe+2ZFm29lav5/dH9ylVVVd1V29az+d59Ejqpep0t3Te+n7f97xHSCnRaDQajQbAN9kD0Gg0Gs3UQQcFjUaj0RjooKDRaDQaAx0UNBqNRmOgg4JGo9FoDHRQ0Gg0Go2BDgoajUajMdBBQaPRaDQGOihoNBqNxiAw2QMolpaWFtne3j7Zw9BoNJppxdatW49IKecXelxVg4IQ4v8Afw5IYDtwvZRyzHR/GLgTOAPoAz4opdyd75jt7e1s2bKlamPWaDSamYgQYo+Xx1XNPhJCLAb+BlgnpTwV8APX2h72Z8AxKeWJwLeBf6rWeDQajUZTmGrnFAJARAgRAGqBg7b7rwQ2Z3/+OXCREEJUeUwajUajcaFqQUFKeQD4JrAXOAQMSCkftj1sMbAv+/gkMAA0V2tMGo1Go8lP1XIKQoi5ZJTAcqAfuEcI8WEp5X+YH+bw1Jxe3kKITcAmgOOOOy7nCYlEgv379zM2NpZzn2biqKmpYcmSJQSDwckeikajKZFqJpovBnZJKXsBhBD3AhsAc1DYDywF9mctpkbgqP1AUsrbgNsA1q1blxM09u/fT0NDA+3t7Wj3aXKQUtLX18f+/ftZvnz5ZA9Ho9GUSDVzCnuBs4QQtdk8wUXAq7bHPABszP58DfCoLGHXn7GxMZqbm3VAmESEEDQ3N2u1ptFMc6qZU3iOTPJ4G5lyVB9wmxDiK0KIK7IPux1oFkK8Cfwt8JlSz6cDwuSjPwONZvpT1XUKUsovAl+03fwF0/1jwPurOQaNRqMplq0Ht5KSKdYvXj/ZQ5lwdJuLCvG1r32NU045hdWrV9PR0cFzzz1X0eM/9thjXH755Z5vL5f77ruPV155xfj9/PPP14sGNbOGTz78ST71+09N9jAmhWnX5mIq8swzz/DrX/+abdu2EQ6HOXLkCPF4fLKHVRb33Xcfl19+OatWrZrsoWg0E87hkcPUheomexiTglYKFeDQoUO0tLQQDocBaGlpYdGiRQBs3bqV8847jzPOOIN3v/vdHDp0CMhceX/iE59gw4YNnHrqqTz//PMAPP/882zYsIG1a9eyYcMGXn/9dc/jGBkZ4WMf+xhnnnkma9eu5f777wfgjjvu4Oqrr+bSSy9lxYoV3HzzzcZzbr/9dk466STOP/98brjhBv76r/+ap59+mgceeIBPfepTdHR08NZbbwFwzz33sH79ek466SSeeOKJ8t84jWaK0hftI56a3hd2pTLjlMInHvoEnd2dFT1mR1sH37n0O673X3LJJXzlK1/hpJNO4uKLL+aDH/wg5513HolEgptuuon777+f+fPnc/fdd/P3f//3/PjHPwYyk/jTTz/N448/zsc+9jF27NjBySefzOOPP04gEOCRRx7hc5/7HL/4xS88jfNrX/saF154IT/+8Y/p7+9n/fr1XHzxxQB0dnby4osvEg6HWblyJTfddBN+v5+vfvWrbNu2jYaGBi688ELWrFnDhg0buOKKK7j88su55pprjOMnk0mef/55HnzwQb785S/zyCOPlPGuajRTEyklR6NHmReZN9lDmRRmXFCYDOrr69m6dStPPPEEf/jDH/jgBz/I//2//5d169axY8cO3vWudwGQSqVYuHCh8bwPfehDAJx77rkMDg7S39/P0NAQGzduZOfOnQghSCQSnsfx8MMP88ADD/DNb34TyJTq7t27F4CLLrqIxsZGAFatWsWePXs4cuQI5513HvPmZf743//+9/PGG2+4Hv/qq68G4IwzzmD37t2ex6XRTCcGY4Mk00liydhkD2VSmHFBId8VfTXx+/2cf/75nH/++Zx22mls3ryZM844g1NOOYVnnnnG8Tn2Ek4hBJ///Oe54IIL+OUvf8nu3bs5//zzPY9BSskvfvELVq5cabn9ueeeM6wtNdZkMkmxS0LUMdTzNZqZSF+0D2DW2kc6p1ABXn/9dXbu3Gn83tnZybJly1i5ciW9vb1GUEgkErz88svG4+6++24AnnzySRobG2lsbGRgYIDFixcDmVxAMbz73e/me9/7njHZv/jii3kfv379ev74xz9y7NgxksmkxaZqaGhgaGioqPNrNDOBvlEdFDRl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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",
+ "import numpy as np\n",
+ "number = np.arange(150)\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "# Only for jupyter-notebooks; don't bother about this line elsewhere.\n",
+ "%matplotlib inline\n",
+ "import pandas as pd\n",
+ "\n",
+ "df = pd.DataFrame(X, columns=headers)\n",
+ "s1 = df['sepal length (cm)']\n",
+ "fig = plt.figure('Sepal length')\n",
+ "ax0 = fig.add_subplot(111)\n",
+ "ax0.plot(number, s1, c = 'g', label='Sepal length')\n",
+ "ax0.set_xlabel('instance')\n",
+ "ax0.set_ylabel('sepal length (cm)')\n",
+ "ax0.legend()\n",
+ "\n",
+ "plt.show()\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": 335,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " sepal length (cm) | \n",
+ " sepal width (cm) | \n",
+ " petal length (cm) | \n",
+ " petal width (cm) | \n",
+ " target | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 131 | \n",
+ " 7.9 | \n",
+ " 3.8 | \n",
+ " 6.4 | \n",
+ " 2.0 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 9 | \n",
+ " 4.9 | \n",
+ " 3.1 | \n",
+ " 1.5 | \n",
+ " 0.1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 55 | \n",
+ " 5.7 | \n",
+ " 2.8 | \n",
+ " 4.5 | \n",
+ " 1.3 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 128 | \n",
+ " 6.4 | \n",
+ " 2.8 | \n",
+ " 5.6 | \n",
+ " 2.1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 121 | \n",
+ " 5.6 | \n",
+ " 2.8 | \n",
+ " 4.9 | \n",
+ " 2.0 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 114 | \n",
+ " 5.8 | \n",
+ " 2.8 | \n",
+ " 5.1 | \n",
+ " 2.4 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 43 | \n",
+ " 5.0 | \n",
+ " 3.5 | \n",
+ " 1.6 | \n",
+ " 0.6 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 103 | \n",
+ " 6.3 | \n",
+ " 2.9 | \n",
+ " 5.6 | \n",
+ " 1.8 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 14 | \n",
+ " 5.8 | \n",
+ " 4.0 | \n",
+ " 1.2 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 96 | \n",
+ " 5.7 | \n",
+ " 2.9 | \n",
+ " 4.2 | \n",
+ " 1.3 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 67 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 4.1 | \n",
+ " 1.0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 140 | \n",
+ " 6.7 | \n",
+ " 3.1 | \n",
+ " 5.6 | \n",
+ " 2.4 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 85 | \n",
+ " 6.0 | \n",
+ " 3.4 | \n",
+ " 4.5 | \n",
+ " 1.6 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 149 | \n",
+ " 5.9 | \n",
+ " 3.0 | \n",
+ " 5.1 | \n",
+ " 1.8 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 59 | \n",
+ " 5.2 | \n",
+ " 2.7 | \n",
+ " 3.9 | \n",
+ " 1.4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 56 | \n",
+ " 6.3 | \n",
+ " 3.3 | \n",
+ " 4.7 | \n",
+ " 1.6 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 63 | \n",
+ " 6.1 | \n",
+ " 2.9 | \n",
+ " 4.7 | \n",
+ " 1.4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 10 | \n",
+ " 5.4 | \n",
+ " 3.7 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 105 | \n",
+ " 7.6 | \n",
+ " 3.0 | \n",
+ " 6.6 | \n",
+ " 2.1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 29 | \n",
+ " 4.7 | \n",
+ " 3.2 | \n",
+ " 1.6 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 143 | \n",
+ " 6.8 | \n",
+ " 3.2 | \n",
+ " 5.9 | \n",
+ " 2.3 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 45 | \n",
+ " 4.8 | \n",
+ " 3.0 | \n",
+ " 1.4 | \n",
+ " 0.3 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 129 | \n",
+ " 7.2 | \n",
+ " 3.0 | \n",
+ " 5.8 | \n",
+ " 1.6 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 122 | \n",
+ " 7.7 | \n",
+ " 2.8 | \n",
+ " 6.7 | \n",
+ " 2.0 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 68 | \n",
+ " 6.2 | \n",
+ " 2.2 | \n",
+ " 4.5 | \n",
+ " 1.5 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 4.9 | \n",
+ " 3.0 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 95 | \n",
+ " 5.7 | \n",
+ " 3.0 | \n",
+ " 4.2 | \n",
+ " 1.2 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 125 | \n",
+ " 7.2 | \n",
+ " 3.2 | \n",
+ " 6.0 | \n",
+ " 1.8 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 18 | \n",
+ " 5.7 | \n",
+ " 3.8 | \n",
+ " 1.7 | \n",
+ " 0.3 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 112 | \n",
+ " 6.8 | \n",
+ " 3.0 | \n",
+ " 5.5 | \n",
+ " 2.1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 28 | \n",
+ " 5.2 | \n",
+ " 3.4 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 116 | \n",
+ " 6.5 | \n",
+ " 3.0 | \n",
+ " 5.5 | \n",
+ " 1.8 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 71 | \n",
+ " 6.1 | \n",
+ " 2.8 | \n",
+ " 4.0 | \n",
+ " 1.3 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 32 | \n",
+ " 5.2 | \n",
+ " 4.1 | \n",
+ " 1.5 | \n",
+ " 0.1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 79 | \n",
+ " 5.7 | \n",
+ " 2.6 | \n",
+ " 3.5 | \n",
+ " 1.0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 0 | \n",
+ " 5.1 | \n",
+ " 3.5 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 26 | \n",
+ " 5.0 | \n",
+ " 3.4 | \n",
+ " 1.6 | \n",
+ " 0.4 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 102 | \n",
+ " 7.1 | \n",
+ " 3.0 | \n",
+ " 5.9 | \n",
+ " 2.1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 101 | \n",
+ " 5.8 | \n",
+ " 2.7 | \n",
+ " 5.1 | \n",
+ " 1.9 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 106 | \n",
+ " 4.9 | \n",
+ " 2.5 | \n",
+ " 4.5 | \n",
+ " 1.7 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 62 | \n",
+ " 6.0 | \n",
+ " 2.2 | \n",
+ " 4.0 | \n",
+ " 1.0 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 8 | \n",
+ " 4.4 | \n",
+ " 2.9 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 12 | \n",
+ " 4.8 | \n",
+ " 3.0 | \n",
+ " 1.4 | \n",
+ " 0.1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 90 | \n",
+ " 5.5 | \n",
+ " 2.6 | \n",
+ " 4.4 | \n",
+ " 1.2 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 24 | \n",
+ " 4.8 | \n",
+ " 3.4 | \n",
+ " 1.9 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 48 | \n",
+ " 5.3 | \n",
+ " 3.7 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 53 | \n",
+ " 5.5 | \n",
+ " 2.3 | \n",
+ " 4.0 | \n",
+ " 1.3 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 51 | \n",
+ " 6.4 | \n",
+ " 3.2 | \n",
+ " 4.5 | \n",
+ " 1.5 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 133 | \n",
+ " 6.3 | \n",
+ " 2.8 | \n",
+ " 5.1 | \n",
+ " 1.5 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 4.7 | \n",
+ " 3.2 | \n",
+ " 1.3 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 25 | \n",
+ " 5.0 | \n",
+ " 3.0 | \n",
+ " 1.6 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 61 | \n",
+ " 5.9 | \n",
+ " 3.0 | \n",
+ " 4.2 | \n",
+ " 1.5 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 27 | \n",
+ " 5.2 | \n",
+ " 3.5 | \n",
+ " 1.5 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 87 | \n",
+ " 6.3 | \n",
+ " 2.3 | \n",
+ " 4.4 | \n",
+ " 1.3 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 84 | \n",
+ " 5.4 | \n",
+ " 3.0 | \n",
+ " 4.5 | \n",
+ " 1.5 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 77 | \n",
+ " 6.7 | \n",
+ " 3.0 | \n",
+ " 5.0 | \n",
+ " 1.7 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 47 | \n",
+ " 4.6 | \n",
+ " 3.2 | \n",
+ " 1.4 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 40 | \n",
+ " 5.0 | \n",
+ " 3.5 | \n",
+ " 1.3 | \n",
+ " 0.3 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 16 | \n",
+ " 5.4 | \n",
+ " 3.9 | \n",
+ " 1.3 | \n",
+ " 0.4 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 97 | \n",
+ " 6.2 | \n",
+ " 2.9 | \n",
+ " 4.3 | \n",
+ " 1.3 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
150 rows × 5 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \\\n",
+ "131 7.9 3.8 6.4 2.0 \n",
+ "9 4.9 3.1 1.5 0.1 \n",
+ "55 5.7 2.8 4.5 1.3 \n",
+ "128 6.4 2.8 5.6 2.1 \n",
+ "121 5.6 2.8 4.9 2.0 \n",
+ "114 5.8 2.8 5.1 2.4 \n",
+ "43 5.0 3.5 1.6 0.6 \n",
+ "103 6.3 2.9 5.6 1.8 \n",
+ "14 5.8 4.0 1.2 0.2 \n",
+ "96 5.7 2.9 4.2 1.3 \n",
+ "67 5.8 2.7 4.1 1.0 \n",
+ "140 6.7 3.1 5.6 2.4 \n",
+ "85 6.0 3.4 4.5 1.6 \n",
+ "149 5.9 3.0 5.1 1.8 \n",
+ "59 5.2 2.7 3.9 1.4 \n",
+ "56 6.3 3.3 4.7 1.6 \n",
+ "63 6.1 2.9 4.7 1.4 \n",
+ "10 5.4 3.7 1.5 0.2 \n",
+ "105 7.6 3.0 6.6 2.1 \n",
+ "29 4.7 3.2 1.6 0.2 \n",
+ "143 6.8 3.2 5.9 2.3 \n",
+ "45 4.8 3.0 1.4 0.3 \n",
+ "129 7.2 3.0 5.8 1.6 \n",
+ "122 7.7 2.8 6.7 2.0 \n",
+ "68 6.2 2.2 4.5 1.5 \n",
+ "1 4.9 3.0 1.4 0.2 \n",
+ "95 5.7 3.0 4.2 1.2 \n",
+ "125 7.2 3.2 6.0 1.8 \n",
+ "18 5.7 3.8 1.7 0.3 \n",
+ "112 6.8 3.0 5.5 2.1 \n",
+ ".. ... ... ... ... \n",
+ "28 5.2 3.4 1.4 0.2 \n",
+ "116 6.5 3.0 5.5 1.8 \n",
+ "71 6.1 2.8 4.0 1.3 \n",
+ "32 5.2 4.1 1.5 0.1 \n",
+ "79 5.7 2.6 3.5 1.0 \n",
+ "0 5.1 3.5 1.4 0.2 \n",
+ "26 5.0 3.4 1.6 0.4 \n",
+ "102 7.1 3.0 5.9 2.1 \n",
+ "101 5.8 2.7 5.1 1.9 \n",
+ "106 4.9 2.5 4.5 1.7 \n",
+ "62 6.0 2.2 4.0 1.0 \n",
+ "8 4.4 2.9 1.4 0.2 \n",
+ "12 4.8 3.0 1.4 0.1 \n",
+ "90 5.5 2.6 4.4 1.2 \n",
+ "24 4.8 3.4 1.9 0.2 \n",
+ "48 5.3 3.7 1.5 0.2 \n",
+ "53 5.5 2.3 4.0 1.3 \n",
+ "51 6.4 3.2 4.5 1.5 \n",
+ "133 6.3 2.8 5.1 1.5 \n",
+ "2 4.7 3.2 1.3 0.2 \n",
+ "25 5.0 3.0 1.6 0.2 \n",
+ "61 5.9 3.0 4.2 1.5 \n",
+ "27 5.2 3.5 1.5 0.2 \n",
+ "87 6.3 2.3 4.4 1.3 \n",
+ "84 5.4 3.0 4.5 1.5 \n",
+ "77 6.7 3.0 5.0 1.7 \n",
+ "47 4.6 3.2 1.4 0.2 \n",
+ "40 5.0 3.5 1.3 0.3 \n",
+ "16 5.4 3.9 1.3 0.4 \n",
+ "97 6.2 2.9 4.3 1.3 \n",
+ "\n",
+ " target \n",
+ "131 2 \n",
+ "9 0 \n",
+ "55 1 \n",
+ "128 2 \n",
+ "121 2 \n",
+ "114 2 \n",
+ "43 0 \n",
+ "103 2 \n",
+ "14 0 \n",
+ "96 1 \n",
+ "67 1 \n",
+ "140 2 \n",
+ "85 1 \n",
+ "149 2 \n",
+ "59 1 \n",
+ "56 1 \n",
+ "63 1 \n",
+ "10 0 \n",
+ "105 2 \n",
+ "29 0 \n",
+ "143 2 \n",
+ "45 0 \n",
+ "129 2 \n",
+ "122 2 \n",
+ "68 1 \n",
+ "1 0 \n",
+ "95 1 \n",
+ "125 2 \n",
+ "18 0 \n",
+ "112 2 \n",
+ ".. ... \n",
+ "28 0 \n",
+ "116 2 \n",
+ "71 1 \n",
+ "32 0 \n",
+ "79 1 \n",
+ "0 0 \n",
+ "26 0 \n",
+ "102 2 \n",
+ "101 2 \n",
+ "106 2 \n",
+ "62 1 \n",
+ "8 0 \n",
+ "12 0 \n",
+ "90 1 \n",
+ "24 0 \n",
+ "48 0 \n",
+ "53 1 \n",
+ "51 1 \n",
+ "133 2 \n",
+ "2 0 \n",
+ "25 0 \n",
+ "61 1 \n",
+ "27 0 \n",
+ "87 1 \n",
+ "84 1 \n",
+ "77 1 \n",
+ "47 0 \n",
+ "40 0 \n",
+ "16 0 \n",
+ "97 1 \n",
+ "\n",
+ "[150 rows x 5 columns]"
+ ]
+ },
+ "execution_count": 335,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Join target variable to dataframe\n",
+ "\n",
+ "# Randomly shuffle dataframe\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 336,
+ "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": 336,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\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",
+ "\n",
+ "# Create a classifier\n",
+ "\n",
+ "# Train it on the training set\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 337,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([1, 0, 2, 2, 0, 0, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 1, 0, 0, 2,\n",
+ " 2, 2, 1, 0, 1, 1, 0, 2])"
+ ]
+ },
+ "execution_count": 337,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Calculate the predictions on the test set\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 338,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0.9666666666666667"
+ ]
+ },
+ "execution_count": 338,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "\n",
+ "\n",
+ "# Find the accuracy on the test set\n"
+ ]
+ },
+ {
+ "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": 345,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ " Volume in drive C is Latitude\n",
+ " Volume Serial Number is CAE2-B882\n",
+ "\n",
+ " Directory of C:\\Users\\Sahil JJ\\Desktop\\Python\\Machine\\Assignments\\QSTP-ML-master\\python-assn\\assn-03\n",
+ "\n",
+ "28-05-2018 18:32 .\n",
+ "28-05-2018 18:32 ..\n",
+ "27-05-2018 15:06 .ipynb_checkpoints\n",
+ "28-05-2018 18:31 169,595 Assn-03.ipynb\n",
+ "28-05-2018 18:24 3,419 dataframe\n",
+ "28-05-2018 18:32 3,419 dataframe.csv\n",
+ "27-05-2018 15:06 2,558 Iris.csv\n",
+ "28-05-2018 18:32 924 model.pkl\n",
+ " 5 File(s) 179,915 bytes\n",
+ " 3 Dir(s) 49,560,604,672 bytes free\n"
+ ]
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 347,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "\n",
+ "\n",
+ "# Save dataframe to csv\n",
+ "\n",
+ "\n",
+ "# Save model to model.pkl\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "It is recommended you practice these functions to get a good idea of how to create a model for a dataset in Python. Hope you enjoyed it!"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 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
+}