{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Dynamic Plots (work in progress)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Filter: Issue size\n", "* Filter: Language\n", "* Filter: Time" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import ipywidgets as widgets" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "dd = pd.read_csv('https://labs.onb.ac.at/gitlab/labs-team/raw-metadata/raw/master/anno_labs_issues.csv.bz2', compression='bz2')" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
manifest_idaidyeardaydc_titledc_title_additionalsubjectsplace_of_publicationslanguagesdc_type...meta_typeini_typemodification_datetimelonger_page_iddc_datelink_pdflink_oldhas_ocrmeta_idpage_count
0fug15050701fug150515050701Fugger - ZeitungenNaNTageszeitungo.O.denewspaper...brzanno2013-06-27 13:28:3511505-07-01http://anno.onb.ac.at/cgi-content/anno_pdf.pl?...http://anno.onb.ac.at/cgi-content/anno?aid=fug...011221982
1fug15680120fug156815680120Fugger - ZeitungenNaNTageszeitungo.O.denewspaper...brzanno2013-06-27 13:27:5911568-01-20http://anno.onb.ac.at/cgi-content/anno_pdf.pl?...http://anno.onb.ac.at/cgi-content/anno?aid=fug...011222011
2fug15680124fug156815680124Fugger - ZeitungenNaNTageszeitungo.O.denewspaper...brzanno2013-06-27 13:27:5811568-01-24http://anno.onb.ac.at/cgi-content/anno_pdf.pl?...http://anno.onb.ac.at/cgi-content/anno?aid=fug...011222022
3fug15680228fug156815680228Fugger - ZeitungenNaNTageszeitungo.O.denewspaper...brzanno2013-06-27 13:27:5911568-02-28http://anno.onb.ac.at/cgi-content/anno_pdf.pl?...http://anno.onb.ac.at/cgi-content/anno?aid=fug...011222031
4fug15680304fug156815680304Fugger - ZeitungenNaNTageszeitungo.O.denewspaper...brzanno2013-06-27 13:27:5811568-03-04http://anno.onb.ac.at/cgi-content/anno_pdf.pl?...http://anno.onb.ac.at/cgi-content/anno?aid=fug...011222044
\n", "

5 rows × 21 columns

\n", "
" ], "text/plain": [ " manifest_id aid year day dc_title dc_title_additional \\\n", "0 fug15050701 fug 1505 15050701 Fugger - Zeitungen NaN \n", "1 fug15680120 fug 1568 15680120 Fugger - Zeitungen NaN \n", "2 fug15680124 fug 1568 15680124 Fugger - Zeitungen NaN \n", "3 fug15680228 fug 1568 15680228 Fugger - Zeitungen NaN \n", "4 fug15680304 fug 1568 15680304 Fugger - Zeitungen NaN \n", "\n", " subjects place_of_publications languages dc_type ... meta_type \\\n", "0 Tageszeitung o.O. de newspaper ... brz \n", "1 Tageszeitung o.O. de newspaper ... brz \n", "2 Tageszeitung o.O. de newspaper ... brz \n", "3 Tageszeitung o.O. de newspaper ... brz \n", "4 Tageszeitung o.O. de newspaper ... brz \n", "\n", " ini_type modification_datetime longer_page_id dc_date \\\n", "0 anno 2013-06-27 13:28:35 1 1505-07-01 \n", "1 anno 2013-06-27 13:27:59 1 1568-01-20 \n", "2 anno 2013-06-27 13:27:58 1 1568-01-24 \n", "3 anno 2013-06-27 13:27:59 1 1568-02-28 \n", "4 anno 2013-06-27 13:27:58 1 1568-03-04 \n", "\n", " link_pdf \\\n", "0 http://anno.onb.ac.at/cgi-content/anno_pdf.pl?... \n", "1 http://anno.onb.ac.at/cgi-content/anno_pdf.pl?... \n", "2 http://anno.onb.ac.at/cgi-content/anno_pdf.pl?... \n", "3 http://anno.onb.ac.at/cgi-content/anno_pdf.pl?... \n", "4 http://anno.onb.ac.at/cgi-content/anno_pdf.pl?... \n", "\n", " link_old has_ocr meta_id \\\n", "0 http://anno.onb.ac.at/cgi-content/anno?aid=fug... 0 1122198 \n", "1 http://anno.onb.ac.at/cgi-content/anno?aid=fug... 0 1122201 \n", "2 http://anno.onb.ac.at/cgi-content/anno?aid=fug... 0 1122202 \n", "3 http://anno.onb.ac.at/cgi-content/anno?aid=fug... 0 1122203 \n", "4 http://anno.onb.ac.at/cgi-content/anno?aid=fug... 0 1122204 \n", "\n", " page_count \n", "0 2 \n", "1 1 \n", "2 2 \n", "3 1 \n", "4 4 \n", "\n", "[5 rows x 21 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dd.head()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
yearfrom_abolonger_page_idhas_ocrmeta_idpage_count
count228449.000000228449.0228449.000000228449.0000002.284490e+05228449.000000
mean1841.2488210.00.0631210.7826876.373957e+059.373917
std58.8081240.00.2431820.4124183.691163e+0521.592944
min1.0000000.00.0000000.0000003.506000e+031.000000
25%1834.0000000.00.0000001.0000002.696050e+054.000000
50%1858.0000000.00.0000001.0000007.375320e+056.000000
75%1870.0000000.00.0000001.0000009.717960e+0512.000000
max1877.0000000.01.0000001.0000001.139472e+061676.000000
\n", "
" ], "text/plain": [ " year from_abo longer_page_id has_ocr meta_id \\\n", "count 228449.000000 228449.0 228449.000000 228449.000000 2.284490e+05 \n", "mean 1841.248821 0.0 0.063121 0.782687 6.373957e+05 \n", "std 58.808124 0.0 0.243182 0.412418 3.691163e+05 \n", "min 1.000000 0.0 0.000000 0.000000 3.506000e+03 \n", "25% 1834.000000 0.0 0.000000 1.000000 2.696050e+05 \n", "50% 1858.000000 0.0 0.000000 1.000000 7.375320e+05 \n", "75% 1870.000000 0.0 0.000000 1.000000 9.717960e+05 \n", "max 1877.000000 0.0 1.000000 1.000000 1.139472e+06 \n", "\n", " page_count \n", "count 228449.000000 \n", "mean 9.373917 \n", "std 21.592944 \n", "min 1.000000 \n", "25% 4.000000 \n", "50% 6.000000 \n", "75% 12.000000 \n", "max 1676.000000 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dd.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Prepare Data" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "dd = dd[dd['year'] >= 1500]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
manifest_idaidyeardaydc_titledc_title_additionalsubjectsplace_of_publicationslanguagesdc_type...meta_typeini_typemodification_datetimelonger_page_iddc_datelink_pdflink_oldhas_ocrmeta_idpage_count
0fug15050701fug150515050701Fugger - ZeitungenNaNTageszeitungo.O.denewspaper...brzanno2013-06-27 13:28:3511505-07-01http://anno.onb.ac.at/cgi-content/anno_pdf.pl?...http://anno.onb.ac.at/cgi-content/anno?aid=fug...011221982
1fug15680120fug156815680120Fugger - ZeitungenNaNTageszeitungo.O.denewspaper...brzanno2013-06-27 13:27:5911568-01-20http://anno.onb.ac.at/cgi-content/anno_pdf.pl?...http://anno.onb.ac.at/cgi-content/anno?aid=fug...011222011
2fug15680124fug156815680124Fugger - ZeitungenNaNTageszeitungo.O.denewspaper...brzanno2013-06-27 13:27:5811568-01-24http://anno.onb.ac.at/cgi-content/anno_pdf.pl?...http://anno.onb.ac.at/cgi-content/anno?aid=fug...011222022
3fug15680228fug156815680228Fugger - ZeitungenNaNTageszeitungo.O.denewspaper...brzanno2013-06-27 13:27:5911568-02-28http://anno.onb.ac.at/cgi-content/anno_pdf.pl?...http://anno.onb.ac.at/cgi-content/anno?aid=fug...011222031
4fug15680304fug156815680304Fugger - ZeitungenNaNTageszeitungo.O.denewspaper...brzanno2013-06-27 13:27:5811568-03-04http://anno.onb.ac.at/cgi-content/anno_pdf.pl?...http://anno.onb.ac.at/cgi-content/anno?aid=fug...011222044
\n", "

5 rows × 21 columns

\n", "
" ], "text/plain": [ " manifest_id aid year day dc_title dc_title_additional \\\n", "0 fug15050701 fug 1505 15050701 Fugger - Zeitungen NaN \n", "1 fug15680120 fug 1568 15680120 Fugger - Zeitungen NaN \n", "2 fug15680124 fug 1568 15680124 Fugger - Zeitungen NaN \n", "3 fug15680228 fug 1568 15680228 Fugger - Zeitungen NaN \n", "4 fug15680304 fug 1568 15680304 Fugger - Zeitungen NaN \n", "\n", " subjects place_of_publications languages dc_type ... meta_type \\\n", "0 Tageszeitung o.O. de newspaper ... brz \n", "1 Tageszeitung o.O. de newspaper ... brz \n", "2 Tageszeitung o.O. de newspaper ... brz \n", "3 Tageszeitung o.O. de newspaper ... brz \n", "4 Tageszeitung o.O. de newspaper ... brz \n", "\n", " ini_type modification_datetime longer_page_id dc_date \\\n", "0 anno 2013-06-27 13:28:35 1 1505-07-01 \n", "1 anno 2013-06-27 13:27:59 1 1568-01-20 \n", "2 anno 2013-06-27 13:27:58 1 1568-01-24 \n", "3 anno 2013-06-27 13:27:59 1 1568-02-28 \n", "4 anno 2013-06-27 13:27:58 1 1568-03-04 \n", "\n", " link_pdf \\\n", "0 http://anno.onb.ac.at/cgi-content/anno_pdf.pl?... \n", "1 http://anno.onb.ac.at/cgi-content/anno_pdf.pl?... \n", "2 http://anno.onb.ac.at/cgi-content/anno_pdf.pl?... \n", "3 http://anno.onb.ac.at/cgi-content/anno_pdf.pl?... \n", "4 http://anno.onb.ac.at/cgi-content/anno_pdf.pl?... \n", "\n", " link_old has_ocr meta_id \\\n", "0 http://anno.onb.ac.at/cgi-content/anno?aid=fug... 0 1122198 \n", "1 http://anno.onb.ac.at/cgi-content/anno?aid=fug... 0 1122201 \n", "2 http://anno.onb.ac.at/cgi-content/anno?aid=fug... 0 1122202 \n", "3 http://anno.onb.ac.at/cgi-content/anno?aid=fug... 0 1122203 \n", "4 http://anno.onb.ac.at/cgi-content/anno?aid=fug... 0 1122204 \n", "\n", " page_count \n", "0 2 \n", "1 1 \n", "2 2 \n", "3 1 \n", "4 4 \n", "\n", "[5 rows x 21 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dd.head()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "dd.loc[dd['languages'].str.len() > 2, 'languages'] = 'multi'" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "dd.loc[dd['languages'].isnull(), 'languages'] = 'unknown'" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['de', 'unknown', 'multi', 'el', 'hr'], dtype=object)" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dd.languages.unique()" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "dd.loc[dd['place_of_publications'].isnull(), 'place_of_publications'] = 'unknown'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Filter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Some section\n", "\n", "* a list\n", "* with bullet points" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "year_min, year_max = dd.year.min(), dd.year.max()\n", "pages_min, pages_max = dd.page_count.min(), dd.page_count.max()\n", "pages_unique = sorted(dd.page_count.unique())\n", "all_languages = dd.languages.unique()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "language_options = sorted(all_languages)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "0ff03b75360d49d291c63e06ff8e8ba7", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(IntRangeSlider(value=(1505, 1877), continuous_update=False, description='Years', layout=Layout(…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "wide_layout = widgets.Layout(width='90%')\n", "\n", "years = widgets.IntRangeSlider(value=(year_min, year_max), min=year_min, max=year_max, step=1,\n", " continuous_update=False, description='Years', layout=wide_layout)\n", "pages = widgets.SelectionRangeSlider(value=(pages_min, pages_max), options=pages_unique,\n", " continuous_update=False, description='Pages', layout=wide_layout)\n", "lang = widgets.SelectMultiple(options=language_options, value=language_options[:], rows=len(language_options),\n", " description='Languages', layout=wide_layout)\n", "labs = widgets.Checkbox(value=False,\n", " description='Limit to Lab content', layout=wide_layout)\n", "out = widgets.Output()\n", "\n", "\n", "def get_filtered_dataframe():\n", " ymin, ymax = years.value\n", " pmin, pmax = pages.value\n", " selected_languages = lang.value\n", " filtered = dd[\n", " (dd['year'] >= ymin) &\n", " (dd['year'] <= ymax) &\n", " (dd['page_count'] >= pmin) &\n", " (dd['page_count'] <= pmax) &\n", " (dd['languages'].isin(selected_languages))\n", " ]\n", " if labs.value:\n", " filtered = filtered[filtered['in_labs']]\n", " return filtered\n", "\n", "def update_filtered_plotly_output(*args):\n", " filtered_data = get_filtered_dataframe()\n", " out.clear_output()\n", " with out:\n", " print('Data length: {}'.format(len(filtered_data)))\n", "\n", " \n", "years.observe(update_filtered_plotly_output, names=['value'])\n", "pages.observe(update_filtered_plotly_output, names=['value'])\n", "lang.observe(update_filtered_plotly_output, names=['value'])\n", "labs.observe(update_filtered_plotly_output, names=['value'])\n", "\n", "\n", "update_filtered_plotly_output()\n", " \n", "widgets.VBox([\n", " years,\n", " pages,\n", " lang,\n", " labs,\n", " out\n", "])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotly" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import plotly.offline as py\n", "import plotly.graph_objs as go\n", "\n", "py.init_notebook_mode()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "8f94237006fb4ee29f4523512e44bff7", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(Button(description='Plot!', style=ButtonStyle()), Output()))" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "create_plot = widgets.Button(description='Plot!')\n", "plot_out = widgets.Output()\n", "\n", "\n", "def plot(*args):\n", " with plot_out:\n", " per_year = get_filtered_dataframe()[['year', 'page_count']].groupby('year').sum()\n", " ppy = go.Bar(x=per_year.index,\n", " y=per_year.page_count,\n", " name='PPY'\n", " )\n", " ppy_data = go.Data([ppy])\n", " ppy_layout = go.Layout(title='Pages per Year',\n", " xaxis={'title': 'Years'},\n", " yaxis={'title': 'Pages'})\n", " ppy_figure = go.Figure(data=ppy_data, layout=ppy_layout)\n", " py.iplot(ppy_figure)\n", " \n", "create_plot.on_click(plot)\n", "\n", "\n", "widgets.VBox([\n", " create_plot,\n", " plot_out\n", "])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Widgets + Plotly" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1d1664de20e64a77be57b87e777c94d3", "version_major": 2, "version_minor": 0 }, "text/plain": [ "VBox(children=(IntRangeSlider(value=(1505, 1877), continuous_update=False, description='Years', layout=Layout(…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "wide_layout = widgets.Layout(width='90%')\n", "\n", "years = widgets.IntRangeSlider(value=(year_min, year_max), min=year_min, max=year_max, step=1,\n", " continuous_update=False, description='Years', layout=wide_layout)\n", "pages = widgets.SelectionRangeSlider(value=(pages_min, pages_max), options=pages_unique,\n", " continuous_update=False, description='Pages', layout=wide_layout)\n", "lang = widgets.SelectMultiple(options=language_options, value=language_options[:], rows=len(language_options),\n", " description='Languages', layout=wide_layout)\n", "labs = widgets.Checkbox(value=False,\n", " description='Limit to Lab content', layout=wide_layout)\n", "clear_plot = widgets.Button(description='Clear!', layout=wide_layout)\n", "create_plot = widgets.Button(description='Plot!', layout=wide_layout)\n", "text_out = widgets.Output(layout=wide_layout)\n", "plot_out = widgets.Output(layout=wide_layout)\n", "\n", "\n", "def get_filtered_dataframe():\n", " ymin, ymax = years.value\n", " pmin, pmax = pages.value\n", " selected_languages = lang.value\n", " filtered = dd[\n", " (dd['year'] >= ymin) &\n", " (dd['year'] <= ymax) &\n", " (dd['page_count'] >= pmin) &\n", " (dd['page_count'] <= pmax) &\n", " (dd['languages'].isin(selected_languages))\n", " ]\n", " if labs.value:\n", " filtered = filtered[filtered['in_labs']]\n", " return filtered\n", "\n", "\n", "def plot_issues():\n", " with plot_out:\n", " per_year_and_language = get_filtered_dataframe()[['languages', 'year']] \\\n", " .groupby(['languages', 'year']).size().to_frame() \\\n", " .rename(index=str, columns={0: 'issues'})\n", " \n", " # issues per language - all languages\n", " idx = per_year_and_language.index\n", "\n", " iper_language = {}\n", " for lang in idx.get_level_values(0):\n", " data = per_year_and_language[idx.get_level_values(0) == lang]\n", " graph_obj = go.Bar(\n", " x = data.index.get_level_values(1),\n", " y = data.issues,\n", " name = lang.upper()\n", " )\n", " iper_language[lang] = {\n", " 'data_obj': data,\n", " 'graph_obj': graph_obj\n", " }\n", "\n", " ipl_all_data = [iper_language[lang]['graph_obj'] for lang in sorted(iper_language.keys(), reverse=True)]\n", " ipl_all_layout = go.Layout(\n", " title='Issues per Language per Year',\n", " barmode='stack',\n", " xaxis={'title': 'Year'},\n", " yaxis={'title': 'Issues'},\n", " height=500\n", " )\n", " ipl_all_fig = go.Figure(data=ipl_all_data, layout=ipl_all_layout)\n", " py.iplot(ipl_all_fig) \n", "\n", " \n", "def plot_pages():\n", " with plot_out:\n", " per_year_and_language = get_filtered_dataframe()[['languages', 'year', 'page_count']].groupby(['languages', 'year']).sum()\n", " \n", " # pages per language - all languages\n", " idx = per_year_and_language.index\n", "\n", " pper_language = {}\n", " for lang in idx.get_level_values(0):\n", " data = per_year_and_language[idx.get_level_values(0) == lang]\n", " graph_obj = go.Bar(\n", " x = data.index.get_level_values(1),\n", " y = data.page_count,\n", " name = lang.upper()\n", " )\n", " pper_language[lang] = {\n", " 'data_obj': data,\n", " 'graph_obj': graph_obj\n", " }\n", "\n", " ppl_all_data = [pper_language[lang]['graph_obj'] for lang in sorted(pper_language.keys(), reverse=True)]\n", " ppl_all_layout = go.Layout(\n", " title='Pages per Language per Year',\n", " barmode='stack',\n", " xaxis={'title': 'Year'},\n", " yaxis={'title': 'Pages'},\n", " height=500\n", " )\n", " ppl_all_fig = go.Figure(data=ppl_all_data, layout=ppl_all_layout)\n", " py.iplot(ppl_all_fig) \n", " \n", "def plot(*args):\n", " plot_out.clear_output()\n", " plot_pages()\n", " plot_issues()\n", "\n", "def update_filtered_plotly_output(*args):\n", " filtered_data = get_filtered_dataframe()\n", " text_out.clear_output()\n", " with text_out:\n", " print('Selected Issues: {}'.format(len(filtered_data)))\n", "\n", " \n", "years.observe(update_filtered_plotly_output, names=['value'])\n", "pages.observe(update_filtered_plotly_output, names=['value'])\n", "lang.observe(update_filtered_plotly_output, names=['value'])\n", "labs.observe(update_filtered_plotly_output, names=['value'])\n", "# clear_plot.on_click(plot_clear) # TODO: recreate plot_clear function\n", "create_plot.on_click(plot)\n", "\n", "update_filtered_plotly_output()\n", " \n", "dyn_view = widgets.VBox([\n", " years,\n", " pages,\n", " lang,\n", " labs,\n", " text_out,\n", " # widgets.HBox([create_plot, clear_plot]),\n", " create_plot,\n", " plot_out\n", "])\n", "dyn_view" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "import ipywidgets.embed as embed" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# embed.embed_minimal_html('export.html', views=dyn_view, title='Widgets export') # DEFUNCT" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }