|
50 | 50 |
|
51 | 51 | <body>
|
52 | 52 | <header>
|
53 |
| - <aside>December 17, 2021</aside> |
| 53 | + <aside>December 21, 2021</aside> |
54 | 54 | <a href="https://gto76.github.io" rel="author">Jure Šorn</a>
|
55 | 55 | </header>
|
56 | 56 |
|
|
524 | 524 | <div><h3 id="constructors">Constructors</h3><pre><code class="python language-python apache hljs"><D> = date(year, month, day)
|
525 | 525 | <T> = time(hour=<span class="hljs-number">0</span>, minute=<span class="hljs-number">0</span>, second=<span class="hljs-number">0</span>, microsecond=<span class="hljs-number">0</span>, tzinfo=<span class="hljs-keyword">None</span>, fold=<span class="hljs-number">0</span>)
|
526 | 526 | <DT> = datetime(year, month, day, hour=<span class="hljs-number">0</span>, minute=<span class="hljs-number">0</span>, second=<span class="hljs-number">0</span>, ...)
|
527 |
| -<TD> = timedelta(days=<span class="hljs-number">0</span>, seconds=<span class="hljs-number">0</span>, microseconds=<span class="hljs-number">0</span>, milliseconds=<span class="hljs-number">0</span>, |
528 |
| - minutes=<span class="hljs-number">0</span>, hours=<span class="hljs-number">0</span>, weeks=<span class="hljs-number">0</span>) |
| 527 | +<TD> = timedelta(weeks=<span class="hljs-number">0</span>, days=<span class="hljs-number">0</span>, hours=<span class="hljs-number">0</span>, minutes=<span class="hljs-number">0</span>, seconds=<span class="hljs-number">0</span>, ...) |
529 | 528 | </code></pre></div>
|
530 | 529 |
|
531 | 530 | <ul>
|
532 | 531 | <li><strong>Use <code class="python hljs"><span class="hljs-string">'<D/DT>.weekday()'</span></code> to get the day of the week (Mon == 0).</strong></li>
|
533 | 532 | <li><strong><code class="python hljs"><span class="hljs-string">'fold=1'</span></code> means the second pass in case of time jumping back for one hour.</strong></li>
|
534 |
| -<li><strong><code class="python hljs"><span class="hljs-string">'<DTa> = resolve_imaginary(<DTa>)'</span></code> fixes DTs that fall into the missing hour.</strong></li> |
| 533 | +<li><strong>TD converts and normalizes args to ±days, seconds (< 86,400) and microseconds (< 1M).</strong></li> |
535 | 534 | </ul>
|
536 | 535 | <div><h3 id="now">Now</h3><pre><code class="python language-python hljs"><D/DTn> = D/DT.today() <span class="hljs-comment"># Current local date or naive datetime.</span>
|
537 | 536 | <DTn> = DT.utcnow() <span class="hljs-comment"># Naive datetime from current UTC time.</span>
|
|
2740 | 2739 | df = pd.merge(covid, continents, left_on=<span class="hljs-string">'iso_code'</span>, right_on=<span class="hljs-string">'Three_Letter_Country_Code'</span>)
|
2741 | 2740 | df = df.groupby([<span class="hljs-string">'Continent_Name'</span>, <span class="hljs-string">'date'</span>]).sum().reset_index()
|
2742 | 2741 | df[<span class="hljs-string">'Total Deaths per Million'</span>] = df.total_deaths * <span class="hljs-number">1e6</span> / df.population
|
2743 |
| -df = df[(<span class="hljs-string">'2020-03-14'</span> < df.date) & (df.date < <span class="hljs-string">'2020-11-25'</span>)] |
| 2742 | +df = df[df.date > <span class="hljs-string">'2020-03-14'</span>] |
2744 | 2743 | df = df.rename({<span class="hljs-string">'date'</span>: <span class="hljs-string">'Date'</span>, <span class="hljs-string">'Continent_Name'</span>: <span class="hljs-string">'Continent'</span>}, axis=<span class="hljs-string">'columns'</span>)
|
2745 | 2744 | line(df, x=<span class="hljs-string">'Date'</span>, y=<span class="hljs-string">'Total Deaths per Million'</span>, color=<span class="hljs-string">'Continent'</span>).show()
|
2746 | 2745 | </code></pre></div>
|
|
2760 | 2759 | <span class="hljs-keyword">return</span> df[df.location == <span class="hljs-string">'World'</span>].set_index(<span class="hljs-string">'date'</span>).total_cases
|
2761 | 2760 | <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">scrape_yahoo</span><span class="hljs-params">(slug)</span>:</span>
|
2762 | 2761 | url = <span class="hljs-string">f'https://query1.finance.yahoo.com/v7/finance/download/<span class="hljs-subst">{slug}</span>'</span> + \
|
2763 |
| - <span class="hljs-string">'?period1=1579651200&period2=1608850800&interval=1d&events=history'</span> |
| 2762 | + <span class="hljs-string">'?period1=1579651200&period2=9999999999&interval=1d&events=history'</span> |
2764 | 2763 | df = pd.read_csv(url, usecols=[<span class="hljs-string">'Date'</span>, <span class="hljs-string">'Close'</span>])
|
2765 | 2764 | <span class="hljs-keyword">return</span> df.set_index(<span class="hljs-string">'Date'</span>).Close
|
2766 |
| - <span class="hljs-keyword">return</span> scrape_covid(), scrape_yahoo(<span class="hljs-string">'BTC-USD'</span>), scrape_yahoo(<span class="hljs-string">'GC=F'</span>), scrape_yahoo(<span class="hljs-string">'^DJI'</span>) |
| 2765 | + out = scrape_covid(), scrape_yahoo(<span class="hljs-string">'BTC-USD'</span>), scrape_yahoo(<span class="hljs-string">'GC=F'</span>), scrape_yahoo(<span class="hljs-string">'^DJI'</span>) |
| 2766 | + <span class="hljs-keyword">return</span> map(pd.Series.rename, out, [<span class="hljs-string">'Total Cases'</span>, <span class="hljs-string">'Bitcoin'</span>, <span class="hljs-string">'Gold'</span>, <span class="hljs-string">'Dow Jones'</span>]) |
2767 | 2767 |
|
2768 | 2768 | <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">wrangle_data</span><span class="hljs-params">(covid, bitcoin, gold, dow)</span>:</span>
|
2769 |
| - df = pd.concat([bitcoin, gold, dow], axis=<span class="hljs-number">1</span>) |
2770 |
| - df = df.sort_index().interpolate() |
2771 |
| - df = df.rolling(<span class="hljs-number">10</span>, min_periods=<span class="hljs-number">1</span>, center=<span class="hljs-keyword">True</span>).mean() |
2772 |
| - df = df.loc[<span class="hljs-string">'2020-02-23'</span>:<span class="hljs-string">'2020-11-25'</span>] |
2773 |
| - df = (df / df.iloc[<span class="hljs-number">0</span>]) * <span class="hljs-number">100</span> |
2774 |
| - <span class="hljs-keyword">return</span> pd.concat([covid, df], axis=<span class="hljs-number">1</span>, join=<span class="hljs-string">'inner'</span>) |
| 2769 | + df = pd.concat([bitcoin, gold, dow], axis=<span class="hljs-number">1</span>) <span class="hljs-comment"># Joins columns on dates.</span> |
| 2770 | + df = df.sort_index().interpolate() <span class="hljs-comment"># Sorts by date and interpolates NaN-s.</span> |
| 2771 | + df = df.loc[<span class="hljs-string">'2020-02-23'</span>:] <span class="hljs-comment"># Discards rows before '2020-02-23'.</span> |
| 2772 | + df = (df / df.iloc[<span class="hljs-number">0</span>]) * <span class="hljs-number">100</span> <span class="hljs-comment"># Calculates percentages relative to day 1.</span> |
| 2773 | + df = df.join(covid) <span class="hljs-comment"># Adds column with covid cases.</span> |
| 2774 | + <span class="hljs-keyword">return</span> df.sort_values(df.index[<span class="hljs-number">-1</span>], axis=<span class="hljs-number">1</span>) <span class="hljs-comment"># Sorts columns by last day's value.</span> |
2775 | 2775 |
|
2776 | 2776 | <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">display_data</span><span class="hljs-params">(df)</span>:</span>
|
2777 |
| - df.columns = [<span class="hljs-string">'Total Cases'</span>, <span class="hljs-string">'Bitcoin'</span>, <span class="hljs-string">'Gold'</span>, <span class="hljs-string">'Dow Jones'</span>] |
2778 | 2777 | figure = go.Figure()
|
2779 |
| - <span class="hljs-keyword">for</span> col_name <span class="hljs-keyword">in</span> df: |
| 2778 | + <span class="hljs-keyword">for</span> col_name <span class="hljs-keyword">in</span> reversed(df.columns): |
2780 | 2779 | yaxis = <span class="hljs-string">'y1'</span> <span class="hljs-keyword">if</span> col_name == <span class="hljs-string">'Total Cases'</span> <span class="hljs-keyword">else</span> <span class="hljs-string">'y2'</span>
|
2781 | 2780 | trace = go.Scatter(x=df.index, y=df[col_name], name=col_name, yaxis=yaxis)
|
2782 | 2781 | figure.add_trace(trace)
|
|
2870 | 2869 |
|
2871 | 2870 |
|
2872 | 2871 | <footer>
|
2873 |
| - <aside>December 17, 2021</aside> |
| 2872 | + <aside>December 21, 2021</aside> |
2874 | 2873 | <a href="https://gto76.github.io" rel="author">Jure Šorn</a>
|
2875 | 2874 | </footer>
|
2876 | 2875 |
|
|
0 commit comments