├── README.md └── PandasByMLM.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Python-Course-PL-II 2 | 3 | **Vision, Mission and PEOs Vision of the Institute** 4 | 5 | To achieve excellence in engineering education with strong ethical values. 6 | 7 | **Mission of the Institute** 8 | 9 | To impart high quality Technical Education through : 10 | 11 | *Innovative and Interactive learning process and high quality, internationally recognized instructional programs. 12 | 13 | *Fostering a scientific temper among students by the means of a liaison with the Academia, Industries and Government. 14 | 15 | *Preparing students from diverse backgrounds to have aptitude for research and spirit of Professionalism. 16 | 17 | *Inculcating in students a respect for fellow human beings and responsibility towards the society. 18 | 19 | **Vision of the Department** 20 | 21 | To provide prominent computer engineering education with socio-moral values.​ 22 | 23 | **Mission of the Department** 24 | 25 | M1- To provide state-of-the-art ICT based teaching-learning process. 26 | 27 | M2- To groom the students to become professionally sound computer engineers to meet growing needs of industry and society. 28 | 29 | M3- To make the students responsible human being by inculcating ethical values. 30 | 31 | **Program Educational Objectives (PEOs) of the Department** 32 | 33 | PEO 1 – To provide the foundation of lifelong learning skills for advancing their careers being a professional, entrepreneur and leader. 34 | 35 | PEO 2 – To develop computer professionals to fulfill industry expectations. 36 | 37 | PEO 3 – To foster ethical and social values to be socially responsible human being. 38 | -------------------------------------------------------------------------------- /PandasByMLM.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [] 7 | }, 8 | "kernelspec": { 9 | "name": "python3", 10 | "display_name": "Python 3" 11 | }, 12 | "language_info": { 13 | "name": "python" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "markdown", 19 | "source": [ 20 | "**Pandas Introduction**\n", 21 | "\n", 22 | "The name of Pandas is gotten from the word Board Information, and that implies an Econometrics from Multi-faceted information. It was created in 2008 by Wes McKinney and is used for data analysis in Python.\n", 23 | "\n", 24 | "Processing, such as restructuring, cleaning, merging, etc., is necessary for data analysis. Numpy, Scipy, Cython, and Panda are just a few of the fast data processing tools available. Yet, we incline toward Pandas since working with Pandas is quick, basic and more expressive than different apparatuses.\n", 25 | "\n", 26 | "**Key Features of Pandas**\n", 27 | "\n", 28 | "-It has a DataFrame object that is quick and effective, with both standard and custom indexing.\n", 29 | "\n", 30 | "-Utilized for reshaping and turning of the informational indexes.\n", 31 | "\n", 32 | "-For aggregations and transformations, group by data.\n", 33 | "\n", 34 | "-It is used to align the data and integrate the data that is missing.\n", 35 | "\n", 36 | "-Provide Time Series functionality.\n", 37 | "\n", 38 | "-Process a variety of data sets in various formats, such as matrix data, heterogeneous tabular data, and time series.\n", 39 | "\n", 40 | "-Manage the data sets' multiple operations, including subsetting, slicing, filtering, groupBy, reordering, and reshaping.\n", 41 | "\n", 42 | "-It incorporates with different libraries like SciPy, and scikit-learn.\n", 43 | "\n", 44 | "-Performs quickly, and the Cython can be used to accelerate it even further.\n", 45 | "\n", 46 | "**Benefits of Pandas**\n", 47 | "\n", 48 | "The following are the advantages of pandas overusing other languages:\n", 49 | "\n", 50 | "**Representation of Data:**\n", 51 | " Through its DataFrame and Series, it presents the data in a manner that is appropriate for data analysis.\n", 52 | "\n", 53 | "**Clear code:**\n", 54 | "Pandas' clear API lets you concentrate on the most important part of the code. In this way, it gives clear and brief code to the client.\n", 55 | "\n", 56 | "DataFrame and Series are the two data structures that Pandas provides for processing data. These data structures are discussed below:\n", 57 | "\n", 58 | "**Install and import**\n", 59 | "\n", 60 | "Pandas is an easy package to install. Open up your terminal program (for Mac users) or command line (for PC users) and install it using either of the following commands:\n", 61 | "\n", 62 | "`conda install pandas`\n", 63 | "\n", 64 | "OR\n", 65 | "\n", 66 | "`pip install pandas`\n", 67 | "\n", 68 | "Alternatively, if you're currently viewing this article in a Jupyter notebook you can run this cell:\n", 69 | "\n", 70 | "`!pip install pandas`\n", 71 | "\n", 72 | "Core components of pandas: **Series and DataFrames**\n", 73 | "\n", 74 | "The primary two components of pandas are the Series and DataFrame.\n", 75 | "\n", 76 | "A Series is essentially a column, and a DataFrame is a multi-dimensional table made up of a collection of Series.\n", 77 | "![series-and-dataframe.width-1200.png](data:image/png;base64,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syzr6OjYuXNnNzc36z80Qujo0aOXL182dkfqdLrXXnstKCjI+DSNRpOZmRkVFZWcnCwSiQRfYcuWLQMCAqzx6JWVlWVlZUVGRubn5wvlEB4e3rx5czc3t3rtO1bT2DU/P//ixYsVFRWCZfb392/btq2bm1u9eq5HAP8CMXLkSIvvuH///sf0i8XFxVOnTrWzs7OytH18fFatWlXnbXv06GF+7bVr13ier6ioeP/9903Mk7e3d0lJifEdJk+ebH6HjRs31vnTQlqe2icoTITX3r1767wtx3HLly93dna28rZSqfT111+/cuUKDzzbvPfeexa/4PHjx+t1H5qm1Wq1lScXFBTMmzfP39+/9lpEEETjxo1//vlnwc1cOxZ3OTh9+rTw1/T09LfffttY1js4OGRmZhrfwWLipt9//92aN0pOTp46dWqdLgaKokJCQtasWaPT6ay5bVVV1R9//NGkSZM6FY+3t/fHH38cHR0NVfoFZurUqeZff/z48fW9z9KlS2vqI7744os6L1er1cePH//ss8+aN2+uVCrNU7dJJBKFQhESEvLdd9/duXOnlluVlpauX79+zZo1GzZsWLhwoXlf7OHhsXLlyvXr1681YvXq1Rs3biwtLa3lzvn5+Rs3bnzjjTfc3d2VSqW5R9zGxsbOzq5fv34rV66sqKiwptyOHj1qXmIeHh5arfbhP+6NGzfMh/TBwcHGNnbPnj1DhgyxtbUVXmfcuHEWb5Wdnb1mzZoRI0a4uLgolUqT22KM5XK5g4PDyy+/vGHDBivttsXEuMaaJDY29tNPP23SpImNjY3xWIskSblcHhYW9ueff9ZSzpcuXXr33XednJzkcrmxxBfqUp8+ffbt28dx3AMUbEFBwbJly/r27Wtra2tSV4Vnc3JyGj58+L///is4Up8AL5Rwf/PNNy2akldfffVx/NzVq1dDQkIeYLD03nvv1d5QLQr3mzdvarXaTp06mf/pUQn3AwcO+Pj41HvWhqJmz55d+50tPo81d96wYQN0t88ykyZNqmne/DH94n///efl5VWvihQYGBgZGVn7bV999dWahPvhw4fN16mbC/dvvvnmAYQ7x3FLliyxtbWt1xv16NEjKSmp9jvfuXOna9eu9bqtWCwePXr0rVu3oGKDcK+dxYsXW6xCTk5OqampNV1VUlLy+++/N2nSxHovuEKhmD17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Saxs7/VtdCa+yZCQkD179owfP15QSLWTmpr65ZdfbtiwYd26daGhoVBjASspLy+Pj483P25xB7SVK1fOnDkzLy/vWX6dr776av369Y+jkdaEjY3N6NGjKYqy0tCxLGtvb1/T3u0mODs7WwxoMaegoODzzz/funXrk1xyZu6irkkQm0tqGxsbixv3WrzcmtMszh3p9Xpzz5H1VFRU1DfoH4R7HWCMe/TocezYsY8++mjlypXmJ+Tm5sbHxxs67wfboa1OrJzGehzy5XG8EcbY4tTnp59++tprr23evHnz5s1CIr/a7/PHH39IJJJffvkFescXBqVS+fLLL7/88st79uz58MMPzac+EULXrl2LiYl5HK5uE6X7gpWt+Ru1a9fu1KlTixYt2rx5c+2ud4EbN24MGjRo7969D7/xO9BAuHLlSkpKivlxk51xEEJz58797rvvnuV3UalUI0eOPHbs2CPpBK0/2c7ObtmyZY/JMScSiaxZbFBcXPzKK69cvnz5CZd5fWN4TAr5YS5/Ypgv8APh/mhq9u+//x4XF3fhwgWLw1Dj0aF5pJSbm1uLFi0eTAcImX0sZqt9MlgcsPr7+/v7+1s5E2cCwzBOTk41TQx5e3t/9dVXn3zySVRU1OHDhw8cOCDs/FrT3X777bdXXnnlAZIMAs84Q4YM8fDwGDBggEUnR3JyskG4K5VKiqIeuRPIym7ycYyWrXSV1bcPszgId3FxWbBgwbRp0/bv379x48br168XFRXVcp+CgoIxY8acO3fO4vY3AGDCP//8Y37Q2dm5ffv2xkf279//qFT74xtyf/31149EtSNL8dNPCyst2JQpUx6Van+SPpFHa58ffjm1ReqV/6chCveTJ09ev379s88+q298hVQqHTx4cJ3C3cPDQyQSmcybuLm5HT582Dik+znCYvccHBy8d+/ex/ejMpmsa9euXbt2/f777+Pj4/fu3btt27Zbt26ZN3iGYbZu3QrC/VlGpVJVVFTUnpDLImFhYe+++67FGZWSkhLDvx0cHMRisYlwb9Gixc8//0xR1IN1EizLtmzZ8mmVmMWtl3v27DljxowHm5PleZ6iqFpmjR0dHcePHz9+/PjMzMxz587t37//6NGjJSUlFru9lJSUVatWzZw5E+o2UDuRkZEWk2SHhYUZJ0BjGMZidXJxcRk9enT79u1dXFzMG7JI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)" 78 | ], 79 | "metadata": { 80 | "id": "tEc4CSjPh2ME" 81 | } 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": null, 86 | "metadata": { 87 | "id": "gdK1wbTThokG" 88 | }, 89 | "outputs": [], 90 | "source": [ 91 | "!pip install pandas" 92 | ] 93 | }, 94 | { 95 | "cell_type": "markdown", 96 | "source": [ 97 | "**Pandas as pd**\n", 98 | "\n", 99 | "Pandas is usually imported under the pd alias." 100 | ], 101 | "metadata": { 102 | "id": "GxeYcuZjmwvA" 103 | } 104 | }, 105 | { 106 | "cell_type": "code", 107 | "source": [ 108 | "import pandas as pd\n", 109 | "\n", 110 | "mydataset = {\n", 111 | " 'cars': [\"BMW\", \"Volvo\", \"Ford\"],\n", 112 | " 'passings': [3, 7, 2]\n", 113 | "}\n", 114 | "\n", 115 | "myvar = pd.DataFrame(mydataset)\n", 116 | "\n", 117 | "print(myvar)" 118 | ], 119 | "metadata": { 120 | "id": "iM3QwN3fxGvq", 121 | "colab": { 122 | "base_uri": "https://localhost:8080/" 123 | }, 124 | "outputId": "18b75eb8-d065-40d4-f806-060c04e3047c" 125 | }, 126 | "execution_count": 1, 127 | "outputs": [ 128 | { 129 | "output_type": "stream", 130 | "name": "stdout", 131 | "text": [ 132 | " cars passings\n", 133 | "0 BMW 3\n", 134 | "1 Volvo 7\n", 135 | "2 Ford 2\n" 136 | ] 137 | } 138 | ] 139 | }, 140 | { 141 | "cell_type": "markdown", 142 | "source": [ 143 | "**What is a Series?**\n", 144 | "\n", 145 | "A Pandas Series is like a column in a table.\n", 146 | "\n", 147 | "It is a one-dimensional array holding data of any type." 148 | ], 149 | "metadata": { 150 | "id": "QRaaOzONxUe4" 151 | } 152 | }, 153 | { 154 | "cell_type": "code", 155 | "source": [ 156 | "import pandas as pd\n", 157 | "\n", 158 | "a = [1, 7, 2]\n", 159 | "\n", 160 | "myvar = pd.Series(a)\n", 161 | "\n", 162 | "print(myvar)" 163 | ], 164 | "metadata": { 165 | "id": "J3g4mmhexW1b", 166 | "colab": { 167 | "base_uri": "https://localhost:8080/" 168 | }, 169 | "outputId": "23f94146-d729-4006-9d06-6011a5820d68" 170 | }, 171 | "execution_count": 2, 172 | "outputs": [ 173 | { 174 | "output_type": "stream", 175 | "name": "stdout", 176 | "text": [ 177 | "0 1\n", 178 | "1 7\n", 179 | "2 2\n", 180 | "dtype: int64\n" 181 | ] 182 | } 183 | ] 184 | }, 185 | { 186 | "cell_type": "markdown", 187 | "source": [ 188 | "**Labels**\n", 189 | "\n", 190 | "If nothing else is specified, the values are labeled with their index number. First value has index 0, second value has index 1 etc.\n", 191 | "\n", 192 | "This label can be used to access a specified value." 193 | ], 194 | "metadata": { 195 | "id": "kQD5gMbuxoPp" 196 | } 197 | }, 198 | { 199 | "cell_type": "code", 200 | "source": [ 201 | "print(myvar[0])" 202 | ], 203 | "metadata": { 204 | "id": "6Qz3OB5kxtzB", 205 | "colab": { 206 | "base_uri": "https://localhost:8080/" 207 | }, 208 | "outputId": "cab5ae52-dc55-4b3d-f314-3871c9803c3a" 209 | }, 210 | "execution_count": 3, 211 | "outputs": [ 212 | { 213 | "output_type": "stream", 214 | "name": "stdout", 215 | "text": [ 216 | "1\n" 217 | ] 218 | } 219 | ] 220 | }, 221 | { 222 | "cell_type": "markdown", 223 | "source": [ 224 | "**Create Labels**\n", 225 | "\n", 226 | "With the index argument, you can name your own labels." 227 | ], 228 | "metadata": { 229 | "id": "At7mvmO1xv5Z" 230 | } 231 | }, 232 | { 233 | "cell_type": "code", 234 | "source": [ 235 | "import pandas as pd\n", 236 | "\n", 237 | "a = [1, 7, 2]\n", 238 | "\n", 239 | "myvar = pd.Series(a, index = [\"x\", \"y\", \"z\"])\n", 240 | "\n", 241 | "print(myvar)" 242 | ], 243 | "metadata": { 244 | "id": "5zzizT5px0b4", 245 | "colab": { 246 | "base_uri": "https://localhost:8080/" 247 | }, 248 | "outputId": "0f125c58-ebf2-4b58-8816-9c4ad0cedd66" 249 | }, 250 | "execution_count": 4, 251 | "outputs": [ 252 | { 253 | "output_type": "stream", 254 | "name": "stdout", 255 | "text": [ 256 | "x 1\n", 257 | "y 7\n", 258 | "z 2\n", 259 | "dtype: int64\n" 260 | ] 261 | } 262 | ] 263 | }, 264 | { 265 | "cell_type": "markdown", 266 | "source": [ 267 | "When you have created labels, you can access an item by referring to the label." 268 | ], 269 | "metadata": { 270 | "id": "mE7rBOQPx1i5" 271 | } 272 | }, 273 | { 274 | "cell_type": "code", 275 | "source": [ 276 | "print(myvar[\"y\"])" 277 | ], 278 | "metadata": { 279 | "id": "7-N8teo6x5i5", 280 | "colab": { 281 | "base_uri": "https://localhost:8080/" 282 | }, 283 | "outputId": "d9818e2a-d8b3-4104-88b7-47fb78f0381a" 284 | }, 285 | "execution_count": 5, 286 | "outputs": [ 287 | { 288 | "output_type": "stream", 289 | "name": "stdout", 290 | "text": [ 291 | "7\n" 292 | ] 293 | } 294 | ] 295 | }, 296 | { 297 | "cell_type": "markdown", 298 | "source": [ 299 | "**Key/Value Objects as Series**\n", 300 | "\n", 301 | "You can also use a key/value object, like a dictionary, when creating a Series." 302 | ], 303 | "metadata": { 304 | "id": "tBg6FJOQx7Uw" 305 | } 306 | }, 307 | { 308 | "cell_type": "code", 309 | "source": [ 310 | "import pandas as pd\n", 311 | "\n", 312 | "calories = {\"day1\": 420, \"day2\": 380, \"day3\": 390}\n", 313 | "\n", 314 | "myvar = pd.Series(calories)\n", 315 | "\n", 316 | "print(myvar)" 317 | ], 318 | "metadata": { 319 | "id": "0qevUVNPx_Bp" 320 | }, 321 | "execution_count": null, 322 | "outputs": [] 323 | }, 324 | { 325 | "cell_type": "markdown", 326 | "source": [ 327 | "To select only some of the items in the dictionary, use the index argument and specify only the items you want to include in the Series." 328 | ], 329 | "metadata": { 330 | "id": "xufaS13oyBDK" 331 | } 332 | }, 333 | { 334 | "cell_type": "code", 335 | "source": [ 336 | "import pandas as pd\n", 337 | "\n", 338 | "calories = {\"day1\": 420, \"day2\": 380, \"day3\": 390}\n", 339 | "\n", 340 | "myvar = pd.Series(calories, index = [\"day1\", \"day2\"])\n", 341 | "\n", 342 | "print(myvar)" 343 | ], 344 | "metadata": { 345 | "id": "5jJyF9u4yDQR" 346 | }, 347 | "execution_count": null, 348 | "outputs": [] 349 | }, 350 | { 351 | "cell_type": "markdown", 352 | "source": [ 353 | "**DataFrames**\n", 354 | "\n", 355 | "Data sets in Pandas are usually multi-dimensional tables, called DataFrames.\n", 356 | "\n", 357 | "Series is like a column, a DataFrame is the whole table." 358 | ], 359 | "metadata": { 360 | "id": "2Ue5Kd9KyGe5" 361 | } 362 | }, 363 | { 364 | "cell_type": "code", 365 | "source": [ 366 | "import pandas as pd\n", 367 | "\n", 368 | "data = {\n", 369 | " \"calories\": [420, 380, 390],\n", 370 | " \"duration\": [50, 40, 45]\n", 371 | "}\n", 372 | "\n", 373 | "myvar = pd.DataFrame(data)\n", 374 | "\n", 375 | "print(myvar)" 376 | ], 377 | "metadata": { 378 | "id": "ecM9z8e0yKC6" 379 | }, 380 | "execution_count": null, 381 | "outputs": [] 382 | }, 383 | { 384 | "cell_type": "markdown", 385 | "source": [ 386 | "**What is a DataFrame?**\n", 387 | "\n", 388 | "A Pandas DataFrame is a 2 dimensional data structure, like a 2 dimensional array, or a table with rows and columns." 389 | ], 390 | "metadata": { 391 | "id": "fZASC2bYyNbR" 392 | } 393 | }, 394 | { 395 | "cell_type": "code", 396 | "source": [ 397 | "import pandas as pd\n", 398 | "\n", 399 | "data = {\n", 400 | " \"calories\": [420, 380, 390],\n", 401 | " \"duration\": [50, 40, 45]\n", 402 | "}\n", 403 | "\n", 404 | "#load data into a DataFrame object:\n", 405 | "df = pd.DataFrame(data)\n", 406 | "\n", 407 | "print(df)" 408 | ], 409 | "metadata": { 410 | "id": "RwW5JumIyT1J" 411 | }, 412 | "execution_count": null, 413 | "outputs": [] 414 | }, 415 | { 416 | "cell_type": "markdown", 417 | "source": [ 418 | "**Locate Row**\n", 419 | "\n", 420 | "As you can see from the result above, the DataFrame is like a table with rows and columns.\n", 421 | "\n", 422 | "Pandas use the loc attribute to return one or more specified row(s)" 423 | ], 424 | "metadata": { 425 | "id": "h3cTUKoyyUqx" 426 | } 427 | }, 428 | { 429 | "cell_type": "code", 430 | "source": [ 431 | "#refer to the row index:\n", 432 | "print(df.loc[0])" 433 | ], 434 | "metadata": { 435 | "id": "qCkOWOm9yYPS" 436 | }, 437 | "execution_count": null, 438 | "outputs": [] 439 | }, 440 | { 441 | "cell_type": "code", 442 | "source": [ 443 | "#use a list of indexes:\n", 444 | "print(df.loc[[0, 1]])" 445 | ], 446 | "metadata": { 447 | "id": "23AgoBrSyeGB" 448 | }, 449 | "execution_count": null, 450 | "outputs": [] 451 | }, 452 | { 453 | "cell_type": "markdown", 454 | "source": [ 455 | "**Named Indexes**\n", 456 | "\n", 457 | "With the index argument, you can name your own indexes." 458 | ], 459 | "metadata": { 460 | "id": "E3ml6fouybqb" 461 | } 462 | }, 463 | { 464 | "cell_type": "code", 465 | "source": [ 466 | "import pandas as pd\n", 467 | "\n", 468 | "data = {\n", 469 | " \"calories\": [420, 380, 390],\n", 470 | " \"duration\": [50, 40, 45]\n", 471 | "}\n", 472 | "\n", 473 | "df = pd.DataFrame(data, index = [\"day1\", \"day2\", \"day3\"])\n", 474 | "\n", 475 | "print(df)" 476 | ], 477 | "metadata": { 478 | "id": "gDt2OS34yjli" 479 | }, 480 | "execution_count": null, 481 | "outputs": [] 482 | }, 483 | { 484 | "cell_type": "markdown", 485 | "source": [ 486 | "**Locate Named Indexes**\n", 487 | "\n", 488 | "Use the named index in the loc attribute to return the specified row(s)." 489 | ], 490 | "metadata": { 491 | "id": "3kxOKSmuykqx" 492 | } 493 | }, 494 | { 495 | "cell_type": "code", 496 | "source": [ 497 | "#refer to the named index:\n", 498 | "print(df.loc[\"day2\"])" 499 | ], 500 | "metadata": { 501 | "id": "tiFeiG7_yquq" 502 | }, 503 | "execution_count": null, 504 | "outputs": [] 505 | }, 506 | { 507 | "cell_type": "markdown", 508 | "source": [ 509 | "**Load Files Into a DataFrame**\n", 510 | "\n", 511 | "If your data sets are stored in a file, Pandas can load them into a DataFrame." 512 | ], 513 | "metadata": { 514 | "id": "XYxL0KggypKY" 515 | } 516 | }, 517 | { 518 | "cell_type": "code", 519 | "source": [ 520 | "import pandas as pd\n", 521 | "\n", 522 | "df = pd.read_csv('data.csv')\n", 523 | "\n", 524 | "print(df)" 525 | ], 526 | "metadata": { 527 | "id": "7UwzIDzVyvVx" 528 | }, 529 | "execution_count": null, 530 | "outputs": [] 531 | }, 532 | { 533 | "cell_type": "markdown", 534 | "source": [ 535 | "**Read CSV Files**\n", 536 | "\n", 537 | "A simple way to store big data sets is to use CSV files (comma separated files).\n", 538 | "\n", 539 | "CSV files contains plain text and is a well know format that can be read by everyone including Pandas.\n", 540 | "\n", 541 | "In our examples we will be using a CSV file called 'data.csv'." 542 | ], 543 | "metadata": { 544 | "id": "8M-ZQ7VQyxWJ" 545 | } 546 | }, 547 | { 548 | "cell_type": "code", 549 | "source": [ 550 | "import pandas as pd\n", 551 | "\n", 552 | "df = pd.read_csv('data.csv')\n", 553 | "\n", 554 | "print(df.to_string())" 555 | ], 556 | "metadata": { 557 | "id": "FLaaHFcPy2aY" 558 | }, 559 | "execution_count": null, 560 | "outputs": [] 561 | }, 562 | { 563 | "cell_type": "markdown", 564 | "source": [ 565 | "If you have a large DataFrame with many rows, Pandas will only return the first 5 rows, and the last 5 rows:" 566 | ], 567 | "metadata": { 568 | "id": "CWP4or5Uy-TY" 569 | } 570 | }, 571 | { 572 | "cell_type": "code", 573 | "source": [ 574 | "import pandas as pd\n", 575 | "\n", 576 | "df = pd.read_csv('data.csv')\n", 577 | "\n", 578 | "print(df)" 579 | ], 580 | "metadata": { 581 | "id": "xH10A-PLy494" 582 | }, 583 | "execution_count": null, 584 | "outputs": [] 585 | }, 586 | { 587 | "cell_type": "markdown", 588 | "source": [ 589 | "**max_rows**\n", 590 | "\n", 591 | "The number of rows returned is defined in Pandas option settings.\n", 592 | "\n", 593 | "You can check your system's maximum rows with the pd.options.display.max_rows statement." 594 | ], 595 | "metadata": { 596 | "id": "EmtD9Ssky_SI" 597 | } 598 | }, 599 | { 600 | "cell_type": "code", 601 | "source": [ 602 | "import pandas as pd\n", 603 | "\n", 604 | "print(pd.options.display.max_rows)" 605 | ], 606 | "metadata": { 607 | "id": "Mtn5RGItzJkQ" 608 | }, 609 | "execution_count": null, 610 | "outputs": [] 611 | }, 612 | { 613 | "cell_type": "markdown", 614 | "source": [ 615 | "You can change the maximum rows number with the same statement." 616 | ], 617 | "metadata": { 618 | "id": "zSGCxTT9zQAn" 619 | } 620 | }, 621 | { 622 | "cell_type": "code", 623 | "source": [ 624 | "import pandas as pd\n", 625 | "\n", 626 | "pd.options.display.max_rows = 9999\n", 627 | "\n", 628 | "df = pd.read_csv('data.csv')\n", 629 | "\n", 630 | "print(df)" 631 | ], 632 | "metadata": { 633 | "id": "Iuu2hCLszTsP" 634 | }, 635 | "execution_count": null, 636 | "outputs": [] 637 | }, 638 | { 639 | "cell_type": "markdown", 640 | "source": [ 641 | "# **Read JSON**\n", 642 | "\n", 643 | "Big data sets are often stored, or extracted as JSON.\n", 644 | "\n", 645 | "JSON is plain text, but has the format of an object, and is well known in the world of programming, including Pandas.\n", 646 | "\n", 647 | "In our examples we will be using a JSON file called 'data.json'." 648 | ], 649 | "metadata": { 650 | "id": "ssy0VXOhzhr3" 651 | } 652 | }, 653 | { 654 | "cell_type": "code", 655 | "source": [ 656 | "import pandas as pd\n", 657 | "\n", 658 | "df = pd.read_json('data.json')\n", 659 | "\n", 660 | "print(df.to_string())" 661 | ], 662 | "metadata": { 663 | "id": "mU4F5TXpzmJQ" 664 | }, 665 | "execution_count": null, 666 | "outputs": [] 667 | }, 668 | { 669 | "cell_type": "markdown", 670 | "source": [ 671 | "If your JSON code is not in a file, but in a Python Dictionary, you can load it into a DataFrame directly:" 672 | ], 673 | "metadata": { 674 | "id": "hAJupDUR2WoE" 675 | } 676 | }, 677 | { 678 | "cell_type": "code", 679 | "source": [ 680 | "import pandas as pd\n", 681 | "\n", 682 | "data = {\n", 683 | " \"Duration\":{\n", 684 | " \"0\":60,\n", 685 | " \"1\":60,\n", 686 | " \"2\":60,\n", 687 | " \"3\":45,\n", 688 | " \"4\":45,\n", 689 | " \"5\":60\n", 690 | " },\n", 691 | " \"Pulse\":{\n", 692 | " \"0\":110,\n", 693 | " \"1\":117,\n", 694 | " \"2\":103,\n", 695 | " \"3\":109,\n", 696 | " \"4\":117,\n", 697 | " \"5\":102\n", 698 | " },\n", 699 | " \"Maxpulse\":{\n", 700 | " \"0\":130,\n", 701 | " \"1\":145,\n", 702 | " \"2\":135,\n", 703 | " \"3\":175,\n", 704 | " \"4\":148,\n", 705 | " \"5\":127\n", 706 | " },\n", 707 | " \"Calories\":{\n", 708 | " \"0\":409,\n", 709 | " \"1\":479,\n", 710 | " \"2\":340,\n", 711 | " \"3\":282,\n", 712 | " \"4\":406,\n", 713 | " \"5\":300\n", 714 | " }\n", 715 | "}\n", 716 | "\n", 717 | "df = pd.DataFrame(data)\n", 718 | "\n", 719 | "print(df)" 720 | ], 721 | "metadata": { 722 | "id": "GOPLyBlS2X-z" 723 | }, 724 | "execution_count": null, 725 | "outputs": [] 726 | }, 727 | { 728 | "cell_type": "markdown", 729 | "source": [ 730 | "Viewing the Data\n", 731 | "One of the most used method for getting a quick overview of the DataFrame, is the head() method.\n", 732 | "\n", 733 | "The head() method returns the headers and a specified number of rows, starting from the top." 734 | ], 735 | "metadata": { 736 | "id": "Jd5un6u82kGk" 737 | } 738 | }, 739 | { 740 | "cell_type": "code", 741 | "source": [ 742 | "import pandas as pd\n", 743 | "\n", 744 | "df = pd.read_csv('data.csv')\n", 745 | "\n", 746 | "print(df.head(10))" 747 | ], 748 | "metadata": { 749 | "id": "_RbP2dw32k_k" 750 | }, 751 | "execution_count": null, 752 | "outputs": [] 753 | }, 754 | { 755 | "cell_type": "markdown", 756 | "source": [ 757 | "***Refer moodle for dataset file***" 758 | ], 759 | "metadata": { 760 | "id": "qE7zheZG2nBV" 761 | } 762 | }, 763 | { 764 | "cell_type": "code", 765 | "source": [ 766 | "import pandas as pd\n", 767 | "\n", 768 | "df = pd.read_csv('data.csv')\n", 769 | "\n", 770 | "print(df.head())" 771 | ], 772 | "metadata": { 773 | "id": "knuDN7P823t7" 774 | }, 775 | "execution_count": null, 776 | "outputs": [] 777 | }, 778 | { 779 | "cell_type": "markdown", 780 | "source": [ 781 | "There is also a tail() method for viewing the last rows of the DataFrame.\n", 782 | "\n", 783 | "The tail() method returns the headers and a specified number of rows, starting from the bottom." 784 | ], 785 | "metadata": { 786 | "id": "Tb_Bpdwl27MD" 787 | } 788 | }, 789 | { 790 | "cell_type": "code", 791 | "source": [ 792 | "print(df.tail())" 793 | ], 794 | "metadata": { 795 | "id": "WxJe8LCQ29bb" 796 | }, 797 | "execution_count": null, 798 | "outputs": [] 799 | }, 800 | { 801 | "cell_type": "markdown", 802 | "source": [ 803 | "**Info About the Data**\n", 804 | "\n", 805 | "The DataFrames object has a method called info(), that gives you more information about the data set." 806 | ], 807 | "metadata": { 808 | "id": "rOua88zc2_4L" 809 | } 810 | }, 811 | { 812 | "cell_type": "code", 813 | "source": [ 814 | "print(df.info())" 815 | ], 816 | "metadata": { 817 | "id": "8UidciRB3D54" 818 | }, 819 | "execution_count": null, 820 | "outputs": [] 821 | }, 822 | { 823 | "cell_type": "markdown", 824 | "source": [ 825 | "**Data Cleaning**\n", 826 | "\n", 827 | "Data cleaning means fixing bad data in your data set.\n", 828 | "\n", 829 | "Bad data could be:\n", 830 | "\n", 831 | "Empty cells\n", 832 | "\n", 833 | "Data in wrong format\n", 834 | "\n", 835 | "Wrong data\n", 836 | "\n", 837 | "Duplicates\n", 838 | "\n", 839 | "\n", 840 | "\n", 841 | "```\n", 842 | "data set contains some empty cells (\"Date\" in row 22, and \"Calories\" in row 18 and 28).\n", 843 | "\n", 844 | "The data set contains wrong format (\"Date\" in row 26).\n", 845 | "\n", 846 | "The data set contains wrong data (\"Duration\" in row 7).\n", 847 | "\n", 848 | "The data set contains duplicates (row 11 and 12).\n", 849 | "```\n", 850 | "\n" 851 | ], 852 | "metadata": { 853 | "id": "rijrGgvT3EjE" 854 | } 855 | }, 856 | { 857 | "cell_type": "markdown", 858 | "source": [ 859 | "**Empty Cells**\n", 860 | "\n", 861 | "Empty cells can potentially give you a wrong result when you analyze data.\n", 862 | "\n", 863 | "**Remove Rows**\n", 864 | "\n", 865 | "One way to deal with empty cells is to remove rows that contain empty cells.\n", 866 | "\n", 867 | "This is usually OK, since data sets can be very big, and removing a few rows will not have a big impact on the result.\n" 868 | ], 869 | "metadata": { 870 | "id": "fzDVZJq08jjc" 871 | } 872 | }, 873 | { 874 | "cell_type": "code", 875 | "source": [ 876 | "import pandas as pd\n", 877 | "\n", 878 | "df = pd.read_csv('data.csv')\n", 879 | "\n", 880 | "new_df = df.dropna()\n", 881 | "\n", 882 | "print(new_df.to_string())" 883 | ], 884 | "metadata": { 885 | "id": "bhlGgpvc8bjt" 886 | }, 887 | "execution_count": null, 888 | "outputs": [] 889 | }, 890 | { 891 | "cell_type": "markdown", 892 | "source": [ 893 | "If you want to change the original DataFrame, use the inplace = True argument:" 894 | ], 895 | "metadata": { 896 | "id": "E3bsHIWW8vX1" 897 | } 898 | }, 899 | { 900 | "cell_type": "code", 901 | "source": [ 902 | "import pandas as pd\n", 903 | "\n", 904 | "df = pd.read_csv('data.csv')\n", 905 | "\n", 906 | "df.dropna(inplace = True)\n", 907 | "\n", 908 | "print(df.to_string())" 909 | ], 910 | "metadata": { 911 | "id": "drun59y-8wFP" 912 | }, 913 | "execution_count": null, 914 | "outputs": [] 915 | }, 916 | { 917 | "cell_type": "markdown", 918 | "source": [ 919 | "**Replace Empty Values**\n", 920 | "\n", 921 | "Another way of dealing with empty cells is to insert a new value instead.\n", 922 | "\n", 923 | "This way you do not have to delete entire rows just because of some empty cells.\n", 924 | "\n", 925 | "The fillna() method allows us to replace empty cells with a value:" 926 | ], 927 | "metadata": { 928 | "id": "2vzCS1KD8yGX" 929 | } 930 | }, 931 | { 932 | "cell_type": "code", 933 | "source": [ 934 | "import pandas as pd\n", 935 | "\n", 936 | "df = pd.read_csv('data.csv')\n", 937 | "\n", 938 | "df.fillna(130, inplace = True)" 939 | ], 940 | "metadata": { 941 | "id": "2K81qK3s815l" 942 | }, 943 | "execution_count": null, 944 | "outputs": [] 945 | }, 946 | { 947 | "cell_type": "markdown", 948 | "source": [ 949 | "**Replace Only For Specified Columns**\n", 950 | "\n", 951 | "The example above replaces all empty cells in the whole Data Frame.\n", 952 | "\n", 953 | "To only replace empty values for one column, specify the column name for the DataFrame:" 954 | ], 955 | "metadata": { 956 | "id": "tudG3-dA84TF" 957 | } 958 | }, 959 | { 960 | "cell_type": "code", 961 | "source": [ 962 | "import pandas as pd\n", 963 | "\n", 964 | "df = pd.read_csv('data.csv')\n", 965 | "\n", 966 | "df[\"Calories\"].fillna(130, inplace = True)" 967 | ], 968 | "metadata": { 969 | "id": "_BwJ2vi189MV" 970 | }, 971 | "execution_count": null, 972 | "outputs": [] 973 | }, 974 | { 975 | "cell_type": "markdown", 976 | "source": [ 977 | "**Replace Using Mean, Median, or Mode**\n", 978 | "\n", 979 | "A common way to replace empty cells, is to calculate the mean, median or mode value of the column.\n", 980 | "\n", 981 | "Pandas uses the mean() median() and mode() methods to calculate the respective values for a specified column:" 982 | ], 983 | "metadata": { 984 | "id": "FN2XWe829ASl" 985 | } 986 | }, 987 | { 988 | "cell_type": "code", 989 | "source": [ 990 | "import pandas as pd\n", 991 | "\n", 992 | "df = pd.read_csv('data.csv')\n", 993 | "\n", 994 | "x = df[\"Calories\"].mean()\n", 995 | "\n", 996 | "df[\"Calories\"].fillna(x, inplace = True)" 997 | ], 998 | "metadata": { 999 | "id": "MF_WLwXJ9DHY" 1000 | }, 1001 | "execution_count": null, 1002 | "outputs": [] 1003 | }, 1004 | { 1005 | "cell_type": "markdown", 1006 | "source": [ 1007 | "Calculate the MEDIAN, and replace any empty values with it:" 1008 | ], 1009 | "metadata": { 1010 | "id": "fC-euHfc9FuN" 1011 | } 1012 | }, 1013 | { 1014 | "cell_type": "code", 1015 | "source": [ 1016 | "import pandas as pd\n", 1017 | "\n", 1018 | "df = pd.read_csv('data.csv')\n", 1019 | "\n", 1020 | "x = df[\"Calories\"].median()\n", 1021 | "\n", 1022 | "df[\"Calories\"].fillna(x, inplace = True)" 1023 | ], 1024 | "metadata": { 1025 | "id": "D1aLvcDQ9IiN" 1026 | }, 1027 | "execution_count": null, 1028 | "outputs": [] 1029 | }, 1030 | { 1031 | "cell_type": "markdown", 1032 | "source": [ 1033 | "Median = the value in the middle, after you have sorted all values ascending." 1034 | ], 1035 | "metadata": { 1036 | "id": "gsiZJCkv9Kjn" 1037 | } 1038 | }, 1039 | { 1040 | "cell_type": "code", 1041 | "source": [ 1042 | "import pandas as pd\n", 1043 | "\n", 1044 | "df = pd.read_csv('data.csv')\n", 1045 | "\n", 1046 | "x = df[\"Calories\"].mode()[0]\n", 1047 | "\n", 1048 | "df[\"Calories\"].fillna(x, inplace = True)" 1049 | ], 1050 | "metadata": { 1051 | "id": "LuKr0KWO9NC0" 1052 | }, 1053 | "execution_count": null, 1054 | "outputs": [] 1055 | }, 1056 | { 1057 | "cell_type": "markdown", 1058 | "source": [ 1059 | "**Data of Wrong Format**\n", 1060 | "\n", 1061 | "Cells with data of wrong format can make it difficult, or even impossible, to analyze data.\n", 1062 | "\n", 1063 | "To fix it, you have two options: remove the rows, or convert all cells in the columns into the same format.\n", 1064 | "\n", 1065 | "Convert Into a Correct Format\n", 1066 | "In our Data Frame, we have two cells with the wrong format. Check out row 22 and 26, the 'Date' column should be a string that represents a date:" 1067 | ], 1068 | "metadata": { 1069 | "id": "QWModtbl9RKN" 1070 | } 1071 | }, 1072 | { 1073 | "cell_type": "markdown", 1074 | "source": [ 1075 | "Let's try to convert all cells in the 'Date' column into dates.\n", 1076 | "\n", 1077 | "Pandas has a to_datetime() method for this:" 1078 | ], 1079 | "metadata": { 1080 | "id": "-Ee8ahcc9d5G" 1081 | } 1082 | }, 1083 | { 1084 | "cell_type": "code", 1085 | "source": [ 1086 | "import pandas as pd\n", 1087 | "\n", 1088 | "df = pd.read_csv('data.csv')\n", 1089 | "\n", 1090 | "df['Date'] = pd.to_datetime(df['Date'])\n", 1091 | "\n", 1092 | "print(df.to_string())" 1093 | ], 1094 | "metadata": { 1095 | "id": "l5jkm9L59ZXK" 1096 | }, 1097 | "execution_count": null, 1098 | "outputs": [] 1099 | }, 1100 | { 1101 | "cell_type": "markdown", 1102 | "source": [ 1103 | "As you can see from the result, the date in row 26 was fixed, but the empty date in row 22 got a NaT (Not a Time) value, in other words an empty value. One way to deal with empty values is simply removing the entire row.\n", 1104 | "\n", 1105 | "**Removing Rows**\n", 1106 | "\n", 1107 | "The result from the converting in the example above gave us a NaT value, which can be handled as a NULL value, and we can remove the row by using the dropna() method." 1108 | ], 1109 | "metadata": { 1110 | "id": "OHZ7feSH9mcs" 1111 | } 1112 | }, 1113 | { 1114 | "cell_type": "code", 1115 | "source": [ 1116 | "df.dropna(subset=['Date'], inplace = True)" 1117 | ], 1118 | "metadata": { 1119 | "id": "VAjOpZ099nQW" 1120 | }, 1121 | "execution_count": null, 1122 | "outputs": [] 1123 | }, 1124 | { 1125 | "cell_type": "markdown", 1126 | "source": [ 1127 | "**Wrong Data**\n", 1128 | "\n", 1129 | "\"Wrong data\" does not have to be \"empty cells\" or \"wrong format\", it can just be wrong, like if someone registered \"199\" instead of \"1.99\".\n", 1130 | "\n", 1131 | "Sometimes you can spot wrong data by looking at the data set, because you have an expectation of what it should be.\n", 1132 | "\n", 1133 | "If you take a look at our data set, you can see that in row 7, the duration is 450, but for all the other rows the duration is between 30 and 60.\n", 1134 | "\n", 1135 | "It doesn't have to be wrong, but taking in consideration that this is the data set of someone's workout sessions, we conclude with the fact that this person did not work out in 450 minutes.\n", 1136 | "\n", 1137 | "**Replacing Values**\n", 1138 | "\n", 1139 | "One way to fix wrong values is to replace them with something else.\n", 1140 | "\n", 1141 | "In our example, it is most likely a typo, and the value should be \"45\" instead of \"450\", and we could just insert \"45\" in row 7:" 1142 | ], 1143 | "metadata": { 1144 | "id": "Y4ELYWCu9w4M" 1145 | } 1146 | }, 1147 | { 1148 | "cell_type": "code", 1149 | "source": [ 1150 | "df.loc[7, 'Duration'] = 45" 1151 | ], 1152 | "metadata": { 1153 | "id": "EkTEN2Oa91Qc" 1154 | }, 1155 | "execution_count": null, 1156 | "outputs": [] 1157 | }, 1158 | { 1159 | "cell_type": "markdown", 1160 | "source": [ 1161 | "For small data sets you might be able to replace the wrong data one by one, but not for big data sets.\n", 1162 | "\n", 1163 | "To replace wrong data for larger data sets you can create some rules, e.g. set some boundaries for legal values, and replace any values that are outside of the boundaries." 1164 | ], 1165 | "metadata": { 1166 | "id": "UqejnLjj-Qhk" 1167 | } 1168 | }, 1169 | { 1170 | "cell_type": "code", 1171 | "source": [ 1172 | "for x in df.index:\n", 1173 | " if df.loc[x, \"Duration\"] > 120:\n", 1174 | " df.loc[x, \"Duration\"] = 120" 1175 | ], 1176 | "metadata": { 1177 | "id": "l1aPH6Mv-Rek" 1178 | }, 1179 | "execution_count": null, 1180 | "outputs": [] 1181 | }, 1182 | { 1183 | "cell_type": "markdown", 1184 | "source": [ 1185 | "**Removing Rows**\n", 1186 | "\n", 1187 | "Another way of handling wrong data is to remove the rows that contains wrong data.\n", 1188 | "\n", 1189 | "This way you do not have to find out what to replace them with, and there is a good chance you do not need them to do your analyses." 1190 | ], 1191 | "metadata": { 1192 | "id": "d4MzF0_y-Tpl" 1193 | } 1194 | }, 1195 | { 1196 | "cell_type": "code", 1197 | "source": [ 1198 | "for x in df.index:\n", 1199 | " if df.loc[x, \"Duration\"] > 120:\n", 1200 | " df.drop(x, inplace = True)" 1201 | ], 1202 | "metadata": { 1203 | "id": "Cuv0s8_y-Zt-" 1204 | }, 1205 | "execution_count": null, 1206 | "outputs": [] 1207 | }, 1208 | { 1209 | "cell_type": "markdown", 1210 | "source": [ 1211 | "**Discovering Duplicates**\n", 1212 | "\n", 1213 | "Duplicate rows are rows that have been registered more than one time.\n", 1214 | "\n", 1215 | "By taking a look at our test data set, we can assume that row 11 and 12 are duplicates.\n", 1216 | "\n", 1217 | "To discover duplicates, we can use the duplicated() method.\n", 1218 | "\n", 1219 | "The duplicated() method returns a Boolean values for each row:\n" 1220 | ], 1221 | "metadata": { 1222 | "id": "oYQVLxDF-hcr" 1223 | } 1224 | }, 1225 | { 1226 | "cell_type": "code", 1227 | "source": [ 1228 | "print(df.duplicated())" 1229 | ], 1230 | "metadata": { 1231 | "id": "cDtxZ0xo-qRs" 1232 | }, 1233 | "execution_count": null, 1234 | "outputs": [] 1235 | }, 1236 | { 1237 | "cell_type": "markdown", 1238 | "source": [ 1239 | "**Removing Duplicates**\n", 1240 | "\n", 1241 | "To remove duplicates, use the drop_duplicates() method." 1242 | ], 1243 | "metadata": { 1244 | "id": "BHL2Lndg-q9j" 1245 | } 1246 | }, 1247 | { 1248 | "cell_type": "code", 1249 | "source": [ 1250 | "df.drop_duplicates(inplace = True)" 1251 | ], 1252 | "metadata": { 1253 | "id": "fiC7pcOp-uWj" 1254 | }, 1255 | "execution_count": null, 1256 | "outputs": [] 1257 | }, 1258 | { 1259 | "cell_type": "markdown", 1260 | "source": [ 1261 | "**Finding Relationships**\n", 1262 | "\n", 1263 | "A great aspect of the Pandas module is the corr() method.\n", 1264 | "\n", 1265 | "The corr() method calculates the relationship between each column in your data set.\n", 1266 | "\n", 1267 | "The examples in this page uses a CSV file called: 'data.csv'." 1268 | ], 1269 | "metadata": { 1270 | "id": "BUJByCP_-0H7" 1271 | } 1272 | }, 1273 | { 1274 | "cell_type": "code", 1275 | "source": [ 1276 | "df.corr()" 1277 | ], 1278 | "metadata": { 1279 | "id": "69Lz1aM1-63c" 1280 | }, 1281 | "execution_count": null, 1282 | "outputs": [] 1283 | }, 1284 | { 1285 | "cell_type": "markdown", 1286 | "source": [ 1287 | "**Result Explained**\n", 1288 | "\n", 1289 | "The Result of the corr() method is a table with a lot of numbers that represents how well the relationship is between two columns.\n", 1290 | "\n", 1291 | "\n", 1292 | "The number varies from -1 to 1.\n", 1293 | "\n", 1294 | "\n", 1295 | "1 means that there is a 1 to 1 relationship (a perfect correlation), and for this data set, each time a value went up in the first column, the other one went up as well.\n", 1296 | "\n", 1297 | "\n", 1298 | "0.9 is also a good relationship, and if you increase one value, the other will probably increase as well.\n", 1299 | "\n", 1300 | "\n", 1301 | "-0.9 would be just as good relationship as 0.9, but if you increase one value, the other will probably go down.\n", 1302 | "\n", 1303 | "\n", 1304 | "0.2 means NOT a good relationship, meaning that if one value goes up does not mean that the other will.\n", 1305 | "\n", 1306 | "**Perfect Correlation:**\n", 1307 | "We can see that \"Duration\" and \"Duration\" got the number 1.000000, which makes sense, each column always has a perfect relationship with itself.\n", 1308 | "\n", 1309 | "**Good Correlation:**\n", 1310 | "\"Duration\" and \"Calories\" got a 0.922721 correlation, which is a very good correlation, and we can predict that the longer you work out, the more calories you burn, and the other way around: if you burned a lot of calories, you probably had a long work out.\n", 1311 | "\n", 1312 | "**Bad Correlation:**\n", 1313 | "\"Duration\" and \"Maxpulse\" got a 0.009403 correlation, which is a very bad correlation, meaning that we can not predict the max pulse by just looking at the duration of the work out, and vice versa.\n", 1314 | "\n", 1315 | "\n", 1316 | "# **Plotting**\n", 1317 | "Pandas uses the plot() method to create diagrams.\n", 1318 | "\n", 1319 | "We can use Pyplot, a submodule of the Matplotlib library to visualize the diagram on the screen." 1320 | ], 1321 | "metadata": { 1322 | "id": "fmuTvgU5--Qz" 1323 | } 1324 | }, 1325 | { 1326 | "cell_type": "code", 1327 | "source": [ 1328 | "import pandas as pd\n", 1329 | "import matplotlib.pyplot as plt\n", 1330 | "\n", 1331 | "df = pd.read_csv('data.csv')\n", 1332 | "\n", 1333 | "df.plot()\n", 1334 | "\n", 1335 | "plt.show()" 1336 | ], 1337 | "metadata": { 1338 | "id": "cf0Ja3NTD22d" 1339 | }, 1340 | "execution_count": null, 1341 | "outputs": [] 1342 | } 1343 | ] 1344 | } --------------------------------------------------------------------------------