<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://uberg.me/feed.xml" rel="self" type="application/atom+xml" /><link href="https://uberg.me/" rel="alternate" type="text/html" /><updated>2025-04-30T11:16:53+00:00</updated><id>https://uberg.me/feed.xml</id><title type="html">Lewi Uberg</title><subtitle>Lewi Uberg Full-stack Development &amp; Data Science</subtitle><author><name>Lewi Uberg</name></author><entry><title type="html">A visual representation of named colors</title><link href="https://uberg.me/A-visual-representation-of-named-color/" rel="alternate" type="text/html" title="A visual representation of named colors" /><published>2020-12-22T00:00:00+00:00</published><updated>2020-12-22T00:00:00+00:00</updated><id>https://uberg.me/A-visual-representation-of-named-colors</id><content type="html" xml:base="https://uberg.me/A-visual-representation-of-named-color/"><![CDATA[<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-X5TVX1RNG8"></script>

<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-X5TVX1RNG8');
</script>

<h2 id="exploring-colors">Exploring colors</h2>

<p>I looked into word embeddings for my bachelor thesis and stumbled into a great GitHub Gist by <a href="https://gist.github.com/aparrish/2f562e3737544cf29aaf1af30362f469">Allison Parrish</a> titled “Understanding word vectors”. Her Gist is very educational, explaining everything from the ground up. However, the section about colors as vectors did not show the colors being discussed. Since I am a visual learner, I wanted to implement some way of plotting the colors to see them. I realized that this could be a handy tool in other circumstances, and I have extracted what I made and modified it to work without her Gists context.</p>

<h3 id="color-basis">Color basis</h3>

<p>Let’s start by loading the color information from Darius Kazemi’s GitHub repository containing a <a href="https://github.com/dariusk/corpora/blob/master/data/colors/xkcd.json">JSON file</a> with the xkcd color names and values.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">urllib.request</span><span class="p">,</span> <span class="n">json</span>

<span class="c1"># read json data
</span><span class="k">with</span> <span class="n">urllib</span><span class="p">.</span><span class="n">request</span><span class="p">.</span><span class="n">urlopen</span><span class="p">(</span><span class="s">"https://raw.githubusercontent.com/dariusk/corpora/master/data/colors/xkcd.json"</span><span class="p">)</span> <span class="k">as</span> <span class="n">url</span><span class="p">:</span>
    <span class="n">color_data</span> <span class="o">=</span> <span class="n">json</span><span class="p">.</span><span class="n">loads</span><span class="p">(</span><span class="n">url</span><span class="p">.</span><span class="n">read</span><span class="p">().</span><span class="n">decode</span><span class="p">())</span>
</code></pre></div></div>

<p>I want to make a dictionary that holds the hex, integer, and normalized integer values, so the first step is to create a function that converts hex to a tuple with RGB values.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">hex_to_int</span><span class="p">(</span><span class="n">color</span><span class="p">):</span>
    <span class="s">"""
    Converts hexcolor codes to tuple of integers.

    Args:
        color (str): hex color code.

    Returns:
        tuple: RGB values as integers.
    """</span>
    <span class="n">color</span> <span class="o">=</span> <span class="n">color</span><span class="p">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s">"#"</span><span class="p">)</span>
    <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">color</span><span class="p">[:</span><span class="mi">2</span><span class="p">],</span> <span class="mi">16</span><span class="p">),</span> <span class="nb">int</span><span class="p">(</span><span class="n">color</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">4</span><span class="p">],</span> <span class="mi">16</span><span class="p">),</span> <span class="nb">int</span><span class="p">(</span><span class="n">color</span><span class="p">[</span><span class="mi">4</span><span class="p">:</span><span class="mi">6</span><span class="p">],</span> <span class="mi">16</span><span class="p">)</span>
</code></pre></div></div>

<p>Now, I am ready to define the new color dictionary, which holds all the mentioned values.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Define one dictionary with name as key
</span><span class="n">colors</span><span class="p">:</span> <span class="nb">dict</span> <span class="o">=</span> <span class="p">{}</span>

<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">color_data</span><span class="p">[</span><span class="s">"colors"</span><span class="p">]:</span>
    <span class="n">temp</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">i</span><span class="p">.</span><span class="n">values</span><span class="p">())</span>

    <span class="c1"># hex color as value
</span>    <span class="n">val_hex</span> <span class="o">=</span> <span class="n">temp</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>

    <span class="c1"># int (RGB 0-255) color as value
</span>    <span class="n">val_int</span> <span class="o">=</span> <span class="n">hex_to_int</span><span class="p">(</span><span class="n">temp</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>

    <span class="c1"># normalized int (0-1) color as value
</span>    <span class="n">val_norm</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">([</span><span class="n">x</span> <span class="o">/</span> <span class="mi">255</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">val_int</span><span class="p">])</span>

    <span class="c1"># combine to dict
</span>    <span class="n">colors</span><span class="p">[</span><span class="n">temp</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="p">{</span><span class="s">"hex"</span><span class="p">:</span> <span class="n">val_hex</span><span class="p">,</span> <span class="s">"int"</span><span class="p">:</span> <span class="n">val_int</span><span class="p">,</span> <span class="s">"norm"</span><span class="p">:</span> <span class="n">val_norm</span><span class="p">}</span>
</code></pre></div></div>

<p>Let’s see look at some results.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">print</span><span class="p">(</span><span class="s">"Sample of 5 colors with hex values"</span><span class="p">)</span>
<span class="n">names</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">colors</span><span class="p">.</span><span class="n">items</span><span class="p">())[</span><span class="mi">0</span><span class="p">:</span><span class="mi">5</span><span class="p">]]</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">colors</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s">"hex"</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">names</span><span class="p">]</span>
<span class="n">display</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">names</span><span class="p">,</span> <span class="n">values</span><span class="p">)))</span>

<span class="k">print</span><span class="p">(</span><span class="s">"Sample of 5 colors with int values"</span><span class="p">)</span>
<span class="n">names</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">colors</span><span class="p">.</span><span class="n">items</span><span class="p">())[</span><span class="mi">0</span><span class="p">:</span><span class="mi">5</span><span class="p">]]</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">colors</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s">"int"</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">names</span><span class="p">]</span>
<span class="n">display</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">names</span><span class="p">,</span> <span class="n">values</span><span class="p">)))</span>

<span class="k">print</span><span class="p">(</span><span class="s">"Sample of 5 colors with normalized int values"</span><span class="p">)</span>
<span class="n">names</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">colors</span><span class="p">.</span><span class="n">items</span><span class="p">())[</span><span class="mi">0</span><span class="p">:</span><span class="mi">5</span><span class="p">]]</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">colors</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s">"norm"</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">names</span><span class="p">]</span>
<span class="n">display</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">names</span><span class="p">,</span> <span class="n">values</span><span class="p">)))</span>
</code></pre></div></div>

<pre><code class="language-out">    Sample of 5 colors with hex values

    [('cloudy blue', '#acc2d9'),
     ('dark pastel green', '#56ae57'),
     ('dust', '#b2996e'),
     ('electric lime', '#a8ff04'),
     ('fresh green', '#69d84f')]
</code></pre>

<pre><code class="language-out">    Sample of 5 colors with int values

    [('cloudy blue', (172, 194, 217)),
     ('dark pastel green', (86, 174, 87)),
     ('dust', (178, 153, 110)),
     ('electric lime', (168, 255, 4)),
     ('fresh green', (105, 216, 79))]
</code></pre>

<pre><code class="language-out">    Sample of 5 colors with normalized int values

    [('cloudy blue', (0.6745098039215687, 0.7607843137254902, 0.8509803921568627)),
     ('dark pastel green',
      (0.33725490196078434, 0.6823529411764706, 0.3411764705882353)),
     ('dust', (0.6980392156862745, 0.6, 0.43137254901960786)),
     ('electric lime', (0.6588235294117647, 1.0, 0.01568627450980392)),
     ('fresh green',
      (0.4117647058823529, 0.8470588235294118, 0.30980392156862746))]
</code></pre>

<p>Let’s test if we can give a color name as input and get the values back.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">print</span><span class="p">(</span><span class="s">"Test for the color 'red':"</span><span class="p">)</span>
<span class="n">display</span><span class="p">(</span><span class="n">colors</span><span class="p">[</span><span class="s">"red"</span><span class="p">])</span>
</code></pre></div></div>

<pre><code class="language-out">    Test for the color 'red':

    {'hex': '#e50000', 'int': (229, 0, 0), 'norm': (0.8980392156862745, 0.0, 0.0)}
</code></pre>

<h3 id="making-it-visible">Making it visible</h3>

<p>There was already an excellent function for plotting colors in the <a href="https://matplotlib.org/3.1.0/gallery/color/named_colors.html">Matplotlib documentation</a>, so I copied it and made some small changes to better suit my needs.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="n">plt</span>
<span class="kn">import</span> <span class="nn">matplotlib.colors</span> <span class="k">as</span> <span class="n">mcolors</span>


<span class="k">def</span> <span class="nf">plot_colortable</span><span class="p">(</span><span class="n">colors</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s">"Colors"</span><span class="p">,</span> <span class="n">sort_colors</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">emptycols</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">title_size</span><span class="o">=</span><span class="mi">18</span><span class="p">,</span> <span class="n">text_size</span><span class="o">=</span><span class="mi">14</span><span class="p">):</span>

    <span class="n">cell_width</span> <span class="o">=</span> <span class="mi">212</span>
    <span class="n">cell_height</span> <span class="o">=</span> <span class="mi">22</span>
    <span class="n">swatch_width</span> <span class="o">=</span> <span class="mi">48</span>
    <span class="n">margin</span> <span class="o">=</span> <span class="mi">12</span>
    <span class="n">topmargin</span> <span class="o">=</span> <span class="mi">40</span>

    <span class="c1"># Sort colors by hue, saturation, value and name.
</span>    <span class="k">if</span> <span class="n">sort_colors</span> <span class="ow">is</span> <span class="bp">True</span><span class="p">:</span>
        <span class="n">by_hsv</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">((</span><span class="nb">tuple</span><span class="p">(</span><span class="n">mcolors</span><span class="p">.</span><span class="n">rgb_to_hsv</span><span class="p">(</span><span class="n">mcolors</span><span class="p">.</span><span class="n">to_rgb</span><span class="p">(</span><span class="n">color</span><span class="p">))),</span>
                         <span class="n">name</span><span class="p">)</span>
                        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">color</span> <span class="ow">in</span> <span class="n">colors</span><span class="p">.</span><span class="n">items</span><span class="p">())</span>
        <span class="n">names</span> <span class="o">=</span> <span class="p">[</span><span class="n">name</span> <span class="k">for</span> <span class="n">hsv</span><span class="p">,</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">by_hsv</span><span class="p">]</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="n">names</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">colors</span><span class="p">)</span>

    <span class="n">n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">names</span><span class="p">)</span>
    <span class="n">ncols</span> <span class="o">=</span> <span class="mi">4</span> <span class="o">-</span> <span class="n">emptycols</span>
    <span class="n">nrows</span> <span class="o">=</span> <span class="n">n</span> <span class="o">//</span> <span class="n">ncols</span> <span class="o">+</span> <span class="nb">int</span><span class="p">(</span><span class="n">n</span> <span class="o">%</span> <span class="n">ncols</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)</span>

    <span class="n">width</span> <span class="o">=</span> <span class="n">cell_width</span> <span class="o">*</span> <span class="mi">4</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">*</span> <span class="n">margin</span>
    <span class="n">height</span> <span class="o">=</span> <span class="n">cell_height</span> <span class="o">*</span> <span class="n">nrows</span> <span class="o">+</span> <span class="n">margin</span> <span class="o">+</span> <span class="n">topmargin</span>
    <span class="n">dpi</span> <span class="o">=</span> <span class="mi">72</span>

    <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="p">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="n">width</span> <span class="o">/</span> <span class="n">dpi</span><span class="p">,</span> <span class="n">height</span> <span class="o">/</span> <span class="n">dpi</span><span class="p">),</span> <span class="n">dpi</span><span class="o">=</span><span class="n">dpi</span><span class="p">)</span>
    <span class="n">fig</span><span class="p">.</span><span class="n">subplots_adjust</span><span class="p">(</span><span class="n">margin</span><span class="o">/</span><span class="n">width</span><span class="p">,</span> <span class="n">margin</span><span class="o">/</span><span class="n">height</span><span class="p">,</span>
                        <span class="p">(</span><span class="n">width</span><span class="o">-</span><span class="n">margin</span><span class="p">)</span><span class="o">/</span><span class="n">width</span><span class="p">,</span> <span class="p">(</span><span class="n">height</span><span class="o">-</span><span class="n">topmargin</span><span class="p">)</span><span class="o">/</span><span class="n">height</span><span class="p">)</span>
    <span class="n">ax</span><span class="p">.</span><span class="n">set_xlim</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">cell_width</span> <span class="o">*</span> <span class="mi">4</span><span class="p">)</span>
    <span class="n">ax</span><span class="p">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="n">cell_height</span> <span class="o">*</span> <span class="p">(</span><span class="n">nrows</span><span class="o">-</span><span class="mf">0.5</span><span class="p">),</span> <span class="o">-</span><span class="n">cell_height</span><span class="o">/</span><span class="mf">2.</span><span class="p">)</span>
    <span class="n">ax</span><span class="p">.</span><span class="n">yaxis</span><span class="p">.</span><span class="n">set_visible</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
    <span class="n">ax</span><span class="p">.</span><span class="n">xaxis</span><span class="p">.</span><span class="n">set_visible</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
    <span class="n">ax</span><span class="p">.</span><span class="n">set_axis_off</span><span class="p">()</span>
    <span class="n">ax</span><span class="p">.</span><span class="n">set_title</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">title_size</span><span class="p">,</span> <span class="n">loc</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>

    <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">names</span><span class="p">):</span>
        <span class="n">row</span> <span class="o">=</span> <span class="n">i</span> <span class="o">%</span> <span class="n">nrows</span>
        <span class="n">col</span> <span class="o">=</span> <span class="n">i</span> <span class="o">//</span> <span class="n">nrows</span>
        <span class="n">y</span> <span class="o">=</span> <span class="n">row</span> <span class="o">*</span> <span class="n">cell_height</span>

        <span class="n">swatch_start_x</span> <span class="o">=</span> <span class="n">cell_width</span> <span class="o">*</span> <span class="n">col</span>
        <span class="n">swatch_end_x</span> <span class="o">=</span> <span class="n">cell_width</span> <span class="o">*</span> <span class="n">col</span> <span class="o">+</span> <span class="n">swatch_width</span>
        <span class="n">text_pos_x</span> <span class="o">=</span> <span class="n">cell_width</span> <span class="o">*</span> <span class="n">col</span> <span class="o">+</span> <span class="n">swatch_width</span> <span class="o">+</span> <span class="mi">7</span>

        <span class="n">ax</span><span class="p">.</span><span class="n">text</span><span class="p">(</span><span class="n">text_pos_x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">fontsize</span><span class="o">=</span><span class="n">text_size</span><span class="p">,</span>
                <span class="n">horizontalalignment</span><span class="o">=</span><span class="s">'left'</span><span class="p">,</span>
                <span class="n">verticalalignment</span><span class="o">=</span><span class="s">'center'</span><span class="p">)</span>

        <span class="n">ax</span><span class="p">.</span><span class="n">hlines</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="n">swatch_start_x</span><span class="p">,</span> <span class="n">swatch_end_x</span><span class="p">,</span>
                  <span class="n">color</span><span class="o">=</span><span class="n">colors</span><span class="p">[</span><span class="n">name</span><span class="p">],</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">18</span><span class="p">)</span>

    <span class="k">return</span> <span class="n">fig</span>
