From 8a06a77aa27e486d21ae22ba9d8f4576b2080e9c Mon Sep 17 00:00:00 2001 From: tech-sohan <70441121+tech-sohan@users.noreply.github.com> Date: Sun, 20 Dec 2020 10:32:54 +0530 Subject: [PATCH 1/3] Created using Colaboratory --- numpy_arrays.ipynb | 1977 ++++++++++++++++++++++++-------------------- 1 file changed, 1082 insertions(+), 895 deletions(-) diff --git a/numpy_arrays.ipynb b/numpy_arrays.ipynb index 711966b..06a21d2 100644 --- a/numpy_arrays.ipynb +++ b/numpy_arrays.ipynb @@ -1,900 +1,1087 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Numpy Arrays" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We'll import the `numpy` module using the short form `np` to save us typing. " - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np # imports a fast numerical programming library" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "![](numpy_arrays.slides.dir/2.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Starting up with numpy arrays\n", - "\n", - "Scientific Python code uses a fast array structure, called the numpy array. Those who have worked in Matlab will find this very natural. For reference, the numpy documention can be found [here](https://docs.scipy.org/doc/numpy/reference/). \n", - "\n", - "Let's make a numpy array." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 2, 3, 4])" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "my_array = np.array([1, 2, 3, 4])\n", - "my_array" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Numpy arrays are listy! Below we compute length, slice, and iterate. " - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "4\n", - "[3 4]\n", - "1\n", - "2\n", - "3\n", - "4\n" - ] - } - ], - "source": [ - "print(len(my_array))\n", - "print(my_array[2:4])\n", - "for ele in my_array:\n", - " print(ele)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**However, in general you should manipulate numpy arrays by using numpy module functions** (`np.mean`, for example). This is for efficiency purposes, see the Vanderplas book. But briefly:\n", - "\n", - "1. numpy arrays are typed, you keep ints together or floats together. They are not meant to combine objects of different types like python lists do.\n", - "2. numpy arrays are defined in the C language. You do not have to convert between python floats and C floats for example. Python types are different from the corresponding C-types because Python is garbage collected.\n", - "\n", - "You can calculate the mean of the array elements either by calling the method `.mean` on a numpy array or by applying the function np.mean with the numpy array as an argument." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2.5\n", - "2.5\n" - ] - } - ], - "source": [ - "print(my_array.mean())\n", - "print(np.mean(my_array))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The way we constructed the numpy array above seems redundant..after all we already had a regular python list. Indeed, it is the other ways we have to construct numpy arrays that make them super useful. \n", - "\n", - "There are many such numpy array *constructors*. Here are some commonly used constructors. Look them up in the documentation." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.ones(10) # generates 10 floating point ones" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Numpy gains a lot of its efficiency from being typed**. That is, all elements in the array have the same type, such as integer or floating point. The default type, as can be seen above, is a float of size appropriate for the machine (64 bit on a 64 bit machine)." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "8" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.dtype(float).itemsize # in bytes" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.ones(10, dtype='int') # generates 10 integer ones" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "dtype('float64')" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.ones(10).dtype" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Numpy supports vector operations\n", - "\n", - "What does this mean? It means that instead of adding two arrays, element by element, you can just say: add the two arrays. Note that this behavior is very different from python lists.\n", - "\n", - "![](numpy_arrays.slides.dir/3.png)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2., 2., 2., 2., 2.])" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "first = np.ones(5)\n", - "second = np.ones(5)\n", - "first + second" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "first_list = [1., 1., 1., 1., 1.]\n", - "second_list = [1., 1., 1., 1., 1.]\n", - "first_list + second_list #not what u want" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "On some computer chips this addition actually happens in parallel, so speedups can be high. But even on regular chips, the advantage of greater readability is important." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Numpy supports a concept known as *broadcasting*, which dictates how arrays of different sizes are combined together. There are too many rules to list here, but importantly, multiplying an array by a number multiplies each element by the number. Adding a number adds the number to each element." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2., 2., 2., 2., 2.])" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "first + 1" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([5., 5., 5., 5., 5.])" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "first*5" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2D arrays\n", - "\n", - "Similarly, we can create two-dimensional arrays.\n", - "\n", - "![](numpy_arrays.slides.dir/6.png)" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 1, 2, 3, 4],\n", - " [ 5, 6, 7, 8],\n", - " [ 9, 10, 11, 12]])" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "my_array2d = np.array([ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ])\n", - "my_array2d" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1., 1., 1., 1.],\n", - " [1., 1., 1., 1.],\n", - " [1., 1., 1., 1.]])" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# 3 x 4 array of ones\n", - "ones_2d = np.ones([3, 4])\n", - "ones_2d" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Like lists, numpy arrays are 0-indexed. Thus we can access the $n$th row and the $m$th column of a two-dimensional array with the indices $[n - 1, m - 1]$." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[[ 1 2 3 4]\n", - " [ 5 6 7 8]\n", - " [ 9 10 11 12]]\n" - ] - }, - { - "data": { - "text/plain": [ - "12" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "print(my_array2d)\n", - "my_array2d[2, 3]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The 2D arrays are listy as well. They have set length (array dimensions), can be sliced, and can be iterated over with loop. Below is a schematic illustrating slicing two-dimensional arrays. \n", - "\n", - " \"Drawing\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In two dimensions, we need to provide the **shape** of the array, ie, the number of rows and columns of the array." - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[1., 1., 1., 1.],\n", - " [1., 1., 1., 1.],\n", - " [1., 1., 1., 1.]])" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "onesarray = np.ones([3,4])\n", - "onesarray" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(3, 4)" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "onesarray.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Numpy functions will by default work on the entire array:" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "12.0" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.sum(onesarray)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The axis 0 is the one going downwards (the $y$-axis, so to speak), whereas axis 1 is the one going across (the $x$-axis). You will often use functions such as `mean`, `sum`, with an axis." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([3., 3., 3., 3.])" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.sum(onesarray, axis=0)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([15, 18, 21, 24])" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.sum(my_array2d, axis=0)" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([4., 4., 4.])" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.sum(onesarray, axis=1)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You should notice that access is row-by-row and one dimensional iteration gives a row. This is because `numpy` lays out memory row-wise.\n", - "\n", - "![](images/2d-array-layout.png)\n", - "\n", - "(from https://aaronbloomfield.github.io)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "An often seen idiom allocates a two-dimensional array, and then fills in one-dimensional arrays from some function:" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0., 0., 0.],\n", - " [0., 0., 0.]])" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "empty_array = np.empty((2,3))\n", - "empty_array" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[0. 0. 0.]\n", - "[0. 0. 0.]\n" - ] - } - ], - "source": [ - "for i in range(empty_array.shape[0]):\n", - " print(empty_array[i])" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.68625855, 0.09451053, 0.9559449 ],\n", - " [0.03386545, 0.08089574, 0.84962253]])" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "anaconda-cloud": {}, + "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.7.6" + }, + "colab": { + "name": "numpy_arrays.ipynb", + "provenance": [], + "include_colab_link": true } - ], - "source": [ - "for i in range(empty_array.shape[0]):\n", - " empty_array[i] = np.random.rand(3)\n", - "empty_array" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Pandas and numpy\n", - "\n", - "You can very easily convert from Pandas to numpy. Just use the `.values` attribute on a pandas dataframe or series." - ] }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
StatePopulationVotespopmills
0Alaska71000030.710
1Alabama478000094.780
2Arkansas291600062.916
3Arizona6392000116.392
4California372540005537.254
\n", - "
" + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "74COclSIgZ8j" + }, + "source": [ + "# Numpy Arrays" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "g_PIZV-IgZ85" + }, + "source": [ + "We'll import the `numpy` module using the short form `np` to save us typing. " + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "kLQ3Ga8-gZ89" + }, + "source": [ + "import numpy as np # imports a fast numerical programming library" ], - "text/plain": [ - " State Population Votes popmills\n", - "0 Alaska 710000 3 0.710\n", - "1 Alabama 4780000 9 4.780\n", - "2 Arkansas 2916000 6 2.916\n", - "3 Arizona 6392000 11 6.392\n", - "4 California 37254000 55 37.254" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "combined = pd.read_csv('data/combined_population_votes.csv')\n", - "combined.head()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For a Series Object:" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 3, 9, 6, 11, 55, 9, 7, 3, 3, 29, 16, 4, 6, 4, 20, 11, 6,\n", - " 8, 8, 11, 10, 4, 16, 10, 10, 6, 3, 15, 3, 5, 4, 14, 5, 6,\n", - " 29, 18, 7, 7, 20, 4, 9, 3, 11, 38, 6, 13, 3, 12, 10, 5, 3])" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "combined.Votes.values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For a Dataframe:" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[ 0.71 , 3. ],\n", - " [ 4.78 , 9. ],\n", - " [ 2.916, 6. ],\n", - " [ 6.392, 11. ],\n", - " [37.254, 55. ],\n", - " [ 5.029, 9. ],\n", - " [ 3.574, 7. ],\n", - " [ 0.602, 3. ],\n", - " [ 0.898, 3. ],\n", - " [18.801, 29. ],\n", - " [ 9.688, 16. ],\n", - " [ 1.36 , 4. ],\n", - " [ 3.046, 6. ],\n", - " [ 1.568, 4. ],\n", - " [12.831, 20. ],\n", - " [ 6.484, 11. ],\n", - " [ 2.853, 6. ],\n", - " [ 4.339, 8. ],\n", - " [ 4.533, 8. ],\n", - " [ 6.548, 11. ],\n", - " [ 5.774, 10. ],\n", - " [ 1.328, 4. ],\n", - " [ 9.884, 16. ],\n", - " [ 5.304, 10. ],\n", - " [ 5.989, 10. ],\n", - " [ 2.967, 6. ],\n", - " [ 0.989, 3. ],\n", - " [ 9.535, 15. ],\n", - " [ 0.673, 3. ],\n", - " [ 1.826, 5. ],\n", - " [ 1.316, 4. ],\n", - " [ 8.792, 14. ],\n", - " [ 2.059, 5. ],\n", - " [ 2.701, 6. ],\n", - " [19.378, 29. ],\n", - " [11.537, 18. ],\n", - " [ 3.751, 7. ],\n", - " [ 3.831, 7. ],\n", - " [12.702, 20. ],\n", - " [ 1.053, 4. ],\n", - " [ 4.625, 9. ],\n", - " [ 0.814, 3. ],\n", - " [ 6.346, 11. ],\n", - " [25.146, 38. ],\n", - " [ 2.764, 6. ],\n", - " [ 8.001, 13. ],\n", - " [ 0.626, 3. ],\n", - " [ 6.725, 12. ],\n", - " [ 5.687, 10. ],\n", - " [ 1.853, 5. ],\n", - " [ 0.564, 3. ]])" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IVhJdhl-gZ9B" + }, + "source": [ + "![](https://github.com/tech-sohan/NumericalPython/blob/main/numpy_arrays.slides.dir/2.png?raw=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NLAk5eB7gZ9D" + }, + "source": [ + "## Starting up with numpy arrays\n", + "\n", + "Scientific Python code uses a fast array structure, called the numpy array. Those who have worked in Matlab will find this very natural. For reference, the numpy documention can be found [here](https://docs.scipy.org/doc/numpy/reference/). \n", + "\n", + "Let's make a numpy array." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "PEZkkcI5gZ9H", + "outputId": "940ddaaf-c54b-4b5c-b385-2bdf51870179" + }, + "source": [ + "my_array = np.array([1, 2, 3, 4])\n", + "my_array" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([1, 2, 3, 4])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 4 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YA5VRWo5gZ9Q" + }, + "source": [ + "Numpy arrays are listy! Below we compute length, slice, and iterate. " + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "VvJzTBCHgZ9S", + "outputId": "c592a1b0-596e-4bbc-bf8a-63a0d7a4ef76" + }, + "source": [ + "print(len(my_array))\n", + "print(my_array[2:4])\n", + "for ele in my_array:\n", + " print(ele)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "4\n", + "[3 4]\n", + "1\n", + "2\n", + "3\n", + "4\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "PH4LTaGsgZ9T" + }, + "source": [ + "**However, in general you should manipulate numpy arrays by using numpy module functions** (`np.mean`, for example). This is for efficiency purposes, see the Vanderplas book. But briefly:\n", + "\n", + "1. numpy arrays are typed, you keep ints together or floats together. They are not meant to combine objects of different types like python lists do.\n", + "2. numpy arrays are defined in the C language. You do not have to convert between python floats and C floats for example. Python types are different from the corresponding C-types because Python is garbage collected.\n", + "\n", + "You can calculate the mean of the array elements either by calling the method `.mean` on a numpy array or by applying the function np.mean with the numpy array as an argument." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "dmeKhY7cgZ-a", + "outputId": "80a72cc2-f3c7-4ea5-e9b4-31a7214d9f55" + }, + "source": [ + "print(my_array.mean())\n", + "print(np.mean(my_array))" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "2.5\n", + "2.5\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ljvO4FM4gZ-b" + }, + "source": [ + "The way we constructed the numpy array above seems redundant..after all we already had a regular python list. Indeed, it is the other ways we have to construct numpy arrays that make them super useful. \n", + "\n", + "There are many such numpy array *constructors*. Here are some commonly used constructors. Look them up in the documentation." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "JP6Prng_gZ-e", + "outputId": "8c5a4abc-15dd-4f63-b078-dec8c3f7e54c" + }, + "source": [ + "np.ones(10) # generates 10 floating point ones" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "42UjEfqigZ-h" + }, + "source": [ + "**Numpy gains a lot of its efficiency from being typed**. That is, all elements in the array have the same type, such as integer or floating point. The default type, as can be seen above, is a float of size appropriate for the machine (64 bit on a 64 bit machine)." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "32N26MHSgZ-j", + "outputId": "1530816a-8d1d-4d8d-b553-d4ce31e2ae4b" + }, + "source": [ + "np.dtype(float).itemsize # in bytes" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "8" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 8 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "B8-er3LdgZ-l", + "outputId": "fd54c9e9-04ae-416a-9dfb-12b5ade3820f" + }, + "source": [ + "np.ones(10, dtype='int') # generates 10 integer ones" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 9 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "Jody-Sm5gZ-y", + "outputId": "88582091-4e5d-41bb-8eb8-ac6a7f529cd2" + }, + "source": [ + "np.ones(10).dtype" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "dtype('float64')" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 10 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "f-HiXjXwgZ-1" + }, + "source": [ + "## Numpy supports vector operations\n", + "\n", + "What does this mean? It means that instead of adding two arrays, element by element, you can just say: add the two arrays. Note that this behavior is very different from python lists.\n", + "\n", + "![](https://github.com/tech-sohan/NumericalPython/blob/main/numpy_arrays.slides.dir/3.png?raw=1)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "t4ynwMDegZ-2", + "outputId": "1167d89f-6b7b-405a-e155-4b8006a52738" + }, + "source": [ + "first = np.ones(5)\n", + "second = np.ones(5)\n", + "first + second" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([2., 2., 2., 2., 2.])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 11 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "8k3ky8n-gZ-4", + "outputId": "916db69c-20f5-42d5-91ff-753a7065cd81" + }, + "source": [ + "first_list = [1., 1., 1., 1., 1.]\n", + "second_list = [1., 1., 1., 1., 1.]\n", + "first_list + second_list #not what u want" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 12 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "C4mQPemIgZ-5" + }, + "source": [ + "On some computer chips this addition actually happens in parallel, so speedups can be high. But even on regular chips, the advantage of greater readability is important." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-esHzSHLgZ-5" + }, + "source": [ + "Numpy supports a concept known as *broadcasting*, which dictates how arrays of different sizes are combined together. There are too many rules to list here, but importantly, multiplying an array by a number multiplies each element by the number. Adding a number adds the number to each element." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "RUti5S53gZ-6", + "outputId": "9fa8594f-ad3a-4c03-ef1f-1eb66dfec14a" + }, + "source": [ + "first + 1" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([2., 2., 2., 2., 2.])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 13 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "RkNNGSdtgZ-7", + "outputId": "77aaf614-dd3c-43bc-fb63-3193e2ae47e0" + }, + "source": [ + "first*5" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([5., 5., 5., 5., 5.])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 14 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3f1tObYrgZ-8" + }, + "source": [ + "## 2D arrays\n", + "\n", + "Similarly, we can create two-dimensional arrays.\n", + "\n", + "![](https://github.com/tech-sohan/NumericalPython/blob/main/numpy_arrays.slides.dir/6.png?raw=1)" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "3DoL0C-QgZ_A", + "outputId": "64e95889-13ba-4ad1-92d2-d9fd94a5e10b" + }, + "source": [ + "my_array2d = np.array([ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ])\n", + "my_array2d" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 1, 2, 3, 4],\n", + " [ 5, 6, 7, 8],\n", + " [ 9, 10, 11, 12]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 15 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "s4r7knPWgZ_B", + "outputId": "5f0f2c8a-4f61-4348-9764-b4a2661537a3" + }, + "source": [ + "# 3 x 4 array of ones\n", + "ones_2d = np.ones([3, 4])\n", + "ones_2d" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[1., 1., 1., 1.],\n", + " [1., 1., 1., 1.],\n", + " [1., 1., 1., 1.]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 16 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "RqMoUNnIgZ_D" + }, + "source": [ + "Like lists, numpy arrays are 0-indexed. Thus we can access the $n$th row and the $m$th column of a two-dimensional array with the indices $[n - 1, m - 1]$." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "pq86dg0JgZ_E", + "outputId": "d2813089-8b99-48eb-9912-922dadad6f8c" + }, + "source": [ + "print(my_array2d)\n", + "my_array2d[2, 3]" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[[ 1 2 3 4]\n", + " [ 5 6 7 8]\n", + " [ 9 10 11 12]]\n" + ], + "name": "stdout" + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "12" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 17 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yN1bicNTgZ_G" + }, + "source": [ + "The 2D arrays are listy as well. They have set length (array dimensions), can be sliced, and can be iterated over with loop. Below is a schematic illustrating slicing two-dimensional arrays. \n", + "\n", + " \"Drawing\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "GilplIApgZ_I" + }, + "source": [ + "In two dimensions, we need to provide the **shape** of the array, ie, the number of rows and columns of the array." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "8j-HpUNAgZ_J", + "outputId": "97410f57-24ca-4a8d-8686-8526fc1cef62" + }, + "source": [ + "onesarray = np.ones([3,4])\n", + "onesarray" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[1., 1., 1., 1.],\n", + " [1., 1., 1., 1.],\n", + " [1., 1., 1., 1.]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 18 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "LiOniW2BgZ_K", + "outputId": "d29feca3-dec7-4850-ea3d-5cc9a0bd9691" + }, + "source": [ + "onesarray.shape" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(3, 4)" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 19 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YtumsfLygZ_L" + }, + "source": [ + "Numpy functions will by default work on the entire array:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "fdPb7h3rgZ_M", + "outputId": "3f9d8aaa-a76b-4429-9ae8-2fa687291eec" + }, + "source": [ + "np.sum(onesarray)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "12.0" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 20 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-PfGkmRJgZ_l" + }, + "source": [ + "The axis 0 is the one going downwards (the $y$-axis, so to speak), whereas axis 1 is the one going across (the $x$-axis). You will often use functions such as `mean`, `sum`, with an axis." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "b6ddPe5agZ_m", + "outputId": "60a7f1ff-65fd-43fc-fe19-b428b80dfab8" + }, + "source": [ + "np.sum(onesarray, axis=0)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([3., 3., 3., 3.])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 21 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "CZfOuWS7gZ_p", + "outputId": "8cc6f26a-c967-41c8-d4d1-646e9d555bd2" + }, + "source": [ + "np.sum(my_array2d, axis=0)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([15, 18, 21, 24])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 22 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "kcslbLuxgZ_q", + "outputId": "c5103fb7-268c-4b58-db50-635f0be2d69c" + }, + "source": [ + "np.sum(onesarray, axis=1)" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([4., 4., 4.])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 23 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8eJLt_EhgZ_r" + }, + "source": [ + "You should notice that access is row-by-row and one dimensional iteration gives a row. This is because `numpy` lays out memory row-wise.\n", + "\n", + "![](https://github.com/tech-sohan/NumericalPython/blob/main/images/2d-array-layout.png?raw=1)\n", + "\n", + "(from https://aaronbloomfield.github.io)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Xl-2W0_AgZ_z" + }, + "source": [ + "An often seen idiom allocates a two-dimensional array, and then fills in one-dimensional arrays from some function:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "FW40Q7xQgZ_0", + "outputId": "4635ab1d-610f-486c-824a-1fca5021439a" + }, + "source": [ + "empty_array = np.empty((2,3))\n", + "empty_array" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[0., 0., 0.],\n", + " [0., 0., 0.]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 25 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "_-1LatpxgZ_1", + "outputId": "26a99a49-b6a3-4776-8df2-36920dde19e3" + }, + "source": [ + "for i in range(empty_array.shape[0]):\n", + " print(empty_array[i])" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "text": [ + "[0. 0. 0.]\n", + "[0. 0. 0.]\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "ZqFThIHjgZ_2", + "outputId": "d8a9bf39-e5f8-4155-bdd2-2d78bc84f638" + }, + "source": [ + "for i in range(empty_array.shape[0]):\n", + " empty_array[i] = np.random.rand(3)\n", + "empty_array" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[0.68625855, 0.09451053, 0.9559449 ],\n", + " [0.03386545, 0.08089574, 0.84962253]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 29 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "83h4RuIxgZ_3" + }, + "source": [ + "## Pandas and numpy\n", + "\n", + "You can very easily convert from Pandas to numpy. Just use the `.values` attribute on a pandas dataframe or series." + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "PofULypygZ_3", + "outputId": "531a1394-3907-4a73-c160-d7c28803e223" + }, + "source": [ + "import pandas as pd\n", + "combined = pd.read_csv('data/combined_population_votes.csv')\n", + "combined.head()" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
StatePopulationVotespopmills
0Alaska71000030.710
1Alabama478000094.780
2Arkansas291600062.916
3Arizona6392000116.392
4California372540005537.254
\n", + "
" + ], + "text/plain": [ + " State Population Votes popmills\n", + "0 Alaska 710000 3 0.710\n", + "1 Alabama 4780000 9 4.780\n", + "2 Arkansas 2916000 6 2.916\n", + "3 Arizona 6392000 11 6.392\n", + "4 California 37254000 55 37.254" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 30 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ScmyMSHNgZ_4" + }, + "source": [ + "For a Series Object:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "roJFcJE_gZ_5", + "outputId": "24bdf42a-1b9d-42ba-a04d-3a8737d6f665" + }, + "source": [ + "combined.Votes.values" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([ 3, 9, 6, 11, 55, 9, 7, 3, 3, 29, 16, 4, 6, 4, 20, 11, 6,\n", + " 8, 8, 11, 10, 4, 16, 10, 10, 6, 3, 15, 3, 5, 4, 14, 5, 6,\n", + " 29, 18, 7, 7, 20, 4, 9, 3, 11, 38, 6, 13, 3, 12, 10, 5, 3])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 31 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NNPTH7nWgZ_6" + }, + "source": [ + "For a Dataframe:" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "40lq_S_agZ_7", + "outputId": "b91f8b3e-da45-425a-a8d3-2540be2937f2" + }, + "source": [ + "combined[['popmills', 'Votes']].values" + ], + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([[ 0.71 , 3. ],\n", + " [ 4.78 , 9. ],\n", + " [ 2.916, 6. ],\n", + " [ 6.392, 11. ],\n", + " [37.254, 55. ],\n", + " [ 5.029, 9. ],\n", + " [ 3.574, 7. ],\n", + " [ 0.602, 3. ],\n", + " [ 0.898, 3. ],\n", + " [18.801, 29. ],\n", + " [ 9.688, 16. ],\n", + " [ 1.36 , 4. ],\n", + " [ 3.046, 6. ],\n", + " [ 1.568, 4. ],\n", + " [12.831, 20. ],\n", + " [ 6.484, 11. ],\n", + " [ 2.853, 6. ],\n", + " [ 4.339, 8. ],\n", + " [ 4.533, 8. ],\n", + " [ 6.548, 11. ],\n", + " [ 5.774, 10. ],\n", + " [ 1.328, 4. ],\n", + " [ 9.884, 16. ],\n", + " [ 5.304, 10. ],\n", + " [ 5.989, 10. ],\n", + " [ 2.967, 6. ],\n", + " [ 0.989, 3. ],\n", + " [ 9.535, 15. ],\n", + " [ 0.673, 3. ],\n", + " [ 1.826, 5. ],\n", + " [ 1.316, 4. ],\n", + " [ 8.792, 14. ],\n", + " [ 2.059, 5. ],\n", + " [ 2.701, 6. ],\n", + " [19.378, 29. ],\n", + " [11.537, 18. ],\n", + " [ 3.751, 7. ],\n", + " [ 3.831, 7. ],\n", + " [12.702, 20. ],\n", + " [ 1.053, 4. ],\n", + " [ 4.625, 9. ],\n", + " [ 0.814, 3. ],\n", + " [ 6.346, 11. ],\n", + " [25.146, 38. ],\n", + " [ 2.764, 6. ],\n", + " [ 8.001, 13. ],\n", + " [ 0.626, 3. ],\n", + " [ 6.725, 12. ],\n", + " [ 5.687, 10. ],\n", + " [ 1.853, 5. ],\n", + " [ 0.564, 3. ]])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 32 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Gkby3HgHgZ_8" + }, + "source": [ + "Using `values` then gives us a multi-dimensional numpy array (notice how the ints are cast to floats to keep the data types the same)." + ] } - ], - "source": [ - "combined[['popmills', 'Votes']].values" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Using `values` then gives us a multi-dimensional numpy array (notice how the ints are cast to floats to keep the data types the same)." - ] - } - ], - "metadata": { - "anaconda-cloud": {}, - "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.7.6" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} + ] +} \ No newline at end of file From 6c9e1c1bc99c99f298dfdff36df33fda8bae88ca Mon Sep 17 00:00:00 2001 From: tech-sohan <70441121+tech-sohan@users.noreply.github.com> Date: Sun, 20 Dec 2020 11:37:09 +0530 Subject: [PATCH 2/3] Created using Colaboratory --- distribute_lab2.ipynb | 824 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 765 insertions(+), 59 deletions(-) diff --git a/distribute_lab2.ipynb b/distribute_lab2.ipynb index 67a83a7..34367c0 100644 --- a/distribute_lab2.ipynb +++ b/distribute_lab2.ipynb @@ -1,4 +1,6 @@ { + "nbformat": 4, + "nbformat_minor": 0, "metadata": { "kernelspec": { "display_name": "Python 3", @@ -16,31 +18,50 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" + }, + "colab": { + "name": "distribute_lab2.ipynb", + "provenance": [], + "include_colab_link": true } }, - "nbformat": 4, - "nbformat_minor": 4, "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CMqkedEvoP3Y" + }, "source": [ "# Lab 2: Pandas and numpy" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "8NOCXq0koP3n" + }, "source": [ "import numpy as np\n", "import pandas as pd" - ] + ], + "execution_count": 30, + "outputs": [] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "ly6owKPVoP3q" + }, "source": [ "## EXERCISE 1: How fast is your car?\n", "\n", @@ -48,7 +69,7 @@ "\n", "````` \n", "Description\n", - "The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and ten aspects of automobile design and performance for 32 automobiles (1973\u201374 models).\n", + "The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and ten aspects of automobile design and performance for 32 automobiles (1973–74 models).\n", "\n", "Format\n", "\n", @@ -67,22 +88,60 @@ "[,11]\tcarb\t Number of carburetors\n", " \n", "Source\n", - "Henderson and Velleman (1981), Building multiple regression models interactively. Biometrics, 37, 391\u2013411.\n", + "Henderson and Velleman (1981), Building multiple regression models interactively. Biometrics, 37, 391–411.\n", "`````" ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "UkQwoPP7oP3r", + "outputId": "2935dda8-c0ae-4bd5-a7d4-c7ea4b4e94bb", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, "source": [ - "# your code here\n" + "!wget https://raw.githubusercontent.com/tech-sohan/NumericalPython/main/data/mtcars.csv\n" + ], + "execution_count": 31, + "outputs": [ + { + "output_type": "stream", + "text": [ + "--2020-12-20 05:52:46-- https://raw.githubusercontent.com/tech-sohan/NumericalPython/main/data/mtcars.csv\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: 1783 (1.7K) [text/plain]\n", + "Saving to: ‘mtcars.csv.2’\n", + "\n", + "\rmtcars.csv.2 0%[ ] 0 --.-KB/s \rmtcars.csv.2 100%[===================>] 1.74K --.-KB/s in 0s \n", + "\n", + "2020-12-20 05:52:46 (17.2 MB/s) - ‘mtcars.csv.2’ saved [1783/1783]\n", + "\n" + ], + "name": "stdout" + } ] }, + { + "cell_type": "code", + "metadata": { + "id": "M-LKp_OrpFXL" + }, + "source": [ + "import pandas as pd\r\n", + "dfcars = pd.read_csv('mtcars.csv')" + ], + "execution_count": 32, + "outputs": [] + }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "9xf8PzVToP3s" + }, "source": [ "That first column is messed up. Lets fix it.\n", "\n", @@ -97,17 +156,159 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "7qOIzX5MoP3s", + "outputId": "36ddbb82-2994-44ba-8d48-63a026585c9a", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } + }, "source": [ "dfcars = dfcars.rename(columns={\"Unnamed: 0\": \"name\"})\n", "dfcars.head()" + ], + "execution_count": 33, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namempgcyldisphpdratwtqsecvsamgearcarb
0Mazda RX421.06160.01103.902.62016.460144
1Mazda RX4 Wag21.06160.01103.902.87517.020144
2Datsun 71022.84108.0933.852.32018.611141
3Hornet 4 Drive21.46258.01103.083.21519.441031
4Hornet Sportabout18.78360.01753.153.44017.020032
\n", + "
" + ], + "text/plain": [ + " name mpg cyl disp hp ... qsec vs am gear carb\n", + "0 Mazda RX4 21.0 6 160.0 110 ... 16.46 0 1 4 4\n", + "1 Mazda RX4 Wag 21.0 6 160.0 110 ... 17.02 0 1 4 4\n", + "2 Datsun 710 22.8 4 108.0 93 ... 18.61 1 1 4 1\n", + "3 Hornet 4 Drive 21.4 6 258.0 110 ... 19.44 1 0 3 1\n", + "4 Hornet Sportabout 18.7 8 360.0 175 ... 17.02 0 0 3 2\n", + "\n", + "[5 rows x 12 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 33 + } ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "1P27aqUhoP3t" + }, "source": [ "Columns in a dataframe (series) come with their own types. Some data may be categorical, that is, they come with only few well defined values. An example is cylinders (`cyl`). Cars may be 4, 6, or 8 cylindered. There is a ordered interpretation to this (8 cylinders more powerful engine than 6 cylinders) but also a one-of-three-types interpretation to this. \n", "\n", @@ -120,117 +321,622 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "KNxfYAKpoP3u", + "outputId": "7dcdb07a-082a-4add-e7fd-1dad4a5109e5", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, "source": [ - "# your code here\n" + "dfcars.dtypes" + ], + "execution_count": 34, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "name object\n", + "mpg float64\n", + "cyl int64\n", + "disp float64\n", + "hp int64\n", + "drat float64\n", + "wt float64\n", + "qsec float64\n", + "vs int64\n", + "am int64\n", + "gear int64\n", + "carb int64\n", + "dtype: object" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 34 + } ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "ZH6yIjIpoP3v" + }, "source": [ "Write code to get the unique values of car cylinders" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "VWaTvM7loP3v", + "outputId": "1ee97ee3-62c0-4aa9-e352-617e0b09fa3c", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, "source": [ - "# your code here\n" + "dfcars.cyl.unique()" + ], + "execution_count": 35, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([6, 4, 8])" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 35 + } ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "TuUsr83koP3w" + }, "source": [ "Write code to get the dataframe of the 6 and 8 cylinder cars" ] }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "AvJBOjGaoP3x", + "outputId": "ab72fbfc-5893-4e0d-ee66-7d52758a15e3", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 700 + } + }, "source": [ - "# your code here\n" + "dfcars[(dfcars['cyl'] == 6) | (dfcars['cyl'] == 8)]" + ], + "execution_count": 36, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namempgcyldisphpdratwtqsecvsamgearcarb
0Mazda RX421.06160.01103.902.62016.460144
1Mazda RX4 Wag21.06160.01103.902.87517.020144
3Hornet 4 Drive21.46258.01103.083.21519.441031
4Hornet Sportabout18.78360.01753.153.44017.020032
5Valiant18.16225.01052.763.46020.221031
6Duster 36014.38360.02453.213.57015.840034
9Merc 28019.26167.61233.923.44018.301044
10Merc 280C17.86167.61233.923.44018.901044
11Merc 450SE16.48275.81803.074.07017.400033
12Merc 450SL17.38275.81803.073.73017.600033
13Merc 450SLC15.28275.81803.073.78018.000033
14Cadillac Fleetwood10.48472.02052.935.25017.980034
15Lincoln Continental10.48460.02153.005.42417.820034
16Chrysler Imperial14.78440.02303.235.34517.420034
21Dodge Challenger15.58318.01502.763.52016.870032
22AMC Javelin15.28304.01503.153.43517.300032
23Camaro Z2813.38350.02453.733.84015.410034
24Pontiac Firebird19.28400.01753.083.84517.050032
28Ford Pantera L15.88351.02644.223.17014.500154
29Ferrari Dino19.76145.01753.622.77015.500156
30Maserati Bora15.08301.03353.543.57014.600158
\n", + "
" + ], + "text/plain": [ + " name mpg cyl disp hp ... qsec vs am gear carb\n", + "0 Mazda RX4 21.0 6 160.0 110 ... 16.46 0 1 4 4\n", + "1 Mazda RX4 Wag 21.0 6 160.0 110 ... 17.02 0 1 4 4\n", + "3 Hornet 4 Drive 21.4 6 258.0 110 ... 19.44 1 0 3 1\n", + "4 Hornet Sportabout 18.7 8 360.0 175 ... 17.02 0 0 3 2\n", + "5 Valiant 18.1 6 225.0 105 ... 20.22 1 0 3 1\n", + "6 Duster 360 14.3 8 360.0 245 ... 15.84 0 0 3 4\n", + "9 Merc 280 19.2 6 167.6 123 ... 18.30 1 0 4 4\n", + "10 Merc 280C 17.8 6 167.6 123 ... 18.90 1 0 4 4\n", + "11 Merc 450SE 16.4 8 275.8 180 ... 17.40 0 0 3 3\n", + "12 Merc 450SL 17.3 8 275.8 180 ... 17.60 0 0 3 3\n", + "13 Merc 450SLC 15.2 8 275.8 180 ... 18.00 0 0 3 3\n", + "14 Cadillac Fleetwood 10.4 8 472.0 205 ... 17.98 0 0 3 4\n", + "15 Lincoln Continental 10.4 8 460.0 215 ... 17.82 0 0 3 4\n", + "16 Chrysler Imperial 14.7 8 440.0 230 ... 17.42 0 0 3 4\n", + "21 Dodge Challenger 15.5 8 318.0 150 ... 16.87 0 0 3 2\n", + "22 AMC Javelin 15.2 8 304.0 150 ... 17.30 0 0 3 2\n", + "23 Camaro Z28 13.3 8 350.0 245 ... 15.41 0 0 3 4\n", + "24 Pontiac Firebird 19.2 8 400.0 175 ... 17.05 0 0 3 2\n", + "28 Ford Pantera L 15.8 8 351.0 264 ... 14.50 0 1 5 4\n", + "29 Ferrari Dino 19.7 6 145.0 175 ... 15.50 0 1 5 6\n", + "30 Maserati Bora 15.0 8 301.0 335 ... 14.60 0 1 5 8\n", + "\n", + "[21 rows x 12 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 36 + } ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "EH6XmYUsoP3y" + }, "source": [ "Write code to get the dataframe of cars with greter than 30mpg speeds" ] }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "3ZG9iaHPoP3y" + }, "source": [ - "dfcars[dfcars.mpg > 30]" - ] + "highspeed = dfcars[dfcars.mpg > 30]" + ], + "execution_count": 37, + "outputs": [] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "r8aF0ToLoP3z" + }, "source": [ "Save the high speed cars in a new csv file in data folder, ie in the file \"data/highspeed.csv\"" ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "lMyKEyTloP3z" + }, "source": [ - "# your code here\n" - ] + "highspeed.to_csv(\"highspeed.csv\", index=False)" + ], + "execution_count": 38, + "outputs": [] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "NHWoY4oDoP30" + }, "source": [ "Create a 2-D numpy array from the mpg and wt columns of `dfcars`" ] }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "NyyV-CJmoP30", + "outputId": "94a8689c-28b3-475f-9159-39b1316c54a7", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, "source": [ - "# your code here\n" + "wt_mpg = np.array(['wt', 'mpg'])\n", + "wt_mpg.T" + ], + "execution_count": 44, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array(['wt', 'mpg'], dtype=' Date: Sun, 20 Dec 2020 13:41:11 +0530 Subject: [PATCH 3/3] Created using Colaboratory --- distribute_lab3.ipynb | 614 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 564 insertions(+), 50 deletions(-) diff --git a/distribute_lab3.ipynb b/distribute_lab3.ipynb index 8542748..24e57fc 100644 --- a/distribute_lab3.ipynb +++ b/distribute_lab3.ipynb @@ -1,4 +1,6 @@ { + "nbformat": 4, + "nbformat_minor": 0, "metadata": { "kernelspec": { "display_name": "Python 3", @@ -16,37 +18,56 @@ "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" + }, + "colab": { + "name": "distribute_lab3.ipynb", + "provenance": [], + "include_colab_link": true } }, - "nbformat": 4, - "nbformat_minor": 4, "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "view-in-github", + "colab_type": "text" + }, + "source": [ + "\"Open" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jFJp4e9rB2D8" + }, "source": [ "# Lab3: Plotting" ] }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "6LWDnu9xB2EL" + }, "source": [ "%matplotlib inline\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt" - ] + ], + "execution_count": 32, + "outputs": [] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "z35Bz83pB2EM" + }, "source": [ "````` \n", "Description\n", - "The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and ten aspects of automobile design and performance for 32 automobiles (1973\u201374 models).\n", + "The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and ten aspects of automobile design and performance for 32 automobiles (1973–74 models).\n", "\n", "Format\n", "\n", @@ -65,82 +86,477 @@ "[,11]\tcarb\t Number of carburetors\n", " \n", "Source\n", - "Henderson and Velleman (1981), Building multiple regression models interactively. Biometrics, 37, 391\u2013411.\n", + "Henderson and Velleman (1981), Building multiple regression models interactively. Biometrics, 37, 391–411.\n", "`````" ] }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "eq-a97tjB2EQ", + "outputId": "6ee73c05-1fd3-4138-8064-19e0cf43f174", + "colab": { + "base_uri": "https://localhost:8080/" + } + }, + "source": [ + "!wget https://raw.githubusercontent.com/tech-sohan/NumericalPython/main/data/mtcars.csv" + ], + "execution_count": 33, + "outputs": [ + { + "output_type": "stream", + "text": [ + "--2020-12-20 07:52:51-- https://raw.githubusercontent.com/tech-sohan/NumericalPython/main/data/mtcars.csv\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: 1783 (1.7K) [text/plain]\n", + "Saving to: ‘mtcars.csv.3’\n", + "\n", + "\rmtcars.csv.3 0%[ ] 0 --.-KB/s \rmtcars.csv.3 100%[===================>] 1.74K --.-KB/s in 0s \n", + "\n", + "2020-12-20 07:52:51 (31.7 MB/s) - ‘mtcars.csv.3’ saved [1783/1783]\n", + "\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "vsaJ2IZ8B2EN", + "outputId": "e19a360e-46b2-44d2-f734-f8ffb48281fb", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } + }, "source": [ "# Read in the csv files\n", - "dfcars=pd.read_csv(\"data/mtcars.csv\")\n", + "dfcars=pd.read_csv(\"mtcars.csv\")\n", "dfcars.head()" + ], + "execution_count": 34, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Unnamed: 0mpgcyldisphpdratwtqsecvsamgearcarb
0Mazda RX421.06160.01103.902.62016.460144
1Mazda RX4 Wag21.06160.01103.902.87517.020144
2Datsun 71022.84108.0933.852.32018.611141
3Hornet 4 Drive21.46258.01103.083.21519.441031
4Hornet Sportabout18.78360.01753.153.44017.020032
\n", + "
" + ], + "text/plain": [ + " Unnamed: 0 mpg cyl disp hp ... qsec vs am gear carb\n", + "0 Mazda RX4 21.0 6 160.0 110 ... 16.46 0 1 4 4\n", + "1 Mazda RX4 Wag 21.0 6 160.0 110 ... 17.02 0 1 4 4\n", + "2 Datsun 710 22.8 4 108.0 93 ... 18.61 1 1 4 1\n", + "3 Hornet 4 Drive 21.4 6 258.0 110 ... 19.44 1 0 3 1\n", + "4 Hornet Sportabout 18.7 8 360.0 175 ... 17.02 0 0 3 2\n", + "\n", + "[5 rows x 12 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 34 + } ] }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "0rd3bOSwB2EO", + "outputId": "3adb5d09-ee96-42ea-d31f-aad58fb4bbd5", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } + }, "source": [ "dfcars = dfcars.rename(columns={\"Unnamed: 0\": \"name\"})\n", "dfcars.head()" + ], + "execution_count": 35, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
namempgcyldisphpdratwtqsecvsamgearcarb
0Mazda RX421.06160.01103.902.62016.460144
1Mazda RX4 Wag21.06160.01103.902.87517.020144
2Datsun 71022.84108.0933.852.32018.611141
3Hornet 4 Drive21.46258.01103.083.21519.441031
4Hornet Sportabout18.78360.01753.153.44017.020032
\n", + "
" + ], + "text/plain": [ + " name mpg cyl disp hp ... qsec vs am gear carb\n", + "0 Mazda RX4 21.0 6 160.0 110 ... 16.46 0 1 4 4\n", + "1 Mazda RX4 Wag 21.0 6 160.0 110 ... 17.02 0 1 4 4\n", + "2 Datsun 710 22.8 4 108.0 93 ... 18.61 1 1 4 1\n", + "3 Hornet 4 Drive 21.4 6 258.0 110 ... 19.44 1 0 3 1\n", + "4 Hornet Sportabout 18.7 8 360.0 175 ... 17.02 0 0 3 2\n", + "\n", + "[5 rows x 12 columns]" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 35 + } ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "RdBFNtkMB2EP" + }, "source": [ "From the `mpg` column, make a histogram using pandas. Label the x-and y-axes." ] }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "mu_IXc0UCIpn", + "outputId": "9c988579-ad57-4db7-f9b3-53be6acff2b9", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 295 + } + }, "source": [ - "# your code here\n" + "dfcars.mpg.hist()\r\n", + "plt.xlabel(\"Miles per gallon\")\r\n", + "plt.ylabel(\"Frequency\")\r\n", + "plt.title(\"MPG Histogram\");" + ], + "execution_count": 36, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "OJaMtOqMB2EQ" + }, "source": [ "Repeat the process using matplotlib, using 20 bins" ] }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "NS26chdnB2ER", + "outputId": "94af8d15-ad27-4f46-d23d-fd61dd492aab", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 295 + } + }, "source": [ - "# your code here\n" + "plt.hist(dfcars.mpg,bins=20)\n", + "plt.xlabel(\"Miles per gallon\")\n", + "plt.ylabel(\"Frequency\")\n", + "plt.title(\"MPG Histogram\");" + ], + "execution_count": 37, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "mHeSVEmVB2ES" + }, "source": [ "Add a red vertical line at the mean `mpg` over the dataset. See the docs for `plt.axvline`. Also add a legend to the picture. For this, make sure the `axvline` has a label keyword argument and add as the last line `plt.legend();`" ] }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "845YI83ZB2ET", + "outputId": "53037fa8-c0ce-4f3f-f7d7-4245d6fb20b4", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 295 + } + }, "source": [ - "# your code here\n" + "import matplotlib.pyplot as plt\n", + "plt.hist(dfcars.mpg,bins=20)\n", + "plt.xlabel(\"Miles per gallon\")\n", + "plt.ylabel(\"Frequency\")\n", + "plt.title(\"MPG Histogram\")\n", + "plt.axvline(dfcars.mpg.mean(),0,1,color='red',label=\"Mean Line\");" + ], + "execution_count": 45, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "yzywtU34B2ET" + }, "source": [ "### Scatter plots\n", "We often want to see co-variation among our columns, for example, miles/gallon versus weight. This can be done with a scatter plot. Plot weight on the x-axis against miles per gallon on the y axis." @@ -148,63 +564,161 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "GjuLvyDmB2EU", + "outputId": "f50ecc31-cbaa-4e20-cc5c-238731ed396b", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 283 + } + }, "source": [ "plt.scatter(dfcars.wt, dfcars.mpg);\n", "plt.xlabel(\"weight\");\n", "plt.ylabel(\"miles per gallon\");" + ], + "execution_count": 39, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "1oxxqllbB2EU" + }, "source": [ "Use `plt.plot` to do this plot instead:" ] }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "vKi9wD_aB2EU", + "outputId": "12e5d24d-bae5-4e4b-c579-5bbc82ae7a7a", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 283 + } + }, "source": [ "plt.plot(dfcars.wt, dfcars.mpg);\n", "plt.xlabel(\"weight\");\n", "plt.ylabel(\"miles per gallon\");" + ], + "execution_count": 40, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "TlGVcAPmB2EV" + }, "source": [ "Fix this plot to not look like spagetti" ] }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "VlnH1tpyB2EV", + "outputId": "16dbc353-86f2-454f-c0f4-0fd53327d9b4", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 283 + } + }, "source": [ - "# your code here\n" + "new_df = dfcars[['wt', 'mpg']]\n", + "sort_df = new_df.sort_values('wt')\n", + "plt.plot(sort_df.wt, sort_df.mpg, 'bo');\n", + "plt.xlabel(\"weight\");\n", + "plt.ylabel(\"miles per gallon\");" + ], + "execution_count": 49, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "MITC2Ci1B2EW" + }, "source": [ "What if you wanted to have the lines shown in the previous plot. What manipulation would you need to make to the dataframe to make this happen?" ] }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], + "metadata": { + "id": "rlC9OkmLB2EW", + "outputId": "00128477-0319-40f0-dae3-f1b5cf3ace1c", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 283 + } + }, "source": [ - "# your code here\n" + "new_df = dfcars[['wt', 'mpg']]\n", + "sort_df = new_df.sort_values('wt')\n", + "plt.plot(sort_df.wt, sort_df.mpg, 'ro-');\n", + "plt.xlabel(\"weight\");\n", + "plt.ylabel(\"miles per gallon\");" + ], + "execution_count": 50, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "tags": [], + "needs_background": "light" + } + } ] } ]