#!/usr/bin/env python # coding: utf-8 # # Fastpages Notebook Blog Post # > A demonstration of fastpages blog posts with Jupyter notebooks. # # - toc: true # - badges: true # - comments: true # # About # # This notebook is a demonstration of some of capabilities of `fastpages` with notebooks. # # # With `fastpages` you can save your jupyter notebooks into the `_notebooks` folder at the root of your repository, and they will be automatically be converted to Jekyll compliant blog posts! # ## Front Matter # # Front Matter is a markdown cell at the beginning of your notebook that allows you to inject metadata into your notebook. For example: # # - Setting `toc: true` will automatically generate a table of contents # - Setting `badges: true` will automatically include GitHub and Google Colab links to your notebook. # - Setting `comments: true` will enable commenting on your blog post, powered by [utterances](https://github.com/utterance/utterances). # # More details and options for front matter can be viewed on the notebook section of the [README](https://github.com/fastai/fastpages#Writing-Blog-Posts-With-Jupyter). # ## Markdown Shortcuts # put a `#hide` flag at the top of any cell you want to completely hide in the docs # put a `#collapse` flag at the top of any cell if you want to hide that cell by default, but stil have it be visible to the reader: # In[3]: #collapse import pandas as pd import altair as alt # put a `#collapse_show` flag at the top of any cell if you want to **show** that cell by default, but give the reader the option to hide it: # In[1]: #collapse_show cars = 'https://vega.github.io/vega-datasets/data/cars.json' movies = 'https://vega.github.io/vega-datasets/data/movies.json' sp500 = 'https://vega.github.io/vega-datasets/data/sp500.csv' stocks = 'https://vega.github.io/vega-datasets/data/stocks.csv' flights = 'https://vega.github.io/vega-datasets/data/flights-5k.json' # ## Interactive Charts With Altair # # Charts made with Altair remain interactive. Example charts taken from [this repo](https://github.com/uwdata/visualization-curriculum), specifically [this notebook](https://github.com/uwdata/visualization-curriculum/blob/master/altair_interaction.ipynb). # In[3]: # hide df = pd.read_json(movies) # load movies data genres = df['Major_Genre'].unique() # get unique field values genres = list(filter(lambda d: d is not None, genres)) # filter out None values genres.sort() # sort alphabetically # In[4]: #hide mpaa = ['G', 'PG', 'PG-13', 'R', 'NC-17', 'Not Rated'] # ### Example 1: DropDown # In[5]: # single-value selection over [Major_Genre, MPAA_Rating] pairs # use specific hard-wired values as the initial selected values selection = alt.selection_single( name='Select', fields=['Major_Genre', 'MPAA_Rating'], init={'Major_Genre': 'Drama', 'MPAA_Rating': 'R'}, bind={'Major_Genre': alt.binding_select(options=genres), 'MPAA_Rating': alt.binding_radio(options=mpaa)} ) # scatter plot, modify opacity based on selection alt.Chart(movies).mark_circle().add_selection( selection ).encode( x='Rotten_Tomatoes_Rating:Q', y='IMDB_Rating:Q', tooltip='Title:N', opacity=alt.condition(selection, alt.value(0.75), alt.value(0.05)) ) # ### Example 2: Tooltips # In[7]: alt.Chart(movies).mark_circle().add_selection( alt.selection_interval(bind='scales', encodings=['x']) ).encode( x='Rotten_Tomatoes_Rating:Q', y=alt.Y('IMDB_Rating:Q', axis=alt.Axis(minExtent=30)), # use min extent to stabilize axis title placement tooltip=['Title:N', 'Release_Date:N', 'IMDB_Rating:Q', 'Rotten_Tomatoes_Rating:Q'] ).properties( width=600, height=400 ) # ### Example 3: More Tooltips # In[8]: # select a point for which to provide details-on-demand label = alt.selection_single( encodings=['x'], # limit selection to x-axis value on='mouseover', # select on mouseover events nearest=True, # select data point nearest the cursor empty='none' # empty selection includes no data points ) # define our base line chart of stock prices base = alt.Chart().mark_line().encode( alt.X('date:T'), alt.Y('price:Q', scale=alt.Scale(type='log')), alt.Color('symbol:N') ) alt.layer( base, # base line chart # add a rule mark to serve as a guide line alt.Chart().mark_rule(color='#aaa').encode( x='date:T' ).transform_filter(label), # add circle marks for selected time points, hide unselected points base.mark_circle().encode( opacity=alt.condition(label, alt.value(1), alt.value(0)) ).add_selection(label), # add white stroked text to provide a legible background for labels base.mark_text(align='left', dx=5, dy=-5, stroke='white', strokeWidth=2).encode( text='price:Q' ).transform_filter(label), # add text labels for stock prices base.mark_text(align='left', dx=5, dy=-5).encode( text='price:Q' ).transform_filter(label), data=stocks ).properties( width=700, height=400 ) # ## Other Elements # ### Tweetcards # # Typing `> twitter: https://twitter.com/jakevdp/status/1204765621767901185?s=20` will render this: # # > twitter: https://twitter.com/jakevdp/status/1204765621767901185?s=20 # ### Youtube Videos # # Typing `> youtube: https://youtu.be/XfoYk_Z5AkI` will render this: # # # > youtube: https://youtu.be/XfoYk_Z5AkI # ### Boxes / Callouts # # Typing `> Warning: There will be no second warning!` will render this: # # # > Warning: There will be no second warning! # # # # Typing `> Important: Pay attention! It's important.` will render this: # # > Important: Pay attention! It's important. # # # # Typing `> Tip: This is my tip.` will render this: # # > Tip: This is my tip. # # # # Typing `> Note: Take note of this.` will render this: # # > Note: Take note of this. # # # # Typing `> Note: A doc link to [an example website: fast.ai](https://www.fast.ai/) should also work fine.` will render in the docs: # # > Note: A doc link to [an example website: fast.ai](https://www.fast.ai/) should also work fine. # In[ ]: