{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Glottolog stats dashboard\n", "## report stats, monitor change\n", "\n", "record properties of ``treedb.sqlite3``\n", "loaded from [Glottolog](https://glottolog.org)\n", "[master repo](https://github.com/glottolog/glottolog) commit\n", "and monitor changes by diffing this\n", "\n", "
\n", " \n", " latest version from GitHub in nbviewer\n", " \n", "
\n", "\n", "### Contents\n", "1. [Clone the data repository](#Clone-the-data-repository)\n", "2. [Use the repository root as source](#Use-the-repository-root-as-source)\n", "3. [Set the database file and load it](#Set-the-database-file-and-load-it)\n", "4. [Check the database](#Check-the-database)\n", "5. [treedb.sqlite3](#treedb.sqlite3)\n", "6. [print_dataset()](#print_dataset())\n", "7. [\\_\\_dataset\\_\\_](#__dataset__)\n", "8. [\\_\\_producer\\_\\_](#__producer__)\n", "9. [treedb.raw](#treedb.raw)\n", "10. [languoid](#languoid)\n", "11. [macroarea](#macroarea)\n", "12. [country](#country)\n", "13. [altname](#altname)\n", "14. [source](#source)\n", "15. [classification](#classification)\n", "16. [link](#link)\n", "17. [endangerment](#endangerment)\n", "18. [Example query](#example-query)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "treedb version: 2.6.3\n", "pycountry version: 23.12.11\n", "sqlalchemy version: 2.0.28\n", "sqlite_version: 3.45.2\n", "csv23 version: 0.3.4\n" ] } ], "source": [ "%matplotlib inline\n", "\n", "import collections\n", "import os\n", "\n", "os.environ['SQLALCHEMY_WARN_20'] = 'true'\n", "\n", "import pandas as pd\n", "import sqlalchemy as sa\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "\n", "import treedb\n", "import treedb.raw\n", "\n", "treedb.configure_logging(log_sql=False)\n", "\n", "treedb.print_versions()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Clone the data repository" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: total: 15.6 ms\n", "Wall time: 54.4 s\n" ] }, { "data": { "text/plain": [ "(CompletedProcess(args=['git', 'clone', '-c', 'advice.detachedHead=false', '--single-branch', '--branch', 'v5.0', '--depth', '1', 'https://github.com/glottolog/glottolog.git', WindowsPath('../glottolog')], returncode=0),\n", " CompletedProcess(args=['git', 'checkout', '-B', 'treedb', 'v5.0'], returncode=0))" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "\n", "GLOTTOLOG_TAG = 'v5.0'\n", "\n", "TARGET = '../glottolog/'\n", "\n", "treedb.checkout_or_clone(GLOTTOLOG_TAG, target=TARGET)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "GlottologVersion(commit='1894d28616c909b531fefa6356337e668c90d4ab', describe='v5.0')" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "treedb.glottolog_version()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Use the repository root as source" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "treedb.set_root(TARGET)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "FileInfo(path=('abin1243',), dentry=, config=)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "next(treedb.iterfiles())" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{('abin1243',): {'id': 'abin1243',\n", " 'parent_id': None,\n", " 'name': 'Abinomn',\n", " 'level': 'language',\n", " 'hid': 'bsa',\n", " 'iso639_3': 'bsa',\n", " 'latitude': -2.92281,\n", " 'longitude': 138.891,\n", " 'macroareas': ['Papunesia'],\n", " 'countries': [{'id': 'ID', 'name': 'Indonesia'}],\n", " 'links': [{'url': 'https://endangeredlanguages.com/lang/1763',\n", " 'title': 'Abinomn',\n", " 'scheme': 'https'},\n", " {'url': 'https://en.wikipedia.org/wiki/Abinomn_language',\n", " 'title': None,\n", " 'scheme': 'https'},\n", " {'url': 'https://www.wikidata.org/entity/Q56648',\n", " 'title': None,\n", " 'scheme': 'https'}],\n", " 'timespan': None,\n", " 'sources': {'glottolog': [{'bibfile': 'cldf',\n", " 'bibkey': 'hammarstroem:17',\n", " 'pages': None,\n", " 'trigger': None},\n", " {'bibfile': 'cldf',\n", " 'bibkey': 'lewis:ed:09',\n", " 'pages': None,\n", " 'trigger': None},\n", " {'bibfile': 'cldf', 'bibkey': 'np:nd:264', 'pages': None, 'trigger': None},\n", " {'bibfile': 'hh',\n", " 'bibkey': 'e:Lagerberg:Moegip',\n", " 'pages': None,\n", " 'trigger': None},\n", " {'bibfile': 'hh',\n", " 'bibkey': 'h:SilzerClouse:Index',\n", " 'pages': None,\n", " 'trigger': None},\n", " {'bibfile': 'hh',\n", " 'bibkey': 'h:SilzerHeikkinen:Irian',\n", " 'pages': None,\n", " 'trigger': None},\n", " {'bibfile': 'hh',\n", " 'bibkey': 'hv:Foley:Northwest-New-Guinea',\n", " 'pages': None,\n", " 'trigger': None},\n", " {'bibfile': 'hh',\n", " 'bibkey': 'hvtyp:DonohueMusgrave:Melanesia',\n", " 'pages': None,\n", " 'trigger': None},\n", " {'bibfile': 'hh',\n", " 'bibkey': 'w:Fiwei:Abinomn',\n", " 'pages': None,\n", " 'trigger': None}]},\n", " 'altnames': {'multitree': [{'name': '\"Baso\"', 'lang': None},\n", " {'name': 'Abinomn', 'lang': None},\n", " {'name': 'Avinomen', 'lang': None},\n", " {'name': 'Foja', 'lang': None},\n", " {'name': 'Foya', 'lang': None}],\n", " 'lexvo': [{'name': 'Abinomn', 'lang': 'en'},\n", " {'name': 'Abinomn language', 'lang': 'en'},\n", " {'name': 'Abinomneg', 'lang': 'br'},\n", " {'name': 'Lingua abinomn', 'lang': 'gl'},\n", " {'name': 'Llingua Abinomn', 'lang': 'ast'}],\n", " 'hhbib_lgcode': [{'name': 'Baso', 'lang': None}],\n", " 'elcat': [{'name': '\"Baso\"', 'lang': None},\n", " {'name': 'Abinomn', 'lang': None},\n", " {'name': 'Avinomen', 'lang': None},\n", " {'name': 'Foja', 'lang': None},\n", " {'name': 'Foya', 'lang': None}]},\n", " 'triggers': {'lgcode': ['macrohistory', 'moegip']},\n", " 'identifier': {'multitree': 'bsa', 'endangeredlanguages': '1763'},\n", " 'classification': {'familyrefs': [{'bibfile': 'hh',\n", " 'bibkey': 'h:SilzerClouse:Index',\n", " 'pages': None,\n", " 'trigger': None},\n", " {'bibfile': 'hh',\n", " 'bibkey': 'hvtyp:DonohueMusgrave:Melanesia',\n", " 'pages': None,\n", " 'trigger': None}]},\n", " 'endangerment': {'status': 'nearly extinct',\n", " 'source': {'name': 'ElCat', 'bibfile': None, 'bibkey': None, 'pages': None},\n", " 'date': datetime.datetime(2023, 7, 6, 16, 7, 13),\n", " 'comment': 'Abinomn (1763-bsa) = Critically Endangered (40 percent certain, based on the evidence available) (Speakers are shifting to the neighbouring Mander language, which also has few native speakers. The number of Foya speakers is likely to be considerably less than fifty. It has been seriously endangered before, but is now more likely to be moribund.) [Wurm 2007](elcat:e60e81c4cbe5171cd654662d9887aec2)'},\n", " 'hh_ethnologue_comment': None,\n", " 'iso_retirement': None}}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dict(treedb.iterlanguoids(limit=1))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: total: 15.3 s\n", "Wall time: 1min 38s\n" ] }, { "data": { "text/plain": [ "'path_languoid:path:sha256:41ad0e4b1ef0569c9699f1591f1a3fa9de64bee17cfc8b968330d96eff4d3d84'" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time treedb.checksum(source='files')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Set the database file and load it" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "treedb.set_engine('treedb.sqlite3')" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0:00:39.301706\n", "CPU times: total: 39 s\n", "Wall time: 39.7 s\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "\n", "engine = treedb.load(rebuild=False, exclude_raw=False)\n", "engine" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Check the database" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "datetime.datetime(2024, 3, 17, 17, 44, 23, 446777)" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "engine.file_mtime()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "73.76953125" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "engine.file_size(as_megabytes=True)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: total: 62.5 ms\n", "Wall time: 55 ms\n" ] }, { "data": { "text/plain": [ "'d3f6a7f1c586be281f822b27097053b8040c924a93243b3945abb2f4ac979733'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time engine.file_sha256()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: total: 188 ms\n", "Wall time: 186 ms\n" ] }, { "data": { "text/plain": [ "'strong:sha256:7481bfe65789151b36764f9109fefd7f2134052d49fd3d38135b994f772f8db0'" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time treedb.raw.checksum()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: total: 3.05 s\n", "Wall time: 3.04 s\n" ] }, { "data": { "text/plain": [ "'weak:sha256:e7ed35a867352e39fa4bad935b6732dc3aa4791e6cfd5e6f8fc9c20322e200b5'" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time treedb.raw.checksum(weak=True)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: total: 4.7 s\n", "Wall time: 4.72 s\n" ] }, { "data": { "text/plain": [ "'path_languoid:path:sha256:41ad0e4b1ef0569c9699f1591f1a3fa9de64bee17cfc8b968330d96eff4d3d84'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time treedb.checksum(source='tables')" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: total: 5.92 s\n", "Wall time: 5.92 s\n" ] }, { "data": { "text/plain": [ "'path_languoid:path:sha256:41ad0e4b1ef0569c9699f1591f1a3fa9de64bee17cfc8b968330d96eff4d3d84'" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time treedb.checksum(source='raw')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "valid_pseudofamily_referencesCheck: OK\n", "pseudofamilies_are_rootsCheck: OK\n", "valid_glottocodeCheck: OK\n", "valid_iso639_3Check: OK\n", "valid_hidCheck: OK\n", "clean_nameCheck: OK\n", "family_parentCheck: OK\n", "language_parentCheck: OK\n", "dialect_parentCheck: OK\n", "family_childrenCheck: OK\n", "family_languagesCheck: OK\n", "no_empty_filesCheck: OK\n", "CPU times: total: 906 ms\n", "Wall time: 899 ms\n" ] }, { "data": { "text/plain": [ "True" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time treedb.check()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## treedb.sqlite3" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO@treedb.logging_] treedb version: 2.6.3\n", "BEGIN (implicit)\n", "SELECT sqlite_version() AS sqlite_version_1\n", "[generated in 0.00098s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/plain": [ "'3.45.2'" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "treedb.configure_logging(level='INFO', log_sql=True)\n", "\n", "treedb.scalar(sa.select(sa.func.sqlite_version()))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "PRAGMA application_id\n", "[generated in 0.00112s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/plain": [ "1122" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "application_id = treedb.scalar(sa.text('PRAGMA application_id'))\n", "\n", "assert application_id == 1122 == 0x462\n", "assert application_id == sum(ord(c) for c in treedb.Dataset.__tablename__)\n", "assert treedb.Dataset.__tablename__ == '__dataset__'\n", "\n", "application_id" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.name \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name NOT LIKE ? ORDER BY sqlite_master.name\n", "[generated in 0.00081s] ('table', 'sqlite_%')\n", "ROLLBACK\n", "[INFO@treedb.backend.pandas] pandas version: 2.0.3\n", "BEGIN (implicit)\n", "SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM __dataset__) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM __producer__) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM _config) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM _file) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM _option) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM _value) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM altname) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM altnameprovider) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM bibfile) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM bibitem) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM classificationcomment) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM classificationref) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM country) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM endangerment) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM endangermentsource) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM endangermentstatus) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM ethnologuecomment) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM identifier) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM identifiersite) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM isoretirement) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM isoretirement_changeto) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM languoid) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM languoid_country) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM languoid_macroarea) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM languoidlevel) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM link) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM macroarea) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM pseudofamily) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM source) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM sourceprovider) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM timespan) AS n_rows UNION ALL SELECT ? AS table_name, (SELECT count(*) AS n \n", "FROM \"trigger\") AS n_rows\n", "[generated in 0.00108s] ('__dataset__', '__producer__', '_config', '_file', '_option', '_value', 'altname', 'altnameprovider', 'bibfile', 'bibitem', 'classificationcomment', 'classificationref', 'country', 'endangerment', 'endangermentsource', 'endangermentstatus', 'ethnologuecomment', 'identifier', 'identifiersite', 'isoretirement', 'isoretirement_changeto', 'languoid', 'languoid_country', 'languoid_macroarea', 'languoidlevel', 'link', 'macroarea', 'pseudofamily', 'source', 'sourceprovider', 'timespan', 'trigger')\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
n_rows
table_name
__dataset__1
__producer__1
_config398
_file26879
_option53
_value656961
altname159305
altnameprovider11
bibfile37
bibitem155756
classificationcomment12461
classificationref19003
country246
endangerment8554
endangermentsource63
endangermentstatus6
ethnologuecomment538
identifier21373
identifiersite4
isoretirement369
isoretirement_changeto453
languoid26879
languoid_country11902
languoid_macroarea22079
languoidlevel3
link32863
macroarea6
pseudofamily8
source218913
sourceprovider1
timespan1052
trigger30154
\n", "
" ], "text/plain": [ " n_rows\n", "table_name \n", "__dataset__ 1\n", "__producer__ 1\n", "_config 398\n", "_file 26879\n", "_option 53\n", "_value 656961\n", "altname 159305\n", "altnameprovider 11\n", "bibfile 37\n", "bibitem 155756\n", "classificationcomment 12461\n", "classificationref 19003\n", "country 246\n", "endangerment 8554\n", "endangermentsource 63\n", "endangermentstatus 6\n", "ethnologuecomment 538\n", "identifier 21373\n", "identifiersite 4\n", "isoretirement 369\n", "isoretirement_changeto 453\n", "languoid 26879\n", "languoid_country 11902\n", "languoid_macroarea 22079\n", "languoidlevel 3\n", "link 32863\n", "macroarea 6\n", "pseudofamily 8\n", "source 218913\n", "sourceprovider 1\n", "timespan 1052\n", "trigger 30154" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from treedb import pd_read_sql as read_sql\n", "\n", "read_sql(treedb.select_tables_nrows(), index_col='table_name')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.name \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name NOT LIKE ? ORDER BY sqlite_master.name\n", "[cached since 0.05206s ago] ('view', 'sqlite_%')\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "example\n", "path_languoid\n", "stats\n" ] } ], "source": [ "treedb.print_rows(treedb.backend.sqlite_master.select_views(),\n", " format_='{name}')" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[generated in 0.00118s] ('table', 'sqlite_master')\n", "SELECT count(*) AS n_rows \n", "FROM sqlite_master\n", "[generated in 0.00049s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "None\n", "66\n" ] } ], "source": [ "from treedb import print_table_sql as print_sql\n", "\n", "print_sql('sqlite_master')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## print_dataset()" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT __dataset__.id, __dataset__.title, __dataset__.git_commit, __dataset__.git_describe, __dataset__.clean, __dataset__.version, __dataset__.exclude_raw \n", "FROM __dataset__\n", "[generated in 0.00115s] ()\n", "SELECT __producer__.id, __producer__.name, __producer__.version \n", "FROM __producer__\n", "[cached since 14.96s ago] ()\n", "ROLLBACK\n", "[INFO@treedb.backend.models] git describe 'v5.0' clean: True\n", "[INFO@treedb.backend.models] __dataset__.git_commit: '1894d28616c909b531fefa6356337e668c90d4ab'\n", "[INFO@treedb.backend.models] __dataset__.version: '5.0'\n", "[INFO@treedb.backend.models] __producer__.name: treedb\n", "[INFO@treedb.backend.models] __producer__.version: 2.6.3\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "git describe 'v5.0' clean: True\n", "__dataset__.title: 'Glottolog treedb''\n", "__dataset__.git_commit: '1894d28616c909b531fefa6356337e668c90d4ab'\n", "__dataset__.version: '5.0'\n", "__dataset__.exclude_raw: False\n", "__producer__.name: treedb\n", "__producer__.version: 2.6.3\n" ] } ], "source": [ "treedb.print_dataset()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## \\_\\_dataset\\_\\_" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 0.02059s ago] ('table', '__dataset__')\n", "SELECT count(*) AS n_rows \n", "FROM __dataset__\n", "[generated in 0.00039s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE __dataset__ (\n", "\tid INTEGER NOT NULL CHECK (id = 1), \n", "\ttitle TEXT NOT NULL CHECK (title != ''), \n", "\tgit_commit VARCHAR(40) NOT NULL CHECK (length(git_commit) = 40), \n", "\tgit_describe TEXT NOT NULL CHECK (git_describe != ''), \n", "\tclean BOOLEAN NOT NULL, \n", "\tversion TEXT CHECK (version != ''), \n", "\texclude_raw BOOLEAN NOT NULL, \n", "\tPRIMARY KEY (id), \n", "\tUNIQUE (git_commit), \n", "\tUNIQUE (git_describe), \n", "\tCHECK (clean IN (0, 1)), \n", "\tCHECK (exclude_raw IN (0, 1))\n", ")\n", "1\n" ] } ], "source": [ "from treedb import Dataset\n", "\n", "print_sql(Dataset)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT __dataset__.id, __dataset__.title, __dataset__.git_commit, __dataset__.git_describe, __dataset__.clean, __dataset__.version, __dataset__.exclude_raw \n", "FROM __dataset__\n", "[cached since 0.01893s ago] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
__dataset__
id1
titleGlottolog treedb
git_commit1894d28616c909b531fefa6356337e668c90d4ab
git_describev5.0
cleanTrue
version5.0
exclude_rawFalse
\n", "
" ], "text/plain": [ " __dataset__\n", "id 1\n", "title Glottolog treedb\n", "git_commit 1894d28616c909b531fefa6356337e668c90d4ab\n", "git_describe v5.0\n", "clean True\n", "version 5.0\n", "exclude_raw False" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dataset, = treedb.iterrows(sa.select(Dataset), mappings=True)\n", "\n", "pd.DataFrame.from_dict(dataset, orient='index',\n", " columns=['__dataset__'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## \\_\\_producer\\_\\_" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 0.03735s ago] ('table', '__producer__')\n", "SELECT count(*) AS n_rows \n", "FROM __producer__\n", "[generated in 0.00045s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE __producer__ (\n", "\tid INTEGER NOT NULL CHECK (id = 1), \n", "\tname TEXT NOT NULL CHECK (name != ''), \n", "\tversion TEXT NOT NULL CHECK (version != ''), \n", "\tPRIMARY KEY (id), \n", "\tUNIQUE (name)\n", ")\n", "1\n" ] } ], "source": [ "from treedb import Producer\n", "\n", "print_sql(Producer)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT __producer__.id, __producer__.name, __producer__.version \n", "FROM __producer__\n", "[cached since 14.99s ago] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
__producer__
id1
nametreedb
version2.6.3
\n", "
" ], "text/plain": [ " __producer__\n", "id 1\n", "name treedb\n", "version 2.6.3" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "producer, = treedb.iterrows(sa.select(Producer), mappings=True)\n", "\n", "pd.DataFrame.from_dict(producer, orient='index',\n", " columns=['__producer__'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `treedb.raw`" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 0.05274s ago] ('table', '_file')\n", "SELECT count(*) AS n_rows \n", "FROM _file\n", "[generated in 0.00049s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE _file (\n", "\tid INTEGER NOT NULL, \n", "\tglottocode VARCHAR(8) NOT NULL CHECK (length(glottocode) = 8), \n", "\tpath TEXT NOT NULL CHECK (length(path) >= 8 AND (length(path) + 1) % 9 = 0), \n", "\tsize INTEGER NOT NULL CHECK (size > 0), \n", "\tsha256 VARCHAR(64) NOT NULL CHECK (length(sha256) = 64), \n", "\tPRIMARY KEY (id), \n", "\tCHECK (substr(path, -length(glottocode)) = glottocode), \n", "\tUNIQUE (glottocode), \n", "\tUNIQUE (path), \n", "\tUNIQUE (sha256)\n", ")\n", "26879\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 0.05749s ago] ('table', '_option')\n", "SELECT count(*) AS n_rows \n", "FROM _option\n", "[generated in 0.00048s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE _option (\n", "\tid INTEGER NOT NULL, \n", "\tsection TEXT NOT NULL CHECK (section != ''), \n", "\toption TEXT NOT NULL CHECK (option != ''), \n", "\tis_lines BOOLEAN, \n", "\tdefined BOOLEAN NOT NULL, \n", "\tdefined_any_options BOOLEAN NOT NULL, \n", "\tord_section INTEGER CHECK (ord_section >= 1), \n", "\tord_option INTEGER CHECK (ord_section >= 0), \n", "\tPRIMARY KEY (id), \n", "\tUNIQUE (section, option), \n", "\tCHECK ((is_lines IS NULL) = (defined = 0)), \n", "\tCHECK (defined = 1 OR defined_any_options = 0), \n", "\tCHECK ((defined = 0) = (ord_section IS NULL)), \n", "\tCHECK (ord_section IS NOT NULL OR ord_option IS NULL), \n", "\tCHECK (is_lines IN (0, 1)), \n", "\tCHECK (defined IN (0, 1)), \n", "\tCHECK (defined_any_options IN (0, 1))\n", ")\n", "53\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 0.06128s ago] ('table', '_value')\n", "SELECT count(*) AS n_rows \n", "FROM _value\n", "[generated in 0.00037s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE _value (\n", "\tfile_id INTEGER NOT NULL, \n", "\toption_id INTEGER NOT NULL, \n", "\tline INTEGER NOT NULL CHECK (line > 0), \n", "\tvalue TEXT NOT NULL CHECK (value != ''), \n", "\tPRIMARY KEY (file_id, option_id, line), \n", "\tUNIQUE (file_id, line), \n", "\tFOREIGN KEY(file_id) REFERENCES _file (id), \n", "\tFOREIGN KEY(option_id) REFERENCES _option (id)\n", ") WITHOUT ROWID\n", "656961\n" ] } ], "source": [ "from treedb.raw import File, Option, Value\n", "\n", "for model in (File, Option, Value):\n", " print_sql(model)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT _file.id, _file.glottocode, _file.path, _file.size, _file.sha256 \n", "FROM _file\n", " LIMIT ? OFFSET ?\n", "[generated in 0.00077s] (5, 0)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
glottocodepathsizesha256
id
1abin1243abin12431609f9bfc07c0fa5c494f10120446ea774425e0228ff398041...
2abis1238abis12381978d002eb22e1969fa9e7e61129281802d7c01b47da897d8b...
3abkh1242abkh12423065dd28ae1265a0967b1a236d06c7fd6e7ac3b9e32d866dd...
4abkh1243abkh1242/abkh1243257a5900355c69af22d94eaa0a147b95fc291270634bc033c...
5abaz1241abkh1242/abkh1243/abaz124128141fb6618ce1f7ac0995b5f17c39ad66ea306160d5815327...
\n", "
" ], "text/plain": [ " glottocode path size \\\n", "id \n", "1 abin1243 abin1243 1609 \n", "2 abis1238 abis1238 1978 \n", "3 abkh1242 abkh1242 306 \n", "4 abkh1243 abkh1242/abkh1243 257 \n", "5 abaz1241 abkh1242/abkh1243/abaz1241 2814 \n", "\n", " sha256 \n", "id \n", "1 f9bfc07c0fa5c494f10120446ea774425e0228ff398041... \n", "2 d002eb22e1969fa9e7e61129281802d7c01b47da897d8b... \n", "3 5dd28ae1265a0967b1a236d06c7fd6e7ac3b9e32d866dd... \n", "4 a5900355c69af22d94eaa0a147b95fc291270634bc033c... \n", "5 1fb6618ce1f7ac0995b5f17c39ad66ea306160d5815327... " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "read_sql(sa.select(File).limit(5), index_col='id')" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT _option.id, _option.section, _option.option, _option.is_lines, _option.defined, _option.defined_any_options, _option.ord_section, _option.ord_option \n", "FROM _option\n", " LIMIT ? OFFSET ?\n", "[generated in 0.00099s] (5, 0)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sectionoptionis_linesdefineddefined_any_optionsord_sectionord_option
id
1corenameFalseTrueFalse11
2corehidFalseTrueFalse12
3corelevelFalseTrueFalse13
4coreiso639-3FalseTrueFalse14
5corelatitudeFalseTrueFalse15
\n", "
" ], "text/plain": [ " section option is_lines defined defined_any_options ord_section \\\n", "id \n", "1 core name False True False 1 \n", "2 core hid False True False 1 \n", "3 core level False True False 1 \n", "4 core iso639-3 False True False 1 \n", "5 core latitude False True False 1 \n", "\n", " ord_option \n", "id \n", "1 1 \n", "2 2 \n", "3 3 \n", "4 4 \n", "5 5 " ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "read_sql(sa.select(Option).limit(5), index_col='id')" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT _value.file_id, _value.option_id, _value.line, _value.value \n", "FROM _value\n", " LIMIT ? OFFSET ?\n", "[generated in 0.00125s] (5, 0)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
linevalue
file_idoption_id
111Abinomn
22bsa
33language
44bsa
55-2.92281
\n", "
" ], "text/plain": [ " line value\n", "file_id option_id \n", "1 1 1 Abinomn\n", " 2 2 bsa\n", " 3 3 language\n", " 4 4 bsa\n", " 5 5 -2.92281" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "read_sql(sa.select(Value).limit(5), index_col=['file_id', 'option_id'])" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT _option.section, _option.option, _value.line, _value.value \n", "FROM _file JOIN _value ON _file.id = _value.file_id JOIN _option ON _option.id = _value.option_id \n", "WHERE _file.glottocode = ?\n", "[generated in 0.00077s] ('abin1243',)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
value
sectionoptionline
corename1Abinomn
hid2bsa
level3language
iso639-34bsa
latitude5-2.92281
longitude6138.891
macroareas7Papunesia
countries8ID
links9[Abinomn](https://endangeredlanguages.com/lang...
10https://en.wikipedia.org/wiki/Abinomn_language
11https://www.wikidata.org/entity/Q56648
sourcesglottolog12**cldf:hammarstroem:17**
13**cldf:lewis:ed:09**
14**cldf:np:nd:264**
15**hh:e:Lagerberg:Moegip**
16**hh:h:SilzerClouse:Index**
17**hh:h:SilzerHeikkinen:Irian**
18**hh:hv:Foley:Northwest-New-Guinea**
19**hh:hvtyp:DonohueMusgrave:Melanesia**
20**hh:w:Fiwei:Abinomn**
altnamesmultitree21\"Baso\"
22Abinomn
23Avinomen
24Foja
25Foya
lexvo26Abinomn [en]
27Abinomn language [en]
28Abinomneg [br]
29Lingua abinomn [gl]
30Llingua Abinomn [ast]
hhbib_lgcode31Baso
elcat32\"Baso\"
33Abinomn
34Avinomen
35Foja
36Foya
triggerslgcode37macrohistory
38moegip
identifiermultitree39bsa
endangeredlanguages401763
classificationfamilyrefs41**hh:h:SilzerClouse:Index**
42**hh:hvtyp:DonohueMusgrave:Melanesia**
endangermentstatus43nearly extinct
source44ElCat
date452023-07-06T16:07:13
comment46Abinomn (1763-bsa) = Critically Endangered (40...
\n", "
" ], "text/plain": [ " value\n", "section option line \n", "core name 1 Abinomn\n", " hid 2 bsa\n", " level 3 language\n", " iso639-3 4 bsa\n", " latitude 5 -2.92281\n", " longitude 6 138.891\n", " macroareas 7 Papunesia\n", " countries 8 ID\n", " links 9 [Abinomn](https://endangeredlanguages.com/lang...\n", " 10 https://en.wikipedia.org/wiki/Abinomn_language\n", " 11 https://www.wikidata.org/entity/Q56648\n", "sources glottolog 12 **cldf:hammarstroem:17**\n", " 13 **cldf:lewis:ed:09**\n", " 14 **cldf:np:nd:264**\n", " 15 **hh:e:Lagerberg:Moegip**\n", " 16 **hh:h:SilzerClouse:Index**\n", " 17 **hh:h:SilzerHeikkinen:Irian**\n", " 18 **hh:hv:Foley:Northwest-New-Guinea**\n", " 19 **hh:hvtyp:DonohueMusgrave:Melanesia**\n", " 20 **hh:w:Fiwei:Abinomn**\n", "altnames multitree 21 \"Baso\"\n", " 22 Abinomn\n", " 23 Avinomen\n", " 24 Foja\n", " 25 Foya\n", " lexvo 26 Abinomn [en]\n", " 27 Abinomn language [en]\n", " 28 Abinomneg [br]\n", " 29 Lingua abinomn [gl]\n", " 30 Llingua Abinomn [ast]\n", " hhbib_lgcode 31 Baso\n", " elcat 32 \"Baso\"\n", " 33 Abinomn\n", " 34 Avinomen\n", " 35 Foja\n", " 36 Foya\n", "triggers lgcode 37 macrohistory\n", " 38 moegip\n", "identifier multitree 39 bsa\n", " endangeredlanguages 40 1763\n", "classification familyrefs 41 **hh:h:SilzerClouse:Index**\n", " 42 **hh:hvtyp:DonohueMusgrave:Melanesia**\n", "endangerment status 43 nearly extinct\n", " source 44 ElCat\n", " date 45 2023-07-06T16:07:13\n", " comment 46 Abinomn (1763-bsa) = Critically Endangered (40..." ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "select_file_values = (sa.select(Option.section, Option.option, Value.line, Value.value)\n", " .select_from(File)\n", " .filter_by(glottocode=sa.bindparam('glottocode'))\n", " .join(Value).join(Option))\n", "\n", "read_sql(select_file_values, params={'glottocode': 'abin1243'},\n", " index_col=['section', 'option', 'line'])" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT floor((length(_file.path) + ?) / (? + 0.0)) AS path_depth, languoid.level, count(*) AS n_files \n", "FROM _file JOIN languoid ON _file.glottocode = languoid.id GROUP BY floor((length(_file.path) + ?) / (? + 0.0)), languoid.level ORDER BY path_depth, languoid.level\n", "[generated in 0.00091s] (1, 9, 1, 9)\n", "ROLLBACK\n" ] }, { "data": { "image/png": "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uBgkxpP9zzsxMVT/iYhKEhNvIqIScuzYMa3HR48eRZUqVXDx4kXcvn0bM2fOVNY+nzx5Uquuubk5ACA3N9dg/alRowZSUlJw/fp1Zab56NGjWnXq16+PjRs3wtXVFfb29oW2FR8fj4cPH8LKykppx9bWVhmPubm5QftORPQi4FITIqISkpycjBEjRuDSpUtYv349Fi5ciKFDh8LHxwfm5uZYuHAhrl27hu+//x5TpkzReq6vry9UKhV27NiBW7duISMjQ+/+hIaGomrVqoiIiEB8fDwOHDiATz75RKtOr1694OzsjE6dOuHAgQNITExEbGwsPvjgA/zxxx9KvezsbPTp0wfnz5/Hjz/+iIkTJyIqKgpq9ePDToUKFXDs2DEkJSXh77//5ow2Eb0UmHgTEZWQ8PBwPHz4EA0bNsTgwYMxdOhQ9O/fHy4uLli1ahU2b94Mf39/zJw5E59//rnWc1955RVMmjQJY8aMgZubG6KiovTuj1qtxtatW5U+9e3bF9OmTdOqY21tjf3798PHxwddunRBjRo10KdPH2RmZmrNgL/++uuoUqUKmjdvjrfffhsdO3bUuqzhyJEjYWJiAn9/f2UpDRFRWacS+f8XjSUiIqMJCQlB3bp1MW/evJLuisFFRkbi7t27RrnNPBHRi4Qz3kRERERERsDEm4joJbF27VrlEoD/3l599dWS7h4RUZnHpSZERC+Je/fu4caNGwWWmZmZwdfX18g9IiJ6uTDxJiIiIiIyAi41ISIiIiIyAibeRERERERGwMSbiIiIiMgImHgTERERERkBE28iIiIiIiNg4k1EREREZARMvImIiIiIjICJNxERERGREfw/6Ns5D88sKHIAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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wdKuXTsZMmSIHDp0SHWMf/3rX5KUlKS6nsf59ttvZdq0aXLw4EEREdmzZ49069ZNQkJC5D//+Y/q+rOzs2XFihXy6quvSteuXaV79+4SFhYmu3fvVl23iMjVq1elXbt2otFoxMvLS/z9/cXf31+5HrZr106uXr2ql1jFUXvtFhG5deuWvPTSS2JpaSkuLi4ybdo0uXv3rlKuj+v3+fPnxcvLS7RardSrV08uXrwofn5+Uq1aNbG2thYnJyfV5+A333xT7GJiYiKffPKJsq7GG2+8ofz9y87Olv79+4tWq1Wuic8//3yxfx+fVMeOHWXTpk0iInLw4EGxsLCQ5s2by8svvywtW7YUa2tr1ee3RqMROzs7GTFihBw5ckRVXU+iUibVJf1nu7989NFHqk6aPn36SI8ePeT69esSHx8vPXr0EB8fH/njjz9ERD8nZWBgoLz33nsiIrJ+/XqpUaOGvPvuu0r5O++8Iy+88IKqGPPmzRMfH58iybmpqan8+uuvquq+T6PRKH9khwwZIm3atJH09HQREbl9+7YEBwfLoEGDyly/lZWVcjFs2bKlfPbZZzrla9euFV9f3zLXL3KvD7t375bx48eLk5OTmJmZSa9eveTbb7+VgoICVXXfV7duXfn6669F5N6Fw8TERL744gulfPPmzVKvXj1VMaysrCQhIUFZLygoEDMzM0lLSxMRkR9//FHc3d1VxYiPj5c6deqIpaWldOzYUQYMGCADBgyQjh07iqWlpdSrV0/i4+NVxXgcfVx4r1y5Iq1btxatVismJibyz3/+U+fioY9z/OjRo2Jvby8ajUZq1KghJ06cEB8fH6lfv77UrVtXrKysJCYmpsz1L1q0qNjFxMREIiIilHU1unXrppzPN27ckICAANFoNOLs7CxarVYaNWok165dUxXD399fvv32WxER2bp1q2i1WunVq5dMmTJF+vbtK2ZmZkp5WWk0GjExMZHg4GD58ssvDfLmb9myZWJqaip+fn5iZ2cna9asEVtbW3n99ddl1KhRYmVlJQsXLixz/fHx8eLl5SUuLi7i4eEhGo1GevToIQEBAWJiYiIvvfSS5Ofnq+pD//79JTAwUM6fP1+k7Pz589KmTRv5xz/+Ueb6b9269cjlwIEDqs+7cePGSYMGDWTTpk2yfPly8fLykh49eiiveVpammg0GlUxevfuLb16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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "path_depth = File.path_depth()\n", "\n", "select_path_depths = (sa.select(path_depth,\n", " treedb.Languoid.level, sa.func.count().label('n_files'))\n", " .join_from(File, treedb.Languoid, File.glottocode == treedb.Languoid.id)\n", " .group_by(path_depth, treedb.Languoid.level)\n", " .order_by('path_depth', 'level'))\n", "\n", "_ = (read_sql(select_path_depths, index_col=['path_depth', 'level'])\n", " .unstack(fill_value=0).droplevel(0, axis='columns')[list(treedb.LEVEL)])\n", "\n", "_.plot.bar(stacked=True, figsize=(12 * 72 / 100, 3 * 72 / 100))\n", "\n", "(100 * _.div(_.sum(axis='columns'), axis='rows')).plot.bar(stacked=True, figsize=(12 * 72 / 100, 3 * 72 / 100));" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT _file.size AS file_size, count(*) AS n_files \n", "FROM _file GROUP BY _file.size ORDER BY file_size\n", "[generated in 0.00145s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
countminmax
file_size3528.065.047173.0
\n", "
" ], "text/plain": [ " count min max\n", "file_size 3528.0 65.0 47173.0" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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R0FBAQoLC/G73/0OYWFhrW5bUFCAyspKVFZW4tKlSxg3bhweeOABAIDNZkN6ejpiYmJw8OBBHDp0CNHR0Zg8eTKsVqtn3wQiIolj+wcRUZDFxsYiJiYGcrkcarW6w+2//PJLfP3119Dr9VAoFACAV199FTt37sRHH32EBQsWtLt/WVkZnn32WQwfPhwAMGTIkDa37du3r+vPTz31lFvo37ZtG5xOJ959913X6PV7772HuLg45OTkIC0trcNrISLqLhiqiYgk5tixY6ivr0dCQoLb8qamJpSWlna4/+LFi/GrX/0K//rXv5Camoqf/vSnuOWWW9rd55133sHf//53HD582BW0jx07hnPnziEmJsZtW7PZ3Kk6iIi6E4ZqIiKJqa+vR79+/ZCTk9NiXWemw3vxxRfxs5/9DJ9++il2796N5cuXY+vWrfjJT37S6vb79+/HokWL8MEHH2D06NFudYwdOxbvv/9+i32uH+EmIuoJGKqJiCTmrrvuglarRWhoKAYNGtSlYwwdOhRDhw7FM888g1mzZuG9995rNVSfO3cOM2fOxO9//3tMnz69RR3btm1DYmIilEpll+ogIuou+KAiEZHEpKamQqPRYNq0afj8889x4cIFHD58GM8//7xrFo+2NDU1YeHChcjJycHFixdx6NAhFBQUYMSIEa1u+8gjj2DMmDFYsGABtFqt6wNcfeCxT58+mDp1Kg4ePIjz588jJycHv/nNb3Dp0iW/XDsRkVhxpJqISGJkMhk+++wzPP/883jiiSdQVVUFtVqN8ePHQ6VStbuvXC5HdXU15s6dC51Ohz59+mD69Ol46aWXWmyr0+lQXFyM4uJiJCUlua0TBAGRkZHIzc3FkiVLMH36dNTV1eGmm27CpEmTOHJNRD2OTBAEIdhFEBERERFJGds/iIiIiIi8xFBNRNTN3HbbbYiOjm7109pMHURE5D22fxARdTMXL16EzWZrdZ1KpWoxrzQREXmPoZqIiIiIyEts/yAiIiIi8hJDNRERERGRlxiqiYiIiIi8xFBNREREROQlhmoiIiIiIi8xVBMREREReYmhmoiIiIjIS/8fItosRjnugBYAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "file_size = File.size.label('file_size')\n", "\n", "select_file_sizes = (sa.select(file_size, sa.func.count().label('n_files'))\n", " .group_by(file_size)\n", " .order_by('file_size'))\n", "\n", "_ = read_sql(select_file_sizes, index_col='file_size')\n", "\n", "(_.plot.area(figsize=(12 * 72 / 100, 3 * 72 / 100), logx=True)\n", " .xaxis.set_major_formatter(mpl.ticker.ScalarFormatter()))\n", "(_.index.to_series().describe()\n", " .to_frame().transpose()[['count', 'min', 'max']])" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT file_nvalues.n_values, count(*) AS n_files \n", "FROM (SELECT _file.glottocode AS glottocode, count(DISTINCT _value.option_id) AS n_values \n", "FROM _file JOIN _value ON _file.id = _value.file_id GROUP BY _file.glottocode) AS file_nvalues GROUP BY file_nvalues.n_values ORDER BY file_nvalues.n_values\n", "[generated in 0.00076s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
countminmax
n_values36.02.037.0
\n", "
" ], "text/plain": [ " count min max\n", "n_values 36.0 2.0 37.0" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAt4AAADpCAYAAAATdDBjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0i0lEQVR4nO3deVhUZfsH8O8Mu+yibMnmUkpqKimivm6RqOSe5m6ZS4YLWpq2uKdmby6lr6ZviZlruaW+LigumTulmSsCBqWAhYKCAsr9+8OL83MC5AyMh8Xv57rOdTnnec499xmHM/d55plzdCIiICIiIiKiJ0pf2gkQERERET0NWHgTEREREWmAhTcRERERkQZYeBMRERERaYCFNxERERGRBlh4ExERERFpgIU3EREREZEGWHgTEREREWnAvLQTeFJyc3Nx7do12NvbQ6fTlXY6RERERFQBiQhu374NT09P6PWPH9OusIX3tWvX4OXlVdppEBEREdFTIDExEdWqVXtsnwpbeNvb2wN4+CI4ODiUcjZEREREVBGlp6fDy8tLqT0fp8IW3nnTSxwcHFh4ExEREdETpWZqM39cSURERESkARbeREREREQaqLBTTYiIiIgqsgcPHiAnJ6e003gqWFhYwMzMrMRxWHgTERERlSMigqSkJNy6dau0U3mqODk5wd3dvUSXqWbhXYH4Ttyhqt/VOaFPOBMiIiJ6UvKKbldXV1SqVIn3K3nCRASZmZlISUkBAHh4eBQ7FgtvIiIionLiwYMHStHt4uJS2uk8NWxsbAAAKSkpcHV1Lfa0E/64koiIiKicyJvTXalSpVLO5OmT95qXZF49C28iIiKicobTS7RnitechTcRERERkQZYeBMRERERaYA/riQiIiKqANRe3cxUtLxKWlJSEgYMGIAjR47AwsICt27dgk6nw+bNm9G1a1dcvXoVfn5++OWXX9CgQQPN8jIWC28iIiIiKtPmz5+P69ev4/Tp03B0dAQAXL9+Hc7OzqWcmXFYeBMRERFRmRYbG4uAgADUqlVLWefu7l6KGRUP53gTERER0RPXunVrjB49GhMmTEDlypXh7u6OqVOnFrmdr68vNm7ciG+++QY6nQ6vv/46gIdXGdmyZUuh2/3222/o0KED7Ozs4ObmhgEDBuCvv/5S2r///nvUq1cPNjY2cHFxQXBwMDIyMkq4l4/HwpuIiIiINLFy5UrY2tri+PHjmDt3LqZPn47IyMjHbnPy5Em0b98evXr1wvXr17Fw4cIin+fWrVto27YtGjZsiFOnTmHXrl1ITk5Gr169ADycptKnTx8MHjwYFy5cwIEDB9C9e3eIiEn2szCcakJEREREmqhfvz6mTJkCAKhVqxYWLVqEffv24eWXXy50m6pVq8LKygo2Njaqp5csWrQIDRs2xKxZs5R1X3/9Nby8vHD58mXcuXMH9+/fR/fu3eHj4wMAqFevXgn2TB0W3kRERESkifr16xs89vDwQEpKismf58yZM9i/fz/s7OzytcXGxqJdu3Z46aWXUK9ePYSEhKBdu3Z49dVXn/iPNTnVhIiIiIg0YWFhYfBYp9MhNzfX5M9z584ddOrUCadPnzZYYmJi0LJlS5iZmSEyMhI7d+6Ev78/vvjiCzz33HOIj483eS6PYuFNRERERBVKo0aNcO7cOfj6+qJmzZoGi62tLYCHRX/z5s0xbdo0/PLLL7C0tMTmzZufaF4svImIiIioQgkLC0Nqair69OmDkydPIjY2Frt378Ybb7yBBw8e4Pjx45g1axZOnTqFhIQEbNq0CTdu3ECdOnWeaF6c401ERERUAWh5J8myztPTEz/99BPee+89tGvXDllZWfDx8UH79u2h1+vh4OCAQ4cOYcGCBUhPT4ePjw8+++wzdOjQ4YnmpZMnfd2UUpKeng5HR0ekpaXBwcGhtNPRhNpbxfIPk4iIqHy6d+8e4uPj4efnB2tr69JO56lS2GtvTM3JqSZERERERBpg4U1EREREpWb16tWws7MrcHn++edLOz2T4hxvIiIiIio1nTt3RmBgYIFt/7z8YHnHwpuIiIiISo29vT3s7e1LOw1NcKoJERERUTlTQa+NUaaZ4jVn4U1ERERUTuRNvcjMzCzlTJ4+ea95Saa/cKoJERERUTlhZmYGJycnpKSkAAAqVaoEnU5XyllVbCKCzMxMpKSkwMnJCWZmZsWOxcKbiIiIqBxxd3cHAKX4Jm04OTkpr31xGV14//nnn3jvvfewc+dOZGZmombNmlixYgVefPFFAA/PCqZMmYLly5fj1q1baN68OZYsWYJatWopMVJTUzFq1Chs27YNer0ePXr0wMKFC2FnZ6f0+fXXXxEWFoaTJ0+iatWqGDVqFCZMmFCinSUiIiIq73Q6HTw8PODq6oqcnJzSTuepYGFhUaKR7jxGFd43b95E8+bN0aZNG+zcuRNVq1ZFTEwMnJ2dlT5z587F559/jpUrV8LPzw8fffQRQkJCcP78eeUuP/369cP169cRGRmJnJwcvPHGGxg2bBjWrFkD4OEdgNq1a4fg4GAsXboUZ8+exeDBg+Hk5IRhw4aVeKeJiIiIyjszMzOTFIOkHaNuGT9x4kT89NNP+PHHHwtsFxF4enrinXfewbvvvgsASEtLg5ubGyIiItC7d29cuHAB/v7+OHnypDJKvmvXLnTs2BF//PEHPD09sWTJEnzwwQdISkqCpaWl8txbtmzBxYsXVeXKW8YXjreMJyIiIjKNJ3bL+B9++AEvvvgievbsCVdXVzRs2BDLly9X2uPj45GUlITg4GBlnaOjIwIDA3H06FEAwNGjR+Hk5KQU3QAQHBwMvV6P48ePK31atmypFN0AEBISgkuXLuHmzZsF5paVlYX09HSDhYiIiIiorDCq8I6Li1Pma+/evRsjRozA6NGjsXLlSgBAUlISAMDNzc1gOzc3N6UtKSkJrq6uBu3m5uaoXLmyQZ+CYjz6HP80e/ZsODo6KouXl5cxu0ZERERE9EQZVXjn5uaiUaNGmDVrFho2bIhhw4Zh6NChWLp06ZPKT7VJkyYhLS1NWRITE0s7JSIiIiIihVGFt4eHB/z9/Q3W1alTBwkJCQD+//I2ycnJBn2Sk5OVNnd393yXv7l//z5SU1MN+hQU49Hn+CcrKys4ODgYLEREREREZYVRhXfz5s1x6dIlg3WXL1+Gj48PAMDPzw/u7u7Yt2+f0p6eno7jx48jKCgIABAUFIRbt24hOjpa6RMVFYXc3FwEBgYqfQ4dOmRwiZzIyEg899xzBldQISIiIiIqL4wqvMeOHYtjx45h1qxZuHLlCtasWYNly5YhLCwMwMPrSoaHh2PmzJn44YcfcPbsWQwcOBCenp7o2rUrgIcj5O3bt8fQoUNx4sQJ/PTTTxg5ciR69+4NT09PAEDfvn1haWmJN998E+fOncP69euxcOFCjBs3zrR7T0RERESkEaOu4924cWNs3rwZkyZNwvTp0+Hn54cFCxagX79+Sp8JEyYgIyMDw4YNw61bt9CiRQvs2rVLuYY3AKxevRojR47ESy+9pNxA5/PPP1faHR0dsWfPHoSFhSEgIABVqlTB5MmTeQ1vIiIiIiq3jLqOd3nC63gXjtfxJiIiIjKNJ3YdbyIiIiIiKh4W3kREREREGmDhTURERESkARbeREREREQaYOFNRERERKQBFt5ERERERBpg4U1EREREpAEW3kREREREGmDhTURERESkARbeREREREQaYOFNRERERKQBFt5ERERERBpg4U1EREREpAEW3kREREREGmDhTURERESkAfPSTqC88p24o8g+V+eEapAJEREREZUHHPEmIiIiItIAC28iIiIiIg2w8CYiIiIi0gALbyIiIiIiDbDwJiIiIiLSAAtvIiIiIiINsPAmIiIiItIAC28iIiIiIg2w8CYiIiIi0gALbyIiIiIiDbDwJiIiIiLSAAtvIiIiIiINsPAmIiIiItIAC28iIiIiIg2w8CYiIiIi0gALbyIiIiIiDZSo8J4zZw50Oh3Cw8OVdffu3UNYWBhcXFxgZ2eHHj16IDk52WC7hIQEhIaGolKlSnB1dcX48eNx//59gz4HDhxAo0aNYGVlhZo1ayIiIqIkqRIRERERlapiF94nT57El19+ifr16xusHzt2LLZt24bvvvsOBw8exLVr19C9e3el/cGDBwgNDUV2djaOHDmClStXIiIiApMnT1b6xMfHIzQ0FG3atMHp06cRHh6OIUOGYPfu3cVNl4iIiIioVBWr8L5z5w769euH5cuXw9nZWVmflpaGr776CvPmzUPbtm0REBCAFStW4MiRIzh27BgAYM+ePTh//jy+/fZbNGjQAB06dMCMGTOwePFiZGdnAwCWLl0KPz8/fPbZZ6hTpw5GjhyJV199FfPnzzfBLhMRERERaa9YhXdYWBhCQ0MRHBxssD46Oho5OTkG62vXrg1vb28cPXoUAHD06FHUq1cPbm5uSp+QkBCkp6fj3LlzSp9/xg4JCVFiFCQrKwvp6ekGCxERERFRWWFu7Abr1q3Dzz//jJMnT+ZrS0pKgqWlJZycnAzWu7m5ISkpSenzaNGd157X9rg+6enpuHv3LmxsbPI99+zZszFt2jRjd4eIiIiISBNGjXgnJiZizJgxWL16NaytrZ9UTsUyadIkpKWlKUtiYmJpp0REREREpDCq8I6OjkZKSgoaNWoEc3NzmJub4+DBg/j8889hbm4ONzc3ZGdn49atWwbbJScnw93dHQDg7u6e7yoneY+L6uPg4FDgaDcAWFlZwcHBwWAhIiIiIiorjCq8X3rpJZw9exanT59WlhdffBH9+vVT/m1hYYF9+/Yp21y6dAkJCQkICgoCAAQFBeHs2bNISUlR+kRGRsLBwQH+/v5Kn0dj5PXJi0FEREREVN4YNcfb3t4edevWNVhna2sLFxcXZf2bb76JcePGoXLlynBwcMCoUaMQFBSEpk2bAgDatWsHf39/DBgwAHPnzkVSUhI+/PBDhIWFwcrKCgDw1ltvYdGiRZgwYQIGDx6MqKgobNiwATt27DDFPhMRERERac7oH1cWZf78+dDr9ejRoweysrIQEhKC//znP0q7mZkZtm/fjhEjRiAoKAi2trYYNGgQpk+frvTx8/PDjh07MHbsWCxcuBDVqlXDf//7X4SEhJg6XSIiIiIiTehEREo7iSchPT0djo6OSEtLeyLzvX0nFj36fnVOqMmf93HU5ARonxcRERFRRWVMzVmiW8YTEREREZE6LLyJiIiIiDTAwpuIiIiISAMm/3ElGa8szhcnIiIiItPiiDcRERERkQZYeBMRERERaYCFNxERERGRBlh4ExERERFpgIU3EREREZEGWHgTEREREWmAhTcRERERkQZYeBMRERERaYCFNxERERGRBlh4ExERERFpgIU3EREREZEGWHgTEREREWmAhTcRERERkQZYeBMRERERaYCFNxERERGRBlh4ExERERFpgIU3EREREZEGWHgTEREREWmAhTcRERERkQZYeBMRERERaYCFNxERERGRBlh4ExERERFpgIU3EREREZEGWHgTEREREWmAhTcRERERkQZYeBMRERERaYCFNxERERGRBlh4ExERERFpwKjCe/bs2WjcuDHs7e3h6uqKrl274tKlSwZ97t27h7CwMLi4uMDOzg49evRAcnKyQZ+EhASEhoaiUqVKcHV1xfjx43H//n2DPgcOHECjRo1gZWWFmjVrIiIionh7SERERERUBhhVeB88eBBhYWE4duwYIiMjkZOTg3bt2iEjI0PpM3bsWGzbtg3fffcdDh48iGvXrqF79+5K+4MHDxAaGors7GwcOXIEK1euREREBCZPnqz0iY+PR2hoKNq0aYPTp08jPDwcQ4YMwe7du02wy0RERERE2jM3pvOuXbsMHkdERMDV1RXR0dFo2bIl0tLS8NVXX2HNmjVo27YtAGDFihWoU6cOjh07hqZNm2LPnj04f/489u7dCzc3NzRo0AAzZszAe++9h6lTp8LS0hJLly6Fn58fPvvsMwBAnTp1cPjwYcyfPx8hISEm2nUiIiIiIu2UaI53WloaAKBy5coAgOjoaOTk5CA4OFjpU7t2bXh7e+Po0aMAgKNHj6JevXpwc3NT+oSEhCA9PR3nzp1T+jwaI69PXoyCZGVlIT093WAhIiIiIioril145+bmIjw8HM2bN0fdunUBAElJSbC0tISTk5NBXzc3NyQlJSl9Hi2689rz2h7XJz09HXfv3i0wn9mzZ8PR0VFZvLy8irtrREREREQmV+zCOywsDL/99hvWrVtnynyKbdKkSUhLS1OWxMTE0k6JiIiIiEhh1BzvPCNHjsT27dtx6NAhVKtWTVnv7u6O7Oxs3Lp1y2DUOzk5Ge7u7kqfEydOGMTLu+rJo33+eSWU5ORkODg4wMbGpsCcrKysYGVlVZzdISIiIiJ64owa8RYRjBw5Eps3b0ZUVBT8/PwM2gMCAmBhYYF9+/Yp6y5duoSEhAQEBQUBAIKCgnD27FmkpKQofSIjI+Hg4AB/f3+lz6Mx8vrkxSAiIiIiKm+MGvEOCwvDmjVrsHXrVtjb2ytzsh0dHWFjYwNHR0e8+eabGDduHCpXrgwHBweMGjUKQUFBaNq0KQCgXbt28Pf3x4ABAzB37lwkJSXhww8/RFhYmDJi/dZbb2HRokWYMGECBg8ejKioKGzYsAE7duww8e4TEZGWfCcWfRy/OidUg0yIiLRn1Ij3kiVLkJaWhtatW8PDw0NZ1q9fr/SZP38+XnnlFfTo0QMtW7aEu7s7Nm3apLSbmZlh+/btMDMzQ1BQEPr374+BAwdi+vTpSh8/Pz/s2LEDkZGReOGFF/DZZ5/hv//9Ly8lSERERETlllEj3iJSZB9ra2ssXrwYixcvLrSPj48P/ve//z02TuvWrfHLL78Ykx4RERERUZlVout4ExERERGROiy8iYiIiIg0wMKbiIiIiEgDLLyJiIiIiDTAwpuIiIiISAMsvImIiIiINMDCm4iIiIhIAyy8iYiIiIg0YNQNdOjpwds6ExEREZkWR7yJiIiIiDTAwpuIiIiISAMsvImIiIiINMA53kRE9FTjb1qISCsc8SYiIiIi0gALbyIiIiIiDbDwJiIiIiLSAOd4ExFRuaNmXjbAudlEVLZwxJuIiIiISAMc8SYiosfi6DIRkWlwxJuIiIiISAMsvImIiIiINMDCm4iIiIhIAyy8iYiIiIg0wB9XEhERlTGm/EGrmlj8YSyRNjjiTURERESkARbeREREREQa4FQTIiIiKhKv505Uciy86YnigZqIniacT60OXyd6WrHwJiKqoFjcEBGVLZzjTURERESkARbeREREREQa4FQTIqIyhNNDiIgqrjJdeC9evBiffvopkpKS8MILL+CLL75AkyZNSjstKiUsSMq3svj/Z6qc+CNiIiJSo8wW3uvXr8e4ceOwdOlSBAYGYsGCBQgJCcGlS5fg6upa2ukRmVxZLEzLIha5RPQoHjupPCmzhfe8efMwdOhQvPHGGwCApUuXYseOHfj6668xceLEUs6O6KGyWATyVtNERERlU5ksvLOzsxEdHY1JkyYp6/R6PYKDg3H06NECt8nKykJWVpbyOC0tDQCQnp6urKs7Zbeq5/9tWkiRfXKzMovs8+hzaxFLTRxTxiqvOQHq3gumeh8AfM1NGass7l9ZzMmUscri/pXFnEwZqyzuX1nMyZSxTFkj0NMl7/0lIkV3ljLozz//FABy5MgRg/Xjx4+XJk2aFLjNlClTBAAXLly4cOHChQsXLpoviYmJRda4ZXLEuzgmTZqEcePGKY9zc3ORmpoKFxcX6HS6ArdJT0+Hl5cXEhMT4eDgUKLnN1WsspiTKWMxJ+1jMSftYzEn7WMxJ+1jMSftYzEn7WOpiSMiuH37Njw9PYuMVyYL7ypVqsDMzAzJyckG65OTk+Hu7l7gNlZWVrCysjJY5+TkpOr5HBwcSvwfbOpYZTEnU8ZiTtrHYk7ax2JO2sdiTtrHYk7ax2JO2scqKo6jo6OqOGXyBjqWlpYICAjAvn37lHW5ubnYt28fgoKCSjEzIiIiIqLiKZMj3gAwbtw4DBo0CC+++CKaNGmCBQsWICMjQ7nKCRERERFReVJmC+/XXnsNN27cwOTJk5GUlIQGDRpg165dcHNzM9lzWFlZYcqUKfmmqJRmrLKYkyljMSftYzEn7WMxJ+1jMSftYzEn7WMxJ+1jmTInANCJqLn2CRERERERlUSZnONNRERERFTRsPAmIiIiItIAC28iIiIiIg2w8CYiIiIi0gAL7zKIv3clIiIiqnjK7OUEn2ZWVlY4c+YM6tSpU9qpVEjXr1/HkiVLcPjwYVy/fh16vR7Vq1dH165d8frrr8PMzKy0UyQiIqIK6KkqvO/evYvo6GhUrlwZ/v7+Bm337t3Dhg0bMHDgQFWxLly4gGPHjiEoKAi1a9fGxYsXsXDhQmRlZaF///5o27ZtkTHGjRtX4PoHDx5gzpw5cHFxAQDMmzdPVU6PysjIwIYNG3DlyhV4eHigT58+Sryi/Pzzz3B2doafnx8AYNWqVVi6dCkSEhLg4+ODkSNHonfv3kXGGTVqFHr16oV//etfRudfkEWLFuHEiRPo2LEjevfujVWrVmH27NnIzc1F9+7dMX36dJibP/4tferUKQQHB6NmzZqwsbFBTEwM+vbti+zsbLz77rv4+uuvsWvXLtjb25skZ6KK4sSJEzh69CiSkpIAAO7u7ggKCkKTJk1M9hw3b97Etm3bVB+Hc3Nzodfn/+I2NzcXf/zxB7y9vVXFERFcvXoVXl5eMDc3R3Z2NjZv3oysrCx07NgRVapUMWo/HtW2bVusWLECPj4+xY4BAPHx8crxvG7duqq3y8rKgl6vh4WFBQAgNjYWX3/9tXI8f/PNN5Vj/eNs3LgRHTp0QKVKlYq9D486c+YMoqOj0bp1a1SvXh3nzp3D4sWLkZubi27duiEkJER1rKioqHwDKZ07d0atWrVMkiuRSclT4tKlS+Lj4yM6nU70er20bNlSrl27prQnJSWJXq9XFWvnzp1iaWkplStXFmtra9m5c6dUrVpVgoODpW3btmJmZib79u0rMo5Op5MGDRpI69atDRadTieNGzeW1q1bS5s2bVTlVKdOHfn7779FRCQhIUF8fX3F0dFRGjduLJUrVxZXV1eJi4tTFat+/foSGRkpIiLLly8XGxsbGT16tCxZskTCw8PFzs5OvvrqK1X7p9frpVatWjJnzhy5fv26qucvyIwZM8Te3l569Ogh7u7uMmfOHHFxcZGZM2fKrFmzpGrVqjJ58uQi4zRv3lymTp2qPF61apUEBgaKiEhqaqo0aNBARo8ebVRuWVlZsn79egkPD5fevXtL7969JTw8XDZs2CBZWVnG7WghkpKSZNq0aUZtk5iYKLdv3863Pjs7Ww4ePKgqxl9//SVRUVHKe+vGjRsyZ84cmTZtmpw/f96ofAri5+cnly9fLlGM3NxciYqKkmXLlsm2bdskOztb1XaJiYly48YN5fGhQ4ekb9++0qJFC+nXr58cOXJEdQ7//ve/5erVq0bnXpBt27bJRx99JIcPHxYRkX379kmHDh0kJCREvvzyS6NiZWZmyldffSVvvPGGtG/fXjp27CgjR46UvXv3qo6RnJwsLVq0EJ1OJz4+PtKkSRNp0qSJcjxt0aKFJCcnG5VXYU6fPq3qOJyWliY9e/YUa2trcXV1lY8++kju37+vtBtzPL948aL4+PiIXq+XmjVrSlxcnAQEBIitra1UqlRJqlSpouo9unXr1gIXMzMzWbRokfJYjREjRih/u5mZmdKjRw/R6/XKMbVNmzYF/m0XpFWrVvLdd9+JiMjhw4fFyspK6tevL6+99po0bNhQKlWqpOq9rtPpxMHBQYYOHSrHjh1T9dyF2bhxo5iZmYmLi4vY2dlJZGSkODk5SXBwsISEhIiZmZmsXr26yDjJycnSpEkT0ev1Ym5uLnq9XgICAsTd3V3MzMxk/PjxRud2/PhxWbBggUycOFEmTpwoCxYskOPHjxdnNwuVmpoqK1euVN3/wYMHha7//fffVcfJzc2VuLg4ycnJEZGHn13r1q2TlStXGhwLi6NNmzYmOQbGxcXJnj175OzZs0Ztd+/ePYNj/5UrV+T999+X/v37ywcffKC6/vn+++8lIyPDqOc21lNTeHft2lVCQ0Plxo0bEhMTI6GhoeLn56e8aY05UAcFBckHH3wgIiJr164VZ2dnef/995X2iRMnyssvv1xknNmzZ4ufn1++It3c3FzOnTundtdE5OFBMe/Dr1+/ftKsWTO5deuWiIjcvn1bgoODpU+fPqpi2djYKH9ADRs2lGXLlhm0r169Wvz9/VXltHfvXhkzZoxUqVJFLCwspHPnzrJt27ZCDySFqVGjhmzcuFFEHn44m5mZybfffqu0b9q0SWrWrFlkHBsbG4mNjVUeP3jwQCwsLCQpKUlERPbs2SOenp6q84qJiZHq1auLtbW1tGrVSnr16iW9evWSVq1aibW1tdSsWVNiYmJUxyuM2oJEROTatWvSuHFj0ev1YmZmJgMGDDD4kFb7Xj9+/Lg4OjqKTqcTZ2dnOXXqlPj5+UmtWrWkRo0aYmNjI9HR0apyWrhwYYGLmZmZTJo0SXmsRocOHZT39t9//y2BgYGi0+mkatWqotfrpXbt2pKSklJknCZNmsi2bdtERGTLli2i1+ulc+fO8t5770m3bt3EwsJCaS+KTqcTMzMzCQ4OlnXr1hX7hGvp0qVibm4uAQEB4uDgIKtWrRJ7e3sZMmSIDB8+XGxsbGTBggWqYsXExIiPj4+4urqKl5eX6HQ6CQ0NlcDAQDEzM5OePXsqH8CP06NHDwkKCpKLFy/ma7t48aI0a9ZMXn31VVU5paWlPXb58ccfVb03R48eLc8++6x89913snz5cvHx8ZHQ0FDldU9KShKdTqcqpy5dukjnzp3l119/lfDwcKlTp4506dJFsrOz5d69e9KpUyfp379/kXHyimKdTlfoovZvWK/XK8fzSZMmSbVq1SQqKkoyMjLk8OHDUqNGDZk4caKqWA4ODsqJQ6tWrWTs2LEG7R9++KE0b95c1f5Nnz5dGjZsKDqdTp5//nmZP3++/PXXX6ryeFSjRo1k5syZIvLwM9TJyUmmT5+utP/73/+WBg0aFBnntddek65du0paWprcu3dPRo4cKQMHDhSRhyesLi4uqv9eeILJE0wR055gFuapKbxdXV3l119/VR7n5ubKW2+9Jd7e3hIbG2vUG9jBwUEpph48eCDm5uby888/K+1nz54VNzc3VbFOnDghzz77rLzzzjvK2VpJC+/q1avLnj17DNp/+ukn8fLyUhXLxcVFTp06JSIPX7fTp08btF+5ckVsbGyMyik7O1vWr1+vjGZ4enrK+++/r7ootbGxMTizt7CwkN9++015fPXqValUqVKRcXx8fJSRRJGHRapOp5PMzEwREYmPjxdra2tVOYmIBAcHS5cuXSQtLS1fW1pamnTp0kXatWtXZJwzZ848dlm/fr3q9+fAgQMlMDBQTp48KZGRkRIQECAvvviipKamioj6oiQ4OFiGDBki6enp8umnn0q1atVkyJAhSvsbb7whXbt2VZWTTqeTatWqia+vr8Gi0+nkmWeeEV9fX/Hz81MdK+99NWLECPH391dGMxITEyUgIEDeeuutIuPY2toq2wUGBsqcOXMM2r/44gtp2LCh6pxWrFghXbp0EQsLC3FxcZExY8YYPWrj7++vnOhGRUWJtbW1LF68WGlfsWKF1KlTR1WsDh06yPDhwyU3N1dERObMmSMdOnQQEZHLly+Lr6+vTJkypcg4dnZ2Bse3fzp16pTY2dmpyinvA7WwRW1x6u3tLfv371ce37hxQ5o0aSLt2rWTe/fuGXU8r1q1qvzyyy8iInLnzh3R6XTy448/Ku0//fSTeHt7Fxmnffv2Ehoamq84K+nxvG7durJmzRqD9q1bt8qzzz6rKpatra1cuHBBRETc3NwKPJ6r+f97NKdTp07JiBEjxMnJSaysrKRnz575PnOKyik+Pl5EHn4WW1hYGHw+x8bGqsrJwcHB4HPgzp07YmFhoRyPV61aJc8995yqnHiCyRPMvP0z1QlmYZ6awtve3r7Ar8bDwsKkWrVqcujQIaMK7ytXriiP7ezsDEZRr169alTxdvv2bRk4cKDUr19fzp49KxYWFsU6UOeN8nl6eub7wDcmp/79+8ubb74pIiI9e/aUDz/80KB91qxZUq9ePVU5FTRC8Pvvv8uUKVOUs281/Pz8ZOfOnSLysGjQ6/WyYcMGpX3Hjh3i6+tbZJwxY8ZI3bp1ZefOnRIVFSVt2rSR1q1bK+27du2SGjVqqMpJ5OEJweOKq19//VX1SUphBzNjChKRh///j341mndQbdCggfz999+qixJnZ2flbyY7O1v0er1B3OjoaHnmmWdU5TR8+HBp0KBBvr/BkhYlzz33XL7Rlb1796oq4h0dHeXMmTMi8vAEM+/fea5cuaLqZO6fOSUnJ8snn3witWvXFr1eL40bN5Zly5ZJenp6kXEKOsF89P0VHx+vOqdKlSoZjGBlZWWJhYWF8gGyZcsWVX8zLi4ucuDAgULb9+/fLy4uLqpycnBwkE8++UQOHDhQ4LJ8+XJV700bG5t8Xx2np6dLUFCQtG3bVuLi4lT/vfzzNbezszM4vickJIiVlZWqWPPmzRMvLy+Db0qK+x7PO55XqVLFoLgUeXg8V3NcERFp27atzJ07V0REmjVrlm+Kw/fff6/qxKKg4/ndu3flm2++kdatW4ter1f1fhIRcXd3VwZ3UlNTRafTGZxInThxQtzd3YuMU7VqVYPXNjMzU/R6vTI1LjY2VvX/HU8weYL5z5xKeoJZmKem8G7cuLF88803BbaFhYWJk5OT6jdw/fr1lSJQ5OEI96Nf2R46dEj16N2j1q5dK25ubqLX64v1Bq5Xr540bNhQ7Ozs5PvvvzdoP3jwoOoi6c8//xRfX19p2bKljBs3TmxsbKRFixYydOhQadmypVhaWsqOHTtU5fS4r+Zyc3NVv4k//PBDqVq1qgwZMkT8/Pxk4sSJ4u3tLUuWLJGlS5eKl5dXvjPcgty+fVt69eol5ubmotPppFmzZgYf4Lt37zYo6Ivi4eHx2OkIP/zwg3h4eBQZx8XFRb766iu5evVqgcuOHTtUvz9tbW3zfWWYk5MjXbt2lfr168uvv/6qKtajo1Ii+U8wf//9d6NOMDdt2iReXl7yxRdfKOtKWpS4uroWWJSo+bDt3LmzMpoSEhKSb6rL8uXLpVatWqpzKui9fujQIRk0aJDY2tqKra1tkXHyBgFEHv4d6nQ6g7+1AwcOSLVq1VTl5OnpaTAV6ObNm6LT6ZQTgLi4OFWv09tvvy0+Pj6yadMmg2920tLSZNOmTeLr6ysjR45UlVPr1q3lk08+KbT99OnTqkbwnnvuuQKPQbdv35agoCB54YUXVP+91KhRw6AA+c9//mNwkhQdHa2qCMzzyy+/iL+/vwwbNkwyMjKK/R4fPny4jB07VlxdXfMdJ6Ojo6VKlSqqYh05ckQcHR1lypQp8sUXX0iVKlXkww8/lNWrV8vkyZPFycnpsf8neR4dnSxITEyMwZTLx+nfv78EBgbKt99+K506dZKQkBBp2rSpXLhwQS5evCitWrVSNbrcrVs36dGjh9y5c0eys7MlPDzcYMrhsWPHVP/f8QSTJ5h5OZnqBLMwT03hPWvWLOVr1oKMGDFC9Vc2S5Yske3btxfaPmnSJGXE2FiJiYmyZcsWuXPnjlHbTZ061WDZtWuXQfu7774rvXv3Vh3v5s2b8t5774m/v79YW1uLpaWl+Pj4SN++feXkyZOqYvj6+prs65kHDx7Ixx9/LK+88orMmjVLcnNzZe3ateLl5SUuLi7y+uuvG/Wa3b17V/Xcscf56KOPxNnZWebNmydnzpyRpKQkSUpKkjNnzsi8efOkcuXKqr7Ob9euncyYMaPQdrUFiYhIvXr18p14ifx/8e3t7a3qYF27dm2D3x9s375dmZIj8vBDTW0RmOePP/6Qtm3bSvv27eX69evFPlh37NhRunXrJs7OzvlOfI4dO6Zqqtf58+fFxcVFBg4cKDNmzBA7Ozvp37+/fPzxxzJw4ECxsrKSFStWqMqpqKIkLS0t328lChIWFia1atWSmTNnSpMmTWTQoEFSu3Zt2blzp+zatUvq1asngwcPVpXToEGDpFWrVnLhwgWJi4tT5jrmOXDggKrpZ/fu3ZO33npLLC0tRa/Xi7W1tVhbW4terxdLS0sZMWKE3Lt3T1VOy5Yte+xc/qSkJIMfPxdm1KhRhRZm6enpEhgYqLogGT58uCxfvrzQ9tmzZ0vHjh1VxcqTmZkpw4cPl1q1aomZmZnR7/FWrVoZ/OD+n/nNmDFDWrVqpTrekSNHpGnTpvm+TXvmmWdUz4EuaiDFGElJSfLyyy+LnZ2dhISEyK1bt2TkyJEGP8h/tCgsTGxsrNSoUUPMzc3FwsJCnJyclAsDiDycmqV2qgJPMHmCKWLaE8zCPDWFN9GTMmfOHPHw8DD4elGn04mHh4eqP3SRh6PBq1atKrQ9NTVVIiIiVMWaMGFCofPKc3JypHPnzqoO+lOnTpW1a9cW2v7+++9L9+7dVeX0qNzcXJk1a5Zy5QFjD9avv/66wbJ+/XqD9vHjx0tISIiqWFeuXJHevXuLvb29UoxYWFhIs2bNZPPmzapzMlVRcufOHRk6dKjUrVtXhg0bJllZWfLpp5+KpaWl6HQ6ad26ternSU5OVootvV4vPj4+Bl+lf/fdd/L555+rzi0tLU2ioqJkzZo1smbNGomKiirwtw1aSE1NzTc69qj09PTHjl4aIy4uzuAKWMbYunWrhIeHm6xgzRMbGyuJiYlGb5eSkiLHjh2TI0eOGHybpcbVq1eV3ws8KbGxsfm+QS5KRkaG7N69W7Zt21aiK3OY+gTzcSc0PMF8qKKfYBb6HCK8TSKRKcTHxxtc41jNtXGfhPv37yMzMxMODg6Ftv/5558lvq5wZmYmzMzMYGVlVazto6OjcfjwYQwcOBDOzs4lyuVRGRkZMDMzg7W1teptRAQpKSnIzc1FlSpVlGselxX37t1DTk5Osa4vHxMTg6ysLNSuXbvI69wTPe3S09MRHR1tcCwPCAgo9Hj6JN28eRPXrl3D888/X2D77du38fPPP6NVq1Ylfq74+HhYW1vDw8PD6G1/+OEH7N+/H5MmTYKrq2uJc8kTFxcHS0tLVKtWzajtbty4gbi4OOTm5sLDwwO+vr6qt/3999/h7e0NnU5nZLbq8ZbxRCbi5+eHoKAgBAUFKUV3YmIiBg8eXOLYxsQxNzd/7IfE9evXMW3atBLn9Pfff2PEiBHF3j4gIABjxoyBs7OzyV4nAEhNTcXbb79t1DY6nQ5ubm7w8PBQim5T5lTSWNbW1rC3ty9WnFq1aqFu3br5im5jYt29exeHDx/G+fPn87Xdu3cP33zzjep8TBWLOXH/TJ3ThQsXsHHjRuWmcw0bNsSGDRsQHh6OqKgo1XHyYq1YsQIXL14EAFy8eBEjRozA4MGDVcdydnaGXq8vNM7JkyeNKrofl1N8fLzqovufcZ599lncvXsXEydOLPbrdOnSpXw5Xb161aiiOy9WamoqAgMD4ezsjE8++cSo19zHxwcXL14s8f/dYz3R8XSip5wx19/WIo4pY5XFnEwZizk9VNDNx/7880+l3ZgrK5jqRmamvCFaRc6pou9fWbwxniljMafyvX+F4VQTohL44YcfHtseFxeHd955Bw8ePNAkTkXPyZSxmJO6WN26dUNOTg4iIiJw69YthIeH4/z58zhw4AC8vb2RnJwMT09PVTmZKhZz4v6ZOqdmzZqhbdu2mDlzJtatW4e3334bI0aMwMcffwwAmDRpEqKjo7Fnzx7NYjGn8r1/hSpR2U70lDPVzQRMeVOCipxTRd+/spiTKW8+ZqpYzIn7Z+qcTHljPFPFYk7le/8KwzneRCXg4eGBTZs2ITc3t8Dl559/1jRORc+pou9fWczp7t27BvPDdTodlixZgk6dOqFVq1a4fPmy6pxMFYs5cf9MnVPe9gCg1+thbW0NR0dHpc3e3h5paWmax2JO5Xv/CsLCm6gEAgICEB0dXWi7TqeDqJjNZao4FT0nU8ZiTupi1a5dG6dOncq3ftGiRejSpQs6d+6sKh9TxmJO3D9T5+Tr64uYmBjl8dGjR+Ht7a08TkhIUP3jQ1PFYk7le/8Kw8KbqATGjx+PZs2aFdpes2ZN7N+/X7M4FT0nU8ZiTupidevWDWvXri2wbdGiRejTp4/qkwFTxWJO3D9T5zRixAiDueD/vBLQzp070bZtW01jMafyvX+F4Y8riYiIiIg0wBFvIiIiIiINsPAmIiIiItIAC28iIiIiIg2w8CYionyuXr0KnU6H06dPl3YqREQVBgtvIiIiIiINsPAmIiIiItIAC28iojKqdevWGD16NCZMmIDKlSvD3d0dU6dOLXK7vn374rXXXjNYl5OTgypVquCbb74BAOzatQstWrSAk5MTXFxc8MorryA2NrbQmBEREXBycjJYt2XLFuUub3m2bt2KRo0awdraGtWrV8e0adNw//59AICIYOrUqfD29oaVlRU8PT0xevRoFa8EEVHFwMKbiKgMW7lyJWxtbXH8+HHMnTsX06dPR2Rk5GO36devH7Zt24Y7d+4o63bv3o3MzEx069YNAJCRkYFx48bh1KlT2LdvH/R6Pbp164bc3Nxi5/rjjz9i4MCBGDNmDM6fP48vv/wSERER+PjjjwEAGzduxPz58/Hll18iJiYGW7ZsQb169Yr9fERE5Y150V2IiKi01K9fH1OmTAEA1KpVC4sWLcK+ffvw8ssvF7pNSEgIbG1tsXnzZgwYMAAAsGbNGnTu3Bn29vYAgB49ehhs8/XXX6Nq1ao4f/486tatW6xcp02bhokTJ2LQoEEAgOrVq2PGjBmYMGECpkyZgoSEBLi7uyM4OBgWFhbw9vZGkyZNivVcRETlEUe8iYjKsPr16xs89vDwQEpKymO3MTc3R69evbB69WoAD0e3t27din79+il9YmJi0KdPH1SvXh0ODg7w9fUFACQkJBQ71zNnzmD69Omws7NTlqFDh+L69evIzMxEz549cffuXVSvXh1Dhw7F5s2blWkoRERPA454ExGVYRYWFgaPdTqdqukg/fr1Q6tWrZCSkoLIyEjY2Nigffv2SnunTp3g4+OD5cuXw9PTE7m5uahbty6ys7MLjKfX6yEiButycnIMHt+5cwfTpk1D9+7d821vbW0NLy8vXLp0CXv37kVkZCTefvttfPrppzh48GC+/SQiqohYeBMRVUDNmjWDl5cX1q9fj507d6Jnz55Kcfv333/j0qVLWL58Of71r38BAA4fPvzYeFWrVsXt27eRkZEBW1tbAMh3je9GjRrh0qVLqFmzZqFxbGxs0KlTJ3Tq1AlhYWGoXbs2zp49i0aNGpVgb4mIygcW3kREFVTfvn2xdOlSXL58Gfv371fWOzs7w8XFBcuWLYOHhwcSEhIwceLEx8YKDAxEpUqV8P7772P06NE4fvw4IiIiDPpMnjwZr7zyCry9vfHqq69Cr9fjzJkz+O233zBz5kxERETgwYMHSqxvv/0WNjY28PHxeRK7T0RU5nCONxFRBdWvXz+cP38ezzzzDJo3b66s1+v1WLduHaKjo1G3bl2MHTsWn3766WNjVa5cGd9++y3+97//oV69eli7dm2+SxuGhIRg+/bt2LNnDxo3boymTZti/vz5SmHt5OSE5cuXo3nz5qhfvz727t2Lbdu2wcXFxeT7TkRUFunkn5P2iIiIiIjI5DjiTURERESkARbeRETlzOrVqw0u2ffo8vzzz5d2ekREVAhONSEiKmdu376N5OTkAtssLCz4Y0UiojKKhTcRERERkQY41YSIiIiISAMsvImIiIiINMDCm4iIiIhIAyy8iYiIiIg0wMKbiIiIiEgDLLyJiIiIiDTAwpuIiIiISAMsvImIiIiINPB/4t35WR14QU4AAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "file_nvalues = (sa.select(File.glottocode,\n", " sa.func.count(Value.option_id.distinct()).label('n_values'))\n", " .join_from(File, Value)\n", " .group_by(File.glottocode)\n", " .alias('file_nvalues')\n", " .c.n_values)\n", "\n", "select_nvalues = (sa.select(file_nvalues, sa.func.count().label('n_files'))\n", " .group_by(file_nvalues)\n", " .order_by(file_nvalues))\n", "\n", "_ = read_sql(select_nvalues, index_col='n_values')\n", "\n", "_.plot.bar(figsize=(12 * 72 / 100, 3 * 72 / 100))\n", "(_.index.to_series().describe()\n", " .to_frame().transpose()[['count', 'min', 'max']])" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT length(_value.value) AS value_length, count(*) AS n_values \n", "FROM _value GROUP BY length(_value.value) ORDER BY value_length\n", "[generated in 0.00104s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
countminmax
value_length810.01.06215.0
\n", "
" ], "text/plain": [ " count min max\n", "value_length 810.0 1.0 6215.0" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "value_length = sa.func.length(Value.value).label('value_length')\n", "\n", "select_value_length = (sa.select(value_length, sa.func.count().label('n_values'))\n", " .group_by(value_length)\n", " .order_by('value_length'))\n", "\n", "_ = read_sql(select_value_length, index_col='value_length')\n", "\n", "(_.plot.area(figsize=(12 * 72 / 100, 3 * 72 / 100), logx=True)\n", " .xaxis.set_major_formatter(mpl.ticker.ScalarFormatter()))\n", "(_.index.to_series().describe()\n", " .to_frame().transpose()[['count', 'min', 'max']])" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO@treedb.raw.export] fetch statistics\n", "BEGIN (implicit)\n", "SELECT _option.section, _option.option, count(*) AS n \n", "FROM _option JOIN _value ON _option.id = _value.option_id GROUP BY _option.section, _option.option ORDER BY _option.defined DESC, _option.ord_section, _option.ord_option, _option.section, n DESC, _option.option\n", "[generated in 0.00079s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "core name 26,879\n", "core hid 8,918\n", "core level 26,879\n", "core iso639-3 8,167\n", "core latitude 8,885\n", "core longitude 8,885\n", "core macroareas 22,079\n", "core countries 11,902\n", "core name_comment 14\n", "core comment 1\n", "core location 1\n", "core name_pronunciation 1\n", "core speakers 1\n", "core links 32,863\n", "core timespan 1,052\n", "sources glottolog 218,913\n", "altnames multitree 54,472\n", "altnames hhbib_lgcode 39,238\n", "altnames lexvo 26,035\n", "altnames elcat 23,792\n", "altnames aiatsis 5,123\n", "altnames wals 2,441\n", "altnames wals other 2,097\n", "altnames moseley & asher (1994) 2,088\n", "altnames glottolog 2,009\n", "altnames ruhlen (1987) 2,007\n", "altnames ethnologue 3\n", "triggers lgcode 29,967\n", "triggers inlg 187\n", "identifier multitree 14,826\n", "identifier endangeredlanguages 3,596\n", "identifier wals 2,618\n", "identifier languagelandscape 333\n", "classification sub 12,275\n", "classification subrefs 18,307\n", "classification family 186\n", "classification familyrefs 696\n", "endangerment status 8,554\n", "endangerment source 8,554\n", "endangerment date 8,554\n", "endangerment comment 8,554\n", "hh_ethnologue_comment isohid 538\n", "hh_ethnologue_comment comment_type 538\n", "hh_ethnologue_comment ethnologue_versions 538\n", "hh_ethnologue_comment comment 538\n", "iso_retirement code 369\n", "iso_retirement name 369\n", "iso_retirement change_request 360\n", "iso_retirement effective 369\n", "iso_retirement reason 369\n", "iso_retirement change_to 453\n", "iso_retirement remedy 336\n", "iso_retirement comment 232\n", "CPU times: total: 781 ms\n", "Wall time: 757 ms\n" ] } ], "source": [ "%time treedb.raw.print_stats()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## languoid" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 2.69s ago] ('table', 'languoid')\n", "SELECT count(*) AS n_rows \n", "FROM languoid\n", "[generated in 0.00058s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE languoid (\n", "\tid VARCHAR(8) NOT NULL CHECK (length(id) = 8), \n", "\tname VARCHAR NOT NULL CHECK (name != ''), \n", "\tlevel VARCHAR NOT NULL, \n", "\tparent_id VARCHAR(8), \n", "\thid TEXT CHECK (length(hid) >= 3), \n", "\tiso639_3 VARCHAR(3) CHECK (length(iso639_3) = 3), \n", "\tlatitude FLOAT CHECK (latitude BETWEEN -90 AND 90), \n", "\tlongitude FLOAT CHECK (longitude BETWEEN -180 AND 180), \n", "\tPRIMARY KEY (id), \n", "\tCHECK ((latitude IS NULL) = (longitude IS NULL)), \n", "\tUNIQUE (name), \n", "\tFOREIGN KEY(level) REFERENCES languoidlevel (name), \n", "\tFOREIGN KEY(parent_id) REFERENCES languoid (id) DEFERRABLE INITIALLY DEFERRED, \n", "\tUNIQUE (hid), \n", "\tUNIQUE (iso639_3)\n", ") WITHOUT ROWID\n", "26879\n" ] } ], "source": [ "from treedb import Languoid\n", "\n", "print_sql(Languoid)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 2.702s ago] ('table', 'languoidlevel')\n", "SELECT count(*) AS n_rows \n", "FROM languoidlevel\n", "[generated in 0.00052s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE languoidlevel (\n", "\tname VARCHAR NOT NULL CHECK (name != ''), \n", "\tdescription TEXT NOT NULL CHECK (description != ''), \n", "\tordinal INTEGER NOT NULL CHECK (ordinal >= 1), \n", "\tPRIMARY KEY (name)\n", ") WITHOUT ROWID\n", "3\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT languoidlevel.name, languoidlevel.description, languoidlevel.ordinal \n", "FROM languoidlevel ORDER BY languoidlevel.ordinal\n", "[generated in 0.00082s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
descriptionordinal
name
familysub-grouping of languoids above the language l...1
languagedefined by mutual non-intellegibility2
dialectany variety which is not a language3
\n", "
" ], "text/plain": [ " description ordinal\n", "name \n", "family sub-grouping of languoids above the language l... 1\n", "language defined by mutual non-intellegibility 2\n", "dialect any variety which is not a language 3" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from treedb import LEVEL\n", "from treedb.models import LanguoidLevel\n", "\n", "FAMILY, LANGUAGE, DIALECT = LEVEL\n", "\n", "print_sql(LanguoidLevel)\n", "read_sql(sa.select(LanguoidLevel).order_by('ordinal'), index_col='name')" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 2.717s ago] ('table', 'pseudofamily')\n", "SELECT count(*) AS n_rows \n", "FROM pseudofamily\n", "[generated in 0.00051s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE pseudofamily (\n", "\tlanguoid_id VARCHAR(8) NOT NULL, \n", "\tname VARCHAR NOT NULL, \n", "\tconfig_section VARCHAR NOT NULL CHECK (config_section != ''), \n", "\tdescription TEXT CHECK (description != ''), \n", "\tbookkeeping BOOLEAN CHECK (bookkeeping = 1), \n", "\tPRIMARY KEY (languoid_id), \n", "\tFOREIGN KEY(languoid_id) REFERENCES languoid (id), \n", "\tUNIQUE (name), \n", "\tFOREIGN KEY(name) REFERENCES languoid (name), \n", "\tUNIQUE (config_section), \n", "\tUNIQUE (bookkeeping)\n", ") WITHOUT ROWID\n", "8\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT pseudofamily.languoid_id, pseudofamily.name, pseudofamily.config_section, pseudofamily.description, pseudofamily.bookkeeping \n", "FROM pseudofamily ORDER BY pseudofamily.name\n", "[generated in 0.00066s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
languoid_idnamedescriptionbookkeeping
config_section
artificial_languagearti1236Artificial LanguageA language known to have been created by consc...None
bookkeepingbook1242BookkeepingAn alleged language that has been replaced wit...True
mixed_languagemixe1287Mixed LanguageNoneNone
pidginpidg1258PidginA language used for interethnic communication ...None
sign_languagesign1238Sign LanguageA language with visible manual signs as the mo...None
speech_registerspee1234Speech RegisterA language not used by a community of speakers...None
unattestedunat1236UnattestedA language arguably different from all other e...None
unclassifiableuncl1493UnclassifiableA language arguably different from all other e...None
\n", "
" ], "text/plain": [ " languoid_id name \\\n", "config_section \n", "artificial_language arti1236 Artificial Language \n", "bookkeeping book1242 Bookkeeping \n", "mixed_language mixe1287 Mixed Language \n", "pidgin pidg1258 Pidgin \n", "sign_language sign1238 Sign Language \n", "speech_register spee1234 Speech Register \n", "unattested unat1236 Unattested \n", "unclassifiable uncl1493 Unclassifiable \n", "\n", " description \\\n", "config_section \n", "artificial_language A language known to have been created by consc... \n", "bookkeeping An alleged language that has been replaced wit... \n", "mixed_language None \n", "pidgin A language used for interethnic communication ... \n", "sign_language A language with visible manual signs as the mo... \n", "speech_register A language not used by a community of speakers... \n", "unattested A language arguably different from all other e... \n", "unclassifiable A language arguably different from all other e... \n", "\n", " bookkeeping \n", "config_section \n", "artificial_language None \n", "bookkeeping True \n", "mixed_language None \n", "pidgin None \n", "sign_language None \n", "speech_register None \n", "unattested None \n", "unclassifiable None " ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from treedb.models import PseudoFamily\n", "\n", "print_sql(PseudoFamily)\n", "read_sql(sa.select(PseudoFamily).order_by('name'), index_col='config_section')" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "WITH RECURSIVE tree(parent_id, child_id) AS \n", "(SELECT root.id AS parent_id, root.id AS child_id \n", "FROM languoid AS root \n", "WHERE root.parent_id IS NULL UNION ALL SELECT tree.parent_id AS parent_id, child.id AS child_id \n", "FROM tree JOIN languoid AS child ON tree.child_id = child.parent_id)\n", " SELECT ? AS kind, count(*) AS n \n", "FROM languoid UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM languoid \n", "WHERE languoid.level = ? AND languoid.parent_id IS NULL UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM languoid \n", "WHERE languoid.level = ? AND languoid.parent_id IS NULL UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM languoid \n", "WHERE languoid.parent_id IS NULL UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM languoid \n", "WHERE languoid.level = ? UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM languoid \n", "WHERE languoid.level = ? AND languoid.parent_id IS NOT NULL UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM languoid \n", "WHERE languoid.level = ? UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? AND (root.name NOT IN (?, ?, ?, ?, ?, ?, ?, ?)) UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? AND root.name = ? UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? AND root.name = ? UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? AND root.name = ? UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? AND root.name = ? UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? AND root.name = ? UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? AND root.name = ? UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? AND root.name = ? UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? AND root.name != ? UNION ALL SELECT ? AS kind, count(*) AS n \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? AND root.name = ?\n", "[generated in 0.00136s] ('languoids', 'families', 'family', 'isolates', 'language', 'roots', 'languages', 'language', 'subfamilies', 'family', 'dialects', 'dialect', 'Spoken L1 Languages', 'language', 'Sign Language', 'Unclassifiable', 'Pidgin', 'Unattested', 'Artificial Language', 'Mixed Language', 'Speech Register', 'Bookkeeping', 'Sign Language', 'language', 'Sign Language', 'Unclassifiable', 'language', 'Unclassifiable', 'Pidgin', 'language', 'Pidgin', 'Unattested', 'language', 'Unattested', 'Artificial Language', 'language', 'Artificial Language', 'Mixed Language', 'language', 'Mixed Language', 'Speech Register', 'language', 'Speech Register', 'All', 'language', 'Bookkeeping', 'Bookkeeping', 'language', 'Bookkeeping')\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "26,879 languoids\n", " 246 families\n", " 184 isolates\n", " 430 roots\n", " 8,604 languages\n", " 4,522 subfamilies\n", "13,507 dialects\n", " 7,665 Spoken L1 Languages\n", " 227 Sign Language\n", " 120 Unclassifiable\n", " 84 Pidgin" ] }, { "name": "stderr", "output_type": "stream", "text": [ "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " 68 Unattested\n", " 31 Artificial Language\n", " 9 Mixed Language\n", " 15 Speech Register\n", " 8,219 All\n", " 385 Bookkeeping\n", "CPU times: total: 359 ms\n", "Wall time: 363 ms\n" ] } ], "source": [ "%time treedb.print_languoid_stats()" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT languoid.id, languoid.name, languoid.level, languoid.parent_id, languoid.hid, languoid.iso639_3, languoid.latitude, languoid.longitude \n", "FROM languoid\n", " LIMIT ? OFFSET ?\n", "[generated in 0.00084s] (5, 0)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namelevelparent_idhidiso639_3latitudelongitude
id
3adt12343Ad-Teklesdialectnort3292NoneNoneNaNNaN
aala1237Aalawadialectramo1244NoneNoneNaNNaN
aant1238Aantantaradialectnort2920NoneNoneNaNNaN
aari1238Aari-Gayilfamilyahkk1235aizaizNaNNaN
aari1239Aarilanguageaari1238aiwaiw5.9503436.5721
\n", "
" ], "text/plain": [ " name level parent_id hid iso639_3 latitude longitude\n", "id \n", "3adt1234 3Ad-Tekles dialect nort3292 None None NaN NaN\n", "aala1237 Aalawa dialect ramo1244 None None NaN NaN\n", "aant1238 Aantantara dialect nort2920 None None NaN NaN\n", "aari1238 Aari-Gayil family ahkk1235 aiz aiz NaN NaN\n", "aari1239 Aari language aari1238 aiw aiw 5.95034 36.5721" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "read_sql(sa.select(Languoid).limit(5), index_col='id')" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT languoid.id, languoid.name, languoid.level, languoid.parent_id, languoid.hid, languoid.iso639_3, languoid.latitude, languoid.longitude \n", "FROM languoid ORDER BY languoid.id\n", " LIMIT ? OFFSET ?\n", "[generated in 0.00094s] (5, 0)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namelevelparent_idhidiso639_3latitudelongitude
id
3adt12343Ad-Teklesdialectnort3292NoneNoneNaNNaN
aala1237Aalawadialectramo1244NoneNoneNaNNaN
aant1238Aantantaradialectnort2920NoneNoneNaNNaN
aari1238Aari-Gayilfamilyahkk1235aizaizNaNNaN
aari1239Aarilanguageaari1238aiwaiw5.9503436.5721
\n", "
" ], "text/plain": [ " name level parent_id hid iso639_3 latitude longitude\n", "id \n", "3adt1234 3Ad-Tekles dialect nort3292 None None NaN NaN\n", "aala1237 Aalawa dialect ramo1244 None None NaN NaN\n", "aant1238 Aantantara dialect nort2920 None None NaN NaN\n", "aari1238 Aari-Gayil family ahkk1235 aiz aiz NaN NaN\n", "aari1239 Aari language aari1238 aiw aiw 5.95034 36.5721" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "read_sql(sa.select(Languoid).order_by('id').limit(5), index_col='id')" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT languoid.id, languoid.name, languoid.level, languoid.parent_id, languoid.hid, languoid.iso639_3, languoid.latitude, languoid.longitude \n", "FROM languoid ORDER BY languoid.name\n", " LIMIT ? OFFSET ?\n", "[generated in 0.00095s] (5, 0)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namelevelparent_idhidiso639_3latitudelongitude
id
gane1238!Gã!nelanguageeast2867NOCODE_GaneNone-31.320028.7500
oung1238!O!unglanguagebook1242ounoun-15.300014.3500
kwii1241!Uifamilytuuu1241NoneNoneNaNNaN
abda1238'Abd Al-Kuridialectsoqo1240NoneNone12.195952.2282
aden1242'Adendialectjude1267NoneNoneNaNNaN
\n", "
" ], "text/plain": [ " name level parent_id hid iso639_3 latitude \\\n", "id \n", "gane1238 !Gã!ne language east2867 NOCODE_Gane None -31.3200 \n", "oung1238 !O!ung language book1242 oun oun -15.3000 \n", "kwii1241 !Ui family tuuu1241 None None NaN \n", "abda1238 'Abd Al-Kuri dialect soqo1240 None None 12.1959 \n", "aden1242 'Aden dialect jude1267 None None NaN \n", "\n", " longitude \n", "id \n", "gane1238 28.7500 \n", "oung1238 14.3500 \n", "kwii1241 NaN \n", "abda1238 52.2282 \n", "aden1242 NaN " ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "read_sql(sa.select(Languoid).order_by('name').limit(5), index_col='id')" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT child.level AS child_level, parent.level AS parent_level, count(*) AS n_languoids \n", "FROM languoid AS child LEFT OUTER JOIN languoid AS parent ON child.parent_id = parent.id GROUP BY child.level, parent.level ORDER BY child_level, parent_level\n", "[generated in 0.00098s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
n_languoidsall
parent_levelNaNdialectfamilylanguage
child_level
dialect0253401097313507
family2460452204768
language1840842008604
all4302534129421097326879
\n", "
" ], "text/plain": [ " n_languoids all\n", "parent_level NaN dialect family language \n", "child_level \n", "dialect 0 2534 0 10973 13507\n", "family 246 0 4522 0 4768\n", "language 184 0 8420 0 8604\n", "all 430 2534 12942 10973 26879" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Child, Parent = (sa.orm.aliased(Languoid, name=n) for n in ('child', 'parent'))\n", "\n", "select_parent_levels = (sa.select(Child.level.label('child_level'),\n", " Parent.level.label('parent_level'),\n", " sa.func.count().label('n_languoids'))\n", " .outerjoin_from(Child, Parent, Child.parent_id == Parent.id)\n", " .group_by(Child.level, Parent.level)\n", " .order_by('child_level', 'parent_level'))\n", "\n", "(read_sql(select_parent_levels, index_col=['child_level', 'parent_level'])\n", " .unstack(fill_value=0).assign(all=lambda x: x.sum(axis='columns'))\n", " .pipe(lambda x: pd.concat([x, x.sum().rename('all').to_frame().T.rename_axis('child_level')])))" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT languoid.level AS level, count(*) AS n_languoids, count(languoid.iso639_3) AS n_isos \n", "FROM languoid GROUP BY languoid.level ORDER BY level\n", "[generated in 0.00115s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
n_languoidsn_isosratio
level
dialect135072671.976753
family4768450.943792
language8604785591.294747
\n", "
" ], "text/plain": [ " n_languoids n_isos ratio\n", "level \n", "dialect 13507 267 1.976753\n", "family 4768 45 0.943792\n", "language 8604 7855 91.294747" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "select_lang_nisos = (sa.select(Languoid.level.label('level'),\n", " sa.func.count().label('n_languoids'),\n", " sa.func.count(Languoid.iso639_3).label('n_isos'))\n", " .group_by(Languoid.level)\n", " .order_by('level'))\n", "\n", "(read_sql(select_lang_nisos, index_col='level')\n", " .assign(ratio=lambda x: 100 * x['n_isos'] / x['n_languoids']))" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT languoid.level AS level, count(*) AS n_languoids, count(languoid.latitude) AS n_locations \n", "FROM languoid GROUP BY languoid.level ORDER BY level\n", "[generated in 0.00104s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
n_languoidsn_locationsratio
level
dialect135075604.145998
family4768360.755034
language8604828996.338912
\n", "
" ], "text/plain": [ " n_languoids n_locations ratio\n", "level \n", "dialect 13507 560 4.145998\n", "family 4768 36 0.755034\n", "language 8604 8289 96.338912" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "select_lang_nlocations = (sa.select(Languoid.level.label('level'),\n", " sa.func.count().label('n_languoids'),\n", " sa.func.count(Languoid.latitude).label('n_locations'))\n", " .group_by(Languoid.level)\n", " .order_by('level'))\n", "\n", "(read_sql(select_lang_nlocations, index_col='level')\n", " .assign(ratio=lambda x: 100 * x['n_locations'] / x['n_languoids']))" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT languoid.latitude, languoid.longitude \n", "FROM languoid \n", "WHERE languoid.level = ?\n", "[generated in 0.00108s] ('language',)\n", "ROLLBACK\n" ] }, { "data": { "image/png": "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N24cHX/88XWW8kWLFtH+++9fE+RERFOnTqX169fT0qVLrdfetGkTrV+/vm4DAAAAAAAgy0Qiyl999VUiIvr2t79Nl156Kd19991ULpfpk5/8JK1du5aIiFavXl0nyImo9vfq1aut177yyitpxIgRtW3ChAlRPAIAAAAAAACxEUiUz549m3K5nHN76aWXaPv27UREdMkll9BJJ51EBx98MN10002Uy+XojjvuaCrBc+bMof7+/tr2xhtvNHU9AAAAAAAAkibQRM8LL7yQzjrrLOcxkyZNolWrVhER0T777FP7vbOzkyZNmkSvv/46ERGNHTuWHn/88bpz16xZU9tno7Ozkzo7O4MkGwAAAAAAgFQTSJSPGjWKRo0a5XncwQcfTJ2dnbRs2TI68sgjiYhoy5YttHz5curp6SEiosmTJ9O8efPo7bffptGjRxMR0YIFC2j48OF1Yh4AAAAAAIBWJ5KQiMOHD6eZM2fS3LlzacKECdTT00NXX301ERGdfPLJRER03HHH0T777EPTp0+nq666ilavXk2XXnopnXvuubCEAwAAAACAtiKyOOVXX301DRo0iKZPn04bNmygQw89lB588EEql8tERNTR0UF33303nXPOOTR58mQaOnQonXnmmfSd73wnqiQBAAAAAACQSiKJUx4niFMOAAAAAADiIHNxygEAAAAAAAD+gSgHAAAAAAAgYSDKAQAAAAAASBiIcgAAAAAAABIGohwAAAAAAICEgSgHAAAAAAAgYSDKAQAAAAAASBiIcgAAAAAAABIGohwAAAAAAICEgSgHAAAAAAAgYSDKAQAAAAAASBiIcgAAAAAAABIGohwAAAAAAICEgSgHAAAAAAAgYSDKAQAAAAAASBiIcgAAAAAAABIGohwAAAAAAICEgSgHAAAAAAAgYSDKAQAAAAAASBiIcgAAAAAAABIGohwAAAAAAICEgSgHAAAAAAAgYSDKAQAAAAAASBiIcgAAAAAAABIGohwAAAAAAICEgSgHAAAAAAAgYSDKAQAAAAAASBiIcgAAAAAAABIGohwAAAAAAICEgSgHAAAAAAAgYSDKAQAAAAAASBiIcgAAAAAAABIGohwAAAAAAICEgSgHAAAAAAAgYSDKAQAAAAAASBiIcgAAAAAAABIGohwAAAAAAICEgSgHAAAAAAAgYSDKAQAAAAAASBiIcgAAAAAAABIGohwAAAAAAICEgSgHAAAAAAAgYSDKAQAAAAAASBiIcgAAAAAAABIGohwAAAAAAICEiUyUP/3003TsscfSyJEjaeedd6YZM2bQ+++/X3fM66+/TtOmTaNSqUSjR4+miy66iLZu3RpVkgAAAAAAAEglkYjyt956i6ZMmUJ77LEHLV68mO6//35aunQpnXXWWbVjtm3bRtOmTaPNmzfTo48+SrfccgvdfPPNdPnll0eRJAAAAAAAAFJLTimlwr7ojTfeSJdddhmtWrWK8vkduv/Pf/4zfexjH6NXXnmF9thjD7rvvvvo05/+NL311ls0ZswYIiKaP38+zZo1i/76179SsVg0XnvTpk20adOm2t/9/f3U3d1Nb7zxBg0fPjzsRwEAAAAAAICIiNavX08TJkygdevW0YgRI0K99qBQr/Z/bNq0iYrFYk2QExENGTKEiIgefvhh2mOPPWjRokW0//771wQ5EdHUqVPpnHPOoaVLl9KBBx5ovPaVV15JV1xxxYDfJ0yYEPJTAAAAAAAAMJB33nknG6L86KOPpgsuuICuvvpq+sY3vkEffPABzZ49m4iIVq1aRUREq1evrhPkRFT7e/Xq1dZrz5kzhy644ILa3+vWraOenh56/fXXQ385IHq4x4mRjuyBb5dt8P2yC75dtsH3yzbsodHV1RX6tQOJ8tmzZ9P3v/995zEvvvgi7bvvvnTLLbfQBRdcQHPmzKGOjg76+te/TmPGjKmznjdCZ2cndXZ2Dvh9xIgRyNwZZvjw4fh+GQXfLtvg+2UXfLtsg++XbZrVsyYCifILL7ywbrKmiUmTJhER0amnnkqnnnoqrVmzhoYOHUq5XI6uueaa2v6xY8fS448/XnfumjVravsAAAAAAABoFwKJ8lGjRtGoUaMC3YBdUn72s5/R4MGD6dhjjyUiosmTJ9O8efPo7bffptGjRxMR0YIFC2j48OG0zz77BLoHAAAAAAAAWSYSn3Iiouuuu44OP/xw2mmnnWjBggV00UUXUV9fH40cOZKIiI477jjaZ599aPr06XTVVVfR6tWr6dJLL6Vzzz3X6J5io7Ozk+bOnRvoHJAe8P2yC75dtsH3yy74dtkG3y/bRPn9IgmJSER0xhln0D333EPvv/8+7bXXXvTNb36Tpk+fXnfMihUr6JxzzqE//OEPNHToUDrzzDOpr6+PBg2KrK8AAAAAAABA6ohMlAMAAAAAAAD8EcmKngAAAAAAAAD/QJQDAAAAAACQMBDlAAAAAAAAJAxEOQAAAAAAAAmTGVE+b948Ovzww6lUKtXCKuo88cQTdMwxx9DIkSOpXC7T1KlT6bnnnqs75vnnn6f/9//+Hw0ePJgmTJhAV111VQypB17f77nnnqPe3l6aMGECDRkyhPbee2/6j//4jwHH/eEPf6CDDjqIOjs7aY899qCbb745+sQDI/fccw8deuihNGTIECqXy/TZz362bv/rr79O06ZNo1KpRKNHj6aLLrqItm7dmkxiQR3XX389TZw4kQYPHkyHHnrogIXcQHpYuXIlnX766bTzzjvTkCFDaP/996cnn3yytl8pRZdffjmNGzeOhgwZQlOmTKFXXnklwRS3J3/605/oM5/5DI0fP55yuRz99re/re3bsmULzZo1i/bff38aOnQojR8/ns444wx666236q6xdu1aOu2002j48OE0cuRIOvvss+n999+P+UnaE9f3IyJ6//336bzzzqPddtuNhgwZQvvssw/Nnz+/7piNGzfSueeeSzvvvDPttNNOdNJJJ9UWxfRLZkT55s2b6eSTT6ZzzjnHuP/999+nT33qU9Td3U2LFy+mhx9+mIYNG0ZTp06lLVu2EBHR+vXr6bjjjqOenh566qmn6Oqrr6Zvf/vbdOONN8b5KG2J1/d76qmnaPTo0XTrrbfS0qVL6ZJLLqE5c+bQddddVzvmtddeo2nTptFRRx1Fzz77LJ1//vn0la98hR544IG4HgP8H7/+9a9p+vTp9KUvfYmee+45euSRR+jUU0+t7d+2bRtNmzaNNm/eTI8++ijdcsstdPPNN9Pll1+eYKoBEdGvfvUruuCCC2ju3Ln09NNP08c//nGaOnUqvf3220knDWi8++67dMQRR1ChUKD77ruPXnjhBfrhD39I5XK5dsxVV11FP/rRj2j+/Pm0ePFiGjp0KE2dOpU2btyYYMrbjw8++IA+/vGP0/XXXz9g39///nd6+umn6bLLLqOnn36a/vu//5uWLVtGJ5xwQt1xp512Gi1dupQWLFhAd999N/3pT3+iGTNmxPUIbY3r+xERXXDBBXT//ffTrbfeSi+++CKdf/75dN5559Fdd91VO+bf/u3f6He/+x3dcccd9Mc//pHeeust+vznPx8sISpj3HTTTWrEiBEDfn/iiScUEanXX3+99tvzzz+viEi98sorSimlbrjhBlUul9WmTZtqx8yaNUvtueeekacb7MD2/Ux87WtfU0cddVTt74svvljtu+++dcd84QtfUFOnTg0zicCDLVu2qF133VX95Cc/sR5z7733qnw+r1avXl37rVqtquHDh9eVPxA/hxxyiDr33HNrf2/btk2NHz9eXXnllQmmCpiYNWuWOvLII637t2/frsaOHauuvvrq2m/r1q1TnZ2d6rbbbosjicAAEanf/OY3zmMef/xxRURqxYoVSimlXnjhBUVE6oknnqgdc99996lcLqdWrlwZZXKBhun77bvvvuo73/lO3W8HHXSQuuSSS5RSO8pdoVBQd9xxR23/iy++qIhILVq0yPe9M2Mp92LPPfeknXfemX7605/S5s2bacOGDfTTn/6U9t57b5o4cSIRES1atIg+8YlPULFYrJ03depUWrZsGb377rsJpRzY6O/vp66urtrfixYtoilTptQdM3XqVFq0aFHcSWtrnn76aVq5ciXl83k68MADady4cXT88cfTkiVLascsWrSI9t9/fxozZkztt6lTp9L69etp6dKlSSQb0I4Rq6eeeqquHOXzeZoyZQrKUQq56667qFKp0Mknn0yjR4+mAw88kP7zP/+ztv+1116j1atX133PESNG0KGHHorvmXL6+/spl8vV3DkXLVpEI0eOpEqlUjtmypQplM/nafHixQmlEjCHH3443XXXXbRy5UpSStFDDz1EL7/8Mh133HFEtGO0f8uWLXVlca+99qLu7u5AZbFlRPmwYcPoD3/4A9166600ZMgQ2mmnnej++++n++67r7ZC6OrVq+tEAhHV/l69enXsaQZ2Hn30UfrVr35VN3Rn+37r16+nDRs2xJ3EtuXVV18lIqJvf/vbdOmll9Ldd99N5XKZPvnJT9LatWuJCGUtrfztb3+jbdu2Gb8Nvkv6ePXVV6lardJHP/pReuCBB+icc86hr3/963TLLbcQ0YdlCd8zW2zcuJFmzZpFvb29NHz4cCLa8S1Hjx5dd9ygQYOoq6sL3zIFXHvttbTPPvvQbrvtRsVikT71qU/R9ddfT5/4xCeIaMf3KxaLA+bMBS2LiYry2bNnUy6Xc24vvfSSr2tt2LCBzj77bDriiCPoscceo0ceeYT2228/mjZtGgRbRIT5/SRLliyhE088kebOnVvrhYLo8fs9t2/fTkREl1xyCZ100kl08MEH00033US5XI7uuOOOhJ8CgNZh+/btdNBBB9H3vvc9OvDAA2nGjBn01a9+dcAEM5AdtmzZQqeccgoppaharSadHOCTa6+9lh577DG666676KmnnqIf/vCHdO6559L//M//hHqfQaFeLSAXXnghnXXWWc5jJk2a5Otav/zlL2n58uW0aNEiyufztd/K5TLdeeed9MUvfpHGjh07YCYs/z127NjgD9DmhPn9mBdeeIGOOeYYmjFjBl166aV1+2zfb/jw4TRkyJBA9wED8fs9V61aRURE++yzT+33zs5OmjRpEr3++utEtONb6RE9UNaSZ5dddqGOjg5jOcJ3SR/jxo2rK2dERHvvvTf9+te/JqIPy9KaNWto3LhxtWPWrFlDBxxwQGzpBP5gQb5ixQp68MEHa1Zyoh3fUp9svXXrVlq7di3KZsJs2LCBvvWtb9FvfvMbmjZtGhERfexjH6Nnn32WfvCDH9CUKVNo7NixtHnzZlq3bl2dtTxo3ZqoKB81ahSNGjUqlGv9/e9/p3w+T7lcrvYb/82WvcmTJ9Mll1xCW7ZsoUKhQERECxYsoD333LNuNjvwR5jfj4ho6dKldPTRR9OZZ55J8+bNG7B/8uTJdO+999b9tmDBApo8eXJoaWhn/H7Pgw8+mDo7O2nZsmV05JFHEtGOxmb58uXU09NDRDu+1bx58+jtt9+uDckuWLCAhg8fPkBkgPgoFot08MEH08KFC2shLLdv304LFy6k8847L9nEgQEcccQRtGzZsrrfXn755Vo523333Wns2LG0cOHCmghfv349LV682BrpCiQDC/JXXnmFHnroIdp5553r9k+ePJnWrVtHTz31FB188MFERPTggw/S9u3b6dBDD00iyeD/2LJlC23ZsqVm8GU6Ojpq+vLggw+mQqFACxcupJNOOomIiJYtW0avv/56MI3S6OzUuFmxYoV65pln1BVXXKF22mkn9cwzz6hnnnlGvffee0qpHbNcOzs71TnnnKNeeOEFtWTJEnX66aerESNGqLfeeksptWN27JgxY9T06dPVkiVL1O23365KpZL68Y9/nOSjtQVe3+/Pf/6zGjVqlDr99NPVqlWratvbb79du8arr76qSqWSuuiii9SLL76orr/+etXR0aHuv//+pB6rbfnGN76hdt11V/XAAw+ol156SZ199tlq9OjRau3atUoppbZu3ar2228/ddxxx6lnn31W3X///WrUqFFqzpw5Cacc3H777aqzs1PdfPPN6oUXXlAzZsxQI0eOrIuUA9LB448/rgYNGqTmzZunXnnlFfWLX/xClUoldeutt9aO6evrUyNHjlR33nmnev7559WJJ56odt99d7Vhw4YEU95+vPfee7V2jYjUNddco5555hm1YsUKtXnzZnXCCSeo3XbbTT377LN1bZyMRvWpT31KHXjggWrx4sXq4YcfVh/96EdVb29vgk/VPri+n1JK/dM//ZPad9991UMPPaReffVVddNNN6nBgwerG264oXaNmTNnqu7ubvXggw+qJ598Uk2ePFlNnjw5UDoyI8rPPPNMRUQDtoceeqh2zO9//3t1xBFHqBEjRqhyuayOPvroAaFonnvuOXXkkUeqzs5Oteuuu6q+vr6Yn6Q98fp+c+fONe7v6empu85DDz2kDjjgAFUsFtWkSZPUTTfdFPuzAKU2b96sLrzwQjV69Gg1bNgwNWXKFLVkyZK6Y5YvX66OP/54NWTIELXLLruoCy+8UG3ZsiWhFAPJtddeq7q7u1WxWFSHHHKIeuyxx5JOErDwu9/9Tu23336qs7NT7bXXXurGG2+s2799+3Z12WWXqTFjxqjOzk51zDHHqGXLliWU2vbloYceMrZhZ555pnrttdeM+3QN884776je3l610047qeHDh6svfelLNcMViBbX91NKqVWrVqmzzjpLjR8/Xg0ePFjtueee6oc//KHavn177RobNmxQX/va11S5XFalUkl97nOfU6tWrQqUjpxSSvm3qwMAAAAAAADCpmVCIgIAAAAAAJBVIMoBAAAAAABIGIhyAAAAAAAAEgaiHAAAAAAAgISBKAcAAAAAACBhIMoBAAAAAABIGIhyAAAAAAAAEgaiHAAAAAAAgISBKAcAAAAAACBhIMoBAAAAAABIGIhyAAAAAAAAEub/AxrCDW+27PIIAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "select_latlon = (sa.select(Languoid.latitude, Languoid.longitude)\n", " .select_from(Languoid)\n", " .filter_by(level=LANGUAGE))\n", "\n", "latitudes, longitudes = zip(*treedb.iterrows(select_latlon))\n", " \n", "plt.figure(figsize=(12 * 72 / 100, 6 * 72 / 100))\n", "plt.axis([-180, 180, -90, 90])\n", "plt.xticks(range(-180, 181, 60))\n", "plt.yticks(range(-90, 91, 30))\n", "plt.scatter(longitudes, latitudes, 1, 'black');" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "WITH RECURSIVE tree(parent_id, child_id) AS \n", "(SELECT root.id AS parent_id, child.id AS child_id \n", "FROM languoid AS root LEFT OUTER JOIN languoid AS child ON root.id = child.parent_id \n", "WHERE root.parent_id IS NULL AND root.level = ? UNION ALL SELECT tree.parent_id AS parent_id, child.id AS child_id \n", "FROM tree JOIN languoid AS child ON tree.child_id = child.parent_id)\n", " SELECT root.id AS family_id, count(child.id) AS n_languages \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id LEFT OUTER JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? GROUP BY root.id \n", "HAVING count(child.id) >= ? ORDER BY n_languages\n", "[generated in 0.00098s] ('family', 'language', 100)\n", "ROLLBACK\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcoAAAEJCAYAAAAU4GfGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABYDUlEQVR4nO3dd1QU1/s/8PcuZelLZ8FQRRERkIggoMFCBIxo1GhEYkCNBhVRMQT5RAVUAhYULNGP2Pgm2BJLjBoNQbChKE3FgiUgRMGGLIKRen9/+GM+bigBBAHzvM6Zc9i5d+48M8A+5065l8cYYyCEEEJIg/gdHQAhhBDSmVGiJIQQQppAiZIQQghpAiVKQgghpAmUKAkhhJAmUKIkhBBCmkCJkhBCCGkCJUpCCCGkCdIdHQB5c7W1tXjw4AGUlZXB4/E6OhxCCOkSGGN4/vw59PT0wOc33m+kRPkOePDgAfT19Ts6DEII6ZIKCgrw3nvvNVpOifIdoKysDODVL1tFRaWDoyGEkK6htLQU+vr63HdoYyhRvgPqLreqqKhQoiSEkBb6p1tW9DAPIYQQ0oR/RY/Sx8cHJSUlOHToUEeH0q76hJwAX6DQ0WEQQshbkxf5Ubvv453qUebl5YHH4yErK+uN2woPD4ejoyMUFBSgqqpar/zy5cvw9PSEvr4+5OXlYW5ujpiYGIk6Pj4+4PF49RYLCwuuTk1NDRYvXgxjY2PIy8uje/fuWLZsGWj2M0II6Rz+FT3K1qisrMT48ePh4OCAbdu21StPT0+HtrY2fvjhB+jr6yMlJQUzZsyAlJQU/Pz8AAAxMTGIjIzktqmuroa1tTXGjx/PrVuxYgU2bdqEuLg4WFhYIC0tDVOmTIFQKIS/v3/7HyghhJAmdbke5fHjxzFw4ECoqqpCQ0MDI0eOxN27dwEAxsbGAAAbGxvweDwMHjy4xW3UCQsLw/z582FpadlgG1OnTkVMTAycnZ1hYmKCzz77DFOmTMGBAwe4OkKhECKRiFvS0tLw7NkzTJkyhauTkpKC0aNH46OPPoKRkRE++eQTDB8+HBcvXnyT00QIIaSNdLlEWV5ejoCAAKSlpSExMRF8Ph9jxoxBbW0tl1x+//13FBYWSiSt5rbxJsRiMdTV1Rst37ZtG1xcXGBoaMitc3R0RGJiIm7dugXg1SXds2fPwt3dvdF2KioqUFpaKrEQQghpH13u0uu4ceMkPm/fvh1aWlq4fv06tLS0AAAaGhoQiUStaqNPnz6tiislJQV79+7F0aNHGyx/8OABfv31V+zatUti/cKFC1FaWopevXpBSkoKNTU1CA8Ph5eXV6P7ioiIQFhYWKviJIQQ0jJdrkd5+/ZteHp6wsTEBCoqKjAyMgIA5Ofnv9U2XpednY3Ro0cjJCQEw4cPb7BOXFwcVFVV8fHHH0us37dvH+Lj47Fr1y5kZGQgLi4Oq1evRlxcXKP7Cw4Ohlgs5paCgoJWxU0IIeSfdbkepYeHBwwNDREbGws9PT3U1taiT58+qKysfKtt1Ll+/TqGDRuGGTNmYNGiRQ3WYYxh+/btmDx5MmRlZSXKAgMDsXDhQkycOBEAYGlpiXv37iEiIgLe3t4NticQCCAQCFocKyGEkJbrUony6dOnyMnJQWxsLAYNGgQAOHv2LFdel4Rqampa3UZLXLt2DUOHDoW3tzfCw8MbrXfq1CncuXMH06ZNq1f24sWLeoPxSklJvfH9UkIIIW2jSyVKNTU1aGhoYMuWLdDV1UV+fj4WLlzIlWtra0NeXh7Hjx/He++9Bzk5OQiFwha1USc/Px/FxcXIz89HTU0N926mqakplJSUkJ2djaFDh8LV1RUBAQEoKioC8CrJ1d0rrbNt2zbY29s3eP/Tw8MD4eHhMDAwgIWFBTIzM7FmzRpMnTq1xecnO8yVhrAjhJC2xrqYhIQEZm5uzgQCAbOysmLJyckMADt48CBjjLHY2Fimr6/P+Hw+c3Z2Zowx5u3tzUaPHt3sNuq2AVBvSUpKYowxFhIS0mC5oaGhRLwlJSVMXl6ebdmypcHjKS0tZXPnzmUGBgZMTk6OmZiYsG+++YZVVFQ0+5yIxWIGgInF4mZvQwgh/3bN/e7kMUZDwHR1paWlEAqFEIvF1KMkhJBmau53Z5d76pUQQgh5myhREkIIIU2gREkIIYQ0gRIlIYQQ0gRKlIQQQkgTKFESQgghTaBESQghhDShS43M0x6Sk5MxZMgQPHv2DKqqqtz606dPY9WqVUhPT0dhYSEOHjxYb0Dz0NBQ7NmzBwUFBZCVlUW/fv0QHh4Oe3t7rk5xcTHmzJmDX375BXw+H+PGjUNMTAyUlJS4NhqaCURBQQHl5eUtOpY+ISfAFyi0aBtCCHlTeZEfdXQI7Yp6lI0oLy+HtbU1Nm7c2Gidnj17YsOGDbh69SrOnj0LIyMjDB8+HI8fP+bqeHl54dq1a0hISMCRI0dw+vRpzJgxgyv/6quvUFhYKLH07t0b48ePb9fjI4QQ0jxdIlEeP34cAwcOhKqqKjQ0NDBy5EjcvXsXwKseIY/HQ0lJCVc/KysLPB4PeXl5AIB79+7Bw8MDampqUFRUhIWFBY4dO4a8vDwMGTIEwKsxYHk8Hnx8fAAA7u7uWL58OcaMGdNoXJMmTYKLiwtMTExgYWGBNWvWoLS0FFeuXAEA3LhxA8ePH8fWrVthb2+PgQMHYv369dizZw8ePHgAAFBSUoJIJOKWhw8f4vr16w0OoE4IIeTt6xKJsry8HAEBAUhLS0NiYiL4fD7GjBnT7Bk2Zs+ejYqKCpw+fRpXr17FihUroKSkBH19fezfvx8AkJOTg8LCQsTExLQqxsrKSmzZsgVCoRDW1tYAgPPnz0NVVRW2trZcPRcXF/D5fKSmpjbYztatW9GzZ09uZpOGVFRUoLS0VGIhhBDSPrrEPcpx48ZJfN6+fTu0tLRw/fr1Zm2fn5+PcePGwdLSEgBgYmLClamrqwN4NfPI6/com+vIkSOYOHEiXrx4AV1dXSQkJEBTUxMAUFRUBG1tbYn60tLSUFdX52Ybed3Lly8RHx/f4Gwmr4uIiGjwviYhhJC21yV6lLdv34anpydMTEygoqICIyMjAK8SYHP4+/tj+fLlcHJyQkhICHdptC0MGTIEWVlZSElJgZubGyZMmIBHjx61qq2DBw/i+fPnjU7YXCc4OBhisZhbCgoKWrU/Qggh/6xLJEoPDw8UFxcjNjYWqamp3GXLyspKbtLj1ydBqaqqktj+iy++wB9//IHJkyfj6tWrsLW1xfr169skNkVFRZiammLAgAHYtm0bpKWlsW3bNgCASCSqlzSrq6tRXFwMkUhUr62tW7di5MiR0NHRaXKfAoEAKioqEgshhJD20ekT5dOnT5GTk4NFixZh2LBhMDc3x7Nnz7jyukmSCwsLuXV1kyy/Tl9fH76+vjhw4AAWLFiA2NhYAICsrCwAoKampk3ira2tRUVFBQDAwcEBJSUlSE9P58pPnjyJ2tpaiVdIACA3NxdJSUn0EA8hhHQynf4epZqaGjQ0NLBlyxbo6uoiPz9f4h6eqakp9PX1ERoaivDwcNy6dQtRUVESbcybNw/u7u7o2bMnnj17hqSkJJibmwMADA0NwePxcOTIEYwYMQLy8vJQUlJCWVkZ7ty5w7WRm5uLrKwsqKurw8DAAOXl5QgPD8eoUaOgq6uLJ0+eYOPGjbh//z73aoe5uTnc3Nwwffp0bN68GVVVVfDz88PEiROhp6cnEeP27duhq6sLd3f39jqVhBBCWuNtzCL9phISEpi5uTkTCATMysqKJScnMwDs4MGDjDHGzp49yywtLZmcnBwbNGgQ+/HHHxkAlpubyxhjzM/Pj3Xv3p0JBAKmpaXFJk+ezJ48ecK1v3TpUiYSiRiPx2Pe3t6MMcaSkpIYgHpLXflff/3FxowZw/T09JisrCzT1dVlo0aNYhcvXpSI/enTp8zT05MpKSkxFRUVNmXKFPb8+XOJOjU1Ney9995j//nPf1p1fpo7SzchhJD/ae53J4+x127ukS6pubN0E0II+Z/mfnd2+nuUhBBCSEeiREkIIYQ0gRIlIYQQ0gRKlIQQQkgTKFESQgghTaBESQghhDSBEiUhhBDShE4/Ms/gwYPRt29fREdHt2r7vLw8GBsbIzMzE3379m3T2DqbPiEnwBcodHQYpJN412edJ+Rt6fQ9ygMHDmDZsmVvdZ+nT5+Gh4cH9PT0wOPxcOjQoXp1QkND0atXLygqKkJNTQ0uLi715pgMDw+Ho6MjFBQUGp3CKzExEY6OjlBWVoZIJEJQUBCqq6vb4agIIYS0RqdPlOrq6lBWVn6r+ywvL4e1tTU2btzYaJ2ePXtiw4YNuHr1Ks6ePQsjIyMMHz4cjx8/5upUVlZi/PjxmDlzZoNtXL58GSNGjICbmxsyMzOxd+9eHD58+B/noySEEPL2dPpEOXjwYMybNw8AYGRkhG+//RZTp06FsrIyDAwMsGXLFon6Fy9ehI2NDeTk5GBra4vMzMx6bZ46dQp2dnYQCATQ1dXFwoULJXpx7u7uWL58OcaMGdNoXJMmTYKLiwtMTExgYWGBNWvWoLS0VGKuy7CwMMyfP5+bMPrv9u7dCysrKyxZsgSmpqZwdnbGypUrsXHjRjx//rwlp4kQQkg76fSJ8u+ioqK4BDhr1izMnDkTOTk5AICysjKMHDkSvXv3Rnp6OkJDQ/HVV19JbH///n2MGDEC/fv3x+XLl7Fp0yZs27YNy5cvb3VMlZWV2LJlC4RCIaytrZu9XUVFBeTk5CTWycvL4+XLlxJTczW0XWlpqcRCCCGkfXS5RDlixAjMmjULpqamCAoKgqamJpKSkgAAu3btQm1tLbZt2wYLCwuMHDkSgYGBEtt/99130NfXx4YNG9CrVy98/PHHCAsLQ1RUFGpra1sUy5EjR6CkpAQ5OTmsXbsWCQkJ0NTUbPb2rq6uSElJwe7du1FTU4P79+9j6dKlACTn1/y7iIgICIVCbtHX129R3IQQQpqvyyVKKysr7mcejweRSIRHjx4BAG7cuAErKyuJXpqDg4PE9jdu3ICDgwN4PB63zsnJCWVlZfjzzz9bFMuQIUOQlZWFlJQUuLm5YcKECVwszTF8+HCsWrUKvr6+EAgE6NmzJ0aMGAEA4PMb/9UEBwdDLBZzS0FBQYviJoQQ0nxdLlHKyMhIfObxeC3uCbYVRUVFmJqaYsCAAdi2bRukpaWxbdu2FrUREBCAkpIS5Ofn48mTJxg9ejQAwMTEpNFtBAIBVFRUJBZCCCHto8slyqaYm5vjypUrePnyJbfuwoUL9eqcP38er0/Dee7cOSgrK+O99957o/3X1taioqKixdvxeDzo6elBXl4eu3fvhr6+Pt5///03ioUQQkjb6PQDDrTEpEmT8M0332D69OkIDg5GXl4eVq9eLVFn1qxZiI6Oxpw5c+Dn54ecnByEhIQgICCAu9xZVlaGO3fucNvk5uYiKysL6urqMDAwQHl5OcLDwzFq1Cjo6uriyZMn2LhxI+7fv4/x48dz2+Xn56O4uBj5+fmoqalBVlYWAMDU1BRKSkoAgFWrVsHNzQ18Ph8HDhxAZGQk9u3bBykpqRYff3aYK/UuCSGkrbFOztnZmc2dO5cxxpihoSFbu3atRLm1tTULCQnhPp8/f55ZW1szWVlZ1rdvX7Z//34GgGVmZnJ1kpOTWf/+/ZmsrCwTiUQsKCiIVVVVceVJSUkMQL3F29ubMcbYX3/9xcaMGcP09PSYrKws09XVZaNGjWIXL16UiM3b27vBdpKSkrg6Q4YMYUKhkMnJyTF7e3t27NixFp8jsVjMADCxWNzibQkh5N+qud+dPMZeuwZJuqTS0lIIhUKIxWLqURJCSDM197vznbpHSQghhLQ1SpSEEEJIEyhREkIIIU2gREkIIYQ0gRIlIYQQ0gRKlIQQQkgT3olE6ePjg48//rijwyCEEPIOeidG5omJiUFbvw5aWFiIBQsWIC0tDXfu3IG/vz+io6Ml6sTGxuL//u//kJ2dDQDo168fvv32W9jZ2TXYpq+vL/773/9i7dq13BybwKt5Nu/duydRNyIiosUTOPcJOQG+QKFF25DOKS/yo44OgRDy/70TPUqhUAhVVdU2bbOiogJaWlpYtGhRo3NMJicnw9PTE0lJSTh//jz09fUxfPhw3L9/v17dgwcP4sKFC9DT02uwraVLl6KwsJBb5syZ06bHQwghpHW6VKL86aefYGlpCXl5eWhoaMDFxQXl5eX1Lr0OHjwY/v7++Prrr6Gurg6RSITQ0FCJtvLz8zF69GgoKSlBRUUFEyZMwMOHD7lyIyMjxMTE4PPPP4dQKGwwnvj4eMyaNQt9+/ZFr169sHXrVtTW1iIxMVGi3v379zFnzhzEx8fXm/2kjrKyMkQiEbcoKiq27iQRQghpU10mURYWFsLT0xNTp07FjRs3kJycjLFjxzZ6yTUuLg6KiopITU3FypUrsXTpUiQkJAB4NcvH6NGjUVxcjFOnTiEhIQF//PEHPv300zeK8cWLF6iqqoK6ujq3rra2FpMnT0ZgYCAsLCwa3TYyMhIaGhqwsbHBqlWrUF1d3WjdiooKlJaWSiyEEELaR5e5R1lYWIjq6mqMHTsWhoaGAABLS8tG61tZWSEkJAQA0KNHD2zYsAGJiYn48MMPkZiYiKtXryI3Nxf6+voAgP/7v/+DhYUFLl26hP79+7cqxqCgIOjp6cHFxYVbt2LFCkhLS8Pf37/R7fz9/fH+++9DXV0dKSkpCA4ORmFhIdasWdNg/YiICISFhbUqRkIIIS3TZRKltbU1hg0bBktLS7i6umL48OH45JNPoKam1mB9Kysric+6urp49OgRAODGjRvQ19fnkiQA9O7dG6qqqrhx40arEmVkZCT27NmD5ORkyMnJAQDS09MRExODjIwM8Hi8RrcNCAiQiFtWVhZffvklIiIiIBAI6tUPDg6W2Ka0tFTiWAghhLSdLnPpVUpKCgkJCfj111/Ru3dvrF+/HmZmZsjNzW2w/t/vBfJ4PNTW1rZLbKtXr0ZkZCR+++03iQR95swZPHr0CAYGBpCWloa0tDTu3buHBQsWwMjIqNH27O3tUV1djby8vAbLBQIBVFRUJBZCCCHto8v0KIFXyc7JyQlOTk5YsmQJDA0NcfDgwRa3Y25ujoKCAhQUFHA9sevXr6OkpAS9e/duUVsrV65EeHg4Tpw4AVtbW4myyZMnS1yGBQBXV1dMnjwZU6ZMabTNrKws8Pl8aGtrtygWQgghba/LJMrU1FQkJiZi+PDh0NbWRmpqKh4/fgxzc3NcuXKlRW25uLjA0tISXl5eiI6ORnV1NWbNmgVnZ2eJZJeVlQUAKCsrw+PHj5GVlQVZWVkuma5YsQJLlizBrl27YGRkhKKiIgCAkpISlJSUoKGhAQ0NDYl9y8jIQCQSwczMDABw/vx5pKamYsiQIVBWVsb58+cxf/58fPbZZ41eViaEEPL2dJlEqaKigtOnTyM6OhqlpaUwNDREVFQU3N3dsXfv3ha1xePx8PPPP2POnDn44IMPwOfz4ebmhvXr10vUs7Gx4X5OT0/Hrl27YGhoyF0S3bRpEyorK/HJJ59IbBcSElLvdZTGCAQC7NmzB6GhoaioqICxsTHmz58vcQ+yubLDXOkyLCGEtDEea+shbchb19xZugkhhPxPc787u8zDPIQQQkhHoERJCCGENIESJSGEENIESpSEEEJIEyhREkIIIU2gREkIIYQ0gRIlIYQQ0oROOeDA4MGD0bdvX0RHR7fbPoyMjDBv3jzMmzev3fbxtvUJOQG+QKGjw3jn5EV+1NEhEEI6EPUoG3H69Gl4eHhAT08PPB4Phw4dkiivqqpCUFAQLC0toaioCD09PXz++ed48OBBg+1VVFSgb9++4PF43NB4AJCcnIzRo0dDV1cXioqK6Nu3L+Lj49vxyAghhLQEJcpGlJeXw9raGhs3bmyw/MWLF8jIyMDixYuRkZGBAwcOICcnB6NGjWqw/tdffw09Pb1661NSUmBlZYX9+/fjypUrmDJlCj7//HMcOXKkTY+HEEJI63TaRFldXQ0/Pz8IhUJoampi8eLFqBtt79mzZ/j888+hpqYGBQUFuLu74/bt2xLb79+/HxYWFhAIBDAyMkJUVFST+9u6dStUVVWRmJgIAHB3d8fy5csxZsyYBusLhUIkJCRgwoQJMDMzw4ABA7Bhwwakp6cjPz9fou6vv/6K3377DatXr67Xzn/+8x8sW7YMjo6O6N69O+bOnQs3NzccOHCg2eeKEEJI+2n2PcqWDNK9Zs2aVgXzuri4OEybNg0XL15EWloaZsyYAQMDA0yfPh0+Pj64ffs2Dh8+DBUVFQQFBWHEiBG4fv06ZGRkkJ6ejgkTJiA0NBSffvopUlJSMGvWLGhoaMDHx6fevlauXImVK1fit99+g52dXatjFovF4PF4UFVV5dY9fPgQ06dPx6FDh6Cg0Lz7h2KxGObm5o2WV1RUoKKigvtcWlra6pgJIYQ0rdmJMjMzU+JzRkYGqquruemibt26BSkpKfTr169NAtPX18fatWvB4/FgZmaGq1evYu3atRg8eDAOHz6Mc+fOwdHREQAQHx8PfX19HDp0COPHj8eaNWswbNgwLF68GADQs2dPXL9+HatWraqXKIOCgvD999/j1KlTsLCwaHW8L1++RFBQEDw9PbnBdRlj8PHxga+vL2xtbRudiPl1+/btw6VLl/Df//630ToREREICwtrdayEEEKar9mJMikpift5zZo1UFZWRlxcHDdn4rNnzzBlyhQMGjSoTQIbMGAAeDwe99nBwQFRUVG4fv06pKWlYW9vz5VpaGjAzMwMN27cAADcuHEDo0ePlmjPyckJ0dHRqKmpgZSUFAAgKioK5eXlSEtLg4mJSatjraqqwoQJE8AYw6ZNm7j169evx/PnzxEcHNysdpKSkjBlyhTExsY2mbSDg4MlevilpaXcBNSEEELaVqvuUUZFRSEiIkJiYmE1NTUsX778H+8FdiaDBg1CTU0N9u3b1+o26pLkvXv3kJCQIDFVy8mTJ3H+/HkIBAJIS0vD1NQUAGBrawtvb2+Jdk6dOgUPDw+sXbsWn3/+eZP7FAgEUFFRkVgIIYS0j1a9R1laWorHjx/XW//48WM8f/78jYMCgNTUVInPFy5cQI8ePdC7d29UV1cjNTWVu/T69OlT5OTkoHfv3gAAc3NznDt3TmL7c+fOoWfPnlxvEgDs7Ozg5+cHNzc3SEtL46uvvmpRjHVJ8vbt20hKSoKGhoZE+bp167B8+XLu84MHD+Dq6oq9e/dK9IiTk5MxcuRIrFixAjNmzGhRDIQQQtoZa4XJkyczIyMjtn//flZQUMAKCgrYTz/9xIyNjdnnn3/emiYlODs7MyUlJTZ//nx28+ZNtmvXLqaoqMg2b97MGGNs9OjRrHfv3uzMmTMsKyuLubm5MVNTU1ZZWckYYyw9PZ3x+Xy2dOlSlpOTw3bu3Mnk5eXZjh07uH0YGhqytWvXMsYYO3PmDFNSUuI+M8bY8+fPWWZmJsvMzGQA2Jo1a1hmZia7d+8eY4yxyspKNmrUKPbee++xrKwsVlhYyC0VFRUNHldubi4DwDIzM7l1J0+eZAoKCiw4OFiijadPnzb7fInFYgaAicXiZm9DCCH/ds397mxVoiwvL2czZ85kAoGA8fl8xufzmaysLJs5cyYrKytrVcCvc3Z2ZrNmzWK+vr5MRUWFqampsf/85z+straWMcZYcXExmzx5MhMKhUxeXp65urqyW7duSbTx008/sd69ezMZGRlmYGDAVq1aJVH+eqJkjLFTp04xRUVFtm7dOsYYY0lJSQxAvcXb25sx9r+k19CSlJTU4HE1lCi9vb0bbMPZ2bnZ54sSJSGEtFxzvzt5jP3/lxNboby8HHfv3gUAdO/eHYqKiq1tiryB0tJSCIVCiMViul9JCCHN1Nzvzjca61VRURFWVlZv0gQhhBDSqTU7UY4dOxY7d+6EiooKxo4d22RdGlWGEELIu6LZiVIoFHLvNQqFwnYLiBBCCOlM3uge5T85d+4cbG1tIRAI2msXBHSPkhBCWqO5353tOii6u7s77t+/3567IIQQQtpVuybKduysEkIIIW9Fp51mq7Vu3ryJAQMGQE5ODn379u3ocAghhHRxb/R6SGcUEhICRUVF5OTkQElJ6Y3aCg8Px9GjR5GVlQVZWVmUlJRIlF++fBmRkZE4e/Ysnjx5AiMjI/j6+mLu3LlcneTkZAwZMqRe24WFhRCJRACA0NDQerOBmJmZ4ebNmy2Kt0/ICfAFzZvKizRPXuRHHR0CIaSDvXOJ8u7du/joo49gaGjYaJ2qqirIyMj8Y1uVlZUYP348HBwcsG3btnrl6enp0NbWxg8//AB9fX2kpKRgxowZkJKSgp+fn0TdnJwciZvF2traEuUWFhb4/fffuc/S0u/cr4YQQrqkdr30+vo0WW3l+PHjGDhwIFRVVaGhoYGRI0dyowPxeDykp6dj6dKl4PF4CA0NRV5eHng8Hvbu3QtnZ2fIyckhPj4etbW1WLp0Kd577z0IBAL07dsXx48fl9hXWFgY5s+fD0tLywZjmTp1KmJiYuDs7AwTExN89tlnmDJlSoPvkWpra0MkEnELny956qWlpSXKNTU12+iMEUIIeRNd7mGe8vJyBAQEIC0tDYmJieDz+RgzZgxqa2tRWFgICwsLLFiwAIWFhRKzgSxcuBBz587FjRs34OrqipiYGERFRWH16tW4cuUKXF1dMWrUKNy+ffuN4hOLxVBXV6+3vm/fvtDV1cWHH35Yb2YTALh9+zb09PRgYmICLy8v5OfnN7qPiooKlJaWSiyEEELaR6uu74WEhGDq1KlNXt4E0GZTbr1u3LhxEp+3b98OLS0tXL9+HX369IG0tDSUlJS4+39PnjwBAMybN09iRKHVq1cjKCgIEydOBACsWLECSUlJiI6OxsaNG1sVW0pKCvbu3YujR49y63R1dbF582bY2tqioqICW7duxeDBg5Gamor3338fAGBvb4+dO3fCzMwMhYWFCAsLw6BBg5CdnQ1lZeV6+4mIiKh3T5MQQkj7aFWP8ueff0b37t0xbNgw7Nq1CxUVFW0dV6Nu374NT09PmJiYQEVFBUZGRgDQZA8MeDVZcp3S0lI8ePAATk5OEnWcnJxw48aNVsWVnZ2N0aNHIyQkBMOHD+fWm5mZ4csvv0S/fv3g6OiI7du3w9HREWvXruXquLu7Y/z48bCysoKrqyuOHTuGkpKSRieUDg4Ohlgs5paCgoJWxUwIIeSftSpRZmVl4dKlS7CwsMDcuXMhEokwc+ZMXLp0qa3jq8fDwwPFxcWIjY1FamoqN8FzZWVlk9u158wm169fx7BhwzBjxgwsWrToH+vb2dnhzp07jZarqqqiZ8+ejdYRCARQUVGRWAghhLSPVt+jtLGxwbp16/DgwQNs27YNf/75J5ycnGBlZYWYmBiIxeK2jBMA8PTpU+Tk5GDRokUYNmwYzM3N8ezZsxa3o6KiAj09vXr3Cs+dO4fevXu3qK1r165hyJAh8Pb2Rnh4eLO2ycrKgq6ubqPlZWVluHv3bpN1CCGEvB1v/A4CYwxVVVWorKwEYwxqamrYsGEDFi9ejNjYWHz66adtEScAQE1NDRoaGtiyZQt0dXWRn5+PhQsXtqqtwMBAhISEoHv37ujbty927NiBrKwsxMfHc3Xy8/NRXFyM/Px81NTUICsrCwBgamoKJSUlZGdnY+jQoXB1dUVAQACKiooAAFJSUtDS0gIAREdHw9jYGBYWFnj58iW2bt2KkydP4rfffuP289VXX8HDwwOGhoZ48OABQkJCICUlBU9Pz1aeKUIIIW2mtTNDp6WlsdmzZzN1dXWmq6vLgoKC2O3bt7nydevWMW1t7dY236iEhARmbm7OBAIBs7KyYsnJyQwAO3jwIGOMMWtraxYSEsLVz83NZQBYZmamRDs1NTUsNDSUdevWjcnIyDBra2v266+/StTx9vZmAOotSUlJjDHGQkJCGiw3NDTk2lixYgXr3r07k5OTY+rq6mzw4MHs5MmTEvv59NNPma6uLpOVlWXdunVjn376Kbtz506zz0lzZ+kmhBDyP8397mzV7CGWlpa4efMmhg8fjunTp8PDwwNSUlISdZ48eQJtbW3U1ta+QRonzUGzhxBCSMs197uzVZdeJ0yYgKlTp6Jbt26N1tHU1KQkSQghpMtr1/koydtBPUpCCGm5Nu9RBgQENHvna9asaXZdQgghpDNrdqLMzMxsVr32GN+VEEII6SjNTpRJSUntGQchhBDSKb1zEzcTQgghbanZPcqxY8di586dUFFRkRhcvCENTTNFCCGEdEXNTpRCoZC7/ygUCtstoI7g4+ODkpISHDp0qKNDeSN9Qk6AL1Do6DA6pbzIjzo6BEJIF9XsRLljx44Gf34XnT59GqtWrUJ6ejoKCwtx8OBBfPzxxxJ1GntoaeXKlQgMDAQAFBcXY86cOfjll1/A5/Mxbtw4xMTEQElJiau/b98+fPvtt7h16xa0tLTg5+fHbU8IIaTj0T3KBpSXl8Pa2rrJeSkLCwsllu3bt4PH40nMl+nl5YVr164hISEBR44cwenTpzFjxgyu/Ndff4WXlxd8fX2RnZ2N7777DmvXrsWGDRva9fgIIYQ0X6sS5dOnTzF79mz07t0bmpqaUFdXl1ja2uDBg+Hv74+vv/4a6urqEIlECA0NBQDk5eWBx+NxA5YDQElJCXg8HpKTk7l1165dw8iRI6GiogJlZWUMGjQId+/ebXB/7u7uWL58OcaMGdNoTCKRSGL5+eefMWTIEJiYmAAAbty4gePHj2Pr1q2wt7fHwIEDsX79euzZswcPHjwAAHz//ff4+OOP4evrCxMTE3z00UcIDg7GihUrQONAEEJI59CqIewmT56MO3fuYNq0adDR0Xkr707GxcUhICAAqampOH/+PHx8fODk5IQePXr847b379/HBx98gMGDB+PkyZNQUVHBuXPnUF1d3SaxPXz4EEePHkVcXBy37vz581BVVZWYMNrFxQV8Ph+pqakYM2YMKioqoKAgeU9RXl4ef/75J+7du8dNSv13FRUVEpNll5aWtslxEEIIqa9VifLMmTM4e/YsrK2t2zqeRllZWSEkJAQA0KNHD2zYsAGJiYnNSpQbN26EUCjEnj17ICMjAwDo2bNnm8UWFxcHZWVliaeBi4qKoK2tLVFPWloa6urq3HRcrq6umD9/Pnx8fDBkyBDcuXMHUVFRAF5d2m0sUUZERCAsLKzN4ieEENK4Vl167dWrF/7666+2jqVJVlZWEp91dXXx6NGjZm2blZWFQYMGcUmyrW3fvh1eXl6Qk5Nr0XbTp0+Hn58fRo4cCVlZWQwYMAATJ04EAPD5jf9qgoODIRaLuaWgoOCN4ieEENK4ViXK7777Dt988w1OnTqFp0+forS0VGJpD39PcjweD7W1tVxCef2eXlVVlURdeXn5dokJeNW7zsnJwRdffCGxXiQS1Uvk1dXVKC4uhkgkAvDqGFasWIGysjLcu3cPRUVFsLOzAwDuXmdDBAIBVFRUJBZCCCHto1WJUlVVFaWlpRg6dCi0tbWhpqYGNTU1qKqqQk1Nra1jbJKWlhaAV5cq67z+YA/wqjd65syZegm0LWzbtg39+vWrdxnawcEBJSUlSE9P59adPHkStbW1sLe3l6grJSWFbt26QVZWFrt374aDgwN3XIQQQjpWq+5Renl5QUZGBrt27XprD/M0Rl5eHgMGDEBkZCSMjY3x6NEjLFq0SKKOn58f1q9fj4kTJyI4OBhCoRAXLlyAnZ0dzMzM6rVZVlaGO3fucJ9zc3ORlZUFdXV1GBgYcOtLS0vx448/cvcVX2dubg43NzdMnz4dmzdvRlVVFfz8/DBx4kTo6ekBeDW59U8//YTBgwfj5cuX2LFjB3788UecOnWqVeciO8yVepeEENLGWpUos7OzkZmZ2WCS6Qjbt2/HtGnT0K9fP5iZmWHlypUYPnw4V66hoYGTJ08iMDAQzs7OkJKSQt++feHk5NRge2lpaRgyZAj3uW6KMW9vb+zcuZNbv2fPHjDG4Onp2WA78fHx8PPzw7Bhw7gBB9atWydRJy4uDl999RUYY3BwcEBycjJ3+ZUQQkjHa9XEzR988AGWLFkCFxeX9oiJtBBN3EwIIS3X5hM3v27OnDmYO3cuAgMDYWlpWe9Bm78/oUoIIYR0Va3qUTb06gKPxwNjDDweDzU1NW0SHGke6lESQkjLtWuPMjc3t9WBEUIIIV1JqxKloaFhW8dBCCGEdEqtSpR1rl+/jvz8fFRWVkqsHzVq1BsFRQghhHQWrUqUf/zxB8aMGYOrV69y9yaB/83RSPcoCSGEvCtalSjnzp0LY2NjJCYmwtjYGBcvXsTTp0+xYMECrF69uq1jJM3UJ+QE+AKFf67YReVFftTRIRBC/oVaNYTd+fPnsXTpUmhqaoLP54PP52PgwIGIiIiAv79/W8fYIcLDw+Ho6AgFBQWoqqrWK798+TI8PT2hr68PeXl5mJubIyYmRqJOcnIyeDxevaVu9pA6GzduhJGREeTk5GBvb4+LFy+256ERQghpgVYlypqaGigrKwMANDU1uYmIDQ0NkZOT03bRdaDKykqMHz8eM2fObLA8PT0d2tra+OGHH3Dt2jV88803CA4OxoYNG+rVzcnJQWFhIbe8Pv3W3r17ERAQgJCQEGRkZMDa2hqurq7NnhmFEEJI+2pVouzTpw8uX74MALC3t8fKlStx7tw5LF26tMlZL/5u8ODB8PPzg5+fH4RCITQ1NbF48WLunuf3338PW1tbKCsrQyQSYdKkSRIJpK7HduLECdjY2EBeXh5Dhw7Fo0eP8Ouvv8Lc3BwqKiqYNGkSXrx4wW13/PhxDBw4EKqqqtDQ0MDIkSNx9+5didjCwsIwf/58WFpaNhj71KlTERMTA2dnZ5iYmOCzzz7DlClTcODAgXp1tbW1IRKJuOX191DXrFmD6dOnY8qUKejduzc2b94MBQUFbN++vdnnkRBCSPtpdqK8cuUKamtrAQCLFi3iktnSpUuRm5uLQYMG4dixY/XGMv0ncXFxkJaWxsWLFxETE4M1a9Zg69atAF5Nl7Vs2TJcvnwZhw4dQl5eHnx8fOq1ERoaig0bNiAlJQUFBQWYMGECoqOjsWvXLhw9ehS//fYb1q9fz9UvLy9HQEAA0tLSkJiYCD6fjzFjxnDH11pisRjq6ur11vft2xe6urr48MMPce7cOW59ZWUl0tPTJYYC5PP5cHFxwfnz5xvdT0VFxVuZ2owQQkgLHuaxsbHhLhvOnDkTly5dAgCYmpri5s2bKC4uhpqaWotnEtHX18fatWvB4/FgZmaGq1evYu3atZg+fTqmTp3K1TMxMcG6devQv39/lJWVQUlJiStbvnw5N8D5tGnTEBwcjLt373K9208++QRJSUkICgoCAIwbN04ihu3bt0NLSwvXr19Hnz59WhR/nZSUFOzduxdHjx7l1unq6mLz5s2wtbVFRUUFtm7disGDByM1NRXvv/8+njx5gpqaGujo6Ei0paOjg5s3bza6r4iICISFhbUqTkIIIS3T7B6lqqoqNyJPXl5evd6Xurp6q6bbGjBggMR2Dg4OuH37NmpqapCeng4PDw8YGBhAWVkZzs7OAID8/HyJNl4fW1ZHRwcKCgoSl4B1dHQkLtnevn0bnp6eMDExgYqKCoyMjBpst7mys7MxevRohISESMxaYmZmhi+//BL9+vWDo6Mjtm/fDkdHR6xdu7ZV+6kTHBwMsVjMLQUFBW/UHiGEkMY1u0c5btw4ODs7Q1dXFzweD7a2tpCSkmqw7h9//PHGgb18+RKurq5wdXVFfHw8tLS0kJ+fD1dX13oDHLw+KDuPx6s3SDuPx5NI7B4eHjA0NERsbCz09PRQW1uLPn361Gu3Oa5fv45hw4ZhxowZ9ebBbIidnR3Onj0L4NWDUFJSUnj48KFEnYcPH0IkEjXahkAggEAgaHGshBBCWq7ZiXLLli0YO3Ys7ty5A39/f0yfPp178vVNpKamSny+cOECevTogZs3b+Lp06eIjIyEvr4+gFfzRL6pp0+fIicnB7GxsRg0aBAAcImrpa5du4ahQ4fC29sb4eHhzdomKysLurq6AABZWVn069cPiYmJ+PjjjwEAtbW1SExMhJ+fX6tiIoQQ0rZaNOCAm5sbgFevRsydO7dNEmV+fj4CAgLw5ZdfIiMjA+vXr0dUVBQMDAwgKyuL9evXw9fXF9nZ2Vi2bNkb709NTQ0aGhrYsmULdHV1kZ+fj4ULFzYYV3FxMfLz81FTU4OsrCwAr+7JKikpITs7G0OHDoWrqysCAgK4dyOlpKSgpaUFAIiOjoaxsTEsLCzw8uVLbN26FSdPnsRvv/3G7ScgIADe3t6wtbWFnZ0doqOjUV5ejilTprzxsRJCCGkDrAM5OzuzWbNmMV9fX6aiosLU1NTYf/7zH1ZbW8sYY2zXrl3MyMiICQQC5uDgwA4fPswAsMzMTMYYY0lJSQwAe/bsGdfmjh07mFAolNhPSEgIs7a25j4nJCQwc3NzJhAImJWVFUtOTmYA2MGDB7k63t7eDEC9JSkpiWuzoXJDQ0OujRUrVrDu3bszOTk5pq6uzgYPHsxOnjxZ7zysX7+eGRgYMFlZWWZnZ8cuXLjQovMoFosZACYWi1u0HSGE/Js197uzVfNRtpXBgwejb9++iI6O7qgQ3gk0HyUhhLRcc787WzXgACGEEPJvQYmSEEIIacIbzUf5ppKTkzty94QQQsg/oh4lIYQQ0gRKlIQQQkgTKFESQgghTaBESQghhDShQx/maQs+Pj4oKSnBoUOHOjqUDtcn5AT4AoWODqNN5EV+1NEhEEIIgHegRxkTE4OdO3e2ebvh4eFwdHSEgoICVFVV65VfvnwZnp6e0NfXh7y8PMzNzRETEyNR5+zZs3BycoKGhgbk5eXRq1evejOH1NTUYPHixTA2Noa8vDy6d++OZcuWoQPHgSCEEPKaLt+jFAqF7dJuZWUlxo8fDwcHB2zbtq1eeXp6OrS1tfHDDz9AX18fKSkpmDFjBqSkpLgBzRUVFeHn5wcrKysoKiri7Nmz+PLLL6GoqIgZM2YAAFasWIFNmzYhLi4OFhYWSEtLw5QpUyAUCuHv798ux0YIIaT5OnQIu5b46aefEBYWhjt37kBBQQE2Njb4+eefMXv2bIlLr8+fP4evry8OHToEFRUVfP311/j5558lhsozMjLCjBkzcOfOHfz4449QU1PDokWLuOT1up07d2LevHkoKSn5xxhnz56NGzdu4OTJk43WGTt2LBQVFfH9998DAEaOHAkdHR2JZDxu3DjIy8vjhx9+aNa5qRuGSX/ePrr0SgghzfRODWFXWFgIT09PTJ06FTdu3EBycjLGjh3b4OXJgIAAnDt3DocPH0ZCQgLOnDmDjIyMevWioqJga2uLzMxMzJo1CzNnzkROTs4bxSkWi6Gurt5oeWZmJlJSUrgJqAHA0dERiYmJuHXrFoBXl3TPnj0Ld3f3RtupqKhAaWmpxEIIIaR9dIlLr4WFhaiursbYsWNhaGgIALC0tKxX7/nz54iLi8OuXbswbNgwAMCOHTugp6dXr+6IESMwa9YsAEBQUBDWrl2LpKQkmJmZtSrGlJQU7N27F0ePHq1X9t577+Hx48eorq5GaGgovvjiC65s4cKFKC0tRa9evSAlJYWamhqEh4fDy8ur0X1FREQgLCysVXESQghpmS7Ro7S2tsawYcNgaWmJ8ePHIzY2Fs+ePatX748//kBVVRXs7Oy4dUKhsMHkZ2Vlxf3M4/EgEonw6NGjVsWXnZ2N0aNHIyQkBMOHD69XfubMGaSlpWHz5s2Ijo7G7t27ubJ9+/YhPj4eu3btQkZGBuLi4rB69WrExcU1ur/g4GCIxWJuKSgoaFXchBBC/lmX6FFKSUkhISEBKSkp+O2337B+/Xp88803SE1NbXWbMjIyEp95PB5qa2tb3M7169cxbNgwzJgxA4sWLWqwjrGxMYBXveCHDx8iNDQUnp6eAIDAwEAsXLgQEydO5Orcu3cPERER8Pb2brA9gUAAgUDQ4lgJIYS0XJfoUQKvEpmTkxPCwsKQmZkJWVlZHDx4UKKOiYkJZGRkcOnSJW6dWCzm7v+1tWvXrmHIkCHw9vZGeHh4s7apra1FRUUF9/nFixfg8yV/DVJSUq1K2oQQQtpel+hRpqamIjExEcOHD4e2tjZSU1Px+PFjmJub48qVK1w9ZWVleHt7IzAwEOrq6tDW1kZISAj4fD54PF6L9pmfn4/i4mLk5+ejpqYGWVlZAABTU1MoKSkhOzsbQ4cOhaurKwICAlBUVATgVZLT0tICAGzcuBEGBgbo1asXAOD06dNYvXq1xGsfHh4eCA8Ph4GBASwsLJCZmYk1a9Zg6tSpLT5P2WGuNHEzIYS0sS6RKFVUVHD69GlER0ejtLQUhoaGiIqKgru7O/bu3StRd82aNfD19cXIkSO510MKCgogJyfXon0uWbJE4j6hjY0NACApKQmDBw/GTz/9hMePH+OHH36QeI3D0NAQeXl5AF71HoODg5GbmwtpaWl0794dK1aswJdffsnVX79+PRYvXoxZs2bh0aNH0NPTw5dffoklS5a09DQRQghpB13mPcrWKi8vR7du3RAVFYVp06Z1dDjtornvAhFCCPmf5n53dokeZUtkZmbi5s2bsLOzg1gsxtKlSwEAo0eP7uDICCGEdEXvXKIEgNWrVyMnJweysrLo168fzpw5A01NzY4OixBCSBf0ziVKGxsbpKend3QYhBBC3hFd5vUQQgghpCNQoiSEEEKaQImSEEIIacI7d4/y36xPyIlOPc0WTZ1FCOmKukyPMjk5GTwer1nzQraF06dPw8PDA3p6euDxeNx8l3WqqqoQFBQES0tLKCoqQk9PD59//jkePHggUS8jIwMffvghVFVVoaGhgRkzZqCsrEyiTmJiIhwdHaGsrAyRSISgoCBUV1e39yESQghphi6TKN+28vJyWFtbY+PGjQ2Wv3jxAhkZGVi8eDEyMjJw4MAB5OTkYNSoUVydBw8ewMXFBaampkhNTcXx48dx7do1+Pj4cHUuX76MESNGwM3NDZmZmdi7dy8OHz6MhQsXtvchEkIIaYZOlSgrKirg7+8PbW1tyMnJYeDAgbh06RLy8vIwZMgQAICamhp4PB6XbBrbpk5dT/TEiROwsbGBvLw8hg4dikePHuHXX3+Fubk5VFRUMGnSJLx48YLbzt3dHcuXL8eYMWMajFUoFCIhIQETJkyAmZkZBgwYgA0bNiA9PR35+fkAgCNHjkBGRgYbN26EmZkZ+vfvj82bN2P//v24c+cOAGDv3r2wsrLCkiVLYGpqCmdnZ6xcuRIbN27E8+fP2+M0E0IIaYFOlSi//vpr7N+/H3FxccjIyICpqSlcXV2hrKyM/fv3AwBycnJQWFiImJiYJrcpLi6WaDs0NBQbNmxASkoKCgoKMGHCBERHR2PXrl04evQoN33XmxCLxeDxeFBVVQXwKonLyspKzA4iLy8PADh79ixX5+/j0MrLy+Ply5eNvg9aUVGB0tJSiYUQQkj76DSJsry8HJs2bcKqVavg7u6O3r17IzY2FvLy8ti+fTvU1dUBANra2hCJRBAKhU1us23bNon2ly9fDicnJ9jY2GDatGk4deoUNm3aBBsbGwwaNAiffPIJkpKSWh3/y5cvERQUBE9PT27MwKFDh6KoqAirVq1CZWUlnj17xl1SLSwsBAC4uroiJSUFu3fvRk1NDe7fv88Nu1dX5+8iIiIgFAq5RV9fv9VxE0IIaVqnSZR3795FVVUVnJycuHUyMjKws7PDjRs33ngbKysr7mcdHR0oKCjAxMREYt2jR49aFXtVVRUmTJgAxhg2bdrErbewsEBcXByioqKgoKAAkUgEY2Nj6OjocL3M4cOHY9WqVfD19YVAIEDPnj0xYsQIAKg3T2Wd4OBgiMVibikoKGhV3IQQQv5Zp0mU7U1GRob7mcfjSXyuW9eayZLrkuS9e/eQkJBQbwT6SZMmoaioCPfv38fTp08RGhqKx48fSyTpgIAAlJSUID8/H0+ePOEGcH+9zusEAgFUVFQkFkIIIe2j0yTK7t27Q1ZWFufOnePWVVVV4dKlS+jduzdkZWUBADU1Nc3epr3VJcnbt2/j999/h4aGRqN1dXR0oKSkhL1790JOTg4ffvihRDmPx4Oenh7k5eWxe/du6Ovr4/3332/vQyCEEPIPOs2AA4qKipg5cyYCAwOhrq4OAwMDrFy5Ei9evMC0adPw4sUL8Hg8HDlyBCNGjIC8vDyUlJSa3OZNlJWVcU+mAkBubi6ysrK4/VRVVeGTTz5BRkYGjhw5gpqaGhQVFQEA1NXVucS+YcMGODo6QklJCQkJCQgMDERkZCT3wA8ArFq1Cm5ubuDz+Thw4AAiIyOxb98+SElJvdExEEIIaQOsE/nrr7/YnDlzmKamJhMIBMzJyYldvHiRK1+6dCkTiUSMx+Mxb2/vZm2TlJTEALBnz55x63bs2MGEQqHEvkNCQpi1tXW97f6+1O03Nze3wXIALCkpiWtn8uTJTF1dncnKyjIrKyv2f//3f/WOe8iQIUwoFDI5OTlmb2/Pjh071qLzJhaLGQAmFotbtB0hhPybNfe7k8cYYx2RoEnbae4s3YQQQv6nud+dneYeJSGEENIZUaIkhBBCmkCJkhBCCGkCJUpCCCGkCZQoCSGEkCZQoiSEEEKa0GkGHCCEkNaqqalBVVVVR4dBOhkZGZk2GbiFEuU7pE/ICfAFCh0dBgAgL/Kjjg6B/AswxlBUVISSkpKODoV0UqqqqhCJRODxeK1u41+fKJOTkzFkyBA8e/ZMYli506dPY9WqVUhPT0dhYSEOHjyIjz/+WGLb0NBQ7NmzBwUFBZCVlUW/fv0QHh4Oe3t7rk5xcTHmzJmDX375BXw+H+PGjUNMTAyUlJQAAHl5eTA2Nq4X1/nz5zFgwIB2OWZC3hV1SVJbWxsKCgpv9GVI3i2MMbx48YKbFUpXV7fVbf3rE2VjysvLYW1tjalTp2Ls2LEN1unZsyc2bNgAExMT/PXXX1i7di2GDx+OO3fuQEtLCwDg5eWFwsJCJCQkoKqqClOmTMGMGTOwa9cuibZ+//13WFhYcJ+bGmCdEPLqcmtdkqT/F9IQeXl5AMCjR4+gra3d6suwXeJhnuPHj2PgwIFQVVWFhoYGRo4cibt37wJ41SPk8XgSl16ysrLA4/GQl5cHALh37x48PDygpqYGRUVFWFhY4NixY8jLy8OQIUMAAGpqauDxePDx8QEAuLu7Y/ny5RgzZkyjcU2aNAkuLi4wMTGBhYUF1qxZg9LSUly5cgUAcOPGDRw/fhxbt26Fvb09Bg4ciPXr12PPnj148OCBRFsaGhoQiUTc8vdpwAghkuruSSoodI7bDaRzqvv7eJN72F0iUZaXlyMgIABpaWlITEwEn8/HmDFjmj1/5OzZs1FRUYHTp0/j6tWrWLFiBZSUlKCvr4/9+/cDAHJyclBYWIiYmJhWxVhZWYktW7ZAKBTC2toawKvLp6qqqrC1teXqubi4gM/nIzU1VWL7UaNGQVtbGwMHDsThw4eb3FdFRQVKS0slFkL+rehyK2lKW/x9dIlLr+PGjZP4vH37dmhpaeH69evN2j4/Px/jxo2DpaUlAMkJkdXV1QEA2traEvcom+vIkSOYOHEiXrx4AV1dXSQkJEBTUxPAq/sn2traEvWlpaWhrq7OTcmlpKSEqKgoODk5gc/nY//+/fj4449x6NAhjBo1qsF9RkREICwsrMWxEkIIabku0aO8ffs2PD09YWJiAhUVFRgZGQF4lQCbw9/fH8uXL4eTkxNCQkK4S6NtYciQIcjKykJKSgrc3NwwYcIE7uZxc2hqaiIgIAD29vbo378/IiMj8dlnn2HVqlWNbhMcHAyxWMwtBQUFbXEohJAugMfj4dChQx0dxr9Kl+hRenh4wNDQELGxsdDT00NtbS369OmDyspK7unR12cL+/u16C+++AKurq44evQofvvtN0RERCAqKgpz5sx549gUFRVhamoKU1NTDBgwAD169MC2bdsQHBwMkUhUL2lWV1ejuLgYIpGo0Tbt7e2RkJDQaLlAIIBAIHjj2Al5VxktPPpW90evQ73bOn2P8unTp8jJycGiRYswbNgwmJub49mzZ1x53dOlhYWF3LqsrKx67ejr68PX1xcHDhzAggULEBsbCwCQlZUF8OoJurZQW1uLiooKAICDgwNKSkqQnp7OlZ88eRK1tbUSr5D8XVZW1hs9ykwIIaTtdPoepZqaGjQ0NLBlyxbo6uoiPz8fCxcu5MpNTU2hr6+P0NBQhIeH49atW4iKipJoY968eXB3d0fPnj3x7NkzJCUlwdzcHABgaGgIHo+HI0eOYMSIEZCXl4eSkhLKyspw584dro3c3FxkZWVBXV0dBgYGKC8vR3h4OEaNGgVdXV08efIEGzduxP379zF+/HgAgLm5Odzc3DB9+nRs3rwZVVVV8PPzw8SJE6GnpwcAiIuLg6ysLGxsbAAABw4cwPbt27F169YWn6vsMFeauJmQLmDw4MGwsrKCnJwctm7dCllZWfj6+iI0NLTFbQUFBeHgwYP4888/IRKJ4OXlhSVLlnBPzoeGhuLQoUNYsGABFi9ejGfPnsHd3R2xsbFQVlYGADx//hy+vr44dOgQVFRU8PXXX+Pnn39G3759ER0dDeDVJd+/v0+uqqqK6Oho7m2Bf4oFAJYvX45169bhr7/+wqeffgpNTU0cP35cooOzdetWREVFITc3F0ZGRvD398esWbMAvHpwMiAgAPv378ezZ8+go6MDX19fBAcHt/jcNVen71Hy+Xzs2bMH6enp6NOnD+bPny9x/05GRga7d+/GzZs3YWVlhRUrVmD58uUSbdTU1GD27Nlc4urZsye+++47AEC3bt0QFhaGhQsXQkdHB35+fgCAtLQ02NjYcAksICAANjY2WLJkCQBASkoKN2/exLhx49CzZ094eHjg6dOnOHPmjMT7kPHx8ejVqxeGDRuGESNGYODAgdiyZYtEfMuWLUO/fv1gb2+Pn3/+GXv37sWUKVPa/mQSQjqNuLg4KCoqIjU1FStXrsTSpUubvOXSGGVlZezcuRPXr19HTEwMYmNjsXbtWok6d+/exaFDh3DkyBEcOXIEp06dQmRkJFceEBCAc+fO4fDhw0hISMCZM2eQkZHR5rHEx8cjPDwcK1asQHp6OgwMDLBp0yaJNuLj47FkyRKEh4fjxo0b+Pbbb7F48WLExcUBANatW4fDhw9j3759yMnJQXx8PPfcSnvhsddv7pEuqbS0FEKhEGKxmHqU5F/j5cuXyM3NhbGxMeTk5CTKOvs9ysGDB6OmpgZnzpzh1tnZ2WHo0KESCawhDfXsXrd69Wrs2bMHaWlpAF71KFetWoWioiKuB/n111/j9OnTuHDhAp4/fw4NDQ3s2rULn3zyCQBALBZDT08P06dPb1GP8p9iGTBgAGxtbbFhwwauzsCBA1FWVsb1KE1NTbFs2TJ4enpydZYvX45jx44hJSUF/v7+uHbtGn7//fdmvfrR1N9Jc787O/2lV0IIeRdZWVlJfNbV1W3RE/N19u7di3Xr1uHu3bsoKytDdXV1vS99IyMjLkn+fV9//PEHqqqqYGdnx5ULhUKYmZm1eSw5OTncJdQ6dnZ2OHnyJIBX78zfvXsX06ZNw/Tp07k61dXVEAqFAAAfHx98+OGHMDMzg5ubG0aOHInhw4e3ONaW6PSXXgkh5F3099G3eDxeswdRqXP+/Hl4eXlhxIgROHLkCDIzM/HNN9+gsrKyzffF4/Hw9wuQr79h0NxYmlJWVgYAiI2NRVZWFrdkZ2fjwoULAID3338fubm5WLZsGf766y9MmDCB6wm3F+pREkJIF5WSkgJDQ0N888033Lp79+61qA0TExPIyMjg0qVLMDAwAPDq0uutW7fwwQcfcPW0tLQk3i64ffs2Xrx40aJYzMzMcOnSJXz++efcukuXLnE/6+joQE9PD3/88Qe8vLwajVlFRQWffvopPv30U3zyySdwc3NDcXExN4BMW6NESQghXVSPHj2Qn5+PPXv2oH///jh69CgOHjzYojaUlZXh7e2NwMBAqKurQ1tbGyEhIeDz+RL3AIcOHYoNGzbAwcEBNTU1CAoKkuipNieWOXPmYPr06bC1tYWjoyP27t2LK1euSIyWFhYWBn9/fwiFQri5uaGiogJpaWl49uwZAgICsGbNGujq6sLGxgZ8Ph8//vgjRCJRq0ZWay669EoIIV3UqFGjMH/+fPj5+aFv375ISUnB4sWLW9zOmjVr4ODggJEjR8LFxQVOTk4wNzeXePglKioK+vr6GDRoECZNmoSvvvpKYkD65sTi5eWF4OBgfPXVV9wlVB8fH4n9fPHFF9i6dSt27NgBS0tLODs7Y+fOndx0hMrKyli5ciVsbW3Rv39/5OXl4dixY+Dz2y+d0VOv7wB66pX8GzX1NCN5M+Xl5ejWrRuioqIwbdq0dt3Xhx9+CJFIhO+//75d2qenXtuIj48PSkpKuvz4iX1CToAvaP8ph2i4LkLeLZmZmbh58ybs7OwgFouxdOlSAMDo0aPbdD8vXrzA5s2b4erqCikpKezevRu///57q94ffZvo0msDTp8+DQ8PD+jp6TVrAGJfX1/weDzufaM6GRkZ+PDDD7l5NGfMmME91QW8Gp7Pzc0Nenp6EAgE0NfXh5+fH02bRci/VHx8PJSUlBpcXh/IpD2sXr0a1tbWcHFxQXl5Oc6cOcPNhNRWeDwejh07hg8++AD9+vXDL7/8gv3798PFxaVN99PWqEfZgPLyclhbW2Pq1KkYO3Zsk3UPHjyICxcucEPS1Xnw4AFcXFzw6aefYsOGDSgtLcW8efPg4+ODn376CcCrUYdGjx6N5cuXQ0tLC3fu3MHs2bNRXFyMXbt2tdvxEUI6p1GjRjU6DnR7TuZuY2MjMSZ1e5GXl8fvv//e7vtpa12iR2lkZFSvt9a3b19uXEQej4etW7dizJgxUFBQQI8ePepNfnzt2jWMHDkSKioqUFZWxqBBg3D37t0G9+fu7o7ly5djzJgxTcZ1//59zJkzB/Hx8fX+iI8cOQIZGRls3LgRZmZm6N+/PzZv3oz9+/dzY8iqqalh5syZsLW1haGhIYYNG4ZZs2ZJjNZBCPn3UFZW5mYj+vtiaGjY0eH9a3WJRNkcYWFhmDBhAq5cuYIRI0bAy8sLxcXFAF4ltA8++AACgQAnT55Eeno6pk6diurq6lbvr7a2FpMnT0ZgYGCDl0QqKiogKysr8SSWvLw8AODs2bMNtvngwQMcOHAAzs7OTe67oqICpaWlEgshhJD28c4kSh8fH3h6esLU1BTffvstysrKcPHiRQDAxo0bIRQKsWfPHtja2qJnz56YMmVKq4ZoqrNixQpIS0vD39+/wfKhQ4eiqKgIq1atQmVlJZ49e8bNevL6S7sA4OnpCQUFBXTr1g0qKir/OHNIREQEhEIht+jr67f6OAjp6lo6wgz5d2mLv4935h7l6+MmKioqQkVFhRvLMCsrC4MGDWqza/zp6emIiYlBRkZGo4PyWlhYIC4uDgEBAQgODoaUlBT8/f2ho6NT732ftWvXIiQkBLdu3UJwcDACAgK42U0aUlenTmlpKSVL8q9Td8XmwYMH0NLSgqysbLMGySb/DowxVFZW4vHjx+Dz+dzcw63RJRIln89vcoxBoOmxDOsuebaVM2fO4NGjR9xwT8CrqbwWLFiA6Oho5OXlAQAmTZqESZMm4eHDh1BUVASPx8OaNWskRqEAAJFIBJFIhF69ekFdXR2DBg3C4sWLG528WSAQQCAQtOkxEdLV8Pl8GBsbo7CwEA8ePOjocEgnpaCgAAMDgzcakKBLJMq/jzFYWlqK3NzcZm9vZWWFuLg4VFVVtUmvcvLkyfUeZ3Z1dcXkyZMbnEdSR0cHALB9+3bIycnhww8/bLTtuuReUVHxxnES8q6TlZWFgYEBqqurUVNT09HhkE5GSkoK0tLSb3yloUskyqFDh2Lnzp3w8PCAqqoqlixZAikpqWZv7+fnh/Xr12PixIkIDg6GUCjEhQsXYGdn1+B9yrKyMu7JVADIzc1FVlYW1NXVYWBgAA0NDWhoaEhsIyMjA5FIJNHehg0b4OjoCCUlJSQkJCAwMBCRkZHcmITHjh3Dw4cP0b9/fygpKeHatWsIDAyEk5NTu09ESsi7gsfjQUZGpl1fnyD/bl0iUQYHByM3NxcjR46EUCjEsmXLWtSj1NDQwMmTJxEYGAhnZ2dISUmhb9++cHJyarB+WloahgwZwn2uux/o7e2NnTt3Nnu/Fy9eREhICMrKytCrVy/897//xeTJk7lyeXl5xMbGYv78+aioqIC+vj7Gjh3LPfTTUtlhrjSEHSGEtDEa6/UdQGO9EkJIyzX3u/OdeT2EEEIIaQ9d4tIraVrdRQEaeIAQQpqv7jvzny6sUqJ8Bzx9+hQA6F1KQghphefPn0MoFDZaTonyHaCurg4AyM/Pb/KX3ZnUDZJQUFDQpe6rdsW4Kea3oyvGDHTNuNsqZsYYnj9/Xm9Si7+jRPkOqHuRVigUdpk/9DoqKipdLmaga8ZNMb8dXTFmoGvG3RYxN6dzQQ/zEEIIIU2gREkIIYQ0gRLlO0AgECAkJKRLjf/aFWMGumbcFPPb0RVjBrpm3G87ZhpwgBBCCGkC9SgJIYSQJlCiJIQQQppAiZIQQghpAiVKQgghpAmUKN8BGzduhJGREeTk5GBvb4+LFy92SBwRERHo378/lJWVoa2tjY8//hg5OTkSdV6+fInZs2dDQ0MDSkpKGDduHB4+fChRJz8/Hx999BEUFBSgra2NwMBAVFdXv5VjiIyMBI/Hw7x58zp9zPfv38dnn30GDQ0NyMvLw9LSEmlpaVw5YwxLliyBrq4u5OXl4eLigtu3b0u0UVxcDC8vL6ioqEBVVRXTpk1DWVlZu8RbU1ODxYsXw9jYGPLy8ujevTuWLVsmMc5mR8d8+vRpeHh4QE9PDzweD4cOHZIob6v4rly5gkGDBkFOTg76+vpYuXJlu8VdVVWFoKAgWFpaQlFREXp6evj888/x4MGDDo37n87163x9fcHj8RAdHd0xMTPSpe3Zs4fJysqy7du3s2vXrrHp06czVVVV9vDhw7cei6urK9uxYwfLzs5mWVlZbMSIEczAwICVlZVxdXx9fZm+vj5LTExkaWlpbMCAAczR0ZErr66uZn369GEuLi4sMzOTHTt2jGlqarLg4OB2j//ixYvMyMiIWVlZsblz53bqmIuLi5mhoSHz8fFhqamp7I8//mAnTpxgd+7c4epERkYyoVDIDh06xC5fvsxGjRrFjI2N2V9//cXVcXNzY9bW1uzChQvszJkzzNTUlHl6erZLzOHh4UxDQ4MdOXKE5ebmsh9//JEpKSmxmJiYThPzsWPH2DfffMMOHDjAALCDBw9KlLdFfGKxmOno6DAvLy+WnZ3Ndu/ezeTl5dl///vfdom7pKSEubi4sL1797KbN2+y8+fPMzs7O9avXz+JNt523P90ruscOHCAWVtbMz09PbZ27doOiZkSZRdnZ2fHZs+ezX2uqalhenp6LCIiogOjeuXRo0cMADt16hRj7NU/rIyMDPvxxx+5Ojdu3GAA2Pnz5xljr/55+Hw+Kyoq4ups2rSJqaiosIqKinaL9fnz56xHjx4sISGBOTs7c4mys8YcFBTEBg4c2Gh5bW0tE4lEbNWqVdy6kpISJhAI2O7duxljjF2/fp0BYJcuXeLq/Prrr4zH47H79++3ecwfffQRmzp1qsS6sWPHMi8vr04Z89+/vNsqvu+++46pqalJ/G0EBQUxMzOzdom7IRcvXmQA2L179zpF3I3F/Oeff7Ju3bqx7OxsZmhoKJEo32bMdOm1C6usrER6ejpcXFy4dXw+Hy4uLjh//nwHRvaKWCwG8L9B29PT01FVVSURb69evWBgYMDFe/78eVhaWkJHR4er4+rqitLSUly7dq3dYp09ezY++ugjidg6c8yHDx+Gra0txo8fD21tbdjY2CA2NpYrz83NRVFRkUTcQqEQ9vb2EnGrqqrC1taWq+Pi4gI+n4/U1NQ2j9nR0RGJiYm4desWAODy5cs4e/Ys3N3dO23Mr2ur+M6fP48PPvgAsrKyXB1XV1fk5OTg2bNn7XoMdcRiMXg8HlRVVTtt3LW1tZg8eTICAwNhYWFRr/xtxkyJsgt78uQJampqJL6gAUBHRwdFRUUdFNUrtbW1mDdvHpycnNCnTx8AQFFREWRlZbl/zjqvx1tUVNTg8dSVtYc9e/YgIyMDERER9co6a8x//PEHNm3ahB49euDEiROYOXMm/P39ERcXJ7Hfpv42ioqKoK2tLVEuLS0NdXX1dol74cKFmDhxInr16gUZGRnY2Nhg3rx58PLy6rQxv66t4uuIv5fXvXz5EkFBQfD09OQGFO+Mca9YsQLS0tLw9/dvsPxtxkyzh5B2MXv2bGRnZ+Ps2bMdHUqTCgoKMHfuXCQkJEBOTq6jw2m22tpa2Nra4ttvvwUA2NjYIDs7G5s3b4a3t3cHR9ewffv2IT4+Hrt27YKFhQWysrIwb9486OnpddqY3zVVVVWYMGECGGPYtGlTR4fTqPT0dMTExCAjIwM8Hq+jw6EeZVemqakJKSmpek9gPnz4ECKRqIOiAvz8/HDkyBEkJSXhvffe49aLRCJUVlaipKREov7r8YpEogaPp66sraWnp+PRo0d4//33IS0tDWlpaZw6dQrr1q2DtLQ0dHR0Ol3MAKCrq4vevXtLrDM3N0d+fr7Efpv62xCJRHj06JFEeXV1NYqLi9sl7sDAQK5XaWlpicmTJ2P+/PlcT74zxvy6toqvI/5egP8lyXv37iEhIUFieqrOFveZM2fw6NEjGBgYcP+X9+7dw4IFC2BkZPTWY6ZE2YXJysqiX79+SExM5NbV1tYiMTERDg4Obz0exhj8/Pxw8OBBnDx5EsbGxhLl/fr1g4yMjES8OTk5yM/P5+J1cHDA1atXJf4B6v6p/54Y2sKwYcNw9epVZGVlcYutrS28vLy4nztbzADg5ORU79WbW7duwdDQEABgbGwMkUgkEXdpaSlSU1Ml4i4pKUF6ejpX5+TJk6itrYW9vX2bx/zixQtu7tQ6UlJSqK2t7bQxv66t4nNwcMDp06dRVVXF1UlISICZmRnU1NTaJfa6JHn79m38/vvv0NDQkCjvbHFPnjwZV65ckfi/1NPTQ2BgIE6cOPH2Y27Roz+k09mzZw8TCARs586d7Pr162zGjBlMVVVV4gnMt2XmzJlMKBSy5ORkVlhYyC0vXrzg6vj6+jIDAwN28uRJlpaWxhwcHJiDgwNXXveqxfDhw1lWVhY7fvw409LSeiuvh9R5/anXzhrzxYsXmbS0NAsPD2e3b99m8fHxTEFBgf3www9cncjISKaqqsp+/vlnduXKFTZ69OgGX2WwsbFhqamp7OzZs6xHjx7t9nqIt7c369atG/d6yIEDB5impib7+uuvO03Mz58/Z5mZmSwzM5MBYGvWrGGZmZnc06FtEV9JSQnT0dFhkydPZtnZ2WzPnj1MQUHhjV4PaSruyspKNmrUKPbee++xrKwsif/N158Gfdtx/9O5/ru/P/X6NmOmRPkOWL9+PTMwMGCysrLMzs6OXbhwoUPiANDgsmPHDq7OX3/9xWbNmsXU1NSYgoICGzNmDCssLJRoJy8vj7m7uzN5eXmmqanJFixYwKqqqt7acfw9UXbWmH/55RfWp08fJhAIWK9evdiWLVskymtra9nixYuZjo4OEwgEbNiwYSwnJ0eiztOnT5mnpydTUlJiKioqbMqUKez58+ftEm9paSmbO3cuMzAwYHJycszExIR98803El/WHR1zUlJSg3/D3t7ebRrf5cuX2cCBA5lAIGDdunVjkZGR7RZ3bm5uo/+bSUlJHRb3P53rv2soUb6tmGmaLUIIIaQJdI+SEEIIaQIlSkIIIaQJlCgJIYSQJlCiJIQQQppAiZIQQghpAiVKQgghpAmUKAkhhJAmUKIkhBBCmkCJkhBCCGkCJUpCCCGkCZQoCSGEkCZQoiSEEEKa8P8AWyF68sgXcikAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Family, Child, family_child = treedb.Languoid.parent_descendant(parent_root=True,\n", " parent_level=FAMILY)\n", "\n", "n_languages = sa.func.count(Child.id).label('n_languages')\n", "\n", "select_family_nlanguages = (sa.select(Family.id.label('family_id'), n_languages)\n", " .select_from(family_child)\n", " .where(Child.level == LANGUAGE)\n", " .group_by(Family.id))\n", "\n", "select_top_families = (select_family_nlanguages\n", " .having(n_languages >= 100)\n", " .order_by('n_languages'))\n", "\n", "(read_sql(select_top_families, index_col='family_id')\n", " .plot.barh(figsize=(6 * 72 / 100, 4 * 72 / 100)));" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "WITH RECURSIVE tree(parent_id, child_id) AS \n", "(SELECT root.id AS parent_id, child.id AS child_id \n", "FROM languoid AS root LEFT OUTER JOIN languoid AS child ON root.id = child.parent_id \n", "WHERE root.parent_id IS NULL AND root.level = ? UNION ALL SELECT tree.parent_id AS parent_id, child.id AS child_id \n", "FROM tree JOIN languoid AS child ON tree.child_id = child.parent_id)\n", " SELECT family_nlanguages.n_languages AS family_size, count(*) AS n_families \n", "FROM (SELECT root.id AS family_id, count(child.id) AS n_languages \n", "FROM tree JOIN languoid AS root ON tree.parent_id = root.id LEFT OUTER JOIN languoid AS child ON tree.child_id = child.id \n", "WHERE child.level = ? GROUP BY root.id) AS family_nlanguages GROUP BY family_nlanguages.n_languages ORDER BY family_size\n", "[generated in 0.00105s] ('family', 'language')\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
countminmax
family_size57.02.01410.0
\n", "
" ], "text/plain": [ " count min max\n", "family_size 57.0 2.0 1410.0" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAswAAADlCAYAAABH7aHNAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAqiUlEQVR4nO3deXgUVb7/8U8nIWHJHiAhGCTIPuyCgChuDJG5eEdFHRnHEUSYO+KCjD8d5qog44DiKIuiLFcBGRHcUGEExbAqAUM0YIAshFVIJ4GQFbJ2/f5AeowJIZ10d3WS9+t5+nlI1ak63woUfKicOsdiGIYhAAAAANXyMrsAAAAAwJMRmAEAAIAaEJgBAACAGhCYAQAAgBoQmAEAAIAaEJgBAACAGhCYAQAAgBr4mF3AL9lsNp06dUoBAQGyWCxmlwMAAIBGyjAMFRQUKDIyUl5el36O7HGB+dSpU4qKijK7DAAAADQRJ06c0BVXXHHJ/R4XmAMCAiRdKDwwMNDkagAAANBY5efnKyoqyp4/L8XjAvPFYRiBgYEEZgAAALjc5YYB89IfAAAAUAMCMwAAAFADAjMAAABQA48bw2wmwzBUVFohfz++LQAANEUVFRUqKyszuww4SbNmzeTt7V3v8zicDE+ePKmnn35aGzZs0Llz59S5c2ctW7ZMAwcOlHQhdE6fPl1Lly5Vbm6uhg0bpjfffFNdunSpd7GutPPQaU3/bL/6RgXrn3f3NbscAADgRoZhyGq1Kjc31+xS4GTBwcGKiIio1/oeDgXms2fPatiwYbrpppu0YcMGtWnTRmlpaQoJCbG3mTNnjhYsWKAVK1YoOjpazz77rGJiYnTgwAE1b968zoW6WnNfb6VlFSotq1CP3dxFHcJaml0SAABwk4thuW3btmrZsiWLpzUChmHo3LlzysrKkiS1a9euzueyGIZh1LbxX//6V33zzTfasWPHJQuLjIzUX/7yFz355JOSpLy8PIWHh2v58uW69957L9tHfn6+goKClJeX5/Zp5a57abN+PHteN3dvq7fHDXJr3wAAwBwVFRVKTU1V27ZtFRYWZnY5cLIzZ84oKytLXbt2rTI8o7a506GX/j777DMNHDhQd999t9q2bav+/ftr6dKl9v1HjhyR1WrViBEj7NuCgoI0ePBgxcXFVXvOkpIS5efnV/qY5dqrWkuStqZkqbi03LQ6AACA+1wcs9yyJT9dbowu/r7WZ2y6Q4H58OHD9vHIX3zxhf785z/rscce04oVKyRd+HGGJIWHh1c6Ljw83L7vl2bPnq2goCD7x8xlsXtGXvifhc2QXv4y1bQ6AACA+zEMo3Fyxu+rQ4HZZrNpwIABmjVrlvr3769JkyZp4sSJWrRoUZ0LmDZtmvLy8uyfEydO1Plc9eXt9Z9v6HvfHpcDo1UAAADQSDn00l+7du3Us2fPStt69Oihjz76SJIUEREhScrMzKw0sDozM1P9+vWr9px+fn7y8/NzpAy3OFdaoQ8TTujugR3MLgUAAJjgZO55nS0qdVt/Ia181T64hdv6Q+05FJiHDRumlJSUSttSU1N15ZVXSpKio6MVERGh2NhYe0DOz8/X7t279ec//9k5FbuYRdLF58rzvkojMAMA0ASdzD2vm/+5VSXlNrf16efjpc1P3ui20Gy1WnX//fdr586datasmUun1OvYsaOmTJmiKVOmSLowTGLt2rW6/fbbdfToUUVHR+v777+/5ANWszkUmJ944glde+21mjVrlu655x59++23WrJkiZYsWSLpwsVPmTJFL7zwgrp06WKfVi4yMlK33367K+p3qZO5xUo8flb9OoRcvjEAAGg0zhaVujUsS1JJuU1ni0rdFpjnzp2rjIwMJSYmKigoyKV9xcfHq1WrVtXui4qKUkZGhlq3bu3SGurDocA8aNAgrV27VtOmTdPMmTMVHR2tefPm6b777rO3eeqpp1RUVKRJkyYpNzdX1113nTZu3OjRczDX5Pn1B7T24WFmlwEAAOBU6enpuvrqq92yuFybNm0uuc/b29s+rNdTOfTSnySNHj1aP/zwg4qLi3Xw4EFNnDix0n6LxaKZM2fKarWquLhYX331lbp27eq0gt3t++O5Ol1QYnYZAAAAVdx444167LHH9NRTTyk0NFQRERGaMWPGZY/r2LGjPvroI73zzjuyWCwaN26cJOnVV19V79691apVK0VFRenhhx9WYWGh/bjly5crODhY69evV7du3dSyZUvdddddOnfunFasWKGOHTsqJCREjz32mCoqKir1N2/evGprOXr0qCwWixITE+3bkpKSNGrUKPn7+ys8PFz333+/Tp8+bd//4Ycfqnfv3mrRooXCwsI0YsQIFRUVOfS9c4TDgbkp+vu/D5hdAgAAQLVWrFihVq1aaffu3ZozZ45mzpypTZs21XhMfHy8br31Vt1zzz3KyMjQ/PnzJUleXl5asGCB9u/frxUrVmjz5s166qmnKh177tw5LViwQKtXr9bGjRu1detW3XHHHfr888/1+eefa+XKlVq8eLE+/PDDOl1Pbm6ubr75ZvXv31979uzRxo0blZmZqXvuuUeSlJGRobFjx+rBBx/UwYMHtXXrVt15550und3MoSEZTdXnP2Ton3f1UTMf78s3BgAAcKM+ffpo+vTpkqQuXbro9ddfV2xsrH79619f8pg2bdrIz89PLVq0qDQc4uJLedKFp8IvvPCC/ud//kdvvPGGfXtZWZnefPNNXXXVVZKku+66SytXrlRmZqb8/f3Vs2dP3XTTTdqyZYt+97vfOXw9r7/+uvr3769Zs2bZt7399tuKiopSamqqCgsLVV5erjvvvNM+8UTv3r0d7scRPGGuhbIKQ29uO2x2GQAAAFX06dOn0tft2rVTVlZWnc711Vdf6ZZbblH79u0VEBCg+++/X2fOnNG5c+fsbVq2bGkPy9KFBeo6duwof3//StvqWsPevXu1ZcsW+fv72z/du3eXdGHcdd++fXXLLbeod+/euvvuu7V06VKdPXu2Tn3VFoG5lt7+5ojZJQAAAFTRrFmzSl9bLBbZbI7P8HH06FGNHj1affr00UcffaSEhAQtXLhQklRa+p/5qKvrz1k1SFJhYaFuu+02JSYmVvqkpaVp+PDh8vb21qZNm7Rhwwb17NlTr732mrp166YjR1yX1QjMtZR7rkxf7K9+eW8AAICGLiEhQTabTa+88oqGDBmirl276tSpU26vY8CAAdq/f786duyozp07V/pcnJrOYrFo2LBhev755/X999/L19dXa9eudVlNBGYHzNmYbHYJAAAALtG5c2eVlZXptdde0+HDh7Vy5UotWrTI7XVMnjxZOTk5Gjt2rOLj45Wenq4vvvhC48ePV0VFhXbv3q1Zs2Zpz549On78uD7++GNlZ2erR48eLquJwOyA9OwiHcoqvHxDAADQoIW08pWfj3tjkp+Pl0Ja+bq1z5/r27evXn31Vb300kvq1auX3n33Xc2ePdvtdURGRuqbb75RRUWFRo4cqd69e2vKlCkKDg6Wl5eXAgMDtX37dv3mN79R165d9cwzz+iVV17RqFGjXFaTxXDlHBx1kJ+fr6CgIOXl5SkwMNCtfa/cdUzPfZKkmr4h13UO078eGuK2mgAAgGsVFxfryJEjio6OrrTQ2snc8zpbVFrDkc4V0srXbav8NSWX+v2Vap87mVbOQd+kn1FBcZkCmje7fGMAANBgtQ9uQYCFJIZkOMwwpBc3MJYZAAB4rnfffbfStGw///zqV78yu7wGhyfMdfDRdz/q77/tJS8vi9mlAAAAVPHf//3fGjx4cLX7fjkFHC6PwFwHxWU2rdx1VA9cG212KQAAAFUEBAQoICDA7DIaDYZk1NHCLelmlwAAAJyorgttwLM54/eVJ8x1lFVQorjDpzW0U2uzSwEAAPXg6+srLy8vnTp1Sm3atJGvr68sFoZdNnSGYai0tFTZ2dny8vKSr2/dp+wjMNfDP9Yf1PrHrje7DAAAUA9eXl6Kjo5WRkaGKSvbwbVatmypDh06yMur7gMrCMz1kHQqXxm559WOKWcAAGjQfH191aFDB5WXl6uiosLscuAk3t7e8vHxqfdPDAjM9TRj3X4tvn+g2WUAAIB6slgsatasGbNIoApe+qunrw5mqaSM/4kCAAA0VgTmeqqwGZr/VZrZZQAAAMBFCMxO8M6uYzIMw+wyAAAA4AIEZicoLCnXZ3t5qxYAAKAxIjA7yStfpppdAgAAAFyAwOwkx3POaf+pPLPLAAAAgJMRmJ3o+c/2m10CAAAAnIzA7ETxR8/qbFGJ2WUAAADAiQjMTmRI+se/k80uAwAAAE5EYHayz/aeUoWNKeYAAAAaCwKzk5VW2LR0e7rZZQAAAMBJCMwusGTHEbNLAAAAgJMQmF0gp6hUW1OyzC4DAAAATkBgdpFZnx80uwQAAAA4AYHZRVIzC3XsTJHZZQAAAKCeCMwuNJ2FTAAAABo8ArMLbU/N1vmScrPLAAAAQD0QmF3IZkhzvkwxuwwAAADUA4HZxdbEn5BhsJAJAABAQ0VgdrFzpRV6f88Js8sAAABAHRGY3WDeV2lmlwAAAIA6IjC7QUZesb47lmN2GQAAAKgDArObzFx/wOwSAAAAUAcEZjdJPJGn7IISs8sAAACAg+oVmF988UVZLBZNmTLFvq24uFiTJ09WWFiY/P39NWbMGGVmZta3zkbh+XUsZAIAANDQ1Dkwx8fHa/HixerTp0+l7U888YTWrVunDz74QNu2bdOpU6d055131rvQxmBjklWl5RVmlwEAAAAH1CkwFxYW6r777tPSpUsVEhJi356Xl6e33npLr776qm6++WZdffXVWrZsmXbu3Kldu3Y5reiGqtxm6I2t6WaXAQAAAAfUKTBPnjxZ//Vf/6URI0ZU2p6QkKCysrJK27t3764OHTooLi6u2nOVlJQoPz+/0qcxW/bNUbNLAAAAgAMcDsyrV6/Wd999p9mzZ1fZZ7Va5evrq+Dg4Erbw8PDZbVaqz3f7NmzFRQUZP9ERUU5WlKDkne+TBt+yDC7DAAAANSSQ4H5xIkTevzxx/Xuu++qefPmTilg2rRpysvLs39OnGj8q+LN+SLF7BIAAABQSw4F5oSEBGVlZWnAgAHy8fGRj4+Ptm3bpgULFsjHx0fh4eEqLS1Vbm5upeMyMzMVERFR7Tn9/PwUGBhY6dPYHTldpLTMArPLAAAAQC04FJhvueUW/fDDD0pMTLR/Bg4cqPvuu8/+62bNmik2NtZ+TEpKio4fP66hQ4c6vfiGbPpnTDEHAADQEPg40jggIEC9evWqtK1Vq1YKCwuzb58wYYKmTp2q0NBQBQYG6tFHH9XQoUM1ZMgQ51XdCMSln1FBcZkCmjczuxQAAADUwOkr/c2dO1ejR4/WmDFjNHz4cEVEROjjjz92djcNniFp9ufJZpcBAACAy7AYhmGYXcTP5efnKygoSHl5eW4fz7xy1zE990mS3PUN8fPx0sGZt8rLy+KmHgEAAHBRbXOn058wo/ZKym1aEXfU7DIAAABQAwKzyVj5DwAAwLMRmE2WXVCiuEOnzS4DAAAAl0Bg9gB///dBs0sAAADAJRCYPcCBjHydyj1vdhkAAACoBoHZQ8xgIRMAAACPRGD2ELHJWSouKze7DAAAAPwCgdlDVNgMzduUZnYZAAAA+AUCswf51+7j8rB1ZAAAAJo8ArMHKSwp1yeJJ80uAwAAAD9DYPYwr36ZanYJAAAA+BkCs4c5cfa8kk7mml0GAAAAfkJg9kAz1h0wuwQAAAD8hMDsgRKOnlVOUYnZZQAAAEAEZo9kSHphPctlAwAAeAICs4dat++UKmxMMQcAAGA2ArOHKqswtHh7utllAAAANHkEZg/2fzuOmF0CAABAk0dg9mA5RaXanJxldhkAAABNGoHZw83+nJf/AAAAzERg9nBpWYU6errI7DIAAACaLAJzAzD9sySzSwAAAGiyCMwNwI600zpXUm52GQAAAE2Sj9kF4PJshjRkdqxu7RWhm7uH67oureXvx28dAACAO5C6Goj84nK9v+dHvb/nR3l7WTSoY4hG9AjXzd3bqlMbf7PLAwAAaLQIzA1Qhc3QrsM52nU4Ry/8+6DaB7fQr3teCM/XRIeqeTNvs0sEAABoNAjMjcDJ3PNavvOolu88Kj8fLw3r3FojeoTrpu5t1C6ohdnlAQAANGgE5kampNymzclZ9gVPOrf118ifnj73iwqWjzfveQIAADiCwNzIHcoq1KGsQr2xNV3+fj66qVsb3dIjXMO7tlFoK1+zywMAAPB4BOYmpLCkXOv2ZWjdvgxZLFLv9kEa2TNcN3Vvq57tAmWxWMwuEQAAwOMQmJsow5D2/ZinfT/m6Z9fpiqsla9G9AzXrb0idGPXNoRnAACAnxCYIUk6U1SqNfEntCb+hDq1aaW/3tpdv+4ZTnAGAABNHm+AoYrD2UWatDJBI17dpi/3W2UYhtklAQAAmIbAjEtK/1lw3nQgk+AMAACaJAIzLis9u0gT39mjX8/drq8IzgAAoIkhMKPWDmUV6qF39mjk3O2KPUhwBgAATQOBGQ5LyyrUhBV7FDNvuzYnE5wBAEDjRmBGnaVmFurB5QRnAADQuBGYUW8Xg/Ot83ZoS3IWwRkAADQqBGY4TUpmgcYvj9eo+Tu0JYXgDAAAGgcCM5wu2Vqg8csuBOetBGcAANDAORSYZ8+erUGDBikgIEBt27bV7bffrpSUlEptiouLNXnyZIWFhcnf319jxoxRZmamU4tGw5BsLdC4ZfH63eJdKiopN7scAACAOnEoMG/btk2TJ0/Wrl27tGnTJpWVlWnkyJEqKiqyt3niiSe0bt06ffDBB9q2bZtOnTqlO++80+mFo+H49miOfrNgh84WlZpdCgAAgMMsRj1+Xp6dna22bdtq27ZtGj58uPLy8tSmTRutWrVKd911lyQpOTlZPXr0UFxcnIYMGXLZc+bn5ysoKEh5eXkKDAysa2l1snLXMT33SZIYQOAabQL89Nkjw9QuqIXZpQAAANQ6d9ZrDHNeXp4kKTQ0VJKUkJCgsrIyjRgxwt6me/fu6tChg+Li4qo9R0lJifLz8yt90DhlF5Ro5NztOpRVYHYpAAAAtVbnwGyz2TRlyhQNGzZMvXr1kiRZrVb5+voqODi4Utvw8HBZrdZqzzN79mwFBQXZP1FRUXUtCQ1AQXG5Ri/4WonHz5pdCgAAQK3UOTBPnjxZSUlJWr16db0KmDZtmvLy8uyfEydO1Ot88HzF5TbdtShO21OzzS4FAADgsuoUmB955BGtX79eW7Zs0RVXXGHfHhERodLSUuXm5lZqn5mZqYiIiGrP5efnp8DAwEofNH7lNkMPLPtWnyaeNLsUAACAGjkUmA3D0COPPKK1a9dq8+bNio6OrrT/6quvVrNmzRQbG2vflpKSouPHj2vo0KHOqRiNhmFIj69O1LJvjphdCgAAwCX5ONJ48uTJWrVqlT799FMFBATYxyUHBQWpRYsWCgoK0oQJEzR16lSFhoYqMDBQjz76qIYOHVqrGTLQND2/7oBOF5boyZHdZLFYzC4HAACgEocC85tvvilJuvHGGyttX7ZsmcaNGydJmjt3rry8vDRmzBiVlJQoJiZGb7zxhlOKReO1cEu6TheU6sUxvQnNAADAozgUmGszZXPz5s21cOFCLVy4sM5FoWlas+eEcopK9eYfBsjHm1XbAQCAZyCVwKNsOpipe5fuUnFZhdmlAAAASCIwwwPtOXpWv339a+UXl5ldCgAAAIEZnikls1Cj5m1XdkGJ2aUAAIAmjsAMj3Uyt1gx87brRM45s0sBAABNGIEZHi2nqFS3ztuu5Ix8s0sBAABNFIEZHq+otEJj3typ/POlZpcCAACaIAIzGoSi0gpNfCfB7DIAAEATRGBGg7H7SI7WxB83uwwAANDEEJjRoPzv2iRl5RebXQYAAGhCCMxoUMpthv749re1WnUSAADAGQjMaHCSrQV6c2u62WUAAIAmgsCMBumfX6bo2Okis8sAAABNAIEZDZLNkP7w1m7ZbAzNAAAArkVgRoN14ux5zfr8oNllAACARo7AjAbtra+PKOlkntllAACARozAjAbNkPTA29+qrMJmdikAAKCRIjCjwTtTVKqnP9xndhkAAKCRIjCjUfj4+5P65lC22WVUkZ5dqG2pnlcXAACoPQIzGo0/rfxO50srzC7D7mxRqe5ZFKcH3v5WH+w5YXY5AACgjgjMaDQKS8r18LsJZpdhN+vzgzpTVCpJmv7ZfpWWM84aAICGiMCMRmVLSrbW7ztldhmKSz+jDxJ+tH99rrRCf1+/38SKAABAXRGY0ej85f29yj1Xalr/JeUV+t+1P0iSLD/b/u7u4zpdWGJOUQAAoM4IzGh0SsptenB5vGn9v7ElXYd/Wrb75+sQ2gzp0VXfm1MUAACoMwIzGqXvjufqnbijbu/3UFah3th6SFLlp8sXxR0+o70/5rq1JgAAUD8EZjRaM9cdkDX3vNv6MwxDf1v7g8oqLjxXNi7RjqfMAAA0LARmNFrlNkP3Lt2lY2eK3NLfB3t+1LdHci7b7njOOX2Y4Jxp5k7mntff1x/QiZxzTjkfAACoisCMRu3omXO64eWt+sP/7daWlCzZbJd67ls/pwtL9I/PD0qSLNWNxfiFGZ8dUHk9l/MuKa/QxBV79NbXR0wdsw0AQGNHYEaT8PWh0xq/LF7XvrRZS7cfdvosGi+sP6C882WSJKMWmbywpFwvbkiuV5///CJFBzLyJUlpWYVKOHb5p9sAAMBxBGY0Kda8Yv3j84Ma9I+v9OQHe5V0Mq/e59yRlq1PEh2f+3nZzqPKLapbcN+Rlq2lO45U2jZz3YE6nQsAANSMwIwmqazC0IcJP2r0a19r9IId+uT7kyopd3xZ7eKyCj3zSZKk6mfFqEmFzdCUNYkO95lTVKq/vL+3Sp97f8xTZr77XnIEAKCpIDCjyUs6la8paxI16IWvNGdjshKO5dR6GesFsWk6dubCC3d1GR29NTVbBzJq/5TbMAw99eE+ZRWUVNvn8zxlBgDA6XzMLgDwFPnF5Xpja7re2JquZt4W9b0iWEM6hWlQdKgGdAhWQPNmldonW/O1ZPvhevf76KrvFfuXG2vV9t3dx/XVwcxL7v9yf6ZKyyvk6+Nd77oAAMAFBGagGmUVhvYcO6s9x85KWy7MfNEtPEBDOoXpmuhQDbwyRH/7+AeVO2HWjfTsIq3fd0qj+0TW2C4ts0Av/PvCE2SLpfqXC8tthubHpun/xXSvd10AAOACAjNQC4YhJVsLlGwt0PKdR51+/qc+3KfTBSWK6RWhdkEtquwvKa/QY6sTVVxms9dzKe/EHdOTI7vJcon57bILSjT1/URZLBYN6BCsAR1C1K9DsAJ/8QQdAABcQGAG6uFST3odda60QjPWHdCMdQfUKzJQo/tG6tZfRahj61aSpDkbU3TwpynkLqeguFyf7T2l3/ZrX2VfSXmF/rRyj747nitJ2p6afeE6JHVq00rXRIeqf4cQDegQok6tW8nLy9FXGQEAaHwIzEA9OCMs/1LSqXwlncrXixuS1bmNv4ZeFaaVu45JuhBsa9PlK1+mVAnMhmHof9cm2cNypX26MDQkPbtI7317YRVCfz8fXX1liK6+MkSDo0N1TXToJZ9aX3T0dJFaB/jJ34+/Wi7HMAylZhaqS1t//mMCAB6Of9UAD3You1CHsgsl1T4sS9LxnPPafzJPv2ofZN/21tdH9GHCj7U+V2FJubalZmvbT0+hR/WK0MLfD7hkuFv+zRHNWHdArfy8NeWWrvrjtVfKj5cPL+lfu47p2U/364aubbR8/KDL/mcEAGAeppUDGghHH2ZP/2y//dfbUrM162dLd9flwfiGJKseWrFHFdW86Lhq93HN+GlKu6KSCv3j84Ma9uJmfZp40mXLkTdkFTbDvvDMttRsPb9u/2WOAACYicAMNFIJx84qp6hE6dmFemTVd7IZPz1Zrkd+3ZySpfHLvlV5xX/mqf4o4Uf979ofJFVeSOV0YakeX52oX8/dpoVbDmlbarZy6riyoafJO1emxdvS9VpsmrJ/mhPbEdtSs3Q855z96+U7j+mT7086s0QAgBMxJANopAxJ0z5OUlpmgQqKy+3b6mt72mn98e1vteLBa7Qxyar/9+FeGbr0MI/07CK9/EWK/evwQD/1iwpWnyuC1at9kHq3D1JoK18nVOZ6OUWleuvrw1q+86iKSi6sDLlgc5rGD4vWwzdepeCWtbuOFTurjkn/y/t71T0iQN3bBbqgcgBAfVgMwxWvLdVdfn6+goKClJeXp8BA9/7DsXLXMT33SZJTQgXQ2HULD1B6dqHKbYZD46ur88sQ3aNdgJo385zxzwXF5Vqx86j+teuYzpVWv4R6cx8v/emGTvrDkI7ya3bpH96dPHteo+bvqHZfYHMfffnEDWrp5znXDgDu4uvt5fa/+2ubO10WmBcuXKiXX35ZVqtVffv21WuvvaZrrrnmsscRmAEAAJqePw69UjN/28utfdY2d7pkDPOaNWs0depUTZ8+Xd9995369u2rmJgYZWVluaI7ADVg7gUAQEOwI+202SVckksC86uvvqqJEydq/Pjx6tmzpxYtWqSWLVvq7bffdkV3AGrAT0wAAA1BVGjVlW49hdNf+istLVVCQoKmTZtm3+bl5aURI0YoLi6uSvuSkhKVlPznLfO8vDxJFx6Ru9v5ogJVlJy7fEMAAAA4VXlxkdvz38X+LjdC2emB+fTp06qoqFB4eHil7eHh4UpOTq7Sfvbs2Xr++eerbI+KinJ2aQAAAPBQ70l6b7I5fRcUFCgoKOiS+02fVm7atGmaOnWq/WubzaacnByFhYWZsvLVoEGDFB8f7/Z+a+LOmlzRlzPOWddzOHqcI+1r0zY/P19RUVE6ceKE219i9STcV553X9XneO4r83niPSU17PvKzH+r6nIs95VzGIahgoICRUZG1tjO6YG5devW8vb2VmZmZqXtmZmZioiIqNLez89Pfn5+lbYFBwc7u6xa8/b29rg/KO6syRV9OeOcdT2Ho8c50t6RtoGBgR7358qduK88776qz/HcV+bzxHtKatj3lZn/VtXlWO4r56npyfJFTn/pz9fXV1dffbViY2Pt22w2m2JjYzV06FBnd+d0kyeb9LOAGrizJlf05Yxz1vUcjh7nSHtP/LPiqTzxe9XU76v6HM99ZT5P/T415PvKzH+r6nIs95V7uWQe5jVr1uiBBx7Q4sWLdc0112jevHl6//33lZycXGVsM9CYmTmvONBYcV8Bzsd9VTOXjGH+3e9+p+zsbD333HOyWq3q16+fNm7cSFhGk+Pn56fp06dXGXYEoO64rwDn476qmcctjQ0AAAB4EpcsXAIAAAA0FgRmAAAAoAYEZgAAAKAGBGYAAACgBgRmwAm2b9+u2267TZGRkbJYLPrkk08q7TcMQ88995zatWunFi1aaMSIEUpLSzOnWMADOeMeysnJ0X333afAwEAFBwdrwoQJKiwsdONVAOZy1320b98+XX/99WrevLmioqI0Z84cV1+a6QjMgBMUFRWpb9++WrhwYbX758yZowULFmjRokXavXu3WrVqpZiYGBUXF7u5UsAzOeMeuu+++7R//35t2rRJ69ev1/bt2zVp0iR3XQJgOnfcR/n5+Ro5cqSuvPJKJSQk6OWXX9aMGTO0ZMkSl1+fqQwATiXJWLt2rf1rm81mREREGC+//LJ9W25uruHn52e89957JlQIeLa63EMHDhwwJBnx8fH2Nhs2bDAsFotx8uRJt9UOeApX3UdvvPGGERISYpSUlNjbPP3000a3bt1cfEXm4gkz4GJHjhyR1WrViBEj7NuCgoI0ePBgxcXFmVgZ0DDU5h6Ki4tTcHCwBg4caG8zYsQIeXl5affu3W6vGfA0zrqP4uLiNHz4cPn6+trbxMTEKCUlRWfPnnXT1bgfgRlwMavVKklVVroMDw+37wNwabW5h6xWq9q2bVtpv4+Pj0JDQ7nPADnvPrJardWe4+d9NEYEZgAAAKAGBGbAxSIiIiRJmZmZlbZnZmba9wG4tNrcQxEREcrKyqq0v7y8XDk5OdxngJx3H0VERFR7jp/30RgRmAEXi46OVkREhGJjY+3b8vPztXv3bg0dOtTEyoCGoTb30NChQ5Wbm6uEhAR7m82bN8tms2nw4MFurxnwNM66j4YOHart27errKzM3mbTpk3q1q2bQkJC3HQ17udjdgFAY1BYWKhDhw7Zvz5y5IgSExMVGhqqDh06aMqUKXrhhRfUpUsXRUdH69lnn1VkZKRuv/1284oGPEh976EePXro1ltv1cSJE7Vo0SKVlZXpkUce0b333qvIyEiTrgpwL3fcR7///e/1/PPPa8KECXr66aeVlJSk+fPna+7cuWZcsvuYPU0H0Bhs2bLFkFTl88ADDxiGcWE6n2effdYIDw83/Pz8jFtuucVISUkxt2jAgzjjHjpz5owxduxYw9/f3wgMDDTGjx9vFBQUmHA1gDncdR/t3bvXuO666ww/Pz+jffv2xosvvuiuSzSNxTAMw4ScDgAAADQIjGEGAAAAakBgBgAAAGpAYAYAAABqQGAGAAAAakBgBgAAAGpAYAYAAABqQGAGAAAAakBgBgAAAGpAYAaAOjAMQ5MmTVJoaKgsFosSExNd0s+4ceMqLaF+4403asqUKS7p6+dmzJihfv36ubwfAGgIWOkPAOpgw4YN+u1vf6utW7eqU6dOat26tXx8fJzeT15engzDUHBwsKQLgblfv36aN2+e0/v6ucLCQpWUlCgsLMyl/QBAQ+D8v90BoAlIT09Xu3btdO2117q0n6CgIJee/1L8/f3l7+9vSt8A4GkYkgEADho3bpweffRRHT9+XBaLRR07dtTGjRt13XXXKTg4WGFhYRo9erTS09Ptxxw9elQWi0Xvv/++rr/+erVo0UKDBg1Samqq4uPjNXDgQPn7+2vUqFHKzs6u1NfPh2T83MyZM9WrV68q2/v166dnn332stexdetWXXPNNWrVqpWCg4M1bNgwHTt2TFLVIRkWi6XKp2PHjvb9SUlJGjVqlPz9/RUeHq77779fp0+fvmwNANAQEJgBwEHz58/XzJkzdcUVVygjI0Px8fEqKirS1KlTtWfPHsXGxsrLy0t33HGHbDZbpWOnT5+uZ555Rt999518fHz0+9//Xk899ZTmz5+vHTt26NChQ3ruuedqVceDDz6ogwcPKj4+3r7t+++/1759+zR+/Pgajy0vL9ftt9+uG264Qfv27VNcXJwmTZoki8VSbfuMjAz759ChQ+rcubOGDx8uScrNzdXNN9+s/v37a8+ePdq4caMyMzN1zz331Oo6AMDTMSQDABwUFBSkgIAAeXt7KyIiQpI0ZsyYSm3efvtttWnTRgcOHKj0FPjJJ59UTEyMJOnxxx/X2LFjFRsbq2HDhkmSJkyYoOXLl9eqjiuuuEIxMTFatmyZBg0aJElatmyZbrjhBnXq1KnGY/Pz85WXl6fRo0frqquukiT16NHjku0vXqdhGBozZoyCgoK0ePFiSdLrr7+u/v37a9asWZWuPyoqSqmpqeratWutrgcAPBVPmAHACdLS0jR27Fh16tRJgYGB9uEKx48fr9SuT58+9l+Hh4dLknr37l1pW1ZWVq37nThxot577z0VFxertLRUq1at0oMPPnjZ40JDQzVu3DjFxMTotttu0/z585WRkXHZ4/72t78pLi5On376qVq0aCFJ2rt3r7Zs2WIf9+zv76/u3btLUqVhKQDQUPGEGQCc4LbbbtOVV16ppUuXKjIyUjabTb169VJpaWmlds2aNbP/+uLwh19u++Uwjsv16+fnp7Vr18rX11dlZWW66667anXssmXL9Nhjj2njxo1as2aNnnnmGW3atElDhgyptv2//vUvzZ07V1u3blX79u3t2wsLC3XbbbfppZdeqnJMu3btan0tAOCpCMwAUE9nzpxRSkqKli5dquuvv16S9PXXX7ulbx8fHz3wwANatmyZfH19de+999qf/NZG//791b9/f02bNk1Dhw7VqlWrqg3McXFxeuihh7R48eIq+wcMGKCPPvpIHTt2dMnUegBgNoZkAEA9hYSEKCwsTEuWLNGhQ4e0efNmTZ061W39P/TQQ9q8ebM2btxYq+EYknTkyBFNmzZNcXFxOnbsmL788kulpaVVO47ZarXqjjvu0L333quYmBhZrVZZrVb7bB6TJ09WTk6Oxo4dq/j4eKWnp+uLL77Q+PHjVVFR4dRrBQAzEJgBoJ68vLy0evVqJSQkqFevXnriiSf08ssvu63/Ll266Nprr1X37t01ePDgWh3TsmVLJScna8yYMeratasmTZqkyZMn609/+lOVtsnJycrMzNSKFSvUrl07++fii4aRkZH65ptvVFFRoZEjR6p3796aMmWKgoOD5eXFPzMAGj5W+gOABs4wDHXp0kUPP/ywW59sA0BTwWAzAGjAsrOztXr1almt1svOvQwAqBsCMwA0YG3btlXr1q21ZMkShYSEVNpX09LWGzZssL+gCACoGUMyAKCROnTo0CX3tW/f3qHZNACgKSMwAwAAADXg9WUAAACgBgRmAAAAoAYEZgAAAKAGBGYAAACgBgRmAAAAoAYEZgAAAKAGBGYAAACgBv8fEMGcr1HxmpkAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "family_size = (select_family_nlanguages\n", " .alias('family_nlanguages')\n", " .c.n_languages.label('family_size'))\n", "\n", "select_family_sizes = (sa.select(family_size, sa.func.count().label('n_families'))\n", " .group_by(family_size)\n", " .order_by('family_size'))\n", "\n", "_ = read_sql(select_family_sizes, index_col='family_size')\n", "\n", "(_.plot.area(figsize=(12 * 72 / 100, 3 * 72 / 100), logx=True)\n", " .xaxis.set_major_formatter(mpl.ticker.ScalarFormatter()))\n", "(_.index.to_series().describe()\n", " .to_frame().transpose()[['count', 'min', 'max']])" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "WITH levels AS \n", "(SELECT ? AS level UNION ALL SELECT ? AS level UNION ALL SELECT ? AS level)\n", " SELECT parent.id AS parent_id, parent.level AS parent_level, levels.level AS child_level, count(child.id) AS n_children \n", "FROM languoid AS parent JOIN levels ON 1 = 1 LEFT OUTER JOIN languoid AS child ON parent.id = child.parent_id AND child.level = levels.level GROUP BY parent.id, parent.level, levels.level\n", "[generated in 0.00116s] ('family', 'language', 'dialect')\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
summaxmean
child_leveldialectfamilylanguagedialectfamilylanguagedialectfamilylanguage
parent_level
dialect25340022000.1876060.0000000.00000
family0452284200463750.0000000.9484061.76594
language109730032001.2753370.0000000.00000
\n", "
" ], "text/plain": [ " sum max mean \\\n", "child_level dialect family language dialect family language dialect \n", "parent_level \n", "dialect 2534 0 0 22 0 0 0.187606 \n", "family 0 4522 8420 0 46 375 0.000000 \n", "language 10973 0 0 32 0 0 1.275337 \n", "\n", " \n", "child_level family language \n", "parent_level \n", "dialect 0.000000 0.00000 \n", "family 0.948406 1.76594 \n", "language 0.000000 0.00000 " ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "levels = (sa.union_all(*[sa.select(sa.literal(l).label('level')) for l in LEVEL])\n", " .cte(name='levels'))\n", "\n", "select_parent_nchildren = (sa.select(Parent.id.label('parent_id'),\n", " Parent.level.label('parent_level'),\n", " levels.c.level.label('child_level'),\n", " sa.func.count(Child.id).label('n_children'))\n", " .join_from(Parent, levels, sa.true())\n", " .outerjoin(Child, sa.and_(Parent.id == Child.parent_id, \n", " Child.level == levels.c.level))\n", " .group_by(Parent.id, Parent.level, levels.c.level))\n", "\n", "(read_sql(select_parent_nchildren)\n", " .pivot_table(index='parent_level', columns='child_level', values='n_children',\n", " aggfunc=['sum', 'max', 'mean'], fill_value=0))" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "WITH RECURSIVE tree(parent_id, child_id) AS \n", "(SELECT parent.id AS parent_id, child.id AS child_id \n", "FROM languoid AS parent LEFT OUTER JOIN languoid AS child ON parent.id = child.parent_id UNION ALL SELECT tree.parent_id AS parent_id, child.id AS child_id \n", "FROM tree JOIN languoid AS child ON tree.child_id = child.parent_id)\n", " SELECT parent_ndescendants.parent_level, min(parent_ndescendants.n_descendants) AS min, max(parent_ndescendants.n_descendants) AS max, CAST(sum(parent_ndescendants.n_descendants) AS FLOAT) / (count(parent_ndescendants.n_descendants) + 0.0) AS mean \n", "FROM (SELECT parent.id AS parent_id, parent.level AS parent_level, count(child.id) AS n_descendants \n", "FROM tree JOIN languoid AS parent ON tree.parent_id = parent.id LEFT OUTER JOIN languoid AS child ON tree.child_id = child.id GROUP BY parent.id, parent.level) AS parent_ndescendants GROUP BY parent_ndescendants.parent_level ORDER BY parent_ndescendants.parent_level\n", "[generated in 0.00101s] ()\n", "ROLLBACK\n", "BEGIN (implicit)\n", "WITH RECURSIVE tree(parent_id, child_id) AS \n", "(SELECT parent.id AS parent_id, child.id AS child_id \n", "FROM languoid AS parent LEFT OUTER JOIN languoid AS child ON parent.id = child.parent_id UNION ALL SELECT tree.parent_id AS parent_id, child.id AS child_id \n", "FROM tree JOIN languoid AS child ON tree.child_id = child.parent_id)\n", " SELECT ? AS parent_level, min(parent_ndescendants.n_descendants) AS min, max(parent_ndescendants.n_descendants) AS max, CAST(sum(parent_ndescendants.n_descendants) AS FLOAT) / (count(parent_ndescendants.n_descendants) + 0.0) AS mean \n", "FROM (SELECT parent.id AS parent_id, parent.level AS parent_level, count(child.id) AS n_descendants \n", "FROM tree JOIN languoid AS parent ON tree.parent_id = parent.id LEFT OUTER JOIN languoid AS child ON tree.child_id = child.id GROUP BY parent.id, parent.level) AS parent_ndescendants\n", "[generated in 0.00077s] ('total',)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
n_descendants
minmaxmean
parent_level
dialect0560.256904
family1484434.535654
language01191.569851
total048446.757803
\n", "
" ], "text/plain": [ " n_descendants \n", " min max mean\n", "parent_level \n", "dialect 0 56 0.256904\n", "family 1 4844 34.535654\n", "language 0 119 1.569851\n", "total 0 4844 6.757803" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Parent, Child, parent_child = treedb.Languoid.parent_descendant()\n", "\n", "select_parent_ndescendants = (sa.select(Parent.id.label('parent_id'),\n", " Parent.level.label('parent_level'),\n", " sa.func.count(Child.id).label('n_descendants'))\n", " .select_from(parent_child)\n", " .group_by(Parent.id, Parent.level)\n", " .alias('parent_ndescendants'))\n", "\n", "parent_level = select_parent_ndescendants.c.parent_level\n", "\n", "n_descendants = select_parent_ndescendants.c.n_descendants\n", "\n", "d_min = sa.func.min(n_descendants).label('min')\n", "d_max = sa.func.max(n_descendants).label('max')\n", "d_mean = (sa.func.sum(n_descendants).cast(sa.Float) / sa.func.count(n_descendants)).label('mean')\n", "\n", "select_level_mean_descendants = (sa.select(parent_level, d_min, d_max, d_mean)\n", " .group_by(parent_level)\n", " .order_by(parent_level))\n", "\n", "select_total_mean_descendants = sa.select(sa.literal('total').label('parent_level'),\n", " d_min, d_max, d_mean)\n", "\n", "select_mean_descendants = [select_level_mean_descendants, select_total_mean_descendants]\n", "\n", "_ = pd.concat([read_sql(q, index_col='parent_level') for q in select_mean_descendants])\n", "_.columns = pd.MultiIndex.from_product([['n_descendants'], _.columns])\n", "_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## macroarea" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 5.766s ago] ('table', 'macroarea')\n", "SELECT count(*) AS n_rows \n", "FROM macroarea\n", "[generated in 0.00042s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE macroarea (\n", "\tname VARCHAR NOT NULL CHECK (name != ''), \n", "\tconfig_section VARCHAR NOT NULL CHECK (config_section != ''), \n", "\tdescription TEXT NOT NULL CHECK (description != ''), \n", "\tPRIMARY KEY (name), \n", "\tUNIQUE (config_section)\n", ") WITHOUT ROWID\n", "6\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 5.77s ago] ('table', 'languoid_macroarea')\n", "SELECT count(*) AS n_rows \n", "FROM languoid_macroarea\n", "[generated in 0.00031s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE languoid_macroarea (\n", "\tlanguoid_id VARCHAR(8) NOT NULL, \n", "\tmacroarea_name VARCHAR NOT NULL, \n", "\tPRIMARY KEY (languoid_id, macroarea_name), \n", "\tFOREIGN KEY(languoid_id) REFERENCES languoid (id), \n", "\tFOREIGN KEY(macroarea_name) REFERENCES macroarea (name)\n", ") WITHOUT ROWID\n", "22079\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT macroarea.name, macroarea.config_section, macroarea.description \n", "FROM macroarea ORDER BY macroarea.name\n", "[generated in 0.00083s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namedescription
config_section
africaAfricaThe continent
australiaAustraliaThe continent
eurasiaEurasiaThe Eurasian landmass North of Sinai. Includes...
northamericaNorth AmericaNorth and Middle America up to Panama. Include...
pacificPapunesiaAll islands between Sumatra and the Americas, ...
southamericaSouth AmericaEverything South of Darién.
\n", "
" ], "text/plain": [ " name \\\n", "config_section \n", "africa Africa \n", "australia Australia \n", "eurasia Eurasia \n", "northamerica North America \n", "pacific Papunesia \n", "southamerica South America \n", "\n", " description \n", "config_section \n", "africa The continent \n", "australia The continent \n", "eurasia The Eurasian landmass North of Sinai. Includes... \n", "northamerica North and Middle America up to Panama. Include... \n", "pacific All islands between Sumatra and the Americas, ... \n", "southamerica Everything South of Darién. " ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from treedb.models import Macroarea, languoid_macroarea\n", "\n", "print_sql(Macroarea)\n", "print_sql(languoid_macroarea)\n", "read_sql(sa.select(Macroarea).order_by('name'), index_col='config_section')" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT macroarea.name AS macroarea, count(*) AS n_languages \n", "FROM macroarea LEFT OUTER JOIN languoid_macroarea ON macroarea.name = languoid_macroarea.macroarea_name JOIN languoid ON languoid.id = languoid_macroarea.languoid_id \n", "WHERE languoid.level = ? GROUP BY macroarea.name ORDER BY n_languages DESC\n", "[generated in 0.00084s] ('language',)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
n_languages
macroarea
Africa2374
Papunesia2215
Eurasia2023
North America793
South America718
Australia389
\n", "
" ], "text/plain": [ " n_languages\n", "macroarea \n", "Africa 2374\n", "Papunesia 2215\n", "Eurasia 2023\n", "North America 793\n", "South America 718\n", "Australia 389" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "select_macroarea_nlanguages = (sa.select(Macroarea.name.label('macroarea'),\n", " sa.func.count().label('n_languages'))\n", " .outerjoin_from(Macroarea, languoid_macroarea).join(Languoid)\n", " .filter_by(level=LANGUAGE)\n", " .group_by(Macroarea.name)\n", " .order_by(sa.desc('n_languages')))\n", "\n", "_ = read_sql(select_macroarea_nlanguages, index_col='macroarea')\n", "_.plot.pie(y='n_languages', figsize=(6 * 72 / 100, 4 * 72 / 100))\n", "_" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT languoid.id, languoid.name, group_concat(macroarea.name, ?) AS macroareas \n", "FROM languoid JOIN languoid_macroarea ON languoid.id = languoid_macroarea.languoid_id JOIN macroarea ON macroarea.name = languoid_macroarea.macroarea_name \n", "WHERE languoid.level = ? GROUP BY languoid.id \n", "HAVING count(*) > ? ORDER BY languoid.id\n", "[generated in 0.00114s] (', ', 'language', 1)\n", "ROLLBACK\n" ] } ], "source": [ "macroareas = sa.func.group_concat(Macroarea.name, ', ').label('macroareas')\n", "\n", "select_multiarea_languages = (sa.select(Languoid.id, Languoid.name, macroareas)\n", " .select_from(Languoid)\n", " .filter_by(level=LANGUAGE)\n", " .join(languoid_macroarea).join(Macroarea)\n", " .group_by(Languoid.id)\n", " .having(sa.func.count() > 1)\n", " .order_by('id'))\n", " \n", "assert read_sql(select_multiarea_languages).empty" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## country" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 5.943s ago] ('table', 'country')\n", "SELECT count(*) AS n_rows \n", "FROM country\n", "[generated in 0.00066s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE country (\n", "\tid VARCHAR(2) NOT NULL CHECK (length(id) = 2), \n", "\tname TEXT NOT NULL CHECK (name != ''), \n", "\tPRIMARY KEY (id), \n", "\tUNIQUE (name)\n", ") WITHOUT ROWID\n", "246\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 5.947s ago] ('table', 'languoid_country')\n", "SELECT count(*) AS n_rows \n", "FROM languoid_country\n", "[generated in 0.00043s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE languoid_country (\n", "\tlanguoid_id VARCHAR(8) NOT NULL, \n", "\tcountry_id VARCHAR(2) NOT NULL, \n", "\tPRIMARY KEY (languoid_id, country_id), \n", "\tFOREIGN KEY(languoid_id) REFERENCES languoid (id), \n", "\tFOREIGN KEY(country_id) REFERENCES country (id)\n", ") WITHOUT ROWID\n", "11902\n" ] } ], "source": [ "from treedb.models import Country, languoid_country\n", "\n", "print_sql(Country)\n", "print_sql(languoid_country)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT country.name AS country, count(*) AS n_languages \n", "FROM country LEFT OUTER JOIN languoid_country ON country.id = languoid_country.country_id JOIN languoid ON languoid.id = languoid_country.languoid_id \n", "WHERE languoid.level = ? GROUP BY country.id ORDER BY n_languages DESC\n", " LIMIT ? OFFSET ?\n", "[generated in 0.00077s] ('language', 10, 0)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
n_languages
country
Papua New Guinea899
Indonesia751
Nigeria590
India518
China447
Australia401
Mexico339
Brazil338
United States321
Cameroon317
\n", "
" ], "text/plain": [ " n_languages\n", "country \n", "Papua New Guinea 899\n", "Indonesia 751\n", "Nigeria 590\n", "India 518\n", "China 447\n", "Australia 401\n", "Mexico 339\n", "Brazil 338\n", "United States 321\n", "Cameroon 317" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "select_country_nlanguages = (sa.select(Country.name.label('country'),\n", " sa.func.count().label('n_languages'))\n", " .outerjoin_from(Country, languoid_country).join(Languoid)\n", " .filter_by(level=LANGUAGE)\n", " .group_by(Country.id)\n", " .order_by(sa.desc('n_languages'))\n", " .limit(10))\n", "\n", "read_sql(select_country_nlanguages, index_col='country')" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT lang_country.id, lang_country.name, count(*) AS n_countries, group_concat(lang_country.country, ?) AS countries \n", "FROM (SELECT languoid.id AS id, languoid.name AS name, country.id AS country \n", "FROM languoid JOIN languoid_country ON languoid.id = languoid_country.languoid_id JOIN country ON country.id = languoid_country.country_id \n", "WHERE languoid.level = ? ORDER BY languoid.id, country) AS lang_country GROUP BY lang_country.id, lang_country.name \n", "HAVING count(*) > ? ORDER BY n_countries DESC, lang_country.id\n", " LIMIT ? OFFSET ?\n", "[generated in 0.00103s] (', ', 'language', 1, 10, 0)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namen_countriescountries
id
stan1293English34AU, BM, BR, BZ, CA, CC, CK, CU, CX, DO, FK, GB...
vlax1238Vlax Romani32AL, AT, BA, BG, BY, CH, CZ, DE, ES, FI, FR, GR...
balk1252Balkan Romani30AL, AT, BA, BG, BY, CH, CZ, DE, FI, FR, GB, GR...
stan1288Spanish30AD, AR, BO, BR, BZ, CL, CO, CR, CU, DO, EC, ES...
balt1257Baltic Romani29AL, AT, BA, BG, BY, CH, CZ, DE, EE, FI, FR, GB...
sint1235Sinte-Manus Romani29AL, AT, BA, BG, BY, CH, CZ, DE, FI, FR, GB, GR...
carp1235Central Romani28AL, AT, BA, BG, BY, CH, CZ, DE, FI, FR, GB, GR...
stan1318Standard Arabic25AE, BH, DJ, DZ, EG, ER, IL, IQ, JO, KM, KW, LB...
amer1248American Sign Language22BB, BF, BJ, BO, CA, CD, CF, CI, CN, GA, GH, JM...
east2295Eastern Yiddish22AR, AU, BE, BY, CA, CR, EE, HU, IL, LT, LV, MD...
\n", "
" ], "text/plain": [ " name n_countries \\\n", "id \n", "stan1293 English 34 \n", "vlax1238 Vlax Romani 32 \n", "balk1252 Balkan Romani 30 \n", "stan1288 Spanish 30 \n", "balt1257 Baltic Romani 29 \n", "sint1235 Sinte-Manus Romani 29 \n", "carp1235 Central Romani 28 \n", "stan1318 Standard Arabic 25 \n", "amer1248 American Sign Language 22 \n", "east2295 Eastern Yiddish 22 \n", "\n", " countries \n", "id \n", "stan1293 AU, BM, BR, BZ, CA, CC, CK, CU, CX, DO, FK, GB... \n", "vlax1238 AL, AT, BA, BG, BY, CH, CZ, DE, ES, FI, FR, GR... \n", "balk1252 AL, AT, BA, BG, BY, CH, CZ, DE, FI, FR, GB, GR... \n", "stan1288 AD, AR, BO, BR, BZ, CL, CO, CR, CU, DO, EC, ES... \n", "balt1257 AL, AT, BA, BG, BY, CH, CZ, DE, EE, FI, FR, GB... \n", "sint1235 AL, AT, BA, BG, BY, CH, CZ, DE, FI, FR, GB, GR... \n", "carp1235 AL, AT, BA, BG, BY, CH, CZ, DE, FI, FR, GB, GR... \n", "stan1318 AE, BH, DJ, DZ, EG, ER, IL, IQ, JO, KM, KW, LB... \n", "amer1248 BB, BF, BJ, BO, CA, CD, CF, CI, CN, GA, GH, JM... \n", "east2295 AR, AU, BE, BY, CA, CR, EE, HU, IL, LT, LV, MD... " ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "select_lang_country = (sa.select(Languoid.id, Languoid.name, Country.id.label('country'))\n", " .select_from(Languoid)\n", " .filter_by(level=LANGUAGE)\n", " .join(languoid_country).join(Country)\n", " .order_by(Languoid.id, 'country')\n", " .alias('lang_country'))\n", "\n", "countries = sa.func.group_concat(select_lang_country.c.country, ', ').label('countries')\n", "\n", "select_multicountry_languages = (sa.select(select_lang_country.c.id,\n", " select_lang_country.c.name,\n", " sa.func.count().label('n_countries'),\n", " countries)\n", " .group_by(select_lang_country.c.id,\n", " select_lang_country.c.name)\n", " .having(sa.func.count() > 1)\n", " .order_by(sa.desc('n_countries'),\n", " select_lang_country.c.id)\n", " .limit(10))\n", " \n", "read_sql(select_multicountry_languages, index_col='id')" ] }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT language_ncountries.n_countries, count(*) AS n_languages \n", "FROM (SELECT languoid.id AS id, count(*) AS n_countries \n", "FROM languoid LEFT OUTER JOIN languoid_country ON languoid.id = languoid_country.languoid_id \n", "WHERE languoid.level = ? GROUP BY languoid.id) AS language_ncountries GROUP BY language_ncountries.n_countries ORDER BY language_ncountries.n_countries\n", "[generated in 0.00095s] ('language',)\n", "ROLLBACK\n", "BEGIN (implicit)\n", "SELECT ? AS value, count(*) AS count, sum(language_ncountries.n_countries) AS sum, min(language_ncountries.n_countries) AS min, max(language_ncountries.n_countries) AS max, avg(language_ncountries.n_countries) AS mean \n", "FROM (SELECT languoid.id AS id, count(*) AS n_countries \n", "FROM languoid LEFT OUTER JOIN languoid_country ON languoid.id = languoid_country.languoid_id \n", "WHERE languoid.level = ? GROUP BY languoid.id) AS language_ncountries\n", "[generated in 0.00108s] ('n_countries', 'language')\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
countsumminmaxmean
n_countries8604113421341.318224
\n", "
" ], "text/plain": [ " count sum min max mean\n", "n_countries 8604 11342 1 34 1.318224" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAt4AAADpCAYAAAATdDBjAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyQklEQVR4nO3deXhU1f3H8c9MyAbZSCBbCUmQXfa1AWSNRI0iiiKIgohaaBCRskVlV0AqiJYWWlqFUlCwLBUoaAyCFZElLKLsECQtJEGBJIQlQM7vD57cH8OmCTOTIO/X89znYe45937PhMmdz9ycuddmjDECAAAA4FL20h4AAAAAcCcgeAMAAABuQPAGAAAA3IDgDQAAALgBwRsAAABwA4I3AAAA4AYEbwAAAMANCN4AAACAG5Qr7QG4SmFhoY4ePSp/f3/ZbLbSHg4AAAB+gYwxysvLU2RkpOz2m5/T/sUG76NHjyoqKqq0hwEAAIA7QEZGhqpUqXLTPr/Y4O3v7y/p8g8hICCglEcDAACAX6Lc3FxFRUVZ2fNmfrHBu2h6SUBAAMEbAAAALvVzpjbz5UoAAADADQjeAAAAgBv8YqeaAAAAFNelS5d04cKF0h4GyhhPT095eHjc8n4I3gAA4I5njFFmZqZOnTpV2kNBGRUUFKTw8PBbukz1HRu8Y0auLPG2hycnOnEkAACgtBWF7tDQUJUvX557gMBijNGZM2eUnZ0tSYqIiCjxvu7Y4A0AACBdnl5SFLpDQkJKezgog3x9fSVJ2dnZCg0NLfG0E75cCQAA7mhFc7rLly9fyiNBWVb0+riV7wAQvAEAAPTzrsOMO5czXh8EbwAAAMANCN4AAACAG/DlSgAAgOu4lSuglYQ7r5pms9m0dOlSde3a1W01wRlvAAAAwC0I3gAAAIAbELwBAABuQ+3bt9egQYM0fPhwBQcHKzw8XGPHji3RvkaMGKGaNWuqfPnyqlatmkaNGuVw2byxY8eqUaNGmjdvnmJiYhQYGKgePXooLy/P6pOXl6devXqpQoUKioiI0Ntvv6327dtr8ODBVh+bzaZly5Y51A4KCtKcOXN+9lgk6fXXX1doaKj8/f313HPPaeTIkWrUqJFDn7/+9a+qU6eOfHx8VLt2bf3pT3+y2goKCjRw4EBFRETIx8dH0dHRmjRpUol+dsVB8AYAALhNzZ07VxUqVNDGjRs1ZcoUjR8/XikpKcXej7+/v+bMmaNdu3bpnXfe0ezZs/X222879Dl48KCWLVumFStWaMWKFVq3bp0mT55stQ8ZMkTr16/Xxx9/rJSUFP3nP//R1q1bnT6W+fPn64033tCbb76ptLQ0Va1aVTNnznTYx/z58zV69Gi98cYb2r17tyZOnKhRo0Zp7ty5kqR3331XH3/8sRYtWqS9e/dq/vz5iomJKfZYi4svVwIAANymGjRooDFjxkiSatSooRkzZig1NVX33ntvsfbz2muvWf+OiYnR0KFD9eGHH2r48OHW+sLCQs2ZM0f+/v6SpKefflqpqal64403lJeXp7lz52rBggXq1KmTJOn9999XZGRksZ/TT43lD3/4g/r166e+fftKkkaPHq1PP/1Up0+ftrYbM2aMpk6dqkcffVSSFBsbq127dunPf/6z+vTpoyNHjqhGjRpq06aNbDaboqOjiz3OkiB4AwAA3KYaNGjg8DgiIkLZ2dnF3s/ChQv17rvv6uDBgzp9+rQuXryogIAAhz4xMTFW6L661qFDh3ThwgW1aNHCag8MDFStWrWcPpa9e/fqt7/9rcM2LVq00Jo1ayRJ+fn5OnjwoPr166fnn3/e6nPx4kUFBgZKkp555hnde++9qlWrlu677z49+OCD6ty5c7HHWlxMNQEAALhNeXp6Ojy22WwqLCws1j42bNigXr166YEHHtCKFSu0bds2vfrqqyooKHB6LZvNJmOMw7or52//3LHcTNGZ79mzZ2v79u3W8u233+rrr7+WJDVp0kTp6emaMGGCzp49q+7du+uxxx4r1nMpCc54AwAA3MG++uorRUdH69VXX7XWff/998XaR7Vq1eTp6anNmzeratWqkqScnBzt27dPbdu2tfpVrlxZx44dsx7v379fZ86cKdZYatWqpc2bN6t3797Wus2bN1v/DgsLU2RkpA4dOqRevXrdcMwBAQF64okn9MQTT+ixxx7TfffdpxMnTig4OLhYz704CN4AAAB3sBo1aujIkSP68MMP1bx5c61cuVJLly4t1j78/f3Vp08fDRs2TMHBwQoNDdWYMWNkt9tls9msfh07dtSMGTMUFxenS5cuacSIEQ5n0n/OWF588UU9//zzatasmVq1aqWFCxfqm2++UbVq1aw+48aN06BBgxQYGKj77rtP58+f15YtW3Ty5EkNGTJE06ZNU0REhBo3biy73a6PPvpI4eHhCgoKKtkP8WcieAMAAFyHO+8kWZq6dOmil19+WQMHDtT58+eVmJioUaNGFfvShNOmTVP//v314IMPKiAgQMOHD1dGRoZ8fHysPlOnTlXfvn11zz33KDIyUu+8847S0tKKNZZevXrp0KFDGjp0qM6dO6fu3bvrmWee0aZNm6w+zz33nMqXL6/f//73GjZsmCpUqKD69etblzb09/fXlClTtH//fnl4eKh58+b697//LbvdtbOwbebqiTa/ELm5uQoMDFROTs41Xw6Qbu02sHfKLyIAAHeCc+fOKT09XbGxsQ4hEbcmPz9fv/rVrzR16lT169fPpbXuvfdehYeHa968eS6rcaPXyU9lzitxxhsAAAC3bNu2bdqzZ49atGihnJwcjR8/XpL08MMPO7XOmTNnNGvWLCUkJMjDw0MffPCBPvvssxJdv9zduKoJAADAL8j8+fPl5+d33eXuu+92ae233npLDRs2VHx8vPLz8/Wf//xHlSpVcmoNm82mf//732rbtq2aNm2q5cuXa/HixYqPj3dqHVcodvD+3//+p6eeekohISHy9fVV/fr1tWXLFqvdGKPRo0crIiJCvr6+io+P1/79+x32ceLECfXq1UsBAQEKCgpSv379HC56LknffPON7rnnHvn4+CgqKkpTpkwp4VMEAAC4c3Tp0sXhMnpXLv/+979dVrdx48ZKS0vT6dOndeLECaWkpKh+/fpOr+Pr66vPPvtMP/74o/Lz87V161brRjllXbGmmpw8eVKtW7dWhw4dtGrVKlWuXFn79+9XxYoVrT5TpkzRu+++q7lz5yo2NlajRo1SQkKCdu3aZc2H6dWrl44dO6aUlBRduHBBffv21QsvvKAFCxZIujxXpnPnzoqPj9esWbO0c+dOPfvsswoKCtILL7zgxKcPAADwy+Lv7+9woxuUHcUK3m+++aaioqL0/vvvW+tiY2OtfxtjNH36dL322mvWfJ6///3vCgsL07Jly9SjRw/t3r1bq1ev1ubNm9WsWTNJl2/9+cADD+itt95SZGSk5s+fr4KCAr333nvy8vLS3Xffre3bt2vatGkEbwAA4BK/0OtNwEmc8foo1lSTjz/+WM2aNdPjjz+u0NBQNW7cWLNnz7ba09PTlZmZ6TDHJjAwUC1bttSGDRskXb4jUVBQkBW6JSk+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oCDNmTNH0v9PDVmyZIk6dOig8uXLq2HDhtqwYYMkae3aterbt69ycnJks9lks9msscfExGjChAnq3bu3AgIC9MILL1x3qsm3336r+++/X35+fgoLC9PTTz+tH374wWr/5z//qfr168vX11chISGKj49Xfn7+z/vhAkAZRfAGgFIyd+5cVahQQRs3btSUKVM0fvx4paSk3HSbwsJC3X///Vq/fr3+8Y9/aNeuXZo8ebI8PDwkSWlpaerevbt69OihnTt3auzYsRo1apQVqovj1Vdf1dChQ7V9+3bVrFlTPXv21MWLF9WqVStNnz5dAQEBOnbsmI4dO6ahQ4da27311ltq2LChtm3bplGjRl2z31OnTqljx45q3LixtmzZotWrVysrK0vdu3eXJB07dkw9e/bUs88+q927d2vt2rV69NFHXXKDEgBwJ6aaAEApadCggcaMGSNJqlGjhmbMmKHU1FTde++9N9zms88+06ZNm7R7927VrFlTklStWjWrfdq0aerUqZMVeGvWrKldu3bp97//vZ555plijW/o0KFKTEyUJI0bN0533323Dhw4oNq1ayswMFA2m+26U0g6duyo3/3ud9bjw4cPO7TPmDFDjRs31sSJE6117733nqKiorRv3z6dPn1aFy9e1KOPPqro6GhJUv369Ys1dgAoizjjDQClpEGDBg6PIyIilJ2dfdNttm/fripVqlih+2q7d+9W69atHda1bt1a+/fvd7g9cnHHFxERIUk/OT5Jatas2U3bd+zYoc8//1x+fn7WUrt2bUnSwYMH1bBhQ3Xq1En169fX448/rtmzZ+vkyZPFGjsAlEUEbwAoJZ6eng6PbTabCgsLb7qNr6/vLde12WzXTNu4cOHCTcdns9kk6SfHJ0kVKlS4afvp06f10EMPafv27Q7L/v371bZtW3l4eCglJUWrVq1S3bp19Yc//EG1atVSenr6z3l6AFBmEbwB4DbSoEED/fe//9W+ffuu216nTh2tX7/eYd369etVs2ZNax545cqVdezYMat9//79OnPmTLHG4eXlVewz6EWaNGmi7777TjExMapevbrDUhTabTabWrdurXHjxmnbtm3y8vLS0qVLS1QPAMoKgjcA3EbatWuntm3bqlu3bkpJSVF6erpWrVql1atXS5J+97vfKTU1VRMmTNC+ffs0d+5czZgxw+HLjx07dtSMGTO0bds2bdmyRf3797/m7PtPiYmJ0enTp5WamqoffvihWME9KSlJJ06cUM+ePbV582YdPHhQn3zyifr27atLly5p48aNmjhxorZs2aIjR45oyZIlOn78uOrUqVOsMQJAWUPwBoDbzOLFi9W8eXP17NlTdevW1fDhw62zz02aNNGiRYv04Ycfql69eho9erTGjx/v8MXKqVOnKioqSvfcc4+efPJJDR06VOXLly/WGFq1aqX+/fvriSeeUOXKlTVlypSfvW1kZKTWr1+vS5cuqXPnzqpfv74GDx6soKAg2e12BQQE6IsvvtADDzygmjVr6rXXXtPUqVN1//33F2uMAFDW2AzXZwIAAABcjjPeAAAAgBsQvAGgDJk/f77DZfauXO6+++7SHh4A4BYw1QQAypC8vDxlZWVdt83T09O6oQwA4PZD8AYAAADcgKkmAAAAgBsQvAEAAAA3IHgDAAAAbkDwBgAAANyA4A0AAAC4AcEbAAAAcAOCNwAAAOAGBG8AAADADf4PWTWZ1/ghzzkAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_countries = (sa.select(Languoid.id, sa.func.count().label('n_countries'))\n", " .select_from(Languoid)\n", " .filter_by(level=LANGUAGE)\n", " .outerjoin(languoid_country)\n", " .group_by(Languoid.id)\n", " .alias('language_ncountries')\n", " .c.n_countries)\n", "\n", "select_lc_dist = (sa.select(n_countries, sa.func.count().label('n_languages'))\n", " .group_by(n_countries)\n", " .order_by('n_countries'))\n", "\n", "_ = read_sql(select_lc_dist, index_col='n_countries')\n", "\n", "_.plot.bar(figsize=(12 * 72 / 100, 3 * 72 / 100))\n", "\n", "(read_sql(sa.select(sa.literal('n_countries').label('value'),\n", " sa.func.count().label('count'),\n", " sa.func.sum(n_countries).label('sum'),\n", " sa.func.min(n_countries).label('min'),\n", " sa.func.max(n_countries).label('max'),\n", " sa.func.avg(n_countries).label('mean')),\n", " index_col='value')\n", " .rename_axis(None))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## altname" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT altnameprovider.name AS altname_provider, count(DISTINCT altname.languoid_id) AS n_languoids \n", "FROM altnameprovider JOIN altname ON altnameprovider.id = altname.provider_id GROUP BY altnameprovider.name ORDER BY n_languoids, altname_provider\n", "[generated in 0.00088s] ()\n", "ROLLBACK\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from treedb.models import Altname, AltnameProvider\n", "\n", "select_provider_nlanguoids = (sa.select(AltnameProvider.name.label('altname_provider'),\n", " sa.func.count(sa.distinct(Altname.languoid_id)).label('n_languoids'))\n", " .join_from(AltnameProvider, Altname)\n", " .group_by(AltnameProvider.name)\n", " .order_by('n_languoids', 'altname_provider'))\n", "\n", "(read_sql(select_provider_nlanguoids, index_col='altname_provider')\n", " .plot.barh(figsize=(6 * 72 / 100, 4 * 72 / 100)));" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT languoid_naltnames.n_altnames, count(*) AS n_languoids \n", "FROM (SELECT languoid.id AS id, count(*) AS n_altnames \n", "FROM languoid LEFT OUTER JOIN altname ON languoid.id = altname.languoid_id GROUP BY languoid.id) AS languoid_naltnames GROUP BY languoid_naltnames.n_altnames ORDER BY languoid_naltnames.n_altnames\n", "[generated in 0.00078s] ()\n", "ROLLBACK\n", "BEGIN (implicit)\n", "SELECT ? AS value, count(*) AS count, sum(languoid_naltnames.n_altnames) AS sum, min(languoid_naltnames.n_altnames) AS min, max(languoid_naltnames.n_altnames) AS max, avg(languoid_naltnames.n_altnames) AS mean \n", "FROM (SELECT languoid.id AS id, count(*) AS n_altnames \n", "FROM languoid LEFT OUTER JOIN altname ON languoid.id = altname.languoid_id GROUP BY languoid.id) AS languoid_naltnames\n", "[generated in 0.00094s] ('n_altnames',)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
countsumminmaxmean
n_altnames2687916950012736.306038
\n", "
" ], "text/plain": [ " count sum min max mean\n", "n_altnames 26879 169500 1 273 6.306038" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAucAAADlCAYAAADwUFnqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAs5ElEQVR4nO3deXRUVb7+/6cqc0IqxZRJQgzKJENAkBgFHIgkOIHQXwHzs8GVKw7QDgjYOADSfS/dcEFBUZbXbkJ7AZG+Ldq0jUQggBAQIhFBQYjBQEOgBTNCxjq/P6COlIQhQHIq5v1aq5bUObvO+ZzaSXyys88um2EYhgAAAABYzm51AQAAAABOI5wDAAAAXoJwDgAAAHgJwjkAAADgJQjnAAAAgJcgnAMAAABegnAOAAAAeAlfqwuwksvl0uHDhxUaGiqbzWZ1OQAAAPgFMgxDJSUlio6Olt1+4bHxJh3ODx8+rJiYGKvLAAAAQBNw8OBBtWnT5oJtmnQ4Dw0NlXT6jXI4HBZXAwAAgF+i4uJixcTEmNnzQpp0OHdPZXE4HIRzAAAA1KtLmUbNDaEAAACAlyCcAwAAAF6CcA4AAAB4iSY95xwAAOBK1dTUqKqqyuoyYCE/Pz/5+PhclWMRzhtYdY1LSXPWq8Yw9I+n+skR6Gd1SQAA4DIYhqGCggIVFhZaXQq8gNPpVGRk5BV/dg7hvIHZbTYdOH5SkpR/vExdr3FaWxAAALgs7mAeHh6u4OBgPtCwiTIMQydPntSxY8ckSVFRUVd0PMJ5A7PbbbLbJJchHS4sV9drrK4IAADUVU1NjRnMW7ZsaXU5sFhQUJAk6dixYwoPD7+iKS7cEGoBH/vp36wrqmssrgQAAFwO9xzz4OBgiyuBt3B/LVzp/QeEcwv4nPmzV1WNYXElAADgSjCVBW5X62uBcG4Buzly7rK4EgAAAHgT5pxbwD2tpYpwDgDAL86/Ck/px7LKBjtf8xB/XeMMarDzoX4Rzi1ghnOmtQAA8Ivyr8JTuvO/Mxv0r+MBvnatnXB7gwR0m82mDz74QEOGDKn3c11to0ePVmFhoVasWHHeNrfffrt69Oih1157rcHq+rk6T2vZsGGD7rvvPkVHR8tms51zgaNHj5bNZvN4pKSkeLQ5ceKEUlNT5XA45HQ6lZaWptLSUo82O3fuVL9+/RQYGKiYmBjNnDnznFqWL1+uTp06KTAwUN26ddPHH39c18uxhK8Zzhk5BwDgl+THssoGn7ZaUe1q0JH6xmru3LlKT0+3uoyLqnM4LysrU3x8vObPn3/eNikpKTpy5Ij5WLp0qcf+1NRU7d69WxkZGVq5cqU2bNigMWPGmPuLi4s1cOBAxcbGKjs7W7NmzdK0adP09ttvm202b96skSNHKi0tTTt27NCQIUM0ZMgQ7dq1q66X1ODcI+eVhHMAAIAGERYWJqfTaXUZF1XncD5o0CD9/ve/1wMPPHDeNgEBAYqMjDQfzZs3N/d98803WrVqld555x0lJCSob9++ev311/Xee+/p8OHDkqTFixersrJSf/7zn9WlSxeNGDFCTz31lObMmWMeZ+7cuUpJSdHEiRPVuXNn/e53v9ONN96oN954o66X1OB+Wq2FcA4AABrW7bffrqeeekqTJk1SixYtFBkZqWnTpl3WsZ5//nl16NBBwcHBateunV5++WWPpQSnTZumHj166N1339W1116rsLAwjRgxQiUlJWabkpISpaamKiQkRFFRUXr11Vd1++2365lnnjHb1DZbw+l0eoyEf/XVV7rzzjsVFBSkli1basyYMR4zM0aPHu0xHaesrEy//vWv1axZM0VFRWn27NnnXN+bb76p9u3bKzAwUBEREfrVr351We9TXdTLai2ZmZkKDw9Xx44d9cQTT+j48ePmvqysLDmdTvXu3dvclpSUJLvdrq1bt5pt+vfvL39/f7NNcnKy9u7dqx9//NFsk5SU5HHe5ORkZWVlnbeuiooKFRcXezys4B45r2bOOQAAsMCiRYsUEhKirVu3aubMmZo+fboyMjLqfJzQ0FClp6fr66+/1ty5c/U///M/evXVVz3a5ObmasWKFVq5cqVWrlyp9evX6w9/+IO5f/z48dq0aZM++ugjZWRkaOPGjfriiy/qVEdZWZmSk5PVvHlzbdu2TcuXL9enn36qcePGnfc1EydO1Pr16/Xhhx9q9erVyszM9Djv9u3b9dRTT2n69Onau3evVq1apf79+9eprstx1W8ITUlJ0dChQxUXF6fc3Fy98MILGjRokLKysuTj46OCggKFh4d7FuHrqxYtWqigoEDS6Y/DjYuL82gTERFh7mvevLkKCgrMbWe3cR+jNjNmzNArr7xyNS7zijCtBQAAWKl79+6aOnWqJKl9+/Z64403tGbN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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_altnames = (sa.select(Languoid.id, sa.func.count().label('n_altnames'))\n", " .outerjoin_from(Languoid, Altname)\n", " .group_by(Languoid.id)\n", " .alias('languoid_naltnames')\n", " .c.n_altnames)\n", "\n", "select_la_dist = (sa.select(n_altnames, sa.func.count().label('n_languoids'))\n", " .group_by(n_altnames)\n", " .order_by(n_altnames))\n", "\n", "_ = read_sql(select_la_dist, index_col='n_altnames')\n", "\n", "_.plot.area(figsize=(12 * 72 / 100, 3 * 72 / 100))\n", "\n", "(read_sql(sa.select(sa.literal('n_altnames').label('value'),\n", " sa.func.count().label('count'),\n", " sa.func.sum(n_altnames).label('sum'),\n", " sa.func.min(n_altnames).label('min'),\n", " sa.func.max(n_altnames).label('max'),\n", " sa.func.avg(n_altnames).label('mean')),\n", " index_col='value')\n", " .rename_axis(None))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## source" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sourceprovider.name AS provider, languoid.level, count(*) AS n_sources \n", "FROM sourceprovider JOIN source ON sourceprovider.id = source.provider_id JOIN languoid ON languoid.id = source.languoid_id GROUP BY sourceprovider.name, languoid.level ORDER BY provider, n_sources DESC\n", "[generated in 0.00103s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
n_sources
providerlevel
glottologlanguage213706
dialect2606
family2601
\n", "
" ], "text/plain": [ " n_sources\n", "provider level \n", "glottolog language 213706\n", " dialect 2606\n", " family 2601" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from treedb.models import Source, SourceProvider\n", "\n", "select_provider_nsources = (sa.select(SourceProvider.name.label('provider'),\n", " Languoid.level,\n", " sa.func.count().label('n_sources'))\n", " .join_from(SourceProvider, Source).join(Languoid)\n", " .group_by(SourceProvider.name, Languoid.level)\n", " .order_by('provider', sa.desc('n_sources')))\n", "\n", "read_sql(select_provider_nsources, index_col=['provider', 'level'])" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT lang_nsources.n_sources, count(*) AS n_languoids \n", "FROM (SELECT languoid.id AS id, count(source.languoid_id) AS n_sources \n", "FROM languoid LEFT OUTER JOIN source ON languoid.id = source.languoid_id GROUP BY languoid.id) AS lang_nsources GROUP BY lang_nsources.n_sources ORDER BY n_languoids\n", "[generated in 0.00109s] ()\n", "ROLLBACK\n", "BEGIN (implicit)\n", "SELECT ? AS value, count(*) AS count, sum(lang_nsources.n_sources) AS sum, min(lang_nsources.n_sources) AS min, max(lang_nsources.n_sources) AS max, avg(lang_nsources.n_sources) AS mean \n", "FROM (SELECT languoid.id AS id, count(source.languoid_id) AS n_sources \n", "FROM languoid LEFT OUTER JOIN source ON languoid.id = source.languoid_id GROUP BY languoid.id) AS lang_nsources\n", "[generated in 0.00118s] ('n_sources',)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
countsumminmaxmean
n_sources26879218913015638.144388
\n", "
" ], "text/plain": [ " count sum min max mean\n", "n_sources 26879 218913 0 1563 8.144388" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_sources = (sa.select(Languoid.id,\n", " sa.func.count(Source.languoid_id).label('n_sources'))\n", " .outerjoin_from(Languoid, Source)\n", " .group_by(Languoid.id)\n", " .alias('lang_nsources')\n", " .c.n_sources)\n", "\n", "select_nsources_nlangs = (sa.select(n_sources, sa.func.count().label('n_languoids'))\n", " .group_by(n_sources)\n", " .order_by('n_languoids'))\n", "\n", "_ = read_sql(select_nsources_nlangs, index_col='n_sources')\n", "(_.groupby(_.index != 0).sum().rename_axis('n_sources')\n", " .rename(index={False: '= 0', True: '> 0'}).plot.bar(figsize=(4 * 72 / 100, 3 * 72 / 100)))\n", "(_.drop(0).plot.area(figsize=(8 * 72 / 100, 3 * 72 / 100), logx=True)\n", " .xaxis.set_major_formatter(mpl.ticker.ScalarFormatter()))\n", "\n", "(read_sql(sa.select(sa.literal('n_sources').label('value'),\n", " sa.func.count().label('count'),\n", " sa.func.sum(n_sources).label('sum'),\n", " sa.func.min(n_sources).label('min'),\n", " sa.func.max(n_sources).label('max'),\n", " sa.func.avg(n_sources).label('mean')),\n", " index_col='value')\n", " .rename_axis(None))" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT lang_nsources.level, lang_nsources.n_sources, count(*) AS n_languoids \n", "FROM (SELECT languoid.id AS id, languoid.level AS level, count(source.languoid_id) AS n_sources \n", "FROM languoid LEFT OUTER JOIN source ON languoid.id = source.languoid_id GROUP BY languoid.id, languoid.level) AS lang_nsources GROUP BY lang_nsources.level, lang_nsources.n_sources ORDER BY n_languoids\n", "[generated in 0.00091s] ()\n", "ROLLBACK\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "select_lang_nsources = (sa.select(Languoid.id, Languoid.level,\n", " sa.func.count(Source.languoid_id).label('n_sources'))\n", " .outerjoin_from(Languoid, Source)\n", " .group_by(Languoid.id, Languoid.level)\n", " .alias('lang_nsources'))\n", "\n", "select_ln_nlangs = (sa.select(select_lang_nsources.c.level,\n", " select_lang_nsources.c.n_sources,\n", " sa.func.count().label('n_languoids'))\n", " .group_by(select_lang_nsources.c.level, select_lang_nsources.c.n_sources)\n", " .order_by('n_languoids'))\n", "\n", "_ = read_sql(select_ln_nlangs).pivot(index='n_sources', columns='level', values='n_languoids')\n", "(_.groupby(_.index != 0).sum()[list(treedb.LEVEL)].rename_axis('n_sources')\n", " .rename(index={False: '= 0', True: '> 0'}).plot.bar(figsize=(4 * 72 / 100, 3 * 72 / 100)))\n", "(_.drop(0)[list(treedb.LEVEL)].plot.area(figsize=(8 * 72 / 100, 3 * 72 / 100), logx=True)\n", " .xaxis.set_major_formatter(mpl.ticker.ScalarFormatter()))" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT bibfile.name AS bibfile, count(*) AS n_used \n", "FROM bibfile JOIN bibitem ON bibfile.id = bibitem.bibfile_id GROUP BY bibfile.name ORDER BY n_used DESC\n", "[generated in 0.00119s] ()\n", "ROLLBACK\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from treedb.models import Bibfile, Bibitem\n", "\n", "select_bibfile_nused = (sa.select(Bibfile.name.label('bibfile'), sa.func.count().label('n_used'))\n", " .join_from(Bibfile, Bibitem)\n", " .group_by(Bibfile.name)\n", " .order_by(sa.desc('n_used')))\n", "\n", "(read_sql(select_bibfile_nused, index_col='bibfile')\n", " .plot.bar(figsize=(12 * 72 / 100, 3 * 72 / 100)));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## classification" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT classificationref.kind, languoid.level, count(*) AS n_classificationrefs \n", "FROM classificationref JOIN languoid ON languoid.id = classificationref.languoid_id GROUP BY classificationref.kind, languoid.level ORDER BY classificationref.kind, languoid.level\n", "[generated in 0.00094s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
n_classificationrefs
leveldialectfamilylanguage
kind
family8441247
sub125687511307
\n", "
" ], "text/plain": [ " n_classificationrefs \n", "level dialect family language\n", "kind \n", "family 8 441 247\n", "sub 125 6875 11307" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from treedb.models import ClassificationRef\n", "\n", "select_cr_levels = (sa.select(ClassificationRef.kind, Languoid.level,\n", " sa.func.count().label('n_classificationrefs'))\n", " .join_from(ClassificationRef, Languoid)\n", " .group_by(ClassificationRef.kind, Languoid.level)\n", " .order_by('kind', 'level'))\n", "\n", "read_sql(select_cr_levels, index_col=['kind', 'level']).unstack()" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT lang_ncrefs.n_crefs, count(*) AS n_languoids \n", "FROM (SELECT languoid.id AS id, count(*) AS n_crefs \n", "FROM languoid LEFT OUTER JOIN classificationref ON languoid.id = classificationref.languoid_id GROUP BY languoid.id) AS lang_ncrefs GROUP BY lang_ncrefs.n_crefs ORDER BY lang_ncrefs.n_crefs\n", "[generated in 0.00118s] ()\n", "ROLLBACK\n", "BEGIN (implicit)\n", "SELECT ? AS value, count(*) AS count, sum(lang_ncrefs.n_crefs) AS sum, min(lang_ncrefs.n_crefs) AS min, max(lang_ncrefs.n_crefs) AS max, avg(lang_ncrefs.n_crefs) AS mean \n", "FROM (SELECT languoid.id AS id, count(*) AS n_crefs \n", "FROM languoid LEFT OUTER JOIN classificationref ON languoid.id = classificationref.languoid_id GROUP BY languoid.id) AS lang_ncrefs\n", "[generated in 0.00090s] ('n_crefs',)\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
countsumminmaxmean
n_crefs26879333441161.240522
\n", "
" ], "text/plain": [ " count sum min max mean\n", "n_crefs 26879 33344 1 16 1.240522" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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OLw3mUyyWqv3+bf09HSNHTtWd999t5KSkvT1119r1qxZKi93nOO9Nq5lMpkumWnl4rHtdcHPz087d+7U+++/r7CwMM2ZM0fdu3dXQUFBnV63WuE8LS1N8fHx2rJli5KTk1VRUaG77rpLpaWl9jZTp07VZ599po8//lhpaWk6efKk7r33Xvt+i8WiYcOGqby8XJs3b9by5cuVmJioOXPm2NtkZ2dr2LBhuuOOO5SZmakpU6boT3/6kz7//HN7mw8//FAJCQl65plntHPnTnXv3l1xcXHX9Vufs3h7E6uFAgAA17B582a1adNGs2bNUq9evdS+fXsdO3asWudo27atPDw8tH37dvu2wsJCffvttw7tbrjhBn3//ff29wcPHtTZs2ft76OiovTNN984ZNKvvvpKZrO5yl74m266SR4eHtq6dat925kzZy65rru7u2JjY7VgwQLt2rVLR48e1Zdfflmte6yuag1rWbt2rcP7xMREBQcHKyMjQwMGDFBhYaHeeustrVixQoMGDZJ0YdxQVFSUtmzZon79+mndunXat2+fvvjiC4WEhCg6OlrPPfecZsyYoblz58rT01PLli1TZGSk/VOzUVFR2rRpkxYtWqS4uDhJ0ssvv6yHHnpIEyZMkCQtW7ZMq1ev1ttvv62nnnqqxg/GCBtZLRQAALiI9u3bKycnRx988IF69+6t1atXa+XKldU6h5+fn8aPH69p06YpKChIwcHBeuaZZ2Q2m2UymeztBg0apCVLligmJkYWi0UzZsxw6JEfO3asnnnmGY0fP15z587VqVOn9Nhjj2ncuHGXDGmRpKZNm2rixImaNm2amjdvruDgYM2aNUtm83/6rZOSknTkyBENGDBAzZo105o1a2S1Wqs95Ka6ajRbS2FhoaQLY3QkKSMjQxUVFYqNjbW36dSpk1q3bq309HRJF/4E0rVrV4cHFRcXp6KiIu3du9fe5uJzVLapPEd5ebkyMjIc2pjNZsXGxtrbVKWsrExFRUUOL2fyQ0l5vS73CwAAalczX095udfvZHhe7mY18/Ws12tK0ogRIzR16lRNmjRJ0dHR2rx5s2bPnl3t87z88suKiYnRr3/9a8XGxurWW29VVFSUvL297W0WLlyoiIgI3X777frDH/6gJ5980mHsd5MmTfT555/r9OnT6t27t377299q8ODBWrJkyWWv+9JL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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n_crefs = (sa.select(Languoid.id, sa.func.count().label('n_crefs'))\n", " .outerjoin_from(Languoid, ClassificationRef)\n", " .group_by(Languoid.id)\n", " .alias('lang_ncrefs')\n", " .c.n_crefs)\n", "\n", "select_lcr_dist = (sa.select(n_crefs, sa.func.count().label('n_languoids'))\n", " .group_by(n_crefs)\n", " .order_by(n_crefs))\n", "\n", "_ = read_sql(select_lcr_dist, index_col='n_crefs')\n", "\n", "_.plot.area(figsize=(12 * 72 / 100, 3 * 72 / 100))\n", "\n", "(read_sql(sa.select(sa.literal('n_crefs').label('value'),\n", " sa.func.count().label('count'),\n", " sa.func.sum(n_crefs).label('sum'),\n", " sa.func.min(n_crefs).label('min'),\n", " sa.func.max(n_crefs).label('max'),\n", " sa.func.avg(n_crefs).label('mean')),\n", " index_col='value')\n", " .rename_axis(None))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## link" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 8.188s ago] ('table', 'link')\n", "SELECT count(*) AS n_rows \n", "FROM link\n", "[generated in 0.00068s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE link (\n", "\tlanguoid_id VARCHAR(8) NOT NULL, \n", "\tord INTEGER NOT NULL CHECK (ord >= 1), \n", "\turl TEXT NOT NULL CHECK (url != ''), \n", "\ttitle TEXT CHECK (title != ''), \n", "\tscheme TEXT, \n", "\tPRIMARY KEY (languoid_id, ord), \n", "\tUNIQUE (languoid_id, url), \n", "\tCHECK (substr(url, 1, length(scheme) + 3) = scheme || '://'), \n", "\tFOREIGN KEY(languoid_id) REFERENCES languoid (id), \n", "\tCHECK (scheme IN ('http', 'https'))\n", ") WITHOUT ROWID\n", "32863\n" ] } ], "source": [ "from treedb.models import Link\n", "\n", "print_sql(Link)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT link.scheme AS link_scheme, count(*) AS n_links \n", "FROM link GROUP BY link.scheme ORDER BY n_links DESC\n", "[generated in 0.00085s] ()\n", "ROLLBACK\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "select_scheme_nlinks = (sa.select(Link.scheme.label('link_scheme'), sa.func.count().label('n_links'))\n", " .group_by(Link.scheme)\n", " .order_by(sa.desc('n_links')))\n", "\n", "(read_sql(select_scheme_nlinks, index_col='link_scheme')\n", " .plot.pie(y='n_links', figsize=(6 * 72 / 100, 4 * 72 / 100)));" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT link.url \n", "FROM link\n", "[generated in 0.00082s] ()\n", "ROLLBACK\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from urllib.parse import urlparse\n", "\n", "hosts = collections.Counter(urlparse(url).hostname for url, in treedb.iterrows(sa.select(Link.url)))\n", "\n", "(pd.DataFrame.from_dict(hosts, orient='index', columns=['n_links'])\n", " .sort_values(by='n_links')\n", " .plot.barh(figsize=(6 * 72 / 100, 4 * 72 / 100)));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## endangerment" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 8.607s ago] ('table', 'endangerment')\n", "SELECT count(*) AS n_rows \n", "FROM endangerment\n", "[generated in 0.00058s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE endangerment (\n", "\tlanguoid_id VARCHAR(8) NOT NULL, \n", "\tstatus VARCHAR NOT NULL, \n", "\tsource_id INTEGER NOT NULL, \n", "\tdate DATETIME NOT NULL, \n", "\tcomment TEXT NOT NULL CHECK (comment != ''), \n", "\tPRIMARY KEY (languoid_id), \n", "\tFOREIGN KEY(languoid_id) REFERENCES languoid (id), \n", "\tFOREIGN KEY(status) REFERENCES endangermentstatus (name), \n", "\tFOREIGN KEY(source_id) REFERENCES endangermentsource (id)\n", ") WITHOUT ROWID\n", "8554\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 8.613s ago] ('table', 'endangermentstatus')\n", "SELECT count(*) AS n_rows \n", "FROM endangermentstatus\n", "[generated in 0.00041s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE endangermentstatus (\n", "\tname VARCHAR NOT NULL CHECK (name != ''), \n", "\tconfig_section VARCHAR NOT NULL CHECK (config_section != ''), \n", "\tordinal INTEGER NOT NULL CHECK (ordinal >= 1), \n", "\tegids VARCHAR NOT NULL CHECK (egids != ''), \n", "\tunesco VARCHAR NOT NULL CHECK (unesco != ''), \n", "\telcat VARCHAR NOT NULL CHECK (elcat != ''), \n", "\ticon VARCHAR NOT NULL CHECK (icon != ''), \n", "\tbibitem_id INTEGER, \n", "\tPRIMARY KEY (name), \n", "\tUNIQUE (config_section), \n", "\tFOREIGN KEY(bibitem_id) REFERENCES bibitem (id)\n", ") WITHOUT ROWID\n", "6\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT sqlite_master.sql \n", "FROM sqlite_master \n", "WHERE sqlite_master.type = ? AND sqlite_master.name = ?\n", "[cached since 8.617s ago] ('table', 'endangermentsource')\n", "SELECT count(*) AS n_rows \n", "FROM endangermentsource\n", "[generated in 0.00041s] ()\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CREATE TABLE endangermentsource (\n", "\tid INTEGER NOT NULL, \n", "\tname TEXT NOT NULL CHECK (name != ''), \n", "\tbibitem_id INTEGER, \n", "\tpages TEXT CHECK (pages != ''), \n", "\tPRIMARY KEY (id), \n", "\tUNIQUE (bibitem_id, pages), \n", "\tCHECK ((bibitem_id IS NULL) = (pages IS NULL)), \n", "\tUNIQUE (name), \n", "\tFOREIGN KEY(bibitem_id) REFERENCES bibitem (id)\n", ")\n", "63\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT endangermentstatus.name, endangermentstatus.config_section, endangermentstatus.ordinal, endangermentstatus.egids, endangermentstatus.unesco, endangermentstatus.elcat, endangermentstatus.icon, endangermentstatus.bibitem_id \n", "FROM endangermentstatus ORDER BY endangermentstatus.ordinal\n", "[generated in 0.00071s] ()\n", "ROLLBACK\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nameordinalegidsunescoelcaticonbibitem_id
config_section
safenot endangered1<=6asafeat risk/safeca2f49b1
vulnerablethreatened26bvulnerablevulnerablecd5ce041
definiteshifting37definitely endangeredthreatened/endangeredsf199031
severemoribund48aseverely endangeredseverely endangereddf949021
criticalnearly extinct58bcritically endangeredcritically endangeredta800031
extinctextinct6>=9extinctdormant/awakeningf8888881
\n", "
" ], "text/plain": [ " name ordinal egids unesco \\\n", "config_section \n", "safe not endangered 1 <=6a safe \n", "vulnerable threatened 2 6b vulnerable \n", "definite shifting 3 7 definitely endangered \n", "severe moribund 4 8a severely endangered \n", "critical nearly extinct 5 8b critically endangered \n", "extinct extinct 6 >=9 extinct \n", "\n", " elcat icon bibitem_id \n", "config_section \n", "safe at risk/safe ca2f49b 1 \n", "vulnerable vulnerable cd5ce04 1 \n", "definite threatened/endangered sf19903 1 \n", "severe severely endangered df94902 1 \n", "critical critically endangered ta80003 1 \n", "extinct dormant/awakening f888888 1 " ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from treedb.models import Endangerment, EndangermentStatus, EndangermentSource\n", "\n", "print_sql(Endangerment)\n", "print_sql(EndangermentStatus)\n", "print_sql(EndangermentSource)\n", "read_sql(sa.select(EndangermentStatus).order_by('ordinal'), index_col='config_section')" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "SELECT endangermentsource.name AS source, count(*) AS n_endangerments \n", "FROM endangerment JOIN endangermentsource ON endangermentsource.id = endangerment.source_id GROUP BY endangermentsource.name ORDER BY n_endangerments\n", "[generated in 0.00115s] ()\n", "ROLLBACK\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "e_source = EndangermentSource.name.label('source')\n", "\n", "select_source_nendangerments = (sa.select(e_source, sa.func.count().label('n_endangerments'))\n", " .join_from(Endangerment, EndangermentSource)\n", " .group_by(e_source)\n", " .order_by('n_endangerments'))\n", "\n", "(read_sql(select_source_nendangerments, index_col='source')\n", " .plot.barh(figsize=(6 * 72 / 100, 4 * 72 / 100)));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example query" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "BEGIN (implicit)\n", "WITH RECURSIVE tree(child_id, parent_id, steps, terminal) AS \n", "(SELECT child.id AS child_id, child.id AS parent_id, ? AS steps, child.parent_id IS NULL AS terminal \n", "FROM languoid AS child UNION ALL SELECT tree.child_id AS child_id, parent.parent_id AS parent_id, tree.steps + ? AS steps, grandparent.parent_id IS NULL AS terminal \n", "FROM tree JOIN languoid AS parent ON tree.parent_id = parent.id AND parent.parent_id IS NOT NULL LEFT OUTER JOIN languoid AS grandparent ON parent.parent_id = grandparent.id)\n", " SELECT languoid.id, languoid.name, languoid.level, languoid.parent_id, (SELECT group_concat(parent_path.path_part, ?) AS path \n", "FROM (SELECT tree.parent_id AS path_part \n", "FROM tree \n", "WHERE tree.child_id = languoid.id ORDER BY tree.steps DESC) AS parent_path) AS path, (SELECT tree.parent_id \n", "FROM tree \n", "WHERE tree.child_id = languoid.id AND tree.steps > ? AND tree.terminal = 1) AS family_id, (SELECT tree.parent_id \n", "FROM tree \n", "WHERE tree.child_id = languoid.id AND languoid.level = ? AND (EXISTS (SELECT * \n", "FROM languoid AS ancestor \n", "WHERE tree.parent_id = ancestor.id AND ancestor.level = ?))) AS dialect_language_id, languoid.hid, languoid.iso639_3, languoid.latitude, languoid.longitude, (SELECT group_concat(lang_ma.macroarea_name, ?) AS macroareas \n", "FROM (SELECT languoid_macroarea.macroarea_name AS macroarea_name \n", "FROM languoid_macroarea \n", "WHERE languoid_macroarea.languoid_id = languoid.id ORDER BY languoid_macroarea.macroarea_name) AS lang_ma) AS macroareas, (SELECT group_concat(lang_country.country_id, ?) AS countries \n", "FROM (SELECT languoid_country.country_id AS country_id \n", "FROM languoid_country \n", "WHERE languoid_country.languoid_id = languoid.id ORDER BY languoid_country.country_id) AS lang_country) AS countries, (SELECT group_concat(lang_link.printf, ?) AS links \n", "FROM (SELECT CASE WHEN (link.title IS NOT NULL) THEN printf(?, link.title, link.url) ELSE link.url END AS printf \n", "FROM link \n", "WHERE link.languoid_id = languoid.id ORDER BY link.ord) AS lang_link) AS links, (SELECT group_concat(lang_source_glottolog.printf, ?) AS sources_glottolog \n", "FROM (SELECT CASE WHEN (source_glottolog.pages IS NOT NULL AND source_glottolog.\"trigger\" IS NOT NULL) THEN printf(?, source_bibfile.name, source_bibitem.bibkey, source_glottolog.pages, source_glottolog.\"trigger\") WHEN (source_glottolog.pages IS NOT NULL) THEN printf(?, source_bibfile.name, source_bibitem.bibkey, source_glottolog.pages) WHEN (source_glottolog.\"trigger\" IS NOT NULL) THEN printf(?, source_bibfile.name, source_bibitem.bibkey, source_glottolog.\"trigger\") ELSE printf(?, source_bibfile.name, source_bibitem.bibkey) END AS printf \n", "FROM source AS source_glottolog JOIN sourceprovider AS source_provider ON source_provider.id = source_glottolog.provider_id JOIN bibitem AS source_bibitem ON source_bibitem.id = source_glottolog.bibitem_id JOIN bibfile AS source_bibfile ON source_bibfile.id = source_bibitem.bibfile_id \n", "WHERE source_glottolog.languoid_id = languoid.id AND source_provider.name = ? ORDER BY source_bibfile.name, source_bibitem.bibkey) AS lang_source_glottolog) AS sources_glottolog, (SELECT group_concat(lang_altname_aiatsis.printf, ?) AS altnames_aiatsis \n", "FROM (SELECT CASE WHEN (altname_aiatsis.lang = ?) THEN altname_aiatsis.name ELSE printf(?, altname_aiatsis.name, altname_aiatsis.lang) END AS printf \n", "FROM altname AS altname_aiatsis JOIN altnameprovider AS altname_aiatsis_provider ON altname_aiatsis_provider.id = altname_aiatsis.provider_id \n", "WHERE altname_aiatsis.languoid_id = languoid.id AND altname_aiatsis_provider.name = ? ORDER BY altname_aiatsis.name, altname_aiatsis.lang) AS lang_altname_aiatsis) AS altnames_aiatsis, (SELECT group_concat(lang_altname_elcat.printf, ?) AS altnames_elcat \n", "FROM (SELECT CASE WHEN (altname_elcat.lang = ?) THEN altname_elcat.name ELSE printf(?, altname_elcat.name, altname_elcat.lang) END AS printf \n", "FROM altname AS altname_elcat JOIN altnameprovider AS altname_elcat_provider ON altname_elcat_provider.id = altname_elcat.provider_id \n", "WHERE altname_elcat.languoid_id = languoid.id AND altname_elcat_provider.name = ? ORDER BY altname_elcat.name, altname_elcat.lang) AS lang_altname_elcat) AS altnames_elcat, (SELECT group_concat(lang_altname_ethnologue.printf, ?) AS altnames_ethnologue \n", "FROM (SELECT CASE WHEN (altname_ethnologue.lang = ?) THEN altname_ethnologue.name ELSE printf(?, altname_ethnologue.name, altname_ethnologue.lang) END AS printf \n", "FROM altname AS altname_ethnologue JOIN altnameprovider AS altname_ethnologue_provider ON altname_ethnologue_provider.id = altname_ethnologue.provider_id \n", "WHERE altname_ethnologue.languoid_id = languoid.id AND altname_ethnologue_provider.name = ? ORDER BY altname_ethnologue.name, altname_ethnologue.lang) AS lang_altname_ethnologue) AS altnames_ethnologue, (SELECT group_concat(lang_altname_glottolog.printf, ?) AS altnames_glottolog \n", "FROM (SELECT CASE WHEN (altname_glottolog.lang = ?) THEN altname_glottolog.name ELSE printf(?, altname_glottolog.name, altname_glottolog.lang) END AS printf \n", "FROM altname AS altname_glottolog JOIN altnameprovider AS altname_glottolog_provider ON altname_glottolog_provider.id = altname_glottolog.provider_id \n", "WHERE altname_glottolog.languoid_id = languoid.id AND altname_glottolog_provider.name = ? ORDER BY altname_glottolog.name, altname_glottolog.lang) AS lang_altname_glottolog) AS altnames_glottolog, (SELECT group_concat(lang_altname_hhbib_lgcode.printf, ?) AS altnames_hhbib_lgcode \n", "FROM (SELECT CASE WHEN (altname_hhbib_lgcode.lang = ?) THEN altname_hhbib_lgcode.name ELSE printf(?, altname_hhbib_lgcode.name, altname_hhbib_lgcode.lang) END AS printf \n", "FROM altname AS altname_hhbib_lgcode JOIN altnameprovider AS altname_hhbib_lgcode_provider ON altname_hhbib_lgcode_provider.id = altname_hhbib_lgcode.provider_id \n", "WHERE altname_hhbib_lgcode.languoid_id = languoid.id AND altname_hhbib_lgcode_provider.name = ? ORDER BY altname_hhbib_lgcode.name, altname_hhbib_lgcode.lang) AS lang_altname_hhbib_lgcode) AS altnames_hhbib_lgcode, (SELECT group_concat(lang_altname_lexvo.printf, ?) AS altnames_lexvo \n", "FROM (SELECT CASE WHEN (altname_lexvo.lang = ?) THEN altname_lexvo.name ELSE printf(?, altname_lexvo.name, altname_lexvo.lang) END AS printf \n", "FROM altname AS altname_lexvo JOIN altnameprovider AS altname_lexvo_provider ON altname_lexvo_provider.id = altname_lexvo.provider_id \n", "WHERE altname_lexvo.languoid_id = languoid.id AND altname_lexvo_provider.name = ? ORDER BY altname_lexvo.name, altname_lexvo.lang) AS lang_altname_lexvo) AS altnames_lexvo, (SELECT group_concat(\"lang_altname_moseley & asher (1994)\".printf, ?) AS \"altnames_moseley & asher (1994)\" \n", "FROM (SELECT CASE WHEN (\"altname_moseley & asher (1994)\".lang = ?) THEN \"altname_moseley & asher (1994)\".name ELSE printf(?, \"altname_moseley & asher (1994)\".name, \"altname_moseley & asher (1994)\".lang) END AS printf \n", "FROM altname AS \"altname_moseley & asher (1994)\" JOIN altnameprovider AS \"altname_moseley & asher (1994)_provider\" ON \"altname_moseley & asher (1994)_provider\".id = \"altname_moseley & asher (1994)\".provider_id \n", "WHERE \"altname_moseley & asher (1994)\".languoid_id = languoid.id AND \"altname_moseley & asher (1994)_provider\".name = ? ORDER BY \"altname_moseley & asher (1994)\".name, \"altname_moseley & asher (1994)\".lang) AS \"lang_altname_moseley & asher (1994)\") AS \"altnames_moseley & asher (1994)\", (SELECT group_concat(lang_altname_multitree.printf, ?) AS altnames_multitree \n", "FROM (SELECT CASE WHEN (altname_multitree.lang = ?) THEN altname_multitree.name ELSE printf(?, altname_multitree.name, altname_multitree.lang) END AS printf \n", "FROM altname AS altname_multitree JOIN altnameprovider AS altname_multitree_provider ON altname_multitree_provider.id = altname_multitree.provider_id \n", "WHERE altname_multitree.languoid_id = languoid.id AND altname_multitree_provider.name = ? ORDER BY altname_multitree.name, altname_multitree.lang) AS lang_altname_multitree) AS altnames_multitree, (SELECT group_concat(\"lang_altname_ruhlen (1987)\".printf, ?) AS \"altnames_ruhlen (1987)\" \n", "FROM (SELECT CASE WHEN (\"altname_ruhlen (1987)\".lang = ?) THEN \"altname_ruhlen (1987)\".name ELSE printf(?, \"altname_ruhlen (1987)\".name, \"altname_ruhlen (1987)\".lang) END AS printf \n", "FROM altname AS \"altname_ruhlen (1987)\" JOIN altnameprovider AS \"altname_ruhlen (1987)_provider\" ON \"altname_ruhlen (1987)_provider\".id = \"altname_ruhlen (1987)\".provider_id \n", "WHERE \"altname_ruhlen (1987)\".languoid_id = languoid.id AND \"altname_ruhlen (1987)_provider\".name = ? ORDER BY \"altname_ruhlen (1987)\".name, \"altname_ruhlen (1987)\".lang) AS \"lang_altname_ruhlen (1987)\") AS \"altnames_ruhlen (1987)\", (SELECT group_concat(lang_altname_wals.printf, ?) AS altnames_wals \n", "FROM (SELECT CASE WHEN (altname_wals.lang = ?) THEN altname_wals.name ELSE printf(?, altname_wals.name, altname_wals.lang) END AS printf \n", "FROM altname AS altname_wals JOIN altnameprovider AS altname_wals_provider ON altname_wals_provider.id = altname_wals.provider_id \n", "WHERE altname_wals.languoid_id = languoid.id AND altname_wals_provider.name = ? ORDER BY altname_wals.name, altname_wals.lang) AS lang_altname_wals) AS altnames_wals, (SELECT group_concat(\"lang_altname_wals other\".printf, ?) AS \"altnames_wals other\" \n", "FROM (SELECT CASE WHEN (\"altname_wals other\".lang = ?) THEN \"altname_wals other\".name ELSE printf(?, \"altname_wals other\".name, \"altname_wals other\".lang) END AS printf \n", "FROM altname AS \"altname_wals other\" JOIN altnameprovider AS \"altname_wals other_provider\" ON \"altname_wals other_provider\".id = \"altname_wals other\".provider_id \n", "WHERE \"altname_wals other\".languoid_id = languoid.id AND \"altname_wals other_provider\".name = ? ORDER BY \"altname_wals other\".name, \"altname_wals other\".lang) AS \"lang_altname_wals other\") AS \"altnames_wals other\", (SELECT group_concat(lang_trigger_lgcode.\"trigger\", ?) AS triggers_lgcode \n", "FROM (SELECT trigger_lgcode.\"trigger\" AS \"trigger\" \n", "FROM \"trigger\" AS trigger_lgcode \n", "WHERE trigger_lgcode.languoid_id = languoid.id AND trigger_lgcode.field = ? ORDER BY trigger_lgcode.ord) AS lang_trigger_lgcode) AS triggers_lgcode, (SELECT group_concat(lang_trigger_inlg.\"trigger\", ?) AS triggers_inlg \n", "FROM (SELECT trigger_inlg.\"trigger\" AS \"trigger\" \n", "FROM \"trigger\" AS trigger_inlg \n", "WHERE trigger_inlg.languoid_id = languoid.id AND trigger_inlg.field = ? ORDER BY trigger_inlg.ord) AS lang_trigger_inlg) AS triggers_inlg, ident_endangeredlanguages.identifier AS identifier_endangeredlanguages, ident_languagelandscape.identifier AS identifier_languagelandscape, ident_multitree.identifier AS identifier_multitree, ident_wals.identifier AS identifier_wals, cc_sub.comment AS classification_sub, (SELECT group_concat(lang_cref_sub.printf, ?) AS classification_subrefs \n", "FROM (SELECT printf(CASE WHEN (cr_sub.pages IS NOT NULL) THEN ? ELSE ? END, bibfile_cr_sub.name, bibitem_cr_sub.bibkey, cr_sub.pages) AS printf \n", "FROM classificationref AS cr_sub JOIN bibitem AS bibitem_cr_sub ON bibitem_cr_sub.id = cr_sub.bibitem_id JOIN bibfile AS bibfile_cr_sub ON bibfile_cr_sub.id = bibitem_cr_sub.bibfile_id \n", "WHERE cr_sub.languoid_id = languoid.id AND cr_sub.kind = ? ORDER BY cr_sub.ord) AS lang_cref_sub) AS classification_subrefs, cc_family.comment AS classification_family, (SELECT group_concat(lang_cref_family.printf, ?) AS classification_familyrefs \n", "FROM (SELECT printf(CASE WHEN (cr_family.pages IS NOT NULL) THEN ? ELSE ? END, bibfile_cr_family.name, bibitem_cr_family.bibkey, cr_family.pages) AS printf \n", "FROM classificationref AS cr_family JOIN bibitem AS bibitem_cr_family ON bibitem_cr_family.id = cr_family.bibitem_id JOIN bibfile AS bibfile_cr_family ON bibfile_cr_family.id = bibitem_cr_family.bibfile_id \n", "WHERE cr_family.languoid_id = languoid.id AND cr_family.kind = ? ORDER BY cr_family.ord) AS lang_cref_family) AS classification_familyrefs, endangerment.status AS endangerment_status, endangerment.date AS endangerment_date, endangerment.comment AS endangerment_comment, CASE WHEN (endangermentsource.bibitem_id IS NULL) THEN endangermentsource.name ELSE printf(?, bibfile_e.name, bibitem_e.bibkey, endangermentsource.pages) END AS endangerment_source, ethnologuecomment.isohid AS elcomment_isohid, ethnologuecomment.comment_type AS elcomment_comment_type, ethnologuecomment.ethnologue_versions AS elcomment_ethnologue_versions, ethnologuecomment.comment AS elcomment_comment, isoretirement.code AS iso_retirement_code, isoretirement.name AS iso_retirement_name, isoretirement.change_request AS iso_retirement_change_request, isoretirement.effective AS iso_retirement_effective, isoretirement.reason AS iso_retirement_reason, isoretirement.remedy AS iso_retirement_remedy, isoretirement.comment AS iso_retirement_comment, (SELECT group_concat(lang_irct.code, ?) AS iso_retirement_change_to \n", "FROM (SELECT isoretirement_changeto.code AS code \n", "FROM isoretirement_changeto \n", "WHERE isoretirement_changeto.languoid_id = isoretirement.languoid_id ORDER BY isoretirement_changeto.ord) AS lang_irct) AS iso_retirement_change_to \n", "FROM languoid LEFT OUTER JOIN (identifier AS ident_endangeredlanguages JOIN identifiersite AS ident_endangeredlanguages_site ON ident_endangeredlanguages.site_id = ident_endangeredlanguages_site.id) ON ident_endangeredlanguages_site.name = ? AND ident_endangeredlanguages.languoid_id = languoid.id LEFT OUTER JOIN (identifier AS ident_languagelandscape JOIN identifiersite AS ident_languagelandscape_site ON ident_languagelandscape.site_id = ident_languagelandscape_site.id) ON ident_languagelandscape_site.name = ? AND ident_languagelandscape.languoid_id = languoid.id LEFT OUTER JOIN (identifier AS ident_multitree JOIN identifiersite AS ident_multitree_site ON ident_multitree.site_id = ident_multitree_site.id) ON ident_multitree_site.name = ? AND ident_multitree.languoid_id = languoid.id LEFT OUTER JOIN (identifier AS ident_wals JOIN identifiersite AS ident_wals_site ON ident_wals.site_id = ident_wals_site.id) ON ident_wals_site.name = ? AND ident_wals.languoid_id = languoid.id LEFT OUTER JOIN classificationcomment AS cc_sub ON cc_sub.kind = ? AND cc_sub.languoid_id = languoid.id LEFT OUTER JOIN classificationcomment AS cc_family ON cc_family.kind = ? AND cc_family.languoid_id = languoid.id LEFT OUTER JOIN (endangerment JOIN endangermentsource ON endangermentsource.id = endangerment.source_id) ON languoid.id = endangerment.languoid_id LEFT OUTER JOIN (bibitem AS bibitem_e JOIN bibfile AS bibfile_e ON bibfile_e.id = bibitem_e.bibfile_id) ON bibitem_e.id = endangermentsource.bibitem_id LEFT OUTER JOIN ethnologuecomment ON languoid.id = ethnologuecomment.languoid_id LEFT OUTER JOIN isoretirement ON languoid.id = isoretirement.languoid_id ORDER BY languoid.id\n", "[generated in 0.00143s] (0, 1, '/', 0, 'dialect', 'language', ', ', ', ', ', ', '[%s](%s)', ', ', '**%s:%s**:%s', '**%s:%s**:%s', '**%s:%s**', '**%s:%s**', 'glottolog', ', ', '', '%s [%s]', 'aiatsis', ', ', '', '%s [%s]', 'elcat', ', ', '', '%s [%s]', 'ethnologue', ', ', '', '%s [%s]', 'glottolog', ', ', '', '%s [%s]', 'hhbib_lgcode', ', ', '', '%s [%s]', 'lexvo', ', ', '', '%s [%s]', 'moseley & asher (1994)', ', ', '', '%s [%s]', 'multitree', ', ', '', '%s [%s]', 'ruhlen (1987)', ', ', '', '%s [%s]', 'wals', ', ', '', '%s [%s]', 'wals other', ', ', 'lgcode', ', ', 'inlg', ', ', '**%s:%s**:%s', '**%s:%s**', 'sub', ', ', '**%s:%s**:%s', '**%s:%s**', 'family', '**%s:%s**:%s', ', ', 'endangeredlanguages', 'languagelandscape', 'multitree', 'wals', 'sub', 'family')\n", "[INFO@treedb.backend.export] hash rows with 'sha256', csv header: ['id', 'name', 'level', 'parent_id', 'path', 'family_id', 'dialect_language_id', 'hid', 'iso639_3', 'latitude', 'longitude', 'macroareas', 'countries', 'links', 'sources_glottolog', 'altnames_aiatsis', 'altnames_elcat', 'altnames_ethnologue', 'altnames_glottolog', 'altnames_hhbib_lgcode', 'altnames_lexvo', 'altnames_moseley & asher (1994)', 'altnames_multitree', 'altnames_ruhlen (1987)', 'altnames_wals', 'altnames_wals other', 'triggers_lgcode', 'triggers_inlg', 'identifier_endangeredlanguages', 'identifier_languagelandscape', 'identifier_multitree', 'identifier_wals', 'classification_sub', 'classification_subrefs', 'classification_family', 'classification_familyrefs', 'endangerment_status', 'endangerment_date', 'endangerment_comment', 'endangerment_source', 'elcomment_isohid', 'elcomment_comment_type', 'elcomment_ethnologue_versions', 'elcomment_comment', 'iso_retirement_code', 'iso_retirement_name', 'iso_retirement_change_request', 'iso_retirement_effective', 'iso_retirement_reason', 'iso_retirement_remedy', 'iso_retirement_comment', 'iso_retirement_change_to']\n", "ROLLBACK\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CPU times: total: 4.64 s\n", "Wall time: 4.65 s\n" ] }, { "data": { "text/plain": [ "'f20f1bd9e397f614b24276c189f072fbe28be8c62b6d5f3011546735aecb5bc6'" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%time treedb.hash_csv(treedb.get_example_query())" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.4" } }, "nbformat": 4, "nbformat_minor": 4 }