</code></pre></div></div>

<p>Since a predefined function is used for plotting, a function that generates the needed input is defined.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">make_selection_dict</span><span class="p">(</span><span class="n">names</span><span class="p">,</span> <span class="n">color_index</span><span class="p">,</span> <span class="n">val_type</span><span class="o">=</span><span class="s">"hex"</span><span class="p">):</span>
    <span class="s">"""
    Makes a dictionary for the selected colors and their values.

    Args:
        names (list): color names
        color_index (dict): All avaliable colors.
        val_type (str, optional): value return type. Defaults to "hex".

    Returns:
        [dict]: color names and values.
    """</span>
    <span class="n">value_list</span><span class="p">:</span> <span class="nb">list</span> <span class="o">=</span> <span class="p">[]</span>
    
    <span class="c1"># Makes a list of color values based on the input and desired return type.
</span>    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
        <span class="n">value_list</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">color_index</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">val_type</span><span class="p">])</span>
    
    <span class="c1"># Combines the names and values in a dictionary.
</span>    <span class="k">return</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">names</span><span class="p">,</span> <span class="n">value_list</span><span class="p">)}</span>
</code></pre></div></div>

<p>Let’s make a list of colors and test that the new function returns “hex” values.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">color_selection</span> <span class="o">=</span> <span class="p">[</span><span class="s">"red"</span><span class="p">,</span> <span class="s">"green"</span><span class="p">,</span> <span class="s">"blue"</span><span class="p">]</span>

<span class="n">display</span><span class="p">(</span><span class="n">selection</span> <span class="p">:</span><span class="o">=</span> <span class="n">make_selection_dict</span><span class="p">(</span><span class="n">color_selection</span><span class="p">,</span> <span class="n">colors</span><span class="p">,</span> <span class="s">"hex"</span><span class="p">))</span>
</code></pre></div></div>

<pre><code class="language-out">    {'red': '#e50000', 'green': '#15b01a', 'blue': '#0343df'}
</code></pre>

<p>Now the time to see the actual colors is here.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">plot_colortable</span><span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">sort_colors</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">emptycols</span><span class="o">=</span><span class="mi">1</span><span class="p">);</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/A-visual-representation-of-named-color/output_18_0.png" alt="png" /></p>

<h3 id="finding-shades-of-a-color">Finding shades of a color</h3>

<p>Allison’s Gist had some functions that enabled us to find the n closest colors to our selection based on euclidean distance. I have combined some of her functions and made alterations to them to better suit my needs.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">closest</span><span class="p">(</span><span class="n">color_index</span><span class="p">,</span> <span class="n">color_val</span><span class="p">,</span> <span class="n">n</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
    <span class="s">"""
    Defines a list of n closest colors to the input color.

    Args:
        color_index (dict): All avaliable colors.
        color_val (dict): Base color.
        n (int, optional): Number of closest colors. Defaults to 10.

    Returns:
        list: Names of closest colors.
    """</span>
    <span class="kn">from</span> <span class="nn">scipy.spatial.distance</span> <span class="kn">import</span> <span class="n">euclidean</span>
    <span class="n">closest</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color_val</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">color_index</span><span class="p">.</span><span class="n">keys</span><span class="p">(),</span>
                          <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">euclidean</span><span class="p">(</span><span class="n">color_val</span><span class="p">[</span><span class="s">"int"</span><span class="p">],</span>
                                                  <span class="n">color_index</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s">"int"</span><span class="p">]))[:</span><span class="n">n</span><span class="p">]:</span>
            <span class="n">closest</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
    <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">color_val</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span>
                <span class="n">color_index</span><span class="p">.</span><span class="n">keys</span><span class="p">(),</span>
                <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">euclidean</span><span class="p">(</span><span class="n">color_val</span><span class="p">,</span> <span class="n">color_index</span><span class="p">[</span><span class="n">x</span><span class="p">][</span><span class="s">"int"</span><span class="p">]))[:</span><span class="n">n</span><span class="p">]:</span>
            <span class="n">closest</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">closest</span>
</code></pre></div></div>

<p>Let’s find the 6 closest colors to “red”.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">color_selection</span> <span class="o">=</span> <span class="n">closest</span><span class="p">(</span><span class="n">colors</span><span class="p">,</span> <span class="n">colors</span><span class="p">[</span><span class="s">"red"</span><span class="p">],</span> <span class="mi">6</span><span class="p">)</span>
<span class="n">selection</span> <span class="o">=</span> <span class="n">make_selection_dict</span><span class="p">(</span><span class="n">color_selection</span><span class="p">,</span> <span class="n">colors</span><span class="p">,</span> <span class="s">"hex"</span><span class="p">)</span>  <span class="c1"># &lt;-- using hex
</span><span class="n">plot_colortable</span><span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">emptycols</span><span class="o">=</span><span class="mi">1</span><span class="p">);</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/A-visual-representation-of-named-color/output_22_0.png" alt="png" /></p>

<p>Let’s find the 6 closest colors to “green”.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">color_selection</span> <span class="o">=</span> <span class="n">closest</span><span class="p">(</span><span class="n">colors</span><span class="p">,</span> <span class="n">colors</span><span class="p">[</span><span class="s">"green"</span><span class="p">],</span> <span class="mi">6</span><span class="p">)</span>
<span class="n">selection</span> <span class="o">=</span> <span class="n">make_selection_dict</span><span class="p">(</span><span class="n">color_selection</span><span class="p">,</span> <span class="n">colors</span><span class="p">,</span> <span class="s">"norm"</span><span class="p">)</span>  <span class="c1"># &lt;-- using norm
</span><span class="n">plot_colortable</span><span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">emptycols</span><span class="o">=</span><span class="mi">1</span><span class="p">);</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/A-visual-representation-of-named-color/output_24_0.png" alt="png" /></p>

<p>Let’s find the 12 closest colors to “pure blue”, by using the RGB values.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">color_selection</span> <span class="o">=</span> <span class="n">closest</span><span class="p">(</span><span class="n">colors</span><span class="p">,</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">223</span><span class="p">],</span> <span class="mi">12</span><span class="p">)</span>
<span class="n">selection</span> <span class="o">=</span> <span class="n">make_selection_dict</span><span class="p">(</span><span class="n">color_selection</span><span class="p">,</span> <span class="n">colors</span><span class="p">,</span> <span class="s">"hex"</span><span class="p">)</span>
<span class="n">plot_colortable</span><span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">emptycols</span><span class="o">=</span><span class="mi">1</span><span class="p">);</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/A-visual-representation-of-named-color/output_26_0.png" alt="png" /></p>

<h3 id="playing-with-vectors">Playing with vectors</h3>

<p>The following functions are copied as they were from the previously mentioned Gist since they do the intended job, and I don’t see any need to alter them.</p>

<h4 id="subtract-one-color-from-another">Subtract one color from another</h4>

