{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Analyzing and Comparing EMLO Collections\n", "\n", "The EMLO project contains dozens of correspondence collections centered around different historical figures. Each collection is maintained either by a single institute, or is a merging of smaller collections maintained across multiple institutions. \n", "\n", "The metadata of the correspondences has been mapped to a single schema.\n", "\n", "Making a comparison of different sets of correspondences, at different scales, draws the focus on different aspects of comparison. At the same time, it brings to the surface some differences in how the digital collections were shaped by selection criteria.\n", "\n", "At a small scale, it is easy to see for instance that a collection around a historical figure, e.g. Samuel Hartlib or Françoise de Graffigny has not only letters authored by or addressed to that figure, but also some letters between the correspondents in their networks. When working with many correspondence collections with thousands or tens of thousands of letters, this is a detail that is easily lost in overviews of metadata records and most summary statistics.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import glob\n", "import matplotlib.pyplot as plt\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's first load the data into a dataframe and inspect a number of rows so we get an idea of what is in there." ] }, { "cell_type": "code", "execution_count": 19, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0idtypecollectiondateauthoraddresseeorigindestinationrepository
00577c226e-adfa-43ed-8db2-95792b73f3c3LetterBayle, Pierre21 February 1662Bayle, Jacob, 1644-1685Bayle, Jean, 1609-1685Puylaurens, Occitanie, FranceCarla-Bayle, Occitanie, FranceCollection d'E. Labrousse\\n \\n \\n ...
110ccd18c5-de76-4c66-a7b5-fbc344a9dcdeLetterBayle, Pierre17 June 1662Bayle, Jacob, 1644-1685Bayle, Jean, 1609-1685Puylaurens, Occitanie, FranceCarla-Bayle, Occitanie, France2 printed editions
222e189892-8105-42e9-876c-02aaa97fb877LetterBayle, Pierre25 August 1662Bayle, Jacob, 1644-1685Bayle, Jean, 1609-1685Puylaurens, Occitanie, FranceCarla-Bayle, Occitanie, FranceCollection d'E. Labrousse\\n \\n \\n ...
33da35bb30-cfe1-4b4a-957d-42742088e693LetterBayle, Pierre5 March 1663Bayle, Jacob, 1644-1685Bayle, Pierre, 1647-1706Puylaurens, Occitanie, FranceCarla-Bayle, Occitanie, France1 printed edition
44c5fefa45-f197-4bc3-bf52-1272f7f1d573LetterBayle, Pierre7 April 1665Bayle, Jacob, 1644-1685Bayle, Jean, 1609-1685Puylaurens, Occitanie, FranceCarla-Bayle, Occitanie, FranceBibliothèque de la Société de l'Histoire du P...
.................................
13220523a9088a3f-3eb2-4039-aeaa-8ad98b9e6f35LetterBeeckman, Isaac12 April 1632Croix, Jacques, 1579-1655Beeckman, Isaac, 1588-1637Delft, South Holland, (United Provinces) Nethe...Dordrecht, South Holland, (United Provinces) N...NaN
132206241759be67-e3d3-4e30-a987-b0f84b212f03LetterBeeckman, Isaac17 May 1632Beeckman, Isaac, 1588-1637Rivet, André, 1572-1651Dordrecht, South Holland, (United Provinces) N...The Hague, South Holland, NetherlandsNaN
13220725c1c3e71d-9ca1-4953-968a-b5a8e5d3c00bLetterBeeckman, Isaac30 May 1633Beeckman, Isaac, 1588-1637Mersenne, Marin, 1588-1648Dordrecht, South Holland, (United Provinces) N...Paris, Île-de-France, FranceNaN
132208261b82d6d1-8b0c-4bc2-aa57-c856c73c2e66LetterBeeckman, Isaac22 August 1634Descartes, René, 1596-1650Beeckman, Isaac, 1588-1637Amsterdam, North Holland, (United Provinces) N...Dordrecht, South Holland, (United Provinces) N...NaN
1322092706dc5c13-cec1-4fcd-972e-0d6052350645LetterBeeckman, Isaac13 February 1635Beeckman, Isaac, 1588-1637Beeckman, Abraham, fl. 1635Dordrecht, South Holland, (United Provinces) N...Amsterdam, North Holland, (United Provinces) N...NaN
\n", "

132210 rows × 10 columns

\n", "
" ], "text/plain": [ " Unnamed: 0 id type \\\n", "0 0 577c226e-adfa-43ed-8db2-95792b73f3c3 Letter \n", "1 1 0ccd18c5-de76-4c66-a7b5-fbc344a9dcde Letter \n", "2 2 2e189892-8105-42e9-876c-02aaa97fb877 Letter \n", "3 3 da35bb30-cfe1-4b4a-957d-42742088e693 Letter \n", "4 4 c5fefa45-f197-4bc3-bf52-1272f7f1d573 Letter \n", "... ... ... ... \n", "132205 23 a9088a3f-3eb2-4039-aeaa-8ad98b9e6f35 Letter \n", "132206 24 1759be67-e3d3-4e30-a987-b0f84b212f03 Letter \n", "132207 25 c1c3e71d-9ca1-4953-968a-b5a8e5d3c00b Letter \n", "132208 26 1b82d6d1-8b0c-4bc2-aa57-c856c73c2e66 Letter \n", "132209 27 06dc5c13-cec1-4fcd-972e-0d6052350645 Letter \n", "\n", " collection date author \\\n", "0 Bayle, Pierre 21 February 1662 Bayle, Jacob, 1644-1685 \n", "1 Bayle, Pierre 17 June 1662 Bayle, Jacob, 1644-1685 \n", "2 Bayle, Pierre 25 August 1662 Bayle, Jacob, 1644-1685 \n", "3 Bayle, Pierre 5 March 1663 Bayle, Jacob, 1644-1685 \n", "4 Bayle, Pierre 7 April 1665 Bayle, Jacob, 1644-1685 \n", "... ... ... ... \n", "132205 Beeckman, Isaac 12 April 1632 Croix, Jacques, 1579-1655 \n", "132206 Beeckman, Isaac 17 May 1632 Beeckman, Isaac, 1588-1637 \n", "132207 Beeckman, Isaac 30 May 1633 Beeckman, Isaac, 1588-1637 \n", "132208 Beeckman, Isaac 22 August 1634 Descartes, René, 1596-1650 \n", "132209 Beeckman, Isaac 13 February 1635 Beeckman, Isaac, 1588-1637 \n", "\n", " addressee \\\n", "0 Bayle, Jean, 1609-1685 \n", "1 Bayle, Jean, 1609-1685 \n", "2 Bayle, Jean, 1609-1685 \n", "3 Bayle, Pierre, 1647-1706 \n", "4 Bayle, Jean, 1609-1685 \n", "... ... \n", "132205 Beeckman, Isaac, 1588-1637 \n", "132206 Rivet, André, 1572-1651 \n", "132207 Mersenne, Marin, 1588-1648 \n", "132208 Beeckman, Isaac, 1588-1637 \n", "132209 Beeckman, Abraham, fl. 1635 \n", "\n", " origin \\\n", "0 Puylaurens, Occitanie, France \n", "1 Puylaurens, Occitanie, France \n", "2 Puylaurens, Occitanie, France \n", "3 Puylaurens, Occitanie, France \n", "4 Puylaurens, Occitanie, France \n", "... ... \n", "132205 Delft, South Holland, (United Provinces) Nethe... \n", "132206 Dordrecht, South Holland, (United Provinces) N... \n", "132207 Dordrecht, South Holland, (United Provinces) N... \n", "132208 Amsterdam, North Holland, (United Provinces) N... \n", "132209 Dordrecht, South Holland, (United Provinces) N... \n", "\n", " destination \\\n", "0 Carla-Bayle, Occitanie, France \n", "1 Carla-Bayle, Occitanie, France \n", "2 Carla-Bayle, Occitanie, France \n", "3 Carla-Bayle, Occitanie, France \n", "4 Carla-Bayle, Occitanie, France \n", "... ... \n", "132205 Dordrecht, South Holland, (United Provinces) N... \n", "132206 The Hague, South Holland, Netherlands \n", "132207 Paris, Île-de-France, France \n", "132208 Dordrecht, South Holland, (United Provinces) N... \n", "132209 Amsterdam, North Holland, (United Provinces) N... \n", "\n", " repository \n", "0 Collection d'E. Labrousse\\n \\n \\n ... \n", "1 2 printed editions \n", "2 Collection d'E. Labrousse\\n \\n \\n ... \n", "3 1 printed edition \n", "4 Bibliothèque de la Société de l'Histoire du P... \n", "... ... \n", "132205 NaN \n", "132206 NaN \n", "132207 NaN \n", "132208 NaN \n", "132209 NaN \n", "\n", "[132210 rows x 10 columns]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# read the merged letters file into a Pandas dataframe\n", "merged_letters_file = '../data/emlo_letters.csv'\n", "df = pd.read_csv(merged_letters_file, sep='\\t')\n", "\n", "df" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "number of distinct authors: 14619\n", "number of distinct addressees: 7649\n" ] } ], "source": [ "# show the nnnumber of authors and addressees\n", "print('number of distinct authors:', df['author'].nunique())\n", "print('number of distinct addressees:', df['addressee'].nunique())\n", "\n" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Bodleian card catalogue 48668\n", "Groot, Hugo de 8034\n", "Huygens, Constantijn 7120\n", "Hartlib, Samuel 4719\n", "Andreae, Johann Valentin 3696\n", " ... \n", "Beeckman, Isaac 28\n", "Dudley, Anne 27\n", "Vernon, Margaret 21\n", "Baxter, Richard 8\n", "Culpeper, Cheney 3\n", "Name: collection, Length: 93, dtype: int64" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The correspondence collections in the dataset with the number of letters they contain.\n", "df.collection.value_counts()\n" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Groot, Hugo de, 1583-1645 4912\n", "Huygens, Constantijn, 1596-1687 3951\n", "Plantin, Christophe, 1520-1589 2331\n", "Vossius, Gerardus Joannes, 1577-1649 2292\n", "Peiresc, Nicolas-Claude Fabri de, 1580-1637 2111\n", " ... \n", "Farley (Mr), fl. 1775; Rose (Mr), fl. 1775 1\n", "Newton, James, fl. 1710-1713 1\n", "Martinus, William, fl. 1621 1\n", "Council of State of the Republic of the United Netherlands 1\n", "Montagu, Edward, 1562-1644 1\n", "Name: author, Length: 14619, dtype: int64" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The authors in the dataset with the number of letters they sent.\n", "df.author.value_counts()\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Huygens, Constantijn, 1596-1687 4737\n", "Hearne, Thomas, 1678-1735 3795\n", "Vossius, Gerardus Joannes, 1577-1649 3498\n", "Hartlib, Samuel, 1600-1662 3388\n", "Groot, Hugo de, 1583-1645 3233\n", " ... \n", "Blount, Edward, fl. 1724 1\n", "Baert, Pieter J., fl. 1676-1691 1\n", "Werndeley, (Reverend Mr), fl. 1711; Werndeley, sons of, fl. 1711 1\n", "Vossius, Gerardus, 1619-1640 1\n", "Heidelberg, ministers in, fl. 1655 1\n", "Name: addressee, Length: 7649, dtype: int64" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# The addressee in the dataset with the number of letters they received.\n", "df.addressee.value_counts()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "number of distinct authors: 14619\n", "number of distinct addressees: 7649\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Adjust the default size for figures so that placing two plots \n", "# next to each other in a sub plot are still big enough.\n", "plt.rcParams['figure.figsize'] = [15, 5]\n", "\n", "# create a plot canvas with two adjacent subplots\n", "plt.subplot(1,2,1)\n", "# Distribution of number of letters per author\n", "# Sub-plot 1 shows the number of letters by each letter author on normal scaled axes\n", "df['author'].value_counts().hist(bins=100)\n", "plt.ylabel('Number of authors')\n", "plt.xlabel('Number of letters authored')\n", "\n", "plt.subplot(1,2,2)\n", "# Sub-plot 1 shows the number of letters by each letter author on a log scaled y-axis\n", "df['author'].value_counts().hist(bins=100)\n", "plt.ylabel('Number of authors')\n", "plt.xlabel('Number of letters authored')\n", "plt.yscale('log')\n", "\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.subplot(1,2,1)\n", "# Number of letters by each letter addressee\n", "df['addressee'].value_counts().hist(bins=100)\n", "plt.xlabel('Number of letters received')\n", "plt.ylabel('Number of addressees')\n", "\n", "\n", "# Distribution of number of letters per addressee\n", "plt.subplot(1,2,2)\n", "df['addressee'].value_counts().hist(bins=100)\n", "plt.ylabel('Number of addressees')\n", "plt.xlabel('Number of letters received')\n", "plt.yscale('log')\n", "plt.show()\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3sAAAE/CAYAAAD/m9qwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAAAuQklEQVR4nO3df7yldV3v/dfbURSBRhGbGwEddMjOJB6l7a8sGy0TwgEPaUF0Thq3k5VmaSVm/ijvEk/hQyVPNik32oNApNIZodDKLecuEkRUQEIRp4TMyV8jw1Fw4HP/sa41s9yuvdfaP9a+1lr79Xw81mPW9V1rXddnfWb2fPfnur7f65uqQpIkSZI0Xe7TdgCSJEmSpJVnsSdJkiRJU8hiT5IkSZKmkMWeJEmSJE0hiz1JkiRJmkIWe5IkSZI0hSz2JEmSJGkKWexJkiRJ0hS6b9sBLMcRRxxRGzduXNY+7rzzTg455JCVCWjKmJv+zMv8zE1/5qW/xeTl2muv/XJVPXTEIY21JIcAHwFeV1UfGPR++8jVYY4GM0eDmaPBzNH8FuojJ7rY27hxIx/72MeWtY/Z2Vm2bNmyMgFNGXPTn3mZn7npz7z0t5i8JPnX0Uaz+pKcDzwb2F1Vj+lpPxF4C7AOeEdVndO89ArgkmH3bx+5OszRYOZoMHM0mDma30J9pMM4JUlqxwXAib0NSdYBbwNOAjYDZyTZnOSZwKeB3asdpCRpck30lT1JkiZVVV2ZZOOc5icCt1TVrQBJLgZOBQ4FDqFTAH4zyeVVde9qxitJmjwTWewl2Qps3bRpU9uhSJK0ko4CvtCzfRvwpKp6MUCS5wNfnq/QS7IN2AawYcMGZmdnlxXM3r17l72PaWeOBjNHg5mjwczR0kxksVdVO4GdMzMzL2w7FkmSVktVXTDg9e3AdoCZmZla7vwW58gMZo4GM0eDmaPBzNHSOGdPkqTxcTtwTM/20U2bJEmLZrEnSdL4uAY4LsmxSQ4CTgd2LGYHSbYm2b5nz56RBChJmhwWe5IktSDJRcBVwKOT3JbkrKraB7wYuAK4Cbikqm5czH6ramdVbVu/fv3KBy1JmigTOWdPkqRJV1VnzNN+OXD5KocjSZpCXtmTJGmKOIxTktRlsSdJ0hRxGKckqWvND+O8/vY9PP/sy/Zv7zrn5BajkSRpfPT2kfaPkjR5vLInSZIkSVPIYk+SpCninD1JUpfFniRJU8Q5e5KkLos9SZIkSZpCFnuSJEmSNIXGqthLckiSjyV5dtuxSJI0iZyzJ0nqGmmxl+T8JLuT3DCn/cQkNye5JcnZPS+9ArhklDFJkjTNnLMnSeoa9ZW9C4ATexuSrAPeBpwEbAbOSLI5yTOBTwO7RxyTJEmSJE29kS6qXlVXJtk4p/mJwC1VdStAkouBU4FDgUPoFIDfTHJ5Vd07yvgkSZIkaVqNtNibx1HAF3q2bwOeVFUvBkjyfODL8xV6SbYB2wA2bNjA7OzssoLZcDC8/Ph9+7eXu79psnfvXvPRh3mZn7npz7z0Z14kSRqtNoq9BVXVBQNe3w5sB5iZmaktW7Ys63jnXfh+zr3+QBp2nbm8/U2T2dlZlpvfaWRe5mdu+jMv/ZmX0UiyFdi6adOmtkORJLWsjbtx3g4c07N9dNM2NO80JklSf96gRZLU1Uaxdw1wXJJjkxwEnA7sWMwO7MgkSZIkaWGjXnrhIuAq4NFJbktyVlXtA14MXAHcBFxSVTeOMg5JkiRJWmtGfTfOM+Zpvxy4fKn7dT6CJEmSJC2sjWGcy+YwTkmSJEla2EQWe5IkqT9vYiZJ6rLYkyRpijj6RZLUNZHFnmctJUmSJGlhE1nsedZSkiRJkhY2kcWeJEmSJGlhFnuSJEmSNIUmsthzzp4kSZIkLWwiiz3n7EmSJEnSwiay2JMkSf05+kWS1GWxJ0nSFHH0iySpayKLPc9aSpIkSdLCJrLY86ylJEmSJC1sIos9SZIkSdLCLPYkSZIkaQpZ7EmSJEnSFLLYkyRJkqQpNJHFnnfjlCRJkqSFTWSx5904JUmSJGlhE1nsSZIkSZIWZrEnSZIkSVPIYk+SpCnivHZJUpfFniRJU8R57ZKkLos9SZIkSZpCFnuSJEmSNIUmsthzPoIkSZIkLWwiiz3nI0iSJEnSwiay2JMkSZIkLcxiT5IkSZKmkMWeJEmSJE0hiz1JkiRJmkIWe5IkSZI0hSz2JEmSJGkKWexJkiRJ0hSy2JMkSZKkKTSRxV6SrUm279mzp+1QJEmSJGksTWSxV1U7q2rb+vXr2w5FkqSRS/Jfkrw9yaVJfqnteCRJk2Eiiz1JkiZdkvOT7E5yw5z2E5PcnOSWJGcDVNVNVfUi4KeBp7YRryRp8ljsSZLUjguAE3sbkqwD3gacBGwGzkiyuXntFOAy4PLVDVOSNKks9iRJakFVXQl8dU7zE4FbqurWqrobuBg4tXn/jqo6CThzdSOVJE2q+7YdgCRJ2u8o4As927cBT0qyBTgNuD8LXNlLsg3YBrBhwwZmZ2eXFcyGg+Hlx+8DWPa+ptXevXvNzQDmaDBzNJg5WhqLPUmSxlxVzQKzQ7xvO7AdYGZmprZs2bKs45534fs59/rOrwq7zlzevqbV7Owsy83ztDNHg5mjwczR0jiMU5Kk8XE7cEzP9tFNmyRJi2axJ0nS+LgGOC7JsUkOAk4HdixmB65FK0nqstiTJKkFSS4CrgIeneS2JGdV1T7gxcAVwE3AJVV142L261q0kqQu5+xJktSCqjpjnvbLcXkFSdIK8MqeJElTxGGckqQuiz1JkqaIwzglSV0We5IkSZI0hcam2EvyX5K8PcmlSX6p7XgkSZIkaZKNtNhLcn6S3UlumNN+YpKbk9yS5GyAqrqpql4E/DTw1FHGJUnStHLOniSpa9RX9i4ATuxtSLIOeBtwErAZOCPJ5ua1U4DL8C5kkiQtiXP2JEldIy32qupK4Ktzmp8I3FJVt1bV3cDFwKnN+3dU1UnAmaOMS5KklZbkwUke23YckiR1tbHO3lHAF3q2bwOelGQLcBpwfxa4spdkG7ANYMOGDczOzi4rmA0Hw8uP37d/e7n7myZ79+41H32Yl/mZm/7MS3/TkJcks8ApdPrTa4HdSf6xql7WamCSJDFGi6pX1SwwO8T7tgPbAWZmZmrLli3LOu55F76fc68/kIZdZy5vf9NkdnaW5eZ3GpmX+Zmb/sxLf1OSl/VV9Y0k/zfw7qp6bZJPtRlQkq3A1k2bNrUZhiRpDLRxN87bgWN6to9u2iRJmjT3TXIknZuLfaDtYMA5e5KkA9oo9q4BjktybJKDgNOBHYvZgXcakySNid8DrgA+V1XXJHkk8NmWY5IkCRj90gsXAVcBj05yW5Kzqmof8GI6neNNwCVVdeNi9utZS0nSOKiq91bVY6vql5rtW6vqp9qOS5IkGPGcvao6Y572y3F5BUnShEvyfcCfABuq6jHN3ThPqar/p+XQJElqZRjnsjmMU5I0Jv4MeCXwbYCq+hSd6QmtsY+UJHVNZLHnME5J0ph4YFVdPadtX993rhL7SElS10QWe5IkjYkvJ3kUUABJngt8sd2QJEnqGDhnr+nEbququ5qFzx9LZy2hr482tAVjcg0hSdI4+BU6a79+f5Lbgc8DP9duSJIkdQxzZe8vgXuSbKLToR0D/MVIoxrAISqSpHHQ3H3zx4GHAt9fVT9cVbtaDkuSJGC4Yu/eZrmE/wacV1W/CRw52rAkSRp/STYkeSdwaVXdkWRzkrPajkuSJBiu2Pt2kjOAnwc+0LTdb3QhSZI0MS6gs27sw5rtzwC/1lYw4N04JUkHDFPsvQB4CvD7VfX5JMcCfz7asBZmRyZJGhNHVNUlwL0AzUiYe9oMyKkOkqSuBYu9JOuAV1XVr1bVRQBV9fmqeuOqRDcPOzJJ0pi4M8lDOHA3zicDnomUJI2FBe/GWVX3JHlEkoOq6u7VCkqSpAnxMmAH8Kgk/0jnRi3PbTckSZI6Bi69ANwK/GOSHcCd3caqetPIopIkaQJU1ceT/CjwaCDAzVX17ZbDkiQJGG7O3ufo3JjlPsBhPQ9Jkta0JM8DDq6qG4HnAO9JckK7UUmS1DHwyl5V/S5AkkOb7b2jDmoQF1WXJI2JV1fVe5P8MPBjwB8BfwI8qd2wJEka4speksckuQ64EbgxybVJfmD0oc3PG7RIksZE986bJwN/VlWXAQe1GI8kSfsNM4xzO/CyqnpEVT0CeDnwZ6MNS5KkiXB7kj8Ffga4PMn9Ga5vHRmXJ5IkdQ3TIR1SVR/ublTVLHDIyCKSJGly/DSdRdWfVVVfBw4HfrPNgBz9IknqGupunElezYGF1H+Ozh06JUla644ELququ5JsAR4LvLvViCRJagxzZe8X6Kwb9FfN46FNmyRJa91fAvck2URn2sMxwF+0G5IkSR3D3I3za8CvrkIsQ/NunJKkMXFvVe1LchpwXlWd19zUTJKk1g1zN87vS7I9yQeT/EP3sRrBzcf5CJKkMfHtJGcA/4POmrQA92sxHkmS9htmzt57gbcD7+DALaYlSRK8AHgR8PtV9fkkx3JgjrskSa0aptjbV1V/MvJIJEmaMFX16SSvAB7ebH8eeGO7UUmS1DHvMM4khyc5HNiZ5JeTHNlta9olSVrTmjnknwD+ttl+XJIdrQYlSVJjoSt71wIFpNnuXTeogEeOKihJkibE64AnArMAVfWJJPaPkqSxMG+xV1XHAiR5QFV9q/e1JA8YdWCSJE2Ab1fVniS9bfe2FYwkSb2GWWfvn4ZsWzVJtibZvmfPnjbDkCTpxiQ/C6xLclyS87CPlCSNiYXm7P1fSX4QODjJ45Oc0Dy2AA9crQD7cekFSdKYeAnwA8BddBZT3wP8WpsB2UdKkroWmrP3LOD5wNHAm3ra7wB+e4QxSZI09pKsAy6rqqcDr2o7HkmS5lpozt67gHcl+amq+stVjEmSpLFXVfckuTfJ+qpyzKQkaewMs87eY5L8wNzGqvq9EcQjSdIk2Qtcn+RDwJ3dxqr61fZCkiSpY5hib2/P8wcAzwZuGk04kiRNlL9qHpIkjZ2BxV5Vndu7neSPgCtGFpEkSROimfIgSdJYGubK3lwPpHPTFkmS1qQk1wM13+tV9dhVDEeSpL4GFntzOrR1wEMB5+tJktayZzd//krz5583f/4cCxSBkiStpmGu7D275/k+4EtVtW9E8UiSNPaq6l8Bkjyzqh7f89IrknwcOLudyCRJOmDeRdW7qupfm07tm3Su7D0sycNHHpkkSeMvSZ7as/FDDNG3SpK0GoYZxnkKcC7wMGA38Ag6d+P8ruUYVkuSrcDWTZs2tRWCJEkAZwHnJ1kPBPga8AvthiRJUscwZx9fDzwZ+ExVHQv8GPDPI41qgKraWVXb1q9f32YYkqQ1rqqurar/CvxX4LFV9biq+njbcUmSBMPN2ft2VX0lyX2S3KeqPpzkzaMOTJKkcZXkZfO0A1BVb1rVgCRJ6mOYYu/rSQ4FrgQuTLIbuHO0YbVn49mX7X++65yTW4xEkjTGDmv+fDTwBGBHs70VuLqViCRJmmOYYu9UOjdn+XXgTGA9Lr0gSVrDqup3AZJcCZxQVXc0268DLlvgo5IkrZqBxV5Vda/i3Qu8a7ThSJI0UTYAd/ds3920ragkzwFOBr4HeGdVfXCljzFI78gXcPSLJE0Cbw8tSdLSvRu4Osnrmqt6H2XIE6NJzk+yO8kNc9pPTHJzkluSnA1QVe+rqhcCLwJ+ZmW/giRpWlnsSZK0RFX1+3SWWvha83hBVf3BkB+/ADixtyHJOuBtwEnAZuCMJJt73vI7zeuSJA00b7GX5O+bP9+4euFIkjRZqupa4CLgr4GvJHn4kJ+7EvjqnOYnArdU1a1VdTdwMXBqOt4I/I1LO0iShrXQnL0jk/wQcEqSi+ksFrufnY0kaa1LcgpwLvAwYDfwcOBfgB9Y4i6PAr7Qs30b8CTgJcCPA+uTbKqqt88TzzZgG8CGDRuYnZ1dYhgdGw6Glx+/r+9ry933tNi7d6+5GMAcDWaOBjNHS7NQsfca4NXA0cDc9YIKeMaogpIkaUK8Hngy8HdV9fgkTwd+bqUPUlVvBd46xPu2A9sBZmZmasuWLcs67nkXvp9zr+//q8KuM5e372kxOzvLcvM87czRYOZoMHO0NPMWe1V1KXBpkldX1etXMSZJkibFt6vqK0nuk+Q+VfXhJG9exv5uB47p2T66aZMkadGGWXrh9c0wlac1TbNV9YHRhiVJ0kT4epJDgSuBC5PsBu4c8JmFXAMcl+RYOkXe6cDPLmYHSbYCWzdt2rSMMCRJ02Dg3TiTvAF4KfDp5vHSJMPeaUySpGl2KvB/gF8H/hb4HLB1mA8muQi4Cnh0ktuSnFVV+4AXA1cANwGXVNWNiwmoqnZW1bb169cv5mOSpCk08MoenUVcH1dV9wIkeRdwHfDbKx3MOCwaK0nSsKqqexXvXoZcX6/ns2fM0345cPkyQ5Mkaeh19h7U83xRpwpdNFaSpNWTZGuS7Xv27Gk7FElSy4Yp9t4AXJfkguaq3rXA7y/iGBfgorGSJK0Kh3FKkrqGuUHLRUlmgSc0Ta+oqv8Y9gBVdWWSjXOa9y8aC9Cs43dqkpuAc1hg0VjXEFo9rmfSn3mZn7npz7z0N8l5SfL3VfVjSd5YVa9oOx5JkvoZZs4eVfVFYMcKHnfJi8a6htDqcT2T/szL/MxNf+alvwnPy5FJfgg4pTlhmd4X5zthKUnSahqq2Fstwy4aK0lSy14DvJrOOnhvmvNaAc9Y9YgaLr0gSeoa9gYtK21Zi8Y6+VyS1KaqurSqTgL+Z1U9fc6jtUKvic05e5IkYECxl2Rdkn8ZwXH3Lxqb5CA6i8YOPUzUjkySNA6q6vVJTknyR83j2W3HJElS14LFXlXdA9yc5OFLPcCoFo2VJKltSd4AvBT4dPN4aZI/aDcqSZI6hpmz92DgxiRXA93FY6mqU4Y5wCgWjXU+giRpTJwMPK6q7gVolii6DvjttgKyj5QkdQ1T7L165FEsUlXtBHbOzMy8sO1YJElr3oOArzbPW59fYB8pSeoaZp29jyR5BHBcVf1dkgcC60YfmiRJY+8NwHVJPkxn+YWnAWe3G5IkSR0Di70kL6SziPnhwKPorJH3duDHRhuaJEnjraouSjILPKFpekVV/UeLIUmStN8wwzh/BXgi8FGAqvpsku8daVQDOB9BkjQuquqLLOKO0pIkrZZh1tm7q6ru7m4kuS+dBWNb49ILkiT151q0kqSuYYq9jyT5beDgJM8E3gvsHG1YkiRpKTwhKknqGqbYOxv4T+B64BfpLJfwO6MMSpKkcZdkXZJ/aTsOSZLmM8zdOO9t1g36KJ3hmzdXVavDOJ2zJ0lqW1Xdk+TmJA+vqn9rOx5JkuYa5m6cJ9O5++bn6NxW+tgkv1hVfzPq4OazWmsIbTz7su/Y3nXOyaM8nCRp8jwYuDHJ1cCd3caqOqW9kFZHbx9p/yhJ42mYu3GeCzy9qm4BSPIo4DKgtWJPkqQx8eq2A5AkaT7DFHt3dAu9xq3AHSOKR5KkiVFVH0nyCOC4qvq7JA8E1rUZk1MdJEld896gJclpSU4DPpbk8iTPT/LzdO7Eec2qRdg/Nm8rLUlqXZIXApcCf9o0HQW8r7WA8G6ckqQDFrob59bm8QDgS8CPAlvo3Jnz4JFHtgA7MknSmPgV4KnANwCq6rPA97YakSRJjXmHcVbVC1YzEEmSJtBdVXV3EgCS3JfOnaslSWrdMHfjPBZ4CbCx9/1r4U5jkiQN8JEkvw0cnOSZwC/Tme4gSVLrhrlBy/uAd9LpvO4daTSSJE2Ws4GzgOuBXwQuB97RakSSJDWGKfa+VVVvHXkkkiRNmKq6N8m7gI/SGb55c1U5jFOSNBaGKfbekuS1wAeBu7qNVfXxkUU1gLeVliSNgyQnA28HPgcEODbJL1aVa9FKklo3TLF3PPDfgWdwYBhnNdutqKqdwM6ZmZkXthWDJEnAucDTu+vRJnkUcBnQWrHnCVFJUtcwxd7zgEdW1d2jDkaSpAlzR7fQa9wK3NFWMOAJUUnSAcMUezcADwJ2jzYUSZImQ5LTmqcfS3I5cAmdUS/PA65pLTBJknoMU+w9CPiXJNfwnXP21tzSCxvPvmz/813nnNxiJJKklm3tef4l4Eeb5/8JHLz64UiS9N2GKfZeO/IoJEmaIFX1grZjkCRpkIHFXlV9ZDUCkSRp0iQ5FngJsJGePnUtjn6RJI2fgcVekjvozEMAOAi4H3BnVX3PKAOTJGkCvA94J7CTA3esliRpLAxzZe+w7vMkAU4FnjzKoAbxttKSpDHxrap6a9tBtK13Tjs4r12SxsV9FvPm6ngf8KzRhDN0HDuratv69evbDEOSpLckeW2SpyQ5oftoOyhJkmC4YZyn9WzeB5gBvjWyiCRJmhzHA/8deAYHhnFWsy1JUquGuRtn7+2l9wG76AzllCRprXse8MiqurvtQCRJmmuYOXveXlqSpP5uoLMe7e6W49jPee2SpK55i70kr1ngc1VVrx9BPJIkTZIHAf+S5Brgrm5jm0svVNVOYOfMzMwL24pBkjQeFrqyd2eftkOAs4CHABZ7kqS17rVtByBJ0nzmLfaq6tzu8ySHAS8FXgBcDJw73+ckSVorquojbccgSdJ8Fpyzl+Rw4GXAmcC7gBOq6murEZgkSeMuyR107r4JcBBwP+DOqvqe9qKSJKljoTl7fwicBmwHjq+qvasWlSRJE6CqDus+TxI6d6t+cnsRSZJ0wEKLqr8ceBjwO8C/J/lG87gjyTdWJ7z+kmxNsn3Pnj1thiFJ0n7V8T7gWW3HIkkSLDxnb6FCsFXeaUySNA6SnNazeR9gBvhWS+FIkvQdhllUXZIk9be15/k+YBedoZySJLXOYk+SpCWqqhe0HYMkSfOx2JMkaZGSvGaBl6uqXItWktQ6iz1Jkhbvzj5thwBnAQ8BLPYkSa2z2JMkaZGq6tzu8ySHAS8FXgBcDJw73+fWio1nX7b/+a5zTm4xEkla2yz2JElagiSHAy8DzgTeBZxQVV9rNypJkg6w2JMkaZGS/CFwGrAdOL6q9rYckiRJ32Vs19KTJGmMvRx4GPA7wL8n+UbzuCPJN1qOTZIkwCt7kiQtWlWt6snSJI8EXgWsr6rnruaxJUmTy2JPkqQWJDkfeDawu6oe09N+IvAWYB3wjqo6p6puBc5Kcmk70S5d781awBu2SNJqchinJEntuAA4sbchyTrgbcBJwGbgjCSbVz80SdI0sNiTJKkFVXUl8NU5zU8EbqmqW6vqbjpLOZy66sFJkqbC2AzjdD6CJEkcBXyhZ/s24ElJHgL8PvD4JK+sqjf0+3CSbcA2gA0bNjA7O7usYDYcDC8/ft+y9jHXcmMaN3v37p2677TSzNFg5mgwc7Q0Iy321sp8BEmSRqmqvgK8aIj3baezHAQzMzO1ZcuWZR33vAvfz7nXr+yvCrvO3LKi+2vb7Owsy83ztDNHg5mjwczR0oz6yt4FwB8D7+429MxHeCadM5bXJNlRVZ8ecSwrygnnkqQRuB04pmf76KZtaEm2Als3bdq0knFJkibQSOfsOR9BkqRFuQY4LsmxSQ4CTgd2LGYHVbWzqratX79+JAFKkiZHG3P2pnI+Qm8c19++5zteO/6oyexwHRvdn3mZn7npz7z0t9bzkuQiYAtwRJLbgNdW1TuTvBi4gs5Uh/Or6sYWw5QkTbCxuUHLpM9H6J2D8Py5QzwndH6CY6P7My/zMzf9mZf+1npequqMedovBy5f5XAkSVOojaUXlj0fQZIk9Zdka5Lte/bsGfxmSdJUa6PYW/Z8BDsySZL6c86eJKlrpMVeMx/hKuDRSW5LclZV7QO68xFuAi5Z7HwEOzJJkiRJWthI5+w5H0GSpNU1SUsvrMQyRi6FJEnzG5sbtCzGOHZkczsbSZLaUFU7gZ0zMzMvbDsWSVK72pizt2wO45QkSZKkhU1ksSdJkiRJWpjDOFdB7xBP5xJIkiRJWg0TeWXPYZySJPXn8kSSpK6JLPYkSVJ/nhCVJHVZ7EmSJEnSFHLO3ipz/p4kSZKk1TCRV/YcoiJJkiRJC5vIK3uSJKm/cR/90jvCZdj3ORJGkpZmIq/sSZKk/hz9IknqstiTJEmSpCk0kcM4x32IylI5ZEWSJEnSSpnIK3sOUZEkSZKkhU1ksSdJkiRJWthEDuOUJEn9TetUh6WYe+dPp0hIWmu8sidJ0hRxqoMkqctiT5IkSZKm0EQWe0m2Jtm+Z8+etkORJEmSpLE0kcWeQ1QkSZIkaWETWexJkiRJkhZmsSdJkiRJU8hiT5IkSZKmkOvsSZI0Rdb6Ontz19bTwnrz5TqE0vTxyp4kSVPEm5hJkrom8sretJy1XMzZx6WeefOMnSRJkrQ2TeSVPc9aSpIkSdLCJrLYkyRJkiQtzGJPkiRJkqaQxZ4kSZIkTSGLPUmSJEmaQhZ7kiRJkjSFLPYkSZIkaQpZ7EmSJEnSFJrIRdUlSVJ/SbYCWzdt2tR2KIu28ezLVm3/u845eeL2v9Dx5lqN4+s7rfbf/3zHbuP4Gl9e2ZMkaYpU1c6q2rZ+/fq2Q5EktWwir+xN8lnLYS10tm6pZ2/G9azPuMa1GG2ezZMkSZL6mcgre561lCRJkqSFTWSxJ0mSJElamMWeJEmSJE0hiz1JkiRJmkIWe5IkSZI0hSz2JEmSJGkKWexJkiRJ0hSy2JMkSZKkKWSxJ0mSJElTyGJPkiRJkqaQxZ4kSZIkTSGLPUmSJEmaQhZ7kiRJkjSF7tt2AF1JDgH+F3A3MFtVF7YckiRJY8E+UpK0FCO9spfk/CS7k9wwp/3EJDcnuSXJ2U3zacClVfVC4JRRxiVJUtvsIyVJozbqYZwXACf2NiRZB7wNOAnYDJyRZDNwNPCF5m33jDguSZLadgH2kZKkEUpVjfYAyUbgA1X1mGb7KcDrqupZzfYrm7feBnytqj6Q5OKqOn2e/W0DtgFs2LDhBy+++OJlxbf7q3v40jeXtYupteFg+NI34fij1u9vu/72Pd/xnt7XFrLQ55a6z5WwlGPv3buXQw89dN79LDUni41jHPXLzVrT79/CWszLMD8Ti8nL05/+9GuramZFghsj9pFLs1Afstq6feUgo/h/fdjvPmy+5sa4lL6tn96f9WGPv1LHXk3Dxtzvd49ujkbxe9aw71uN38eW8/c6LX3pKPK8UB/Zxpy9ozhwdhI6HdiTgLcCf5zkZGDnfB+uqu3AdoCZmZnasmXLsoI578L3c+71YzN1cay8/Ph9nHv9fdl15pb9bc8/+7LveE/vawtZ6HNL3edKWMqxZ2dnmfvvrnc/S83JYuMYR/1ys9b0+7ewFvMyzM/EWszLEOwjh7BQH7Laun3lIKP4f33Y7z5svubGuJS+rZ/en/Vhj79Sx15Nw8bc73ePbo5G8XvWsO9bjd/HlvP3Oi19xmr/3js2/4NX1Z3AC9qOQ5KkcWMfKUlaijaWXrgdOKZn++imbWhJtibZvmdPu0M3JElaYfaRkqQV00axdw1wXJJjkxwEnA7sWMwOqmpnVW1bv34yxnBLkjQk+0hJ0ooZ9dILFwFXAY9OcluSs6pqH/Bi4ArgJuCSqrpxlHFIkjRu7CMlSaM20jl7VXXGPO2XA5cvdb9JtgJbN23atNRdSJLUqlH1kZIkdbUxjHPZHKIiSVJ/ztmTJHVNZLEnSZL684SoJKnLYk+SJEmSptBEFnsOUZEkqT/7SElS10QWew5RkSSpP/tISVLXRBZ7kiRJkqSFparajmHJkvwn8K/L3M0RwJdXIJxpZG76My/zMzf9mZf+FpOXR1TVQ0cZzLSxj1w15mgwczSYORrMHM1v3j5yoou9lZDkY1U103Yc48jc9Gde5mdu+jMv/ZmX8eff0WDmaDBzNJg5GswcLY3DOCVJkiRpClnsSZIkSdIUstiD7W0HMMbMTX/mZX7mpj/z0p95GX/+HQ1mjgYzR4OZo8HM0RKs+Tl7kiRJkjSNvLInSZIkSVNoTRd7SU5McnOSW5Kc3XY8o5bk/CS7k9zQ03Z4kg8l+Wzz54Ob9iR5a5ObTyU5oeczP9+8/7NJfr6N77KSkhyT5MNJPp3kxiQvbdrNTfKAJFcn+WSTm99t2o9N8tEmB+9JclDTfv9m+5bm9Y09+3pl035zkme19JVWVJJ1Sa5L8oFm27wASXYluT7JJ5J8rGlb8z9Pk2St9Y+97CsHs98czP5zePalI1ZVa/IBrAM+BzwSOAj4JLC57bhG/J2fBpwA3NDT9j+Bs5vnZwNvbJ7/JPA3QIAnAx9t2g8Hbm3+fHDz/MFtf7dl5uVI4ITm+WHAZ4DN5qZovuOhzfP7AR9tvvMlwOlN+9uBX2qe/zLw9ub56cB7muebm5+x+wPHNj9769r+fiuQn5cBfwF8oNk2L53vtQs4Yk7bmv95mpTHWuwf53x/+8rBObLfHJwj+8/hc2VfOsLHWr6y90Tglqq6taruBi4GTm05ppGqqiuBr85pPhV4V/P8XcBzetrfXR3/DDwoyZHAs4APVdVXq+prwIeAE0ce/AhV1Rer6uPN8zuAm4CjMDc033Fvs3m/5lHAM4BLm/a5uenm7FLgx5Kkab+4qu6qqs8Dt9D5GZxYSY4GTgbe0WwH87KQNf/zNEHWXP/Yy75yMPvNwew/h2NfOnprudg7CvhCz/ZtTdtas6Gqvtg8/w9gQ/N8vvxMdd6aIQGPp3MGztywf3jFJ4DddDrizwFfr6p9zVt6v+f+HDSv7wEewnTm5s3AbwH3NtsPwbx0FfDBJNcm2da0+fM0Ocz9d/Pf7zzsN+dn/zmUN2NfOlJrudjTHFVVdH5JW5OSHAr8JfBrVfWN3tfWcm6q6p6qehxwNJ0zZd/fbkTtS/JsYHdVXdt2LGPqh6vqBOAk4FeSPK33xbX886TJ57/fA+w3F2b/uTD70tWxlou924FjeraPbtrWmi81Qylo/tzdtM+Xn6nMW5L70emwLqyqv2qazU2Pqvo68GHgKXSG4Ny3ean3e+7PQfP6euArTF9ungqckmQXnSFuzwDegnkBoKpub/7cDfw1nV9y/HmaHOb+u/nvdw77zeHZf87LvnQVrOVi7xrguOaOPwfRmei5o+WY2rAD6N796ueB9/e0/4/mDlpPBvY0QzOuAH4iyYObu2z9RNM2sZrx3u8EbqqqN/W8ZG6ShyZ5UPP8YOCZdOZmfBh4bvO2ubnp5uy5wD80Z3d3AKc3d9I6FjgOuHpVvsQIVNUrq+roqtpI5/+Of6iqM1njeQFIckiSw7rP6fwc3IA/T5PE/vG7+e+3h/3mYPafg9mXrpIa4d1fxv1B5+5Qn6EzhvpVbcezCt/3IuCLwLfpjGc+i85Y578HPgv8HXB4894Ab2tycz0w07OfX6Az+fUW4AVtf68VyMsP0xlq8ingE83jJ81NATwWuK7JzQ3Aa5r2R9L5j/QW4L3A/Zv2BzTbtzSvP7JnX69qcnYzcFLb320Fc7SFA3cQW/N5aXLwyeZxY/f/Vn+eJuux1vrHOd/dvnJwjuw3B+fI/nNx+bIvHdEjTYIkSZIkSVNkLQ/jlCRJkqSpZbEnSZIkSVPIYk+SJEmSppDFniRJkiRNIYs9SZIkSZpCFnuaCEkqybk927+R5HUrtO8Lkjx38DuXfZznJbkpyYfntG9McsOAz25M8rM9249L8pOjinUx5saS5HVJfmMVjrsqx5GkSWA/Ob795DCSPCzJpSu0r9kkMyuxL00+iz1NiruA05Ic0XYgvZLcdxFvPwt4YVU9fQmH2gj8bM/24+isaTS0Rca6GI9jkbHMp1lw1/+XJGnx7Cdb6CeTrFvsZ/qpqn+vqpEX1Fp7/KVKk2IfsB349bkvzD3jmGRv8+eWJB9J8v4ktyY5J8mZSa5Ocn2SR/Xs5seTfCzJZ5I8u/n8uiR/mOSaJJ9K8os9+/3fSXYAn+4TzxnN/m9I8sam7TV0FqF9Z5I/nO9LzndM4BzgR5J8IskrgN8DfqbZ/pkkhyQ5v/lu1yU5tdnf85PsSPIPwN8nOTLJlc3nbkjyI31ieE1z/BuSbE+Spn3/mcIkRyTZleSgubE0u9ncvP/WJL/as++XNfu9IcmvNW0bk9yc5N10Fp49Jslv9uTgd3s+/6rm7+j/Ax49Xx4laQ2yn1y9fnJXkjcm+TjwvCQ/keSqJB9P8t4khzbve0KSf0ryyea4hy2Qs/1XL5P8c5If6DnebJKZBb7DwUkuTueq6F8DB8+XP61Bba/q7sPHMA9gL/A9wC5gPfAbwOua1y4Antv73ubPLcDXgSOB+wO3A7/bvPZS4M09n/9bOic/jgNuAx4AbAN+p3nP/YGPAcc2+70TOLZPnA8D/g14KHBf4B+A5zSvzQIzfT6zEbiheb7QMT/Q85nnA3/cs/0HwM81zx8EfAY4pHnfbcDhzWsvB17VPF8HHNYnnsN7nv85sHVu/MARwK55Ynkd8E9N/EcAXwHuB/wgcH0T16HAjcDjm+9/L/Dk5vM/QecXljR/Jx8Antbz+QfS+bdwC/Abbf/b9OHDh49xeGA/uYXV6yd3Ab/VPD8CuBI4pNl+BfAa4CDgVuAJTfv3NN93vvh7v+Ov9/w9HAncPOA7vAw4v2l/LJ3C/7vy6GNtPkY1rEtacVX1jebqz68C3xzyY9dU1RcBknwO+GDTfj3QO0zkkqq6F/hskluB76dTdDy252zoejqd3N3A1VX1+T7HewIwW1X/2RzzQjqFyvuGjHehYw763Ck5MIftAcDDm+cfqqqvNs+vAc5Pcj/gfVX1iT77enqS36JTVB1OpyjbOWT8XZdV1V3AXUl2AxvonLH966q6EyDJXwE/AuwA/rWq/rnnu/wEcF2zfSidHBzWfP7/NJ/fsciYJGmq2U8O/NxK9ZMA72n+fDKwGfjHdAbCHARcRWf0yRer6hro/N0AJJkv/s/07PsSOn8PrwV+GujO5ZvvOzwNeGtznE8l+dSAXGgNsdjTpHkz8HHg/+1p20czJDmd+V4H9bx2V8/ze3u27+U7//3XnOMUnStLL6mqK3pfSLKFzhnLUVjomIM+91NVdfOczz2Jnlir6sokTwNOBi5I8qaqenfP+x8A/C86ZwS/kM7k/gc0L+/Pc0/bfHrzfg+D/6/pzWeAN1TVn875Lr82YB+SJPvJhT637H6yR/czoVMsnjFnv8cvMv6NPTHcnuQrSR4L/AzwogHfYZ5DSc7Z04RpzrxdQmcSd9cuOkP8AE6hM2RwsZ6X5D7N/IRHAjcDVwC/1JzdI8n3JTlkwH6uBn40nTlt64AzgI8sIo75jnkHnStbXXO3rwBekuyfX/f4fjtP8gjgS1X1Z8A7gBPmvKVbxH25mXPQO1l8Fwfy3Ns+N5b5/G/gOUke2Hyn/9a0zXUF8As9cx6OSvK9dIbJPKeZm3AYsHWIY0rSmmI/ud+o+sm5/hl4apJNzecPSfJ9dPJzZJInNO2HpXMDmGFz9h7gt4D1VdW9Ujffd7iS5uY0SR5DZyinBFjsaTKdS2eMfNef0ek4Pgk8haWdTfw3Oh3Q3wAvqqpv0flP/tPAx5tJ03/KgCtUzVCYs4EPA58Erq2q9y8ijvmO+SngnmaS9683+9+cAzdFeT2dzvtTSW5stvvZAnwyyXV0zha+ZU78X6eTzxvodCrX9Lz8R3Q6qOv4zvzPjaWvqvo4nXkfVwMfBd5RVdf1ed8Hgb8ArkpyPZ3hK4c1n38Pnbz+zZzYJEkH2E+OqJ/s833+k868v4ua4ZNXAd9fVXc3nz+vyfuH6JxQHTZnlwKn0yncu+b7Dn8CHJrkJjo3prl2oZi1tqRq7lV5SZIkSdKk88qeJEmSJE0hiz1JkiRJmkIWe5IkSZI0hSz2JEmSJGkKWexJkiRJ0hSy2JMkSZKkKWSxJ0mSJElTyGJPkiRJkqbQ/w8fWDnsP+hxaQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.subplot(1,2,1)\n", "# Number of letters by each letter addressee\n", "df['author'].value_counts().hist(bins=100)\n", "plt.ylabel('Number of authors')\n", "plt.xlabel('Number of letters authored')\n", "plt.yscale('log')\n", "\n", "\n", "# Distribution of number of letters per addressee\n", "plt.subplot(1,2,2)\n", "df['addressee'].value_counts().hist(bins=100)\n", "plt.ylabel('Number of addressees')\n", "plt.xlabel('Number of letters received')\n", "plt.yscale('log')\n", "plt.show()\n", "\n" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3sAAAFCCAYAAABIJ8SvAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAABF5ElEQVR4nO3dfZykZXng+9/VTY32IE5jIFmnBRnFjMGMMElHybIbwU0yGjM4O4pI4p4T1wMxmzdNMpshIb5EzeBONMasiSGRQ5JNEEQyYQLuuBtU9rhqGBxxQB0l+AKNG4jaI0ILPT3X+aOqeqprqqqrurv6qZff9/OpD11PPS9XP930Nff93Pd1R2YiSZIkSRosI0UHIEmSJElaeTb2JEmSJGkA2diTJEmSpAFkY0+SJEmSBpCNPUmSJEkaQDb2JEmSJGkA2diTJEmSpAF0QtEBLMcpp5ySZ5xxRtFhSJK67I477viXzDy16Dj6iTlSkoZDqxzZU429iDgR+Bjwpsz8+8X2P+OMM9i/f3/3A5MkFSoivlp0DP3GHClJw6FVjuzqMM6IuDoiHoyIu+q2vygiDkXEPRGxs+aj3wSu72ZMkiRJkjQMuj1n7xrgRbUbImIUeA/wYuAs4JKIOCsifgL4HPBgl2OSJEmSpIHX1WGcmXlbRJxRt/l5wD2ZeS9ARLwfeCnwJOBEyg3AmYi4JTOPdjM+SZIkSRpURczZmwDuq3l/P/D8zPwlgIj4OeBfmjX0IuIy4DKA008/vbuRSpLUZyJiK7D1zDPPLDoUSVLBem7phcy8plVxlsy8KjMnM3Py1FMtzCZJUq3M3JuZl61bt67oUCRJBSuisTcFnFbz/mmVbZIkSZKkFVJEY+924FkRsSEi1gCvBG7q5AQRsTUirjp8+HBXApQkSZKkftftpReuBT4BbIyI+yPiNZl5BPglYB/weeD6zLy7k/M6REWSJEmSWut2Nc5Lmmy/Bbilm9dezJ4DU+zed4gHpmdYPz7Gji0b2bZ5osiQJEnqCeZISRoMRVTjXLblVhrbc2CKy288yMzsHABT0zNcfuNBAJOZJGmomSMlaXD0XDXOdix3GOfufYfmk1jVzOwcu/cdWonwJEkqzHLntZsjJWlw9GVjb7kemJ7paLskSf1iuR2i5khJGhxD2dhbPz7W0XZJkoaFOVKSBkdfNvaWO0Rlx5aNjJVGF2wbK42yY8vGlQhPkqS+ZY6UpMHRl4295Q5R2bZ5gl3bNzExPkYAE+Nj7Nq+yYnnkqShZ46UpMHRl9U4V8K2zRMmLkmSGjBHStJg6Msne5IkSZKk1vqysbfcOXuSJEmSNOj6srG33Dl7kiRJkjTo+rKxJ0mSGnP0iySpysaeJEkDxNEvkqQqG3uSJEmSNID6srHnEBVJkiRJaq0vG3sOUZEkSZKk1vqysSdJkiRJas3GniRJkiQNIBt7kiRJkjSAbOxJkiRJ0gDqy8ae1TglSZIkqbW+bOxZjVOSJEmSWuvLxp4kSZIkqTUbe5IkDRCnOkiSqmzsSZI0QJzqIEmqsrEnSZIkSQPIxp4kSZIkDSAbe5IkSZI0gPqysefkc0mSJElqrS8be04+lyRJkqTW+rKxJ0mSJElq7YSiAxgmew5MsXvfIR6YnmH9+Bg7tmxk2+aJosOSJEmSNIBs7K2SPQemuPzGg8zMzgEwNT3D5TceBLDBJ0kaanaGSlJ3OIxzlezed2i+oVc1MzvH7n2HCopIkqTiVTtDp6ZnSI51hu45MFV0aJLU92zsrZIHpmc62i5J0jCwM1SSusfG3ipZPz7W0XZJkoaBnaGS1D029lbJji0bGSuNLtg2Vhplx5aNBUUkSVLx7AyVpO6xsbdKtm2eYNf2TUyMjxHAxPgYu7ZvcgK6JGmo2RkqSd1jNc5VtG3zhI07SZJqVPOi1TglaeX1ZWMvIrYCW88888yiQ5EkSctkZ6gkdUdfDuPMzL2Zedm6deuKDkWSpK6LiB+IiPdGxA0R8QtFxyNJ6g992diTJKnfRcTVEfFgRNxVt/1FEXEoIu6JiJ0Amfn5zHwt8ArgvCLilST1Hxt7kiQV4xrgRbUbImIUeA/wYuAs4JKIOKvy2YXAzcAtqxumJKlf2diTJKkAmXkb8M26zc8D7snMezPzceD9wEsr+9+UmS8GfrbZOSPisojYHxH7H3rooW6FLknqE31ZoEWSpAE1AdxX8/5+4PkRcT6wHXgCLZ7sZeZVwFUAk5OT2bUoJUl9wcaeJEk9LjM/Cny04DAkSX3GYZySJPWOKeC0mvdPq2xrW0RsjYirDh8+vKKBSZL6j409SZJ6x+3AsyJiQ0SsAV4J3NTJCVyeSJJUZWNPkqQCRMS1wCeAjRFxf0S8JjOPAL8E7AM+D1yfmXcXGackqX85Z0+SpAJk5iVNtt+CyytIklaAT/YkSRogztmTJFXZ2JMkaYA4Z0+SVGVjT5IkSZIGkI09SZIkSRpANvYkSRogztmTJFX1TGMvIn4gIt4bETdExC8UHU8v2nNgivOuvJUNO2/mvCtvZc+BjtbZlSQNAefsSZKqutrYi4irI+LBiLirbvuLIuJQRNwTETsBMvPzmfla4BXAed2Mqx/tOTDF5TceZGp6hgSmpme4/MaDNvgkSZIkNdTtJ3vXAC+q3RARo8B7gBcDZwGXRMRZlc8uBG7G9YWOs3vfIWZm5xZsm5mdY/e+QwVFJEmSJKmXdbWxl5m3Ad+s2/w84J7MvDczHwfeD7y0sv9Nmfli4GebnTMiLouI/RGx/6GHHupW6D3ngemZjrZLkiRJGm5FzNmbAO6reX8/MBER50fEuyPiT2nxZC8zr8rMycycPPXUU7sda89YPz7W0XZJ0nCyQIskqapnCrRk5kcz81cy8+cz8z1Fx9NrdmzZyFhpdMG2sdIoO7ZsLCgiSVIvskCLJKnqhAKuOQWcVvP+aZVtbYuIrcDWM888cyXj6mnbNk8A5bl7D0zPsH58jB1bNs5vlyRJkqRaRTT2bgeeFREbKDfyXgn8TCcnyMy9wN7JyclLuxBfz9q2ecLGnSRJkqS2dHvphWuBTwAbI+L+iHhNZh4BfgnYB3weuD4z7+5mHJIkSZI0bLr6ZC8zL2my/RZcXkGSpBU3jFMdoLwerVMdJGmhninQ0gkrjUmS1NgwFmjZc2CKy288yNT0DAlMTc9w+Y0H2XOgo5IAkjRw+rKxN4yJbCn2HJjivCtvZcPOmznvyltNepKkgbR73yFmZucWbJuZnWP3vkMFRSRJvaGIAi1aBdVezmryq/ZyAg5rkSQNlAemZzraLknDoi+f7DmMc3H2ckqShsX68bGOtkvSsOjLxp7DOBdnL6ckaVjs2LKRsdLogm1jpVF2bNlYUESS1Bscxjmg1o+PMdWgYWcvpyRp0FSnJ3RSjdPqnZKGgY29AbVjy8YFc/bAXk5J6qaIOBk4LTM/W3AcQ7n0wrbNE2031pzXLmlY9OUwTi1u2+YJdm3fxMT4GAFMjI+xa/smk5gkraCI+GhEPDkingJ8GviziHhnkTE51WFxzmuXNCz68snesPZadqqTXk5J0pKsy8xvR8T/A/xlZr4xIgp9sqfFOa9d0rDoyyd79lpKknrECRHxVOAVwN8XHYzaY/VOScOiLxt7kiT1iN8F9gH/lJm3R8QzgC8VHJMWYfVOScOiL4dxSpLUCzLzA8AHat7fC7ysuIjUjqVU75SkfmRjT5KkJYqI7wf+BPi+zPzBiHgucGFmvrXg0LQI57VLGgZ9OYwzIrZGxFWHDx8uOhRJ0nD7M+ByYBagsuzCKwuNSJKkir5s7FmgRZLUI9Zm5j/WbTtSSCQVdohKkqoWbexFxDMj4gmVr8+PiF+JiPGuRyZJUu/7l4h4JpAAEfFy4OtFBmSHqCSpqp05ex8EJiPiTOAq4O+AvwF+qpuBaXXsOTDlBHVJWrpfpJwbnx0RU8CXgVcVG5IkSWXtNPaOZuaRiPj3wB9l5h9FxIFuB6bu23NgistvPMjM7BwAU9MzXH7jQaA8cd2GoCS1Vqm++eMRcSIwkpkPFx2TJElV7TT2ZiPiEuD/BrZWtpW6F5JWy+59h+YbelUzs3Ps3ncIoGVDUJIEEfF9wO8B6zPzxRFxFvCjmfm+gkOTJKmtAi2vBn4UeFtmfjkiNgB/1d2wWnPy+cp4YHqm6fbFGoKSJACuobyo+vrK+y8CrysqGEmSarVs7EXEKPDbmfkrmXktQGZ+OTPfvirRNeHk85Wxfnys6fZWDUFJ0rxTMvN64ChAZh4B5lofIknS6mjZ2MvMOeDpEbFmleLRKtqxZSNjpdEF28ZKo+zYsrFlQ1CSNO+RiPgejlXjPBdw2IkkqSe0M2fvXuDjEXET8Eh1Y2a+s2tRaVVU5941K8JSO2cPjjUEJUnzfg24CXhmRHwcOBV4ebEhSZJU1k5j758qrxHgpO6Go9W2bfNEw4IrizUEJUmQmZ+OiBcAG4EADmXmbMFhSZIEtNHYy8w3A0TEkyrvv9PtoNQbmjUEJUllEXER8N8z8+6IuAL4oYh4a2Z+uujYtHwuQSSp3y1ajTMifrCyrt7dwN0RcUdEPKf7oUmS1PN+JzMfjoh/A/w74H3AnxQck1ZAdS3aqekZkmNLEO05MFV0aJLUtnaWXrgK+LXMfHpmPh34deDPuhuWJEl9oTqx+SXAn2XmzUChRc1cnmhluASRpEHQTmPvxMz8SPVNZn4UOLFrEbXBRCZJ6hFTEfGnwMXALRHxBNrLrV3j8kQrwyWIJA2CdhLSvRHxOxFxRuV1BeUKnYUxkUmSesQrKC+qviUzp4GnADsKjUgrwiWIJA2Cdhp7/5FyKekbK69TK9skSRp2TwVuzswvRcT5wEXAPxYakVZEq7VoJalftFON81vAr6xCLJIk9ZsPApMRcSblOe5/B/wN8FOFRqVlcwkiSYNg0cZeRHw/8BvAGbX7Z+YLuxeWJEl94WhmHomI7cAfZeYfVSpYawC0WoLIZRkk9YN2FlX/APBe4M85VnVMkiTBbERcAvxfwNbKtlKB8WgVVJdlqFbrrC7LANjgk9RT2mnsHclM1wzSAvZoShIArwZeC7wtM78cERuAvyo4JnVZq2UZzIWSeknTxl5EPKXy5d6I+E/A3wKPVT/PzG92OTb1KHs0JaksMz8XEb8JnF55/2Xg7cVGpW5zWQZJ/aLVk707gASi8r62lHQCz+hWUOptzXo037z3bp/2SRoqEbEV+H3KC6lviIhzgN/NzAsLDUxdtX58jKkGDTuXZZDUa5ouvZCZGzLzGcAPVL6efwFnrV6I6jXNei6/9egsU9MzJMee9u05MLW6wUnS6noT8DxgGiAzP4OdoQPPZRkk9Yt21tn7321u05Bot+eyOn9BkgbYbGYertt2tJBItGq2bZ5g1/ZNTIyPEcDE+Bi7tm9i2+YJ9hyY4rwrb2XDzps578pb7fSUVKhWc/b+FTABjEXEZo4N53wysHYVYmuqMmxm65lnnllkGENrx5aNC+bsteL8BUkD7u6I+BlgNCKeRXldWjtEh0CjZRmc0y6p17Sas7cF+DngacA7a7Y/DPxWF2NaVGbuBfZOTk5eWmQcw6rRQrOPPHaE6ZnZ4/YdX1vivCtvdR6fpEH1y8BvUy5g9jfAPuCthUakwlilU1KvadrYy8y/AP4iIl6WmR9cxZjUB+p7NOt7MwFKo8F3vnuEbz1abgTawylpkETEKHBzZl5AucGnIWeVTkm9pp119n4wIp5TvzEzf7cL8ahPtfu0zx5OSYMiM+ci4mhErGswb09DyCqdknpNO42979R8/UTgp4HPdycc9bP6p30bdt7ccD97OCUNkO8AByPifwCPVDdm5q8UF5KK0mhOu1U6JRVp0cZeZr6j9n1E/D7lOQlSS/ZwShoCN1ZeXRUR24CXUC6S9r7M/HC3r6nONRrl4lx1SUVq58levbWUi7ZILTXq4SyNBo88doQNO282CUrqe5X57UsSEVdTHi3zYGb+YM32FwF/CIwCf56ZV2bmHmBPRJxMeRF3G3s9qlGVTkkqyqKNvYg4CGTl7ShwKuB8PS2qvodzfG2J73z32Dw+C7ZI6ld1ufE4mfncNk5zDfBfgb+sOe8o8B7gJ4D7gdsj4qbM/Fxllysqn0uStKh2nuz9dM3XR4B/zswjXYpHA6a2h/O8K2+dr8xZZcEWSX2qmht/sfLfv6r891W0aATWyszbIuKMus3PA+7JzHsBIuL9wEsj4vPAlcCHMvPTywlckjQ82pmz91WAiPheygVa1kcEmfm1bgenwWJJakmDoiY3/kRmbq756Dcj4tPAziWeegK4r+b9/cDzKa/n9+PAuog4MzPf2+jgiLgMuAzg9NNPX2IIkqRB0c4wzguBdwDrgQeBp1OuxnnccgxSKxZskTSAIiLOy8yPV978a2BkpS+Sme8G3t3GflcBVwFMTk629YRRq2PPgSkLt0hade0kpLcA5wJfzMwNwL8DPtnVqDSQdmzZyFhpdME2S1JL6nOvAf44Ir4SEV8F/hj4j8s43xRwWs37p1W2qY/tOTDF5TceZGp6huTYnPU9B/zRSuqudhp7s5n5DWAkIkYy8yPAZJfj0gDatnmCXds3MTE+RgAT42Ps2r7Jnk1JfSsz78jMs4Gzgedm5jnLnFN3O/CsiNgQEWuAVwI3dXKCiNgaEVcdPuw6771i975DCypTw7E565LUTe0UaJmOiCcBtwF/HREPUrNwrNQJS1JLGgQR8WtNtgOQme9s4xzXAucDp0TE/cAbM/N9EfFLlNezHQWuzsy7O4ktM/cCeycnJy/t5Dh1j3PWJRWlncbeS4EZ4PXAzwLrcOkFdYHzGST1kZMq/90I/AjHnr5tBf6xnRNk5iVNtt8C3LLcANU7nLMuqSjtVOOsPsU7Cix58dh2RMQ24CXAk4H3ZaaLxg6J6nyG6jAX1+CT1Msy880AEXEb8EOZ+XDl/ZuAmwsMTT1ox5aNC3IclOesX/DsUznvylvt5JTUNSteMaxeRFwdEQ9GxF11218UEYci4p6I2AmQmXsy81LgtcDF3Y5NxdtzYIrzrryV1133GeczSOpH3wc8XvP+8cq2wjhnr/c0mrP+sh+e4IN3TFm0RVJXRWZ3KzNHxI8B3wH+MjN/sLJtFPgi8BOU1xC6HbgkMz9X+fwdwF8vNsl9cnIy9+/f383w1UX1T/MaCeDLV75k9YKS1JMi4o7M7LniYBHx28ArgL+tbNoGXJ+Zv1dYUBXmyN523pW3NhzaORrB0Uyf9ElqW6sc2fTJXkT8Q+W/b1/OxTPzNuCbdZufB9yTmfdm5uPA+4GXRtnbgQ8ts5qZ+kCj6mT1nM8gqZdl5tsoL7Xwrcrr1b3Q0FPva1acZS7TJ32SVkyrOXtPrSwOe2FEvJ/yQ5Z5y2yMTQD31by/H3g+8MvAjwPrIuLMzHxv/YERcRlwGcDpp5++jBBUtMWqkLkGn6R+kJl3RMR9wBMBIuL0zPxawWGpxzUr2lKrOp3Bp3uSlqpVY+8NwO9QXtC1voR0Ai9c6WAy893AuxfZ5yrgKigPUVnpGLR6WiW6CYevSOoDEXEh8A5gPfAgcDrwBeA5Bca0Fdh65plnFhWC2tCoaEsjLs8gaTmaDuPMzBsy88XAf8nMC+pey23oTQGn1bx/WmWbhsiOLRsZK40u2DZWGuVdF5/Dx3e+0IaepH7wFuBc4IuZuYHy6JRPFhlQZu7NzMvWrVtXZBhaRH3RltGIhvuNRLBh582cd+WtDumU1LF2ll54S6Xn8scqmz6amX+/zOveDjwrIjZQbuS9EviZdg+213IwVBtzzdbWc909SX1gNjO/EREjETGSmR+JiHcVHZT6w7bNEwtyXqMnfXOVQnouSSRpKRatxhkRuygXVPnryqZLgNsz87faukDEtcD5wCnAPwNvzMz3RcRPAe8CRoGrK5PcO2KlscHVKOmNlUbZtX2TSU4aQj1cjfN/Uq7AuYtynnsQ+JHM/NdFxgXmyH5U28k5EjHf0KvnVAdJtVrlyHYae58FzsnMo5X3o8CBzHzuikfaIRPZ4GpWknpifIyP71zx6aKSelwPN/ZOBGYoT4v4WWAd5aWDvlFgTNXRL5d+6UtfKioMLdOGnTfT6l9odoBKqlrS0gt1xmu+LnwSgAvGDr5mE9KdqC6pl2TmI5l5NDOPZOZfZOa7i2zoVWJyzt4AWGzpoWqlTklqpZ3G3i7gQERcExF/AdwBdDzkciWZyAZfsyTnunuSpGHQqIhZPTtAJS1m0cZeZl5LudLYjcAHgR/NzOu6HZiGW7NKna67J0kaBrXVOpuxA1TSYtoaxpmZX8/Mmyqv/9PtoKT6ktQnry3xhBNGeP11n7H8tKTCRcQ/VP779qJj0eDatnmCj+98Ie+6+Bw7QCUtyaJLL/Qil14YDtWS1PWVOavlp/d/9Zt85AsPuTSDpCI8NSL+NXBhRLwfWLBIWmZ+upiwNIgWW6pIkppZtBpnL7Ma53BoVpkzYEGlMiuTSYOr16pxRsTLgdcA/waoT0SZmYWVDbYapyQNlyVX44yI0Yj4QnfCktrTbAJ6fTeFlckkrZbMvCEzXwz8l8y8oO5V6PowFjGTJFW1HMaZmXMRcSgiTs/Mr61WUFKt9eNjDZ/sNWJlMkmrKTPfEhEXAj9W2fTRzPz7ImPS8KldjN0hnpJqtVOg5WTg7oj4h4i4qfrqdmCtuM7ecGlUmTOa7GtlMkmrKSJ2Ab8KfK7y+tWI+L1io9Iwqc5rn5qeITk2r91CZpKgvQItv9P1KDqUmXuBvZOTk5cWHYu6r35i+vjaEo/NzvHo7NEF+1mZTFIBXgKck5lHASrr0R4AfqvQqDQ0du87NF/ArKo6rcGne5LaWWfvY8BXgFLl69sBq4xpVVXLT//Bxefw3dmjxzX0xsdKFmeRVJTxmq+dKKdV1Wz6gtMaJEEbjb2IuBS4AfjTyqYJYE8XY5KaatSDCXDiE06woSepCLuAAxFxTeWp3h3A24oMyKkOw6XZ9AWnNUiC9ubs/SJwHvBtgMz8EvC93QxKasYeTEm9JDOvBc4FbgQ+CPxoZl5XcExW4xwijea1O61BUlU7c/Yey8zHI8olMSLiBI6ver+qXFR9eDWrzDm+tjS/Ht9oBHOZTFiRTNIqyMyvA4UWLtPwqa3AOb62xBNOGOHwzKzVOCUt0M6TvY9FxG8BYxHxE8AHgL3dDas1ey2HV6MezNJo8J3vHplvBM5luS/CimSSpEFUX4HzW4/O8tiRo/zBxefw8Z0vtKEnaV47jb2dwEPAQeDngVuAK7oZlNTMts0T7Nq+iYnxMQKYGB/jxDUnMHu08cNmF1qXJA2aVhU4JanWosM4M/NoZdL5pygP3zyUmYUO49Rw27Z5YkGv5YadN7fcf2p6hj0HpuzplLSiImIUuDszn110LBounc5fd9F1aXgt2tiLiJcA7wX+ifJa1hsi4ucz80PdDk5qR7N5fLUuv/EggMlN0orJzLmIOBQRp2fm14qOR8OjWd6rrcBZbeBNTc8QHCu2UJ3iAOZEaRi0M4zzHcAFmXl+Zr4AuAD4g+6GJbWv0Ty+ejOzc/z69Xc6f0/SSjsZuDsi/iEibqq+ig5Kg22xCpy1c/rg+Kp6DvmUhkc71Tgfzsx7at7fCzzcpXikjlV7Jqs9mM3MZdqbKWml/U7RAWj41Oa9RkMzm61JW8sli6Th0LSxFxHbK1/uj4hbgOspdw5dBNy+CrE15dILqlc7j6+6BEMj1d5MG3uSVkJmfiwing48KzP/Z0SsBVoPNegyc+RwqJ+/XqudhpyLrkvDodUwzq2V1xOBfwZeAJxPuTJnoX8hXHpBrSw2rNPeTEkrJSIuBW4A/rSyaQLYU1hAmCO1eEPORdel4dH0yV5mvno1A5FWSrWn89evv3N+zb1aIxENq3NarUzSEvwi8DzKFavJzC9FxPcWG5KG3Y4tG7n8xoMLhnJWi7RMmN+kodJONc4NwC8DZ9Tun5kXdi8saXmqSaw+2UHjuXvVyezVfa1WJqlNj2Xm4xEBQEScwPH1MKRVU+24nJmdYzSCuUwbeNIQa6dAyx7gfcBe4GhXo5FWUKsnfNXqnNX9Wi1Qa3KU1MLHIuK3gLGI+AngP1HOl9Kqq++4nMucH7JpLpOGUztLL3w3M9+dmR/JzI9VX12PTFoB2zZPcLTBUE449oRvz4GpjheolaSKnZTnsh8Efh64Bbii0Ig0tFp1XEoaTu082fvDiHgj8GHgserGzPx016KSVlCrRderT/jWjZWYnplteKwkNZOZRyPiLyjP2UvgUGaTHiapy1aq49I57NLgaKextwn4D8ALOTaMMyvvpZ7XaKJ6rblMHnn8CKWRYPbosX+jWa1M0mIi4iXAe4F/olwDY0NE/HxmfqjYyDSMmnVudtJx6Rx2abC0M4zzIuAZmfmCzLyg8iq0oRcRWyPiqsOHDxcZhvrEts0T7Nq+idFKAYVGZueSuUzGx0oE5Wplu7ZvMrFJWsw7gAsy8/zMfAFwAfAHBcekIdVo6aFOOy4dCioNlnae7N0FjAMPdjeU9mXmXmDv5OTkpUXHov7Qqjpn1dGEx44c5Q8uPsdGnqR2PZyZ99S8vxd4uKhgNNyquavZEMzq8Myp6ZmmlTqdwy4NlnYae+PAFyLidhbO2XPpBfWVxdbfg2Nz+F5/3WecpyCpqYjYXvlyf0TcAlxPeYrDRcDthQWmobdt80TDvNWoUiccP0xzJYaCSuod7TT23tj1KKRV0s4TvtoE+PrrPsPrrvuMaxRJqre15ut/Bl5Q+fohwH8Vq+c0Gp5ZVbscUaN57s5hl/rXoo09l1nQoGnnCV9V9VMnqEuqlZmvLjqGZiJiK7D1zDPPLDoU9ZDFhmHOZbLjhjs5cc0JLsguDZBFC7RExMMR8e3K67sRMRcR316N4KRu2bZ5gne84uzjJrK34gR1SfUiYkNEvDMiboyIm6qvImPKzL2Zedm6deuKDEM9pp1hmLNzOb8MkQuyS4OhnSd7J1W/jogAXgqc282gpNVQP5F9pNKL2YoT1CXV2QO8D9jLseWJpJ6z2DJEjVQ7OW3sSf2rnTl78yoLxe6pLLK+szshSaundiJ7/eT1RpygLqnOdzPz3UUHIS2mtoOzUQGWZuzklPrboo29mopjUB72OQl8t2sRSQWpJsLXXfeZpvs0mqBeLWX9wPQM42tLZMLhmVmreUrD4Q8rHaAfZmHF6k8XF5LUWKcdnAAjEWzYebM5TepT7TzZq604dgT4CuWhnNLA2bZ5ommv58lrS8clufpk+a1HZ+c/s6iLNBQ2Af8BeCHHhnFm5b3Us6p56c17716Qu+o1W6JBUn9YtEBLZr665nVpZr4tM3tmgXVppe3YsvG4wi1jpVHeuPU5x+3bqpQ1WNRFGgIXAc/IzBdk5gWVlw099YVtmydYu6b9GT3mNKn/NP0/PCLe0OK4zMy3dCGetlhWWt1UX7il1dCVduYyON9BGmh3AeOAnaDqS53mKHOa1F9adec80mDbicBrgO8BCmvsZeZeYO/k5OSlRcWgwVY7r6GV9eNji050t6iLNNDGgS9ExO0snLN3YWERSR1olsdGm1SoNqdJ/aVpYy8z31H9OiJOAn4VeDXwfuAdzY6ThslipayraxRJGlhvLDoAaTka5bGx0igv++EJPnjH1HHbzWlSf2k5UDsingL8GvCzwF8AP5SZ31qNwKTVUltNs9GQzVaf1w/5tBqnNFwy82NFxyAtR6upC5NPf0pbUxok9a7IJotIR8RuYDtwFfCezPzOagbWjsnJydy/f3/RYaiPNSo9PVYaZdf2TWzbPLHo55JWR0TckZmTRcdRLyIeplx9E2ANUAIeycwnFxdVmTlSkoZDqxzZqhrnrwPrgSuAByLi25XXwxHx7W4EKq22RtU0a6uNNfv816+/kz0HplYtTkm9KTNPyswnVxp3Y8DLgD8uOCxJkoAWjb3MHMnMsdpEVnmd1As9ltJKaFZVrLq92edzmVx+40EbfJLmZdkeYEvRsUiSBO0tqi4NrGZVyKrVxlpV26w+AXQ4pzS8ImJ7zdsRYBL4bkHhSJK0gI09DbVmVciq1cYWq7bpekPS0Nta8/UR4CvAS4sJRSpGtZDZ1PQMIwFHK7NY15ZGWHPC6IKiZdDeOraSVoaNPQ21xRZQr/739dd/hka1jBI4580f5k0XPsdkJQ2hzHx10TFIRaovZHa0Jlc+OnuUR2ePAjA1PcOOG+6EhNnKTlPTM1x+40EAc6jUJTb2NPTaWUD9hJFgdq5x5drpmVl2fODO+XNJGnwR8YYWH2dmvmWFr/cM4LeBdZn58pU8t7QcjQqZNdMojzolQuquVtU4JVFOZM0aelWzR5PXXfcZzth5M+ddeauFW6TB90iDF8BrgN9s5wQRcXVEPBgRd9Vtf1FEHIqIeyJiJ0Bm3puZr1m58KX27DkwxXlX3sqGJvltJaYzOCVC6h4be9IiOk1C1WEpNvikwZWZ76i+KK9HOwa8Gng/8Iw2T3MN8KLaDRExCrwHeDFwFnBJRJy1UnFLnagO0ZyaniFpnN+qBc2WYyXOIakxG3vSIpaShGrX6pM0mCLiKRHxVuCzlKdF/FBm/mZmPtjO8Zl5G/DNus3PA+6pPMl7nHLj0YIvKsRia9FCuZDZWGl0ydeoLYomaeXZ2JMWsdRE5rAUaXBFxG7gduBhYFNmvikzv7UCp54A7qt5fz8wERHfExHvBTZHxOUt4rosIvZHxP6HHnpoBcLRMGuWx6amZ+aHdu7ed4iX/fAEE5WO0ZFYuG80OL7Wru2bFszXW2zYqKTO9ExjLyKeERHvi4gbio5FqrVt8wS7tm9iYnyMAE5eW2rrOIelSAPt14H1wBXAAxHx7crr4Yj49kpfLDO/kZmvzcxnZuauFvtdlZmTmTl56qmnrnQYGjLN8ljAgqGdH7xjih1bNvKVK1/CO19xzoIO0qR5g29ifOy4ht5iw0YldaarjT0nn2tQbNs8wcd3vpAvX/kSDrzhJxftqawfltJJT6W9mlLvy8yRzBzLzJMy88k1r5My88nLOPUUcFrN+6dVtkmrrtHIlqDcgKtVO7Sz0dDPRg2+RsM32xk2Kqkz3X6ydw1OPtcAavXUbmJ8bMGwlE56Ku3VlIbe7cCzImJDRKwBXgnc1MkJImJrRFx1+PDhrgSo4VE/smVifOy4hl5Vdchns6GfWTm+ep764ZutjnVahLR0XV1nLzNvi4gz6jbPTz4HiIjq5PPPdTMWaSXt2LJxwSKyUO6lbJS8WvVULmdfSf0tIq4FzgdOiYj7gTdm5vsi4peAfcAocHVm3t3JeTNzL7B3cnLy0pWOWcOnfi3ac978YaZnZo/bb7wyxWH9+BhTDRpnE+NjfHznC1teq9mx421On5B0vCIWVW80+fz5EfE9wNuoTD5vNichIi4DLgM4/fTTux2r1FA18e3ed4gHpmdYPz7Gji0b2bZ5gj0Hpua3j68t8a1Hj0+KUH5qt/l3P8xjs3M8Onu05fXs1ZQGT2Ze0mT7LcAtqxyOtKg9B6Z45PEjDT/7znePsOfAVNPO0HYqbu7YspEdN9x53Nq21XPb6Sl1rojGXkOZ+Q3gtW3sdxXlNY2YnJxsvdK11EX1vZ1wbBhmNck1a+hVLfZ5lcVeJElF273v0HENsarZo8nufYfmn9416gxdzLbNE7zppruPe3JYPbeNPalzRTT2nHyugdVoGOZyuQaRpE5ExFZg65lnnll0KBowi40yqX7eqDO0XYcbDBFt59qSGiuisTc/+ZxyI++VwM90cgITmXrVSiej8bESb7rwOfZmSmqbc/bULc3m1NV+3krtNIfqEz9Y+BRw3Vip4ZxAR7hIS9PtpReuBT4BbIyI+yPiNZl5BKhOPv88cP1SJp9n5mXr1q1b+aClZVjpZPTYkdZz+SRJWi2NlmKoWmwUSqNq0ztuuJMdH7hzwbZHHj9CqW5ldke4SEvX1cZeZl6SmU/NzFJmPi0z31fZfktmfn9lcdi3dTMGaTW1SoRV9UmsFdcXkiT1itqlGABGo5zPmi2lUKvRNIfZuWT2aB637UlPPGHRZRoktadnCrR0wmGc6lXVZPS66z7TdJ/dF529oFrnYtU4nacgqRPmSHXTUufjdZLLph+d5cAbfrLja0g6XrcXVe8Kh3Gql23bPMH4WOM1gU5eW2L3vkNMTc8QUa7G+ejsUdaWRmj2vK/V0NA9B6Y478pb2bDzZs678lYXX5dkjlRXNMs37eahTqY5jK8tmd+kFdKXT/akXtZsHaKRKK8VVF1uoXbkSrMne63mKdQv8zA1PcPlNx4EcLiLJGnFNMs3+7/6TT54x1RbeajR+nvNHJ6ZZccH7pwf4ml+k5auL5/sSb2s2TpECcfNTWhlNKLlPIVG8x+c4ydJWmnN8s21n7qv7TxUne9XnefXytE8Pl+a36Sl6cvGXkRsjYirDh8+XHQo0nGazUvI9tt5ABzNbNmD2ew6zvGThps5UiutWV6Za5LYmu2/bfMERztNhm2cV1JzfdnYcz6CelmzeQnt9GYudp7aOQwjTc7nWkTScDNHaqV1mtda5aHl5Cjzm9S5vmzsSb2s0fILY6VRLnn+aYsuy1BVGonj5urVr1HUqEfVtYgkSSutk7y2WB5qa4mi0XCtPWmFWKBFWmHVoZfV5RXWj4+xY8tGtm2eYPLpT5mvxjkSC4u01HrSE084bghnozkTUO5ZPZq54DqSJK2UdvJa/faqPQemjvt81/ZNvHnv3fMFywCC8tz2ico+wIJ9nnDC8c8nas89vrZEZrm4y/qac7SKTRoGkcsYO12UmjWELv3Sl75UdDjSkm3YeTON/g8M4MtXvmTJ+0qDJiLuyMzJouPoJ5OTk7l///6iw9AQq6/iCeUndC/74Qmuu/2+44qZlUaC3RedzbbNE02PrRYua/T5gnONBtQVeqk9XhokrXJkXw7jdD6CBkWz+QeNtneyryRJRWtVxbNR1erZozlfcXOxitPNRrvMn2suregp4TBOqeuqw0ympmcYjWAuk5Mrw02mZ2bnh65UBeU1hc678tYFw1CmpmeO25e6fRcbOmNvpjT4aka/FB2KhlynVTxrj1ms4vRSK3Na0VPDxsae1EX1w0yqCa52nkJybK5CbWNuanqGHTfcuWAYSrP0WL/grAuuS8MrM/cCeycnJy8tOhYNt/XjY0w1aFxVOz6bHdPq2MU+bycmaZj05TBOqV8sNsykKiknv/rU12gYSjOLDW9x+IokaTW1quJZGj1+2YbaStTNjm31+YJzWdFTAvr0yZ5DVNQvOhku0mpYS6fXc8F1SVLRFqviWVttc3ysxJsufM78MbXHVqdB1HdaPrE0Mt+xubZUfn7x6OxRoNxZurY0wolPOGFBhU5Ht2jY9GVjzyEq6hedDDNpNaylk+u1uq7DVyRJq2nb5omGDaxm2+v3AY6bllA/xQHKX8/VjYR5dPYos3PJH1x8jo08DS2HcUpd1M7isdB8cdpGw1BanaPd4S+SJPWDRtMSGk1xmJ3LhmvX1lb4lIZRXz7Zk/pFo2EotdU464eW1C66PhrB7NzCyp3V4xv9tzq85QP7v8Yn7/3WgqeEtYvUnnflrfML0D42Ozc/5KV+CI2k/uRUBw2SlZh+4BQGDTMbe1KXtTNUpXZfWDhk5VuPzs4/4av2ZM5lzi9M+8E7phYMb2k0fPOCZ5/a8Ly1pmdm2fGBOxfEIan/ONVBg2SpVTfrzyENK4dxSj2m3SEr1YVp26n2ee2n7murMqjDXSRJvaTRtIRGUxxKo0GjWQ+1FT6lYdSXT/YcoqJB1o0KnnOZbZ/X4S6SpF7RrKJns22tKnxKw6gvG3sOUdEg60YFz9EI/tW6J7Z1Xoe7SJJ6SauKnu1sk4aZwzilHtPukJVmFTwbueT5p7VVGdThLpIkSYOjL5/sSYOskyErtRU8q9vP+J6x+WqcoxFc8vzTeOu2TfPnr+5rNU5JUrfsOTDVMGe12r92COba0ghrThidr1p9wbNP5ebPfn3+8wCSY9Wm689dvX5tJeyJBvm0VS6s/x4uePapfOQLD7X9PXVbp/dYwylymYs4F2lycjL3799fdBiSpC6LiDsyc7LoOPqJOVJF2XNgakH1ZyiPRtm1fVPDxsieA1PsuOFOZueW9m/S+nM3un5VaTSOW5D9uH1Ggoufd9qCatftXHc1dXqPNdha5Uif7EkrZLk9bLXH1/c0LtbDWf959dpX7DnItZ+6j7lMRgKecMII3509yto1ozz6+BwJDZ/+SZK0VI2qP1fXgm2UF3fvO7Tkhl6jc7eqPt3OdWaP5nzu7OS6q6nTe6zhZWNPWgH1PWxT0zNcfuNBoL3J4vXH16+B9+js0fmG39T0DP/tk19r+fnlNx7kA/u/xsf/6Zvz+xxNmKns88jjxxLEXOb8+WzwSf3PitUqWrOqzp1uX+o1V+J87Va7LqqCdTfvpQaLBVqkFdCqh22pxy/HzOzcgoZeO6791H0rdn1JxcnMvZl52bp164oORUOqWVXnTrcv9Zorcb7RaLBo3yLXXU3dvJcaLH3Z2IuIrRFx1eHDh4sORQKW38PWCz1x7fZiSpLUSqPqz2Ol0abVnnds2VieS7dE9eduVX26UXXr4/YZibaqXbf6nrqt03us4dWXjT17LdVrltvD1gs9ce32YkqS1Mq2zRPs2r6JifExgnLFzFaFQ7ZtnmD3y8/m5LWl+W1rSyOMj5Xmj3/Vuacv+LyasRqdu/b6cCy/TYyPsfvlZ7P7orPnYzt5bYm1pWP/HB4fK7H7orN567ZNx30Przr39La/p27r9B5reFmNU1oBy62K1apy2FKMlUb5odPXdTSU81Xnnu6cPfUsq3F2zhwpScOhVY7syyd7Uq9Zbg9b/fH1PY2L9XDWf75r+yb++tIf5VXnnj7fozkSMFYaIYAT14zO94qORtjQkyRJGkA+2ZMk9Tyf7HXOHClJw8Ene5IkSZI0ZGzsSZIkSdIAclF1SZIk9aQ9B6Z48967+dajswCsGQ1m55KkPBf9CSeMMDN7dH7/0QjOfcbJfOUbMzwwPcP68TEuePap3PzZr8+fY21phDUnjDI9M8toBHOZ8/8dCThaM8NpfKzEmy58DlBeE7d6zh1bNs7Py79iz0Gu/dR988c/4YQRvjt7dP7aH/nCQwuOa3Wubtyz6vfQq5U69xyY6ur9GHbO2ZN62BV7DvI3n/ragsQDzCelk9eWeGx2jkdrEl27JmqS0NT0zHEJbikmahJZp4lmuX/sTRaDzTl7nTNHqt/tOTDFjhvuZHau2H+rjkQ5787WJMlqxe39X/0m/+2TX2v7XKXRgKThuVYiZzW7Z6WRYPdFZ/dcXlxuNXOVtcqRNvakHnXFnoMdJZBeURoN5o7mcQ3HVommG0tXmCwGi429zpkj1e/Ou/JWpqZnig6jqYnxMf7P4e8ytwL/lp4YH+PjO1+47PO0umcrdY2V1CzeXoy1l1mgRepD137qvqJDWJLZueMbelDuxdy971DDY3bvO3TcGoMzs3NN91/p46VBEhFbI+Kqw4cPFx2KtCwP9HBDD8rxrURDr3qubp+nF+9ns5h6MdZ+1ZeNPROZhsFKJZBe0ukf9Xb/2JsspGMyc29mXrZu3bqiQ5GWZf34WNEhtLR+fGx+LduVOFe3z9OL97NZTL0Ya7/qy8aeiUzDYKUSSC/p9I96u3/sTRaSNHh2bNlYnuNWsJEoT0WoNVYaZceWjVzy/NM6OldpNJqeayU0u2elkVixa6ykHVs2MlYaXbBtJe+H+rSxJw2DThNIryiNBiMNcnOrRLPcP/YmC0kaPNs2T7D75Wdz8trS/LY1o0E1xYwEjJUW/lN2NILznvkUJsbHCMpzv1517ukLzrG2NML4WGl+/9r/1uev8bES73zFOey+6OwF56zOCX/rtk286tzTFxw/VhpZcO3a43a//Oym5+rWPRsfK/VkcRYox7tr+6au3Q9ZoEXqaVbjtBqnyizQ0jlzpCQNB6txSpL6mo29zpkjJWk4WI1TkiRJkoaMjT1JkiRJGkA29iRJkiRpANnYkyRJkqQBZGNPkiRJkgaQjT1JkiRJGkA29iRJkiRpANnYkyRJkqQBZGNPkiRJkgaQjT1JkiRJGkA29iRJkiRpAJ1QdABVEXEi8MfA48BHM/OvCw5JkqSeYI6UJC1FVxt7EXE18NPAg5n5gzXbXwT8ITAK/HlmXglsB27IzL0RcR1gIpOWaM+BKXbvO8TU9AyjEcxlMhJwNMufry2NcORo8vhcdjWO0gjsvugcAN68926+9ehsy/2/76Q1/Mt3Zo+LdynGSiM87eQxvvTgI0s6vjQCs0fLX4+PlXjO+pP45L3fYi6TAFqFVr3nJ68tkQmHZ2ZZPz7GBc8+lY984SEemJ5h/fgYO7ZsZNvmifmf1wPTM4yvLfHY7ByPVi4+PlbiTRc+h22bJ467Tu1x1fPBwnu9tlQewNHO+TrR6Nr152xnn2FmjpSW/3ei1d/P6t/q6t/kxf52r6TRgG6m2Gp+rd6rK/Yc5NpP3cdcJqMRnPKkEv/88OPHHVefz+rV560dWzbyno98qeNcWr3Xtedbu2aURx+fm/+ZnPuMk/nc1x9ekK/WnDC64NrNfheu2HOQv/nU19r6d8JYaYRd2587f649B6YW5MlqrBNNrll7b6uqv1ONjI+V+Omzn9ow39darRwZ2STQFTl5xI8B3wH+sprIImIU+CLwE8D9wO3AJcBLgQ9l5mci4m8y82cWO//k5GTu37+/a/FL/WjPgSkuv/EgM7NzRYcyb7kNt0E1VhrlZT88wQfvmGr58yqNBLsvOntBEmj0cy6NBnNHc9F73eh8nWh07bHSKLu2b1qQTBfbpxMRcUdmTi4p4B5ljtSwW+7fiV7Md6vtXRefw/6vfpP/9smvdeX8q9lArtfsd+GKPQc7/n5HgHdefA4AO264k9kmLfH6ay7lWu2cdzVzZFfn7GXmbcA36zY/D7gnM+/NzMeB91NOYvcDT1uNuKRBtnvfoZ5LfDb0GpuZnePaT9236M9r9miye9+hBdsa/Zxn5xZv6DU7XycaXXtmdm7BOdvZZ9iZIzXslvt3ohfz3Wrbve8Q137qvq6dv8j03ex3YSnf71HK92r3vkNNG3qNrrlS97bIHFlEwpgAau/c/ZVtNwIvi4g/AfY2OzgiLouI/RGx/6GHHupupFIfemB6pugQ1IFmw0Dq1f9cl/tzXs7xzY6t3d7OPmrIHKmhsdy/E/49Kd+DdvNIP2r0M17q9/vA9ExbvzO1+6zkvS0qR/ZM72BmPpKZr87MX2g18Twzr8rMycycPPXUU1czRKkvrB8fKzoEdWA0oq396n+uy/05L+f4ZsfWbm9nH7XPHKlBtNy/E/49Kd+DdvNIP2r0M17q97t+fKyt35nafVby3haVI4to7E0Bp9W8f1plm6QVsGPLRsZKo0WHscDI4OahZRkrjXLJ809b9OdVGon54itVjX7OpdFo6143Ol8nGl17rDS64Jzt7KOGzJEaGsv9O9GL+W617diykUuef9riOy5Rkem72e/CUr7fEcr3aseWjZRGm39X9ddcqXtbZI4sorF3O/CsiNgQEWuAVwI3dXKCiNgaEVcdPny4KwFK/Wzb5gl2bd/ERKV3qNorVdsIWFsaYU2LP3YrpTRSnjz+zlecw8lrS4vu/30nrWkY71KMlUZ41veeuOTjSzV/HcfHSpz3zKfMx7ZYaNX9Tl5bYnysRFCu8vWqc09nYnxs/v2u7Zt467ZN8z+vqByztubi42OlhsVUan/O1fPtfvnZx93rtaWRts7XiUbXrp9U3s4+asgcqaGx3L8T9cfX//2s/q1u92/3Sup2iq3m122bJ3jrtk286tzT57/P0Qi+76Q1DY+rz2f16vPWH1x8zpJyafXstec7cc3ogp/Jec98ynH5qvbazX4Xqt9vu/9OGCuN8M7Kvdq2eYLdLz97wXWrp2l0zfp7W9Xqid/4WKlhvi8qR3a7Gue1wPnAKcA/A2/MzPdFxE8B76JcVvrqzHzbUs5vpTFJGg4DWo3THClJWrZWObKr6+xl5iVNtt8C3NLNa0uS1MvMkZKkbuuZAi2dcIiKJEmNmSMlSVV92djLzL2Zedm6deuKDkWSpJ5ijpQkVfVlY0+SJEmS1JqNPUmSJEkaQH3Z2HM+giRJjZkjJUlVfdnYcz6CJEmNmSMlSVVdXWev2yLiIeCrlbfrgPpuzHa2nQL8S1cCbK5RXN08vp39W+3T6We9eN+Xe887PUe7+y7lvre7vdF+/XbfV/t3vdXn/fK73iiGbh+/Gn9jnp6Zp3YQ09CryZHL+Z3ut78ZSzlHt35/ve/L399/m6z8ObzvjWPo9vHdvu/jTXNkZg7EC7hqKduA/b0QazePb2f/Vvt0+lkv3vfl3vNOz9Huvku57+1ub/Jz6Kv7vtq/653e9178Xe/H+77Uz3wt7+fTi7+/q/23ut39u/m32vu+sve93XvsfR/e+74S977X73vtqy+HcTaxdxnbVttyY+j0+Hb2b7VPp5/14n1fiet3co52913KfW93e9H3HPrvd73V5/3yuw79d9+X+pnas9zf6dW02n+r292/m3+r242hmwbpvjf7zPve/v6Dft9hiPJkXw/jXAkRsT8zJ4uOY9h434vhfV993nP1M39/i+F9L4b3vRje9+4apCd7S3VV0QEMKe97Mbzvq897rn7m728xvO/F8L4Xw/veRUP/ZE+SJEmSBpFP9iRJkiRpANnYkyRJkqQBZGNPkiRJkgaQjb06EXFiRPxFRPxZRPxs0fEMi4h4RkS8LyJuKDqWYRER2yq/59dFxE8WHc+wiIgfiIj3RsQNEfELRccjtcv8WBxzZDHMk8UwT66soWjsRcTVEfFgRNxVt/1FEXEoIu6JiJ2VzduBGzLzUuDCVQ92gHRy3zPz3sx8TTGRDo4O7/meyu/5a4GLi4h3UHR43z+fma8FXgGcV0S8UpX5sTjmyGKYJ4thnizOUDT2gGuAF9VuiIhR4D3Ai4GzgEsi4izgacB9ld3mVjHGQXQN7d93rYxr6PyeX1H5XEt3DR3c94i4ELgZuGV1w5SOcw3mx6JcgzmyCNdgnizCNZgnCzEUjb3MvA34Zt3m5wH3VHrLHgfeD7wUuJ9yQoMhuT/d0uF91wro5J5H2duBD2Xmp1c71kHS6e96Zt6UmS8GHAqnQpkfi2OOLIZ5shjmyeIM8x/rCY71UEI5iU0ANwIvi4g/AfYWEdiAa3jfI+J7IuK9wOaIuLyY0AZWs9/1XwZ+HHh5RLy2iMAGXLPf9fMj4t0R8afYY6neZH4sjjmyGObJYpgnV8EJRQfQazLzEeDVRccxbDLzG5THxGuVZOa7gXcXHcewycyPAh8tOAypY+bH4pgji2GeLIZ5cmUN85O9KeC0mvdPq2xTd3nfV5/3vBjed/Urf3eL470vhve9GN73VTDMjb3bgWdFxIaIWAO8Erip4JiGgfd99XnPi+F9V7/yd7c43vtieN+L4X1fBUPR2IuIa4FPABsj4v6IeE1mHgF+CdgHfB64PjPvLjLOQeN9X33e82J439Wv/N0tjve+GN73YnjfixOZWXQMkiRJkqQVNhRP9iRJkiRp2NjYkyRJkqQBZGNPkiRJkgaQjT1JkiRJGkA29iRJkiRpANnYkyRJkqQBZGNPfSEiMiLeUfP+NyLiTSt07msi4uUrca5FrnNRRHw+Ij5St/2MiLhrkWPPiIifqXl/TkT8VLdi7UR9LBHxpoj4jVW47qpcR5L6gXmyd/NkOyJifUTcsELn+mhETK7EudT/bOypXzwGbI+IU4oOpFZEnNDB7q8BLs3MC5ZwqTOAn6l5fw7QURLrMNZOnEOHsTQTZf5dkqTOmScLyJMRMdrpMY1k5gOZ2fUGtYaP/6hSvzgCXAW8vv6D+h7HiPhO5b/nR8THIuLvIuLeiLgyIn42Iv4xIg5GxDNrTvPjEbE/Ir4YET9dOX40InZHxO0R8dmI+Pma8/6viLgJ+FyDeC6pnP+uiHh7ZdsbgH8DvC8idjf7JptdE7gS+LcR8ZmI+E3gd4GLK+8vjogTI+Lqyvd2ICJeWjnfz0XETRFxK/APEfHUiLitctxdEfFvG8Twhsr174qIqyIiKtvnewoj4pSI+EpErKmPpXKasyr73xsRv1Jz7l+rnPeuiHhdZdsZEXEoIv4SuAs4LSJ21NyDN9cc/9uVn9H/B2xsdh8laQiZJ1cvT34lIt4eEZ8GLoqIn4yIT0TEpyPiAxHxpMp+PxIR/zsi7qxc96QW92z+6WVEfDIinlNzvY9GxGSL72EsIt4f5aeifwuMNbt/GkKZ6ctXz7+A7wBPBr4CrAN+A3hT5bNrgJfX7lv57/nANPBU4AnAFPDmyme/Cryr5vj/Trnz41nA/cATgcuAKyr7PAHYD2yonPcRYEODONcDXwNOBU4AbgW2VT77KDDZ4JgzgLsqX7e65t/XHPNzwH+tef97wKsqX48DXwROrOx3P/CUyme/Dvx25etR4KQG8Tyl5uu/ArbWxw+cAnylSSxvAv53Jf5TgG8AJeCHgYOVuJ4E3A1srnz/R4FzK8f/JOV/sETlZ/L3wI/VHL+W8u/CPcBvFP276cuXL1+98MI8eT6rlye/AvznytenALcBJ1be/ybwBmANcC/wI5XtT658v83ir/0eX1/zc3gqcGiR7+HXgKsr259LueF/3H30NZyvbg3rklZcZn678vTnV4CZNg+7PTO/DhAR/wR8uLL9IFA7TOT6zDwKfCki7gWeTbnR8dya3tB1lJPc48A/ZuaXG1zvR4CPZuZDlWv+NeWGyp424211zcWOuzCOzWF7InB65ev/kZnfrHx9O3B1RJSAPZn5mQbnuiAi/jPlRtVTKDfK9rYZf9XNmfkY8FhEPAh8H+Ue27/NzEcAIuJG4N8CNwFfzcxP1nwvPwkcqLx/EuV7cFLl+Ecrx9/UYUySNNDMk4set1J5EuC6yn/PBc4CPh7lgTBrgE9QHn3y9cy8Hco/G4CIaBb/F2vOfT3ln8MbgVcA1bl8zb6HHwPeXbnOZyPis4vcCw0RG3vqN+8CPg38vzXbjlAZkhzl+V5raj57rObrozXvj7Lw9z/rrpOUnyz9cmbuq/0gIs6n3GPZDa2uudhxL8vMQ3XHPZ+aWDPztoj4MeAlwDUR8c7M/Mua/Z8I/DHlHsH7ojy5/4mVj+fvc822Zmrv+xyL/62pvZ8B7MrMP637Xl63yDkkSebJVsctO0/WqB4TlBuLl9Sdd1OH8Z9RE8NURHwjIp4LXAy8dpHvocmlJOfsqc9Uet6upzyJu+orlIf4AVxIechgpy6KiJHK/IRnAIeAfcAvVHr3iIjvj4gTFznPPwIviPKctlHgEuBjHcTR7JoPU36yVVX/fh/wyxHz8+s2Nzp5RDwd+OfM/DPgz4Efqtul2oj7l8qcg9rJ4l/h2H2u3V4fSzP/C9gWEWsr39O/r2yrtw/4jzVzHiYi4nspD5PZVpmbcBKwtY1rStJQMU/O61aerPdJ4LyIOLNy/IkR8f2U789TI+JHKttPinIBmHbv2XXAfwbWZWb1SV2z7+E2KsVpIuIHKQ/llAAbe+pP76A8Rr7qzygnjjuBH2VpvYlfo5yAPgS8NjO/S/mP/OeAT1cmTf8pizyhqgyF2Ql8BLgTuCMz/66DOJpd87PAXGWS9+sr5z8rjhVFeQvl5P3ZiLi78r6R84E7I+IA5d7CP6yLf5ry/byLclK5vebj36ecoA6w8P7Xx9JQZn6a8ryPfwQ+Bfx5Zh5osN+Hgb8BPhERBykPXzmpcvx1lO/rh+pikyQdY57sUp5s8P08RHne37WV4ZOfAJ6dmY9Xjv+jyn3/H5Q7VNu9ZzcAr6TccK9q9j38CfCkiPg85cI0d7SKWcMlMuufykuSJEmS+p1P9iRJkiRpANnYkyRJkqQBZGNPkiRJkgaQjT1JkiRJGkA29iRJkiRpANnYkyRJkqQBZGNPkiRJkgaQjT1JkiRJGkD/P5NX/5JIt6A4AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from collections import Counter\n", "\n", "author_dist = Counter([count for count in df['author'].value_counts()])\n", "x_author, y_author = zip(*author_dist.items())\n", "plt.subplot(1,2,1)\n", "plt.scatter(x_author, y_author)\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.xlabel('Number of letters authored')\n", "plt.ylabel('Number of authors')\n", "\n", "plt.subplot(1,2,2)\n", "addressee_dist = Counter([count for count in df['addressee'].value_counts()])\n", "x_addressee, y_addressee = zip(*addressee_dist.items())\n", "plt.scatter(x_addressee, y_addressee)\n", "plt.xscale('log')\n", "plt.yscale('log')\n", "plt.xlabel('Number of letters received')\n", "plt.ylabel('Number of addressees')\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The plots show typical skewed distributions. The vast majority of correspondents author and/or receive only one or a few letters (the hight bar on the left of each figure represents all authors/addressees authoring or receiving only one letter). Only a handful of people author or receive more than a thousand letters. \n", "\n", "Who are the most prolific authors?" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Groot, Hugo de, 1583-1645 4912\n", "Huygens, Constantijn, 1596-1687 3951\n", "Plantin, Christophe, 1520-1589 2331\n", "Vossius, Gerardus Joannes, 1577-1649 2292\n", "Peiresc, Nicolas-Claude Fabri de, 1580-1637 2111\n", "Oldenburg, Henry, 1619-1677 2092\n", "Scaliger, Joseph Justus, 1540-1609 1847\n", "Huygens, Christiaan, 1629-1695 1423\n", "Hearne, Thomas, 1678-1735 1382\n", "Wallis, John (Dr), 1616-1703 1290\n", "Smith, Thomas (Dr), 1638-1710 1114\n", "Dury, John, 1596-1680 1003\n", "Bayle, Pierre, 1647-1706 938\n", "Bourignon, Antoinette, 1616-1680 887\n", "Montagu, Mary Wortley (Lady), 1689-1762 860\n", "Aubrey, John, 1626-1697 854\n", "Heinsius, Nicolaas, 1620-1681 833\n", "Descartes, René, 1596-1650 796\n", "Vossius, Isaac (Dr), 1618-1689 793\n", "Brett, Thomas, 1667-1744 742\n", "Name: author, dtype: int64" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['author'].value_counts().head(20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the list above, most of the authors are the central figure or eponym of one of the EMLO collections.\n", "\n", "Exceptions are:\n", "\n", "- John Dury (1596-1650): Preacher and ecumenist\n", "- August II of Braunschweig-Wolfenbüttel (1579-1666): Duke (Herzog) of Braunschweig-Wolfenbüttel\n", "\n", "These are prolific authors in collections centred on someone else. \n", "\n", "We first look at the letters of August II. Which collections are they part of?" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collections with August II of Braunschweig-Wolfenbüttel's letters:\n" ] }, { "data": { "text/plain": [ "Andreae, Johann Valentin 582\n", "Kircher, Athanasius 21\n", "Bodleian card catalogue 1\n", "Braunschweig-Wolfenbüttel, Sophia Hedwig von 1\n", "Name: collection, dtype: int64" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Collections with August II of Braunschweig-Wolfenbüttel's letters:\")\n", "df[df['author'] == 'August II of Braunschweig-Wolfenbüttel, 1579-1666']['collection'].value_counts()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we look at who these letters are addressed to:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Addressees of August II of Braunschweig-Wolfenbüttel's letters:\n" ] }, { "data": { "text/plain": [ "Andreae, Johann Valentin, 1586-1654 581\n", "Kircher, Athanasius, 1601-1680 21\n", "Württemberg, Eberhard III von, 1614-1674 1\n", "Braunschweig-Lüneburg, Georg, 1582-1641 1\n", "Braunschweig-Wolfenbüttel, Sophia Hedwig von, 1592-1642 1\n", "Name: addressee, dtype: int64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Addressees of August II of Braunschweig-Wolfenbüttel's letters:\")\n", "df[df['author'] == 'August II of Braunschweig-Wolfenbüttel, 1579-1666']['addressee'].value_counts()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These two queries reveal a typical pattern in these collections. August II has 582 letters in the collection of Johann Valentin Andreae, of which 581 are also addressed to Andreae. Letters in a collection around a certain person tend be either authored or addressed to this person, which makes sense from a recordkeeping perspective. But there is one letter addressed to someone else, i.e. Eberhard III von Württemberg.\n", "\n", "Now, let us look at the same queries for John Dury's letters:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collections with John Dury's letters:\n" ] }, { "data": { "text/plain": [ "Hartlib, Samuel 837\n", "Bodleian card catalogue 149\n", "Ussher, James 6\n", "Mede, Joseph 3\n", "Huygens, Constantijn 2\n", "Culpeper, Cheney 2\n", "Boyle, Robert 2\n", "Vossius, Gerardus Joannes 1\n", "Bisterfeld, Johann Heinrich 1\n", "Name: collection, dtype: int64" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Collections with John Dury's letters:\")\n", "df[df['author'] == 'Dury, John, 1596-1680']['collection'].value_counts()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "John Dury has letters in eight different collections, but in seven of those, it is only a handful of letters. We can also see who he addressed those letters to:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Addressees of John Dury's letters:\n" ] }, { "data": { "text/plain": [ "Hartlib, Samuel, 1600-1662 528\n", "Roe, Thomas (Sir), 1581-1644 31\n", "Culpeper, Cheney, 1601-1663 11\n", "Borthwick, Eleazar, fl. 1633-1642 7\n", "St Amand, Joseph, fl. 1636-1643 7\n", " ... \n", "House of Commons (1641-1712) 1\n", "St Gallen and Appenzell, Clergy in, fl. 1654 1\n", "Cecil, Elizabeth, fl. 1640 1\n", "Coysh, Joseph, fl. 1652 1\n", "Rusdorf, Johann Joachim von, 1589-1640 1\n", "Name: addressee, Length: 135, dtype: int64" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Addressees of John Dury's letters:\")\n", "df[df['author'] == 'Dury, John, 1596-1680']['addressee'].value_counts()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we see a differennt pattern. Samuel Hartlib is by far the most frequent addressee of John Dury's letters in these collections. But looking at the two sets of counts above, we note that John Dury authored 837 letters in the Samuel Hartlib collections, of which only 528 are addressed to Samuel Hartlib. Who are the other 309 letters in the Samuel Hartlib collection addressed to? " ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Addressees of John Dury's letters in the Samuel Hartlib:\n" ] }, { "data": { "text/plain": [ "Hartlib, Samuel, 1600-1662 528\n", "Roe, Thomas (Sir), 1581-1644 30\n", "Culpeper, Cheney, 1601-1663 9\n", "Waller, William (Sir), 1598-1668 7\n", "Borthwick, Eleazar, fl. 1633-1642 7\n", " ... \n", "Ames, William, 1576-1633 1\n", "Ancelin, fl. 1660 1\n", "Bedell, William, 1572-1642 1\n", "Figulus, Petr, 1619-1670 1\n", "Palmer, Herbert, 1601-1647 1\n", "Name: addressee, Length: 127, dtype: int64" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Addressees of John Dury's letters in the Samuel Hartlib:\")\n", "df[(df['author'] == 'Dury, John, 1596-1680') & (df['collection'] == 'Hartlib, Samuel')]['addressee'].value_counts()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Apparently, some collections also contains hundreds of letters that are not authored by or addressed to the collection eponym.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Analyzing the Addressees" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Huygens, Constantijn, 1596-1687 4737\n", "Hearne, Thomas, 1678-1735 3795\n", "Vossius, Gerardus Joannes, 1577-1649 3498\n", "Hartlib, Samuel, 1600-1662 3388\n", "Groot, Hugo de, 1583-1645 3233\n", "Lhwyd, Edward, 1659-1709 3226\n", "Charlett, Arthur (Reverend), 1655-1722 3066\n", "Andreae, Johann Valentin, 1586-1654 2953\n", "Noble, Mark (Reverend), 1754-1827 2809\n", "Sancroft, William, 1617-1693 2797\n", "Kircher, Athanasius, 1601-1680 2209\n", "Oldenburg, Henry, 1619-1677 2127\n", "D'Orville, Jacques Philippe, 1696-1751 2066\n", "Brett, Thomas, 1667-1744 1767\n", "Lister, Martin, 1639-1712 1704\n", "Vossius, Isaac (Dr), 1618-1689 1690\n", "Solms-Braunfels, Amalia von, 1602-1675 1660\n", "Smith, Thomas (Dr), 1638-1710 1637\n", "Wood, Anthony, 1632-1695 1547\n", "Scaliger, Joseph Justus, 1540-1609 1512\n", "Name: addressee, dtype: int64" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['addressee'].value_counts().head(20)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the list above, most of the addressees are the central figure or eponym of one of the EMLO collections.\n", "\n", "Exceptions are:\n", "\n", "- Nicolaas Reigersberch (1584-1654): brother-in-law of Hugo de Groot; Jurist\n", "- Willem de Groot (1597-1662): brother of Hugo de Groot (1583-1645); Dutch jurist\n", "\n", "These are prolific authors in collections centred on someone else. " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collections with letters to Nicolaas Reigersberch:\n" ] }, { "data": { "text/plain": [ "Groot, Hugo de 881\n", "Vossius, Gerardus Joannes 8\n", "Bodleian card catalogue 6\n", "Name: collection, dtype: int64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Collections with letters to Nicolaas Reigersberch:\")\n", "df[df['addressee'] == 'Reigersberch, Nicolaas, 1584-1654']['collection'].value_counts()\n", "\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Authors of letters to Nicolaas Reigersberch:\n" ] }, { "data": { "text/plain": [ "Groot, Hugo de, 1583-1645 862\n", "Reigersberch, Maria, 1589-1653 18\n", "Vossius, Gerardus Joannes, 1577-1649 14\n", "Groot, Willem de, 1597-1662 1\n", "Name: author, dtype: int64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Authors of letters to Nicolaas Reigersberch:\")\n", "df[df['addressee'] == 'Reigersberch, Nicolaas, 1584-1654']['author'].value_counts()\n", "\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collections with letters to Willem de Groot:\n" ] }, { "data": { "text/plain": [ "Groot, Hugo de 732\n", "Vossius, Gerardus Joannes 3\n", "Bodleian card catalogue 1\n", "Name: collection, dtype: int64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Collections with letters to Willem de Groot:\")\n", "df[df['addressee'] == 'Groot, Willem de, 1597-1662']['collection'].value_counts()\n", "\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Authors of letters to Willem de Groot:\n" ] }, { "data": { "text/plain": [ "Groot, Hugo de, 1583-1645 726\n", "Vossius, Gerardus Joannes, 1577-1649 4\n", "Groot, Johan Hugo de, 1554-1640 4\n", "Groot van Kraayenburg, Dirck de, 1618-1661 2\n", "Name: author, dtype: int64" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Authors of letters to Willem de Groot:\")\n", "df[df['addressee'] == 'Groot, Willem de, 1597-1662']['author'].value_counts()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, we see some letters between persons who are not the central figure in any of the EMLO collections. \n", "\n", "How many letters in each collection do not involve the eponym as either author or addressee?\n", "\n", "First, we map the name of the collection to the name as used as author or addressee:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Bodleian card catalogue\n" ] } ], "source": [ "eponyms = list(df['collection'].unique())\n", "authors = list(df['author'].unique())\n", "author_counts = df['author'].value_counts()\n", "authors\n", "\n", "best_map = {}\n", "eponym_map = {}\n", "for eponym in eponyms:\n", " #print(eponym)\n", " for author in authors:\n", " if not isinstance(author, str) or ';' in author:\n", " continue\n", " if eponym == 'Fermat, Pierre de' and author == 'Fermat, Pierre, 1601-1665':\n", " eponym_map[eponym] = author\n", " if eponym == 'Comenius, Jan Amos' and author == 'Komenský, Jan Amos, 1592-1670':\n", " eponym_map[eponym] = author\n", " if eponym in author[:len(eponym)]:\n", " if eponym not in best_map or author_counts[author] > best_map[eponym]:\n", " best_map[eponym] = author_counts[author]\n", " eponym_map[eponym] = author\n", " if eponym not in eponym_map:\n", " print(eponym)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collection:\t\t\t\t\t\tAll letters\tNon-eponym letters\n", "----------------------------------------------------------------------------------------\n", "Bayle, Pierre \t1791\t\t133\t(0.07)\n", "Sirleto, Guglielmo \t1438\t\t15\t(0.01)\n", "Seidenbecher, Georg Lorenz \t47\t\t0\t(0.00)\n", "Swammerdam, Jan \t172\t\t4\t(0.02)\n", "Fermat, Pierre de \t121\t\t6\t(0.05)\n", "Ortelius, Abraham \t467\t\t0\t(0.00)\n", "Reneri, Henricus \t61\t\t0\t(0.00)\n", "Spinoza, Baruch \t58\t\t1\t(0.02)\n", "Lister, Martin \t1212\t\t2\t(0.00)\n", "Wallis, John \t1998\t\t232\t(0.12)\n", "Ussher, James \t681\t\t17\t(0.02)\n", "Groot, Hugo de \t8034\t\t280\t(0.03)\n", "Franckenberg, Abraham von \t85\t\t1\t(0.01)\n", "Bourignon, Antoinette \t940\t\t0\t(0.00)\n", "Peiresc, Nicolas-Claude Fabri de \t1939\t\t11\t(0.01)\n", "Hartlib, Samuel \t4719\t\t1221\t(0.26)\n", "Braunschweig-Wolfenbüttel, Sophia Hedwig von \t169\t\t1\t(0.01)\n", "Solms-Braunfels, Amalia von \t1184\t\t3\t(0.00)\n", "Comenius, Jan Amos \t571\t\t41\t(0.07)\n", "Selden, John \t355\t\t10\t(0.03)\n", "Culpeper, Cheney \t3\t\t0\t(0.00)\n", "Montagu, Mary Wortley \t963\t\t0\t(0.00)\n", "Nierop, Dirck Rembrantsz van \t80\t\t4\t(0.05)\n", "Plantin, Christophe \t3030\t\t324\t(0.11)\n", "Oldenburg, Henry \t3176\t\t34\t(0.01)\n", "Pontanus, Johannes Isacius \t321\t\t2\t(0.01)\n", "Dodington, John \t571\t\t8\t(0.01)\n", "Stuart, Arbella \t118\t\t2\t(0.02)\n", "Vives, Juan Luis \t195\t\t19\t(0.10)\n", "Jungius, Joachim \t506\t\t18\t(0.04)\n", "Coccejus, Johannes \t515\t\t2\t(0.00)\n", "Opitz, Martin \t110\t\t0\t(0.00)\n", "Agustín, Antonio \t579\t\t5\t(0.01)\n", "Andreae, Johann Valentin \t3696\t\t81\t(0.02)\n", "Anhalt-Dessau, Henriette Amalia von \t1352\t\t1\t(0.00)\n", "Thomson, Richard \t78\t\t2\t(0.03)\n", "Schott, Caspar \t180\t\t0\t(0.00)\n", "Permeier, Johann \t89\t\t3\t(0.03)\n", "Vossius, Isaac \t1703\t\t2\t(0.00)\n", "Pascal, Blaise \t49\t\t6\t(0.12)\n", "Magini, Giovanni Antonio \t100\t\t1\t(0.01)\n", "Vossius, Gerardus Joannes \t3430\t\t14\t(0.00)\n", "Bernegger, Matthias \t435\t\t0\t(0.00)\n", "Scaliger, Joseph Justus \t3338\t\t8\t(0.00)\n", "Mengoli, Pietro \t40\t\t0\t(0.00)\n", "Plot, Robert \t108\t\t6\t(0.06)\n", "Hilchen, David \t98\t\t22\t(0.22)\n", "Sidney, Philip \t380\t\t5\t(0.01)\n", "Boyle, Robert \t1759\t\t9\t(0.01)\n", "Jurin, James \t701\t\t0\t(0.00)\n", "Sachs von Löwenheim, Philipp Jakob \t143\t\t0\t(0.00)\n", "Kepler, Johannes \t883\t\t57\t(0.06)\n", "Beverland, Hadriaan \t305\t\t0\t(0.00)\n", "Reland, Adriaan \t211\t\t0\t(0.00)\n", "Bisterfeld, Johann Heinrich \t121\t\t3\t(0.02)\n", "Baxter, Richard \t8\t\t0\t(0.00)\n", "Lhwyd, Edward \t2128\t\t74\t(0.03)\n", "Euler, Leonhard \t811\t\t35\t(0.04)\n", "Halley, Edmond \t245\t\t0\t(0.00)\n", "Aubrey, John \t1073\t\t10\t(0.01)\n", "Conway, Anne \t296\t\t78\t(0.26)\n", "Mersenne, Marin \t1904\t\t784\t(0.41)\n", "Milton, John \t66\t\t0\t(0.00)\n", "Rabus, Pieter \t30\t\t0\t(0.00)\n", "Mede, Joseph \t441\t\t9\t(0.02)\n", "Pennant, Thomas \t508\t\t1\t(0.00)\n", "Hobbes, Thomas \t223\t\t10\t(0.04)\n", "Beale, Robert \t101\t\t27\t(0.27)\n", "Huygens, Christiaan \t3080\t\t393\t(0.13)\n", "Claude, Jean \t117\t\t4\t(0.03)\n", "Ruar, Martin \t100\t\t17\t(0.17)\n", "Gray, Thomas \t651\t\t7\t(0.01)\n", "Oranje-Nassau, Albertine Agnes van \t782\t\t48\t(0.06)\n", "Schurman, Anna Maria van \t244\t\t1\t(0.00)\n", "Rich, Penelope \t42\t\t2\t(0.05)\n", "Newton, Isaac \t1140\t\t135\t(0.12)\n", "Clifford, Margaret \t131\t\t0\t(0.00)\n", "Kircher, Athanasius \t2693\t\t3\t(0.00)\n", "Dudley, Anne \t27\t\t1\t(0.04)\n", "Ashmole, Elias \t764\t\t27\t(0.04)\n", "Vernon, Francis \t275\t\t0\t(0.00)\n", "Collins, John \t273\t\t88\t(0.32)\n", "Descartes, René \t727\t\t7\t(0.01)\n", "Huygens, Constantijn \t7120\t\t6\t(0.00)\n", "Bacon, Anne \t197\t\t2\t(0.01)\n", "Gruter, Jan \t136\t\t0\t(0.00)\n", "Worthington, John \t174\t\t8\t(0.05)\n", "Brahe, Tycho \t505\t\t28\t(0.06)\n", "Rubens, Peter Paul \t940\t\t558\t(0.59)\n", "Hutton, Charles \t133\t\t6\t(0.05)\n", "Vernon, Margaret \t21\t\t0\t(0.00)\n", "Beeckman, Isaac \t28\t\t1\t(0.04)\n" ] } ], "source": [ "print(\"Collection:\\t\\t\\t\\t\\t\\tAll letters\\tNon-eponym letters\")\n", "print(\"----------------------------------------------------------------------------------------\")\n", "for eponym in eponym_map:\n", " epo_df = df[df['collection'] == eponym]\n", " #print(eponym, '\\t', eponym_map[eponym])\n", " non_epo_df = df[(df['collection'] == eponym) & (df['author'] != eponym_map[eponym]) & (df['addressee'] != eponym_map[eponym])]\n", " perc = non_epo_df.shape[0] / epo_df.shape[0]\n", " print(f\"{eponym: <50}\\t{epo_df.shape[0]}\\t\\t{non_epo_df.shape[0]}\\t({perc:.2f})\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Most collection have almost exclusively letters involving the eponym, but some collections are very different. In the Peter Paul Rubens collection, the majority (59%) of letters are between other people than Rubens. " ] }, { "cell_type": "code", "execution_count": 19, "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", "
collectionauthoraddressee
131088Rubens, Peter PaulMoretus, Balthasar, 1574-1641Rubens, Philip, 1574-1611
131089Rubens, Peter PaulRubens, Philip, 1574-1611Rubens, Peter Paul, 1577-1640
131090Rubens, Peter PaulAlbert VII, Archduke of Austria, 1559-1621Richardot, Jean, 1570-1614
131091Rubens, Peter PaulGonzaga, Vincenzo I, 1562-1612Damasceni Peretti, Alessandro, 1571-1623
131092Rubens, Peter PaulDamasceni Peretti, Alessandro, 1571-1623Gonzaga, Vincenzo I, 1562-1612
131093Rubens, Peter PaulArrigoni, Lelio, b.1541Chieppio, Annibal, 1563-1623
131094Rubens, Peter PaulRubens, Philip, 1574-1611Rubens, Peter Paul, 1577-1640
131095Rubens, Peter PaulArrigoni, Lelio, b.1541Chieppio, Annibal, 1563-1623
131096Rubens, Peter PaulRichardot, Jean, 1570-1614Gonzaga, Vincenzo I, 1562-1612
131097Rubens, Peter PaulArrigoni, Lelio, b.1541Chieppio, Annibal, 1563-1623
\n", "
" ], "text/plain": [ " collection author \\\n", "131088 Rubens, Peter Paul Moretus, Balthasar, 1574-1641 \n", "131089 Rubens, Peter Paul Rubens, Philip, 1574-1611 \n", "131090 Rubens, Peter Paul Albert VII, Archduke of Austria, 1559-1621 \n", "131091 Rubens, Peter Paul Gonzaga, Vincenzo I, 1562-1612 \n", "131092 Rubens, Peter Paul Damasceni Peretti, Alessandro, 1571-1623 \n", "131093 Rubens, Peter Paul Arrigoni, Lelio, b.1541 \n", "131094 Rubens, Peter Paul Rubens, Philip, 1574-1611 \n", "131095 Rubens, Peter Paul Arrigoni, Lelio, b.1541 \n", "131096 Rubens, Peter Paul Richardot, Jean, 1570-1614 \n", "131097 Rubens, Peter Paul Arrigoni, Lelio, b.1541 \n", "\n", " addressee \n", "131088 Rubens, Philip, 1574-1611 \n", "131089 Rubens, Peter Paul, 1577-1640 \n", "131090 Richardot, Jean, 1570-1614 \n", "131091 Damasceni Peretti, Alessandro, 1571-1623 \n", "131092 Gonzaga, Vincenzo I, 1562-1612 \n", "131093 Chieppio, Annibal, 1563-1623 \n", "131094 Rubens, Peter Paul, 1577-1640 \n", "131095 Chieppio, Annibal, 1563-1623 \n", "131096 Gonzaga, Vincenzo I, 1562-1612 \n", "131097 Chieppio, Annibal, 1563-1623 " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['collection'] == 'Rubens, Peter Paul'][['collection','author','addressee']].head(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Normalization and Classification for Creating and Comparing Groups\n", "\n", "The metadata is fairly minimal when considering just the fields that are in the dataset. But there are more things that can be done.\n", "\n", "- The names of senders and recipients have the birth and death years (in most cases), so we could use these to group persons by age at death, or birth decade. \n", "\n", "- The dates that the letters were sent are often exact down to the specific day, but sometimes only a month was known or an earliest and latest probable dates. We can normalise those dates to get an insight in when letters were sent, in which year or month. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Normalizing and scale\n", "\n", "At a small scale, there is no need to normalize data, as the researcher can do that mentally while working with the materials.\n", "\n", "At an intermediate scale of hundreds or thousands of documents, the variations in names of persons and places, ways in which dates are recorded are becoming a hurdle to analysis. For topical analysis, this is also an issue, as many connections between documents are hard to bring to the surface because of morphological and spelling variations. \n", "\n", "At a large scale with hundreds of thousands or millions of documents, the textual variations become less of a hurdle, as there is enough data to identify and map variants. \n", "\n", "At a very large scale with tens or hundreds of millions of documents, the textual variations become meaningful and allow measuring contextual nuance in how word variants are used to convey different aspects." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9 January 1638 14\n", "Unknown date 14\n", "12 December 1643 12\n", "20 June 1643 11\n", "6 February 1644 11\n", " ..\n", "4 April 1634 1\n", "3 November 1628 1\n", "9 June 1628 1\n", "20 August 1627 1\n", "11 January 1609 1\n", "Name: date, Length: 4067, dtype: int64" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df.collection == 'Groot, Hugo de'].date.value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The are 4067 different values for the dates, with the most common date being 9 January 1638. There are also 14 unknown dates. " ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [], "source": [ "import re\n", "\n", "def is_day_month_year(sent_date):\n", " return re.match(r'^\\d+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\w* \\d{4}$', sent_date) != None\n", "\n", "def is_month_year(sent_date):\n", " return re.match(r'^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\w* \\d{4}$', sent_date) != None\n", "\n", "def is_year(sent_date):\n", " return re.match(r'^\\d{4}$', sent_date) != None\n", "\n", "def is_day_month(sent_date):\n", " return re.match(r'^\\d+ (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\w*$', sent_date) != None\n", "\n", "def is_month(sent_date):\n", " return re.match(r'^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\w*$', sent_date) != None\n", "\n", "def is_day_year(sent_date):\n", " return re.match(r'^\\d+ \\d{4}$', sent_date) != None\n", "\n", "def get_year(sent_date):\n", " if is_day_month_year(sent_date) or is_year(sent_date) or is_day_year(sent_date) or is_month_year(sent_date):\n", " return int(sent_date[-4:])\n", " else:\n", " return None\n", " \n", "def get_month(sent_date):\n", " if is_day_month_year(sent_date) or is_month(sent_date) or is_day_month(sent_date) or is_month_year(sent_date):\n", " match = re.match(r'.*((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\w*).*', sent_date)\n", " return match.group(1)\n", " else:\n", " return None\n", " \n", " \n", "def get_date_type(sent_date):\n", " if is_day_month_year(sent_date):\n", " return 'day_month_year'\n", " if is_month_year(sent_date):\n", " return 'month_year'\n", " if is_year(sent_date):\n", " return 'year'\n", " if is_day_month(sent_date):\n", " return 'day_month'\n", " if is_month(sent_date):\n", " return 'day_month'\n", " if is_day_year(sent_date):\n", " return 'day_year'\n", " if 'Between' in sent_date:\n", " return 'range_between'\n", " if 'On or before' in sent_date:\n", " return 'range_before'\n", " if 'On or after' in sent_date:\n", " return 'range_after'\n", " if 'Unknown date' in sent_date:\n", " return 'unknown'\n", " else:\n", " return 'invalid format'\n", "\n", "#df['date_type'] = df.date.apply(get_date_type)\n", "df['date_year'] = df.date.apply(get_year)\n", "df['date_month'] = df.date.apply(get_month)\n", "\n" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "day_month_year 114636\n", "unknown 5748\n", "month_year 3778\n", "year 3103\n", "day_month 3053\n", "range_between 1700\n", "range_before 104\n", "range_after 44\n", "day_year 37\n", "invalid format 7\n", "Name: date_type, dtype: int64" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.date_type.value_counts()" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "322.0" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.date_year.max() - df.date_year.min() + 1" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df.date_year.hist(bins=322)#.value_counts().sort_index()" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "March 11031\n", "August 10507\n", "July 10364\n", "May 10335\n", "April 10239\n", "January 10139\n", "September 9957\n", "June 9951\n", "October 9884\n", "February 9855\n", "November 9640\n", "December 9565\n", "Name: date_month, dtype: int64" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.date_month.value_counts()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "author addressee \n", "Albert VII, Archduke of Austria, 1559-1621 Gonzaga, Vincenzo I, 1562-1612 1\n", "Rubens, Peter Paul, 1577-1640 Vosbergen, Josias van, 1593-1628 1\n", "Mello, Francisco Manuel de, 1608-1666 Chambre des Comptes (Spanish Netherlands) 1\n", "Mennes, John (Sir), 1599-1671 Admiralty Court, England 1\n", "Moncada, Francisco, 1586-1635 Philip IV, King of Spain, 1605-1665 1\n", " ..\n", "Rubens, Peter Paul, 1577-1640 Fabri, Palamède, 1582-1645 18\n", " Olivares, Gaspar de Guzmán, Conde de, 1587-1645 25\n", "Ferdinand, archiduc d'Autriche, 1609-1641 Philip IV, King of Spain, 1605-1665 36\n", "Rubens, Peter Paul, 1577-1640 Dupuy, Pierre, 1582-1651 71\n", "Peiresc, Nicolas-Claude Fabri de, 1580-1637 Rubens, Peter Paul, 1577-1640 85\n", "Length: 301, dtype: int64" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df_rubens = df[df.collection == 'Rubens, Peter Paul']\n", "\n", "df_rubens[['collection','author','addressee']].head(10)\n", "\n", "g = df_rubens.groupby(['author', 'addressee']).size()\n", "\n", "u = g.unstack('author')\n", "\n", "plt.imshow(u, cmap='hot', interpolation='nearest')\n", "\n", "g.sort_values()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Connections between collections\n", "\n", "How many connections are there between collections? This is easy with two collections, but becomes more difficult when there are many collections.\n", "\n", "Which persons appear in multiple collections?" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Unknown 37\n", "Oldenburg, Henry, 1619-1677 16\n", "Huygens, Constantijn, 1596-1687 14\n", "Mersenne, Marin, 1588-1648 13\n", "Gronovius, Johann Frederick, 1611-1671 12\n", "Groot, Hugo de, 1583-1645 11\n", "Leibniz, Gottfried Wilhelm, 1646-1716 11\n", "Vossius, Gerardus Joannes, 1577-1649 11\n", "Descartes, René, 1596-1650 10\n", "Huygens, Christiaan, 1629-1695 10\n", "Rivet, André, 1572-1651 10\n", "Saumaise, Claude de, 1588-1653 10\n", "Hevelius, Johannes, 1611-1687 9\n", "Boyle, Robert, 1627-1691 9\n", "Hartlib, Samuel, 1600-1662 9\n", "Aubrey, John, 1626-1697 9\n", "Digby, Kenelm (Sir), 1603-1665 9\n", "Gassendi, Pierre, 1592-1655 9\n", "Wallis, John (Dr), 1616-1703 9\n", "Dury, John, 1596-1680 8\n", "Lipsius, Justus, 1547-1606 8\n", "Komenský, Jan Amos, 1592-1670 8\n", "Bernegger, Matthias, 1582-1640 8\n", "Newton, Isaac (Sir), 1642-1727 8\n", "Peiresc, Nicolas-Claude Fabri de, 1580-1637 8\n", "Kircher, Athanasius, 1601-1680 8\n", "Boulliau, Ismaël, 1605-1694 8\n", "Heinsius, Daniel, 1580-1655 8\n", "Sorbière, Samuel, 1615-1670 8\n", "Christina, Queen of Sweden, 1626-1689 7\n", " ..\n", "Manwaring, Robert, fl. 1637 1\n", "Smith, John, 1630-1679 1\n", "Cort, Christiaan de, 1611-1669 1\n", "Aerssen, Cornelis van, 1600-1662 1\n", "Cottereau, N., 1641-1706 1\n", "Conway, Anne, 1631-1679 1\n", "Chieppio, Annibal, 1563-1623 1\n", "Honywood, Robert (Sir), 1601-1686 1\n", "Doublet, Philips, d.1647 1\n", "Beeck, Anna, fl. 1649 1\n", "Montagu, Edward Wortley, 1678-1761 1\n", "Martinengo da Barco, Ascanio, 1539-1600 1\n", "Ghilde, Johan Flud van, fl. 1685 1\n", "Thomas, Robert, b.1681 1\n", "Brassard, Marie, fl. 1685 1\n", "Dalrymple, James, 1619-1695 1\n", "Leslie, John (Sir), 1766-1832 1\n", "Bacon, Arthur, fl. 1652 1\n", "Standfast, William (Reverend), 1683-1754 1\n", "Hoorn, magistrate of, fl. 1616-1617 1\n", "Clenche, Andrew, d.1692 1\n", "Bachcroft, Thomas, 1571-1662; Bainbridge, Thomas, 1574-1646; Brownrigg, Ralph (Dr), 1592-1659; Collins, Samuel (Dr), 1576-1651; Love, Richard, 1596-1661 1\n", "Higgins, Obadiah, 1663-1741 1\n", "Techmannus, Arnoldus, 1594-1666 1\n", "Klage, Thomas, 1598-1664 1\n", "Bodecher, J. W., fl. 1643 1\n", "Bachacius, Martinus, 1539-1612 1\n", "Morgan, Anthony, fl. 1654 1\n", "Finch, John, fl. 1653 1\n", "Ellenmeier, Johann, fl. 1635 1\n", "Name: author, dtype: int64" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# which authors occur in multiple collections\n", "df[(df[['collection', 'author']].duplicated(keep='first') == False)]['author'].value_counts()\n" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Oldenburg, Henry 1524\n", "Wallis, John 142\n", "Boyle, Robert 107\n", "Huygens, Christiaan 105\n", "Lister, Martin 61\n", "Hartlib, Samuel 46\n", "Newton, Isaac 16\n", "Swammerdam, Jan 8\n", "Milton, John 7\n", "Sachs von Löwenheim, Philipp Jakob 5\n", "Vossius, Isaac 4\n", "Hobbes, Thomas 2\n", "Ashmole, Elias 1\n", "Comenius, Jan Amos 1\n", "Vossius, Gerardus Joannes 1\n", "Coccejus, Johannes 1\n", "Name: collection, dtype: int64" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['author'] == 'Oldenburg, Henry, 1619-1677']['collection'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Samuel Hartlib is in the top 20 of addressees but not in the top 20 of authors:" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Samuel Hartlib\n", "\n", "\tnumber of letters sent: 401\n", "\tnumber of letters received: 3388\n" ] } ], "source": [ "print('Samuel Hartlib\\n')\n", "print(f'\\tnumber of letters sent:', df[df['author'] == 'Hartlib, Samuel, 1600-1662'].shape[0])\n", "print(f'\\tnumber of letters received:', (df[df['addressee'] == 'Hartlib, Samuel, 1600-1662'].shape[0]))\n" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Number of letters authored by Hugo de Groot per year\n", "hugo = 'Groot, Hugo de, 1583-1645'\n", "\n", "df['year'] = df['date'].str.extract('(\\d\\d\\d\\d)', expand=False)\n", "\n", "df_hugo = df[df['author'] == hugo]\n", "\n", "df_hugo['year'].value_counts().sort_index().plot()\n", "\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Reigersberch, Nicolaas, 1584-1654 862\n", "Groot, Willem de, 1597-1662 726\n", "Oxenstierna, Axel (Count), 1583-1654 587\n", "Camerarius, Ludwig, 1573-1651 347\n", "Vossius, Gerardus Joannes, 1577-1649 339\n", "Marin, Charles, d.1651 122\n", "Oxenstierna, Johan Axelsson, 1611-1657 109\n", "Salvius, Johan Adler, 1590-1652 106\n", "Wicquefort, Joachim van, 1600-1670 99\n", "Heinsius, Daniel, 1580-1655 89\n", "Aubery du Maurier, Benjamin, 1566-1636 85\n", "Appelboom, Harald Andersson, 1612-1674 83\n", "Christina, Queen of Sweden, 1626-1689 77\n", "Schmalz, Peter Abel, fl. 1635-1638 61\n", "Uyttenbogaert, Johannes (Dr), 1557-1644 51\n", "Jaski, Israel, 1573-1642 39\n", "Bielke, Sten Svantesson, 1598-1638 39\n", "Spiring Silvercrona, Petter, 1600-1652 39\n", "Groot, Johan Hugo de, 1554-1640 37\n", "Lingelsheim, Georg Michael, 1556-1636 36\n", "Unknown 33\n", "Bernegger, Matthias, 1582-1640 29\n", "Müller, Georg, d.1639 29\n", "Sprecher von Bernegg, Fortunatus, 1585-1647 24\n", "Casaubon, Isaac, 1559-1614 23\n", "Grubbe, Lars, 1601-1642 22\n", "Camerarius, Joachim, 1603-1687 22\n", "Meursius, Johannes, 1579-1639 22\n", "Vossius, Isaac (Dr), 1618-1689 20\n", "Otto II, 1578-1637 19\n", " ... \n", "Skytte, Bengt, 1614-1683 1\n", "Gomaer, François, 1563-1641 1\n", "Barclay-Debonnaire, Louise, 1585-1652 1\n", "Emporagrius, Erik Gabrielsson, 1606-1674 1\n", "Cappel, Louis, 1585-1658 1\n", "Jack, Gilbert, 1577-1628 1\n", "Vossius, Gerardus, 1619-1640 1\n", "Aligre, Étienne, 1550-1635 1\n", "Höpfner, Heinrich, 1583-1642 1\n", "Aa, Anthony Willemsz., 1582-1638 1\n", "Rigault, Nicolas, 1577-1654 1\n", "Brederode, Reinoud, 1567-1633 1\n", "Jungermann, Gottfried, 1577-1610 1\n", "Wertheim de Rochefort, Johann Dietrich Löwenstein, 1585-1657 1\n", "L'Empereur, Constantine, 1591-1648 1\n", "Stringe, Johan, fl. 1622 1\n", "Forstner, Christoph von, 1598-1667 1\n", "Voisin, Joseph, 1610-1685 1\n", "Orléans, administration of the German Nation at 1\n", "Sweerts, Pierre François, 1567-1629 1\n", "Pas, Isaac Manassès de, 1590-1640 1\n", "Mesmes, Henri, d.1650 1\n", "Gardie, Magnus Gabriel de la, 1622-1686 1\n", "Wertheim de Virneburg, Friedrich Ludwig Löwenstein, 1598-1657 1\n", "Bogislaw, Ernst, 1620-1684 1\n", "Hohenlohe-Langenburg, Philipp Ernst von, 1584-1628 1\n", "Oldenbarnevelt, Willem van, 1590-1638 1\n", "Beauharnais, François, d.1651 1\n", "Vair, Guillaume, 1566-1621 1\n", "Menasseh, Ben Israel, 1604-1657 1\n", "Name: addressee, dtype: int64" ] }, "execution_count": 110, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_hugo['addressee'].value_counts()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some collections include letters between correspondents of the collection creator, while others only contains letters where the collection creator is the author or addressee of the letter. \n", "\n", "E.g. the collection of correspondence of Hugo de Groot includes letters between his brother and his brother-in-law.\n", "\n" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Huygens, Christiaan, 1629-1695 1345\n", "Huygens, Constantijn, 1628-1697 175\n", "Oldenburg, Henry, 1619-1677 105\n", "Huygens, Constantijn, 1596-1687 75\n", "Sluse, René François de, 1622-1685 72\n", "Chapelain, Jean, 1595-1674 70\n", "Moray, Robert (Sir), 1608-1673 68\n", "Schooten, Frans van, 1615-1660 58\n", "Boulliau, Ismaël, 1605-1694 54\n", "Leibniz, Gottfried Wilhelm, 1646-1716 42\n", "Bruno, Henrick, 1617-1664 40\n", "Huygens, Susanna, 1637-1725 32\n", "Heinsius, Nicolaas, 1620-1681 28\n", "Petit, Pierre, 1598 or before-1677 24\n", "Medici, Leopoldo de', 1617-1675 24\n", "Doublet, Philips, 1633-1707 23\n", "Hudde, Johannes, 1628-1704 21\n", "L'Hôpital, Guillaume François Antoine de, 1661-1704 21\n", "Wallis, John (Dr), 1616-1703 20\n", "Mersenne, Marin, 1588-1648 20\n", "Fatio de Duillier, Nicolas, 1664-1753 20\n", "Saint-Vincent, Grégoire de, 1584-1667 19\n", "Kinner von Löwenthurn, Gottfried Alois, b.1610 18\n", "Mylon, Claude, 1618-1660 18\n", "Fermat, Pierre, 1601-1665 17\n", "Hire, Philippe de la, 1640-1718 16\n", "Gent, Pieter, b.1640 16\n", "Graaf, Jan, 1673-1697 16\n", "Hevelius, Johannes, 1611-1687 15\n", "Thévenot, Melchisédech, 1620-1692 13\n", " ... \n", "Hobbes, Thomas, 1588-1679 1\n", "Mathion, Oded Louis, 1620-1700 1\n", "Louise Hollandine, Countess Palatine, 1622-1709 1\n", "Regnauld, André, d.1702 1\n", "Benoit, Antoine, 1632-1717 1\n", "Limojon, Alexandre-Toussaint de, 1630-1689 1\n", "Leeuwenhoek, Antoni van, 1632-1723 1\n", "Gillet, Pierre François, 1648-1720 1\n", "Nassau-Siegen, Hendrik of, 1611-1652 1\n", "Boecler, Johann Heinrich, 1611-1672 1\n", "Lely, Peter, 1618-1680 1\n", "Christina, Queen of Sweden, 1626-1689 1\n", "Kircher, Athanasius, 1601-1680 1\n", "Vossius, Isaac (Dr), 1618-1689 1\n", "Molyneux, Thomas (Sir), 1661-1733 1\n", "Briou, fl. 1675 1\n", "Douw, Simon, 1620-1663 1\n", "Court of Holland, Zeeland and West Friesland, 1\n", "Alberghetti, Sigismondo, d.1702 1\n", "Placentius, Johann, d.1683 1\n", "Wijk, Johan van der, 1625-1679 1\n", "Magalotti, Lorenzo, 1637-1712 1\n", "Varignon, Pierre, 1654-1722 1\n", "Cock, Christopher, fl. 1684 1\n", "Dodart, Denis, 1634-1707 1\n", "Holmes, Robert (Sir), 1622-1692 1\n", "Vallot, Antoine, 1594-1671 1\n", "Bilberg, Johann, 1650-1717 1\n", "Loménie, Henri-Auguste, 1595-1666 1\n", "Smethwick, Francis, d.1682 1\n", "Name: author, dtype: int64" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_christiaan = df[(df['author'] == 'Huygens, Christiaan, 1629-1695') | (df['addressee'] == 'Huygens, Christiaan, 1629-1695')]\n", "\n", "df_christiaan = df[df['collection'] == 'Huygens, Christiaan']\n", "df_christiaan['author'].value_counts()\n" ] }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Huygens, Constantijn, 1596-1687 4252\n", "Solms-Braunfels, Amalia von, 1602-1675 768\n", "Huygens, Christiaan, 1551-1624 94\n", "Barlaeus, Caspar, 1584-1648 81\n", "Sauzin, Jean 68\n", "Heinsius, Daniel, 1580-1655 63\n", "Lionne, Hugues de, 1611-1671 44\n", "Rivet, André, 1572-1651 44\n", "Hooft, Pieter Cornelius, 1581-1647 40\n", "William III and II, King of England, Scotland, and Ireland, 1650-1702 39\n", "Beringhen, Henri, 1603-1692 33\n", "Chièze, Sebastien, 1625-1679 29\n", "Unknown 28\n", "Langes de Montmirail, Frédéric de, 1630-1697 26\n", "Leu de Wilhem, David le, 1588-1658 25\n", "Chambrun, Jacques Pineton, 1635-1689 23\n", "Dohna, Frederick von, 1621-1688 21\n", "Council of the Prince, fl. 1656-1664 20\n", "Loménie, Henri Louis, 1635-1698 20\n", "Swann-Ogle, Utricia, 1611-1674 19\n", "Ban, Jan Albert, 1598-1644 19\n", "Jermyn, Henry, 1605-1684 18\n", "Puteanus, Erycius, 1574-1646 18\n", "Nassau-Siegen, Hendrik of, 1611-1652 18\n", "Westerbaen, Jacob, 1599-1670 17\n", "Cusance, Béatrix, 1614-1663 17\n", "Schurman, Anna Maria van, 1607-1678 17\n", "Boxhorn, Marcus Zuerius van, 1612-1653 15\n", "Bennet, Henry, 1618-1685 15\n", "Le Tellier, François Michel, 1641-1691 14\n", " ... \n", "Wierts, Joan, fl. 1650-1692 1\n", "Muelen, Andries, 1591-1654 1\n", "Molino, Domenico, 1573-1635 1\n", "Burg, fl. 1662 1\n", "Frédéric-Armand, comte de Schomberg, 1615-1690 1\n", "Fürstenberg, Ferdinand von, 1626-1683 1\n", "Colvius, Andreas, 1594-1671 1\n", "Sprecher von Bernegg, Fortunatus, 1585-1647 1\n", "Sipenesse, Cornelis, d.1635 1\n", "Santen, Jan, fl. 1635-1649 1\n", "Caron, Suzette, fl. 1669-1689 1\n", "Amat, Angélique, fl. 1666 1\n", "Brancas, Marie, fl. 1613-1662 1\n", "Nicholas, Edward (Sir), 1593-1669 1\n", "Beauvais, Charles, b.1590 1\n", "Sohier, Nicolaas, fl. 1638 1\n", "Zuerius (Miss), fl. 1667 1\n", "Sylvius, Jean, fl. 1662-1666 1\n", "Does, Jacob, 1641-1680 1\n", "Huygen, Johan, fl. 1632-1640 1\n", "Coesmans, Jan, fl. 1643-1656 1\n", "Brederode, Juliana, 1622-1678 1\n", "Zuylen van Nyevelt, Mechtelt, fl. 1666 1\n", "Berckel, Clemens, fl. 1613 1\n", "Cotton, John (Sir), 1621-1702 1\n", "Schagen, Diederik, fl. 1660 1\n", "Magerus, Petrus, 1609-1653 1\n", "Petit, Pierre, 1598 or before-1677 1\n", "Nanteuil, Robert, 1623-1678 1\n", "Enclos, Anne de l', 1620-1705 1\n", "Name: addressee, dtype: int64" ] }, "execution_count": 124, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_constantijn = df[df['collection'] == 'Huygens, Constantijn']\n", "df_constantijn['addressee'].value_counts()\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "df['author_freq'] = df.groupby(['author'])['id'].transform('count')\n", "df['addressee_freq'] = df.groupby(['addressee'])['id'].transform('count')\n", "df['correspondents_freq'] = df.author_freq + df.addressee_freq" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "id author addressee \n", "0000ab7c-f54a-493a-a066-ee929eedd1e3 Johnson, John, 1662-1725 Charlett, Arthur (Reverend), 1655-1722 1\n", "0000bd85-9139-4fec-b362-78b3f4a6b9c2 Boywer, F., fl. 1737 Rawlinson, Richard (Dr), 1690-1755 1\n", "0000d067-74f1-46ed-b4bc-e9d2765091e6 Alciatus, Francesco (Cardinal), 1522-1580 Aytta, Viglius Zuichemius ab, 1507-1577 1\n", "0002ce4c-db77-4863-a1ec-e8be9b9d121b Buffon, George Louis Leclerc de, 1707-1788 Jurin, James, 1684-1750 1\n", "0002dbb4-2785-4b05-aa59-2bbb3f654802 Sandford, Daniel (Reverend), 1729-1770 Ballard, George, 1705-1755 1\n", " ..\n", "fffdf05b-cba6-442e-a563-18598314a021 Howel, John, fl. 1760-1781 Gough, Richard, 1735-1809 1\n", "fffe4dd7-c074-4de0-b422-dc1c635eca0f Villiers, Christophe de, fl. 1633-1639 Mersenne, Marin, 1588-1648 1\n", "fffe9c50-5132-476e-9173-9b680d0f916e August II of Braunschweig-Wolfenbüttel, 1579-1666 Andreae, Johann Valentin, 1586-1654 1\n", "fffefd34-9784-4673-920e-1696883ef2a2 Zapata, Rodrigo, fl. 1574 Agustín, Antonio, 1517-1586 1\n", "ffffcc85-6dbc-4a57-8942-40323c4d18fc Willis, Browne, 1682-1760 Rawlinson, Richard (Dr), 1690-1755 1\n", "Length: 127418, dtype: int64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.groupby(['id', 'author', 'addressee']).size()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "ids = list(df.sort_values('correspondents_freq').id)\n", "auths = list(df.sort_values('correspondents_freq').author)\n", "addrs = list(df.sort_values('correspondents_freq').addressee)\n", "auth_freqs = list(df.sort_values('correspondents_freq').author_freq)\n", "addr_freqs = list(df.sort_values('correspondents_freq').addressee_freq)\n", "\n", "auths = [auth if isinstance(auth, str) else None for auth in auths]\n", "addrs = [addr if isinstance(addr, str) else None for addr in addrs]\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'addr': 'Jones, Robert (Reverend), fl. 1698',\n", " 'addr_freq': 1.0,\n", " 'auth': 'Meare, John, 1649-1710',\n", " 'author_freq': 1.0,\n", " 'id': 'aabeebf7-4c5b-4bc2-a2ec-8ace326cfa7a'}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "corrs = [{'id': id, 'auth': auth, 'addr': addr, 'author_freq': auth_freq, 'addr_freq': addr_freq} for id, auth, addr, auth_freq, addr_freq in zip(ids, auths, addrs, auth_freqs, addr_freqs)]\n", "\n", "corrs[0]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1942\n", "3873\n" ] } ], "source": [ "from collections import OrderedDict\n", "queued = {}\n", "fetch = OrderedDict()\n", "seen = {}\n", "for corr in corrs:\n", " if corr['auth'] not in queued and corr['addr'] not in queued:\n", " queued[corr['auth']] = corr['id']\n", " queued[corr['addr']] = corr['id']\n", " fetch[corr['id']] = corr\n", "\n", "print(len(fetch.keys()))\n", "print(len(queued.keys()))\n" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "13827\n", "15758\n" ] } ], "source": [ "for corr in corrs:\n", " if corr['auth'] not in queued:\n", " queued[corr['auth']] = corr['id']\n", " fetch[corr['id']] = corr\n", " elif corr['auth'] not in queued:\n", " queued[corr['auth']] = corr['id']\n", " fetch[corr['id']] = corr\n", "\n", "print(len(fetch.keys()))\n", "print(len(queued.keys()))\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "http://emlo.bodleian.ox.ac.uk/profile/work/aabeebf7-4c5b-4bc2-a2ec-8ace326cfa7a\n" ] } ], "source": [ "for corr_id in fetch:\n", " url = f'http://emlo.bodleian.ox.ac.uk/profile/work/{corr_id}'\n", " print(url)\n", " break" ] }, { "cell_type": "code", "execution_count": 10, "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", "
Unnamed: 0idtypecollectiondateauthoraddresseeorigindestinationrepositoryauthor_freqaddressee_freqcorrespondents_freq
7334917320aabeebf7-4c5b-4bc2-a2ec-8ace326cfa7aLetterBodleian card catalogue30 August 1698Meare, John, 1649-1710Jones, Robert (Reverend), fl. 1698Oxfordshire, EnglandNaNBodleian Library, University of Oxford: MS Bal...1.01.02.0
\n", "
" ], "text/plain": [ " Unnamed: 0 id type \\\n", "73349 17320 aabeebf7-4c5b-4bc2-a2ec-8ace326cfa7a Letter \n", "\n", " collection date author \\\n", "73349 Bodleian card catalogue 30 August 1698 Meare, John, 1649-1710 \n", "\n", " addressee origin destination \\\n", "73349 Jones, Robert (Reverend), fl. 1698 Oxfordshire, England NaN \n", "\n", " repository author_freq \\\n", "73349 Bodleian Library, University of Oxford: MS Bal... 1.0 \n", "\n", " addressee_freq correspondents_freq \n", "73349 1.0 2.0 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import requests\n", "from bs4 import BeautifulSoup as bsoup\n", "\n", "df[df.id == 'aabeebf7-4c5b-4bc2-a2ec-8ace326cfa7a']\n", "\n", "#response = requests.get(url)" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [], "source": [ "def get_relation_info(rel_type, detail_soup):\n", " rel_type_soup = detail_soup.find_all(class_=rel_type)\n", " if len(rel_type_soup) == 0:\n", " return None\n", " relation_soup = rel_type_soup[0].find_all(class_='relations')[0]\n", " return {\n", " 'relation_type': rel_type.split(' '),\n", " 'relation_text': [string for string in relation_soup.stripped_strings]\n", " }\n", "\n", "def get_provenance(page_soup):\n", " prov_soup = page_soup.find_all(class_='provenance')[0]\n", " prov = prov_soup.text\n", " return prov.replace('Source of data: ','')\n", "\n", "def get_page_details(corr_id, page_soup):\n", " page_details = {\n", " 'correspondence_id': corr_id,\n", " 'relations': [],\n", " 'provenance': get_provenance(page_soup)\n", " }\n", " detail_soup = page_soup.find(id='details')\n", " if detail_soup:\n", " rel_types = ['people authors', 'people recipients', 'locations origin', 'locations destination']\n", " relation_info = [get_relation_info(rel_type, detail_soup) for rel_type in rel_types]\n", " page_details['relations'] = [relation for relation in relation_info if relation != None]\n", " return page_details\n", "\n", "def get_correspondence_page(corr_id):\n", " url = f'http://emlo.bodleian.ox.ac.uk/profile/work/{corr_id}'\n", " response = requests.get(url)\n", " page_soup = bsoup(response.content)\n", " return get_page_details(corr_id, page_soup)\n", "\n", "corr_id = 'aabeebf7-4c5b-4bc2-a2ec-8ace326cfa7a'\n", "#detail_doc = get_page_details(corr_id, page_soup)\n", "detail_index = 'emlo_page_details'\n", "from elasticsearch import Elasticsearch\n", "\n", "es = Elasticsearch()\n", "\n", "#es.index(index=detail_index, doc_type='page_detail', id=detail_doc['correspondence_id'], body=detail_doc)\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'addr': 'Jones, Robert (Reverend), fl. 1698',\n", " 'addr_freq': 1.0,\n", " 'auth': 'Meare, John, 1649-1710',\n", " 'author_freq': 1.0,\n", " 'id': 'aabeebf7-4c5b-4bc2-a2ec-8ace326cfa7a'}" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import time\n", "\n", "headers = {\n", " 'user-agent': 'DataScopesAnalyzer (https://marijnkoolen.github.io/Data-Scopes-Developers-2018/)',\n", " 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',\n", " 'Accept-Language': 'en-gb',\n", "}\n", "\n", "fetch[corr_id]\n", "#time.sleep(10)" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "skipped 1000\n", "skipped 2000\n", "skipped 3000\n", "skipped 4000\n", "skipped 5000\n", "skipped 6000\n", "skipped 7000\n", "skipped 8000\n", "skipped 9000\n", "skipped 10000\n", "skipped 11000\n", "skipped 12000\n", "12100 correspondence pages fetched\n", "12200 correspondence pages fetched\n", "12300 correspondence pages fetched\n", "12400 correspondence pages fetched\n", "12500 correspondence pages fetched\n", "12600 correspondence pages fetched\n", "12700 correspondence pages fetched\n", "12800 correspondence pages fetched\n", "12900 correspondence pages fetched\n", "13000 correspondence pages fetched\n", "13100 correspondence pages fetched\n", "13200 correspondence pages fetched\n", "13300 correspondence pages fetched\n", "13400 correspondence pages fetched\n", "13500 correspondence pages fetched\n", "13600 correspondence pages fetched\n", "13700 correspondence pages fetched\n", "13800 correspondence pages fetched\n" ] } ], "source": [ "from elasticsearch import exceptions\n", "\n", "skip = 0\n", "\n", "for ci, corr_id in enumerate(fetch):\n", " if es.exists(index=detail_index, id=corr_id):\n", " #print('skip', corr_id)\n", " skip += 1\n", " if skip % 1000 == 0:\n", " print('skipped', skip)\n", " continue\n", " #print('fetching page for', corr_id)\n", " detail_doc = get_correspondence_page(corr_id)\n", " try:\n", " detail_doc['author'] = fetch[corr_id]['auth']\n", " detail_doc['addressee'] = fetch[corr_id]['addr']\n", " except TypeError:\n", " print(fetch[corr_id])\n", " raise\n", " try:\n", " es.index(index=detail_index, doc_type='page_detail', id=detail_doc['correspondence_id'], body=detail_doc)\n", " except exceptions.RequestError:\n", " print(detail_doc)\n", " raise\n", " time.sleep(10)\n", " if (ci+1) % 100 == 0:\n", " print(ci+1, 'correspondence pages fetched')\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.2" } }, "nbformat": 4, "nbformat_minor": 2 }