<?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="iframe.php?url=https%3A%2F%2Fstevenranney.github.io%2Ffeed.xml" rel="self" type="application/atom+xml" /><link href="iframe.php?url=https%3A%2F%2Fstevenranney.github.io%2F" rel="alternate" type="text/html" /><updated>2025-06-20T18:27:54+00:00</updated><id>https://stevenranney.github.io/feed.xml</id><title type="html">Steven H. Ranney</title><subtitle>Steven H. Ranney in Bozeman, MT, does things.</subtitle><entry><title type="html">Test - MT Bees</title><link href="iframe.php?url=https%3A%2F%2Fstevenranney.github.io%2F2023%2F10%2F14%2Fbees" rel="alternate" type="text/html" title="Test - MT Bees" /><published>2023-10-14T00:00:00+00:00</published><updated>2023-10-14T00:00:00+00:00</updated><id>https://stevenranney.github.io/2023/10/14/bees</id><content type="html" xml:base="https://stevenranney.github.io/2023/10/14/bees"><![CDATA[<p>Really just testing out a workflow.</p>

<p>This is an <code class="language-plaintext highlighter-rouge">.ipynb</code> file I converted to md with <code class="language-plaintext highlighter-rouge">jupyter nbconvert</code> but there was still some special handling involved to get this into github pages correctly. Weird workflow.</p>

<p>Converting with <code class="language-plaintext highlighter-rouge">jupyter nbconvert -to markdown [filename]</code> produced the <code class="language-plaintext highlighter-rouge">.md</code> and <code class="language-plaintext highlighter-rouge">.png</code> files successfully but I couldn’t just <code class="language-plaintext highlighter-rouge">mv</code> them to the <code class="language-plaintext highlighter-rouge">_posts</code> dir of my stevenranney.github.io jekyll site. There was some additional handling to get the images to appear correctly. Could probably script the special handling–and I may–but for now this is okay.</p>

<p>My guess is that someone has probably already handled the scripting. I may dig around and find out.</p>

<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">seaborn</span> <span class="k">as</span> <span class="n">sns</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">matplotlib.dates</span> <span class="k">as</span> <span class="n">mdates</span>
<span class="kn">import</span> <span class="nn">scipy.stats</span> <span class="k">as</span> <span class="n">stats</span>

<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span>
<span class="kn">from</span> <span class="nn">scipy.optimize</span> <span class="kn">import</span> <span class="n">curve_fit</span>


</code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">%</span><span class="n">matplotlib</span> <span class="n">inline</span>