<p>Let’s test subtracting “magenta” from “cyan”.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">subtractv</span><span class="p">(</span><span class="n">coord1</span><span class="p">,</span> <span class="n">coord2</span><span class="p">):</span>
    <span class="k">return</span> <span class="p">[</span><span class="n">c1</span> <span class="o">-</span> <span class="n">c2</span> <span class="k">for</span> <span class="n">c1</span><span class="p">,</span> <span class="n">c2</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">coord1</span><span class="p">,</span> <span class="n">coord2</span><span class="p">)]</span>

<span class="c1"># Have to use "int" in the subtractv function
</span><span class="n">color_selection</span> <span class="o">=</span> <span class="n">closest</span><span class="p">(</span><span class="n">colors</span><span class="p">,</span> <span class="n">subtractv</span><span class="p">(</span><span class="n">colors</span><span class="p">[</span><span class="s">'magenta'</span><span class="p">][</span><span class="s">"int"</span><span class="p">],</span> <span class="n">colors</span><span class="p">[</span><span class="s">'cyan'</span><span class="p">][</span><span class="s">"int"</span><span class="p">]),</span> <span class="mi">12</span><span class="p">)</span>
<span class="n">selection</span> <span class="o">=</span> <span class="n">make_selection_dict</span><span class="p">(</span><span class="n">color_selection</span><span class="p">,</span> <span class="n">colors</span><span class="p">,</span> <span class="s">"hex"</span><span class="p">)</span>
<span class="n">plot_colortable</span><span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">emptycols</span><span class="o">=</span><span class="mi">1</span><span class="p">);</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/A-visual-representation-of-named-color/output_29_0.png" alt="png" /></p>

<h4 id="add-one-color-to-another">Add one color to another</h4>

<p>Let’s test adding “royal” with “teal”.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">addv</span><span class="p">(</span><span class="n">coord1</span><span class="p">,</span> <span class="n">coord2</span><span class="p">):</span>
    <span class="k">return</span> <span class="p">[</span><span class="n">c1</span> <span class="o">+</span> <span class="n">c2</span> <span class="k">for</span> <span class="n">c1</span><span class="p">,</span> <span class="n">c2</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">coord1</span><span class="p">,</span> <span class="n">coord2</span><span class="p">)]</span>

<span class="c1"># Have to use "int" in the addv function
</span><span class="n">color_selection</span> <span class="o">=</span> <span class="n">closest</span><span class="p">(</span><span class="n">colors</span><span class="p">,</span> <span class="n">addv</span><span class="p">(</span><span class="n">colors</span><span class="p">[</span><span class="s">'royal'</span><span class="p">][</span><span class="s">"int"</span><span class="p">],</span> <span class="n">colors</span><span class="p">[</span><span class="s">'teal'</span><span class="p">][</span><span class="s">"int"</span><span class="p">]),</span> <span class="mi">12</span><span class="p">)</span>
<span class="n">selection</span> <span class="o">=</span> <span class="n">make_selection_dict</span><span class="p">(</span><span class="n">color_selection</span><span class="p">,</span> <span class="n">colors</span><span class="p">,</span> <span class="s">"hex"</span><span class="p">)</span>
<span class="n">plot_colortable</span><span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">emptycols</span><span class="o">=</span><span class="mi">1</span><span class="p">);</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/A-visual-representation-of-named-color/output_31_0.png" alt="png" /></p>

<h4 id="find-the-average-of-a-list">Find the average of a list</h4>

<p>Let’s test finding the average of black and white.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">meanv</span><span class="p">(</span><span class="n">coords</span><span class="p">):</span>
    <span class="c1"># assumes every item in coords has same length as item 0
</span>    <span class="n">sumv</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">coords</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">coords</span><span class="p">:</span>
        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">item</span><span class="p">)):</span>
            <span class="n">sumv</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+=</span> <span class="n">item</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
    <span class="n">mean</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">sumv</span><span class="p">)</span>
    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">sumv</span><span class="p">)):</span>
        <span class="n">mean</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">sumv</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">coords</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">mean</span>
<span class="n">meanv</span><span class="p">([[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">3</span><span class="p">]])</span>

<span class="c1"># Have to use "int" in the meanv function
</span><span class="n">color_selection</span> <span class="o">=</span> <span class="n">closest</span><span class="p">(</span><span class="n">colors</span><span class="p">,</span> <span class="n">meanv</span><span class="p">([</span><span class="n">colors</span><span class="p">[</span><span class="s">'black'</span><span class="p">][</span><span class="s">"int"</span><span class="p">],</span> <span class="n">colors</span><span class="p">[</span><span class="s">'white'</span><span class="p">][</span><span class="s">"int"</span><span class="p">]]),</span> <span class="mi">12</span><span class="p">)</span>
<span class="n">selection</span> <span class="o">=</span> <span class="n">make_selection_dict</span><span class="p">(</span><span class="n">color_selection</span><span class="p">,</span> <span class="n">colors</span><span class="p">,</span> <span class="s">"hex"</span><span class="p">)</span>
<span class="n">plot_colortable</span><span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">emptycols</span><span class="o">=</span><span class="mi">1</span><span class="p">);</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/A-visual-representation-of-named-color/output_33_0.png" alt="png" /></p>

<h4 id="finding-random-colors">Finding random colors</h4>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">random</span>

<span class="n">color_selection</span> <span class="o">=</span> <span class="n">random</span><span class="p">.</span><span class="n">sample</span><span class="p">(</span><span class="n">colors</span><span class="p">.</span><span class="n">keys</span><span class="p">(),</span> <span class="mi">12</span><span class="p">)</span>
<span class="n">selection</span> <span class="o">=</span> <span class="n">make_selection_dict</span><span class="p">(</span><span class="n">color_selection</span><span class="p">,</span> <span class="n">colors</span><span class="p">,</span> <span class="s">"hex"</span><span class="p">)</span>
<span class="n">plot_colortable</span><span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">sort_colors</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">emptycols</span><span class="o">=</span><span class="mi">1</span><span class="p">);</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/A-visual-representation-of-named-color/output_35_0.png" alt="png" /></p>

<h4 id="every-n-color-in-range">Every n color in range</h4>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">color_selection</span> <span class="o">=</span> <span class="p">[</span><span class="nb">list</span><span class="p">(</span><span class="n">colors</span><span class="p">.</span><span class="n">keys</span><span class="p">())[</span><span class="n">x</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">37</span><span class="p">,</span> <span class="mi">3</span><span class="p">)]</span>
<span class="n">selection</span> <span class="o">=</span> <span class="n">make_selection_dict</span><span class="p">(</span><span class="n">color_selection</span><span class="p">,</span> <span class="n">colors</span><span class="p">,</span> <span class="s">"hex"</span><span class="p">)</span>
<span class="n">plot_colortable</span><span class="p">(</span><span class="n">selection</span><span class="p">,</span> <span class="n">emptycols</span><span class="o">=</span><span class="mi">1</span><span class="p">);</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/A-visual-representation-of-named-color/output_37_0.png" alt="png" /></p>]]></content><author><name>Lewi Uberg</name></author><category term="Data Science" /><category term="Programming" /><category term="Data Visualization" /><category term="data science" /><category term="python" /><category term="matplotlib" /><summary type="html"><![CDATA[Colors as vectors visualized with Matplotlib.]]></summary></entry><entry><title type="html">Matplotlib vs Plotly</title><link href="https://uberg.me/matplotlib-vs-plotly/" rel="alternate" type="text/html" title="Matplotlib vs Plotly" /><published>2020-12-11T00:00:00+00:00</published><updated>2020-12-11T00:00:00+00:00</updated><id>https://uberg.me/Matplotlib-vs-Plotly</id><content type="html" xml:base="https://uberg.me/matplotlib-vs-plotly/"><![CDATA[<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-X5TVX1RNG8"></script>

<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-X5TVX1RNG8');
</script>

<h2 id="matplotlib-vs-plotly-with-embeded-graph">Matplotlib vs Plotly (with embeded graph)</h2>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="n">pd</span>
<span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="n">np</span>
<span class="kn">import</span> <span class="nn">matplotlib</span> <span class="k">as</span> <span class="n">mlp</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="n">plt</span>
<span class="kn">import</span> <span class="nn">seaborn</span> <span class="k">as</span> <span class="n">sns</span>
</code></pre></div></div>

<h3 id="data-preparation">Data preparation</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="n">read_csv</span><span class="p">(</span><span class="s">"Dataset.csv"</span><span class="p">)</span>
<span class="c1">#df = pd.read_csv("eLearning_Employee_Satisfaction.csv")
</span></code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">df</span>
</code></pre></div></div>

<div>
<style scoped="">
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>YEAR</th>
      <th>MONTH</th>
      <th>Content satisfaction</th>
      <th>Experience satisfaction</th>
      <th>Target</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>2019.0</td>
      <td>AUG</td>
      <td>78</td>
      <td>75</td>
      <td>85</td>
    </tr>
    <tr>
      <th>1</th>
      <td>NaN</td>
      <td>SEP</td>
      <td>78</td>
      <td>72</td>
      <td>85</td>
    </tr>
    <tr>
      <th>2</th>
      <td>NaN</td>
      <td>OCT</td>
      <td>77</td>
      <td>72</td>
      <td>85</td>
    </tr>
    <tr>
      <th>3</th>
      <td>NaN</td>
      <td>NOV</td>
      <td>76</td>
      <td>71</td>
      <td>85</td>
    </tr>
    <tr>
      <th>4</th>
      <td>NaN</td>
      <td>DEC</td>
      <td>75</td>
      <td>73</td>
      <td>85</td>
    </tr>
    <tr>
      <th>5</th>
      <td>2020.0</td>
      <td>JAN</td>
      <td>74</td>
      <td>71</td>
      <td>85</td>
    </tr>
    <tr>
      <th>6</th>
      <td>NaN</td>
      <td>FEB</td>
      <td>72</td>
      <td>70</td>
      <td>85</td>
    </tr>
    <tr>
      <th>7</th>
      <td>NaN</td>
      <td>MAR</td>
      <td>70</td>
      <td>68</td>
      <td>85</td>
    </tr>
    <tr>
      <th>8</th>
      <td>NaN</td>
      <td>APR</td>
      <td>73</td>
      <td>73</td>
      <td>85</td>
    </tr>
    <tr>
      <th>9</th>
      <td>NaN</td>
      <td>MAY</td>
      <td>80</td>
      <td>80</td>
      <td>85</td>
    </tr>
    <tr>
      <th>10</th>
      <td>NaN</td>
      <td>JUN</td>
      <td>80</td>
      <td>79</td>
      <td>85</td>
    </tr>
    <tr>
      <th>11</th>
      <td>NaN</td>
      <td>JUL</td>
      <td>81</td>
      <td>80</td>
      <td>85</td>
    </tr>
  </tbody>
</table>
</div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">df</span><span class="p">.</span><span class="n">loc</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span> <span class="s">"YEAR"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2019</span>
<span class="n">df</span><span class="p">.</span><span class="n">loc</span><span class="p">[</span><span class="mi">5</span><span class="p">:</span><span class="mi">11</span><span class="p">,</span> <span class="s">"YEAR"</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2020</span>
<span class="n">df</span><span class="p">[[</span><span class="s">"YEAR"</span><span class="p">,</span><span class="s">"Content satisfaction"</span><span class="p">,</span> <span class="s">"Experience satisfaction"</span><span class="p">,</span> <span class="s">"Target"</span><span class="p">]]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s">"YEAR"</span><span class="p">,</span><span class="s">"Content satisfaction"</span><span class="p">,</span> <span class="s">"Experience satisfaction"</span><span class="p">,</span> <span class="s">"Target"</span><span class="p">]].</span><span class="n">astype</span><span class="p">(</span><span class="s">"int"</span><span class="p">)</span>
<span class="c1">#df.set_index(["YEAR", "MONTH"], inplace=True)
</span><span class="n">df</span><span class="p">[</span><span class="s">"Period"</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s">"MONTH"</span><span class="p">].</span><span class="n">astype</span><span class="p">(</span><span class="s">"str"</span><span class="p">)</span> <span class="o">+</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span> <span class="o">+</span> <span class="n">df</span><span class="p">[</span><span class="s">"YEAR"</span><span class="p">].</span><span class="n">astype</span><span class="p">(</span><span class="s">"str"</span><span class="p">)</span>
<span class="n">df</span>
</code></pre></div></div>

<div>
<style scoped="">
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>YEAR</th>
      <th>MONTH</th>
      <th>Content satisfaction</th>
      <th>Experience satisfaction</th>
      <th>Target</th>
      <th>Period</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>2019</td>
      <td>AUG</td>
      <td>78</td>
      <td>75</td>
      <td>85</td>
      <td>AUG\n2019</td>
    </tr>
    <tr>
      <th>1</th>
      <td>2019</td>
      <td>SEP</td>
      <td>78</td>
      <td>72</td>
      <td>85</td>
      <td>SEP\n2019</td>
    </tr>
    <tr>
      <th>2</th>
      <td>2019</td>
      <td>OCT</td>
      <td>77</td>
      <td>72</td>
      <td>85</td>
      <td>OCT\n2019</td>
    </tr>
    <tr>
      <th>3</th>
      <td>2019</td>
      <td>NOV</td>
      <td>76</td>
      <td>71</td>
      <td>85</td>
      <td>NOV\n2019</td>
    </tr>
    <tr>
      <th>4</th>
      <td>2019</td>
      <td>DEC</td>
      <td>75</td>
      <td>73</td>
      <td>85</td>
      <td>DEC\n2019</td>
    </tr>
    <tr>
      <th>5</th>
      <td>2020</td>
      <td>JAN</td>
      <td>74</td>
      <td>71</td>
      <td>85</td>
      <td>JAN\n2020</td>
    </tr>
    <tr>
      <th>6</th>
      <td>2020</td>
      <td>FEB</td>
      <td>72</td>
      <td>70</td>
      <td>85</td>
      <td>FEB\n2020</td>
    </tr>
    <tr>
      <th>7</th>
      <td>2020</td>
      <td>MAR</td>
      <td>70</td>
      <td>68</td>
      <td>85</td>
      <td>MAR\n2020</td>
    </tr>
    <tr>
      <th>8</th>
      <td>2020</td>
      <td>APR</td>
      <td>73</td>
      <td>73</td>
      <td>85</td>
      <td>APR\n2020</td>
    </tr>
    <tr>
      <th>9</th>
      <td>2020</td>
      <td>MAY</td>
      <td>80</td>
      <td>80</td>
      <td>85</td>
      <td>MAY\n2020</td>
    </tr>
    <tr>
      <th>10</th>
      <td>2020</td>
      <td>JUN</td>
      <td>80</td>
      <td>79</td>
      <td>85</td>
      <td>JUN\n2020</td>
    </tr>
    <tr>
      <th>11</th>
      <td>2020</td>
      <td>JUL</td>
      <td>81</td>
      <td>80</td>
      <td>85</td>
      <td>JUL\n2020</td>
    </tr>
  </tbody>
</table>
</div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">df</span><span class="p">.</span><span class="n">iloc</span><span class="p">[</span><span class="mi">5</span><span class="p">,</span><span class="mi">1</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span>
</code></pre></div></div>

<pre><code class="language-out">MONTH    JAN
Name: 5, dtype: object
</code></pre>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">type</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="s">"Content satisfaction"</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span>
</code></pre></div></div>

<pre><code class="language-out">numpy.int64
</code></pre>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">type</span><span class="p">(</span><span class="n">df</span><span class="p">.</span><span class="n">iloc</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">:</span><span class="mi">1</span><span class="p">])</span>
</code></pre></div></div>

<pre><code class="language-out">pandas.core.series.Series
</code></pre>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">plt</span><span class="p">.</span><span class="n">plot</span><span class="p">(</span><span class="n">df</span><span class="p">.</span><span class="n">MONTH</span><span class="p">,</span> <span class="n">df</span><span class="p">[</span><span class="s">"Content satisfaction"</span><span class="p">])</span>
<span class="n">plt</span><span class="p">.</span><span class="n">show</span><span class="p">()</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/Matplotlib-vs-Plotly/output_9_0.png" alt="image-center" class="align-center" /></p>

<h3 id="graph-with-matplotlib">Graph with Matplotlib</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">x</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="n">MONTH</span>
<span class="n">y1</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s">"Content satisfaction"</span><span class="p">]</span>
<span class="n">y2</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s">"Experience satisfaction"</span><span class="p">]</span>
<span class="n">y3</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s">"Target"</span><span class="p">]</span>

<span class="n">y1_color</span> <span class="o">=</span> <span class="s">"steelblue"</span>
<span class="n">y2_color</span> <span class="o">=</span> <span class="s">"lightblue"</span>
<span class="n">y3_color</span> <span class="o">=</span> <span class="s">"black"</span>

<span class="n">markersize</span> <span class="o">=</span> <span class="mi">50</span>
<span class="n">value_fontsize</span> <span class="o">=</span> <span class="mi">14</span>
<span class="n">value_fontsize_title</span> <span class="o">=</span> <span class="mi">22</span>

<span class="n">fontfamily</span> <span class="o">=</span> <span class="s">"Sans"</span>

<span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="p">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="mi">6</span><span class="p">))</span>

<span class="n">plt</span><span class="p">.</span><span class="n">title</span><span class="p">(</span><span class="s">"    eLearning Employee Satisfaction"</span><span class="p">,</span>
          <span class="n">loc</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
          <span class="n">pad</span><span class="o">=</span><span class="mi">25</span><span class="p">,</span>
          <span class="n">fontsize</span><span class="o">=</span><span class="n">value_fontsize_title</span><span class="p">,</span>
          <span class="n">alpha</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
          <span class="n">fontweight</span><span class="o">=</span><span class="s">"bold"</span><span class="p">)</span>

<span class="n">xs</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="n">MONTH</span>
<span class="n">ys1</span> <span class="o">=</span> <span class="n">y1</span>
<span class="n">ys2</span> <span class="o">=</span> <span class="n">y2</span>
<span class="n">ys3</span> <span class="o">=</span> <span class="n">y3</span>

<span class="n">ax</span><span class="p">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y1</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">y1_color</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">xs</span><span class="p">[[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">11</span><span class="p">]],</span> <span class="n">ys1</span><span class="p">[[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">11</span><span class="p">]],</span> <span class="n">color</span><span class="o">=</span><span class="n">y1_color</span><span class="p">,</span> <span class="n">s</span><span class="o">=</span><span class="n">markersize</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">annotate</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">ys1</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">:</span><span class="p">.</span><span class="mi">0</span><span class="n">f</span><span class="si">}</span><span class="s">%"</span><span class="p">,</span> <span class="p">(</span><span class="n">xs</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">ys1</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span>
            <span class="n">textcoords</span><span class="o">=</span><span class="s">"offset points"</span><span class="p">,</span>
            <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span>
            <span class="n">ha</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
            <span class="n">fontweight</span><span class="o">=</span><span class="s">"bold"</span><span class="p">,</span>
            <span class="n">fontsize</span><span class="o">=</span><span class="n">value_fontsize</span><span class="p">,</span>
            <span class="n">color</span><span class="o">=</span><span class="n">y1_color</span><span class="p">)</span>

<span class="n">ax</span><span class="p">.</span><span class="n">annotate</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">ys1</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span><span class="si">:</span><span class="p">.</span><span class="mi">0</span><span class="n">f</span><span class="si">}</span><span class="s">%"</span><span class="p">,</span> <span class="p">(</span><span class="n">xs</span><span class="p">[</span><span class="mi">7</span><span class="p">],</span> <span class="n">ys1</span><span class="p">[</span><span class="mi">7</span><span class="p">]),</span>
            <span class="n">textcoords</span><span class="o">=</span><span class="s">"offset points"</span><span class="p">,</span>
            <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="o">-</span><span class="mi">17</span><span class="p">,</span> <span class="mi">18</span><span class="p">),</span>
            <span class="n">ha</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
            <span class="n">fontweight</span><span class="o">=</span><span class="s">"bold"</span><span class="p">,</span>
            <span class="n">fontsize</span><span class="o">=</span><span class="n">value_fontsize</span><span class="p">,</span>
            <span class="n">color</span><span class="o">=</span><span class="n">y1_color</span><span class="p">)</span>

<span class="n">ax</span><span class="p">.</span><span class="n">annotate</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">ys1</span><span class="p">[</span><span class="mi">11</span><span class="p">]</span><span class="si">:</span><span class="p">.</span><span class="mi">0</span><span class="n">f</span><span class="si">}</span><span class="s">% Content satisfaction"</span><span class="p">,</span> <span class="p">(</span><span class="n">xs</span><span class="p">[</span><span class="mi">11</span><span class="p">],</span> <span class="n">ys1</span><span class="p">[</span><span class="mi">11</span><span class="p">]),</span>
            <span class="n">textcoords</span><span class="o">=</span><span class="s">"offset points"</span><span class="p">,</span>
            <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="o">-</span><span class="mi">3</span><span class="p">),</span>
            <span class="n">ha</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
            <span class="n">fontweight</span><span class="o">=</span><span class="s">"bold"</span><span class="p">,</span>
            <span class="n">fontsize</span><span class="o">=</span><span class="n">value_fontsize</span><span class="p">,</span>
            <span class="n">color</span><span class="o">=</span><span class="n">y1_color</span><span class="p">)</span>

<span class="n">ax</span><span class="p">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y2</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">y2_color</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">scatter</span><span class="p">(</span><span class="n">xs</span><span class="p">[[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">11</span><span class="p">]],</span> <span class="n">ys2</span><span class="p">[[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">11</span><span class="p">]],</span> <span class="n">color</span><span class="o">=</span><span class="n">y2_color</span><span class="p">,</span> <span class="n">s</span><span class="o">=</span><span class="n">markersize</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">annotate</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">ys2</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">:</span><span class="p">.</span><span class="mi">0</span><span class="n">f</span><span class="si">}</span><span class="s">%"</span><span class="p">,</span> <span class="p">(</span><span class="n">xs</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">ys2</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span>
            <span class="n">textcoords</span><span class="o">=</span><span class="s">"offset points"</span><span class="p">,</span>
            <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span>
            <span class="n">ha</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
            <span class="n">fontweight</span><span class="o">=</span><span class="s">"bold"</span><span class="p">,</span>
            <span class="n">fontsize</span><span class="o">=</span><span class="n">value_fontsize</span><span class="p">,</span>
            <span class="n">color</span><span class="o">=</span><span class="n">y2_color</span><span class="p">)</span>

<span class="n">ax</span><span class="p">.</span><span class="n">annotate</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">ys2</span><span class="p">[</span><span class="mi">7</span><span class="p">]</span><span class="si">:</span><span class="p">.</span><span class="mi">0</span><span class="n">f</span><span class="si">}</span><span class="s">%"</span><span class="p">,</span> <span class="p">(</span><span class="n">xs</span><span class="p">[</span><span class="mi">7</span><span class="p">],</span> <span class="n">ys2</span><span class="p">[</span><span class="mi">7</span><span class="p">]),</span>
            <span class="n">textcoords</span><span class="o">=</span><span class="s">"offset points"</span><span class="p">,</span>
            <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="o">-</span><span class="mi">17</span><span class="p">,</span> <span class="o">-</span><span class="mi">18</span><span class="p">),</span>
            <span class="n">ha</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
            <span class="n">fontweight</span><span class="o">=</span><span class="s">"bold"</span><span class="p">,</span>
            <span class="n">fontsize</span><span class="o">=</span><span class="n">value_fontsize</span><span class="p">,</span>
            <span class="n">color</span><span class="o">=</span><span class="n">y2_color</span><span class="p">)</span>

