From 8ddc4957bc50bd2b6d79037e3cc4a9f9e1ada5ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20Ervel=C3=A4?= <elias.m.ervela@utu.fi> Date: Tue, 11 Jan 2022 21:46:24 +0000 Subject: [PATCH] Upload New File --- DAKD2020Exercise1.ipynb | 1 + 1 file changed, 1 insertion(+) create mode 100644 DAKD2020Exercise1.ipynb diff --git a/DAKD2020Exercise1.ipynb b/DAKD2020Exercise1.ipynb new file mode 100644 index 0000000..c4b3914 --- /dev/null +++ b/DAKD2020Exercise1.ipynb @@ -0,0 +1 @@ +{"nbformat":4,"nbformat_minor":0,"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.10"},"colab":{"name":"DAKD2020Exercise1.ipynb","provenance":[]}},"cells":[{"cell_type":"markdown","metadata":{"id":"AjEZRpKRRPIv"},"source":["# Python tutorial\n","Python is a very common programming language in machine learning applications and is used in the exercises of this course. This tutorial is targeted for students that have at least elementary knowledge of programming in any language. In particular, you should know basic concepts such as variables, loops and functions. In this document we see how to use those building blocks in Python programs. We also cover some important packages such as NumPy, Pandas and Matplotlib. If you installed the [Anaconda Distribution](https://www.anaconda.com/distribution/) (Python version 3.x recommended) you should already have those packages, in addition to the Python language itself.\n","\n","**Notes:** 1) There are exercises in the end of this document. 2) A part of the tutorial uses the well-known Iris data set. You can download it [here](https://archive.ics.uci.edu/ml/machine-learning-databases/iris/).\n","\n","## Jupyter Notebook\n","Jupyter Notebook is an easy way to make documents containing both runnable program code and text (markdown). [Tutorials](https://www.dataquest.io/blog/jupyter-notebook-tutorial/) about Jupyter Notebook are easily found on the Internet but we also cover some of the most important concepts here. \n","\n","Notebook documents consist of two kinds of *cells*: *code* and *Markdown*. Code cells contain executable program code and Markdown cells contain text, possibly with images. You can execute the currently selected cell by pressing either **Ctrl+Enter** or **Shift+Enter**. The latter option also selects the next cell, making it easy to execute multiple consecutive cells after each other. These actions can also be found in the menu: Cell -> Run Cells. The entire Notebook can be executed from the menu: Kernel -> Restart & Run All.\n","\n","To add a new cell, press either a (insert *above* the current cell) or b (*below* the current cell) when a cell is selected but not editable. When editing a cell, pressing a or b will of course just add a letter to the document. To stop editing a cell, you may click the border area. To delete a cell, press d (*delete*) *twice*. To turn a cell into a Markdown cell, press m. By pressing y the current cell becomes a code cell.\n","\n","It is possible to execute a cell multiple times or to execute cells in an order that is different from their order in the document. This can be handy when you need to make small changes - there is no need to re-execute everything from the beginning. However, you need to remember that the state of the running program is determined by the order in which you run the cells, not by their order in the document.\n","\n","By pressing h (*help*) you can see what keyboard shortcuts are available. You can also access everything from the menus but it is faster to memorize at least the most commonly used keyboard shortcuts such as adding and executing cells.\n","\n","## Python programming basics\n","As our simplest use case, we can easily compute the values of certain expressions:"]},{"cell_type":"code","metadata":{"id":"2HrSzqvkRPIy","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604417980382,"user_tz":-120,"elapsed":1723,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"9dbfa16c-e7f1-4970-dd17-c3f809cfb7ea"},"source":["5 + 8*6 # Execute the cell by pressing Shift+Enter or Ctrl+Enter"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["53"]},"metadata":{"tags":[]},"execution_count":1}]},{"cell_type":"markdown","metadata":{"id":"f6t7fMT1RPI4"},"source":["Using variables is similar to other languages, although in Python there is no separate variable declaration. The data type of a variable depends on what is assigned to it."]},{"cell_type":"code","metadata":{"scrolled":true,"id":"YP603Z95RPI5","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604418010789,"user_tz":-120,"elapsed":1393,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"71241075-6387-49f8-cded-e6d5bff257aa"},"source":["a = 5\n","b, c = -1, 1 # We can assign values to more than one variable at the same time\n","s, x = 'a string', 2.1\n","print(a*b + x*c)\n","print(a**b) # Exponentiation\n","print(s + ' ' + str(a)) # An explicit conversion of a number to a string is necessary here\n","b, c = c, b # Swap the values of two variables\n","print(b, c)\n","s = a # Now s is no longer a string\n","print(s, type(s))"],"execution_count":null,"outputs":[{"output_type":"stream","text":["-2.9\n","0.2\n","a string 5\n","1 -1\n","5 <class 'int'>\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"UN2mWdU9RPI-"},"source":["### Conditional statements and loops\n","Conditional statements and loops are similar to most programming languages. The 'for' loop of Python iterates over a collection. To iterate over a range of numeric values, we can use the *range()* function. Range can take a lower limit, an upper limit and a step size as the parameters. If only one parameter is specified, it is the upper limit (which is itself excluded), lower limit is 0 and step size 1."]},{"cell_type":"code","metadata":{"id":"-sGo8UjPRPI_","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604418139966,"user_tz":-120,"elapsed":1293,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"52f53ddc-a586-4213-ef3e-037f93b4117c"},"source":["if b > 0: # A conditional statement\n"," print('Positive')\n","elif b < 0: # There can be any number of \"else if\" -branches, including 0\n"," print('Negative')\n","else: # At most one \"else\"-branch\n"," print('Zero')\n"," \n","print()\n"," \n","for i in [-1, 1, -2, 6]: # Iterate over a list\n"," print(i, i**2)\n"," \n","print()\n"," \n","for i in range(10): # Repeat for i = 0, 1, ..., 9 (the upper limit, 10, is excluded)\n"," print(i)\n"," \n","print()\n"," \n","for i in range(-3, 8, 2): # Repeat for i = -3, -1, ..., 7\n"," print(i)\n","\n","print()\n","\n","i = -3\n","while i < 8: # The same as above but with a while loop\n"," print(i)\n"," i += 2 # Here we must remember to increase the value of i"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Positive\n","\n","-1 1\n","1 1\n","-2 4\n","6 36\n","\n","0\n","1\n","2\n","3\n","4\n","5\n","6\n","7\n","8\n","9\n","\n","-3\n","-1\n","1\n","3\n","5\n","7\n","\n","-3\n","-1\n","1\n","3\n","5\n","7\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"LuoQKJC1RPJD"},"source":["### Indentation\n","As seen above, in Python code blocks are defined by *indentation*, not by any particular block start and end characters (like '{' and '}' in Java). Some lines need to be ended in a colon (':'), e.g. conditional statements, loops and function definitions.\n","\n","### Functions\n","Functions are defined using the 'def' keyword:"]},{"cell_type":"code","metadata":{"id":"U2S2NIsMRPJE","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604418194041,"user_tz":-120,"elapsed":1246,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"186db615-5090-48fb-cb2c-13fb6a0a8da5"},"source":["def f(x): # A function definition\n"," return x**2\n","\n","f(5)"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["25"]},"metadata":{"tags":[]},"execution_count":4}]},{"cell_type":"markdown","metadata":{"id":"PuSdjy7JRPJI"},"source":["### Data structures\n","The core language provides several data structures, such as 'list', 'tuple' and 'dictionary'. Lists and tuples are simple collections of values. Dictionaries consist of key-value pairs."]},{"cell_type":"code","metadata":{"id":"cqycm0ZSRPJI","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604418229817,"user_tz":-120,"elapsed":1126,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"cb5f11e4-73c7-4675-95e3-d99ea3f9781c"},"source":["l = [1, 2, 3] # A list\n","t = (1, 2, 3) # A tuple - similar to a list but cannot be modified after creation\n","l[0] = 0 # t[0] would not work because tuples are immutable\n","d = {'zero': 0, 'one': 1} # A dictionary\n","print(l, t, d)\n","print(l[1], d['one']) # l[1] is the second element of l - first index is 0\n","print(t[0:2]) # Elements at index 0 and 1 (end index is excluded)\n","print(t[0:3:2]) # Start index 0, end index 3, step size 2\n","print(t[::-1]) # Step size -1 (reverse), include all elements (start and end index empty)\n","l.append(4) # Append an element to the end of a list\n","d['many'] = 3 # Add a new key-value pair to a dictionary\n","print(l, d)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["[0, 2, 3] (1, 2, 3) {'zero': 0, 'one': 1}\n","2 1\n","(1, 2)\n","(1, 3)\n","(3, 2, 1)\n","[0, 2, 3, 4] {'zero': 0, 'one': 1, 'many': 3}\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"yHovlbTMRPJN"},"source":["#### Nice to know, not essential for this course:\n","There are many handy features in Python that you can use to save some work: list comprehensions, filter and map functions, lambda functions (a lambda function is an unnamed function that is defined where it is used). Here are some examples but we won't cover them any further because our needs are quite modest in this course."]},{"cell_type":"code","metadata":{"id":"7XM48sVJRPJO","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604418447632,"user_tz":-120,"elapsed":507,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"2ce7bf3b-8657-4aa6-e6f2-2d2ff1dc0f88"},"source":["print(l)\n","l1 = [x**2 for x in l] # List comprehension - can replace a loop in many cases\n","l2 = [x**2 for x in l if x > 0] # List comprehension with some elements omitted\n","print(l1, l2)\n","print(list(filter(lambda x: x > 0, l1))) # Filter: include only positive elements\n","print(list(map(lambda x: x**2, l1))) # Map: apply a function to all elements of a collection"],"execution_count":null,"outputs":[{"output_type":"stream","text":["[0, 2, 3, 4]\n","[0, 4, 9, 16] [4, 9, 16]\n","[4, 9, 16]\n","[0, 16, 81, 256]\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"-c9IKVzERPJV"},"source":["## NumPy\n","NumPy provides us with multi-dimensional arrays and methods for working with them. Among the methods are dot products of vectors, matrix products, calculating means and standard deviations, generating random numbers and many, many more. Let's start with the basics:"]},{"cell_type":"code","metadata":{"id":"UedZ8_VIRPJW","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604419487990,"user_tz":-120,"elapsed":1305,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"59e10d92-d64b-4159-9ccb-4ccf813fc616"},"source":["import numpy as np\n","vec1 = np.array([1, 2, 3]) # A one-dimensional array (vector)\n","vec2 = np.array([1, 1, -1])\n","print(np.dot(vec1, vec2)) # Dot product of vectors\n","print()\n","mat = np.array([[1, 1, 1], [1, -1, 1], [1, 1, -1]]) # A two-dimensional array (matrix)\n","print(mat)\n","print()\n","print(mat@vec1) # Matrix product (vec1 is interpreted as a column vector)\n","print()\n","print(mat*vec1) # Element-wise product, with broadcasting\n","print()\n","print(mat.T) # Transpose of a matrix\n","print()\n","print(np.linalg.inv(mat)) # Inverse of a matrix"],"execution_count":null,"outputs":[{"output_type":"stream","text":["0\n","\n","[[ 1 1 1]\n"," [ 1 -1 1]\n"," [ 1 1 -1]]\n","\n","[6 2 0]\n","\n","[[ 1 2 3]\n"," [ 1 -2 3]\n"," [ 1 2 -3]]\n","\n","[[ 1 1 1]\n"," [ 1 -1 1]\n"," [ 1 1 -1]]\n","\n","[[ 0. 0.5 0.5]\n"," [ 0.5 -0.5 -0. ]\n"," [ 0.5 -0. -0.5]]\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"_WPMKBtSSQ93"},"source":["Note that matrix product is denoted by the symbol @, not by * which is used for scalar multiplication or for element-wise product of the elements of two matrices. For example, if A and B are 3x3-matrices, (A\\*B)[0, 0] = A[0]\\*B[0] whereas (A@B)[0, 0] = A[0, 0]\\*B[0, 0] + A[0, 1]\\*B[1, 0] + A[0, 2]\\*B[2, 0].\n","\n","Above, we used the operator \\* where the left-side object was a matrix, but on the right there was a vector. This works because of an automatically applied mechanism known as *broadcasting*. Conceptually, the vector [1, 2, 3] (here interpreted as a row vector) was repeated three times to get a 3x3-matrix with all rows equal to [1, 2, 3]. The matrix mat was then multiplied element-wise with this new matrix."]},{"cell_type":"markdown","metadata":{"id":"4RGdcNjWRPJa"},"source":["In most applications we don't want to enter the arrays manually as that would be tedious and error-prone. Instead, we may read data (here, the [well-known Iris data set](https://archive.ics.uci.edu/ml/machine-learning-databases/iris/); you need to download iris.data from the page) from a file. If you are using this notebook via Google Colab, you will first need to upload the files you want to use, like this:"]},{"cell_type":"code","metadata":{"id":"L7WLfGAeSv1n","colab":{"resources":{"http://localhost:8080/nbextensions/google.colab/files.js":{"data":"Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCkgewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwogICAgICBwZXJjZW50LnRleHRDb250ZW50ID0KICAgICAgICAgIGAke01hdGgucm91bmQoKHBvc2l0aW9uIC8gZmlsZURhdGEuYnl0ZUxlbmd0aCkgKiAxMDApfSUgZG9uZWA7CiAgICB9CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK","ok":true,"headers":[["content-type","application/javascript"]],"status":200,"status_text":""}},"base_uri":"https://localhost:8080/","height":39},"executionInfo":{"status":"ok","timestamp":1604497037722,"user_tz":-120,"elapsed":3547,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"e9a18eff-4b73-4ddf-dba3-dfc196376972"},"source":["from google.colab import files\n","uploaded = files.upload()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/html":["\n"," <input type=\"file\" id=\"files-a44c926d-7f22-4f97-a109-99da2161d00c\" name=\"files[]\" multiple disabled\n"," style=\"border:none\" />\n"," <output id=\"result-a44c926d-7f22-4f97-a109-99da2161d00c\">\n"," Upload widget is only available when the cell has been executed in the\n"," current browser session. Please rerun this cell to enable.\n"," </output>\n"," <script src=\"/nbextensions/google.colab/files.js\"></script> "],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"NntCqw2WSZEO"},"source":["If you are not using Google Colab, you may proceed directly here:"]},{"cell_type":"code","metadata":{"id":"iX0TLrg8RPJb","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604422688893,"user_tz":-120,"elapsed":2412,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"a9647f7a-f3c6-4bcf-8570-91c2e0c5f460"},"source":["orig_data = np.loadtxt('iris.data', dtype='object', delimiter=',')\n","print(orig_data)\n","# We see that only the four first columns are numeric, the fifth is the species. Let's get the\n","# numeric attributes into one array (contains numbers) and the species into a vector\n","X, y = orig_data[:, 0:4].astype(float), orig_data[:, 4]\n","print(X, y)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["[['5.1' '3.5' '1.4' '0.2' 'Iris-setosa']\n"," ['4.9' '3.0' '1.4' '0.2' 'Iris-setosa']\n"," ['4.7' '3.2' '1.3' '0.2' 'Iris-setosa']\n"," ['4.6' '3.1' '1.5' '0.2' 'Iris-setosa']\n"," ['5.0' '3.6' '1.4' '0.2' 'Iris-setosa']\n"," ['5.4' '3.9' '1.7' '0.4' 'Iris-setosa']\n"," ['4.6' '3.4' '1.4' '0.3' 'Iris-setosa']\n"," ['5.0' '3.4' '1.5' '0.2' 'Iris-setosa']\n"," ['4.4' '2.9' '1.4' '0.2' 'Iris-setosa']\n"," ['4.9' '3.1' '1.5' '0.1' 'Iris-setosa']\n"," ['5.4' '3.7' '1.5' '0.2' 'Iris-setosa']\n"," ['4.8' '3.4' '1.6' '0.2' 'Iris-setosa']\n"," ['4.8' '3.0' '1.4' '0.1' 'Iris-setosa']\n"," ['4.3' '3.0' '1.1' '0.1' 'Iris-setosa']\n"," ['5.8' '4.0' '1.2' '0.2' 'Iris-setosa']\n"," ['5.7' '4.4' '1.5' '0.4' 'Iris-setosa']\n"," ['5.4' '3.9' '1.3' '0.4' 'Iris-setosa']\n"," ['5.1' '3.5' '1.4' '0.3' 'Iris-setosa']\n"," ['5.7' '3.8' '1.7' '0.3' 'Iris-setosa']\n"," ['5.1' '3.8' '1.5' '0.3' 'Iris-setosa']\n"," ['5.4' '3.4' '1.7' '0.2' 'Iris-setosa']\n"," ['5.1' '3.7' '1.5' '0.4' 'Iris-setosa']\n"," ['4.6' '3.6' '1.0' '0.2' 'Iris-setosa']\n"," ['5.1' '3.3' '1.7' '0.5' 'Iris-setosa']\n"," ['4.8' '3.4' '1.9' '0.2' 'Iris-setosa']\n"," ['5.0' '3.0' '1.6' '0.2' 'Iris-setosa']\n"," ['5.0' '3.4' '1.6' '0.4' 'Iris-setosa']\n"," ['5.2' '3.5' '1.5' '0.2' 'Iris-setosa']\n"," ['5.2' '3.4' '1.4' '0.2' 'Iris-setosa']\n"," ['4.7' '3.2' '1.6' '0.2' 'Iris-setosa']\n"," ['4.8' '3.1' '1.6' '0.2' 'Iris-setosa']\n"," ['5.4' '3.4' '1.5' '0.4' 'Iris-setosa']\n"," ['5.2' '4.1' '1.5' '0.1' 'Iris-setosa']\n"," ['5.5' '4.2' '1.4' '0.2' 'Iris-setosa']\n"," ['4.9' '3.1' '1.5' '0.1' 'Iris-setosa']\n"," ['5.0' '3.2' '1.2' '0.2' 'Iris-setosa']\n"," ['5.5' '3.5' '1.3' '0.2' 'Iris-setosa']\n"," ['4.9' '3.1' '1.5' '0.1' 'Iris-setosa']\n"," ['4.4' '3.0' '1.3' '0.2' 'Iris-setosa']\n"," ['5.1' '3.4' '1.5' '0.2' 'Iris-setosa']\n"," ['5.0' '3.5' '1.3' '0.3' 'Iris-setosa']\n"," ['4.5' '2.3' '1.3' '0.3' 'Iris-setosa']\n"," ['4.4' '3.2' '1.3' '0.2' 'Iris-setosa']\n"," ['5.0' '3.5' '1.6' '0.6' 'Iris-setosa']\n"," ['5.1' '3.8' '1.9' '0.4' 'Iris-setosa']\n"," ['4.8' '3.0' '1.4' '0.3' 'Iris-setosa']\n"," ['5.1' '3.8' '1.6' '0.2' 'Iris-setosa']\n"," ['4.6' '3.2' '1.4' '0.2' 'Iris-setosa']\n"," ['5.3' '3.7' '1.5' '0.2' 'Iris-setosa']\n"," ['5.0' '3.3' '1.4' '0.2' 'Iris-setosa']\n"," ['7.0' '3.2' '4.7' '1.4' 'Iris-versicolor']\n"," ['6.4' '3.2' '4.5' '1.5' 'Iris-versicolor']\n"," ['6.9' '3.1' '4.9' '1.5' 'Iris-versicolor']\n"," ['5.5' '2.3' '4.0' '1.3' 'Iris-versicolor']\n"," ['6.5' '2.8' '4.6' '1.5' 'Iris-versicolor']\n"," ['5.7' '2.8' '4.5' '1.3' 'Iris-versicolor']\n"," ['6.3' '3.3' '4.7' '1.6' 'Iris-versicolor']\n"," ['4.9' '2.4' '3.3' '1.0' 'Iris-versicolor']\n"," ['6.6' '2.9' '4.6' '1.3' 'Iris-versicolor']\n"," ['5.2' '2.7' '3.9' '1.4' 'Iris-versicolor']\n"," ['5.0' '2.0' '3.5' '1.0' 'Iris-versicolor']\n"," ['5.9' '3.0' '4.2' '1.5' 'Iris-versicolor']\n"," ['6.0' '2.2' '4.0' '1.0' 'Iris-versicolor']\n"," ['6.1' '2.9' '4.7' '1.4' 'Iris-versicolor']\n"," ['5.6' '2.9' '3.6' '1.3' 'Iris-versicolor']\n"," ['6.7' '3.1' '4.4' '1.4' 'Iris-versicolor']\n"," ['5.6' '3.0' '4.5' '1.5' 'Iris-versicolor']\n"," ['5.8' '2.7' '4.1' '1.0' 'Iris-versicolor']\n"," ['6.2' '2.2' '4.5' '1.5' 'Iris-versicolor']\n"," ['5.6' '2.5' '3.9' '1.1' 'Iris-versicolor']\n"," ['5.9' '3.2' '4.8' '1.8' 'Iris-versicolor']\n"," ['6.1' '2.8' '4.0' '1.3' 'Iris-versicolor']\n"," ['6.3' '2.5' '4.9' '1.5' 'Iris-versicolor']\n"," ['6.1' '2.8' '4.7' '1.2' 'Iris-versicolor']\n"," ['6.4' '2.9' '4.3' '1.3' 'Iris-versicolor']\n"," ['6.6' '3.0' '4.4' '1.4' 'Iris-versicolor']\n"," ['6.8' '2.8' '4.8' '1.4' 'Iris-versicolor']\n"," ['6.7' '3.0' '5.0' '1.7' 'Iris-versicolor']\n"," ['6.0' '2.9' '4.5' '1.5' 'Iris-versicolor']\n"," ['5.7' '2.6' '3.5' '1.0' 'Iris-versicolor']\n"," ['5.5' '2.4' '3.8' '1.1' 'Iris-versicolor']\n"," ['5.5' '2.4' '3.7' '1.0' 'Iris-versicolor']\n"," ['5.8' '2.7' '3.9' '1.2' 'Iris-versicolor']\n"," ['6.0' '2.7' '5.1' '1.6' 'Iris-versicolor']\n"," ['5.4' '3.0' '4.5' '1.5' 'Iris-versicolor']\n"," ['6.0' '3.4' '4.5' '1.6' 'Iris-versicolor']\n"," ['6.7' '3.1' '4.7' '1.5' 'Iris-versicolor']\n"," ['6.3' '2.3' '4.4' '1.3' 'Iris-versicolor']\n"," ['5.6' '3.0' '4.1' '1.3' 'Iris-versicolor']\n"," ['5.5' '2.5' '4.0' '1.3' 'Iris-versicolor']\n"," ['5.5' '2.6' '4.4' '1.2' 'Iris-versicolor']\n"," ['6.1' '3.0' '4.6' '1.4' 'Iris-versicolor']\n"," ['5.8' '2.6' '4.0' '1.2' 'Iris-versicolor']\n"," ['5.0' '2.3' '3.3' '1.0' 'Iris-versicolor']\n"," ['5.6' '2.7' '4.2' '1.3' 'Iris-versicolor']\n"," ['5.7' '3.0' '4.2' '1.2' 'Iris-versicolor']\n"," ['5.7' '2.9' '4.2' '1.3' 'Iris-versicolor']\n"," ['6.2' '2.9' '4.3' '1.3' 'Iris-versicolor']\n"," ['5.1' '2.5' '3.0' '1.1' 'Iris-versicolor']\n"," ['5.7' '2.8' '4.1' '1.3' 'Iris-versicolor']\n"," ['6.3' '3.3' '6.0' '2.5' 'Iris-virginica']\n"," ['5.8' '2.7' '5.1' '1.9' 'Iris-virginica']\n"," ['7.1' '3.0' '5.9' '2.1' 'Iris-virginica']\n"," ['6.3' '2.9' '5.6' '1.8' 'Iris-virginica']\n"," ['6.5' '3.0' '5.8' '2.2' 'Iris-virginica']\n"," ['7.6' '3.0' '6.6' '2.1' 'Iris-virginica']\n"," ['4.9' '2.5' '4.5' '1.7' 'Iris-virginica']\n"," ['7.3' '2.9' '6.3' '1.8' 'Iris-virginica']\n"," ['6.7' '2.5' '5.8' '1.8' 'Iris-virginica']\n"," ['7.2' '3.6' '6.1' '2.5' 'Iris-virginica']\n"," ['6.5' '3.2' '5.1' '2.0' 'Iris-virginica']\n"," ['6.4' '2.7' '5.3' '1.9' 'Iris-virginica']\n"," ['6.8' '3.0' '5.5' '2.1' 'Iris-virginica']\n"," ['5.7' '2.5' '5.0' '2.0' 'Iris-virginica']\n"," ['5.8' '2.8' '5.1' '2.4' 'Iris-virginica']\n"," ['6.4' '3.2' '5.3' '2.3' 'Iris-virginica']\n"," ['6.5' '3.0' '5.5' '1.8' 'Iris-virginica']\n"," ['7.7' '3.8' '6.7' '2.2' 'Iris-virginica']\n"," ['7.7' '2.6' '6.9' '2.3' 'Iris-virginica']\n"," ['6.0' '2.2' '5.0' '1.5' 'Iris-virginica']\n"," ['6.9' '3.2' '5.7' '2.3' 'Iris-virginica']\n"," ['5.6' '2.8' '4.9' '2.0' 'Iris-virginica']\n"," ['7.7' '2.8' '6.7' '2.0' 'Iris-virginica']\n"," ['6.3' '2.7' '4.9' '1.8' 'Iris-virginica']\n"," ['6.7' '3.3' '5.7' '2.1' 'Iris-virginica']\n"," ['7.2' '3.2' '6.0' '1.8' 'Iris-virginica']\n"," ['6.2' '2.8' '4.8' '1.8' 'Iris-virginica']\n"," ['6.1' '3.0' '4.9' '1.8' 'Iris-virginica']\n"," ['6.4' '2.8' '5.6' '2.1' 'Iris-virginica']\n"," ['7.2' '3.0' '5.8' '1.6' 'Iris-virginica']\n"," ['7.4' '2.8' '6.1' '1.9' 'Iris-virginica']\n"," ['7.9' '3.8' '6.4' '2.0' 'Iris-virginica']\n"," ['6.4' '2.8' '5.6' '2.2' 'Iris-virginica']\n"," ['6.3' '2.8' '5.1' '1.5' 'Iris-virginica']\n"," ['6.1' '2.6' '5.6' '1.4' 'Iris-virginica']\n"," ['7.7' '3.0' '6.1' '2.3' 'Iris-virginica']\n"," ['6.3' '3.4' '5.6' '2.4' 'Iris-virginica']\n"," ['6.4' '3.1' '5.5' '1.8' 'Iris-virginica']\n"," ['6.0' '3.0' '4.8' '1.8' 'Iris-virginica']\n"," ['6.9' '3.1' '5.4' '2.1' 'Iris-virginica']\n"," ['6.7' '3.1' '5.6' '2.4' 'Iris-virginica']\n"," ['6.9' '3.1' '5.1' '2.3' 'Iris-virginica']\n"," ['5.8' '2.7' '5.1' '1.9' 'Iris-virginica']\n"," ['6.8' '3.2' '5.9' '2.3' 'Iris-virginica']\n"," ['6.7' '3.3' '5.7' '2.5' 'Iris-virginica']\n"," ['6.7' '3.0' '5.2' '2.3' 'Iris-virginica']\n"," ['6.3' '2.5' '5.0' '1.9' 'Iris-virginica']\n"," ['6.5' '3.0' '5.2' '2.0' 'Iris-virginica']\n"," ['6.2' '3.4' '5.4' '2.3' 'Iris-virginica']\n"," ['5.9' '3.0' '5.1' '1.8' 'Iris-virginica']]\n","[[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]] ['Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica']\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"8c-WckBURPJe"},"source":["For a description of what the columns represent, see [the Iris data set page](https://archive.ics.uci.edu/ml/datasets/iris) (Attributes)."]},{"cell_type":"code","metadata":{"id":"N47HKNEtRPJf"},"source":["# We will use the column names later\n","col_names = ['sepal length', 'sepal width', 'petal length', 'petal width', 'class']"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"fI4GZsgIRPJj"},"source":["Let's compute the means of all four attributes. First, for all four classes of the flowers. Then, for Iris setosa only."]},{"cell_type":"code","metadata":{"id":"0_5Yz8OARPJj","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604422803536,"user_tz":-120,"elapsed":2539,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"70c88ace-47f6-4ca9-8bc1-4e354eadfb69"},"source":["print(np.mean(X, axis=0))\n","print(np.mean(X[y == 'Iris-setosa'], axis=0))"],"execution_count":null,"outputs":[{"output_type":"stream","text":["[5.84333333 3.054 3.75866667 1.19866667]\n","[5.006 3.418 1.464 0.244]\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"0FbX070lGDnT","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604423694691,"user_tz":-120,"elapsed":1216,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"4acabc9d-8c31-42b1-df0f-71118454e0a1"},"source":["print(np.mean([[1,2,3],[4,5,6],[7,8,9]],axis=0))"],"execution_count":null,"outputs":[{"output_type":"stream","text":["[4. 5. 6.]\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"WSndnIxGRPJo"},"source":["Here, the parameter 'axis' specifies that we are interested in column-wise means (0 actually means *rows*; one needs to *iterate over all rows* to get the mean value of a column). If we don't specify any axis, we will get the mean of all values of the array.\n","\n","In the second case we created a *Boolean vector* by the condition 'y == 'Iris-setosa''. The condition is *True* for all rows where the flower is of class 'Iris-setosa' and *False* for all other rows. Such a vector can be used to index an array. The result is that a row of the array is included if and only if the Boolean vector contains the value *True* in the corresponding position. The size of the Boolean vector should be equal to the number of rows in the array. We could also use a vector containing the indices of the wanted rows, and such a vector can be obtained using the 'where' function."]},{"cell_type":"code","metadata":{"id":"7ArJ4aTbRPJo","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604423803274,"user_tz":-120,"elapsed":2271,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"8120868a-dac3-436e-a54e-bfc913d11a82"},"source":["np.mean(X[np.where(y=='Iris-setosa')], axis=0)"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([5.006, 3.418, 1.464, 0.244])"]},"metadata":{"tags":[]},"execution_count":23}]},{"cell_type":"markdown","metadata":{"id":"_n1mq9q-RPJs"},"source":["We can generate many kinds of random sequences with NumPy. This includes samples from various kinds of statistical distributions or randomly selected samples from a given collection, with or without replacement. The latter case, samples from a collection without replacement, are also *permutations*."]},{"cell_type":"code","metadata":{"scrolled":false,"id":"ka_OtZc3RPJt","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604423859559,"user_tz":-120,"elapsed":1131,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"84442449-9cbb-4587-f41a-fad3055c0107"},"source":["print(np.random.uniform(low=1, high=3, size=20)) # Samples from a uniform distributions\n","shuffled_classes = np.random.choice(y, size=len(y), replace=False) # Random permutation of y\n","print(shuffled_classes)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["[1.00946479 1.74323771 1.93787052 1.71097019 2.21355561 2.51288984\n"," 2.60060803 2.82108909 1.21750855 2.17268318 1.66045995 1.29568077\n"," 1.1848672 1.66955724 2.14624474 1.75735649 1.24518886 1.84378699\n"," 2.29753815 2.06729687]\n","['Iris-versicolor' 'Iris-virginica' 'Iris-setosa' 'Iris-versicolor'\n"," 'Iris-virginica' 'Iris-versicolor' 'Iris-virginica' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-setosa' 'Iris-versicolor'\n"," 'Iris-virginica' 'Iris-setosa' 'Iris-virginica' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-virginica'\n"," 'Iris-versicolor' 'Iris-virginica' 'Iris-virginica' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-virginica' 'Iris-setosa' 'Iris-versicolor' 'Iris-setosa'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-virginica' 'Iris-setosa'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-virginica' 'Iris-setosa'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-virginica' 'Iris-versicolor' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-versicolor'\n"," 'Iris-setosa' 'Iris-versicolor' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-versicolor' 'Iris-setosa' 'Iris-setosa' 'Iris-virginica'\n"," 'Iris-setosa' 'Iris-virginica' 'Iris-setosa' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-versicolor' 'Iris-virginica' 'Iris-versicolor'\n"," 'Iris-virginica' 'Iris-versicolor' 'Iris-setosa' 'Iris-setosa'\n"," 'Iris-versicolor' 'Iris-setosa' 'Iris-versicolor' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-virginica' 'Iris-versicolor' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-setosa' 'Iris-virginica' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-versicolor'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-setosa' 'Iris-versicolor'\n"," 'Iris-setosa' 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor'\n"," 'Iris-setosa' 'Iris-setosa' 'Iris-setosa' 'Iris-virginica' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-versicolor' 'Iris-versicolor' 'Iris-setosa'\n"," 'Iris-virginica' 'Iris-setosa' 'Iris-versicolor' 'Iris-setosa'\n"," 'Iris-virginica' 'Iris-setosa' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-versicolor' 'Iris-setosa' 'Iris-versicolor'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-versicolor' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-virginica' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-setosa' 'Iris-virginica' 'Iris-virginica'\n"," 'Iris-virginica' 'Iris-virginica' 'Iris-versicolor' 'Iris-setosa'\n"," 'Iris-setosa' 'Iris-virginica' 'Iris-versicolor' 'Iris-virginica'\n"," 'Iris-versicolor' 'Iris-versicolor' 'Iris-setosa' 'Iris-versicolor']\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"4QWO7suURPJx"},"source":["## Pandas\n","NumPy is a powerful library but for interactively working with tabular data it is not always ideal. For instance, we would quite likely want to *label* our columns in some way so that we don't need to look at a separate vector containing the labels whenever we have forgotten what the columns stand for. We might also want to use those labels as column indices instead of always using numbers from zero to the number of columns minus one. Perhaps we would like to do the same with rows, too.\n","\n","Pandas is a package providing just that and more. The basic data structures of Pandas are Series (1D array, similar to a NumPy vector but item indices (labels) need not be integers) and DataFrame (similar to 2D NumPy array, with freely selectable row and column labels).\n","\n","Let's load the Iris data into a Pandas DataFrame."]},{"cell_type":"code","metadata":{"id":"R9WYFrIURPJ2","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604424105448,"user_tz":-120,"elapsed":894,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"161e16fb-824b-478c-e8cd-b997e2e911e1"},"source":["import pandas as pd\n","# Way 1: from a file\n","df1 = pd.read_csv('iris.data', names=col_names)\n","# Way 2: from a NumPy array\n","df2 = pd.DataFrame(orig_data, columns=col_names)\n","print(df1.dtypes, df2.dtypes)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["sepal length float64\n","sepal width float64\n","petal length float64\n","petal width float64\n","class object\n","dtype: object sepal length object\n","sepal width object\n","petal length object\n","petal width object\n","class object\n","dtype: object\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"p5XcvqivRPJ5"},"source":["We note that the two ways of getting the data led to different data types of the columns. This is because in the NumPy array all values were of type object. In a Pandas DataFrame different columns can have different data types but in NumPy arrays that is not supported.\n","\n","If we want to work with Pandas instead of NumPy, we would usually prefer the first way. The read_csv funtion of Pandas can also get the names of the columns from the file. Had we omitted 'names=col_names', the first row of the file would have been used as column names. In the present case that does not make sense because the file does not contain column labels. If numbers 0, 1, ... are acceptable as column names, we could omit the names parameter and add a new parameter 'header=None'. If some column contains values that we want to use as row names, we can add the parameter 'index_col= <column number or name>'.\n","\n","Now that we have loaded the data, let's do something with it. Like with NumPy, we can compute row and column means and select rows or columns from the table."]},{"cell_type":"code","metadata":{"id":"FHqdLVWkRPJ6","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604424531372,"user_tz":-120,"elapsed":2586,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"90ca9c5d-fac5-4f9e-cd42-f7a5685e1439"},"source":["print(df1.mean()) \n","print(df1.mean(axis=1)) # Row means\n","setosa = df1[df1['class'] == 'Iris-setosa']\n","print(setosa.mean()) # Attribute (column) means for Iris setosa"],"execution_count":null,"outputs":[{"output_type":"stream","text":["sepal length 5.843333\n","sepal width 3.054000\n","petal length 3.758667\n","petal width 1.198667\n","dtype: float64\n","0 2.550\n","1 2.375\n","2 2.350\n","3 2.350\n","4 2.550\n"," ... \n","145 4.300\n","146 3.925\n","147 4.175\n","148 4.325\n","149 3.950\n","Length: 150, dtype: float64\n","sepal length 5.006\n","sepal width 3.418\n","petal length 1.464\n","petal width 0.244\n","dtype: float64\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"V6I64ALoRPJ-"},"source":["As we saw above, the syntax is slightly different from NumPy when we want to compute, e.g., the means of some columns. Here, mean is a function (method) of the DataFrame object and it is therefore called like 'df1.mean()', whereas in NumPy we used 'np.mean(X, axis=0)'. Also note that with Pandas we did not get the mean of the entire array when we did not specify an axis.\n","\n","We can convert a Pandas DataFrame to a NumPy array. The recommended way to do that depends on Pandas version. In older versions of Pandas one can use df.values, and the newer versions also support a method df.to_numpy()"]},{"cell_type":"code","metadata":{"id":"Kmdo8CtIRPJ-","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604424795246,"user_tz":-120,"elapsed":1246,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"cb53b9c0-c75a-4885-a3ca-4dbc345836eb"},"source":["np.mean(df1.iloc[:, 0:4].values)"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["3.4636666666666662"]},"metadata":{"tags":[]},"execution_count":29}]},{"cell_type":"markdown","metadata":{"id":"KRDpLtNlRPKC"},"source":["Here we converted a part of the DataFrame into a NumPy array and then computed the mean of all values.\n","\n","There are many ways to index a DataFrame. One can use df[<column name>], df[Boolean_vector], df.loc[...] and df.iloc[...]. The first two can be a bit confusing at first. This is because the first one selects columns and the second one selects rows, despite the calls looking very similar to each other. Also, in NumPy we can select several rows of an array by a vector of row indices but in Pandas df[vector_of_labels] selects columns (unlike df[Boolean_vector] which selects rows).\n","\n","To select rows or colums by numeric indices instead of row/column labels, one can use df.iloc[rows, columns]. Above, we selected all rows (indices ':' on the first axis) and four first columns (indices '0:4' on the second axis). When using iloc, the labels of the rows and columns are ignored, even if they happen to be numbers.\n","\n","The final way, df.loc[rows, columns] works similarly to iloc but selection is done by row and column labels. One difference is that, for example, df.loc[:, start:end] contains also the column df[end] whereas it is omitted when using iloc. Here are some examples:"]},{"cell_type":"code","metadata":{"scrolled":true,"id":"ficfnRWURPKC","colab":{"base_uri":"https://localhost:8080/","height":229},"executionInfo":{"status":"error","timestamp":1605029754858,"user_tz":-120,"elapsed":982,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"1fd11a7e-2c12-42f1-c5f2-688326d682ab"},"source":["#print(df1['class']) # Select a column by name\n","#print(df1.iloc[:5, 4]) # Select 5 rows and one column by index\n","print(df1.iloc[:5, 0:4]) # Select 5 rows and 4 columns by index\n","print(df1.loc[:5, 'sepal length':'class']) # Select 5 rows and columns between 'sepal length' and 'class' -\n"," # including the column 'class'. Here that selects all columns."],"execution_count":null,"outputs":[{"output_type":"error","ename":"NameError","evalue":"ignored","traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)","\u001b[0;32m<ipython-input-1-bedb714ad762>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m#print(df1['class']) # Select a column by name\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;31m#print(df1.iloc[:5, 4]) # Select 5 rows and one column by index\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# Select 5 rows and 4 columns by index\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'sepal length'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m'class'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m# Select 5 rows and columns between 'sepal length' and 'class' -\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;31m# including the column 'class'. Here that selects all columns.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNameError\u001b[0m: name 'df1' is not defined"]}]},{"cell_type":"markdown","metadata":{"id":"k8th7YKeRPKE"},"source":["Pandas can also compute correlations and draw scatter plots and histograms for us."]},{"cell_type":"code","metadata":{"id":"m3-lA5QlRPKF","colab":{"base_uri":"https://localhost:8080/","height":166},"executionInfo":{"status":"ok","timestamp":1604425399546,"user_tz":-120,"elapsed":827,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"0b0e6ade-87c5-4ad9-d2a4-e66787a425eb"},"source":["df1.corr() # Correlations between columns"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>sepal length</th>\n"," <th>sepal width</th>\n"," <th>petal length</th>\n"," <th>petal width</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>sepal length</th>\n"," <td>1.000000</td>\n"," <td>-0.109369</td>\n"," <td>0.871754</td>\n"," <td>0.817954</td>\n"," </tr>\n"," <tr>\n"," <th>sepal width</th>\n"," <td>-0.109369</td>\n"," <td>1.000000</td>\n"," <td>-0.420516</td>\n"," <td>-0.356544</td>\n"," </tr>\n"," <tr>\n"," <th>petal length</th>\n"," <td>0.871754</td>\n"," <td>-0.420516</td>\n"," <td>1.000000</td>\n"," <td>0.962757</td>\n"," </tr>\n"," <tr>\n"," <th>petal width</th>\n"," <td>0.817954</td>\n"," <td>-0.356544</td>\n"," <td>0.962757</td>\n"," <td>1.000000</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>"],"text/plain":[" sepal length sepal width petal length petal width\n","sepal length 1.000000 -0.109369 0.871754 0.817954\n","sepal width -0.109369 1.000000 -0.420516 -0.356544\n","petal length 0.871754 -0.420516 1.000000 0.962757\n","petal width 0.817954 -0.356544 0.962757 1.000000"]},"metadata":{"tags":[]},"execution_count":35}]},{"cell_type":"code","metadata":{"id":"626JaV73RPKJ","colab":{"base_uri":"https://localhost:8080/","height":572},"executionInfo":{"status":"ok","timestamp":1604425419575,"user_tz":-120,"elapsed":2586,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"fe950548-805c-49a1-fac9-0e90ea4cf32e"},"source":["%matplotlib inline\n","# Without the above line the figure may not be shown. This 'magic incantation' is only needed once in a Jupyter\n","# Notebook document, before the first time we draw a figure.\n","\n","pd.plotting.scatter_matrix(df1)"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a6e43c8>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a6be6a0>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a66f908>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a61cb70>],\n"," [<matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a5cedd8>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a58c080>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a5ba2e8>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a56a518>],\n"," [<matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a56a588>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a4cea20>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a501c88>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a4b5ef0>],\n"," [<matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a476198>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a427400>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a3dc668>,\n"," <matplotlib.axes._subplots.AxesSubplot object at 0x7fac4a38e8d0>]],\n"," dtype=object)"]},"metadata":{"tags":[]},"execution_count":36},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 16 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"hv5AdpOsRPKL"},"source":["Pandas offers many functionalities not covered in this tutorial. For instance, one can make queries involving multiple tables, join tables etc. For more details, see [comparison with SQL](https://pandas.pydata.org/pandas-docs/stable/getting_started/comparison/comparison_with_sql.html). However, we won't need advanced functionality during this course. So, let's proceed to the next topic."]},{"cell_type":"markdown","metadata":{"id":"pZZGwSzuRPKM"},"source":["## Matplotlib\n","When we get a new data set, we usually want to make different kinds of plots to see what is in the data. There are other use cases for plots, too, such as reporting our results in a visual way. Matplotlib is one of many possible tools for visualization. Basic usage of Matplotlib is quite easy but more advanced plotting can be a bit cumbersome. In this course our needs are relatively simple.\n","\n","Let's start by plotting a function of one variable $y=f(x)$."]},{"cell_type":"code","metadata":{"id":"O_52yLjLRPKN","colab":{"base_uri":"https://localhost:8080/","height":282},"executionInfo":{"status":"ok","timestamp":1604425633938,"user_tz":-120,"elapsed":1000,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"32270817-c9df-4a74-cc74-48ea24f816ef"},"source":["import matplotlib.pyplot as plt\n","\n","x = np.linspace(0, 2*np.pi, 50)\n","y = np.sin(x)\n","\n","plt.plot(x, y, 'o', color='blue') # Draw points without connecting them by line segments\n","plt.plot(x, y, color='black') # Connect consecutive points with line segments"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[<matplotlib.lines.Line2D at 0x7fac4a25dc18>]"]},"metadata":{"tags":[]},"execution_count":37},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"quHImpYuRPKQ"},"source":["It is possible to make a plot consisting of several subplots."]},{"cell_type":"code","metadata":{"id":"8-_fyY24RPKR","colab":{"base_uri":"https://localhost:8080/","height":282},"executionInfo":{"status":"ok","timestamp":1604425862014,"user_tz":-120,"elapsed":1309,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"cb48ce66-61ec-475a-cb8c-7ee4d67a1d77"},"source":["plt.subplot(2, 2, 1)\n","plt.hist(df1['sepal length']) # Histogram\n","\n","plt.subplot(2, 2, 2)\n","plt.scatter(df1['sepal length'], df1['petal length']) # Scatter plot\n","\n","# Next, we will try plotting a Pandas DataFrame. First we put some data to the DataFrame\n","plt.subplot(2, 2, 3)\n","x2 = np.linspace(10, 20, 500)\n","y2 = np.sin(x2)\n","y3 = np.cos(x2)\n","y4 = y2/x2\n","df = pd.DataFrame(columns=['sin(x)', 'cos(x)', 'sin(x)/x'])\n","df['sin(x)'] = y2\n","df['cos(x)'] = y3\n","df['sin(x)/x'] = y4\n","df = df.set_index(x2)\n","plt.plot(df) # Plots all columns of the data frame\n","plt.legend(df.columns) # Let's add a legend - although it won't look nice here\n","\n","# If we plot a sequence of y values, the x values will be 0, 1, ... in the plot. Here,\n","# that gives a rather misleading impression of the function we are plotting.\n","plt.subplot(2, 2, 4)\n","plt.plot(df['sin(x)'].values)"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[<matplotlib.lines.Line2D at 0x7fac48b2b518>]"]},"metadata":{"tags":[]},"execution_count":39},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 4 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"J9OLNnjKRPKU"},"source":["We can add a title and axis labels to a plot:"]},{"cell_type":"code","metadata":{"id":"Xztd6yiQRPKV","colab":{"base_uri":"https://localhost:8080/","height":312},"executionInfo":{"status":"ok","timestamp":1604425949475,"user_tz":-120,"elapsed":1451,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"0daa90f6-c309-4f3e-df71-112894fb9359"},"source":["plt.scatter(df1['sepal length'], df1['petal length'])\n","plt.title('Sepal and petal length')\n","plt.xlabel('Sepal length (cm)')\n","plt.ylabel('Petal length (cm)')"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["Text(0, 0.5, 'Petal length (cm)')"]},"metadata":{"tags":[]},"execution_count":40},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"7lCMdVu6RPKZ"},"source":["If you need to know Matplotlib in greater detail, you might check, for example, [Pyplot tutorial](https://matplotlib.org/3.1.1/tutorials/introductory/pyplot.html#sphx-glr-tutorials-introductory-pyplot-py).\n","\n","But now, it is time for some exercises!\n","\n","(Optional) If you are using Google Colab, start again with uploading the required files 'exercise_data.csv'."]},{"cell_type":"markdown","metadata":{"id":"rDSIdFtWYpFc"},"source":["## Exercises\n","\n","(Optional) If you are using Google Colab, start again with uploading the required files 'exercise_data.csv'."]},{"cell_type":"code","metadata":{"id":"uNTBQ4NHYYh_","colab":{"resources":{"http://localhost:8080/nbextensions/google.colab/files.js":{"data":"Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7CgpmdW5jdGlvbiBfdXBsb2FkRmlsZXMoaW5wdXRJZCwgb3V0cHV0SWQpIHsKICBjb25zdCBzdGVwcyA9IHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCk7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICAvLyBDYWNoZSBzdGVwcyBvbiB0aGUgb3V0cHV0RWxlbWVudCB0byBtYWtlIGl0IGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgY2FsbAogIC8vIHRvIHVwbG9hZEZpbGVzQ29udGludWUgZnJvbSBQeXRob24uCiAgb3V0cHV0RWxlbWVudC5zdGVwcyA9IHN0ZXBzOwoKICByZXR1cm4gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpOwp9CgovLyBUaGlzIGlzIHJvdWdobHkgYW4gYXN5bmMgZ2VuZXJhdG9yIChub3Qgc3VwcG9ydGVkIGluIHRoZSBicm93c2VyIHlldCksCi8vIHdoZXJlIHRoZXJlIGFyZSBtdWx0aXBsZSBhc3luY2hyb25vdXMgc3RlcHMgYW5kIHRoZSBQeXRob24gc2lkZSBpcyBnb2luZwovLyB0byBwb2xsIGZvciBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcC4KLy8gVGhpcyB1c2VzIGEgUHJvbWlzZSB0byBibG9jayB0aGUgcHl0aG9uIHNpZGUgb24gY29tcGxldGlvbiBvZiBlYWNoIHN0ZXAsCi8vIHRoZW4gcGFzc2VzIHRoZSByZXN1bHQgb2YgdGhlIHByZXZpb3VzIHN0ZXAgYXMgdGhlIGlucHV0IHRvIHRoZSBuZXh0IHN0ZXAuCmZ1bmN0aW9uIF91cGxvYWRGaWxlc0NvbnRpbnVlKG91dHB1dElkKSB7CiAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG91dHB1dElkKTsKICBjb25zdCBzdGVwcyA9IG91dHB1dEVsZW1lbnQuc3RlcHM7CgogIGNvbnN0IG5leHQgPSBzdGVwcy5uZXh0KG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSk7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXh0LnZhbHVlLnByb21pc2UpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAvLyBDYWNoZSB0aGUgbGFzdCBwcm9taXNlIHZhbHVlIHRvIG1ha2UgaXQgYXZhaWxhYmxlIHRvIHRoZSBuZXh0CiAgICAvLyBzdGVwIG9mIHRoZSBnZW5lcmF0b3IuCiAgICBvdXRwdXRFbGVtZW50Lmxhc3RQcm9taXNlVmFsdWUgPSB2YWx1ZTsKICAgIHJldHVybiBuZXh0LnZhbHVlLnJlc3BvbnNlOwogIH0pOwp9CgovKioKICogR2VuZXJhdG9yIGZ1bmN0aW9uIHdoaWNoIGlzIGNhbGxlZCBiZXR3ZWVuIGVhY2ggYXN5bmMgc3RlcCBvZiB0aGUgdXBsb2FkCiAqIHByb2Nlc3MuCiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIGlucHV0IGZpbGUgcGlja2VyIGVsZW1lbnQuCiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRJZCBFbGVtZW50IElEIG9mIHRoZSBvdXRwdXQgZGlzcGxheS4KICogQHJldHVybiB7IUl0ZXJhYmxlPCFPYmplY3Q+fSBJdGVyYWJsZSBvZiBuZXh0IHN0ZXBzLgogKi8KZnVuY3Rpb24qIHVwbG9hZEZpbGVzU3RlcChpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IGlucHV0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlucHV0SWQpOwogIGlucHV0RWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwoKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIG91dHB1dEVsZW1lbnQuaW5uZXJIVE1MID0gJyc7CgogIGNvbnN0IHBpY2tlZFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB7CiAgICAgIHJlc29sdmUoZS50YXJnZXQuZmlsZXMpOwogICAgfSk7CiAgfSk7CgogIGNvbnN0IGNhbmNlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogIGlucHV0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKGNhbmNlbCk7CiAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCB1cGxvYWQnOwogIGNvbnN0IGNhbmNlbFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY2FuY2VsLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9OwogIH0pOwoKICAvLyBXYWl0IGZvciB0aGUgdXNlciB0byBwaWNrIHRoZSBmaWxlcy4KICBjb25zdCBmaWxlcyA9IHlpZWxkIHsKICAgIHByb21pc2U6IFByb21pc2UucmFjZShbcGlja2VkUHJvbWlzZSwgY2FuY2VsUHJvbWlzZV0pLAogICAgcmVzcG9uc2U6IHsKICAgICAgYWN0aW9uOiAnc3RhcnRpbmcnLAogICAgfQogIH07CgogIGNhbmNlbC5yZW1vdmUoKTsKCiAgLy8gRGlzYWJsZSB0aGUgaW5wdXQgZWxlbWVudCBzaW5jZSBmdXJ0aGVyIHBpY2tzIGFyZSBub3QgYWxsb3dlZC4KICBpbnB1dEVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwoKICBpZiAoIWZpbGVzKSB7CiAgICByZXR1cm4gewogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgICAgfQogICAgfTsKICB9CgogIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOwogICAgbGkuYXBwZW5kKHNwYW4oZmlsZS5uYW1lLCB7Zm9udFdlaWdodDogJ2JvbGQnfSkpOwogICAgbGkuYXBwZW5kKHNwYW4oCiAgICAgICAgYCgke2ZpbGUudHlwZSB8fCAnbi9hJ30pIC0gJHtmaWxlLnNpemV9IGJ5dGVzLCBgICsKICAgICAgICBgbGFzdCBtb2RpZmllZDogJHsKICAgICAgICAgICAgZmlsZS5sYXN0TW9kaWZpZWREYXRlID8gZmlsZS5sYXN0TW9kaWZpZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygpIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24vYSd9IC0gYCkpOwogICAgY29uc3QgcGVyY2VudCA9IHNwYW4oJzAlIGRvbmUnKTsKICAgIGxpLmFwcGVuZENoaWxkKHBlcmNlbnQpOwoKICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kQ2hpbGQobGkpOwoKICAgIGNvbnN0IGZpbGVEYXRhUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7CiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZSkgPT4gewogICAgICAgIHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTsKICAgICAgfTsKICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGZpbGUpOwogICAgfSk7CiAgICAvLyBXYWl0IGZvciB0aGUgZGF0YSB0byBiZSByZWFkeS4KICAgIGxldCBmaWxlRGF0YSA9IHlpZWxkIHsKICAgICAgcHJvbWlzZTogZmlsZURhdGFQcm9taXNlLAogICAgICByZXNwb25zZTogewogICAgICAgIGFjdGlvbjogJ2NvbnRpbnVlJywKICAgICAgfQogICAgfTsKCiAgICAvLyBVc2UgYSBjaHVua2VkIHNlbmRpbmcgdG8gYXZvaWQgbWVzc2FnZSBzaXplIGxpbWl0cy4gU2VlIGIvNjIxMTU2NjAuCiAgICBsZXQgcG9zaXRpb24gPSAwOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgZmlsZURhdGEuYnl0ZUxlbmd0aCkgewogICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihmaWxlRGF0YS5ieXRlTGVuZ3RoIC0gcG9zaXRpb24sIE1BWF9QQVlMT0FEX1NJWkUpOwogICAgICBjb25zdCBjaHVuayA9IG5ldyBVaW50OEFycmF5KGZpbGVEYXRhLCBwb3NpdGlvbiwgbGVuZ3RoKTsKICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoOwoKICAgICAgY29uc3QgYmFzZTY0ID0gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7CiAgICAgIHlpZWxkIHsKICAgICAgICByZXNwb25zZTogewogICAgICAgICAgYWN0aW9uOiAnYXBwZW5kJywKICAgICAgICAgIGZpbGU6IGZpbGUubmFtZSwKICAgICAgICAgIGRhdGE6IGJhc2U2NCwKICAgICAgICB9LAogICAgICB9OwogICAgICBwZXJjZW50LnRleHRDb250ZW50ID0KICAgICAgICAgIGAke01hdGgucm91bmQoKHBvc2l0aW9uIC8gZmlsZURhdGEuYnl0ZUxlbmd0aCkgKiAxMDApfSUgZG9uZWA7CiAgICB9CiAgfQoKICAvLyBBbGwgZG9uZS4KICB5aWVsZCB7CiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICB9CiAgfTsKfQoKc2NvcGUuZ29vZ2xlID0gc2NvcGUuZ29vZ2xlIHx8IHt9OwpzY29wZS5nb29nbGUuY29sYWIgPSBzY29wZS5nb29nbGUuY29sYWIgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYi5fZmlsZXMgPSB7CiAgX3VwbG9hZEZpbGVzLAogIF91cGxvYWRGaWxlc0NvbnRpbnVlLAp9Owp9KShzZWxmKTsK","ok":true,"headers":[["content-type","application/javascript"]],"status":200,"status_text":""}},"base_uri":"https://localhost:8080/","height":73},"executionInfo":{"status":"ok","timestamp":1604426069139,"user_tz":-120,"elapsed":46732,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"0cbc2659-f5e3-49f8-9229-34b530788a8e"},"source":["from google.colab import files\n","uploaded = files.upload()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/html":["\n"," <input type=\"file\" id=\"files-367b7cb4-c679-4b8e-af44-2f1db3264a26\" name=\"files[]\" multiple disabled\n"," style=\"border:none\" />\n"," <output id=\"result-367b7cb4-c679-4b8e-af44-2f1db3264a26\">\n"," Upload widget is only available when the cell has been executed in the\n"," current browser session. Please rerun this cell to enable.\n"," </output>\n"," <script src=\"/nbextensions/google.colab/files.js\"></script> "],"text/plain":["<IPython.core.display.HTML object>"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["Saving exercise_data.csv to exercise_data.csv\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"vNrsmeEZRPKa"},"source":["Use the included data matrix 'exercise_data.csv'. Solve the following exercises.\n","\n","1. Load the data into a Pandas data frame.\n","1. Find all objects of class 1 whose height is over 25 units. Print all of their attributes. *Hint*: you can combine the results of two comparisons using the '&' operator (class is 1 *and* height is over 25). Parentheses may be needed.\n","1. Compute the mean of each attribute for the whole data.\n","1. Make a plot of weights (y axis) vs. heights (x axis).\n","1. Make a plot of weights (y axis) vs. \"size\" (=$height \\cdot width^2$, x axis).\n","1. Like 4-5 but limited to objects of class 1.\n","1. Do you see anything interesting in the plots?"]},{"cell_type":"code","metadata":{"id":"AHWRFqW9RPKb","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604426284979,"user_tz":-120,"elapsed":1235,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"092a4455-32c4-427d-9270-030216ce9bb5"},"source":["# 1\n","df = pd.read_csv('exercise_data.csv')\n","print(df)"],"execution_count":null,"outputs":[{"output_type":"stream","text":[" Unnamed: 0 height width weight class\n","0 0 18.022890 5.182596 50.527110 1\n","1 1 16.194651 4.383156 28.829918 1\n","2 2 18.150373 4.556691 38.565482 1\n","3 3 13.846924 3.798662 16.413877 1\n","4 4 27.364656 7.777790 166.997659 1\n",".. ... ... ... ... ...\n","124 124 14.394126 1.623162 20.133995 3\n","125 125 14.715369 1.571027 18.098519 3\n","126 126 14.995934 1.613972 20.634388 3\n","127 127 14.345058 1.604480 18.507403 3\n","128 128 14.879172 1.675843 20.413188 3\n","\n","[129 rows x 5 columns]\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"t3BzyT_0RPKh","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604426544852,"user_tz":-120,"elapsed":1304,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"c1c67970-c7c0-4c51-fc7d-6f9ca4ffa5ff"},"source":["# 2\n","print(df[(df['class'] == 1) & (df['height'] > 25)])"],"execution_count":null,"outputs":[{"output_type":"stream","text":[" Unnamed: 0 height width weight class\n","4 4 27.364656 7.777790 166.997659 1\n","16 16 25.640493 6.852879 122.388594 1\n","21 21 25.343498 7.226682 135.671038 1\n","33 33 26.893780 7.624959 164.284870 1\n","44 44 32.085549 9.016029 263.542786 1\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"ZfD-wN4IRPKn","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1604426615351,"user_tz":-120,"elapsed":1229,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"e863fbf7-a95b-4079-e9d2-a1838a43505a"},"source":["# 3\n","print(df.mean())"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Unnamed: 0 64.000000\n","height 31.938985\n","width 15.431009\n","weight 735.292601\n","class 1.860465\n","dtype: float64\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"XT1_G5O1RPKq","colab":{"base_uri":"https://localhost:8080/","height":282},"executionInfo":{"status":"ok","timestamp":1604427079116,"user_tz":-120,"elapsed":1561,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"58dd0976-d6a3-4558-8fdb-aa44f66c5ebe"},"source":["# 4\n","plt.plot(df['height'],df['weight'],'o')"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[<matplotlib.lines.Line2D at 0x7fac47006080>]"]},"metadata":{"tags":[]},"execution_count":63},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"e4AuqUARRPKt","colab":{"base_uri":"https://localhost:8080/","height":282},"executionInfo":{"status":"ok","timestamp":1604427082895,"user_tz":-120,"elapsed":1007,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"2311a613-6d8d-48f3-b0ef-8c247cbcbdeb"},"source":["# 5\n","plt.plot(df['height']*df['width']**2,df['weight'],'o')"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/plain":["[<matplotlib.lines.Line2D at 0x7fac46fdaf60>]"]},"metadata":{"tags":[]},"execution_count":64},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"JBroLJuuRPKw","colab":{"base_uri":"https://localhost:8080/","height":513},"executionInfo":{"status":"ok","timestamp":1604427992903,"user_tz":-120,"elapsed":4156,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"914e6886-d714-4b3c-9deb-3c62e633ba11"},"source":["# 6\n","df_class1 = df[df['class'] == 1]\n","plt.plot(df_class1['height'],df_class1['weight'],'o')\n","plt.show()\n","\n","df_class1 = df[df['class'] == 1]\n","plt.plot(df_class1['height']*df_class1['width']**2,df_class1['weight'],'o')\n","plt.show()"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"code","metadata":{"id":"XoDpWJ_gRPK1","colab":{"base_uri":"https://localhost:8080/","height":52},"executionInfo":{"status":"ok","timestamp":1604428174907,"user_tz":-120,"elapsed":2085,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"55ebb101-df86-4746-8435-3d83a065ecaa"},"source":["# 7\n","\"\"\"\n","Weight and height definetly have positive correlation.\n","Weight and \"size\" have definetly linear correlation.\n","The class 1 is definetly smaller in height and weight and size than other classes.\n","\"\"\""],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"},"text/plain":["'\\nWeight and height definetly have positive correlation.\\nWeight and \"size\" have definetly linear correlation.\\nThe class 1 is definetly smaller in height and weight and size than other classes.\\n'"]},"metadata":{"tags":[]},"execution_count":81}]},{"cell_type":"markdown","metadata":{"id":"rbgBuoIrkbBM"},"source":["Finally, if you want to export your Notebook as PDF you can use the following script. On the first run it asks for authentication for using Google Drive. After that you can run it like any other cell, and it will (eventually) produce a PDF and prompt you to download it."]},{"cell_type":"code","metadata":{"id":"T55jRTBRje6N","colab":{"base_uri":"https://localhost:8080/","height":1000},"executionInfo":{"status":"ok","timestamp":1604428297266,"user_tz":-120,"elapsed":102182,"user":{"displayName":"Elias Ervelä","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GhcVQbqAobpSX3NE6w5d6aZPU_VzlnsvBC9GkyMtw=s64","userId":"11858975235946053692"}},"outputId":"b9514aa8-de76-4553-be82-f2ae92b24416"},"source":["!wget -nc https://raw.githubusercontent.com/brpy/colab-pdf/master/colab_pdf.py\n","from colab_pdf import colab_pdf\n","colab_pdf('DAKD2020Exercise1.ipynb')"],"execution_count":null,"outputs":[{"output_type":"stream","text":["--2020-11-03 18:29:57-- https://raw.githubusercontent.com/brpy/colab-pdf/master/colab_pdf.py\n","Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...\n","Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... connected.\n","HTTP request sent, awaiting response... 200 OK\n","Length: 1301 (1.3K) [text/plain]\n","Saving to: ‘colab_pdf.py’\n","\n","colab_pdf.py 100%[===================>] 1.27K --.-KB/s in 0s \n","\n","2020-11-03 18:29:57 (63.8 MB/s) - ‘colab_pdf.py’ saved [1301/1301]\n","\n","Mounted at /content/drive/\n","Ign:1 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease\n","Get:2 https://cloud.r-project.org/bin/linux/ubuntu bionic-cran40/ InRelease [3,626 B]\n","Ign:3 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 InRelease\n","Get:4 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 Release [697 B]\n","Hit:5 https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64 Release\n","Get:6 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 Release.gpg [836 B]\n","Get:7 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]\n","Get:8 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic InRelease [15.9 kB]\n","Hit:9 http://archive.ubuntu.com/ubuntu bionic InRelease\n","Get:10 https://cloud.r-project.org/bin/linux/ubuntu bionic-cran40/ Packages [40.1 kB]\n","Get:11 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]\n","Get:13 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu bionic InRelease [21.3 kB]\n","Ign:14 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 Packages\n","Get:14 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 Packages [405 kB]\n","Get:15 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]\n","Get:16 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic/main Sources [1,688 kB]\n","Get:17 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1,353 kB]\n","Get:18 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [2,118 kB]\n","Get:19 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [1,749 kB]\n","Get:20 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [2,167 kB]\n","Get:21 http://ppa.launchpad.net/c2d4u.team/c2d4u4.0+/ubuntu bionic/main amd64 Packages [864 kB]\n","Get:22 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu bionic/main amd64 Packages [48.9 kB]\n","Fetched 10.7 MB in 4s (2,520 kB/s)\n","Reading package lists... Done\n","Building dependency tree \n","Reading state information... Done\n","33 packages can be upgraded. Run 'apt list --upgradable' to see them.\n","Reading package lists... Done\n","Building dependency tree \n","Reading state information... Done\n","The following additional packages will be installed:\n"," fonts-droid-fallback fonts-lato fonts-lmodern fonts-noto-mono fonts-texgyre\n"," javascript-common libcupsfilters1 libcupsimage2 libgs9 libgs9-common\n"," libijs-0.35 libjbig2dec0 libjs-jquery libkpathsea6 libpotrace0 libptexenc1\n"," libruby2.5 libsynctex1 libtexlua52 libtexluajit2 libzzip-0-13 lmodern\n"," poppler-data preview-latex-style rake ruby ruby-did-you-mean ruby-minitest\n"," ruby-net-telnet ruby-power-assert ruby-test-unit ruby2.5\n"," rubygems-integration t1utils tex-common tex-gyre texlive-base\n"," texlive-binaries texlive-latex-base texlive-latex-extra\n"," texlive-latex-recommended texlive-pictures texlive-plain-generic tipa\n","Suggested packages:\n"," fonts-noto apache2 | lighttpd | httpd poppler-utils ghostscript\n"," fonts-japanese-mincho | fonts-ipafont-mincho fonts-japanese-gothic\n"," | fonts-ipafont-gothic fonts-arphic-ukai fonts-arphic-uming fonts-nanum ri\n"," ruby-dev bundler debhelper gv | postscript-viewer perl-tk xpdf-reader\n"," | pdf-viewer texlive-fonts-recommended-doc texlive-latex-base-doc\n"," python-pygments icc-profiles libfile-which-perl\n"," libspreadsheet-parseexcel-perl texlive-latex-extra-doc\n"," texlive-latex-recommended-doc texlive-pstricks dot2tex prerex ruby-tcltk\n"," | libtcltk-ruby texlive-pictures-doc vprerex\n","The following NEW packages will be installed:\n"," fonts-droid-fallback fonts-lato fonts-lmodern fonts-noto-mono fonts-texgyre\n"," javascript-common libcupsfilters1 libcupsimage2 libgs9 libgs9-common\n"," libijs-0.35 libjbig2dec0 libjs-jquery libkpathsea6 libpotrace0 libptexenc1\n"," libruby2.5 libsynctex1 libtexlua52 libtexluajit2 libzzip-0-13 lmodern\n"," poppler-data preview-latex-style rake ruby ruby-did-you-mean ruby-minitest\n"," ruby-net-telnet ruby-power-assert ruby-test-unit ruby2.5\n"," rubygems-integration t1utils tex-common tex-gyre texlive-base\n"," texlive-binaries texlive-fonts-recommended texlive-generic-recommended\n"," texlive-latex-base texlive-latex-extra texlive-latex-recommended\n"," texlive-pictures texlive-plain-generic texlive-xetex tipa\n","0 upgraded, 47 newly installed, 0 to remove and 33 not upgraded.\n","Need to get 146 MB of archives.\n","After this operation, 460 MB of additional disk space will be used.\n","Get:1 http://archive.ubuntu.com/ubuntu bionic/main amd64 fonts-droid-fallback all 1:6.0.1r16-1.1 [1,805 kB]\n","Get:2 http://archive.ubuntu.com/ubuntu bionic/main amd64 fonts-lato all 2.0-2 [2,698 kB]\n","Get:3 http://archive.ubuntu.com/ubuntu bionic/main amd64 poppler-data all 0.4.8-2 [1,479 kB]\n","Get:4 http://archive.ubuntu.com/ubuntu bionic/main amd64 tex-common all 6.09 [33.0 kB]\n","Get:5 http://archive.ubuntu.com/ubuntu bionic/main amd64 fonts-lmodern all 2.004.5-3 [4,551 kB]\n","Get:6 http://archive.ubuntu.com/ubuntu bionic/main amd64 fonts-noto-mono all 20171026-2 [75.5 kB]\n","Get:7 http://archive.ubuntu.com/ubuntu bionic/universe amd64 fonts-texgyre all 20160520-1 [8,761 kB]\n","Get:8 http://archive.ubuntu.com/ubuntu bionic/main amd64 javascript-common all 11 [6,066 B]\n","Get:9 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libcupsfilters1 amd64 1.20.2-0ubuntu3.1 [108 kB]\n","Get:10 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libcupsimage2 amd64 2.2.7-1ubuntu2.8 [18.6 kB]\n","Get:11 http://archive.ubuntu.com/ubuntu bionic/main amd64 libijs-0.35 amd64 0.35-13 [15.5 kB]\n","Get:12 http://archive.ubuntu.com/ubuntu bionic/main amd64 libjbig2dec0 amd64 0.13-6 [55.9 kB]\n","Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libgs9-common all 9.26~dfsg+0-0ubuntu0.18.04.13 [5,092 kB]\n","Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libgs9 amd64 9.26~dfsg+0-0ubuntu0.18.04.13 [2,263 kB]\n","Get:15 http://archive.ubuntu.com/ubuntu bionic/main amd64 libjs-jquery all 3.2.1-1 [152 kB]\n","Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libkpathsea6 amd64 2017.20170613.44572-8ubuntu0.1 [54.9 kB]\n","Get:17 http://archive.ubuntu.com/ubuntu bionic/main amd64 libpotrace0 amd64 1.14-2 [17.4 kB]\n","Get:18 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libptexenc1 amd64 2017.20170613.44572-8ubuntu0.1 [34.5 kB]\n","Get:19 http://archive.ubuntu.com/ubuntu bionic/main amd64 rubygems-integration all 1.11 [4,994 B]\n","Get:20 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 ruby2.5 amd64 2.5.1-1ubuntu1.6 [48.6 kB]\n","Get:21 http://archive.ubuntu.com/ubuntu bionic/main amd64 ruby amd64 1:2.5.1 [5,712 B]\n","Get:22 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 rake all 12.3.1-1ubuntu0.1 [44.9 kB]\n","Get:23 http://archive.ubuntu.com/ubuntu bionic/main amd64 ruby-did-you-mean all 1.2.0-2 [9,700 B]\n","Get:24 http://archive.ubuntu.com/ubuntu bionic/main amd64 ruby-minitest all 5.10.3-1 [38.6 kB]\n","Get:25 http://archive.ubuntu.com/ubuntu bionic/main amd64 ruby-net-telnet all 0.1.1-2 [12.6 kB]\n","Get:26 http://archive.ubuntu.com/ubuntu bionic/main amd64 ruby-power-assert all 0.3.0-1 [7,952 B]\n","Get:27 http://archive.ubuntu.com/ubuntu bionic/main amd64 ruby-test-unit all 3.2.5-1 [61.1 kB]\n","Get:28 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libruby2.5 amd64 2.5.1-1ubuntu1.6 [3,069 kB]\n","Get:29 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libsynctex1 amd64 2017.20170613.44572-8ubuntu0.1 [41.4 kB]\n","Get:30 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libtexlua52 amd64 2017.20170613.44572-8ubuntu0.1 [91.2 kB]\n","Get:31 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libtexluajit2 amd64 2017.20170613.44572-8ubuntu0.1 [230 kB]\n","Get:32 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libzzip-0-13 amd64 0.13.62-3.1ubuntu0.18.04.1 [26.0 kB]\n","Get:33 http://archive.ubuntu.com/ubuntu bionic/main amd64 lmodern all 2.004.5-3 [9,631 kB]\n","Get:34 http://archive.ubuntu.com/ubuntu bionic/main amd64 preview-latex-style all 11.91-1ubuntu1 [185 kB]\n","Get:35 http://archive.ubuntu.com/ubuntu bionic/main amd64 t1utils amd64 1.41-2 [56.0 kB]\n","Get:36 http://archive.ubuntu.com/ubuntu bionic/universe amd64 tex-gyre all 20160520-1 [4,998 kB]\n","Get:37 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 texlive-binaries amd64 2017.20170613.44572-8ubuntu0.1 [8,179 kB]\n","Get:38 http://archive.ubuntu.com/ubuntu bionic/main amd64 texlive-base all 2017.20180305-1 [18.7 MB]\n","Get:39 http://archive.ubuntu.com/ubuntu bionic/universe amd64 texlive-fonts-recommended all 2017.20180305-1 [5,262 kB]\n","Get:40 http://archive.ubuntu.com/ubuntu bionic/universe amd64 texlive-plain-generic all 2017.20180305-2 [23.6 MB]\n","Get:41 http://archive.ubuntu.com/ubuntu bionic/universe amd64 texlive-generic-recommended all 2017.20180305-1 [15.9 kB]\n","Get:42 http://archive.ubuntu.com/ubuntu bionic/main amd64 texlive-latex-base all 2017.20180305-1 [951 kB]\n","Get:43 http://archive.ubuntu.com/ubuntu bionic/main amd64 texlive-latex-recommended all 2017.20180305-1 [14.9 MB]\n","Get:44 http://archive.ubuntu.com/ubuntu bionic/universe amd64 texlive-pictures all 2017.20180305-1 [4,026 kB]\n","Get:45 http://archive.ubuntu.com/ubuntu bionic/universe amd64 texlive-latex-extra all 2017.20180305-2 [10.6 MB]\n","Get:46 http://archive.ubuntu.com/ubuntu bionic/universe amd64 tipa all 2:1.3-20 [2,978 kB]\n","Get:47 http://archive.ubuntu.com/ubuntu bionic/universe amd64 texlive-xetex all 2017.20180305-1 [10.7 MB]\n","Fetched 146 MB in 8s (17.6 MB/s)\n","Extracting templates from packages: 100%\n","Preconfiguring packages ...\n","Selecting previously unselected package fonts-droid-fallback.\n","(Reading database ... 144628 files and directories currently installed.)\n","Preparing to unpack .../00-fonts-droid-fallback_1%3a6.0.1r16-1.1_all.deb ...\n","Unpacking fonts-droid-fallback (1:6.0.1r16-1.1) ...\n","Selecting previously unselected package fonts-lato.\n","Preparing to unpack .../01-fonts-lato_2.0-2_all.deb ...\n","Unpacking fonts-lato (2.0-2) ...\n","Selecting previously unselected package poppler-data.\n","Preparing to unpack .../02-poppler-data_0.4.8-2_all.deb ...\n","Unpacking poppler-data (0.4.8-2) ...\n","Selecting previously unselected package tex-common.\n","Preparing to unpack .../03-tex-common_6.09_all.deb ...\n","Unpacking tex-common (6.09) ...\n","Selecting previously unselected package fonts-lmodern.\n","Preparing to unpack .../04-fonts-lmodern_2.004.5-3_all.deb ...\n","Unpacking fonts-lmodern (2.004.5-3) ...\n","Selecting previously unselected package fonts-noto-mono.\n","Preparing to unpack .../05-fonts-noto-mono_20171026-2_all.deb ...\n","Unpacking fonts-noto-mono (20171026-2) ...\n","Selecting previously unselected package fonts-texgyre.\n","Preparing to unpack .../06-fonts-texgyre_20160520-1_all.deb ...\n","Unpacking fonts-texgyre (20160520-1) ...\n","Selecting previously unselected package javascript-common.\n","Preparing to unpack .../07-javascript-common_11_all.deb ...\n","Unpacking javascript-common (11) ...\n","Selecting previously unselected package libcupsfilters1:amd64.\n","Preparing to unpack .../08-libcupsfilters1_1.20.2-0ubuntu3.1_amd64.deb ...\n","Unpacking libcupsfilters1:amd64 (1.20.2-0ubuntu3.1) ...\n","Selecting previously unselected package libcupsimage2:amd64.\n","Preparing to unpack .../09-libcupsimage2_2.2.7-1ubuntu2.8_amd64.deb ...\n","Unpacking libcupsimage2:amd64 (2.2.7-1ubuntu2.8) ...\n","Selecting previously unselected package libijs-0.35:amd64.\n","Preparing to unpack .../10-libijs-0.35_0.35-13_amd64.deb ...\n","Unpacking libijs-0.35:amd64 (0.35-13) ...\n","Selecting previously unselected package libjbig2dec0:amd64.\n","Preparing to unpack .../11-libjbig2dec0_0.13-6_amd64.deb ...\n","Unpacking libjbig2dec0:amd64 (0.13-6) ...\n","Selecting previously unselected package libgs9-common.\n","Preparing to unpack .../12-libgs9-common_9.26~dfsg+0-0ubuntu0.18.04.13_all.deb ...\n","Unpacking libgs9-common (9.26~dfsg+0-0ubuntu0.18.04.13) ...\n","Selecting previously unselected package libgs9:amd64.\n","Preparing to unpack .../13-libgs9_9.26~dfsg+0-0ubuntu0.18.04.13_amd64.deb ...\n","Unpacking libgs9:amd64 (9.26~dfsg+0-0ubuntu0.18.04.13) ...\n","Selecting previously unselected package libjs-jquery.\n","Preparing to unpack .../14-libjs-jquery_3.2.1-1_all.deb ...\n","Unpacking libjs-jquery (3.2.1-1) ...\n","Selecting previously unselected package libkpathsea6:amd64.\n","Preparing to unpack .../15-libkpathsea6_2017.20170613.44572-8ubuntu0.1_amd64.deb ...\n","Unpacking libkpathsea6:amd64 (2017.20170613.44572-8ubuntu0.1) ...\n","Selecting previously unselected package libpotrace0.\n","Preparing to unpack .../16-libpotrace0_1.14-2_amd64.deb ...\n","Unpacking libpotrace0 (1.14-2) ...\n","Selecting previously unselected package libptexenc1:amd64.\n","Preparing to unpack .../17-libptexenc1_2017.20170613.44572-8ubuntu0.1_amd64.deb ...\n","Unpacking libptexenc1:amd64 (2017.20170613.44572-8ubuntu0.1) ...\n","Selecting previously unselected package rubygems-integration.\n","Preparing to unpack .../18-rubygems-integration_1.11_all.deb ...\n","Unpacking rubygems-integration (1.11) ...\n","Selecting previously unselected package ruby2.5.\n","Preparing to unpack .../19-ruby2.5_2.5.1-1ubuntu1.6_amd64.deb ...\n","Unpacking ruby2.5 (2.5.1-1ubuntu1.6) ...\n","Selecting previously unselected package ruby.\n","Preparing to unpack .../20-ruby_1%3a2.5.1_amd64.deb ...\n","Unpacking ruby (1:2.5.1) ...\n","Selecting previously unselected package rake.\n","Preparing to unpack .../21-rake_12.3.1-1ubuntu0.1_all.deb ...\n","Unpacking rake (12.3.1-1ubuntu0.1) ...\n","Selecting previously unselected package ruby-did-you-mean.\n","Preparing to unpack .../22-ruby-did-you-mean_1.2.0-2_all.deb ...\n","Unpacking ruby-did-you-mean (1.2.0-2) ...\n","Selecting previously unselected package ruby-minitest.\n","Preparing to unpack .../23-ruby-minitest_5.10.3-1_all.deb ...\n","Unpacking ruby-minitest (5.10.3-1) ...\n","Selecting previously unselected package ruby-net-telnet.\n","Preparing to unpack .../24-ruby-net-telnet_0.1.1-2_all.deb ...\n","Unpacking ruby-net-telnet (0.1.1-2) ...\n","Selecting previously unselected package ruby-power-assert.\n","Preparing to unpack .../25-ruby-power-assert_0.3.0-1_all.deb ...\n","Unpacking ruby-power-assert (0.3.0-1) ...\n","Selecting previously unselected package ruby-test-unit.\n","Preparing to unpack .../26-ruby-test-unit_3.2.5-1_all.deb ...\n","Unpacking ruby-test-unit (3.2.5-1) ...\n","Selecting previously unselected package libruby2.5:amd64.\n","Preparing to unpack .../27-libruby2.5_2.5.1-1ubuntu1.6_amd64.deb ...\n","Unpacking libruby2.5:amd64 (2.5.1-1ubuntu1.6) ...\n","Selecting previously unselected package libsynctex1:amd64.\n","Preparing to unpack .../28-libsynctex1_2017.20170613.44572-8ubuntu0.1_amd64.deb ...\n","Unpacking libsynctex1:amd64 (2017.20170613.44572-8ubuntu0.1) ...\n","Selecting previously unselected package libtexlua52:amd64.\n","Preparing to unpack .../29-libtexlua52_2017.20170613.44572-8ubuntu0.1_amd64.deb ...\n","Unpacking libtexlua52:amd64 (2017.20170613.44572-8ubuntu0.1) ...\n","Selecting previously unselected package libtexluajit2:amd64.\n","Preparing to unpack .../30-libtexluajit2_2017.20170613.44572-8ubuntu0.1_amd64.deb ...\n","Unpacking libtexluajit2:amd64 (2017.20170613.44572-8ubuntu0.1) ...\n","Selecting previously unselected package libzzip-0-13:amd64.\n","Preparing to unpack .../31-libzzip-0-13_0.13.62-3.1ubuntu0.18.04.1_amd64.deb ...\n","Unpacking libzzip-0-13:amd64 (0.13.62-3.1ubuntu0.18.04.1) ...\n","Selecting previously unselected package lmodern.\n","Preparing to unpack .../32-lmodern_2.004.5-3_all.deb ...\n","Unpacking lmodern (2.004.5-3) ...\n","Selecting previously unselected package preview-latex-style.\n","Preparing to unpack .../33-preview-latex-style_11.91-1ubuntu1_all.deb ...\n","Unpacking preview-latex-style (11.91-1ubuntu1) ...\n","Selecting previously unselected package t1utils.\n","Preparing to unpack .../34-t1utils_1.41-2_amd64.deb ...\n","Unpacking t1utils (1.41-2) ...\n","Selecting previously unselected package tex-gyre.\n","Preparing to unpack .../35-tex-gyre_20160520-1_all.deb ...\n","Unpacking tex-gyre (20160520-1) ...\n","Selecting previously unselected package texlive-binaries.\n","Preparing to unpack .../36-texlive-binaries_2017.20170613.44572-8ubuntu0.1_amd64.deb ...\n","Unpacking texlive-binaries (2017.20170613.44572-8ubuntu0.1) ...\n","Selecting previously unselected package texlive-base.\n","Preparing to unpack .../37-texlive-base_2017.20180305-1_all.deb ...\n","Unpacking texlive-base (2017.20180305-1) ...\n","Selecting previously unselected package texlive-fonts-recommended.\n","Preparing to unpack .../38-texlive-fonts-recommended_2017.20180305-1_all.deb ...\n","Unpacking texlive-fonts-recommended (2017.20180305-1) ...\n","Selecting previously unselected package texlive-plain-generic.\n","Preparing to unpack .../39-texlive-plain-generic_2017.20180305-2_all.deb ...\n","Unpacking texlive-plain-generic (2017.20180305-2) ...\n","Selecting previously unselected package texlive-generic-recommended.\n","Preparing to unpack .../40-texlive-generic-recommended_2017.20180305-1_all.deb ...\n","Unpacking texlive-generic-recommended (2017.20180305-1) ...\n","Selecting previously unselected package texlive-latex-base.\n","Preparing to unpack .../41-texlive-latex-base_2017.20180305-1_all.deb ...\n","Unpacking texlive-latex-base (2017.20180305-1) ...\n","Selecting previously unselected package texlive-latex-recommended.\n","Preparing to unpack .../42-texlive-latex-recommended_2017.20180305-1_all.deb ...\n","Unpacking texlive-latex-recommended (2017.20180305-1) ...\n","Selecting previously unselected package texlive-pictures.\n","Preparing to unpack .../43-texlive-pictures_2017.20180305-1_all.deb ...\n","Unpacking texlive-pictures (2017.20180305-1) ...\n","Selecting previously unselected package texlive-latex-extra.\n","Preparing to unpack .../44-texlive-latex-extra_2017.20180305-2_all.deb ...\n","Unpacking texlive-latex-extra (2017.20180305-2) ...\n","Selecting previously unselected package tipa.\n","Preparing to unpack .../45-tipa_2%3a1.3-20_all.deb ...\n","Unpacking tipa (2:1.3-20) ...\n","Selecting previously unselected package texlive-xetex.\n","Preparing to unpack .../46-texlive-xetex_2017.20180305-1_all.deb ...\n","Unpacking texlive-xetex (2017.20180305-1) ...\n","Setting up libgs9-common (9.26~dfsg+0-0ubuntu0.18.04.13) ...\n","Setting up libkpathsea6:amd64 (2017.20170613.44572-8ubuntu0.1) ...\n","Setting up libjs-jquery (3.2.1-1) ...\n","Setting up libtexlua52:amd64 (2017.20170613.44572-8ubuntu0.1) ...\n","Setting up fonts-droid-fallback (1:6.0.1r16-1.1) ...\n","Setting up libsynctex1:amd64 (2017.20170613.44572-8ubuntu0.1) ...\n","Setting up libptexenc1:amd64 (2017.20170613.44572-8ubuntu0.1) ...\n","Setting up tex-common (6.09) ...\n","update-language: texlive-base not installed and configured, doing nothing!\n","Setting up poppler-data (0.4.8-2) ...\n","Setting up tex-gyre (20160520-1) ...\n","Setting up preview-latex-style (11.91-1ubuntu1) ...\n","Setting up fonts-texgyre (20160520-1) ...\n","Setting up fonts-noto-mono (20171026-2) ...\n","Setting up fonts-lato (2.0-2) ...\n","Setting up libcupsfilters1:amd64 (1.20.2-0ubuntu3.1) ...\n","Setting up libcupsimage2:amd64 (2.2.7-1ubuntu2.8) ...\n","Setting up libjbig2dec0:amd64 (0.13-6) ...\n","Setting up ruby-did-you-mean (1.2.0-2) ...\n","Setting up t1utils (1.41-2) ...\n","Setting up ruby-net-telnet (0.1.1-2) ...\n","Setting up libijs-0.35:amd64 (0.35-13) ...\n","Setting up rubygems-integration (1.11) ...\n","Setting up libpotrace0 (1.14-2) ...\n","Setting up javascript-common (11) ...\n","Setting up ruby-minitest (5.10.3-1) ...\n","Setting up libzzip-0-13:amd64 (0.13.62-3.1ubuntu0.18.04.1) ...\n","Setting up libgs9:amd64 (9.26~dfsg+0-0ubuntu0.18.04.13) ...\n","Setting up libtexluajit2:amd64 (2017.20170613.44572-8ubuntu0.1) ...\n","Setting up fonts-lmodern (2.004.5-3) ...\n","Setting up ruby-power-assert (0.3.0-1) ...\n","Setting up texlive-binaries (2017.20170613.44572-8ubuntu0.1) ...\n","update-alternatives: using /usr/bin/xdvi-xaw to provide /usr/bin/xdvi.bin (xdvi.bin) in auto mode\n","update-alternatives: using /usr/bin/bibtex.original to provide /usr/bin/bibtex (bibtex) in auto mode\n","Setting up texlive-base (2017.20180305-1) ...\n","mktexlsr: Updating /var/lib/texmf/ls-R-TEXLIVEDIST... \n","mktexlsr: Updating /var/lib/texmf/ls-R-TEXMFMAIN... \n","mktexlsr: Updating /var/lib/texmf/ls-R... \n","mktexlsr: Done.\n","tl-paper: setting paper size for dvips to a4: /var/lib/texmf/dvips/config/config-paper.ps\n","tl-paper: setting paper size for dvipdfmx to a4: /var/lib/texmf/dvipdfmx/dvipdfmx-paper.cfg\n","tl-paper: setting paper size for xdvi to a4: /var/lib/texmf/xdvi/XDvi-paper\n","tl-paper: setting paper size for pdftex to a4: /var/lib/texmf/tex/generic/config/pdftexconfig.tex\n","Setting up texlive-fonts-recommended (2017.20180305-1) ...\n","Setting up texlive-plain-generic (2017.20180305-2) ...\n","Setting up texlive-generic-recommended (2017.20180305-1) ...\n","Setting up texlive-latex-base (2017.20180305-1) ...\n","Setting up lmodern (2.004.5-3) ...\n","Setting up texlive-latex-recommended (2017.20180305-1) ...\n","Setting up texlive-pictures (2017.20180305-1) ...\n","Setting up tipa (2:1.3-20) ...\n","Regenerating '/var/lib/texmf/fmtutil.cnf-DEBIAN'... done.\n","Regenerating '/var/lib/texmf/fmtutil.cnf-TEXLIVEDIST'... done.\n","update-fmtutil has updated the following file(s):\n","\t/var/lib/texmf/fmtutil.cnf-DEBIAN\n","\t/var/lib/texmf/fmtutil.cnf-TEXLIVEDIST\n","If you want to activate the changes in the above file(s),\n","you should run fmtutil-sys or fmtutil.\n","Setting up texlive-latex-extra (2017.20180305-2) ...\n","Setting up texlive-xetex (2017.20180305-1) ...\n","Setting up ruby2.5 (2.5.1-1ubuntu1.6) ...\n","Setting up ruby (1:2.5.1) ...\n","Setting up ruby-test-unit (3.2.5-1) ...\n","Setting up rake (12.3.1-1ubuntu0.1) ...\n","Setting up libruby2.5:amd64 (2.5.1-1ubuntu1.6) ...\n","Processing triggers for mime-support (3.60ubuntu1) ...\n","Processing triggers for libc-bin (2.27-3ubuntu1.2) ...\n","/sbin/ldconfig.real: /usr/local/lib/python3.6/dist-packages/ideep4py/lib/libmkldnn.so.0 is not a symbolic link\n","\n","Processing triggers for man-db (2.8.3-2ubuntu0.1) ...\n","Processing triggers for fontconfig (2.12.6-0ubuntu2) ...\n","Processing triggers for tex-common (6.09) ...\n","Running updmap-sys. This may take some time... done.\n","Running mktexlsr /var/lib/texmf ... done.\n","Building format(s) --all.\n","\tThis may take some time... done.\n","[NbConvertApp] Converting notebook /content/drive/My Drive/Colab Notebooks/DAKD2020Exercise1.ipynb to pdf\n","[NbConvertApp] Support files will be in DAKD2020Exercise1_files/\n","[NbConvertApp] Making directory ./DAKD2020Exercise1_files\n","[NbConvertApp] Making directory ./DAKD2020Exercise1_files\n","[NbConvertApp] Making directory ./DAKD2020Exercise1_files\n","[NbConvertApp] Making directory ./DAKD2020Exercise1_files\n","[NbConvertApp] Making directory ./DAKD2020Exercise1_files\n","[NbConvertApp] Making directory ./DAKD2020Exercise1_files\n","[NbConvertApp] Making directory ./DAKD2020Exercise1_files\n","[NbConvertApp] Making directory ./DAKD2020Exercise1_files\n","[NbConvertApp] Writing 91168 bytes to ./notebook.tex\n","[NbConvertApp] Building PDF\n","[NbConvertApp] Running xelatex 3 times: [u'xelatex', u'./notebook.tex', '-quiet']\n","[NbConvertApp] Running bibtex 1 time: [u'bibtex', u'./notebook']\n","[NbConvertApp] WARNING | bibtex had problems, most likely because there were no citations\n","[NbConvertApp] PDF successfully created\n","[NbConvertApp] Writing 197834 bytes to /content/drive/My Drive/DAKD2020Exercise1.pdf\n"],"name":"stdout"},{"output_type":"display_data","data":{"application/javascript":["\n"," async function download(id, filename, size) {\n"," if (!google.colab.kernel.accessAllowed) {\n"," return;\n"," }\n"," const div = document.createElement('div');\n"," const label = document.createElement('label');\n"," label.textContent = `Downloading \"${filename}\": `;\n"," div.appendChild(label);\n"," const progress = document.createElement('progress');\n"," progress.max = size;\n"," div.appendChild(progress);\n"," document.body.appendChild(div);\n","\n"," const buffers = [];\n"," let downloaded = 0;\n","\n"," const channel = await google.colab.kernel.comms.open(id);\n"," // Send a message to notify the kernel that we're ready.\n"," channel.send({})\n","\n"," for await (const message of channel.messages) {\n"," // Send a message to notify the kernel that we're ready.\n"," channel.send({})\n"," if (message.buffers) {\n"," for (const buffer of message.buffers) {\n"," buffers.push(buffer);\n"," downloaded += buffer.byteLength;\n"," progress.value = downloaded;\n"," }\n"," }\n"," }\n"," const blob = new Blob(buffers, {type: 'application/binary'});\n"," const a = document.createElement('a');\n"," a.href = window.URL.createObjectURL(blob);\n"," a.download = filename;\n"," div.appendChild(a);\n"," a.click();\n"," div.remove();\n"," }\n"," "],"text/plain":["<IPython.core.display.Javascript object>"]},"metadata":{"tags":[]}},{"output_type":"display_data","data":{"application/javascript":["download(\"download_b2b7978c-c222-4867-9544-79cea8834dda\", \"DAKD2020Exercise1.pdf\", 197834)"],"text/plain":["<IPython.core.display.Javascript object>"]},"metadata":{"tags":[]}},{"output_type":"execute_result","data":{"application/vnd.google.colaboratory.intrinsic+json":{"type":"string"},"text/plain":["'File ready to be Downloaded and Saved to Drive'"]},"metadata":{"tags":[]},"execution_count":82}]}]} \ No newline at end of file -- GitLab