From 00afc7b86f3d1a1bb0b07360815cc55cd628e1e0 Mon Sep 17 00:00:00 2001 From: Chanin Nantasenamat <51851491+dataprofessor@users.noreply.github.com> Date: Sun, 26 Apr 2020 23:34:44 +0700 Subject: [PATCH] Add files via upload --- python/pandas_styling_dataframe.ipynb | 1227 +++++++++++++++++++++++++ 1 file changed, 1227 insertions(+) create mode 100644 python/pandas_styling_dataframe.ipynb diff --git a/python/pandas_styling_dataframe.ipynb b/python/pandas_styling_dataframe.ipynb new file mode 100644 index 0000000..3a5a3a7 --- /dev/null +++ b/python/pandas_styling_dataframe.ipynb @@ -0,0 +1,1227 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "name": "pandas-styling-dataframe.ipynb", + "provenance": [], + "collapsed_sections": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "sv-w0Hjc07Kt", + "colab_type": "text" + }, + "source": [ + "# **Styling Pandas DataFrame**\n", + "\n", + "Chanin Nantasenamat\n", + "\n", + "[Data Professor YouTube channel](http://youtube.com/dataprofessor), http://youtube.com/dataprofessor \n", + "\n", + "Are you bored of the same old Pandas DataFrame? In this Jupyter notebook, I will be showing you how to style the Pandas DataFrame." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8-BaSBjopwwe", + "colab_type": "text" + }, + "source": [ + "## **Import library**" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "5zqVANQs3TjX", + "colab_type": "code", + "colab": {} + }, + "source": [ + "import numpy as np\n", + "import pandas as pd" + ], + "execution_count": 0, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xQWQ7rFD6Q5O", + "colab_type": "text" + }, + "source": [ + "## **Download and select data**" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "YBxo-Z0a3Io7", + "colab_type": "code", + "outputId": "a03bf877-dc1b-4390-e72d-1ed5be57a70f", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 204 + } + }, + "source": [ + "! wget https://raw.githubusercontent.com/dataprofessor/data/master/nba-player-stats-2019.csv" + ], + "execution_count": 0, + "outputs": [ + { + "output_type": "stream", + "text": [ + "--2020-04-25 15:02:48-- https://raw.githubusercontent.com/dataprofessor/data/master/nba-player-stats-2019.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: 90308 (88K) [text/plain]\n", + "Saving to: ‘nba-player-stats-2019.csv’\n", + "\n", + "\r nba-playe 0%[ ] 0 --.-KB/s \rnba-player-stats-20 100%[===================>] 88.19K --.-KB/s in 0.02s \n", + "\n", + "2020-04-25 15:02:48 (5.03 MB/s) - ‘nba-player-stats-2019.csv’ saved [90308/90308]\n", + "\n" + ], + "name": "stdout" + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "pUZAIKl231s9", + "colab_type": "code", + "colab": {} + }, + "source": [ + "df = pd.read_csv('nba-player-stats-2019.csv')\n", + "selection = ['Player','Pos','Age','Tm','G','3P%','2P%','FT%','AST','STL','BLK','PTS']" + ], + "execution_count": 0, + "outputs": [] + }, + { + "cell_type": "code", + "metadata": { + "id": "q9D_2M1J3M76", + "colab_type": "code", + "colab": {} + }, + "source": [ + "df = df[selection]" + ], + "execution_count": 0, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4jnmTmhv1sNA", + "colab_type": "text" + }, + "source": [ + "## **Style pandas table with CSS**\n", + "\n" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "7H-8BmYGpae0", + "colab_type": "code", + "outputId": "000c132c-36b5-4513-b661-daff0ff8581a", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 460 + } + }, + "source": [ + "# https://towardsdatascience.com/10-python-pandas-tricks-to-make-data-analysis-more-enjoyable-cb8f55af8c30\n", + "\n", + "df.head(20).style.set_table_styles(\n", + "[{'selector': 'th',\n", + " 'props': [('background', '#7CAE00'), \n", + " ('color', 'white'),\n", + " ('font-family', 'verdana')]},\n", + " \n", + " {'selector': 'td',\n", + " 'props': [('font-family', 'verdana')]},\n", + "\n", + " {'selector': 'tr:nth-of-type(odd)',\n", + " 'props': [('background', '#DCDCDC')]}, \n", + " \n", + " {'selector': 'tr:nth-of-type(even)',\n", + " 'props': [('background', 'white')]},\n", + " \n", + "]\n", + ").hide_index()" + ], + "execution_count": 0, + "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", + "
Player Pos Age Tm G 3P% 2P% FT% AST STL BLK PTS
Álex AbrinesSG25OKC310.3230000.5000000.9230000.6000000.5000000.2000005.300000
Quincy AcyPF28PHO100.1330000.6670000.7000000.8000000.1000000.4000001.700000
Jaylen AdamsPG22ATL340.3380000.3610000.7780001.9000000.4000000.1000003.200000
Steven AdamsC25OKC800.0000000.5960000.5000001.6000001.5000001.00000013.900000
Bam AdebayoC21MIA820.2000000.5880000.7350002.2000000.9000000.8000008.900000
Deng AdelSF21CLE190.2610000.3850001.0000000.3000000.1000000.2000001.700000
DeVaughn Akoon-PurcellSG25DEN70.0000000.5000000.5000000.9000000.3000000.0000001.000000
LaMarcus AldridgeC33SAS810.2380000.5280000.8470002.4000000.5000001.30000021.300000
Rawle AlkinsSG21CHI100.2500000.3700000.6670001.3000000.1000000.0000003.700000
Grayson AllenSG23UTA380.3230000.4430000.7500000.7000000.2000000.2000005.600000
Jarrett AllenC20BRK800.1330000.6290000.7090001.4000000.5000001.50000010.900000
Kadeem AllenSG26NYK190.4720000.4570000.7780004.0000000.8000000.2000009.900000
Al-Farouq AminuPF28POR810.3430000.5140000.8670001.3000000.8000000.4000009.400000
Justin AndersonSF25ATL480.3120000.5000000.7430000.5000000.5000000.3000003.700000
Kyle AndersonSF25MEM430.2650000.5830000.5780003.0000001.3000000.9000008.000000
Ryan AndersonPF30TOT250.2250000.4140000.7500000.8000000.2000000.0000002.500000
Ryan AndersonPF30PHO150.2060000.4620000.7860001.1000000.2000000.1000003.700000
Ryan AndersonPF30MIA100.3330000.0000000.5000000.2000000.1000000.0000000.700000
Ike AnigboguC20IND30.0000000.0000000.0000000.3000000.0000000.3000000.000000
Giannis AntetokounmpoPF24MIL720.2560000.6410000.7290005.9000001.3000001.50000027.700000
" + ], + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 69 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MNetq64A6CZP", + "colab_type": "text" + }, + "source": [ + "## **Adding yellow highlight upon hover**" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "hzshPguY5cH7", + "colab_type": "code", + "outputId": "fb47ced5-b12b-4712-ec32-4a2e7603f95e", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 460 + } + }, + "source": [ + "# https://towardsdatascience.com/10-python-pandas-tricks-to-make-data-analysis-more-enjoyable-cb8f55af8c30\n", + "\n", + "df.head(20).style.set_table_styles(\n", + "[{'selector': 'th',\n", + " 'props': [('background', '#7CAE00'), \n", + " ('color', 'white'),\n", + " ('font-family', 'verdana')]},\n", + " \n", + " {'selector': 'td',\n", + " 'props': [('font-family', 'verdana')]},\n", + "\n", + " {'selector': 'tr:nth-of-type(odd)',\n", + " 'props': [('background', '#DCDCDC')]}, \n", + " \n", + " {'selector': 'tr:nth-of-type(even)',\n", + " 'props': [('background', 'white')]},\n", + " \n", + " {'selector': 'tr:hover',\n", + " 'props': [('background-color', 'yellow')]}\n", + "\n", + "]\n", + ").hide_index()" + ], + "execution_count": 0, + "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", + "
Player Pos Age Tm G 3P% 2P% FT% AST STL BLK PTS
Álex AbrinesSG25OKC310.3230000.5000000.9230000.6000000.5000000.2000005.300000
Quincy AcyPF28PHO100.1330000.6670000.7000000.8000000.1000000.4000001.700000
Jaylen AdamsPG22ATL340.3380000.3610000.7780001.9000000.4000000.1000003.200000
Steven AdamsC25OKC800.0000000.5960000.5000001.6000001.5000001.00000013.900000
Bam AdebayoC21MIA820.2000000.5880000.7350002.2000000.9000000.8000008.900000
Deng AdelSF21CLE190.2610000.3850001.0000000.3000000.1000000.2000001.700000
DeVaughn Akoon-PurcellSG25DEN70.0000000.5000000.5000000.9000000.3000000.0000001.000000
LaMarcus AldridgeC33SAS810.2380000.5280000.8470002.4000000.5000001.30000021.300000
Rawle AlkinsSG21CHI100.2500000.3700000.6670001.3000000.1000000.0000003.700000
Grayson AllenSG23UTA380.3230000.4430000.7500000.7000000.2000000.2000005.600000
Jarrett AllenC20BRK800.1330000.6290000.7090001.4000000.5000001.50000010.900000
Kadeem AllenSG26NYK190.4720000.4570000.7780004.0000000.8000000.2000009.900000
Al-Farouq AminuPF28POR810.3430000.5140000.8670001.3000000.8000000.4000009.400000
Justin AndersonSF25ATL480.3120000.5000000.7430000.5000000.5000000.3000003.700000
Kyle AndersonSF25MEM430.2650000.5830000.5780003.0000001.3000000.9000008.000000
Ryan AndersonPF30TOT250.2250000.4140000.7500000.8000000.2000000.0000002.500000
Ryan AndersonPF30PHO150.2060000.4620000.7860001.1000000.2000000.1000003.700000
Ryan AndersonPF30MIA100.3330000.0000000.5000000.2000000.1000000.0000000.700000
Ike AnigboguC20IND30.0000000.0000000.0000000.3000000.0000000.3000000.000000
Giannis AntetokounmpoPF24MIL720.2560000.6410000.7290005.9000001.3000001.50000027.700000
" + ], + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 68 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "5gx22aGN7kDE", + "colab_type": "text" + }, + "source": [ + "## **Conditional coloring**" + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "0iaxUe2XEIq5", + "colab_type": "code", + "outputId": "d8b42f5c-2e80-498e-c8ab-08b111c05dff", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 460 + } + }, + "source": [ + "def color_red(val):\n", + " if val > 20:\n", + " color = 'green'\n", + " elif val > 5:\n", + " color = 'red'\n", + " else:\n", + " color = 'black'\n", + " return 'color: %s' % color\n", + "\n", + "df[['PTS']].head(20).style.applymap(color_red)" + ], + "execution_count": 0, + "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", + "
PTS
05.300000
11.700000
23.200000
313.900000
48.900000
51.700000
61.000000
721.300000
83.700000
95.600000
1010.900000
119.900000
129.400000
133.700000
148.000000
152.500000
163.700000
170.700000
180.000000
1927.700000
" + ], + "text/plain": [ + "" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 66 + } + ] + }, + { + "cell_type": "code", + "metadata": { + "id": "yo_O5mJrDLSI", + "colab_type": "code", + "outputId": "1ba87b07-14de-458e-858e-6b6751548687", + "colab": { + "base_uri": "https://localhost:8080/", + "height": 669 + } + }, + "source": [ + "df[['Player','Pos','Tm']].head(20)" + ], + "execution_count": 0, + "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", + "
PlayerPosTm
0Álex AbrinesSGOKC
1Quincy AcyPFPHO
2Jaylen AdamsPGATL
3Steven AdamsCOKC
4Bam AdebayoCMIA
5Deng AdelSFCLE
6DeVaughn Akoon-PurcellSGDEN
7LaMarcus AldridgeCSAS
8Rawle AlkinsSGCHI
9Grayson AllenSGUTA
10Jarrett AllenCBRK
11Kadeem AllenSGNYK
12Al-Farouq AminuPFPOR
13Justin AndersonSFATL
14Kyle AndersonSFMEM
15Ryan AndersonPFTOT
16Ryan AndersonPFPHO
17Ryan AndersonPFMIA
18Ike AnigboguCIND
19Giannis AntetokounmpoPFMIL
\n", + "
" + ], + "text/plain": [ + " Player Pos Tm\n", + "0 Álex Abrines SG OKC\n", + "1 Quincy Acy PF PHO\n", + "2 Jaylen Adams PG ATL\n", + "3 Steven Adams C OKC\n", + "4 Bam Adebayo C MIA\n", + "5 Deng Adel SF CLE\n", + "6 DeVaughn Akoon-Purcell SG DEN\n", + "7 LaMarcus Aldridge C SAS\n", + "8 Rawle Alkins SG CHI\n", + "9 Grayson Allen SG UTA\n", + "10 Jarrett Allen C BRK\n", + "11 Kadeem Allen SG NYK\n", + "12 Al-Farouq Aminu PF POR\n", + "13 Justin Anderson SF ATL\n", + "14 Kyle Anderson SF MEM\n", + "15 Ryan Anderson PF TOT\n", + "16 Ryan Anderson PF PHO\n", + "17 Ryan Anderson PF MIA\n", + "18 Ike Anigbogu C IND\n", + "19 Giannis Antetokounmpo PF MIL" + ] + }, + "metadata": { + "tags": [] + }, + "execution_count": 67 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zaMIlbehrgWL", + "colab_type": "text" + }, + "source": [ + "## **Further reading**\n", + "- Shiu-Tang Li.\n", + "[10 Python Pandas tips to make data analysis faster](https://towardsdatascience.com/10-python-pandas-tricks-to-make-data-analysis-more-enjoyable-cb8f55af8c30), 2019.\n", + "- [HTML Color Codes](https://htmlcolorcodes.com/). (Note: This website is awesome for visualizing the colors of hex color codes as well as choosing color variants)." + ] + } + ] +} \ No newline at end of file