<span class="n">ax</span><span class="p">.</span><span class="n">annotate</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">ys2</span><span class="p">[</span><span class="mi">11</span><span class="p">]</span><span class="si">:</span><span class="p">.</span><span class="mi">0</span><span class="n">f</span><span class="si">}</span><span class="s">% Experience satisfaction"</span><span class="p">,</span> <span class="p">(</span><span class="n">xs</span><span class="p">[</span><span class="mi">11</span><span class="p">],</span> <span class="n">ys2</span><span class="p">[</span><span class="mi">11</span><span class="p">]),</span>
            <span class="n">textcoords</span><span class="o">=</span><span class="s">"offset points"</span><span class="p">,</span>
            <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="o">-</span><span class="mi">3</span><span class="p">),</span>
            <span class="n">ha</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
            <span class="n">fontweight</span><span class="o">=</span><span class="s">"bold"</span><span class="p">,</span>
            <span class="n">fontsize</span><span class="o">=</span><span class="n">value_fontsize</span><span class="p">,</span>
            <span class="n">color</span><span class="o">=</span><span class="n">y2_color</span><span class="p">)</span>

<span class="n">ax</span><span class="p">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y3</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="n">y3_color</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">)),</span> <span class="n">alpha</span><span class="o">=</span><span class="p">.</span><span class="mi">5</span><span class="p">)</span>
<span class="c1">#ax.scatter(xs[11], ys3[11], color=y3_color, s=markersize)
</span><span class="n">ax</span><span class="p">.</span><span class="n">annotate</span><span class="p">(</span><span class="sa">f</span><span class="s">"</span><span class="si">{</span><span class="n">ys3</span><span class="p">[</span><span class="mi">11</span><span class="p">]</span><span class="si">:</span><span class="p">.</span><span class="mi">0</span><span class="n">f</span><span class="si">}</span><span class="s">% Target"</span><span class="p">,</span> <span class="p">(</span><span class="n">xs</span><span class="p">[</span><span class="mi">11</span><span class="p">],</span> <span class="n">ys3</span><span class="p">[</span><span class="mi">11</span><span class="p">]),</span>
            <span class="n">textcoords</span><span class="o">=</span><span class="s">"offset points"</span><span class="p">,</span>
            <span class="n">xytext</span><span class="o">=</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="o">-</span><span class="mi">3</span><span class="p">),</span>
            <span class="n">ha</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
            <span class="n">fontweight</span><span class="o">=</span><span class="s">"bold"</span><span class="p">,</span>
            <span class="n">fontsize</span><span class="o">=</span><span class="n">value_fontsize</span><span class="p">,</span>
            <span class="n">color</span><span class="o">=</span><span class="n">y3_color</span><span class="p">,</span>
            <span class="n">alpha</span><span class="o">=</span><span class="p">.</span><span class="mi">75</span><span class="p">)</span>

<span class="c1"># ax.set_xlim()
</span><span class="n">ax</span><span class="p">.</span><span class="n">xaxis</span><span class="p">.</span><span class="n">set_ticks_position</span><span class="p">(</span><span class="s">'none'</span><span class="p">)</span>
<span class="c1"># ax.xaxis.set_tick_params(labelsize=value_fontsize)
</span><span class="k">for</span> <span class="n">tick</span> <span class="ow">in</span> <span class="n">ax</span><span class="p">.</span><span class="n">xaxis</span><span class="p">.</span><span class="n">get_major_ticks</span><span class="p">():</span>
    <span class="n">tick</span><span class="p">.</span><span class="n">label1</span><span class="p">.</span><span class="n">set_fontsize</span><span class="p">(</span><span class="n">value_fontsize</span><span class="p">)</span>
    <span class="n">tick</span><span class="p">.</span><span class="n">label1</span><span class="p">.</span><span class="n">set_fontweight</span><span class="p">(</span><span class="s">"bold"</span><span class="p">)</span>
    <span class="n">tick</span><span class="p">.</span><span class="n">label1</span><span class="p">.</span><span class="n">set_alpha</span><span class="p">(.</span><span class="mi">75</span><span class="p">)</span>

<span class="n">plt</span><span class="p">.</span><span class="n">figtext</span><span class="p">(.</span><span class="mi">1401</span><span class="p">,</span>
            <span class="p">.</span><span class="mi">04</span><span class="p">,</span>
            <span class="s">"2019                                                 2020"</span><span class="p">,</span>
            <span class="n">fontsize</span><span class="o">=</span><span class="n">value_fontsize</span><span class="p">,</span>
            <span class="n">fontweight</span><span class="o">=</span><span class="s">"bold"</span><span class="p">,</span>
            <span class="n">color</span><span class="o">=</span><span class="s">"black"</span><span class="p">,</span>
            <span class="n">fontfamily</span><span class="o">=</span><span class="n">fontfamily</span><span class="p">,</span>
            <span class="n">alpha</span><span class="o">=</span><span class="p">.</span><span class="mi">75</span><span class="p">)</span>

<span class="n">ax</span><span class="p">.</span><span class="n">set_ylim</span><span class="p">(</span><span class="mi">65</span><span class="p">,</span> <span class="mi">85</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">set_yticks</span><span class="p">([])</span>

<span class="n">ax</span><span class="p">.</span><span class="n">spines</span><span class="p">[</span><span class="s">"left"</span><span class="p">].</span><span class="n">set_visible</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">spines</span><span class="p">[</span><span class="s">"right"</span><span class="p">].</span><span class="n">set_visible</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">spines</span><span class="p">[</span><span class="s">"top"</span><span class="p">].</span><span class="n">set_visible</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>
<span class="n">ax</span><span class="p">.</span><span class="n">spines</span><span class="p">[</span><span class="s">"bottom"</span><span class="p">].</span><span class="n">set_visible</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>

<span class="n">plt</span><span class="p">.</span><span class="n">savefig</span><span class="p">(</span><span class="s">"post.png"</span><span class="p">)</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/Matplotlib-vs-Plotly/output_11_0.png" alt="image-center" class="align-center" /></p>

<h3 id="graph-with-plotly">Graph with Plotly</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">plotly.graph_objects</span> <span class="k">as</span> <span class="n">go</span>

<span class="n">x</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="n">MONTH</span>
<span class="n">y1</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s">"Content satisfaction"</span><span class="p">]</span>
<span class="n">y2</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s">"Experience satisfaction"</span><span class="p">]</span>
<span class="n">y3</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s">"Target"</span><span class="p">]</span>

<span class="n">y1_color</span> <span class="o">=</span> <span class="s">"steelblue"</span>
<span class="n">y2_color</span> <span class="o">=</span> <span class="s">"lightblue"</span>
<span class="n">y3_color</span> <span class="o">=</span> <span class="s">"black"</span>

<span class="n">markersize</span> <span class="o">=</span> <span class="mi">10</span>
<span class="n">value_fontsize</span> <span class="o">=</span> <span class="mi">14</span>
<span class="n">value_fontsize_title</span> <span class="o">=</span> <span class="mi">22</span>

<span class="n">fontfamily</span> <span class="o">=</span> <span class="s">"Arial"</span>

<span class="n">p</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">11</span><span class="p">]</span>

<span class="c1"># Create traces
</span><span class="n">fig</span> <span class="o">=</span> <span class="n">go</span><span class="p">.</span><span class="n">Figure</span><span class="p">()</span>

<span class="c1"># Trace 1
</span><span class="n">fig</span><span class="p">.</span><span class="n">add_trace</span><span class="p">(</span>
    <span class="n">go</span><span class="p">.</span><span class="n">Scatter</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">,</span>
               <span class="n">y</span><span class="o">=</span><span class="n">y1</span><span class="p">,</span>
               <span class="n">mode</span><span class="o">=</span><span class="s">"lines"</span><span class="p">,</span>
               <span class="n">name</span><span class="o">=</span><span class="s">"Content satisfaction"</span><span class="p">,</span>
               <span class="n">line</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y1_color</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">3</span><span class="p">)))</span>
<span class="n">fig</span><span class="p">.</span><span class="n">add_trace</span><span class="p">(</span>
    <span class="n">go</span><span class="p">.</span><span class="n">Scatter</span><span class="p">(</span>
        <span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">.</span><span class="n">take</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">11</span><span class="p">]),</span>
        <span class="n">y</span><span class="o">=</span><span class="n">y1</span><span class="p">.</span><span class="n">take</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">11</span><span class="p">]),</span>
        <span class="n">mode</span><span class="o">=</span><span class="s">"markers"</span><span class="p">,</span>  <span class="c1"># "markers+text"
</span>        <span class="c1">#name="Experience satisfaction",
</span>        <span class="n">marker</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y1_color</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">markersize</span><span class="p">),</span>
<span class="c1">#         text=[f"{y2[p[0]]}%", f"{y2[p[1]]}%"],
#         textposition="top center"
</span>    <span class="p">)</span>
<span class="p">)</span>

<span class="c1"># Trace 2
</span><span class="n">fig</span><span class="p">.</span><span class="n">add_trace</span><span class="p">(</span>
    <span class="n">go</span><span class="p">.</span><span class="n">Scatter</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">,</span>
               <span class="n">y</span><span class="o">=</span><span class="n">y2</span><span class="p">,</span>
               <span class="n">mode</span><span class="o">=</span><span class="s">"lines"</span><span class="p">,</span>
               <span class="n">name</span><span class="o">=</span><span class="s">"Experience satisfaction"</span><span class="p">,</span>
               <span class="n">line</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y2_color</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">3</span><span class="p">)))</span>
<span class="n">fig</span><span class="p">.</span><span class="n">add_trace</span><span class="p">(</span>
    <span class="n">go</span><span class="p">.</span><span class="n">Scatter</span><span class="p">(</span>
        <span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">.</span><span class="n">take</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">11</span><span class="p">]),</span>
        <span class="n">y</span><span class="o">=</span><span class="n">y2</span><span class="p">.</span><span class="n">take</span><span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">11</span><span class="p">]),</span>
        <span class="n">mode</span><span class="o">=</span><span class="s">"markers"</span><span class="p">,</span>  <span class="c1"># "markers+text"
</span>        <span class="c1">#name="Experience satisfaction",
</span>        <span class="n">marker</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y2_color</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="n">markersize</span><span class="p">),</span>
<span class="c1">#         text=[f"{y2[p[0]]}%", f"{y2[p[1]]}%"],
#         textposition="top center"
</span>    <span class="p">)</span>
<span class="p">)</span>

<span class="c1"># Trace 3
</span><span class="n">fig</span><span class="p">.</span><span class="n">add_trace</span><span class="p">(</span>
    <span class="n">go</span><span class="p">.</span><span class="n">Scatter</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">,</span>
               <span class="n">y</span><span class="o">=</span><span class="n">y3</span><span class="p">,</span>
               <span class="n">mode</span><span class="o">=</span><span class="s">"lines"</span><span class="p">,</span>
               <span class="n">name</span><span class="o">=</span><span class="s">"Target"</span><span class="p">,</span>
               <span class="n">line</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y3_color</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">dash</span><span class="o">=</span><span class="s">"dash"</span><span class="p">)))</span>

<span class="n">fig</span><span class="p">.</span><span class="n">update_traces</span><span class="p">(</span><span class="n">hovertemplate</span> <span class="o">=</span> <span class="s">'%{y:.2f}&lt;extra&gt;&lt;/extra&gt;'</span><span class="p">)</span>

<span class="c1"># Annotations
</span><span class="n">annotations</span> <span class="o">=</span> <span class="p">[]</span>

<span class="c1"># Title
</span><span class="n">annotations</span><span class="p">.</span><span class="n">append</span><span class="p">(</span>
    <span class="nb">dict</span><span class="p">(</span><span class="n">xref</span><span class="o">=</span><span class="s">"paper"</span><span class="p">,</span>
         <span class="n">yref</span><span class="o">=</span><span class="s">"paper"</span><span class="p">,</span>
         <span class="n">x</span><span class="o">=</span><span class="mf">0.05</span><span class="p">,</span>
         <span class="n">y</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span>
         <span class="n">xanchor</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
         <span class="n">yanchor</span><span class="o">=</span><span class="s">"bottom"</span><span class="p">,</span>
         <span class="n">text</span><span class="o">=</span><span class="s">"&lt;b&gt;eLearning Employee Satisfaction&lt;/b&gt;"</span><span class="p">,</span>
         <span class="n">font</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">size</span><span class="o">=</span><span class="n">value_fontsize_title</span><span class="p">,</span>
                   <span class="n">color</span><span class="o">=</span><span class="s">"rgb(37,37,37)"</span><span class="p">),</span>
         <span class="n">showarrow</span><span class="o">=</span><span class="bp">False</span><span class="p">))</span>

<span class="c1"># Trace 1
</span><span class="n">annotations</span><span class="p">.</span><span class="n">append</span><span class="p">(</span>
    <span class="nb">dict</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
         <span class="n">y</span><span class="o">=</span><span class="n">y1</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
         <span class="n">yanchor</span><span class="o">=</span><span class="s">"bottom"</span><span class="p">,</span>
         <span class="n">text</span><span class="o">=</span><span class="sa">f</span><span class="s">"&lt;b&gt;</span><span class="si">{</span><span class="n">y1</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="n">take</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="si">}</span><span class="s">%&lt;/b&gt;"</span><span class="p">,</span>
         <span class="n">font</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y1_color</span><span class="p">),</span>
         <span class="n">showarrow</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
         <span class="n">xshift</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
         <span class="n">yshift</span><span class="o">=</span><span class="mi">10</span><span class="p">))</span>

<span class="n">annotations</span><span class="p">.</span><span class="n">append</span><span class="p">(</span>
    <span class="nb">dict</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">[</span><span class="mi">7</span><span class="p">],</span>
         <span class="n">y</span><span class="o">=</span><span class="n">y1</span><span class="p">[</span><span class="mi">7</span><span class="p">],</span>
         <span class="n">yanchor</span><span class="o">=</span><span class="s">"bottom"</span><span class="p">,</span>
         <span class="n">text</span><span class="o">=</span><span class="sa">f</span><span class="s">"&lt;b&gt;</span><span class="si">{</span><span class="n">y1</span><span class="p">[</span><span class="mi">7</span><span class="p">].</span><span class="n">take</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="si">}</span><span class="s">%&lt;/b&gt;"</span><span class="p">,</span>
         <span class="n">font</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y1_color</span><span class="p">),</span>
         <span class="n">showarrow</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
         <span class="n">xshift</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
         <span class="n">yshift</span><span class="o">=</span><span class="mi">18</span><span class="p">))</span>

<span class="n">annotations</span><span class="p">.</span><span class="n">append</span><span class="p">(</span>
    <span class="nb">dict</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">[</span><span class="mi">11</span><span class="p">],</span>
         <span class="n">y</span><span class="o">=</span><span class="n">y1</span><span class="p">[</span><span class="mi">11</span><span class="p">],</span>
         <span class="n">xanchor</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
         <span class="n">text</span><span class="o">=</span><span class="sa">f</span><span class="s">"&lt;b&gt;</span><span class="si">{</span><span class="n">y1</span><span class="p">[</span><span class="mi">11</span><span class="p">].</span><span class="n">take</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="si">}</span><span class="s">% Content satisfaction&lt;/b&gt;"</span><span class="p">,</span>
         <span class="n">font</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y1_color</span><span class="p">),</span>
         <span class="n">showarrow</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
         <span class="n">xshift</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
         <span class="n">yshift</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>