<span class="c1"># Seaborn defaults
</span><span class="n">sns</span><span class="p">.</span><span class="n">set_theme</span><span class="p">()</span>
<span class="n">sns</span><span class="p">.</span><span class="nb">set</span><span class="p">(</span><span class="n">style</span> <span class="o">=</span> <span class="s">'white'</span><span class="p">,</span> <span class="n">font_scale</span> <span class="o">=</span> <span class="mf">1.5</span><span class="p">,</span> <span class="n">rc</span> <span class="o">=</span> <span class="p">{</span><span class="s">'figure.figsize'</span><span class="p">:(</span><span class="mi">16</span><span class="p">,</span> <span class="mi">9</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">bee</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">'../../Google Drive/job_tech_learning/data/Bumblebeesandfl/MT_2023_Bee_Plant_Data.csv'</span><span class="p">)</span>
<span class="n">bee</span><span class="p">.</span><span class="n">head</span><span class="p">()</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>Site ID</th>
      <th>Date</th>
      <th>Bee Survey Length (min)</th>
      <th>Number of Bumble Bees Captured</th>
      <th>Number of Plant Species in Flower</th>
      <th>List of Plant Species in Flower</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>x01a</td>
      <td>5/6/2023</td>
      <td>45</td>
      <td>0</td>
      <td>17</td>
      <td>Alyssum desertorum (desert madwort), Arabis sp...</td>
    </tr>
    <tr>
      <th>1</th>
      <td>x01a</td>
      <td>5/18/2023</td>
      <td>90</td>
      <td>2</td>
      <td>22</td>
      <td>Alyssum desertorum (desert madwort), Astragalu...</td>
    </tr>
    <tr>
      <th>2</th>
      <td>x01a</td>
      <td>6/28/2023</td>
      <td>90</td>
      <td>1</td>
      <td>26</td>
      <td>Achillea millefolium (common yarrow), Alyssum ...</td>
    </tr>
    <tr>
      <th>3</th>
      <td>x01b</td>
      <td>4/26/2023</td>
      <td>45</td>
      <td>0</td>
      <td>6</td>
      <td>Alyssum desertorum (desert madwort), Lomatium ...</td>
    </tr>
    <tr>
      <th>4</th>
      <td>x01b</td>
      <td>5/18/2023</td>
      <td>90</td>
      <td>0</td>
      <td>28</td>
      <td>Allium textile (textile onion), Alyssum desert...</td>
    </tr>
  </tbody>
</table>
</div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">bee</span><span class="p">.</span><span class="n">shape</span>
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(65, 6)
</code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">rename_cols</span> <span class="o">=</span> <span class="p">{</span>
    <span class="s">"Site ID"</span><span class="p">:</span> <span class="s">'id'</span><span class="p">,</span> 
    <span class="s">"Date"</span><span class="p">:</span> <span class="s">'date_str'</span><span class="p">,</span> 
    <span class="s">"Bee Survey Length (min)"</span><span class="p">:</span> <span class="s">"survey_length"</span><span class="p">,</span> 
    <span class="s">"Number of Bumble Bees Captured"</span><span class="p">:</span> <span class="s">'n_captured'</span><span class="p">,</span> 
    <span class="s">"Number of Plant Species in Flower"</span><span class="p">:</span> <span class="s">'n_flowering_plants'</span><span class="p">,</span> 
    <span class="s">"List of Plant Species in Flower"</span><span class="p">:</span> <span class="s">'sp_str'</span>
<span class="p">}</span>

<span class="n">bee</span> <span class="o">=</span> <span class="p">(</span>
    <span class="n">bee</span><span class="p">.</span>
    <span class="n">rename</span><span class="p">(</span><span class="n">columns</span> <span class="o">=</span> <span class="n">rename_cols</span><span class="p">).</span>
    <span class="n">assign</span><span class="p">(</span>
        <span class="n">date</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">pd</span><span class="p">.</span><span class="n">to_datetime</span><span class="p">(</span><span class="n">x</span><span class="p">.</span><span class="n">date_str</span><span class="p">,</span> <span class="nb">format</span> <span class="o">=</span> <span class="s">"%m/%d/%Y"</span><span class="p">)</span>
    <span class="p">)</span>
<span class="p">)</span>

<span class="n">bee</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>id</th>
      <th>date_str</th>
      <th>survey_length</th>
      <th>n_captured</th>
      <th>n_flowering_plants</th>
      <th>sp_str</th>
      <th>date</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>x01a</td>
      <td>5/6/2023</td>
      <td>45</td>
      <td>0</td>
      <td>17</td>
      <td>Alyssum desertorum (desert madwort), Arabis sp...</td>
      <td>2023-05-06</td>
    </tr>
    <tr>
      <th>1</th>
      <td>x01a</td>
      <td>5/18/2023</td>
      <td>90</td>
      <td>2</td>
      <td>22</td>
      <td>Alyssum desertorum (desert madwort), Astragalu...</td>
      <td>2023-05-18</td>
    </tr>
    <tr>
      <th>2</th>
      <td>x01a</td>
      <td>6/28/2023</td>
      <td>90</td>
      <td>1</td>
      <td>26</td>
      <td>Achillea millefolium (common yarrow), Alyssum ...</td>
      <td>2023-06-28</td>
    </tr>
    <tr>
      <th>3</th>
      <td>x01b</td>
      <td>4/26/2023</td>
      <td>45</td>
      <td>0</td>
      <td>6</td>
      <td>Alyssum desertorum (desert madwort), Lomatium ...</td>
      <td>2023-04-26</td>
    </tr>
    <tr>
      <th>4</th>
      <td>x01b</td>
      <td>5/18/2023</td>
      <td>90</td>
      <td>0</td>
      <td>28</td>
      <td>Allium textile (textile onion), Alyssum desert...</td>
      <td>2023-05-18</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>60</th>
      <td>x10c</td>
      <td>6/20/2023</td>
      <td>90</td>
      <td>0</td>
      <td>19</td>
      <td>Achillea millefolium (common yarrow), Alyssum ...</td>
      <td>2023-06-20</td>
    </tr>
    <tr>
      <th>61</th>
      <td>x11a</td>
      <td>4/23/2023</td>
      <td>45</td>
      <td>0</td>
      <td>2</td>
      <td>Lomatium foeniculaceum (desert biscuitroot), P...</td>
      <td>2023-04-23</td>
    </tr>
    <tr>
      <th>62</th>
      <td>x11b</td>
      <td>5/20/2023</td>
      <td>90</td>
      <td>0</td>
      <td>11</td>
      <td>Allium textile (textile onion), Alyssum desert...</td>
      <td>2023-05-20</td>
    </tr>
    <tr>
      <th>63</th>
      <td>x11b</td>
      <td>6/7/2023</td>
      <td>90</td>
      <td>2</td>
      <td>17</td>
      <td>Achillea millefolium (common yarrow), Alyssum ...</td>
      <td>2023-06-07</td>
    </tr>
    <tr>
      <th>64</th>
      <td>x11b</td>
      <td>6/20/2023</td>
      <td>90</td>
      <td>2</td>
      <td>16</td>
      <td>Achillea millefolium (common yarrow), Astragal...</td>
      <td>2023-06-20</td>
    </tr>
  </tbody>
</table>
<p>65 rows × 7 columns</p>
</div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Split spp string into list of strings
</span>
<span class="n">bee</span> <span class="o">=</span> <span class="p">(</span>
    <span class="n">bee</span><span class="p">.</span>
    <span class="n">assign</span><span class="p">(</span>
        <span class="n">sp_list</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="p">[</span><span class="n">i</span><span class="p">.</span><span class="n">split</span><span class="p">(</span><span class="s">", "</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">x</span><span class="p">.</span><span class="n">sp_str</span><span class="p">]</span>
    <span class="p">)</span>
<span class="p">)</span>

<span class="n">bee</span><span class="p">.</span><span class="n">sort_values</span><span class="p">([</span><span class="s">'id'</span><span class="p">,</span> <span class="s">'date'</span><span class="p">])</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>id</th>
      <th>date_str</th>
      <th>survey_length</th>
      <th>n_captured</th>
      <th>n_flowering_plants</th>
      <th>sp_str</th>
      <th>date</th>
      <th>sp_list</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>x01a</td>
      <td>5/6/2023</td>
      <td>45</td>
      <td>0</td>
      <td>17</td>
      <td>Alyssum desertorum (desert madwort), Arabis sp...</td>
      <td>2023-05-06</td>
      <td>[Alyssum desertorum (desert madwort), Arabis s...</td>
    </tr>
    <tr>
      <th>1</th>
      <td>x01a</td>
      <td>5/18/2023</td>
      <td>90</td>
      <td>2</td>
      <td>22</td>
      <td>Alyssum desertorum (desert madwort), Astragalu...</td>
      <td>2023-05-18</td>
      <td>[Alyssum desertorum (desert madwort), Astragal...</td>
    </tr>
    <tr>
      <th>2</th>
      <td>x01a</td>
      <td>6/28/2023</td>
      <td>90</td>
      <td>1</td>
      <td>26</td>
      <td>Achillea millefolium (common yarrow), Alyssum ...</td>
      <td>2023-06-28</td>
      <td>[Achillea millefolium (common yarrow), Alyssum...</td>
    </tr>
    <tr>
      <th>3</th>
      <td>x01b</td>
      <td>4/26/2023</td>
      <td>45</td>
      <td>0</td>
      <td>6</td>
      <td>Alyssum desertorum (desert madwort), Lomatium ...</td>
      <td>2023-04-26</td>
      <td>[Alyssum desertorum (desert madwort), Lomatium...</td>
    </tr>
    <tr>
      <th>4</th>
      <td>x01b</td>
      <td>5/18/2023</td>
      <td>90</td>
      <td>0</td>
      <td>28</td>
      <td>Allium textile (textile onion), Alyssum desert...</td>
      <td>2023-05-18</td>
      <td>[Allium textile (textile onion), Alyssum deser...</td>
    </tr>
    <tr>
      <th>...</th>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
      <td>...</td>
    </tr>
    <tr>
      <th>60</th>
      <td>x10c</td>
      <td>6/20/2023</td>
      <td>90</td>
      <td>0</td>
      <td>19</td>
      <td>Achillea millefolium (common yarrow), Alyssum ...</td>
      <td>2023-06-20</td>
      <td>[Achillea millefolium (common yarrow), Alyssum...</td>
    </tr>
    <tr>
      <th>61</th>
      <td>x11a</td>
      <td>4/23/2023</td>
      <td>45</td>
      <td>0</td>
      <td>2</td>
      <td>Lomatium foeniculaceum (desert biscuitroot), P...</td>
      <td>2023-04-23</td>
      <td>[Lomatium foeniculaceum (desert biscuitroot), ...</td>
    </tr>
    <tr>
      <th>62</th>
      <td>x11b</td>
      <td>5/20/2023</td>
      <td>90</td>
      <td>0</td>
      <td>11</td>
      <td>Allium textile (textile onion), Alyssum desert...</td>
      <td>2023-05-20</td>
      <td>[Allium textile (textile onion), Alyssum deser...</td>
    </tr>
    <tr>
      <th>63</th>
      <td>x11b</td>
      <td>6/7/2023</td>
      <td>90</td>
      <td>2</td>
      <td>17</td>
      <td>Achillea millefolium (common yarrow), Alyssum ...</td>
      <td>2023-06-07</td>
      <td>[Achillea millefolium (common yarrow), Alyssum...</td>
    </tr>
    <tr>
      <th>64</th>
      <td>x11b</td>
      <td>6/20/2023</td>
      <td>90</td>
      <td>2</td>
      <td>16</td>
      <td>Achillea millefolium (common yarrow), Astragal...</td>
      <td>2023-06-20</td>
      <td>[Achillea millefolium (common yarrow), Astraga...</td>
    </tr>
  </tbody>
</table>
<p>65 rows × 8 columns</p>
</div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># not quite right; the length of every sp_list shouldn't be 65...
</span>
<span class="p">[</span><span class="nb">len</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="n">bee</span><span class="p">.</span><span class="n">sp_list</span><span class="p">][:</span><span class="mi">5</span><span class="p">]</span>

<span class="c1"># Ah. The sp_list is just the list of the flowering plants and will equal the n_flowering_plants col.
# it's not a list of all plants in the sampling area. Bummer.
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[17, 22, 26, 6, 28]
</code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><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">g</span> <span class="o">=</span> <span class="n">sns</span><span class="p">.</span><span class="n">scatterplot</span><span class="p">(</span><span class="n">data</span> <span class="o">=</span> <span class="n">bee</span><span class="p">,</span> <span class="n">x</span> <span class="o">=</span> <span class="s">'date'</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="s">'n_flowering_plants'</span><span class="p">)</span>

<span class="c1"># g.axvline(35, color = 'black', ls = "--")
</span><span class="n">g</span><span class="p">.</span><span class="nb">set</span><span class="p">(</span>
    <span class="n">ylabel</span> <span class="o">=</span> <span class="s">'N flowering plants in sample area'</span><span class="p">,</span>
    <span class="n">xlabel</span> <span class="o">=</span> <span class="s">'Date'</span>
    <span class="p">)</span><span class="c1">#xlim = (-25, 730))
</span>
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[Text(0, 0.5, 'N flowering plants in sample area'), Text(0.5, 0, 'Date')]
</code></pre></div></div>

<p><img src="iframe.php?url=https%3A%2F%2Fstevenranney.github.io%2Fpost_images%2F2023-10-14-bees_7_1.png" alt="png" /></p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Define the model
</span><span class="k">def</span> <span class="nf">von_b</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">Linf</span><span class="p">,</span> <span class="n">K</span><span class="p">,</span> <span class="n">t0</span><span class="p">):</span> 
    <span class="k">return</span> <span class="n">Linf</span> <span class="o">*</span> <span class="p">(</span><span class="mi">1</span> <span class="o">-</span> <span class="n">np</span><span class="p">.</span><span class="n">exp</span><span class="p">(</span><span class="o">-</span><span class="n">K</span><span class="o">*</span><span class="p">(</span><span class="n">x</span><span class="o">-</span><span class="n">t0</span><span class="p">)))</span>

<span class="c1"># optimized values, covariance of optimized values
</span><span class="n">params</span><span class="p">,</span> <span class="n">cov</span> <span class="o">=</span> <span class="n">curve_fit</span><span class="p">(</span>
    <span class="n">f</span> <span class="o">=</span> <span class="n">von_b</span><span class="p">,</span> 
    <span class="n">xdata</span> <span class="o">=</span> <span class="n">mdates</span><span class="p">.</span><span class="n">date2num</span><span class="p">(</span><span class="n">bee</span><span class="p">.</span><span class="n">date</span><span class="p">),</span> 
    <span class="n">ydata</span> <span class="o">=</span> <span class="n">bee</span><span class="p">.</span><span class="n">n_flowering_plants</span><span class="p">,</span> 
    <span class="n">p0</span> <span class="o">=</span> <span class="p">[</span><span class="mi">19</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="p">)</span>

<span class="k">print</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="s">"</span><span class="se">\n\n</span><span class="s">"</span><span class="p">,</span> <span class="n">cov</span><span class="p">)</span>
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[2.56409902e+01 4.85164279e-02 1.94687624e+04] 

 [[ 6.58188016e+00 -3.90031983e-02 -2.94344343e+00]
 [-3.90031983e-02  3.19236318e-04  3.46377103e-02]
 [-2.94344343e+00  3.46377103e-02  8.59442029e+00]]
</code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">xdata</span> <span class="o">=</span> <span class="n">mdates</span><span class="p">.</span><span class="n">date2num</span><span class="p">(</span><span class="n">bee</span><span class="p">.</span><span class="n">date</span><span class="p">)</span>
<span class="n">ydata</span> <span class="o">=</span> <span class="n">bee</span><span class="p">.</span><span class="n">n_flowering_plants</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="c1"># g = sns.scatterplot(xdata, von_b(xdata, *res), 'r-', label = 'fit')
</span><span class="n">sns</span><span class="p">.</span><span class="n">scatterplot</span><span class="p">(</span><span class="n">x</span> <span class="o">=</span> <span class="n">bee</span><span class="p">.</span><span class="n">date</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">ydata</span><span class="p">,</span> <span class="n">label</span> <span class="o">=</span> <span class="s">'data'</span><span class="p">)</span>
<span class="n">sns</span><span class="p">.</span><span class="n">lineplot</span><span class="p">(</span><span class="n">x</span> <span class="o">=</span> <span class="n">xdata</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">von_b</span><span class="p">(</span><span class="n">xdata</span><span class="p">,</span> <span class="o">*</span><span class="n">params</span><span class="p">),</span> <span class="n">c</span> <span class="o">=</span> <span class="s">'red'</span><span class="p">,</span> <span class="n">label</span> <span class="o">=</span> <span class="s">'fit'</span><span class="p">)</span>
<span class="c1"># g # plt.show()
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;AxesSubplot:xlabel='date', ylabel='n_flowering_plants'&gt;
</code></pre></div></div>

<p><img src="iframe.php?url=https%3A%2F%2Fstevenranney.github.io%2Fpost_images%2F2023-10-14-bees_9_1.png" alt="png" /></p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Get CI, t-stat, and p-value for parameters from curve_fit() 
# from: https://stats.stackexchange.com/questions/362520/how-to-know-if-a-parameter-is-statistically-significant-in-a-curve-fit-estimat
</span>
<span class="kn">import</span> <span class="nn">scipy.odr</span>
<span class="kn">import</span> <span class="nn">scipy.stats</span>

<span class="k">def</span> <span class="nf">f_wrapper_for_odr</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="n">x</span><span class="p">):</span> <span class="c1"># parameter order for odr
</span>    <span class="k">return</span> <span class="n">von_b</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="o">*</span><span class="n">params</span><span class="p">)</span>

<span class="n">model</span> <span class="o">=</span> <span class="n">scipy</span><span class="p">.</span><span class="n">odr</span><span class="p">.</span><span class="n">odrpack</span><span class="p">.</span><span class="n">Model</span><span class="p">(</span><span class="n">f_wrapper_for_odr</span><span class="p">)</span>

<span class="n">data</span> <span class="o">=</span> <span class="n">scipy</span><span class="p">.</span><span class="n">odr</span><span class="p">.</span><span class="n">odrpack</span><span class="p">.</span><span class="n">Data</span><span class="p">(</span><span class="n">xdata</span><span class="p">,</span> <span class="n">ydata</span><span class="p">)</span>
<span class="n">myodr</span> <span class="o">=</span> <span class="n">scipy</span><span class="p">.</span><span class="n">odr</span><span class="p">.</span><span class="n">odrpack</span><span class="p">.</span><span class="n">ODR</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">model</span><span class="p">,</span> <span class="n">beta0</span> <span class="o">=</span> <span class="n">params</span><span class="p">,</span> <span class="n">maxit</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>

<span class="n">myodr</span><span class="p">.</span><span class="n">set_job</span><span class="p">(</span><span class="n">fit_type</span> <span class="o">=</span> <span class="mi">2</span><span class="p">)</span>

<span class="n">parameterStatistics</span> <span class="o">=</span> <span class="n">myodr</span><span class="p">.</span><span class="n">run</span><span class="p">()</span>
<span class="n">df_e</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">xdata</span><span class="p">)</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="n">params</span><span class="p">)</span>
<span class="n">cov_beta</span> <span class="o">=</span> <span class="n">parameterStatistics</span><span class="p">.</span><span class="n">cov_beta</span>
<span class="n">sd_beta</span> <span class="o">=</span> <span class="n">parameterStatistics</span><span class="p">.</span><span class="n">sd_beta</span> <span class="o">*</span> <span class="n">parameterStatistics</span><span class="p">.</span><span class="n">sd_beta</span>

<span class="n">t_df</span> <span class="o">=</span> <span class="n">scipy</span><span class="p">.</span><span class="n">stats</span><span class="p">.</span><span class="n">t</span><span class="p">.</span><span class="n">ppf</span><span class="p">(</span><span class="mf">0.975</span><span class="p">,</span> <span class="n">df_e</span><span class="p">)</span> <span class="c1">#identify dof for 95% CI
</span>
<span class="n">ci</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1">#Empty list for storage
</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">params</span><span class="p">)):</span>
               <span class="n">ci</span><span class="p">.</span><span class="n">append</span><span class="p">([</span><span class="n">params</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">-</span> <span class="n">t_df</span> <span class="o">*</span> <span class="n">parameterStatistics</span><span class="p">.</span><span class="n">sd_beta</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">params</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="n">t_df</span> <span class="o">*</span> <span class="n">parameterStatistics</span><span class="p">.</span><span class="n">sd_beta</span><span class="p">])</span>
        
<span class="n">tstat_beta</span> <span class="o">=</span> <span class="n">params</span> <span class="o">/</span> <span class="n">parameterStatistics</span><span class="p">.</span><span class="n">sd_beta</span>
<span class="n">pstat_beta</span> <span class="o">=</span> <span class="p">(</span><span class="mf">1.0</span> <span class="o">-</span> <span class="n">scipy</span><span class="p">.</span><span class="n">stats</span><span class="p">.</span><span class="n">t</span><span class="p">.</span><span class="n">cdf</span><span class="p">(</span><span class="n">np</span><span class="p">.</span><span class="nb">abs</span><span class="p">(</span><span class="n">tstat_beta</span><span class="p">),</span> <span class="n">df_e</span><span class="p">))</span> <span class="o">*</span> <span class="mf">2.0</span>
</code></pre></div></div>

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

</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;scipy.odr.odrpack.Model at 0x12fca0210&gt;
</code></pre></div></div>

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

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[[20.51049986684996, array([30.77148056, 25.67670011, 31.5033486 ])],
 [0.012806529058685692, array([5.17900678, 0.08422633, 5.91087481])],
 [19462.900041417906, array([19473.89289015, 19468.7981097 , 19474.62475818])]]
</code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">print</span><span class="p">(</span>
    <span class="n">params</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> 
    <span class="n">tstat_beta</span><span class="p">,</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span> 
    <span class="n">pstat_beta</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">params</span><span class="p">)):</span>
    <span class="k">print</span><span class="p">(</span><span class="s">'parameter:'</span><span class="p">,</span> <span class="n">params</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
    <span class="k">print</span><span class="p">(</span><span class="s">'   conf interval:'</span><span class="p">,</span> <span class="n">ci</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">ci</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="mi">1</span><span class="p">])</span>
    <span class="k">print</span><span class="p">(</span><span class="s">'   t-statistic:'</span><span class="p">,</span> <span class="n">tstat_beta</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
    <span class="k">print</span><span class="p">(</span><span class="s">'   p-value:'</span><span class="p">,</span> <span class="n">pstat_beta</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
    <span class="k">print</span><span class="p">()</span>
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[2.56409902e+01 4.85164279e-02 1.94687624e+04] 
 [9.99039188e+00 2.71585640e+00 6.63854015e+03] 
 [1.55431223e-14 8.55401612e-03 0.00000000e+00]
parameter: 25.640990214318908
   conf interval: 20.51049986684996 [30.77148056 25.67670011 31.5033486 ]
   t-statistic: 9.990391875787214
   p-value: 1.554312234475219e-14

parameter: 0.04851642787630825
   conf interval: 0.012806529058685692 [5.17900678 0.08422633 5.91087481]
   t-statistic: 2.71585640409975
   p-value: 0.00855401612286144

parameter: 19468.762399800315
   conf interval: 19462.900041417906 [19473.89289015 19468.7981097  19474.62475818]
   t-statistic: 6638.5401496559625
   p-value: 0.0
</code></pre></div></div>

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

<span class="n">mdates</span><span class="p">.</span><span class="n">date2num</span><span class="p">(</span><span class="n">bee</span><span class="p">.</span><span class="n">date</span><span class="p">)</span>
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>array([19483., 19495., 19536., 19473., 19495., 19545., 19484., 19512.,
       19545., 19484., 19512., 19536., 19471., 19499., 19535., 19481.,
       19498., 19525., 19473., 19508., 19530., 19496., 19511., 19546.,
       19486., 19500., 19535., 19494., 19509., 19530., 19485., 19500.,
       19522., 19481., 19499., 19523., 19470., 19501., 19525., 19486.,
       19513., 19544., 19496., 19513., 19529., 19472., 19497., 19524.,
       19480., 19514., 19543., 19480., 19514., 19543., 19482., 19508.,
       19524., 19471., 19494., 19511., 19528., 19470., 19497., 19515.,
       19528.])
</code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># import numpy as np
# from scipy.optimize import curve_fit
# import matplotlib.pyplot as plt
</span>
<span class="c1"># def f(x, start, end):
#     res = np.empty_like(x)
#     res[x &lt; start] =-1
#     res[x &gt; end] = 1
#     linear = np.all([[start &lt;= x], [x &lt;= end]], axis=0)[0]
#     res[linear] = np.linspace(-1., 1., num=np.sum(linear))
#     return res
</span>
<span class="c1"># if __name__ == '__main__':
</span>
<span class="c1">#     xdata = np.linspace(0., 1000., 1000)
#     ydata = -np.ones(1000)
#     ydata[500:1000] = 1.
#     ydata = ydata + np.random.normal(0., 0.25, len(ydata))
</span>
<span class="c1">#     popt, pcov = curve_fit(f, xdata, ydata, p0=[495., 505.])
#     print(popt, pcov)
#     plt.figure()
#     plt.plot(xdata, f(xdata, *popt), 'r-', label='fit')
#     plt.plot(xdata, ydata, 'b-', label='data')
#     plt.show()
</span></code></pre></div></div>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">np</span><span class="p">.</span><span class="n">empty_like</span><span class="p">(</span><span class="n">bee</span><span class="p">.</span><span class="n">date</span><span class="p">)</span>
</code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>array(['2118-01-08T11:31:00.216823808', '2118-01-08T12:25:58.751707136',
       '2118-01-08T15:33:48.745891840', '2118-01-08T10:45:11.437754368',
       '2118-01-08T12:25:58.751707136', '2118-01-08T16:15:02.647054336',
       '2118-01-08T11:35:35.094730752', '2118-01-08T13:43:51.676125184',
       '2118-01-08T16:15:02.647054336', '2118-01-08T11:35:35.094730752',
       '2118-01-08T13:43:51.676125184', '2118-01-08T15:33:48.745891840',
       '2118-01-08T10:36:01.681940480', '2118-01-08T12:44:18.263334912',
       '2118-01-08T15:29:13.867984896', '2118-01-08T11:21:50.461009920',
       '2118-01-08T12:39:43.385427968', '2118-01-08T14:43:25.088915456',
       '2118-01-08T10:45:11.437754368', '2118-01-08T13:25:32.164497408',
       '2118-01-08T15:06:19.478450176', '2118-01-08T12:30:33.629614080',
       '2118-01-08T13:39:16.798218240', '2118-01-08T16:19:37.524961280',
       '2118-01-08T11:44:44.850544640', '2118-01-08T12:48:53.141241856',
       '2118-01-08T15:29:13.867984896', '2118-01-08T12:21:23.873800192',
       '2118-01-08T13:30:07.042404352', '2118-01-08T15:06:19.478450176',
       '2118-01-08T11:40:09.972637696', '2118-01-08T12:48:53.141241856',
       '2118-01-08T14:29:40.455194624', '2118-01-08T11:21:50.461009920',
       '2118-01-08T12:44:18.263334912', '2118-01-08T14:34:15.333101568',
       '2118-01-08T10:31:26.804033536', '2118-01-08T12:53:28.019148800',
       '2118-01-08T14:43:25.088915456', '2118-01-08T11:44:44.850544640',
       '2118-01-08T13:48:26.554032128', '2118-01-08T16:10:27.769147392',
       '2118-01-08T12:30:33.629614080', '2118-01-08T13:48:26.554032128',
       '2118-01-08T15:01:44.600543232', '2118-01-08T10:40:36.559847424',
       '2118-01-08T12:35:08.507521024', '2118-01-08T14:38:50.211008512',
       '2118-01-08T11:17:15.583102976', '2118-01-08T13:53:01.431939072',
       '2118-01-08T16:05:52.891240448', '2118-01-08T11:17:15.583102976',
       '2118-01-08T13:53:01.431939072', '2118-01-08T16:05:52.891240448',
       '2118-01-08T11:26:25.338916864', '2118-01-08T13:25:32.164497408',
       '2118-01-08T14:38:50.211008512', '2118-01-08T10:36:01.681940480',
       '2118-01-08T12:21:23.873800192', '2118-01-08T13:39:16.798218240',
       '2118-01-08T14:57:09.722636288', '2118-01-08T10:31:26.804033536',
       '2118-01-08T12:35:08.507521024', '2118-01-08T13:57:36.309846016',
       '2118-01-08T14:57:09.722636288'], dtype='datetime64[ns]')
</code></pre></div></div>

<h2 id="and-now-for-something-completely-different">And now for something completely different</h2>

<p>Lets look at the other data file in the .zip</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">bee</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">'../../Google Drive/job_tech_learning/data/Bumblebeesandfl/MT_2023_Plant_Species.csv'</span><span class="p">)</span>
<span class="n">bee</span><span class="p">.</span><span class="n">head</span><span class="p">()</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>Genus</th>
      <th>Species</th>
      <th>Common Name</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>Acer</td>
      <td>negundo</td>
      <td>boxelder</td>
    </tr>
    <tr>
      <th>1</th>
      <td>Achillea</td>
      <td>millefolium</td>
      <td>common yarrow</td>
    </tr>
    <tr>
      <th>2</th>
      <td>Agoseris</td>
      <td>glauca</td>
      <td>pale agoseris</td>
    </tr>
    <tr>
      <th>3</th>
      <td>Allium</td>
      <td>cernuum</td>
      <td>nodding onion</td>
    </tr>
    <tr>
      <th>4</th>
      <td>Allium</td>
      <td>textile</td>
      <td>textile onion</td>
    </tr>
  </tbody>
</table>
</div>]]></content><author><name></name></author><category term="python" /><category term="jupyter" /><category term="scipy" /><summary type="html"><![CDATA[Really just testing out a workflow.]]></summary></entry><entry><title type="html">Test post</title><link href="iframe.php?url=https%3A%2F%2Fstevenranney.github.io%2F2017%2F12%2F21%2Ftest" rel="alternate" type="text/html" title="Test post" /><published>2017-12-21T00:00:00+00:00</published><updated>2017-12-21T00:00:00+00:00</updated><id>https://stevenranney.github.io/2017/12/21/test</id><content type="html" xml:base="https://stevenranney.github.io/2017/12/21/test"><![CDATA[<h2 id="r-markdown">R Markdown</h2>

<p>This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <a href="iframe.php?url=http%3A%2F%2Frmarkdown.rstudio.com">http://rmarkdown.rstudio.com</a>.</p>

<p>When you click the <strong>Knit</strong> button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">summary</span><span class="p">(</span><span class="n">cars</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00
</code></pre></div></div>

<h2 id="including-plots">Including Plots</h2>

<p>You can also embed plots, for example:</p>

<p><img src="iframe.php?url=https%3A%2F%2Fstevenranney.github.io%2Fpost_images%2Fpressure-1.png" alt="" /></p>]]></content><author><name></name></author><category term="test" /><category term="ggplot2" /><summary type="html"><![CDATA[R Markdown]]></summary></entry></feed>