j1-template 2022.5.0.rc1 → 2022.5.0.rc4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/assets/data/banner.html +24 -1
- data/assets/themes/j1/adapter/js/masterslider.js +22 -5
- data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +56 -0
- data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +1 -1
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/Gemfile +270 -270
- data/lib/starter_web/_config.yml +19 -9
- data/lib/starter_web/_data/blocks/banner.yml +17 -0
- data/lib/starter_web/_data/modules/defaults/masterslider.yml +1 -1
- data/lib/starter_web/_data/modules/justifiedGallery.yml +82 -0
- data/lib/starter_web/_data/modules/masterslider.yml +5 -9
- data/lib/starter_web/_data/modules/navigator_menu.yml +208 -168
- data/lib/starter_web/_includes/attributes.asciidoc +18 -14
- data/lib/starter_web/_includes/tables/template_variables.asciidoc +1 -1
- data/lib/starter_web/_plugins/asciidoctor-extensions/lightbox-block.rb +4 -4
- data/lib/starter_web/assets/images/pages/features/blog-post-navigator-1280x1000.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1280x800.png +0 -0
- data/lib/starter_web/assets/images/pages/features/clipboard-1280x600.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/comments-1280x600.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/cookie-consent-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/desktop-web-navigation-1280x1000.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/example-content-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/example-content-present-videos-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/fab-1280x500.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/full-text-search-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.png +0 -0
- data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.png +0 -0
- data/lib/starter_web/assets/images/pages/features/intro-panel-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/master-header-1280x600.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.png +0 -0
- data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.png +0 -0
- data/lib/starter_web/assets/images/pages/features/nav-module-1280x300.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/nbi-barchart-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/teaser-banner-1280x600.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/translator-1280x800.jpg +0 -0
- data/lib/starter_web/assets/images/sticker/600x600/sticker-new-version.png +0 -0
- data/lib/starter_web/assets/images/sticker/scalable/readme +0 -0
- data/lib/starter_web/package.json +6 -6
- data/lib/starter_web/pages/public/_jupyter/docs/_includes/attributes.asciidoc +67 -0
- data/lib/starter_web/pages/public/_jupyter/docs/_includes/documents/j1_docs_example_static.asciidoc +232 -0
- data/lib/starter_web/pages/public/_jupyter/docs/binderhub.adoc +631 -0
- data/lib/starter_web/pages/public/_jupyter/docs/j1-nbinteract.adoc +638 -0
- data/lib/starter_web/pages/public/_jupyter/docs/jupyterhub.adoc +248 -0
- data/lib/starter_web/pages/public/_jupyter/docs/nbinteract-widget-manual.adoc +928 -0
- data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-circular-times-table.adoc +139 -0
- data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-common-used-widgets.adoc +229 -0
- data/lib/starter_web/pages/public/_jupyter/examples/distributed/j1-odes-in-python.adoc +112 -0
- data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-altair/j1-altair-visualisations.adoc +142 -0
- data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-bokeh/j1-bokeh-visualisations.adoc +171 -0
- data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-bokeh/j1-bqplot-eamples.adoc +111 -0
- data/lib/starter_web/pages/public/_jupyter/examples/localized/j1-plotly/j1-plotly-visualisations.adoc +94 -0
- data/lib/starter_web/pages/public/_jupyter/examples/localized/j1_climate-change-forecast.adoc +106 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_altair_interactive-checkpoint.ipynb +16260 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_bgplot_line_plot-checkpoint.ipynb +247 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-Copy1-checkpoint.ipynb +12382 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-checkpoint.ipynb +12387 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_circular_times_table-short-checkpoint.ipynb +12170 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_climate_change_forecast-checkpoint.ipynb +1058 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_docs_example_dynamic-checkpoint.ipynb +14478 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_interactive_widgets-Copy1-checkpoint.ipynb +379 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_interactive_widgets-checkpoint.ipynb +442 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets-checkpoint.ipynb +523 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets.line_charts-checkpoint.ipynb +84 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets.questions-checkpoint.ipynb +194 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_chart-checkpoint.ipynb +89 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts-Copy1-checkpoint.ipynb +164 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts-checkpoint.ipynb +173 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_bar_charts.1-checkpoint.ipynb +256 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_barcharts-checkpoint.ipynb +126 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_hist_chart-checkpoint.ipynb +87 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_line_chart-checkpoint.ipynb +90 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_line_charts-checkpoint.ipynb +87 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_question_multiple_choice-checkpoint.ipynb +64 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_question_short_answer-checkpoint.ipynb +122 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_questions-checkpoint.ipynb +181 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_chart-checkpoint.ipynb +89 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_charts-checkpoint.ipynb +175 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_nbi_widgets_scatter_drag_chart-checkpoint.ipynb +87 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_ode_selected-checkpoint.ipynb +14478 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/.ipynb_checkpoints/j1_odes_in_python-checkpoint.ipynb +15227 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/factor_by_factor.mp4 +0 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_circular_times_table.ipynb +12382 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_climate_change_forecast.ipynb +1058 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_docs_example_dynamic.ipynb +14478 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_interactive_widgets.ipynb +442 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets.ipynb +523 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_bar_chart.ipynb +89 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_hist_chart.ipynb +87 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_line_chart.ipynb +90 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_question_multiple_choice.ipynb +64 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_question_short_answer.ipynb +122 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_scatter_chart.ipynb +89 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_nbi_widgets_scatter_drag_chart.ipynb +87 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/j1_odes_in_python.ipynb +15227 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/line_by_line.mp4 +0 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1/point_by_point.mp4 +0 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/.ipynb_checkpoints/j1_altair_interactive-checkpoint.ipynb +16296 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/.ipynb_checkpoints/j1_altair_non_interactive-checkpoint.ipynb +15385 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/j1_altair_interactive.ipynb +16296 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-altair-tutorial/j1_altair_non_interactive.ipynb +15385 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/00 - Introduction and Setup-checkpoint.ipynb +717 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/01 - Basic Plotting-checkpoint.ipynb +1381 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/02 - Styling and Theming-checkpoint.ipynb +1440 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/03 - Data Sources and Transformations-checkpoint.ipynb +927 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/04 - Adding Annotations-checkpoint.ipynb +1105 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/05 - Presentation Layouts-checkpoint.ipynb +578 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/06 - Linking and Interactions-checkpoint.ipynb +1196 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/07 - Bar and Categorical Data Plots-checkpoint.ipynb +1681 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/08 - Graph and Network Plots-checkpoint.ipynb +680 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/09 - Geographic Plots-checkpoint.ipynb +693 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/10 - Exporting and Embedding-checkpoint.ipynb +751 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/11 - Running Bokeh Applications-checkpoint.ipynb +770 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/bokeh_tut_00_introduction_and_setup-checkpoint.ipynb +666 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_01_basic_plotting-checkpoint.ipynb +1365 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_02_styling_and_theming-checkpoint.ipynb +1405 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_03_data_sources_and_transformations-checkpoint.ipynb +856 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_04_adding_annotations-checkpoint.ipynb +1167 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_05_presentation_layouts-checkpoint.ipynb +601 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_06_linking_and_interactions-checkpoint.ipynb +1356 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_07_bar_and_categorical_data_plots-checkpoint.ipynb +1742 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_08_graph_and_network_plots-checkpoint.ipynb +625 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_09_geographic_plots-checkpoint.ipynb +685 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding-checkpoint.ipynb +726 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding-checkpoint.org +726 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_10_exporting_and_embedding.new-checkpoint.ipynb +560 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/.ipynb_checkpoints/j1_bokeh_11_running_bokeh_applications-checkpoint.ipynb +716 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_01_basic_plotting.ipynb +1365 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_02_styling_and_theming.ipynb +1405 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_03_data_sources_and_transformations.ipynb +856 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_04_adding_annotations.ipynb +1167 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_05_presentation_layouts.ipynb +601 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_06_linking_and_interactions.ipynb +1356 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_07_bar_and_categorical_data_plots.ipynb +1742 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_08_graph_and_network_plots.ipynb +625 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bokeh-tutorial/j1_bokeh_09_geographic_plots.ipynb +685 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/.ipynb_checkpoints/j1_mathplot_vs_bqplot-checkpoint.ipynb +336 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/advanced/Feature_Vector_Distribution-Iris-Digits.ipynb +433 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_bgplot_line_plot.ipynb +244 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_circular_times_table-short.ipynb +12170 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/j1-bqplot/j1_mathplot_vs_bqplot.ipynb +336 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/.ipynb_checkpoints/Index-checkpoint.ipynb +163 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/.ipynb_checkpoints/Tutorials-checkpoint.ipynb +51 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Advanced Plotting.ipynb +289 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Animations.ipynb +266 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Axis Properties.ipynb +396 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Advanced Plotting/Plotting Dates.ipynb +318 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Equity Index Performance/Time Series.ipynb +158 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Equity Index Performance/spx_prices.csv +6799 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Feature_Vector_Distribution-Iris-Digits.ipynb +470 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Index.ipynb +49 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Logs Analytics/Logs Dashboard.ipynb +378 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Mobile Patent Suits.ipynb +123 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Neural Network.ipynb +177 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Outlier Detection.ipynb +311 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/Bubble Chart.ipynb +255 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/Choropleth.ipynb +275 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/nations.json +1 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Applications/Wealth Of Nations/world_map_codes.csv +234 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Basic Plotting-checkpoint.ipynb +186 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Pyplot-checkpoint.ipynb +794 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/.ipynb_checkpoints/Untitled-checkpoint.ipynb +323 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/Basic Plotting.ipynb +261 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Basic Plotting/Pyplot.ipynb +1489 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Index.ipynb +163 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Interaction Layer.ipynb +966 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Mark Interactions.ipynb +476 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Interactions/Selectors.ipynb +427 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Introduction.ipynb +528 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Bars.ipynb +480 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Bins.ipynb +217 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Boxplot.ipynb +253 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Candles.ipynb +225 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/FlexLine.ipynb +123 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Graph.ipynb +357 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/GridHeatMap.ipynb +422 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/HeatMap.ipynb +157 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Hist.ipynb +176 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Image.ipynb +195 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Label.ipynb +189 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Lines.ipynb +565 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Map.ipynb +182 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Market Map.ipynb +315 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Pie.ipynb +465 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Object Model/Scatter.ipynb +835 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Bars.ipynb +362 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Bins.ipynb +252 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Boxplot.ipynb +273 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Candles.ipynb +242 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/GridHeatMap.ipynb +417 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/HeatMap.ipynb +155 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Hist.ipynb +238 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Image.ipynb +152 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Label.ipynb +206 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Lines.ipynb +474 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Map.ipynb +181 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Pie.ipynb +310 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Marks/Pyplot/Scatter.ipynb +702 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Scales/Color Scales.ipynb +495 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Feature_Vector_Distribution-Iris-Digits-checkpoint.ipynb +433 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Linking Plots With Widgets-checkpoint.ipynb +326 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Updating Plots-Copy1-checkpoint.ipynb +177 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/.ipynb_checkpoints/Updating Plots-checkpoint.ipynb +177 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Brush Interval Selector.ipynb +154 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Fast Interval Selector.ipynb +152 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Gaussian Density Widget.ipynb +128 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Gaussian Density.ipynb +113 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Linking Plots With Widgets.ipynb +326 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Object Model.ipynb +179 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Pyplot.ipynb +174 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials/Updating Plots.ipynb +177 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/Tutorials.ipynb +51 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/country_codes.csv +213 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/gdp_per_capita.csv +56 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/state_codes.csv +52 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/martin_renou_bqplot/data_files/trees.jpg +0 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_examples_central_limit_theorem-checkpoint.ipynb +247 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_examples_variability_of_the_sample_mean-checkpoint.ipynb +323 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_graphing-checkpoint.ipynb +387 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_interactive_questions-checkpoint.ipynb +185 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_recipes_layout-checkpoint.ipynb +384 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_tutorial_interact-checkpoint.ipynb +254 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/.ipynb_checkpoints/nbi_docs_tutorial_monty_hall-checkpoint.ipynb +732 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_central_limit_theorem.ipynb +247 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_correlation.ipynb +651 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_empirical_distributions.ipynb +773 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_linear_regression.ipynb +111 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_probability_distribution_plots.ipynb +199 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_sampling_from_a_population.ipynb +421 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_examples_variability_of_the_sample_mean.ipynb +323 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_graphing.ipynb +387 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_interactive_questions.ipynb +185 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_recipes_layout.ipynb +384 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_tutorial_interact.ipynb +254 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/nbi-docs/nbi_docs_tutorial_monty_hall.ipynb +732 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Advanced Plotting.html +373 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Animations.html +361 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Axis Properties.html +569 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bars.html +487 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Basic Plotting.html +341 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bins.html +259 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Boxplot.html +277 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Brush Interval Selector.html +182 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Bubble Chart.html +299 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Candles.html +252 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Choropleth.html +318 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Color Scales.html +514 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Fast Interval Selector.html +182 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Feature_Vector_Distribution-Iris-Digits.html +479 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/FlexLine.html +128 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Gaussian Density Widget.html +152 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Gaussian Density.html +137 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Graph.html +484 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/GridHeatMap.html +483 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/HeatMap.html +170 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Hist.html +349 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Image.html +177 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Index.html +29 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Interaction Layer.html +1372 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Introduction.html +749 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Label.html +268 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Lines.html +704 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Linking Plots With Widgets.html +389 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Logs Dashboard.html +455 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Map.html +229 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Mark Interactions.html +613 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Market Map.html +413 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Mobile Patent Suits.html +131 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Neural Network.html +190 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Object Model.html +193 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Outlier Detection.html +363 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Pie.html +367 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Plotting Dates.html +337 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Pyplot.html +196 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Scatter.html +948 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Selectors.html +489 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Time Series.html +173 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Tutorials.html +40 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/Updating Plots.html +228 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_altair_interactive.html +2216 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_altair_non_interactive.html +1170 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bgplot_line_plot.html +318 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_01_basic_plotting.html +1479 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_02_styling_and_theming.html +1524 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_03_data_sources_and_transformations.html +983 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_04_adding_annotations.html +1280 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_05_presentation_layouts.html +660 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_06_linking_and_interactions.html +1563 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_07_bar_and_categorical_data_plots.html +1888 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_08_graph_and_network_plots.html +689 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_bokeh_09_geographic_plots.html +767 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_circular_times_table-short.html +475 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_circular_times_table.html +747 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_climate_change_forecast.html +1250 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_docs_example_dynamic.html +186 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_interactive_widgets.html +512 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_mathplot_vs_bqplot.html +407 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets.html +629 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_bar_chart.html +95 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +93 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_line_chart.html +96 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +70 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +156 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_chart.html +95 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_drag_chart.html +93 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/j1_odes_in_python.html +955 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_central_limit_theorem.html +290 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_correlation.html +818 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_empirical_distributions.html +351 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_linear_regression.html +106 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_probability_distribution_plots.html +228 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_sampling_from_a_population.html +518 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_examples_variability_of_the_sample_mean.html +372 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_graphing.html +473 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_interactive_questions.html +242 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_recipes_layout.html +496 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_tutorial_interact.html +329 -0
- data/lib/starter_web/pages/public/_jupyter/notebooks/textbooks/nbi_docs_tutorial_monty_hall.html +866 -0
- data/lib/starter_web/pages/public/_jupyter/where_to_go.adoc +270 -0
- data/lib/starter_web/pages/public/features/general.adoc +74 -33
- data/lib/starter_web/pages/public/features/template.adoc +159 -68
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_interactive_widgets.html +512 -512
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets.html +629 -629
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_bar_chart.html +95 -95
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_hist_chart.html +93 -93
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_line_chart.html +96 -96
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_multiple_choice.html +70 -70
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_question_short_answer.html +156 -156
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_chart.html +95 -95
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_nbi_widgets_scatter_drag_chart.html +93 -93
- data/lib/starter_web/pages/public/jupyter/notebooks/textbooks/j1_odes_in_python.html +955 -955
- data/lib/starter_web/pages/public/learn/_roundtrip/100_present_images.adoc +313 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/100_present_videos.adoc +281 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/200_typography.adoc +253 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/300_icon_fonts.adoc +579 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/400_asciidoc_extensions.adoc +718 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/410_bs_modals_extentions.adoc +91 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/420_responsive_tables_extensions.adoc +420 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/500_themes.adoc +250 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/600_quicksearch.adoc +425 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/attributes.asciidoc +118 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/100_gistblock.asciidoc +28 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_info.asciidoc +14 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_left_warning.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_bottom_right_danger.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_central_success.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_full_height_left_info.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_full_height_right_success.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_table_bs_modal_examples.asciidoc +47 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_info.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_left_info.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/410_top_right_success.asciidoc +11 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/419_advanced_modals_demo.asciidoc +337 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/documents/tables/bs_modal_examples.asciidoc +47 -0
- data/lib/starter_web/pages/public/learn/_roundtrip/_includes/google-ad.js +130 -0
- data/lib/starter_web/pages/public/learn/roundtrip/100_present_images.adoc +6 -5
- data/lib/starter_web/pages/public/learn/roundtrip/300_icon_fonts.adoc +1 -2
- data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +4 -2
- data/lib/starter_web/pages/public/learn/roundtrip/500_themes.adoc +1 -1
- data/lib/starter_web/pages/public/learn/roundtrip/_includes/attributes.asciidoc +1 -1
- data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
- data/lib/starter_web/utilsrv/package.json +1 -1
- metadata +384 -17
- data/lib/starter_web/_includes/_attributes.asciidoc +0 -575
- data/lib/starter_web/assets/images/pages/features/bootswatch-themes-1080x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/comments-1080x600.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/cookie-consent-1080x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/example-content-present-videos-1080x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/fab-1080x500.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/full-text-search-1080x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/global-mobile-traffic-1920x1080.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/google-lighthouse-1080x300.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/intro-panel-1080x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/mobile-navigation-600x800.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/native-speakers-by-language.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/nav-module-1080x300.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/teaser-banner-1080x600.jpg +0 -0
- data/lib/starter_web/assets/images/pages/features/translator-1080x800.jpg +0 -0
@@ -0,0 +1,311 @@
|
|
1
|
+
{
|
2
|
+
"cells": [
|
3
|
+
{
|
4
|
+
"cell_type": "markdown",
|
5
|
+
"metadata": {},
|
6
|
+
"source": [
|
7
|
+
"### Outlier Detection with `bqplot`\n",
|
8
|
+
"---"
|
9
|
+
]
|
10
|
+
},
|
11
|
+
{
|
12
|
+
"cell_type": "markdown",
|
13
|
+
"metadata": {},
|
14
|
+
"source": [
|
15
|
+
"In this notebook, we create a class `DNA` that leverages the new bqplot canvas based [HeatMap](https://github.com/bloomberg/bqplot/blob/master/examples/Marks/HeatMap.ipynb) along with the ipywidgets Range Slider to help us detect and clean outliers in our data. The class accepts a DataFrame and allows you to visually and programmatically filter your outliers. The cleaned DataFrame can then be retrieved through a simple convenience function."
|
16
|
+
]
|
17
|
+
},
|
18
|
+
{
|
19
|
+
"cell_type": "code",
|
20
|
+
"execution_count": null,
|
21
|
+
"metadata": {},
|
22
|
+
"outputs": [],
|
23
|
+
"source": [
|
24
|
+
"from bqplot import (\n",
|
25
|
+
" DateScale,\n",
|
26
|
+
" ColorScale,\n",
|
27
|
+
" HeatMap,\n",
|
28
|
+
" Figure,\n",
|
29
|
+
" LinearScale,\n",
|
30
|
+
" OrdinalScale,\n",
|
31
|
+
" Axis,\n",
|
32
|
+
")\n",
|
33
|
+
"from scipy.stats import percentileofscore\n",
|
34
|
+
"from scipy.interpolate import interp1d\n",
|
35
|
+
"import bqplot.pyplot as plt\n",
|
36
|
+
"from traitlets import List, Float, observe\n",
|
37
|
+
"from ipywidgets import IntRangeSlider, Layout, VBox, HBox, jslink\n",
|
38
|
+
"from pandas import DatetimeIndex\n",
|
39
|
+
"import numpy as np\n",
|
40
|
+
"import pandas as pd\n",
|
41
|
+
"\n",
|
42
|
+
"\n",
|
43
|
+
"def quantile_space(x, q1=0.1, q2=0.9):\n",
|
44
|
+
" \"\"\"\n",
|
45
|
+
" Returns a function that squashes quantiles between q1 and q2\n",
|
46
|
+
" \"\"\"\n",
|
47
|
+
" q1_x, q2_x = np.percentile(x, [q1, q2])\n",
|
48
|
+
" qs = np.percentile(x, np.linspace(0, 100, 100))\n",
|
49
|
+
"\n",
|
50
|
+
" def get_quantile(t):\n",
|
51
|
+
" return np.interp(t, qs, np.linspace(0, 100, 100))\n",
|
52
|
+
"\n",
|
53
|
+
" def f(y):\n",
|
54
|
+
" return np.interp(get_quantile(y), [0, q1, q2, 100], [-1, 0, 0, 1])\n",
|
55
|
+
"\n",
|
56
|
+
" return f\n",
|
57
|
+
"\n",
|
58
|
+
"\n",
|
59
|
+
"class DNA(VBox):\n",
|
60
|
+
"\n",
|
61
|
+
" colors = List()\n",
|
62
|
+
" q1 = Float()\n",
|
63
|
+
" q2 = Float()\n",
|
64
|
+
"\n",
|
65
|
+
" def __init__(self, data, **kwargs):\n",
|
66
|
+
" self.data = data\n",
|
67
|
+
" date_x, date_y = False, False\n",
|
68
|
+
" transpose = kwargs.pop(\"transpose\", False)\n",
|
69
|
+
" if transpose is True:\n",
|
70
|
+
" if type(data.index) is DatetimeIndex:\n",
|
71
|
+
" self.x_scale = DateScale()\n",
|
72
|
+
" if type(data.columns) is DatetimeIndex:\n",
|
73
|
+
" self.y_scale = DateScale()\n",
|
74
|
+
" x, y = list(data.columns.values), data.index.values\n",
|
75
|
+
" else:\n",
|
76
|
+
" if type(data.index) is DatetimeIndex:\n",
|
77
|
+
" date_x = True\n",
|
78
|
+
" if type(data.columns) is DatetimeIndex:\n",
|
79
|
+
" date_y = True\n",
|
80
|
+
" x, y = data.index.values, list(data.columns.values)\n",
|
81
|
+
"\n",
|
82
|
+
" self.q1, self.q2 = kwargs.pop(\"quantiles\", (1, 99))\n",
|
83
|
+
"\n",
|
84
|
+
" self.quant_func = quantile_space(\n",
|
85
|
+
" self.data.values.flatten(), q1=self.q1, q2=self.q2\n",
|
86
|
+
" )\n",
|
87
|
+
" self.colors = kwargs.pop(\"colors\", [\"Red\", \"Black\", \"Green\"])\n",
|
88
|
+
"\n",
|
89
|
+
" self.x_scale = DateScale() if date_x is True else LinearScale()\n",
|
90
|
+
" self.y_scale = DateScale() if date_y is True else OrdinalScale(padding_y=0)\n",
|
91
|
+
" self.color_scale = ColorScale(colors=self.colors)\n",
|
92
|
+
" self.heat_map = HeatMap(\n",
|
93
|
+
" color=self.quant_func(self.data.T),\n",
|
94
|
+
" x=x,\n",
|
95
|
+
" y=y,\n",
|
96
|
+
" scales={\"x\": self.x_scale, \"y\": self.y_scale, \"color\": self.color_scale},\n",
|
97
|
+
" )\n",
|
98
|
+
" self.x_ax = Axis(scale=self.x_scale)\n",
|
99
|
+
" self.y_ax = Axis(scale=self.y_scale, orientation=\"vertical\")\n",
|
100
|
+
" show_axes = kwargs.pop(\"show_axes\", True)\n",
|
101
|
+
" self.axes = [self.x_ax, self.y_ax] if show_axes is True else []\n",
|
102
|
+
"\n",
|
103
|
+
" self.height = kwargs.pop(\"height\", \"800px\")\n",
|
104
|
+
" self.layout = kwargs.pop(\n",
|
105
|
+
" \"layout\", Layout(width=\"100%\", height=self.height, flex=\"1\")\n",
|
106
|
+
" )\n",
|
107
|
+
" self.fig_margin = kwargs.pop(\n",
|
108
|
+
" \"fig_margin\", {\"top\": 60, \"bottom\": 60, \"left\": 150, \"right\": 0}\n",
|
109
|
+
" )\n",
|
110
|
+
" kwargs.setdefault(\"padding_y\", 0.0)\n",
|
111
|
+
"\n",
|
112
|
+
" self.create_interaction(**kwargs)\n",
|
113
|
+
"\n",
|
114
|
+
" self.figure = Figure(\n",
|
115
|
+
" marks=[self.heat_map],\n",
|
116
|
+
" axes=self.axes,\n",
|
117
|
+
" fig_margin=self.fig_margin,\n",
|
118
|
+
" layout=self.layout,\n",
|
119
|
+
" min_aspect_ratio=0.0,\n",
|
120
|
+
" **kwargs\n",
|
121
|
+
" )\n",
|
122
|
+
"\n",
|
123
|
+
" super(VBox, self).__init__(\n",
|
124
|
+
" children=[self.range_slider, self.figure],\n",
|
125
|
+
" layout=Layout(align_items=\"center\", width=\"100%\", height=\"100%\"),\n",
|
126
|
+
" **kwargs\n",
|
127
|
+
" )\n",
|
128
|
+
"\n",
|
129
|
+
" def create_interaction(self, **kwargs):\n",
|
130
|
+
" self.range_slider = IntRangeSlider(\n",
|
131
|
+
" description=\"Filter Range\",\n",
|
132
|
+
" value=(self.q1, self.q2),\n",
|
133
|
+
" layout=Layout(width=\"100%\"),\n",
|
134
|
+
" )\n",
|
135
|
+
" self.range_slider.observe(self.slid_changed, \"value\")\n",
|
136
|
+
" self.observe(self.changed, [\"q1\", \"q2\"])\n",
|
137
|
+
"\n",
|
138
|
+
" def slid_changed(self, new):\n",
|
139
|
+
" self.q1 = self.range_slider.value[0]\n",
|
140
|
+
" self.q2 = self.range_slider.value[1]\n",
|
141
|
+
"\n",
|
142
|
+
" def changed(self, new):\n",
|
143
|
+
" self.range_slider.value = (self.q1, self.q2)\n",
|
144
|
+
"\n",
|
145
|
+
" self.quant_func = quantile_space(\n",
|
146
|
+
" self.data.values.flatten(), q1=self.q1, q2=self.q2\n",
|
147
|
+
" )\n",
|
148
|
+
" self.heat_map.color = self.quant_func(self.data.T)\n",
|
149
|
+
"\n",
|
150
|
+
" def get_filtered_df(self, fill_type=\"median\"):\n",
|
151
|
+
" q1_x, q2_x = np.percentile(self.data, [self.q1, self.q2])\n",
|
152
|
+
" if fill_type == \"median\":\n",
|
153
|
+
" return self.data[(self.data >= q1_x) & (self.data <= q2_x)].apply(\n",
|
154
|
+
" lambda x: x.fillna(x.median())\n",
|
155
|
+
" )\n",
|
156
|
+
" elif fill_type == \"mean\":\n",
|
157
|
+
" return self.data[(self.data >= q1_x) & (self.data <= q2_x)].apply(\n",
|
158
|
+
" lambda x: x.fillna(x.mean())\n",
|
159
|
+
" )\n",
|
160
|
+
" else:\n",
|
161
|
+
" raise ValueError(\"fill_type must be one of ('median', 'mean')\")"
|
162
|
+
]
|
163
|
+
},
|
164
|
+
{
|
165
|
+
"cell_type": "markdown",
|
166
|
+
"metadata": {},
|
167
|
+
"source": [
|
168
|
+
"We define the size of our matrix here. Larger matrices require a larger height."
|
169
|
+
]
|
170
|
+
},
|
171
|
+
{
|
172
|
+
"cell_type": "code",
|
173
|
+
"execution_count": null,
|
174
|
+
"metadata": {},
|
175
|
+
"outputs": [],
|
176
|
+
"source": [
|
177
|
+
"size = 100"
|
178
|
+
]
|
179
|
+
},
|
180
|
+
{
|
181
|
+
"cell_type": "code",
|
182
|
+
"execution_count": null,
|
183
|
+
"metadata": {},
|
184
|
+
"outputs": [],
|
185
|
+
"source": [
|
186
|
+
"def num_to_col_letters(num):\n",
|
187
|
+
" letters = \"\"\n",
|
188
|
+
" while num:\n",
|
189
|
+
" mod = (num - 1) % 26\n",
|
190
|
+
" letters += chr(mod + 65)\n",
|
191
|
+
" num = (num - 1) // 26\n",
|
192
|
+
" return \"\".join(reversed(letters))\n",
|
193
|
+
"\n",
|
194
|
+
"\n",
|
195
|
+
"letters = []\n",
|
196
|
+
"\n",
|
197
|
+
"for i in range(1, size + 1):\n",
|
198
|
+
" letters.append(num_to_col_letters(i))"
|
199
|
+
]
|
200
|
+
},
|
201
|
+
{
|
202
|
+
"cell_type": "code",
|
203
|
+
"execution_count": null,
|
204
|
+
"metadata": {},
|
205
|
+
"outputs": [],
|
206
|
+
"source": [
|
207
|
+
"data = pd.DataFrame(np.random.randn(size, size), columns=letters)"
|
208
|
+
]
|
209
|
+
},
|
210
|
+
{
|
211
|
+
"cell_type": "code",
|
212
|
+
"execution_count": null,
|
213
|
+
"metadata": {},
|
214
|
+
"outputs": [],
|
215
|
+
"source": [
|
216
|
+
"data_dna = DNA(\n",
|
217
|
+
" data, title=\"DNA of our Data\", height=\"1400px\", colors=[\"Red\", \"White\", \"Green\"]\n",
|
218
|
+
")\n",
|
219
|
+
"data_dna"
|
220
|
+
]
|
221
|
+
},
|
222
|
+
{
|
223
|
+
"cell_type": "markdown",
|
224
|
+
"metadata": {},
|
225
|
+
"source": [
|
226
|
+
"Instead of setting the quantiles by the sliders, we can also set them programmatically. Using a range of (5, 95) restricts the data considerably."
|
227
|
+
]
|
228
|
+
},
|
229
|
+
{
|
230
|
+
"cell_type": "code",
|
231
|
+
"execution_count": null,
|
232
|
+
"metadata": {},
|
233
|
+
"outputs": [],
|
234
|
+
"source": [
|
235
|
+
"data_dna.q1, data_dna.q2 = 5, 95"
|
236
|
+
]
|
237
|
+
},
|
238
|
+
{
|
239
|
+
"cell_type": "markdown",
|
240
|
+
"metadata": {},
|
241
|
+
"source": [
|
242
|
+
"Now, we can use the convenience function to extract a clean DataFrame."
|
243
|
+
]
|
244
|
+
},
|
245
|
+
{
|
246
|
+
"cell_type": "code",
|
247
|
+
"execution_count": null,
|
248
|
+
"metadata": {
|
249
|
+
"scrolled": true
|
250
|
+
},
|
251
|
+
"outputs": [],
|
252
|
+
"source": [
|
253
|
+
"data_clean = data_dna.get_filtered_df()"
|
254
|
+
]
|
255
|
+
},
|
256
|
+
{
|
257
|
+
"cell_type": "markdown",
|
258
|
+
"metadata": {},
|
259
|
+
"source": [
|
260
|
+
"The DNA fills outliers with the mean of the column. Alternately, we can fill the outliers by the mean."
|
261
|
+
]
|
262
|
+
},
|
263
|
+
{
|
264
|
+
"cell_type": "code",
|
265
|
+
"execution_count": null,
|
266
|
+
"metadata": {},
|
267
|
+
"outputs": [],
|
268
|
+
"source": [
|
269
|
+
"data_mean = data_dna.get_filtered_df(fill_type=\"mean\")"
|
270
|
+
]
|
271
|
+
},
|
272
|
+
{
|
273
|
+
"cell_type": "markdown",
|
274
|
+
"metadata": {},
|
275
|
+
"source": [
|
276
|
+
"We can also visualize the new DataFrame the same way to test how our outliers look now."
|
277
|
+
]
|
278
|
+
},
|
279
|
+
{
|
280
|
+
"cell_type": "code",
|
281
|
+
"execution_count": null,
|
282
|
+
"metadata": {},
|
283
|
+
"outputs": [],
|
284
|
+
"source": [
|
285
|
+
"DNA(data_clean, title=\"Cleaned Data\", height=\"1200px\", colors=[\"Red\", \"White\", \"Green\"])"
|
286
|
+
]
|
287
|
+
}
|
288
|
+
],
|
289
|
+
"metadata": {
|
290
|
+
"anaconda-cloud": {},
|
291
|
+
"kernelspec": {
|
292
|
+
"display_name": "Python 3",
|
293
|
+
"language": "python",
|
294
|
+
"name": "python3"
|
295
|
+
},
|
296
|
+
"language_info": {
|
297
|
+
"codemirror_mode": {
|
298
|
+
"name": "ipython",
|
299
|
+
"version": 3
|
300
|
+
},
|
301
|
+
"file_extension": ".py",
|
302
|
+
"mimetype": "text/x-python",
|
303
|
+
"name": "python",
|
304
|
+
"nbconvert_exporter": "python",
|
305
|
+
"pygments_lexer": "ipython3",
|
306
|
+
"version": "3.7.6"
|
307
|
+
}
|
308
|
+
},
|
309
|
+
"nbformat": 4,
|
310
|
+
"nbformat_minor": 2
|
311
|
+
}
|
@@ -0,0 +1,255 @@
|
|
1
|
+
{
|
2
|
+
"cells": [
|
3
|
+
{
|
4
|
+
"cell_type": "markdown",
|
5
|
+
"metadata": {},
|
6
|
+
"source": [
|
7
|
+
"This is a `bqplot` recreation of Mike Bostock's [Wealth of Nations](https://bost.ocks.org/mike/nations/). This was also done by [Gapminder](http://www.gapminder.org/world/#$majorMode=chart$is;shi=t;ly=2003;lb=f;il=t;fs=11;al=30;stl=t;st=t;nsl=t;se=t$wst;tts=C$ts;sp=5.59290322580644;ti=2013$zpv;v=0$inc_x;mmid=XCOORDS;iid=phAwcNAVuyj1jiMAkmq1iMg;by=ind$inc_y;mmid=YCOORDS;iid=phAwcNAVuyj2tPLxKvvnNPA;by=ind$inc_s;uniValue=8.21;iid=phAwcNAVuyj0XOoBL_n5tAQ;by=ind$inc_c;uniValue=255;gid=CATID0;by=grp$map_x;scale=log;dataMin=194;dataMax=96846$map_y;scale=lin;dataMin=23;dataMax=86$map_s;sma=49;smi=2.65$cd;bd=0$inds=;modified=60). It is originally based on a TED Talk by [Hans Rosling](http://www.ted.com/talks/hans_rosling_shows_the_best_stats_you_ve_ever_seen)."
|
8
|
+
]
|
9
|
+
},
|
10
|
+
{
|
11
|
+
"cell_type": "code",
|
12
|
+
"execution_count": null,
|
13
|
+
"metadata": {},
|
14
|
+
"outputs": [],
|
15
|
+
"source": [
|
16
|
+
"import numpy as np\n",
|
17
|
+
"import pandas as pd\n",
|
18
|
+
"\n",
|
19
|
+
"import ipywidgets as widgets\n",
|
20
|
+
"import bqplot as bq\n",
|
21
|
+
"import bqplot.pyplot as plt"
|
22
|
+
]
|
23
|
+
},
|
24
|
+
{
|
25
|
+
"cell_type": "code",
|
26
|
+
"execution_count": null,
|
27
|
+
"metadata": {},
|
28
|
+
"outputs": [],
|
29
|
+
"source": [
|
30
|
+
"initial_year = 1800"
|
31
|
+
]
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"cell_type": "code",
|
35
|
+
"execution_count": null,
|
36
|
+
"metadata": {
|
37
|
+
"scrolled": false
|
38
|
+
},
|
39
|
+
"outputs": [],
|
40
|
+
"source": [
|
41
|
+
"data = pd.read_json(\"nations.json\")"
|
42
|
+
]
|
43
|
+
},
|
44
|
+
{
|
45
|
+
"cell_type": "code",
|
46
|
+
"execution_count": null,
|
47
|
+
"metadata": {},
|
48
|
+
"outputs": [],
|
49
|
+
"source": [
|
50
|
+
"def clean_data(data):\n",
|
51
|
+
" for column in [\"income\", \"lifeExpectancy\", \"population\"]:\n",
|
52
|
+
" data = data.drop(data[data[column].apply(len) <= 4].index)\n",
|
53
|
+
" return data\n",
|
54
|
+
"\n",
|
55
|
+
"\n",
|
56
|
+
"def extrap_interp(data):\n",
|
57
|
+
" data = np.array(data)\n",
|
58
|
+
" x_range = np.arange(1800, 2009, 1.0)\n",
|
59
|
+
" y_range = np.interp(x_range, data[:, 0], data[:, 1])\n",
|
60
|
+
" return y_range\n",
|
61
|
+
"\n",
|
62
|
+
"\n",
|
63
|
+
"def extrap_data(data):\n",
|
64
|
+
" for column in [\"income\", \"lifeExpectancy\", \"population\"]:\n",
|
65
|
+
" data[column] = data[column].apply(extrap_interp)\n",
|
66
|
+
" return data"
|
67
|
+
]
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"cell_type": "code",
|
71
|
+
"execution_count": null,
|
72
|
+
"metadata": {},
|
73
|
+
"outputs": [],
|
74
|
+
"source": [
|
75
|
+
"data = clean_data(data)\n",
|
76
|
+
"data = extrap_data(data)"
|
77
|
+
]
|
78
|
+
},
|
79
|
+
{
|
80
|
+
"cell_type": "code",
|
81
|
+
"execution_count": null,
|
82
|
+
"metadata": {
|
83
|
+
"scrolled": true
|
84
|
+
},
|
85
|
+
"outputs": [],
|
86
|
+
"source": [
|
87
|
+
"income_min, income_max = np.min(data[\"income\"].apply(np.min)), np.max(\n",
|
88
|
+
" data[\"income\"].apply(np.max)\n",
|
89
|
+
")\n",
|
90
|
+
"life_exp_min, life_exp_max = np.min(data[\"lifeExpectancy\"].apply(np.min)), np.max(\n",
|
91
|
+
" data[\"lifeExpectancy\"].apply(np.max)\n",
|
92
|
+
")\n",
|
93
|
+
"pop_min, pop_max = np.min(data[\"population\"].apply(np.min)), np.max(\n",
|
94
|
+
" data[\"population\"].apply(np.max)\n",
|
95
|
+
")"
|
96
|
+
]
|
97
|
+
},
|
98
|
+
{
|
99
|
+
"cell_type": "code",
|
100
|
+
"execution_count": null,
|
101
|
+
"metadata": {},
|
102
|
+
"outputs": [],
|
103
|
+
"source": [
|
104
|
+
"def get_data(year):\n",
|
105
|
+
" year_index = year - 1800\n",
|
106
|
+
" income = data[\"income\"].apply(lambda x: x[year_index])\n",
|
107
|
+
" life_exp = data[\"lifeExpectancy\"].apply(lambda x: x[year_index])\n",
|
108
|
+
" pop = data[\"population\"].apply(lambda x: x[year_index])\n",
|
109
|
+
" return income, life_exp, pop"
|
110
|
+
]
|
111
|
+
},
|
112
|
+
{
|
113
|
+
"cell_type": "code",
|
114
|
+
"execution_count": null,
|
115
|
+
"metadata": {},
|
116
|
+
"outputs": [],
|
117
|
+
"source": [
|
118
|
+
"time_interval = 100\n",
|
119
|
+
"fig_layout = widgets.Layout(width=\"1000px\", height=\"700px\", overflow_x=\"hidden\")\n",
|
120
|
+
"fig = plt.figure(\n",
|
121
|
+
" layout=fig_layout,\n",
|
122
|
+
" fig_margin=dict(top=60, bottom=80, left=40, right=20),\n",
|
123
|
+
" title=\"Health and Wealth of Nations\",\n",
|
124
|
+
" animation_duration=time_interval,\n",
|
125
|
+
")\n",
|
126
|
+
"\n",
|
127
|
+
"plt.scales(\n",
|
128
|
+
" scales={\n",
|
129
|
+
" \"x\": bq.LogScale(min=min(200, income_min), max=income_max),\n",
|
130
|
+
" \"y\": bq.LinearScale(min=life_exp_min, max=life_exp_max),\n",
|
131
|
+
" \"color\": bq.OrdinalColorScale(\n",
|
132
|
+
" domain=data[\"region\"].unique().tolist(), colors=bq.CATEGORY10[:6]\n",
|
133
|
+
" ),\n",
|
134
|
+
" \"size\": bq.LinearScale(min=pop_min, max=pop_max),\n",
|
135
|
+
" }\n",
|
136
|
+
")\n",
|
137
|
+
"\n",
|
138
|
+
"# add custom x tick values\n",
|
139
|
+
"ticks = [2, 4, 6, 8, 10]\n",
|
140
|
+
"income_ticks = (\n",
|
141
|
+
" [t * 100 for t in ticks] + [t * 1000 for t in ticks] + [t * 10000 for t in ticks]\n",
|
142
|
+
")\n",
|
143
|
+
"\n",
|
144
|
+
"# custom axis options\n",
|
145
|
+
"axes_options = {\n",
|
146
|
+
" \"x\": dict(\n",
|
147
|
+
" label=\"Income per Capita\",\n",
|
148
|
+
" label_location=\"end\",\n",
|
149
|
+
" label_offset=\"-2ex\",\n",
|
150
|
+
" tick_format=\"~s\",\n",
|
151
|
+
" tick_values=income_ticks,\n",
|
152
|
+
" ),\n",
|
153
|
+
" \"y\": dict(\n",
|
154
|
+
" label=\"Life Expectancy\",\n",
|
155
|
+
" orientation=\"vertical\",\n",
|
156
|
+
" side=\"left\",\n",
|
157
|
+
" label_location=\"end\",\n",
|
158
|
+
" label_offset=\"-1em\",\n",
|
159
|
+
" ),\n",
|
160
|
+
" \"color\": dict(label=\"Region\"),\n",
|
161
|
+
"}\n",
|
162
|
+
"\n",
|
163
|
+
"tooltip = bq.Tooltip(\n",
|
164
|
+
" fields=[\"name\", \"x\", \"y\"],\n",
|
165
|
+
" labels=[\"Country Name\", \"Income per Capita\", \"Life Expectancy\"],\n",
|
166
|
+
")\n",
|
167
|
+
"\n",
|
168
|
+
"year_label = bq.Label(\n",
|
169
|
+
" x=[0.75],\n",
|
170
|
+
" y=[0.10],\n",
|
171
|
+
" default_size=46,\n",
|
172
|
+
" font_weight=\"bolder\",\n",
|
173
|
+
" colors=[\"orange\"],\n",
|
174
|
+
" text=[str(initial_year)],\n",
|
175
|
+
" enable_move=True,\n",
|
176
|
+
")\n",
|
177
|
+
"\n",
|
178
|
+
"# Start with the first year's data\n",
|
179
|
+
"cap_income, life_exp, pop = get_data(initial_year)\n",
|
180
|
+
"\n",
|
181
|
+
"wealth_scat = plt.scatter(\n",
|
182
|
+
" cap_income,\n",
|
183
|
+
" life_exp,\n",
|
184
|
+
" color=data[\"region\"],\n",
|
185
|
+
" size=pop,\n",
|
186
|
+
" names=data[\"name\"],\n",
|
187
|
+
" display_names=False,\n",
|
188
|
+
" default_size=20000,\n",
|
189
|
+
" tooltip=tooltip,\n",
|
190
|
+
" stroke=\"Black\",\n",
|
191
|
+
" axes_options=axes_options,\n",
|
192
|
+
" unhovered_style={\"opacity\": 0.5},\n",
|
193
|
+
")\n",
|
194
|
+
"nation_line = plt.plot(\n",
|
195
|
+
" data[\"income\"][0], data[\"lifeExpectancy\"][0], colors=[\"Gray\"], visible=False\n",
|
196
|
+
")\n",
|
197
|
+
"\n",
|
198
|
+
"# slider for the year\n",
|
199
|
+
"year_slider = widgets.IntSlider(\n",
|
200
|
+
" min=1800, max=2008, description=\"Year\", value=initial_year\n",
|
201
|
+
")\n",
|
202
|
+
"\n",
|
203
|
+
"# register callbacks\n",
|
204
|
+
"def hover_changed(change):\n",
|
205
|
+
" if change.new is not None:\n",
|
206
|
+
" nation_line.x = data[data[\"name\"] == wealth_scat.names[change.new]][\n",
|
207
|
+
" \"income\"\n",
|
208
|
+
" ].values[0]\n",
|
209
|
+
" nation_line.y = data[data[\"name\"] == wealth_scat.names[change.new]][\n",
|
210
|
+
" \"lifeExpectancy\"\n",
|
211
|
+
" ].values[0]\n",
|
212
|
+
" nation_line.visible = True\n",
|
213
|
+
" else:\n",
|
214
|
+
" nation_line.visible = False\n",
|
215
|
+
"\n",
|
216
|
+
"\n",
|
217
|
+
"wealth_scat.observe(hover_changed, \"hovered_point\")\n",
|
218
|
+
"\n",
|
219
|
+
"\n",
|
220
|
+
"def year_changed(change):\n",
|
221
|
+
" wealth_scat.x, wealth_scat.y, wealth_scat.size = get_data(year_slider.value)\n",
|
222
|
+
" year_label.text = [str(year_slider.value)]\n",
|
223
|
+
"\n",
|
224
|
+
"\n",
|
225
|
+
"year_slider.observe(year_changed, \"value\")\n",
|
226
|
+
"\n",
|
227
|
+
"play_button = widgets.Play(min=1800, max=2008, interval=time_interval)\n",
|
228
|
+
"widgets.jslink((play_button, \"value\"), (year_slider, \"value\"))\n",
|
229
|
+
"\n",
|
230
|
+
"widgets.VBox([widgets.HBox([play_button, year_slider]), fig])"
|
231
|
+
]
|
232
|
+
}
|
233
|
+
],
|
234
|
+
"metadata": {
|
235
|
+
"kernelspec": {
|
236
|
+
"display_name": "Python 3",
|
237
|
+
"language": "python",
|
238
|
+
"name": "python3"
|
239
|
+
},
|
240
|
+
"language_info": {
|
241
|
+
"codemirror_mode": {
|
242
|
+
"name": "ipython",
|
243
|
+
"version": 3
|
244
|
+
},
|
245
|
+
"file_extension": ".py",
|
246
|
+
"mimetype": "text/x-python",
|
247
|
+
"name": "python",
|
248
|
+
"nbconvert_exporter": "python",
|
249
|
+
"pygments_lexer": "ipython3",
|
250
|
+
"version": "3.8.2"
|
251
|
+
}
|
252
|
+
},
|
253
|
+
"nbformat": 4,
|
254
|
+
"nbformat_minor": 1
|
255
|
+
}
|