<span class="c1"># Trace 2
</span><span class="n">annotations</span><span class="p">.</span><span class="n">append</span><span class="p">(</span>
    <span class="nb">dict</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
         <span class="n">y</span><span class="o">=</span><span class="n">y2</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
         <span class="n">yanchor</span><span class="o">=</span><span class="s">"bottom"</span><span class="p">,</span>
         <span class="n">text</span><span class="o">=</span><span class="sa">f</span><span class="s">"&lt;b&gt;</span><span class="si">{</span><span class="n">y2</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="n">take</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="si">}</span><span class="s">%&lt;/b&gt;"</span><span class="p">,</span>
         <span class="n">font</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y2_color</span><span class="p">),</span>
         <span class="n">showarrow</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
         <span class="n">xshift</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
         <span class="n">yshift</span><span class="o">=</span><span class="mi">10</span><span class="p">))</span>

<span class="n">annotations</span><span class="p">.</span><span class="n">append</span><span class="p">(</span>
    <span class="nb">dict</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">[</span><span class="mi">7</span><span class="p">],</span>
         <span class="n">y</span><span class="o">=</span><span class="n">y2</span><span class="p">[</span><span class="mi">7</span><span class="p">],</span>
         <span class="n">yanchor</span><span class="o">=</span><span class="s">"top"</span><span class="p">,</span>
         <span class="n">text</span><span class="o">=</span><span class="sa">f</span><span class="s">"&lt;b&gt;</span><span class="si">{</span><span class="n">y2</span><span class="p">[</span><span class="mi">7</span><span class="p">].</span><span class="n">take</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="si">}</span><span class="s">%&lt;/b&gt;"</span><span class="p">,</span>
         <span class="n">font</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y2_color</span><span class="p">),</span>
         <span class="n">showarrow</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
         <span class="n">xshift</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
         <span class="n">yshift</span><span class="o">=-</span><span class="mi">10</span><span class="p">))</span>

<span class="n">annotations</span><span class="p">.</span><span class="n">append</span><span class="p">(</span>
    <span class="nb">dict</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">[</span><span class="mi">11</span><span class="p">],</span>
         <span class="n">y</span><span class="o">=</span><span class="n">y2</span><span class="p">[</span><span class="mi">11</span><span class="p">],</span>
         <span class="n">xanchor</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
         <span class="n">text</span><span class="o">=</span><span class="sa">f</span><span class="s">"&lt;b&gt;</span><span class="si">{</span><span class="n">y2</span><span class="p">[</span><span class="mi">11</span><span class="p">].</span><span class="n">take</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="si">}</span><span class="s">% Experience satisfaction&lt;/b&gt;"</span><span class="p">,</span>
         <span class="n">font</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y2_color</span><span class="p">),</span>
         <span class="n">showarrow</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
         <span class="n">xshift</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
         <span class="n">yshift</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>

<span class="c1"># Trace 3
</span><span class="n">annotations</span><span class="p">.</span><span class="n">append</span><span class="p">(</span>
    <span class="nb">dict</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">[</span><span class="mi">11</span><span class="p">],</span>
         <span class="n">y</span><span class="o">=</span><span class="n">y3</span><span class="p">[</span><span class="mi">11</span><span class="p">],</span>
         <span class="n">xanchor</span><span class="o">=</span><span class="s">"left"</span><span class="p">,</span>
         <span class="n">text</span><span class="o">=</span><span class="sa">f</span><span class="s">"&lt;b&gt;</span><span class="si">{</span><span class="n">y3</span><span class="p">[</span><span class="mi">11</span><span class="p">].</span><span class="n">take</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="si">}</span><span class="s">% Target&lt;b&gt;"</span><span class="p">,</span>
         <span class="n">font</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="n">y3_color</span><span class="p">),</span>
         <span class="n">showarrow</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
         <span class="n">xshift</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
         <span class="n">yshift</span><span class="o">=</span><span class="mi">0</span><span class="p">))</span>

<span class="n">fig</span><span class="p">.</span><span class="n">update_xaxes</span><span class="p">(</span><span class="n">gridcolor</span><span class="o">=</span><span class="s">"rgba(0,0,0,0)"</span><span class="p">,</span><span class="n">tickfont</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="s">"black"</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="mi">14</span><span class="p">),</span> <span class="n">tickprefix</span><span class="o">=</span><span class="s">"&lt;b&gt;"</span><span class="p">,</span><span class="n">ticksuffix</span> <span class="o">=</span><span class="s">"&lt;/b&gt;&lt;br&gt;"</span><span class="p">)</span>
<span class="n">fig</span><span class="p">.</span><span class="n">update_yaxes</span><span class="p">(</span><span class="n">gridcolor</span><span class="o">=</span><span class="s">"rgba(0,0,0,0)"</span><span class="p">,</span><span class="n">showticklabels</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>

<span class="n">fig</span><span class="p">.</span><span class="n">update_layout</span><span class="p">(</span><span class="n">annotations</span><span class="o">=</span><span class="n">annotations</span><span class="p">,</span>
                  <span class="n">autosize</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
                  <span class="n">width</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span>
                  <span class="n">height</span><span class="o">=</span><span class="mi">500</span><span class="p">,</span>
                  <span class="n">showlegend</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
                  <span class="n">paper_bgcolor</span><span class="o">=</span><span class="s">"rgba(0,0,0,0)"</span><span class="p">,</span>
                  <span class="n">plot_bgcolor</span><span class="o">=</span><span class="s">"rgba(0,0,0,0)"</span><span class="p">,</span>
                  <span class="n">font_size</span><span class="o">=</span><span class="n">value_fontsize</span><span class="p">,</span>
                  <span class="n">modebar</span><span class="o">=</span><span class="p">{</span><span class="s">"bgcolor"</span><span class="p">:</span> <span class="s">"rgba(255,255,255,0.0)"</span><span class="p">},</span>
                  <span class="n">hovermode</span><span class="o">=</span><span class="s">"closest"</span><span class="p">,</span>
                  <span class="n">xaxis</span><span class="o">=</span><span class="nb">dict</span><span class="p">(</span>
                      <span class="n">tickmode</span> <span class="o">=</span> <span class="s">'array'</span><span class="p">,</span>
                      <span class="n">tickvals</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">12</span><span class="p">)],</span>
                      <span class="n">ticktext</span> <span class="o">=</span> <span class="p">[</span><span class="s">'AUG&lt;br&gt;2019'</span><span class="p">,</span> <span class="s">'SEP'</span><span class="p">,</span> <span class="s">'OCT'</span><span class="p">,</span> <span class="s">'NOV'</span><span class="p">,</span> <span class="s">'DES'</span><span class="p">,</span> <span class="s">'JAN&lt;br&gt;2020'</span><span class="p">,</span> <span class="s">"FEB"</span><span class="p">,</span> <span class="s">"MAR"</span><span class="p">,</span> <span class="s">"APR"</span><span class="p">,</span> <span class="s">"MAY"</span><span class="p">,</span> <span class="s">"JUN"</span><span class="p">,</span> <span class="s">"JUL"</span><span class="p">]))</span>

<span class="n">fig</span><span class="p">.</span><span class="n">layout</span><span class="p">.</span><span class="n">font</span><span class="p">.</span><span class="n">family</span> <span class="o">=</span> <span class="n">fontfamily</span>

<span class="n">fig</span><span class="p">.</span><span class="n">show</span><span class="p">()</span>
</code></pre></div></div>

<p><img src="/assets/images/posts/Matplotlib-vs-Plotly/1.png" alt="image-center" class="align-center" /></p>

<h3 id="exporting-plotly-graph">Exporting Plotly Graph</h3>

<h4 id="export-the-graph-as-a-html-page">export the graph as a HTML page</h4>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">plotly.io</span> <span class="k">as</span> <span class="n">pio</span>
<span class="n">pio</span><span class="p">.</span><span class="n">write_html</span><span class="p">(</span><span class="n">fig</span><span class="p">,</span> <span class="nb">file</span><span class="o">=</span><span class="s">"index.html"</span><span class="p">,</span> <span class="n">auto_open</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
</code></pre></div></div>

<h4 id="export-the-graph-to-chart-studio">Export the graph to chart studio</h4>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">chart_studio.plotly</span> <span class="k">as</span> <span class="n">py</span>
<span class="n">py</span><span class="p">.</span><span class="n">plot</span><span class="p">(</span><span class="n">fig</span><span class="p">,</span> <span class="n">filename</span><span class="o">=</span><span class="s">"eLearning_Employee_Satisfaction"</span><span class="p">,</span> <span class="n">auto_open</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
</code></pre></div></div>

<pre><code class="language-out">https://plotly.com/~lewiuberg/48/
</code></pre>

<h3 id="embedding-plotly-graph">Embedding Plotly Graph</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">chart_studio.tools</span> <span class="k">as</span> <span class="n">tls</span>
<span class="n">tls</span><span class="p">.</span><span class="n">get_embed</span><span class="p">(</span><span class="s">'https://plotly.com/~lewiuberg/48'</span><span class="p">)</span>
</code></pre></div></div>

<pre><code class="language-out">&lt;iframe id="igraph" scrolling="no" style="border:none;" seamless="seamless" src="https://plotly.com/~lewiuberg/48.embed" height="525" width="100%"&gt;&lt;/iframe&gt;
</code></pre>

<h4 id="the-result">The result</h4>

<p class="notice--info"><b>Info!</b> This graph is not optimized for mobile view or narrow screens.</p>

<iframe id="igraph" scrolling="no" style="border:none;" seamless="seamless" src="https://plotly.com/~lewiuberg/48.embed" height="525" width="100%"></iframe>]]></content><author><name>Lewi Uberg</name></author><category term="Data Science" /><category term="Programming" /><category term="Data Visualization" /><category term="data science" /><category term="python" /><category term="matplotlib" /><category term="plotly" /><summary type="html"><![CDATA[Graph created with Matplotlib vs embeded graph created with Plotly.]]></summary></entry><entry><title type="html">Portfolios</title><link href="https://uberg.me/posts/2020-12-04-Portfolios/" rel="alternate" type="text/html" title="Portfolios" /><published>2020-12-04T00:00:00+00:00</published><updated>2020-12-04T00:00:00+00:00</updated><id>https://uberg.me/posts/Portfolios</id><content type="html" xml:base="https://uberg.me/posts/2020-12-04-Portfolios/"><![CDATA[<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-X5TVX1RNG8"></script>

<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-X5TVX1RNG8');
</script>

<p>While researching how to build a data science portfolio, I came over some unique and inspirational pages I would like to share.</p>

<h2 id="hannah-yan-han">Hannah Yan Han</h2>

<p>Hannah is currently working as a data scientist. Previously she went to National University of Singapore, EPFL and Duke University.</p>

<p>Besides data science and data storytelling, she also likes contemporary art, which is apparent from her site.</p>

<p class="container"><img src="/assets/images/posts/Portfolios/1.png" alt="image-center" class="align-center" /></p>

<p><a href="https://www.hannahyan.com/index.html" class="btn btn--primary align-center">Visit website</a></p>

<h2 id="donne-martin">Donne Martin</h2>

<p>Donne works as a Tech Lead at facebook and protects the privacy of 3 billion people by building products to power all of Facebook’s privacy reviews.</p>

<p>His website has some very useful links.</p>

<p class="container"><img src="/assets/images/posts/Portfolios/2.png" alt="image-center" class="align-center" /></p>

<p><a href="https://donnemartin.com" class="btn btn--primary align-center">Visit website</a></p>

<h2 id="claudia-ten-hoppe">Claudia Ten Hoppe</h2>

<p>Claudia works remotely as a freelance data analyst/scientist, and holds a Bachelor’s and Master’s degree in science (Business Analytics, VU University Amsterdam).</p>

<p class="container"><img src="/assets/images/posts/Portfolios/3.png" alt="image-center" class="align-center" /></p>

<p><a href="https://www.claudiatenhoope.com" class="btn btn--primary align-center">Visit website</a></p>

<h2 id="julia-nikulski">Julia Nikulski</h2>

<p>Julia learned to code with different online and offline courses, StackOverflow as well as trial and error. She has done a lot of online courses, and taught herself trough project work.</p>

<p class="container"><img src="/assets/images/posts/Portfolios/4.png" alt="image-center" class="align-center" /></p>

<p><a href="http://julianikulski.com/en/" class="btn btn--primary align-center">Visit website</a></p>]]></content><author><name>Lewi Uberg</name></author><category term="Data Science" /><category term="Misc" /><category term="data science" /><category term="others work" /><category term="inspiration" /><category term="portfolio" /><summary type="html"><![CDATA[Portfolios of other people]]></summary></entry><entry><title type="html">Jupyter Dash in Jupyter Lab for macOS</title><link href="https://uberg.me/posts/2020-12-03-Jupyter-Dash-in-Jupyter-Lab-for-macOS/" rel="alternate" type="text/html" title="Jupyter Dash in Jupyter Lab for macOS" /><published>2020-12-03T00:00:00+00:00</published><updated>2020-12-03T00:00:00+00:00</updated><id>https://uberg.me/posts/Jupyter-Dash-in-Jupyter-Lab-for-macOS</id><content type="html" xml:base="https://uberg.me/posts/2020-12-03-Jupyter-Dash-in-Jupyter-Lab-for-macOS/"><![CDATA[<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-X5TVX1RNG8"></script>

<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-X5TVX1RNG8');
</script>

<h2 id="python-virtual-environment">Python Virtual Environment:</h2>

<ol>
  <li>Open the terminal and <code class="language-plaintext highlighter-rouge">cd</code> into the project main directory, or create a folder where you would like to start developing your project/app.</li>
  <li>Create virtual environment:
<code class="language-plaintext highlighter-rouge">pyenv virtualenv &lt;python_version&gt; &lt;environment_name&gt;</code></li>
  <li>Activate your new environment:
<code class="language-plaintext highlighter-rouge">pyenv local &lt;environment_name&gt;</code></li>
  <li>Install Node using homebrew (NPV included):
<del><code class="language-plaintext highlighter-rouge">brew install node</code></del> &lt;– <strong>Cant get that one to work, please advice if able.</strong>
<a href="https://nodejs.org/dist/v14.15.0/node-v14.15.0.pkg">Download Node</a></li>
  <li>Install required libraries:
    <ul>
      <li><code class="language-plaintext highlighter-rouge">python3 -m pip install numpy</code></li>
      <li><code class="language-plaintext highlighter-rouge">python3 -m pip install pandas</code></li>
      <li><code class="language-plaintext highlighter-rouge">python3 -m pip install plotly</code></li>
      <li><code class="language-plaintext highlighter-rouge">python3 -m pip install dash</code></li>
      <li><code class="language-plaintext highlighter-rouge">python3 -m pip install Jupyterlab</code></li>
    </ul>
  </li>
  <li>To run Dash inside Jupyter lab:
<code class="language-plaintext highlighter-rouge">python3 -m pip install jupyter-dash</code></li>
  <li>To run Plotly figures inside jupyter lab:
<code class="language-plaintext highlighter-rouge">python3 -m pip install jupyterlab ipywidgets</code></li>
  <li>Add JupyterLab extension for renderer support:
    <ul>
      <li>Required:
<code class="language-plaintext highlighter-rouge">jupyter labextension install jupyterlab-plotly</code>
Example: <code class="language-plaintext highlighter-rouge">fig.show()</code></li>
      <li>Optional widget extension:
<code class="language-plaintext highlighter-rouge">jupyter labextension install @jupyter-widgets/jupyterlab-manager plotlywidget</code>
Example: <code class="language-plaintext highlighter-rouge">fig</code></li>
    </ul>
  </li>
  <li>Rebuild:
   <del><code class="language-plaintext highlighter-rouge">jupyter lab build</code></del> Strictly not needed since it is done in step 8.</li>
  <li>Start Jupyterlab
   <code class="language-plaintext highlighter-rouge">jupyter lab</code></li>
  <li>Save dependencies for later:
<code class="language-plaintext highlighter-rouge">python3 -m pip freeze &gt; requirements.txt</code></li>
  <li>Install dependencies:
<code class="language-plaintext highlighter-rouge">python3 -m pip install -r requirements.txt</code></li>
</ol>

<h2 id="test-code">Test code</h2>

<h3 id="inline">Inline:</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">plotly.express</span> <span class="k">as</span> <span class="n">px</span>
<span class="kn">from</span> <span class="nn">jupyter_dash</span> <span class="kn">import</span> <span class="n">JupyterDash</span>
<span class="kn">import</span> <span class="nn">dash_core_components</span> <span class="k">as</span> <span class="n">dcc</span>
<span class="kn">import</span> <span class="nn">dash_html_components</span> <span class="k">as</span> <span class="n">html</span>
<span class="kn">from</span> <span class="nn">dash.dependencies</span> <span class="kn">import</span> <span class="n">Input</span><span class="p">,</span> <span class="n">Output</span>
<span class="c1"># Load Data
</span><span class="n">df</span> <span class="o">=</span> <span class="n">px</span><span class="p">.</span><span class="n">data</span><span class="p">.</span><span class="n">tips</span><span class="p">()</span>
<span class="c1"># Build App
</span><span class="n">app</span> <span class="o">=</span> <span class="n">JupyterDash</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
<span class="n">app</span><span class="p">.</span><span class="n">layout</span> <span class="o">=</span> <span class="n">html</span><span class="p">.</span><span class="n">Div</span><span class="p">([</span>
    <span class="n">html</span><span class="p">.</span><span class="n">H1</span><span class="p">(</span><span class="s">"JupyterDash Demo"</span><span class="p">),</span>
    <span class="n">dcc</span><span class="p">.</span><span class="n">Graph</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="s">'graph'</span><span class="p">),</span>
    <span class="n">html</span><span class="p">.</span><span class="n">Label</span><span class="p">([</span>
        <span class="s">"colorscale"</span><span class="p">,</span>
        <span class="n">dcc</span><span class="p">.</span><span class="n">Dropdown</span><span class="p">(</span>
            <span class="nb">id</span><span class="o">=</span><span class="s">'colorscale-dropdown'</span><span class="p">,</span> <span class="n">clearable</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
            <span class="n">value</span><span class="o">=</span><span class="s">'plasma'</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="p">[</span>
                <span class="p">{</span><span class="s">'label'</span><span class="p">:</span> <span class="n">c</span><span class="p">,</span> <span class="s">'value'</span><span class="p">:</span> <span class="n">c</span><span class="p">}</span>
                <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">px</span><span class="p">.</span><span class="n">colors</span><span class="p">.</span><span class="n">named_colorscales</span><span class="p">()</span>
            <span class="p">])</span>
    <span class="p">]),</span>
<span class="p">])</span>
<span class="c1"># Define callback to update graph
</span><span class="o">@</span><span class="n">app</span><span class="p">.</span><span class="n">callback</span><span class="p">(</span>
    <span class="n">Output</span><span class="p">(</span><span class="s">'graph'</span><span class="p">,</span> <span class="s">'figure'</span><span class="p">),</span>
    <span class="p">[</span><span class="n">Input</span><span class="p">(</span><span class="s">"colorscale-dropdown"</span><span class="p">,</span> <span class="s">"value"</span><span class="p">)]</span>
<span class="p">)</span>
<span class="k">def</span> <span class="nf">update_figure</span><span class="p">(</span><span class="n">colorscale</span><span class="p">):</span>
    <span class="k">return</span> <span class="n">px</span><span class="p">.</span><span class="n">scatter</span><span class="p">(</span>
        <span class="n">df</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="s">"total_bill"</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="s">"tip"</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">"size"</span><span class="p">,</span>
        <span class="n">color_continuous_scale</span><span class="o">=</span><span class="n">colorscale</span><span class="p">,</span>
        <span class="n">render_mode</span><span class="o">=</span><span class="s">"webgl"</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s">"Tips"</span>
    <span class="p">)</span>
<span class="c1"># Run app and display result inline in the notebook
</span><span class="n">app</span><span class="p">.</span><span class="n">run_server</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s">'inline'</span><span class="p">)</span>
</code></pre></div></div>

<h3 id="external">External:</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">plotly.express</span> <span class="k">as</span> <span class="n">px</span>
<span class="kn">from</span> <span class="nn">jupyter_dash</span> <span class="kn">import</span> <span class="n">JupyterDash</span>
<span class="kn">import</span> <span class="nn">dash_core_components</span> <span class="k">as</span> <span class="n">dcc</span>
<span class="kn">import</span> <span class="nn">dash_html_components</span> <span class="k">as</span> <span class="n">html</span>
<span class="kn">from</span> <span class="nn">dash.dependencies</span> <span class="kn">import</span> <span class="n">Input</span><span class="p">,</span> <span class="n">Output</span>
<span class="c1"># Load Data
</span><span class="n">df</span> <span class="o">=</span> <span class="n">px</span><span class="p">.</span><span class="n">data</span><span class="p">.</span><span class="n">tips</span><span class="p">()</span>
<span class="c1"># Build App
</span><span class="n">app</span> <span class="o">=</span> <span class="n">JupyterDash</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
<span class="n">app</span><span class="p">.</span><span class="n">layout</span> <span class="o">=</span> <span class="n">html</span><span class="p">.</span><span class="n">Div</span><span class="p">([</span>
    <span class="n">html</span><span class="p">.</span><span class="n">H1</span><span class="p">(</span><span class="s">"JupyterDash Demo"</span><span class="p">),</span>
    <span class="n">dcc</span><span class="p">.</span><span class="n">Graph</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="s">'graph'</span><span class="p">),</span>
    <span class="n">html</span><span class="p">.</span><span class="n">Label</span><span class="p">([</span>
        <span class="s">"colorscale"</span><span class="p">,</span>
        <span class="n">dcc</span><span class="p">.</span><span class="n">Dropdown</span><span class="p">(</span>
            <span class="nb">id</span><span class="o">=</span><span class="s">'colorscale-dropdown'</span><span class="p">,</span> <span class="n">clearable</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
            <span class="n">value</span><span class="o">=</span><span class="s">'plasma'</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="p">[</span>
                <span class="p">{</span><span class="s">'label'</span><span class="p">:</span> <span class="n">c</span><span class="p">,</span> <span class="s">'value'</span><span class="p">:</span> <span class="n">c</span><span class="p">}</span>
                <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">px</span><span class="p">.</span><span class="n">colors</span><span class="p">.</span><span class="n">named_colorscales</span><span class="p">()</span>
            <span class="p">])</span>
    <span class="p">]),</span>
<span class="p">])</span>
<span class="c1"># Define callback to update graph
</span><span class="o">@</span><span class="n">app</span><span class="p">.</span><span class="n">callback</span><span class="p">(</span>
    <span class="n">Output</span><span class="p">(</span><span class="s">'graph'</span><span class="p">,</span> <span class="s">'figure'</span><span class="p">),</span>
    <span class="p">[</span><span class="n">Input</span><span class="p">(</span><span class="s">"colorscale-dropdown"</span><span class="p">,</span> <span class="s">"value"</span><span class="p">)]</span>
<span class="p">)</span>
<span class="k">def</span> <span class="nf">update_figure</span><span class="p">(</span><span class="n">colorscale</span><span class="p">):</span>
    <span class="k">return</span> <span class="n">px</span><span class="p">.</span><span class="n">scatter</span><span class="p">(</span>
        <span class="n">df</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="s">"total_bill"</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="s">"tip"</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">"size"</span><span class="p">,</span>
        <span class="n">color_continuous_scale</span><span class="o">=</span><span class="n">colorscale</span><span class="p">,</span>
        <span class="n">render_mode</span><span class="o">=</span><span class="s">"webgl"</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s">"Tips"</span>
    <span class="p">)</span>
<span class="c1"># Run app and display result inline in the notebook
</span><span class="n">app</span><span class="p">.</span><span class="n">run_server</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s">'external'</span><span class="p">)</span>
</code></pre></div></div>

<h3 id="jupyterlab">JupyterLab:</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">plotly.express</span> <span class="k">as</span> <span class="n">px</span>
<span class="kn">from</span> <span class="nn">jupyter_dash</span> <span class="kn">import</span> <span class="n">JupyterDash</span>
<span class="kn">import</span> <span class="nn">dash_core_components</span> <span class="k">as</span> <span class="n">dcc</span>
<span class="kn">import</span> <span class="nn">dash_html_components</span> <span class="k">as</span> <span class="n">html</span>
<span class="kn">from</span> <span class="nn">dash.dependencies</span> <span class="kn">import</span> <span class="n">Input</span><span class="p">,</span> <span class="n">Output</span>
<span class="c1"># Load Data
</span><span class="n">df</span> <span class="o">=</span> <span class="n">px</span><span class="p">.</span><span class="n">data</span><span class="p">.</span><span class="n">tips</span><span class="p">()</span>
<span class="c1"># Build App
</span><span class="n">app</span> <span class="o">=</span> <span class="n">JupyterDash</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
<span class="n">app</span><span class="p">.</span><span class="n">layout</span> <span class="o">=</span> <span class="n">html</span><span class="p">.</span><span class="n">Div</span><span class="p">([</span>
    <span class="n">html</span><span class="p">.</span><span class="n">H1</span><span class="p">(</span><span class="s">"JupyterDash Demo"</span><span class="p">),</span>
    <span class="n">dcc</span><span class="p">.</span><span class="n">Graph</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="s">'graph'</span><span class="p">),</span>
    <span class="n">html</span><span class="p">.</span><span class="n">Label</span><span class="p">([</span>
        <span class="s">"colorscale"</span><span class="p">,</span>
        <span class="n">dcc</span><span class="p">.</span><span class="n">Dropdown</span><span class="p">(</span>
            <span class="nb">id</span><span class="o">=</span><span class="s">'colorscale-dropdown'</span><span class="p">,</span> <span class="n">clearable</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span>
            <span class="n">value</span><span class="o">=</span><span class="s">'plasma'</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="p">[</span>
                <span class="p">{</span><span class="s">'label'</span><span class="p">:</span> <span class="n">c</span><span class="p">,</span> <span class="s">'value'</span><span class="p">:</span> <span class="n">c</span><span class="p">}</span>
                <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">px</span><span class="p">.</span><span class="n">colors</span><span class="p">.</span><span class="n">named_colorscales</span><span class="p">()</span>
            <span class="p">])</span>
    <span class="p">]),</span>
<span class="p">])</span>
<span class="c1"># Define callback to update graph
</span><span class="o">@</span><span class="n">app</span><span class="p">.</span><span class="n">callback</span><span class="p">(</span>
    <span class="n">Output</span><span class="p">(</span><span class="s">'graph'</span><span class="p">,</span> <span class="s">'figure'</span><span class="p">),</span>
    <span class="p">[</span><span class="n">Input</span><span class="p">(</span><span class="s">"colorscale-dropdown"</span><span class="p">,</span> <span class="s">"value"</span><span class="p">)]</span>
<span class="p">)</span>
<span class="k">def</span> <span class="nf">update_figure</span><span class="p">(</span><span class="n">colorscale</span><span class="p">):</span>
    <span class="k">return</span> <span class="n">px</span><span class="p">.</span><span class="n">scatter</span><span class="p">(</span>
        <span class="n">df</span><span class="p">,</span> <span class="n">x</span><span class="o">=</span><span class="s">"total_bill"</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="s">"tip"</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">"size"</span><span class="p">,</span>
        <span class="n">color_continuous_scale</span><span class="o">=</span><span class="n">colorscale</span><span class="p">,</span>
        <span class="n">render_mode</span><span class="o">=</span><span class="s">"webgl"</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s">"Tips"</span>
    <span class="p">)</span>
<span class="c1"># Run app and display result inline in the notebook
</span><span class="n">app</span><span class="p">.</span><span class="n">run_server</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s">'jupyterlab'</span><span class="p">)</span>
</code></pre></div></div>

<h2 id="terminal-script">Terminal Script:</h2>

<p>A script to define a new project and install everything from <code class="language-plaintext highlighter-rouge">init_requirements.txt</code> with pip, as well as installing the extensions.</p>

<p><strong>This is my first go at bash scripting, so be kind :)</strong></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/zsh</span>
<span class="nv">HEADER</span><span class="o">=</span><span class="s2">"   _  __             ___             _         __</span><span class="se">\n</span><span class="s2">  / |/ /__ _    __  / _ </span><span class="se">\_</span><span class="s2">______    (_)__ ____/ /_</span><span class="se">\n</span><span class="s2"> /    / -_) |/|/ / / ___/ __/ _ </span><span class="se">\ </span><span class="s2"> / / -_) __/ __/</span><span class="se">\n</span><span class="s2">/_/|_/</span><span class="se">\_</span><span class="s2">_/|__,__/ /_/  /_/  </span><span class="se">\_</span><span class="s2">__/_/ /</span><span class="se">\_</span><span class="s2">_/</span><span class="se">\_</span><span class="s2">_/</span><span class="se">\_</span><span class="s2">_/</span><span class="se">\n</span><span class="s2">                               |___/              "</span>
clear
<span class="nb">echo</span> <span class="nt">-e</span> <span class="nv">$HEADER</span>
<span class="nb">echo</span> <span class="s2">""</span>

