Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0db0c8a

Browse files
committed
Pandas and Plotly
1 parent 3badfd5 commit 0db0c8a

File tree

3 files changed

+54
-52
lines changed

3 files changed

+54
-52
lines changed

README.md

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3123,14 +3123,13 @@ Name: a, dtype: int64
31233123
>>> sr = Series([1, 2], index=['x', 'y'])
31243124
x 1
31253125
y 2
3126-
dtype: int64
31273126
```
31283127

31293128
```text
31303129
+-------------+-------------+-------------+---------------+
31313130
| | 'sum' | ['sum'] | {'s': 'sum'} |
31323131
+-------------+-------------+-------------+---------------+
3133-
| sr.apply(…) | 3 | sum 3 | s 3 |
3132+
| sr.apply(…) | 3 | sum 3 | s 3 |
31343133
| sr.agg(…) | | | |
31353134
+-------------+-------------+-------------+---------------+
31363135
```
@@ -3144,6 +3143,7 @@ dtype: int64
31443143
| sr.trans(…) | y 2 | y 2 | y 2 |
31453144
+-------------+-------------+-------------+---------------+
31463145
```
3146+
* **Last result has a hierarchical index. `'<Sr>[<key_1>, <key_2>]'` returns the value.**
31473147

31483148
### DataFrame
31493149
**Table with labeled rows and columns.**
@@ -3358,12 +3358,12 @@ covid = pd.read_csv('https://covid.ourworldindata.org/data/owid-covid-data.csv',
33583358
continents = pd.read_csv('https://datahub.io/JohnSnowLabs/country-and-continent-codes-' + \
33593359
'list/r/country-and-continent-codes-list-csv.csv',
33603360
usecols=['Three_Letter_Country_Code', 'Continent_Name'])
3361-
merged = pd.merge(covid, continents, left_on='iso_code', right_on='Three_Letter_Country_Code')
3362-
summed = merged.groupby(['Continent_Name', 'date']).sum().reset_index()
3363-
summed['Total Deaths per Million'] = summed.total_deaths * 1e6 / summed.population
3364-
summed = summed[('2020-03-14' < summed.date) & (summed.date < '2020-06-25')]
3365-
summed = summed.rename({'date': 'Date', 'Continent_Name': 'Continent'}, axis='columns')
3366-
plotly.express.line(summed, x='Date', y='Total Deaths per Million', color='Continent').show()
3361+
df = pd.merge(covid, continents, left_on='iso_code', right_on='Three_Letter_Country_Code')
3362+
df = df.groupby(['Continent_Name', 'date']).sum().reset_index()
3363+
df['Total Deaths per Million'] = df.total_deaths * 1e6 / df.population
3364+
df = df[('2020-03-14' < df.date) & (df.date < '2020-06-25')]
3365+
df = df.rename({'date': 'Date', 'Continent_Name': 'Continent'}, axis='columns')
3366+
plotly.express.line(df, x='Date', y='Total Deaths per Million', color='Continent').show()
33673367
```
33683368

33693369
### Confirmed Covid Cases, Dow Jones, Gold, and Bitcoin Price
@@ -3379,31 +3379,31 @@ def main():
33793379
display_data(wrangle_data(*scrape_data()))
33803380

33813381
def scrape_data():
3382-
def scrape_yah(id_):
3382+
def scrape_yahoo(id_):
33833383
BASE_URL = 'https://query1.finance.yahoo.com/v7/finance/download/'
33843384
now = int(datetime.datetime.now().timestamp())
33853385
url = f'{BASE_URL}{id_}?period1=1579651200&period2={now}&interval=1d&events=history'
33863386
return pandas.read_csv(url, usecols=['Date', 'Close']).set_index('Date').Close
33873387
covid = pd.read_csv('https://covid.ourworldindata.org/data/owid-covid-data.csv',
33883388
usecols=['date', 'total_cases'])
33893389
covid = covid.groupby('date').sum()
3390-
dow_jones, gold, bitcoin = scrape_yah('^DJI'), scrape_yah('GC=F'), scrape_yah('BTC-USD')
3391-
dow_jones.name, gold.name, bitcoin.name = 'Dow Jones', 'Gold', 'Bitcoin'
3392-
return covid, dow_jones, gold, bitcoin
3393-
3394-
def wrangle_data(covid, dow_jones, gold, bitcoin):
3395-
out = pandas.concat([covid, dow_jones, gold, bitcoin], axis=1)
3396-
out = out.loc['2020-02-23':].iloc[:-2]
3397-
out = out.interpolate()
3398-
out.iloc[:, 1:] = out.rolling(10, min_periods=1, center=True).mean().iloc[:, 1:]
3399-
out.iloc[:, 1:] = out.iloc[:, 1:] / out.iloc[0, 1:] * 100
3400-
return out
3401-
3402-
def display_data(out):
3390+
dow, gold, bitcoin = [scrape_yahoo(id_) for id_ in ('^DJI', 'GC=F', 'BTC-USD')]
3391+
dow.name, gold.name, bitcoin.name = 'Dow Jones', 'Gold', 'Bitcoin'
3392+
return covid, dow, gold, bitcoin
3393+
3394+
def wrangle_data(covid, dow, gold, bitcoin):
3395+
df = pandas.concat([covid, dow, gold, bitcoin], axis=1)
3396+
df = df.loc['2020-02-23':].iloc[:-2]
3397+
df = df.interpolate()
3398+
df.iloc[:, 1:] = df.rolling(10, min_periods=1, center=True).mean().iloc[:, 1:]
3399+
df.iloc[:, 1:] = df.iloc[:, 1:] / df.iloc[0, 1:] * 100
3400+
return df
3401+
3402+
def display_data(df):
34033403
def get_trace(col_name):
3404-
return go.Scatter(x=out.index, y=out[col_name], name=col_name, yaxis='y2')
3405-
traces = [get_trace(col_name) for col_name in out.columns[1:]]
3406-
traces.append(go.Scatter(x=out.index, y=out.total_cases, name='Total Cases', yaxis='y1'))
3404+
return go.Scatter(x=df.index, y=df[col_name], name=col_name, yaxis='y2')
3405+
traces = [get_trace(col_name) for col_name in df.columns[1:]]
3406+
traces.append(go.Scatter(x=df.index, y=df.total_cases, name='Total Cases', yaxis='y1'))
34073407
figure = go.Figure()
34083408
figure.add_traces(traces)
34093409
figure.update_layout(

index.html

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2660,12 +2660,11 @@
26602660
<pre><code class="python language-python hljs"><span class="hljs-meta">&gt;&gt;&gt; </span>sr = Series([<span class="hljs-number">1</span>, <span class="hljs-number">2</span>], index=[<span class="hljs-string">'x'</span>, <span class="hljs-string">'y'</span>])
26612661
x <span class="hljs-number">1</span>
26622662
y <span class="hljs-number">2</span>
2663-
dtype: int64
26642663
</code></pre>
26652664
<pre><code class="python hljs">┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓
26662665
┃ │ <span class="hljs-string">'sum'</span> │ [<span class="hljs-string">'sum'</span>] │ {<span class="hljs-string">'s'</span>: <span class="hljs-string">'sum'</span>} ┃
26672666
┠─────────────┼─────────────┼─────────────┼───────────────┨
2668-
┃ sr.apply(…) │ <span class="hljs-number">3</span> │ sum <span class="hljs-number">3</span> s <span class="hljs-number">3</span>
2667+
┃ sr.apply(…) │ <span class="hljs-number">3</span> │ sum <span class="hljs-number">3</span> │ s <span class="hljs-number">3</span>
26692668
┃ sr.agg(…) │ │ │ ┃
26702669
┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛
26712670
</code></pre>
@@ -2677,6 +2676,9 @@
26772676
┃ sr.trans(…) │ y <span class="hljs-number">2</span> │ y <span class="hljs-number">2</span> │ y <span class="hljs-number">2</span>
26782677
┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛
26792678
</code></pre>
2679+
<ul>
2680+
<li><strong>Last result has a hierarchical index. <code class="python hljs"><span class="hljs-string">'&lt;Sr&gt;[&lt;key_1&gt;, &lt;key_2&gt;]'</span></code> returns the value.</strong></li>
2681+
</ul>
26802682
<div><h3 id="dataframe">DataFrame</h3><p><strong>Table with labeled rows and columns.</strong></p><pre><code class="python language-python hljs"><span class="hljs-meta">&gt;&gt;&gt; </span>DataFrame([[<span class="hljs-number">1</span>, <span class="hljs-number">2</span>], [<span class="hljs-number">3</span>, <span class="hljs-number">4</span>]], index=[<span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>], columns=[<span class="hljs-string">'x'</span>, <span class="hljs-string">'y'</span>])
26812683
x y
26822684
a <span class="hljs-number">1</span> <span class="hljs-number">2</span>
@@ -2839,12 +2841,12 @@
28392841
continents = pd.read_csv(<span class="hljs-string">'https://datahub.io/JohnSnowLabs/country-and-continent-codes-'</span> + \
28402842
<span class="hljs-string">'list/r/country-and-continent-codes-list-csv.csv'</span>,
28412843
usecols=[<span class="hljs-string">'Three_Letter_Country_Code'</span>, <span class="hljs-string">'Continent_Name'</span>])
2842-
merged = pd.merge(covid, continents, left_on=<span class="hljs-string">'iso_code'</span>, right_on=<span class="hljs-string">'Three_Letter_Country_Code'</span>)
2843-
summed = merged.groupby([<span class="hljs-string">'Continent_Name'</span>, <span class="hljs-string">'date'</span>]).sum().reset_index()
2844-
summed[<span class="hljs-string">'Total Deaths per Million'</span>] = summed.total_deaths * <span class="hljs-number">1e6</span> / summed.population
2845-
summed = summed[(<span class="hljs-string">'2020-03-14'</span> &lt; summed.date) &amp; (summed.date &lt; <span class="hljs-string">'2020-06-25'</span>)]
2846-
summed = summed.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>)
2847-
plotly.express.line(summed, 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()
2844+
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>)
2845+
df = df.groupby([<span class="hljs-string">'Continent_Name'</span>, <span class="hljs-string">'date'</span>]).sum().reset_index()
2846+
df[<span class="hljs-string">'Total Deaths per Million'</span>] = df.total_deaths * <span class="hljs-number">1e6</span> / df.population
2847+
df = df[(<span class="hljs-string">'2020-03-14'</span> &lt; df.date) &amp; (df.date &lt; <span class="hljs-string">'2020-06-25'</span>)]
2848+
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>)
2849+
plotly.express.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()
28482850
</code></pre></div></div>
28492851

28502852

@@ -2857,31 +2859,31 @@
28572859
display_data(wrangle_data(*scrape_data()))
28582860

28592861
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">scrape_data</span><span class="hljs-params">()</span>:</span>
2860-
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">scrape_yah</span><span class="hljs-params">(id_)</span>:</span>
2862+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">scrape_yahoo</span><span class="hljs-params">(id_)</span>:</span>
28612863
BASE_URL = <span class="hljs-string">'https://query1.finance.yahoo.com/v7/finance/download/'</span>
28622864
now = int(datetime.datetime.now().timestamp())
28632865
url = <span class="hljs-string">f'<span class="hljs-subst">{BASE_URL}</span><span class="hljs-subst">{id_}</span>?period1=1579651200&amp;period2=<span class="hljs-subst">{now}</span>&amp;interval=1d&amp;events=history'</span>
28642866
<span class="hljs-keyword">return</span> pandas.read_csv(url, usecols=[<span class="hljs-string">'Date'</span>, <span class="hljs-string">'Close'</span>]).set_index(<span class="hljs-string">'Date'</span>).Close
28652867
covid = pd.read_csv(<span class="hljs-string">'https://covid.ourworldindata.org/data/owid-covid-data.csv'</span>,
28662868
usecols=[<span class="hljs-string">'date'</span>, <span class="hljs-string">'total_cases'</span>])
28672869
covid = covid.groupby(<span class="hljs-string">'date'</span>).sum()
2868-
dow_jones, gold, bitcoin = scrape_yah(<span class="hljs-string">'^DJI'</span>), scrape_yah(<span class="hljs-string">'GC=F'</span>), scrape_yah(<span class="hljs-string">'BTC-USD'</span>)
2869-
dow_jones.name, gold.name, bitcoin.name = <span class="hljs-string">'Dow Jones'</span>, <span class="hljs-string">'Gold'</span>, <span class="hljs-string">'Bitcoin'</span>
2870-
<span class="hljs-keyword">return</span> covid, dow_jones, gold, bitcoin
2871-
2872-
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">wrangle_data</span><span class="hljs-params">(covid, dow_jones, gold, bitcoin)</span>:</span>
2873-
out = pandas.concat([covid, dow_jones, gold, bitcoin], axis=<span class="hljs-number">1</span>)
2874-
out = out.loc[<span class="hljs-string">'2020-02-23'</span>:].iloc[:<span class="hljs-number">-2</span>]
2875-
out = out.interpolate()
2876-
out.iloc[:, <span class="hljs-number">1</span>:] = out.rolling(<span class="hljs-number">10</span>, min_periods=<span class="hljs-number">1</span>, center=<span class="hljs-keyword">True</span>).mean().iloc[:, <span class="hljs-number">1</span>:]
2877-
out.iloc[:, <span class="hljs-number">1</span>:] = out.iloc[:, <span class="hljs-number">1</span>:] / out.iloc[<span class="hljs-number">0</span>, <span class="hljs-number">1</span>:] * <span class="hljs-number">100</span>
2878-
<span class="hljs-keyword">return</span> out
2879-
2880-
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">display_data</span><span class="hljs-params">(out)</span>:</span>
2870+
dow, gold, bitcoin = [scrape_yahoo(id_) <span class="hljs-keyword">for</span> id_ <span class="hljs-keyword">in</span> (<span class="hljs-string">'^DJI'</span>, <span class="hljs-string">'GC=F'</span>, <span class="hljs-string">'BTC-USD'</span>)]
2871+
dow.name, gold.name, bitcoin.name = <span class="hljs-string">'Dow Jones'</span>, <span class="hljs-string">'Gold'</span>, <span class="hljs-string">'Bitcoin'</span>
2872+
<span class="hljs-keyword">return</span> covid, dow, gold, bitcoin
2873+
2874+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">wrangle_data</span><span class="hljs-params">(covid, dow, gold, bitcoin)</span>:</span>
2875+
df = pandas.concat([covid, dow, gold, bitcoin], axis=<span class="hljs-number">1</span>)
2876+
df = df.loc[<span class="hljs-string">'2020-02-23'</span>:].iloc[:<span class="hljs-number">-2</span>]
2877+
df = df.interpolate()
2878+
df.iloc[:, <span class="hljs-number">1</span>:] = df.rolling(<span class="hljs-number">10</span>, min_periods=<span class="hljs-number">1</span>, center=<span class="hljs-keyword">True</span>).mean().iloc[:, <span class="hljs-number">1</span>:]
2879+
df.iloc[:, <span class="hljs-number">1</span>:] = df.iloc[:, <span class="hljs-number">1</span>:] / df.iloc[<span class="hljs-number">0</span>, <span class="hljs-number">1</span>:] * <span class="hljs-number">100</span>
2880+
<span class="hljs-keyword">return</span> df
2881+
2882+
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">display_data</span><span class="hljs-params">(df)</span>:</span>
28812883
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_trace</span><span class="hljs-params">(col_name)</span>:</span>
2882-
<span class="hljs-keyword">return</span> go.Scatter(x=out.index, y=out[col_name], name=col_name, yaxis=<span class="hljs-string">'y2'</span>)
2883-
traces = [get_trace(col_name) <span class="hljs-keyword">for</span> col_name <span class="hljs-keyword">in</span> out.columns[<span class="hljs-number">1</span>:]]
2884-
traces.append(go.Scatter(x=out.index, y=out.total_cases, name=<span class="hljs-string">'Total Cases'</span>, yaxis=<span class="hljs-string">'y1'</span>))
2884+
<span class="hljs-keyword">return</span> go.Scatter(x=df.index, y=df[col_name], name=col_name, yaxis=<span class="hljs-string">'y2'</span>)
2885+
traces = [get_trace(col_name) <span class="hljs-keyword">for</span> col_name <span class="hljs-keyword">in</span> df.columns[<span class="hljs-number">1</span>:]]
2886+
traces.append(go.Scatter(x=df.index, y=df.total_cases, name=<span class="hljs-string">'Total Cases'</span>, yaxis=<span class="hljs-string">'y1'</span>))
28852887
figure = go.Figure()
28862888
figure.add_traces(traces)
28872889
figure.update_layout(

parse.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -275,13 +275,13 @@ const DIAGRAM_12_B =
275275
'┗━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━┷━━━━━━━━━━━━━┛\n';
276276

277277
const DIAGRAM_13_A =
278-
'| sr.apply(…) | 3 | sum 3 | s 3 |';
278+
'| sr.apply(…) | 3 | sum 3 | s 3 |';
279279

280280
const DIAGRAM_13_B =
281281
"┏━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━┯━━━━━━━━━━━━━━━┓\n" +
282282
"┃ │ 'sum' │ ['sum'] │ {'s': 'sum'} ┃\n" +
283283
"┠─────────────┼─────────────┼─────────────┼───────────────┨\n" +
284-
"┃ sr.apply(…) │ 3 │ sum 3 │ s 3 ┃\n" +
284+
"┃ sr.apply(…) │ 3 │ sum 3 │ s 3 ┃\n" +
285285
"┃ sr.agg(…) │ │ │ ┃\n" +
286286
"┗━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━┷━━━━━━━━━━━━━━━┛\n";
287287

0 commit comments

Comments
 (0)