{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "Z8l3phE7O_fi" }, "source": [ "# Sample Inspector (Part I)\n", "## Looking at keywords over time\n", "\n", "In this notebook, we investigate how the digital sample compares to the 'universe' of book publications in the 19th century. Even though the Microsoft Digitised Books corpus is a rich collection, it remains unclear what is in there and what's not. Especially when one is interested in a specific topic, like 'machines', knowing what content we don't have digital access to is critical if we want to make sense and of findings built on such digital resources.\n", "\n", "To understand the digital sample to the population of printed works, we compare the keywords in titles between these two levels. We show how to load and process data in Pandas, build a quick and efficient method to gauge and visualize the presence of a set of selected keywords in book titles over time." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "zci-0phcO_fl" }, "outputs": [], "source": [ "# first we need import all libraries and tools required in the rest of this notebook\n", "%matplotlib inline\n", "import json\n", "from tqdm.notebook import tqdm\n", "import pandas as pd\n", "import numpy as np\n", "from sklearn.feature_extraction.text import CountVectorizer\n", "from collections import Counter, defaultdict" ] }, { "cell_type": "markdown", "id": "9e850520", "metadata": {}, "source": [ "## Loading the data" ] }, { "cell_type": "markdown", "metadata": { "id": "znApsC3CO_fm" }, "source": [ "Using Pandas, we load the metadata on the BL books collection and print the first three rows for inspection." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "vQEZ2G0fO_fn" }, "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", "
BL record IDType of resourceNameDates associated with nameType of nameRoleAll namesTitleVariant titlesSeries title...Date of publicationEditionPhysical descriptionDewey classificationBL shelfmarkTopicsGenreLanguagesNotesBL record ID for physical resource
0014602826MonographYearsley, Ann1753-1806personNaNMore, Hannah, 1745-1833 [person] ; Yearsley, A...Poems on several occasions [With a prefatory l...NaNNaN...1786Fourth edition MANUSCRIPT noteNaNNaNDigital Store 11644.d.32NaNNaNEnglishNaN3996603
1014602830MonographA, T.NaNpersonNaNOldham, John, 1653-1683 [person] ; A, T. [person]A Satyr against Vertue. (A poem: supposed to b...NaNNaN...1679NaN15 pages (4°)NaNDigital Store 11602.ee.10. (2.)NaNNaNEnglishNaN1143
2014602831MonographNaNNaNNaNNaNNaNThe Aeronaut, a poem; founded almost entirely,...NaNNaN...1816NaN17 pages (8°)NaNDigital Store 992.i.12. (3.)Dublin (Ireland)NaNEnglishNaN22782
\n", "

3 rows × 24 columns

\n", "
" ], "text/plain": [ " BL record ID Type of resource Name Dates associated with name \\\n", "0 014602826 Monograph Yearsley, Ann 1753-1806 \n", "1 014602830 Monograph A, T. NaN \n", "2 014602831 Monograph NaN NaN \n", "\n", " Type of name Role All names \\\n", "0 person NaN More, Hannah, 1745-1833 [person] ; Yearsley, A... \n", "1 person NaN Oldham, John, 1653-1683 [person] ; A, T. [person] \n", "2 NaN NaN NaN \n", "\n", " Title Variant titles \\\n", "0 Poems on several occasions [With a prefatory l... NaN \n", "1 A Satyr against Vertue. (A poem: supposed to b... NaN \n", "2 The Aeronaut, a poem; founded almost entirely,... NaN \n", "\n", " Series title ... Date of publication Edition \\\n", "0 NaN ... 1786 Fourth edition MANUSCRIPT note \n", "1 NaN ... 1679 NaN \n", "2 NaN ... 1816 NaN \n", "\n", " Physical description Dewey classification BL shelfmark \\\n", "0 NaN NaN Digital Store 11644.d.32 \n", "1 15 pages (4°) NaN Digital Store 11602.ee.10. (2.) \n", "2 17 pages (8°) NaN Digital Store 992.i.12. (3.) \n", "\n", " Topics Genre Languages Notes BL record ID for physical resource \n", "0 NaN NaN English NaN 3996603 \n", "1 NaN NaN English NaN 1143 \n", "2 Dublin (Ireland) NaN English NaN 22782 \n", "\n", "[3 rows x 24 columns]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "metadata_blb = pd.read_csv(\n", " \"https://bl.iro.bl.uk/downloads/e1be1324-8b1a-4712-96a7-783ac209ddef?locale=en\",\n", " dtype={\"BL record ID\": \"string\"},\n", " parse_dates=False,\n", ")\n", "metadata_blb.head(3)" ] }, { "cell_type": "markdown", "id": "57ceeaaf", "metadata": {}, "source": [ "## Parsing all of the titles for a year" ] }, { "cell_type": "markdown", "metadata": { "id": "5yVABbGdO_fn" }, "source": [ "Next, we process the titles in this dataframe: we create a `pd.Series` object in which we map a year to a long string that contains all the titles of books published in that year." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "xPmvT38pO_fo" }, "outputs": [], "source": [ "# convert all titles to a string\n", "metadata_blb[\"title_str\"] = metadata_blb.Title.apply(lambda x: \"\".join([t for t in x]))\n", "# in case of a date range select the first year\n", "metadata_blb[\"Date of publication\"] = metadata_blb[\"Date of publication\"].apply(\n", " lambda x: str(x).split(\"-\")[0]\n", ")\n", "# group all titles by year, i.e. for each year we concatenate all titles as one long string\n", "titles_by_year_bl = metadata_blb.groupby(\"Date of publication\")[\"title_str\"].apply(\n", " \" \".join\n", ")\n", "# slice the Series to retain only titles that fall within the target period\n", "titles_by_year_bl = titles_by_year_bl[\"1800\":\"1899\"]" ] }, { "cell_type": "markdown", "metadata": { "id": "02B7JX07O_fo" }, "source": [ "These operations return a variable `titles_by_year_bl` of type `pd.Series` in which the index refers to the year of publication and the values are a concatenation of all titles" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "bEbhDI4tO_fp", "outputId": "fe47eb43-7b83-4733-c2c8-4324d6028796" }, "outputs": [ { "data": { "text/plain": [ "Date of publication\n", "1800 Egbert; or, The Suicide. A tale [In verse.] So...\n", "1801 The Old Hag in a Red Cloak. A romance [In vers...\n", "1802 Elegy to the memory of the late Duke of Bedfor...\n", "1803 [Britons strike home.] Songs &c. in Britons st...\n", "1804 The Sports of the Genii [Etchings from drawing...\n", " ... \n", "1895 A Few Verses The Ghais o' Dennilair: a legend ...\n", "1896 Book of Word & Music of Humorous Songs, Burles...\n", "1897 Altenglische Spruchweisheit, alt- und mittelen...\n", "1898 A Vision. (Penny edition.) The Ballad of the W...\n", "1899 Hawthorn and Lavender: songs and madrigals We ...\n", "Name: title_str, Length: 100, dtype: object" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titles_by_year_bl" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 54 }, "id": "a1CqyCB_O_fq", "outputId": "67311896-3585-41f3-e976-93a74518ac96" }, "outputs": [ { "data": { "text/plain": [ "'Egbert; or, The Suicide. A tale [In verse.] Songs, Chorusses, etc, in the new pantomime of Harlequin Tour; or, the Dominion of Fancy, as performed at the Theatre Royal, Covent-Garden, etc A Journey to'" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "titles_by_year_bl[\"1800\"][:200]" ] }, { "cell_type": "markdown", "id": "6b86f73f", "metadata": {}, "source": [ "## Loading catalogue metadata" ] }, { "cell_type": "markdown", "metadata": { "id": "PbesLukZO_fr" }, "source": [ "Then we load a .csv file which contains an export of the British Library Catalogue. For sure, the BL catalogue won't give us a complete list of all books in the 19th century, but at least it is converging to the universe of known printed works in this period. As a comparison and contextualisation tool, it helps us understand the contours and composition of the digital collection." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 426 }, "id": "wBtf_8q9O_fr", "outputId": "066716e5-3149-423b-bd04-5408fd11d90e" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.7/site-packages/IPython/core/interactiveshell.py:3296: DtypeWarning: Columns (2,3,19) have mixed types.Specify dtype option on import or set low_memory=False.\n", " exec(code_obj, self.user_global_ns, self.user_ns)\n" ] }, { "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", "
BL record IDType of resourceBNB numberISBNNameDates associated with nameType of nameRoleAll namesTitle...PublisherDate of publicationEditionPhysical descriptionDewey classificationBL shelfmarkTopicsGenreLanguagesNotes
0000000004MonographNaNNaNNaNNaNNaNNaNCarlbohm, Johan Arvid, printer [person]Aabc [etc.] Jesus Vocales, eli äänelliset boks......präntätty directörin J.A. Carlbohmin tykönä1800NaN16 unnumbered pages, 17 cm (8°)NaN12976.aa.3Writing ; Reading ; Writing--Alphabets--Primer...NaNFinnishFinnish primer, beginning with the Lord's pray...
1000000006MonographNaNNaNNaNNaNNaNNaNNaNA che serve il Papa?...Tiberina1889NaN32 pages, 14 cmNaN3900.aaa.20. (4.)NaNNaNItalianNaN
2000000007MonographNaNNaNNaNNaNNaNNaNNaNA. for Apple [An illustrated alphabet.]...Ward & Lock1894NaNNaNNaN12811.h.70NaNNaNNaNNaN
\n", "

3 rows × 25 columns

\n", "
" ], "text/plain": [ " BL record ID Type of resource BNB number ISBN Name \\\n", "0 000000004 Monograph NaN NaN NaN \n", "1 000000006 Monograph NaN NaN NaN \n", "2 000000007 Monograph NaN NaN NaN \n", "\n", " Dates associated with name Type of name Role \\\n", "0 NaN NaN NaN \n", "1 NaN NaN NaN \n", "2 NaN NaN NaN \n", "\n", " All names \\\n", "0 Carlbohm, Johan Arvid, printer [person] \n", "1 NaN \n", "2 NaN \n", "\n", " Title ... \\\n", "0 Aabc [etc.] Jesus Vocales, eli äänelliset boks... ... \n", "1 A che serve il Papa? ... \n", "2 A. for Apple [An illustrated alphabet.] ... \n", "\n", " Publisher Date of publication Edition \\\n", "0 präntätty directörin J.A. Carlbohmin tykönä 1800 NaN \n", "1 Tiberina 1889 NaN \n", "2 Ward & Lock 1894 NaN \n", "\n", " Physical description Dewey classification BL shelfmark \\\n", "0 16 unnumbered pages, 17 cm (8°) NaN 12976.aa.3 \n", "1 32 pages, 14 cm NaN 3900.aaa.20. (4.) \n", "2 NaN NaN 12811.h.70 \n", "\n", " Topics Genre Languages \\\n", "0 Writing ; Reading ; Writing--Alphabets--Primer... NaN Finnish \n", "1 NaN NaN Italian \n", "2 NaN NaN NaN \n", "\n", " Notes \n", "0 Finnish primer, beginning with the Lord's pray... \n", "1 NaN \n", "2 NaN \n", "\n", "[3 rows x 25 columns]" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "metadata_cat = pd.read_csv(\n", " \"https://bl.iro.bl.uk/downloads/e4bf0f74-2c64-4322-93c7-0dcc5e5246da?locale=en\",\n", " dtype={\"BL record ID\": \"string\"},\n", ")\n", "metadata_cat.head(3)" ] }, { "cell_type": "markdown", "id": "21e90580", "metadata": {}, "source": [ "### Parsing date ranges" ] }, { "cell_type": "markdown", "metadata": { "id": "8wBEOOCQO_ft" }, "source": [ "Values in the `'Date of publication'` column sometimes refer to a date range instead of a specific year. To simplify things, we take the first year as the date of publication. Admittedly, this choice is questionable, and we encourage that you craft other solutions depending on your research interests." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "zjX56boSO_ft", "outputId": "8efe5501-a2d5-4287-db05-b7311e9f1658" }, "outputs": [ { "data": { "text/plain": [ "array(['1800', '1889', '1894', ..., '1855-1875', '1887-1937', '1893-1963'],\n", " dtype=object)" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" } ], "source": [ "metadata_cat[\"Date of publication\"].unique()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "ngRreO3KO_fv" }, "outputs": [], "source": [ "metadata_cat[\"date\"] = metadata_cat[\"Date of publication\"].apply(\n", " lambda x: str(x).split(\"-\")[0]\n", ")" ] }, { "cell_type": "markdown", "metadata": { "id": "DTi0a3ktRP8q" }, "source": [ "We also do the same for the BL Books collection" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "8T8z-e1SQlxx", "lines_to_next_cell": 2 }, "outputs": [], "source": [ "metadata_blb[\"date\"] = metadata_blb[\"Date of publication\"].apply(\n", " lambda x: str(x).split(\"-\")[0]\n", ")" ] }, { "cell_type": "markdown", "metadata": { "id": "XV5nDjJ1O_fv" }, "source": [ "With its 5.1 billion tokens and close to 50k titles, the Microsoft Digitised Books is an impressive collection. However, it constitutes just 2.73% of all books printed in the 19th century. As a historian, the amount of information seems overwhelming, but one should realise it is still a small empirical basis when making claims about cultural evolution in the 19th century. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4mVzTHzZO_fv", "outputId": "c161592e-d1dc-41b5-822b-84ca931feb5a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of 19thC works in the BL Books collection: 46518\n", "Number of 19thC works in the Catologue: 1686158\n", "The sample size is 2.76 %\n" ] } ], "source": [ "num_19thc_books_bl = len(\n", " metadata_blb[(metadata_blb.date >= \"1800\") & (metadata_blb.date < \"1900\")]\n", ")\n", "num_19thc_books_cat = len(\n", " metadata_cat[(metadata_cat.date >= \"1800\") & (metadata_cat.date < \"1900\")]\n", ")\n", "print(\"Number of 19thC works in the BL Books collection: \", num_19thc_books_bl)\n", "print(\"Number of 19thC works in the Catologue: \", num_19thc_books_cat)\n", "print(\n", " \"The sample size is\", round(num_19thc_books_bl / num_19thc_books_cat * 100, 2), \"%\"\n", ")" ] }, { "cell_type": "markdown", "metadata": { "id": "m4wf7X4-O_fw" }, "source": [ "\n", "### Comparing our corpus to a wider collection \n", "\n", "Similar to what we did with BL Books metadata, we concatenate titles in the catalogue to one long string, one per year, and slice the `pd.Series` object." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "eJTMxlRHO_fw" }, "outputs": [], "source": [ "metadata_cat[\"Title\"] = metadata_cat[\"Title\"].astype(\n", " str\n", ") # convert all titles to strings\n", "titles_by_year_cat = metadata_cat.groupby(\"date\")[\"Title\"].apply(\n", " \" \".join\n", ") # group titles by year and join as one long string\n", "titles_by_year_cat = titles_by_year_cat[\"1800\":\"1899\"] # slice the series" ] }, { "cell_type": "markdown", "metadata": { "id": "bKlAbfYnO_fx" }, "source": [ "We established that the digital corpus constitutes only 2.76% of the population. To assess changes over time, we can visualize the sample size (as a percentage of the population) for each year." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 300 }, "id": "YdExY9hIO_fx", "outputId": "b7ef83e3-ed29-4294-e360-5bc00cad6d5e" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "a = metadata_cat.groupby(\"date\")[\"Title\"].count()[\"1800\":\"1900\"]\n", "b = metadata_blb.groupby(\"date\")[\"title_str\"].count()[\"1800\":\"1900\"]\n", "(b / a * 100).plot()" ] }, { "cell_type": "markdown", "metadata": { "id": "rgG7XOIjO_fx" }, "source": [ "In the cells below, we turn to analysing and comparing the content of the titles. We repeat the following steps for both the BL Books metadata and catalogue information.\n", "- We create a document-term matrix, where each row comprises the word counts for all titles in a specific year\n", "- We compute the total word counts per year\n", "\n", "We use the `CountVectorizer` object provided by `sklearn` which takes a list of texts as input and converts this to a document-term matrix. The `min_df` argument allows us to discard words that only appear once, thus avoiding that the matrix becomes too large." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "t8OjeRALO_fy" }, "outputs": [], "source": [ "bl_counts = CountVectorizer(min_df=2) # create a CountVectorizer object\n", "bl_dtm = bl_counts.fit_transform(\n", " titles_by_year_bl\n", ") # fit the CountVectorizer on the titles\n", "totals_bl = bl_dtm.sum(axis=1)\n", "# sum row wise, i.e. totals for each year\n", "totals_bl = np.squeeze(np.array(totals_bl))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "NdTqcmI6O_fy" }, "outputs": [], "source": [ "cat_counts = CountVectorizer(min_df=10)\n", "cat_dtm = cat_counts.fit_transform(titles_by_year_cat)\n", "totals_cat = cat_dtm.sum(axis=1)\n", "totals_cat = np.squeeze(np.array(totals_cat))" ] }, { "cell_type": "markdown", "metadata": { "id": "XeCkERUtO_fy" }, "source": [ "By amending the `terms` variable you can select the keywords you want to investigate and compare between sample and population." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "pzojViY3O_fz" }, "outputs": [], "source": [ "terms = {\"machinery\", \"machines\", \"machine\", \"engine\", \"engines\"}" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "I-7VdpDqO_fz", "outputId": "f1a81614-2c7b-4283-e4e9-3a9f1ac10dca" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Plotting relative frequency for following words in BL Books titles:\n", "\t ['machinery', 'machines', 'engines']\n", "\n", "Plotting relative frequency for following words in BL Catalogue titles:\n", "\t ['machine', 'machines', 'engines', 'machinery', 'engine']\n" ] } ], "source": [ "terms_bl = list(terms.intersection(set(bl_counts.get_feature_names())))\n", "print(\n", " \"Plotting relative frequency for following words in BL Books titles:\\n\\t\", terms_bl\n", ")\n", "terms_cat = list(terms.intersection(set(cat_counts.get_feature_names())))\n", "print()\n", "print(\n", " \"Plotting relative frequency for following words in BL Catalogue titles:\\n\\t\",\n", " terms_cat,\n", ")" ] }, { "cell_type": "markdown", "metadata": { "id": "nsVIdxMmO_fz" }, "source": [ "In the code cell below, we first collect frequencies of the given query terms in the BL Books corpus (and sum all counts if more than one keyword is given). We divide the yearly absolute counts by the total number of words in titles to obtain yearly relative frequencies. We repeat the same procedure for the catalogue data.\n", "\n", "Lastly, we plot the relative frequencies for both the BL Books (blue) and catalogue (orange), slight smoothing the timeline by showing the rolling mean." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 334 }, "id": "rESidLpSO_fz", "outputId": "5712d9d4-5870-4f60-80ea-006d0d505307" }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": null, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "idx_bl = [bl_counts.vocabulary_[term] for term in terms_bl]\n", "if len(idx_bl) <= 1:\n", " counts_bl = np.squeeze(bl_dtm[:, idx_bl].toarray())\n", "else:\n", " counts_bl = np.squeeze(bl_dtm[:, idx_bl].toarray()).sum(axis=1)\n", "\n", "pd.Series(counts_bl / totals_bl, index=titles_by_year_bl.index).rolling(2).mean().plot()\n", "idx_cat = [cat_counts.vocabulary_[term] for term in terms_cat]\n", "\n", "if len(idx_cat) <= 1:\n", " counts_cat = np.squeeze(cat_dtm[:, idx_cat].toarray())\n", "else:\n", " counts_cat = np.squeeze(cat_dtm[:, idx_cat].toarray()).sum(axis=1)\n", "\n", "pd.Series(counts_cat / totals_cat).rolling(2).mean().plot()" ] }, { "cell_type": "markdown", "metadata": { "id": "0hdpuD8pO_fz" }, "source": [ "## Fin." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "JAYPUdi-O_f0" }, "outputs": [], "source": [] } ], "metadata": { "colab": { "name": "sample_inspector_i.ipynb", "provenance": [] }, "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.4" } }, "nbformat": 4, "nbformat_minor": 1 }