<span class="k">while </span><span class="nb">true</span><span class="p">;</span>
<span class="k">do
    </span><span class="nb">read</span> <span class="nt">-r</span> <span class="nt">-p</span> <span class="s2">"Make new project? (y/n): "</span> NEW
    <span class="k">if</span> <span class="o">[[</span> <span class="nv">$NEW</span> <span class="o">=</span>~ ^<span class="o">([</span>yY]<span class="o">)</span><span class="nv">$ </span><span class="o">]]</span>
    <span class="k">then</span>
        <span class="c"># -----------------------------------------------------------------------------</span>
        <span class="c"># Install version</span>
        <span class="c"># -----------------------------------------------------------------------------</span>
        <span class="k">while </span><span class="nb">true</span><span class="p">;</span>
        <span class="k">do
            </span><span class="nb">read</span> <span class="nt">-r</span> <span class="nt">-p</span> <span class="s2">"Install new Python version? (y/n): "</span> INSTALL
            <span class="k">if</span> <span class="o">[[</span> <span class="nv">$INSTALL</span> <span class="o">=</span>~ ^<span class="o">([</span>yY]<span class="o">)</span><span class="nv">$ </span><span class="o">]]</span>
            <span class="k">then
                while </span><span class="nb">true</span><span class="p">;</span>
                <span class="k">do
                    </span><span class="nb">read</span> <span class="nt">-r</span> <span class="nt">-p</span> <span class="s2">"Select python version to install (3.8.6): "</span> VERSION
                    <span class="nb">echo</span> <span class="s2">"Version to install:"</span> <span class="nv">$VERSION</span>
                    <span class="nb">read</span> <span class="nt">-r</span> <span class="nt">-p</span> <span class="s2">"Is this correct? (y/n): "</span> CORRECT
                    <span class="k">if</span> <span class="o">[[</span> <span class="nv">$CORRECT</span> <span class="o">=</span>~ ^<span class="o">([</span>yY][eE][sS]|[yY]<span class="o">)</span><span class="nv">$ </span><span class="o">]]</span>
                    <span class="k">then
                        </span><span class="nv">VENVVERSION</span><span class="o">=</span><span class="nv">$VERSION</span>
                        pyenv <span class="nb">install</span> <span class="nv">$VENVVERSION</span>
                        <span class="nb">break
                    </span><span class="k">else
                        </span>clear
                        <span class="nb">echo</span> <span class="nt">-e</span> <span class="nv">$HEADER</span>
                        <span class="nb">echo</span> <span class="s2">""</span>
                    <span class="k">fi
                done
                </span><span class="nb">break
            </span><span class="k">elif</span> <span class="o">[[</span> <span class="nv">$INSTALL</span> <span class="o">=</span>~ ^<span class="o">([</span>nN]<span class="o">)</span><span class="nv">$ </span><span class="o">]]</span>
            <span class="k">then</span>
                <span class="c"># -----------------------------------------------------------------------------</span>
                <span class="c"># Define virtual environment</span>
                <span class="c"># -----------------------------------------------------------------------------</span>
                <span class="k">while </span><span class="nb">true</span><span class="p">;</span>
                <span class="k">do
                    </span><span class="nb">read</span> <span class="nt">-r</span> <span class="nt">-p</span> <span class="s2">"Select python version to use in environment (3.8.6): "</span> VENVVERSION
                    <span class="nb">echo</span> <span class="s2">"Version to use:"</span> <span class="nv">$VENVVERSION</span>
                    <span class="nb">read</span> <span class="nt">-r</span> <span class="nt">-p</span> <span class="s2">"Is this correct? (y/n): "</span> CORRECT
                    <span class="k">if</span> <span class="o">[[</span> <span class="nv">$CORRECT</span> <span class="o">=</span>~ ^<span class="o">([</span>yY][eE][sS]|[yY]<span class="o">)</span><span class="nv">$ </span><span class="o">]]</span>
                    <span class="k">then
                        </span><span class="nb">break
                    </span><span class="k">else
                        </span>clear
                        <span class="nb">echo</span> <span class="nt">-e</span> <span class="nv">$HEADER</span>
                        <span class="nb">echo</span> <span class="s2">""</span>
                    <span class="k">fi
                done
                </span><span class="nb">break
            </span><span class="k">fi
        done
        </span>clear
        <span class="nb">echo</span> <span class="nt">-e</span> <span class="nv">$HEADER</span>
        <span class="nb">echo</span> <span class="s2">""</span>
        <span class="nb">echo</span> <span class="s2">"[STATUS] Python ready"</span>
        <span class="nb">echo</span> <span class="s2">""</span>
        
        <span class="k">while </span><span class="nb">true</span><span class="p">;</span>
        <span class="k">do
            </span><span class="nb">read</span> <span class="nt">-r</span> <span class="nt">-p</span> <span class="s2">"Select name for environment (venv_name): "</span> VENVNAME
            <span class="nb">echo</span> <span class="s2">"Enviroment name:"</span> <span class="nv">$VENVNAME</span>
            <span class="nb">read</span> <span class="nt">-r</span> <span class="nt">-p</span> <span class="s2">"Is this correct? (y/n): "</span> CORRECT
            <span class="k">if</span> <span class="o">[[</span> <span class="nv">$CORRECT</span> <span class="o">=</span>~ ^<span class="o">([</span>yY][eE][sS]|[yY]<span class="o">)</span><span class="nv">$ </span><span class="o">]]</span>
            <span class="k">then
                </span><span class="nb">break
            </span><span class="k">else
                </span>clear
                <span class="nb">echo</span> <span class="nt">-e</span> <span class="nv">$HEADER</span>
                <span class="nb">echo</span> <span class="s2">""</span>
            <span class="k">fi
        done
        
        </span>pyenv virtualenv <span class="nv">$VENVVERSION</span> <span class="nv">$VENVNAME</span>
        pyenv <span class="nb">local</span> <span class="nv">$VENVNAME</span>
        clear
        <span class="nb">echo</span> <span class="nt">-e</span> <span class="nv">$HEADER</span>
        <span class="nb">echo</span> <span class="s2">""</span>
        <span class="nb">echo</span> <span class="s2">"[STATUS] Environment ready"</span>
        <span class="nb">echo</span> <span class="s2">""</span>
        <span class="nb">break
    </span><span class="k">else
        </span><span class="nb">break
    </span><span class="k">fi
done</span>
<span class="c"># # -----------------------------------------------------------------------------</span>
<span class="c"># # Pip Install</span>
<span class="c"># # -----------------------------------------------------------------------------</span>
<span class="k">while </span><span class="nb">true</span><span class="p">;</span>
<span class="k">do
    </span><span class="nb">read</span> <span class="nt">-r</span> <span class="nt">-p</span> <span class="s2">"Install libraries with pip? (y/n): "</span> LIB
    <span class="k">if</span> <span class="o">[[</span> <span class="nv">$LIB</span> <span class="o">=</span>~ ^<span class="o">([</span>yY]<span class="o">)</span><span class="nv">$ </span><span class="o">]]</span>
    <span class="k">then
        </span>pip <span class="nb">install</span> <span class="nt">--upgrade</span> pip
        pip <span class="nb">install</span> <span class="nt">-r</span> init_requirements.txt
        <span class="nb">break
    </span><span class="k">else
        </span><span class="nb">break
    </span><span class="k">fi
done

while </span><span class="nb">true</span><span class="p">;</span>
<span class="k">do
    </span><span class="nb">read</span> <span class="nt">-r</span> <span class="nt">-p</span> <span class="s2">"Install Jupyter extensions? (y/n): "</span> LIB
    <span class="k">if</span> <span class="o">[[</span> <span class="nv">$LIB</span> <span class="o">=</span>~ ^<span class="o">([</span>yY]<span class="o">)</span><span class="nv">$ </span><span class="o">]]</span>
    <span class="k">then
        </span><span class="nv">filename</span><span class="o">=</span><span class="s1">'init_jupyterlab_extensions.txt'</span>
        <span class="c"># filename=$1</span>
        <span class="k">while </span><span class="nb">read </span>line<span class="p">;</span> <span class="k">do</span>
            <span class="nv">$line</span>
        <span class="k">done</span> &lt; <span class="nv">$filename</span>
        <span class="c">#jupyter lab build</span>
        <span class="nb">break
    </span><span class="k">else
        </span><span class="nb">break
    </span><span class="k">fi
done</span>
</code></pre></div></div>

<p>Sources:</p>

<p><a href="https://drive.google.com/file/d/1ZRtQUie0y2k3dXz_MM8s29WQaSrM9bDn/view">Charming Data</a></p>

<p><a href="https://medium.com/plotly/introducing-jupyterdash-811f1f57c02e">Xing Han Lu</a>
<a href="https://plotly.com/python/getting-started/#jupyterlab-support-python-35">Plotly</a></p>

<p><a href="https://realpython.com/intro-to-pyenv/#virtual-environments-and-pyenv">Real Python</a></p>]]></content><author><name>Lewi Uberg</name></author><category term="Data Science" /><category term="Programming" /><category term="Data Visualization" /><category term="IDE" /><category term="data science" /><category term="python" /><category term="pip" /><category term="pyenv" /><category term="plotly" /><category term="dash" /><category term="jupyter notebooks" /><category term="others work" /><summary type="html"><![CDATA[How to install Jupyter Dash on macOS]]></summary></entry><entry><title type="html">Useful snippets</title><link href="https://uberg.me/posts/2020-12-03-Useful-snippets/" rel="alternate" type="text/html" title="Useful snippets" /><published>2020-12-03T00:00:00+00:00</published><updated>2020-12-11T14:00:23+00:00</updated><id>https://uberg.me/posts/Useful-snippets</id><content type="html" xml:base="https://uberg.me/posts/2020-12-03-Useful-snippets/"><![CDATA[<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-X5TVX1RNG8"></script>

<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'G-X5TVX1RNG8');
</script>

<p class="notice--warning">I will not update this post over time as planned. I have rather started a new collection to be the home for these snippets. Click below to navigate there.</p>

<p><a href="/learn/" class="btn btn--primary btn--large">Learn</a></p>

<p>Here are some snippets I like to have laying around for a rainy day :)</p>

<h2 id="import">Import</h2>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="n">np</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="n">pd</span>
<span class="kn">import</span> <span class="nn">matplotlib</span> <span class="k">as</span> <span class="n">mpl</span>
<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="n">plt</span>
<span class="kn">import</span> <span class="nn">seaborn</span> <span class="k">as</span> <span class="n">sns</span>
<span class="kn">import</span> <span class="nn">plotly.graph_objects</span> <span class="k">as</span> <span class="n">go</span>
<span class="kn">import</span> <span class="nn">plotly.express</span> <span class="k">as</span> <span class="n">px</span>
<span class="kn">import</span> <span class="nn">chart_studio.plotly</span> <span class="k">as</span> <span class="n">py</span>
<span class="kn">import</span> <span class="nn">cufflinks</span> <span class="k">as</span> <span class="n">cf</span>
<span class="kn">import</span> <span class="nn">dash_core_components</span> <span class="k">as</span> <span class="n">dcc</span>
<span class="kn">import</span> <span class="nn">dash_html_components</span> <span class="k">as</span> <span class="n">html</span>
<span class="kn">import</span> <span class="nn">country_converter</span> <span class="k">as</span> <span class="n">coco</span>
<span class="kn">import</span> <span class="nn">geopy</span>

<span class="kn">from</span> <span class="nn">jupyter_dash</span> <span class="kn">import</span> <span class="n">JupyterDash</span>
<span class="kn">from</span> <span class="nn">dash.dependencies</span> <span class="kn">import</span> <span class="n">Input</span><span class="p">,</span> <span class="n">Output</span>
<span class="kn">from</span> <span class="nn">plotly.offline</span> <span class="kn">import</span> <span class="n">init_notebook_mode</span><span class="p">,</span> <span class="n">download_plotlyjs</span><span class="p">,</span> <span class="n">plot</span><span class="p">,</span> <span class="n">iplot</span>
<span class="kn">from</span> <span class="nn">geopy.geocoders</span> <span class="kn">import</span> <span class="n">Nominatim</span>
<span class="kn">from</span> <span class="nn">geopy.extra.rate_limiter</span> <span class="kn">import</span> <span class="n">RateLimiter</span>
</code></pre></div></div>

<h2 id="setup">Setup</h2>

<h3 id="matplotlib">Matplotlib</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">pd</span><span class="p">.</span><span class="n">set_option</span><span class="p">(</span><span class="s">"display.max_rows"</span><span class="p">,</span> <span class="mi">85</span><span class="p">)</span>
<span class="n">pd</span><span class="p">.</span><span class="n">set_option</span><span class="p">(</span><span class="s">"display.max_columns"</span><span class="p">,</span> <span class="mi">85</span><span class="p">)</span>
</code></pre></div></div>

<h3 id="plotly-offline">Plotly Offline</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">init_notebook_mode</span><span class="p">(</span><span class="n">connected</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
<span class="n">cf</span><span class="p">.</span><span class="n">go_offline</span><span class="p">()</span>
</code></pre></div></div>

<h2 id="templates">Templates</h2>

<h3 id="decorator">Decorator</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">functools</span>

<span class="k">def</span> <span class="nf">decorator</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
    <span class="o">@</span><span class="n">functools</span><span class="p">.</span><span class="n">wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
    <span class="k">def</span> <span class="nf">wrapper_decorator</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
        <span class="c1"># Do something before
</span>        <span class="n">value</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
        <span class="c1"># Do something after
</span>        <span class="k">return</span> <span class="n">value</span>
    <span class="k">return</span> <span class="n">wrapper_decorator</span>
</code></pre></div></div>

<h2 id="misc">Misc</h2>

<h3 id="check-operating-system">Check operating system</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">os_check</span><span class="p">():</span>
    <span class="kn">from</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="n">platform</span>

    <span class="k">if</span> <span class="n">platform</span> <span class="o">==</span> <span class="s">"darwin"</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="s">"macOS"</span><span class="p">)</span>
    <span class="k">elif</span> <span class="n">platform</span> <span class="o">==</span> <span class="s">"win32"</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="s">"Windows"</span><span class="p">)</span>
    <span class="k">elif</span> <span class="n">platform</span> <span class="o">==</span> <span class="s">"linux"</span> <span class="ow">or</span> <span class="n">platform</span> <span class="o">==</span> <span class="s">"linux2"</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="s">"Linux"</span><span class="p">)</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="s">"Oops! Something went wrong."</span><span class="p">)</span>
</code></pre></div></div>

<h3 id="check-if-path-is-a-file-or-directory">Check if path is a file or directory</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">path_checker</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
    <span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span>
    <span class="n">path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>

    <span class="k">if</span> <span class="n">path</span><span class="p">.</span><span class="n">exists</span><span class="p">():</span>
        <span class="k">if</span> <span class="n">path</span><span class="p">.</span><span class="n">is_dir</span><span class="p">():</span>
            <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"'</span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s">' is directory"</span><span class="p">)</span>
        <span class="k">else</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">path</span><span class="p">.</span><span class="n">is_file</span><span class="p">():</span>
                <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"'</span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s">' is a file"</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">True</span>

    <span class="k">else</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"'</span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s">' does not exist."</span><span class="p">)</span>
        <span class="k">return</span> <span class="bp">False</span>
</code></pre></div></div>

<h3 id="unpack-list-and-return-with-oxford-comma">Unpack list and return with Oxford comma</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">unpack_list</span><span class="p">(</span><span class="n">lst</span><span class="p">):</span>  <span class="c1"># Oxford comma
</span>    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">lst</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
        <span class="n">lst</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">]</span>
    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">lst</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
        <span class="k">return</span>
    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">lst</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
        <span class="k">return</span> <span class="s">", "</span><span class="p">.</span><span class="n">join</span><span class="p">(</span><span class="n">lst</span><span class="p">)</span>
    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">lst</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
        <span class="k">return</span> <span class="s">", and "</span><span class="p">.</span><span class="n">join</span><span class="p">(</span><span class="n">lst</span><span class="p">)</span> 
    <span class="k">else</span><span class="p">:</span>
        <span class="n">first_part</span> <span class="o">=</span> <span class="n">lst</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
        <span class="n">last_part</span> <span class="o">=</span> <span class="n">lst</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
        <span class="k">return</span> <span class="s">", "</span><span class="p">.</span><span class="n">join</span><span class="p">(</span><span class="n">first_part</span><span class="p">)</span> <span class="o">+</span> <span class="s">", and "</span> <span class="o">+</span> <span class="n">last_part</span>
</code></pre></div></div>

<h3 id="combine-two-lists-to-a-dictionary">Combine two lists to a dictionary</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">months</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">12</span><span class="p">]</span>
<span class="n">months_alpha</span> <span class="o">=</span> <span class="p">[</span><span class="s">'Jan'</span><span class="p">,</span><span class="s">'Feb'</span><span class="p">,</span><span class="s">'Mar'</span><span class="p">,</span><span class="s">'Apr'</span><span class="p">,</span><span class="s">'May'</span><span class="p">,</span><span class="s">'Jun'</span><span class="p">,</span><span class="s">'Jul'</span><span class="p">,</span><span class="s">'Aug'</span><span class="p">,</span><span class="s">'Sep'</span><span class="p">,</span><span class="s">'Oct'</span><span class="p">,</span><span class="s">'Nov'</span><span class="p">,</span><span class="s">'Des'</span><span class="p">]</span>
<span class="n">dictionary</span> <span class="o">=</span> <span class="p">[{</span><span class="s">'label'</span><span class="p">:</span> <span class="n">x</span><span class="p">,</span><span class="s">'value'</span><span class="p">:</span> <span class="n">y</span><span class="p">}</span> <span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">months</span><span class="p">,</span> <span class="n">months_alpha</span><span class="p">)]</span>
</code></pre></div></div>

<h2 id="pandas">Pandas</h2>

<h3 id="word-search-in-a-dataframe">Word search in a DataFrame</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">word_search</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="o">*</span><span class="n">words</span><span class="p">):</span>
    <span class="k">if</span> <span class="ow">not</span> <span class="n">words</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">words</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">&lt;</span> <span class="mi">1</span><span class="p">:</span>
        <span class="k">return</span>

    <span class="n">col_count</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span>
    <span class="n">sum_words</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span>
    <span class="n">found_words</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="p">[]</span>

    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">words</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">str</span><span class="p">):</span>
        <span class="n">words</span> <span class="o">=</span> <span class="p">[</span><span class="n">word</span> <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">words</span><span class="p">]</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="n">words</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="o">*</span><span class="n">words</span><span class="p">)</span>
        <span class="k">print</span><span class="p">(</span><span class="n">words</span><span class="p">)</span>

    <span class="k">for</span> <span class="n">word</span> <span class="ow">in</span> <span class="n">words</span><span class="p">:</span>
        <span class="n">col_count</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="n">sum_word</span> <span class="o">=</span> <span class="mi">0</span>
        <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">df</span><span class="p">:</span>
            <span class="k">if</span> <span class="n">df</span><span class="p">[</span><span class="n">column</span><span class="p">].</span><span class="n">dtype</span> <span class="o">==</span> <span class="nb">object</span> <span class="ow">or</span> <span class="n">df</span><span class="p">[</span><span class="n">column</span><span class="p">].</span><span class="n">dtype</span> <span class="o">==</span> <span class="nb">str</span><span class="p">:</span>
                <span class="n">col_count</span> <span class="o">+=</span> <span class="mi">1</span>
                <span class="n">sum_word</span> <span class="o">+=</span> <span class="n">df</span><span class="p">[</span><span class="n">column</span><span class="p">].</span><span class="nb">str</span><span class="p">.</span><span class="n">contains</span><span class="p">(</span><span class="sa">f</span><span class="s">"^</span><span class="si">{</span><span class="n">word</span><span class="si">}</span><span class="s">$"</span><span class="p">).</span><span class="nb">sum</span><span class="p">()</span>
                <span class="k">if</span> <span class="n">df</span><span class="p">[</span><span class="n">column</span><span class="p">].</span><span class="nb">str</span><span class="p">.</span><span class="n">contains</span><span class="p">(</span><span class="sa">f</span><span class="s">"^</span><span class="si">{</span><span class="n">word</span><span class="si">}</span><span class="s">$"</span><span class="p">).</span><span class="nb">any</span><span class="p">():</span>
                    <span class="k">if</span> <span class="n">word</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">found_words</span><span class="p">:</span>
                        <span class="n">found_words</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">word</span><span class="p">)</span>
        <span class="n">sum_words</span> <span class="o">+=</span> <span class="n">sum_word</span>
    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">found_words</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
        <span class="n">found_words</span> <span class="o">=</span> <span class="n">words</span>
    <span class="k">print</span><span class="p">(</span><span class="s">"Columns of dtype str or object:"</span><span class="p">,</span> <span class="n">col_count</span><span class="p">)</span>
    <span class="k">print</span><span class="p">(</span>
        <span class="sa">f</span><span class="s">"Instances of </span><span class="si">{</span><span class="n">unpack_list</span><span class="p">(</span><span class="n">found_words</span><span class="p">)</span><span class="si">}</span><span class="s"> in the dataframe: </span><span class="si">{</span><span class="n">sum_words</span><span class="si">}</span><span class="s">"</span>
    <span class="p">)</span>
</code></pre></div></div>

<h3 id="find-missing-values-in-a-dataframe">Find missing values in a DataFrame</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">find_missing_values</span><span class="p">(</span><span class="n">df</span><span class="p">):</span>
    <span class="n">column_names</span> <span class="o">=</span> <span class="p">(</span><span class="n">df</span><span class="p">.</span><span class="n">columns</span><span class="p">[</span><span class="n">df</span><span class="p">.</span><span class="n">isnull</span><span class="p">().</span><span class="nb">any</span><span class="p">()</span> <span class="o">==</span> <span class="bp">True</span><span class="p">]).</span><span class="nb">format</span><span class="p">()</span>
    <span class="n">miss_columns</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="n">isna</span><span class="p">().</span><span class="nb">any</span><span class="p">().</span><span class="nb">sum</span><span class="p">()</span>
    <span class="n">miss_values</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="n">isna</span><span class="p">().</span><span class="nb">sum</span><span class="p">().</span><span class="nb">sum</span><span class="p">()</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Instances of missing data: </span><span class="si">{</span><span class="n">miss_values</span><span class="si">}</span><span class="s">"</span><span class="p">)</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Columns with missing data: </span><span class="si">{</span><span class="n">miss_columns</span><span class="si">}</span><span class="s">"</span><span class="p">)</span>
    <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"Column names with missing data: </span><span class="si">{</span><span class="n">unpack_list</span><span class="p">(</span><span class="n">column_names</span><span class="p">)</span><span class="si">}</span><span class="s">"</span><span class="p">)</span>
</code></pre></div></div>

<h3 id="find-location-of-missing-values-in-a-dataframe">Find location of missing values in a DataFrame</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">missing_location</span><span class="p">(</span><span class="n">df</span><span class="p">):</span>
    <span class="n">col_criteria</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="n">isnull</span><span class="p">().</span><span class="nb">any</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
    <span class="n">miss_col</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">col_criteria</span><span class="p">.</span><span class="n">index</span><span class="p">[</span><span class="n">col_criteria</span><span class="p">]]</span>

    <span class="n">miss_only</span> <span class="o">=</span> <span class="n">miss_col</span><span class="p">[</span><span class="n">miss_col</span><span class="p">.</span><span class="n">isnull</span><span class="p">().</span><span class="nb">any</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)]</span>

    <span class="n">row_criteria</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="n">isnull</span><span class="p">().</span><span class="nb">any</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
    <span class="n">miss_row</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">row_criteria</span><span class="p">]</span>
    
    <span class="k">return</span> <span class="n">miss_col</span><span class="p">,</span> <span class="n">miss_row</span><span class="p">,</span> <span class="n">miss_only</span>
</code></pre></div></div>

<h3 id="find-location-data-from-a-dataframe-column">Find location data from a DataFrame column</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">df_locatinon_data</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="n">search_col</span><span class="p">):</span>
    <span class="kn">from</span> <span class="nn">geopy.geocoders</span> <span class="kn">import</span> <span class="n">Nominatim</span>
    <span class="kn">from</span> <span class="nn">geopy.extra.rate_limiter</span> <span class="kn">import</span> <span class="n">RateLimiter</span>
    <span class="n">geolocator</span> <span class="o">=</span> <span class="n">Nominatim</span><span class="p">(</span><span class="n">user_agent</span><span class="o">=</span><span class="s">"my_geocoder"</span><span class="p">)</span>
    <span class="n">geocode</span> <span class="o">=</span> <span class="n">RateLimiter</span><span class="p">(</span><span class="n">geolocator</span><span class="p">.</span><span class="n">geocode</span><span class="p">,</span> <span class="n">min_delay_seconds</span><span class="o">=</span><span class="p">.</span><span class="mi">1</span><span class="p">)</span>
    <span class="c1"># Find the location.
</span>    <span class="n">df</span><span class="p">[</span><span class="s">'location'</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">search_col</span><span class="p">].</span><span class="nb">apply</span><span class="p">(</span><span class="n">geocode</span><span class="p">)</span>
    <span class="c1"># Extract point to its own columns.
</span>    <span class="n">df</span><span class="p">[</span><span class="s">'point'</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s">'location'</span><span class="p">].</span><span class="nb">apply</span><span class="p">(</span><span class="k">lambda</span> <span class="n">loc</span><span class="p">:</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">loc</span><span class="p">.</span><span class="n">point</span><span class="p">)</span>
                                       <span class="k">if</span> <span class="n">loc</span> <span class="k">else</span> <span class="bp">None</span><span class="p">)</span>
    <span class="c1"># split point column into latitude, longitude and altitude columns.
</span>    <span class="n">df</span><span class="p">[[</span><span class="s">'latitude'</span><span class="p">,</span> <span class="s">'longitude'</span><span class="p">,</span>
        <span class="s">'altitude'</span><span class="p">]]</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="s">'point'</span><span class="p">].</span><span class="n">tolist</span><span class="p">(),</span> <span class="n">index</span><span class="o">=</span><span class="n">df</span><span class="p">.</span><span class="n">index</span><span class="p">)</span>

    <span class="k">return</span> <span class="n">df</span>
</code></pre></div></div>

<h3 id="change-name-of-index-or-row-items-or-to-datetime">Change name of index or row items, or to datetime.</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">replace_df_ax_name</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="n">find</span><span class="p">,</span> <span class="n">replace_with</span><span class="o">=</span><span class="s">""</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>

    <span class="n">dff</span> <span class="o">=</span> <span class="n">df</span><span class="p">.</span><span class="n">copy</span><span class="p">()</span>

    <span class="k">if</span> <span class="n">axis</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>  <span class="c1"># &lt;-- Columns
</span>        <span class="n">dff</span> <span class="o">=</span> <span class="n">dff</span><span class="p">.</span><span class="n">T</span>

    <span class="n">dff_row</span> <span class="o">=</span> <span class="n">dff</span><span class="p">.</span><span class="n">index</span><span class="p">.</span><span class="n">to_list</span><span class="p">()</span>
    <span class="n">dff_dict</span> <span class="o">=</span> <span class="p">{</span><span class="n">i</span><span class="p">:</span> <span class="n">dff_row</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">dff_row</span><span class="p">))}</span>

    <span class="n">change_index</span><span class="p">:</span> <span class="nb">list</span> <span class="o">=</span> <span class="p">[]</span>
    <span class="n">change_dict</span><span class="p">:</span> <span class="nb">dict</span> <span class="o">=</span> <span class="p">{}</span>

    <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">dff_dict</span><span class="p">.</span><span class="n">items</span><span class="p">():</span>
        <span class="k">if</span> <span class="n">find</span> <span class="ow">in</span> <span class="n">v</span><span class="p">:</span>
            <span class="n">change_index</span><span class="p">.</span><span class="n">append</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
            <span class="k">if</span> <span class="n">replace_with</span> <span class="o">==</span> <span class="s">"d_to_datetime"</span><span class="p">:</span>
                <span class="n">v</span> <span class="o">=</span> <span class="n">pd</span><span class="p">.</span><span class="n">to_datetime</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
            <span class="k">else</span><span class="p">:</span>
                <span class="n">v</span> <span class="o">=</span> <span class="n">v</span><span class="p">.</span><span class="n">replace</span><span class="p">(</span><span class="n">find</span><span class="p">,</span> <span class="n">replace_with</span><span class="p">)</span>
            <span class="n">change_dict</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>

    <span class="n">dff_dict</span><span class="p">.</span><span class="n">update</span><span class="p">(</span><span class="n">change_dict</span><span class="p">)</span>
    <span class="n">dff</span><span class="p">.</span><span class="n">index</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">dff_dict</span><span class="p">.</span><span class="n">values</span><span class="p">())</span>

    <span class="k">if</span> <span class="n">axis</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>  <span class="c1"># &lt;-- Columns
</span>        <span class="n">dff</span> <span class="o">=</span> <span class="n">dff</span><span class="p">.</span><span class="n">T</span>

    <span class="k">return</span> <span class="n">dff</span>
</code></pre></div></div>

<h2 id="comprehensions">Comprehensions</h2>

<p><a href="https://realpython.com/list-comprehension-python/">Real Python</a></p>

<h3 id="list">List</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">squares</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="o">*</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">)]</span>
</code></pre></div></div>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">sentence</span> <span class="o">=</span> <span class="s">'the rocket came back from mars'</span>
<span class="n">vowels</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sentence</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">in</span> <span class="s">'aeiou'</span><span class="p">]</span>

<span class="k">def</span> <span class="nf">is_consonant</span><span class="p">(</span><span class="n">letter</span><span class="p">):</span>
    <span class="n">vowels</span> <span class="o">=</span> <span class="s">'aeiou'</span>
    <span class="k">return</span> <span class="n">letter</span><span class="p">.</span><span class="n">isalpha</span><span class="p">()</span> <span class="ow">and</span> <span class="n">letter</span><span class="p">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">vowels</span>
<span class="n">consonants</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">sentence</span> <span class="k">if</span> <span class="n">is_consonant</span><span class="p">(</span><span class="n">i</span><span class="p">)]</span>
</code></pre></div></div>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">original_prices</span> <span class="o">=</span> <span class="p">[</span><span class="mf">1.25</span><span class="p">,</span> <span class="o">-</span><span class="mf">9.45</span><span class="p">,</span> <span class="mf">10.22</span><span class="p">,</span> <span class="mf">3.78</span><span class="p">,</span> <span class="o">-</span><span class="mf">5.92</span><span class="p">,</span> <span class="mf">1.16</span><span class="p">]</span>
<span class="n">prices</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">if</span> <span class="n">i</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="k">else</span> <span class="mi">0</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">original_prices</span><span class="p">]</span>
</code></pre></div></div>

<h3 id="set">Set</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">quote</span> <span class="o">=</span> <span class="s">"life, uh, finds a way"</span>
<span class="n">unique_vowels</span> <span class="o">=</span> <span class="p">{</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">quote</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">in</span> <span class="s">'aeiou'</span><span class="p">}</span>
</code></pre></div></div>

<h3 id="dictionary">Dictionary</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">squares</span> <span class="o">=</span> <span class="p">{</span><span class="n">i</span><span class="p">:</span> <span class="n">i</span> <span class="o">*</span> <span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">)}</span>
<span class="n">squares</span>
</code></pre></div></div>]]></content><author><name>Lewi Uberg</name></author><category term="Data Science" /><category term="Programming" /><category term="Software Engineering" /><category term="Data Collection" /><category term="Data Preprocessing" /><category term="Misc" /><category term="data science" /><category term="function" /><category term="python" /><category term="comprehensions" /><category term="decorators" /><category term="algorithm" /><category term="missing data" /><category term="data cleaning" /><category term="feature engineering" /><category term="pandas" /><category term="geopy" /><category term="matplotlib" /><category term="plotly" /><category term="vscode" /><category term="jupyter notebooks" /><summary type="html"><![CDATA[Code snippets I find useful to have as a reference]]></summary></entry></feed>