{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introduction"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('table',\n",
" 'facts',\n",
" 'facts',\n",
" 2,\n",
" 'CREATE TABLE \"facts\" (\"id\" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, \"code\" varchar(255) NOT NULL, \"name\" varchar(255) NOT NULL, \"area\" integer, \"area_land\" integer, \"area_water\" integer, \"population\" integer, \"population_growth\" float, \"birth_rate\" float, \"death_rate\" float, \"migration_rate\" float, \"created_at\" datetime, \"updated_at\" datetime)'),\n",
" ('table',\n",
" 'sqlite_sequence',\n",
" 'sqlite_sequence',\n",
" 3,\n",
" 'CREATE TABLE sqlite_sequence(name,seq)')]"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import sqlite3\n",
"import pandas as pd\n",
"\n",
"conn = sqlite3.connect(\"factbook.db\")\n",
"cursor = conn.cursor()\n",
"cursor.execute(q1).fetchall()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" type | \n",
" name | \n",
" tbl_name | \n",
" rootpage | \n",
" sql | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" table | \n",
" facts | \n",
" facts | \n",
" 2 | \n",
" CREATE TABLE \"facts\" (\"id\" INTEGER PRIMARY KEY... | \n",
"
\n",
" \n",
" 1 | \n",
" table | \n",
" sqlite_sequence | \n",
" sqlite_sequence | \n",
" 3 | \n",
" CREATE TABLE sqlite_sequence(name,seq) | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" type name tbl_name rootpage \\\n",
"0 table facts facts 2 \n",
"1 table sqlite_sequence sqlite_sequence 3 \n",
"\n",
" sql \n",
"0 CREATE TABLE \"facts\" (\"id\" INTEGER PRIMARY KEY... \n",
"1 CREATE TABLE sqlite_sequence(name,seq) "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q1 = \"SELECT * FROM sqlite_master WHERE type='table';\"\n",
"pd.read_sql_query(q1, conn)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" id | \n",
" code | \n",
" name | \n",
" area | \n",
" area_land | \n",
" area_water | \n",
" population | \n",
" population_growth | \n",
" birth_rate | \n",
" death_rate | \n",
" migration_rate | \n",
" created_at | \n",
" updated_at | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" af | \n",
" Afghanistan | \n",
" 652230 | \n",
" 652230 | \n",
" 0 | \n",
" 32564342 | \n",
" 2.32 | \n",
" 38.57 | \n",
" 13.89 | \n",
" 1.51 | \n",
" 2015-11-01 13:19:49.461734 | \n",
" 2015-11-01 13:19:49.461734 | \n",
"
\n",
" \n",
" 1 | \n",
" 2 | \n",
" al | \n",
" Albania | \n",
" 28748 | \n",
" 27398 | \n",
" 1350 | \n",
" 3029278 | \n",
" 0.30 | \n",
" 12.92 | \n",
" 6.58 | \n",
" 3.30 | \n",
" 2015-11-01 13:19:54.431082 | \n",
" 2015-11-01 13:19:54.431082 | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" ag | \n",
" Algeria | \n",
" 2381741 | \n",
" 2381741 | \n",
" 0 | \n",
" 39542166 | \n",
" 1.84 | \n",
" 23.67 | \n",
" 4.31 | \n",
" 0.92 | \n",
" 2015-11-01 13:19:59.961286 | \n",
" 2015-11-01 13:19:59.961286 | \n",
"
\n",
" \n",
" 3 | \n",
" 4 | \n",
" an | \n",
" Andorra | \n",
" 468 | \n",
" 468 | \n",
" 0 | \n",
" 85580 | \n",
" 0.12 | \n",
" 8.13 | \n",
" 6.96 | \n",
" 0.00 | \n",
" 2015-11-01 13:20:03.659945 | \n",
" 2015-11-01 13:20:03.659945 | \n",
"
\n",
" \n",
" 4 | \n",
" 5 | \n",
" ao | \n",
" Angola | \n",
" 1246700 | \n",
" 1246700 | \n",
" 0 | \n",
" 19625353 | \n",
" 2.78 | \n",
" 38.78 | \n",
" 11.49 | \n",
" 0.46 | \n",
" 2015-11-01 13:20:08.625072 | \n",
" 2015-11-01 13:20:08.625072 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id code name area area_land area_water population \\\n",
"0 1 af Afghanistan 652230 652230 0 32564342 \n",
"1 2 al Albania 28748 27398 1350 3029278 \n",
"2 3 ag Algeria 2381741 2381741 0 39542166 \n",
"3 4 an Andorra 468 468 0 85580 \n",
"4 5 ao Angola 1246700 1246700 0 19625353 \n",
"\n",
" population_growth birth_rate death_rate migration_rate \\\n",
"0 2.32 38.57 13.89 1.51 \n",
"1 0.30 12.92 6.58 3.30 \n",
"2 1.84 23.67 4.31 0.92 \n",
"3 0.12 8.13 6.96 0.00 \n",
"4 2.78 38.78 11.49 0.46 \n",
"\n",
" created_at updated_at \n",
"0 2015-11-01 13:19:49.461734 2015-11-01 13:19:49.461734 \n",
"1 2015-11-01 13:19:54.431082 2015-11-01 13:19:54.431082 \n",
"2 2015-11-01 13:19:59.961286 2015-11-01 13:19:59.961286 \n",
"3 2015-11-01 13:20:03.659945 2015-11-01 13:20:03.659945 \n",
"4 2015-11-01 13:20:08.625072 2015-11-01 13:20:08.625072 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q2 = \"select * from facts limit 5\"\n",
"pd.read_sql_query(q2, conn)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Summary Statistics"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" min_pop | \n",
" max_pop | \n",
" min_pop_grwth | \n",
" max_pop_grwth | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0 | \n",
" 7256490011 | \n",
" 0.0 | \n",
" 4.02 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" min_pop max_pop min_pop_grwth max_pop_grwth\n",
"0 0 7256490011 0.0 4.02"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q3 = '''\n",
"select min(population) min_pop, max(population) max_pop, \n",
"min(population_growth) min_pop_grwth, max(population_growth) max_pop_grwth \n",
"from facts\n",
"'''\n",
"pd.read_sql_query(q3, conn)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Outliers"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" id | \n",
" code | \n",
" name | \n",
" area | \n",
" area_land | \n",
" area_water | \n",
" population | \n",
" population_growth | \n",
" birth_rate | \n",
" death_rate | \n",
" migration_rate | \n",
" created_at | \n",
" updated_at | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 261 | \n",
" xx | \n",
" World | \n",
" None | \n",
" None | \n",
" None | \n",
" 7256490011 | \n",
" 1.08 | \n",
" 18.6 | \n",
" 7.8 | \n",
" None | \n",
" 2015-11-01 13:39:09.910721 | \n",
" 2015-11-01 13:39:09.910721 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id code name area area_land area_water population population_growth \\\n",
"0 261 xx World None None None 7256490011 1.08 \n",
"\n",
" birth_rate death_rate migration_rate created_at \\\n",
"0 18.6 7.8 None 2015-11-01 13:39:09.910721 \n",
"\n",
" updated_at \n",
"0 2015-11-01 13:39:09.910721 "
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q4 = '''\n",
"select *\n",
"from facts\n",
"where population == (select max(population) from facts);\n",
"'''\n",
"\n",
"pd.read_sql_query(q4, conn)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" id | \n",
" code | \n",
" name | \n",
" area | \n",
" area_land | \n",
" area_water | \n",
" population | \n",
" population_growth | \n",
" birth_rate | \n",
" death_rate | \n",
" migration_rate | \n",
" created_at | \n",
" updated_at | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 250 | \n",
" ay | \n",
" Antarctica | \n",
" None | \n",
" 280000 | \n",
" None | \n",
" 0 | \n",
" None | \n",
" None | \n",
" None | \n",
" None | \n",
" 2015-11-01 13:38:44.885746 | \n",
" 2015-11-01 13:38:44.885746 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" id code name area area_land area_water population \\\n",
"0 250 ay Antarctica None 280000 None 0 \n",
"\n",
" population_growth birth_rate death_rate migration_rate \\\n",
"0 None None None None \n",
"\n",
" created_at updated_at \n",
"0 2015-11-01 13:38:44.885746 2015-11-01 13:38:44.885746 "
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q5 = '''\n",
"select *\n",
"from facts\n",
"where population == (select min(population) from facts);\n",
"'''\n",
"\n",
"pd.read_sql_query(q5, conn)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Histograms"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/srinify/anaconda/envs/dq/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2847: UserWarning: To output multiple subplots, the figure containing the passed axes is being cleared\n",
" exec(code_obj, self.user_global_ns, self.user_ns)\n"
]
},
{
"data": {
"text/plain": [
"array([[,\n",
" ],\n",
" [,\n",
" ]], dtype=object)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSS\nJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmF\nDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSS\nJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFRpsuYL42XnRT0yVIkiTNqChQ\nRcQxwJeBk4EDwFZgEtgJnJWZB0sLlKSm2ddJ6qTrU34RsRR4P3B/PetSYFNmrgFGgA3l5UlSs+zr\nJM1HyTVUlwBXAN+sX68Gbq2nbwDWFWxbktrCvk5SR12d8ouIM4DdmXljRLy9nj2SmZP19D5gZaft\nrFq1gtHRJd2U0Hrj42NNl9CKGvrNfVQ/tbWva8MxYQ2P1FQ9bfgcrKH7a6g2ApMRsQ44DvgwcMyU\n5WPA3k4b2bNnf5fNt9/u3fsabX98fKzxGvrNfWyPpjuyPmpdX9eGY8IaZtZEPW34HIaphrn6uq5O\n+WXmCzNzbWZOAHcArwJuiIiJepX1wI5uti1JbWFfJ2m+ennbhHOAzRGxDNgFXNPDbUtSW9jXSXqE\n4kBVf3M7ZG3p9iSpjezrJM3FO6VLkiQVMlBJkiQVMlBJkiQVMlBJkiQVMlBJkiQVMlBJkiQVMlBJ\nkiQVMlBJkiQVMlBJkiQV6uWjZzTFxotu6st2t5x7Ul+2K0lt069+VOoHR6gkSZIKGagkSZIKGagk\nSZIKGagkSZIKGagkSZIKGagkSZIKGagkSZIKGagkSZIKGagkSZIKGagkSZIKGagkSZIKGagkSZIK\n+XBkSZJ6oF8Pc95y7kl92a56yxEqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQl6ULkkq0q+LsaWFxBEq\nSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQl3dKT0i\nlgCbgQAmgTcADwBb69c7gbMy82BvypSkZtjfSZqPbkeoTgHIzBOBTcCFwKXApsxcA4wAG3pSoSQ1\ny/5OUkddBarM/ATwuvrlk4G9wGrg1nreDcC64uokqWH2d5Lmo+uHI2fmgYj4EPAfgV8ATs7MyXrx\nPmBlp22sWrWC0dEl3ZYwlMbHx/qy7kLlPmoQSvu7Xvd1bTgm2lDDsOj0Wbfh38IaCgIVQGa+OiLe\nBnwBeNSURWNU3+LmtGfP/pLmh9Lu3fvmtd74+Ni8112o3Mf2aLojG4SS/q6XfV0bjok21DBM5vqs\n2/BvMUw1zNXXdXXKLyJOj4i31y/3AweBL0XERD1vPbCjm21LUpvY30maj25HqK4FPhgRnwGWAm8B\ndgGbI2JZPX1Nb0qUpEbZ30nqqKtAlZnfA35phkVry8qRpHaxv5M0H97YU5IkqZCBSpIkqZCBSpIk\nqZCBSpIkqVDRfai0eGy86Ka+bHfLuSf1ZbuSJLWJI1SSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSS\nJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFDFSSJEmFRpsuQEdm\n40U3NV2CJEmaxhEqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKk\nQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQgYqSZKkQqNN\nFyBJkma38aKb+rLdLeee1JftDquuAlVELAW2AE8BjgYuAL4GbAUmgZ3AWZl5sCdVSlJD7O8kzUe3\np/xeCdyTmWuAFwOXA5cCm+p5I8CG3pQoSY2yv5PUUbeB6mPA+fX0CHAAWA3cWs+7AVhXVpoktYL9\nnaSOujrll5n3AUTEGHANsAm4JDMn61X2ASt7UqEkNcj+TtJ8dH1RekQ8CdgGvDczr46Id01ZPAbs\n7bSNVatWMDq6pNsStACMj48t6O23wTDsY9uV9ne97uvacEy0oQaV6eW/YRuOh6Zr6Pai9McD24E3\nZean69m3R8REZt4CrAdu7rSdPXv2d9O8FpDdu/f1bdvj42N93X4bLJR9bLoj66de9He97OvacEy0\noQaV69W/YRuOh0HVMFdf1+0I1XnAKuD8iDh0bcHZwGURsQzYRTU0LkkLnf2dpI66vYbqbKoOZbq1\nZeVIUrvY30maD++ULkmSVMhAJUmSVMhAJUmSVMhAJUmSVMhAJUmSVKjrG3tKi1G/nuoOPtldkhYz\nR6gkSZIKGagkSZIKGagkSZIKGagkSZIKGagkSZIKGagkSZIKGagkSZIKGagkSZIKGagkSZIKGagk\nSZIKGagkSZIKGagkSZIK+XBkSRoS/Xz4tzTsHKGSJEkqZKCSJEkqZKCSJEkqZKCSJEkq5EXpkiSp\n9fr1RxVbzj2pJ9txhEqSJKmQgUqSJKmQgUqSJKmQ11BpQfIGhZKkNnGESpIkqZCBSpIkqZCBSpIk\nqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqVDRndIj4njg4syciIinAluBSWAn\ncFZmHiwvUZKaZV8nqZOuR6gi4q3AlcDyetalwKbMXAOMABvKy5OkZtnXSZqPklN+dwOnTnm9Gri1\nnr4BWFewbUlqC/s6SR11Hagy8+PAD6bMGsnMyXp6H7CypDBJagP7OknzUXQN1TRTryEYA/Z2esOq\nVSsYHV3SwxLUNuPjY02X0BrdfhZ+hq3TeF/nMaFe6OVxNHVbp5zzpz3b7iD06nPoZaC6PSImMvMW\nYD1wc6c37Nmzv4fNq412797XdAmt0c1nMT4+tiA+wyH7Bd9oX7dQjgm1X6+Oo4V+TB5J7XP1db0M\nVOcAmyNiGbALuKaH25aktrCvk/QIRYEqM78BnFBP3wms7UFNktQq9nWSOunlCJUkSVogNl50U9Ml\nLCreKV2SJKmQgUqSJKmQgUqSJKmQgUqSJKmQgUqSJKmQgUqSJKmQgUqSJKmQgUqSJKmQgUqSJKmQ\ngUqSJKmQgUqSJKmQgUqSJKmQgUqSJKnQaNMFSCrTryfGbzn3pL5sV5IWI0eoJEmSChmoJEmSChmo\nJEmSCnkNlTQg/brWSZLUPEeoJEmSChmoJEmSChmoJEmSChmoJEmSCnlRuvrKC7GlI+PPjLQwOUIl\nSZJUyEAlSZJUyEAlSZJUyEAlSZJUyEAlSZJUyEAlSZJUyEAlSZJUyEAlSZJUyEAlSZJUyEAlSZJU\nyEAlSZJUyEAlSZJUyEAlSZJUaLSXG4uIo4D3AscCDwL/KTPv6mUbktQ0+zpJ0/V6hOrlwPLM/Cng\nXODdPd6+JLWBfZ2kw/Q6UP0H4C8AMvOvgOf2ePuS1Ab2dZIO0+tA9Vjgu1NePxQRPT2tKEktYF8n\n6TC97gDuBcamvD4qMw/MtvL4+NjIfDd83bs3lNQlSb1kXyfpML0eofos8BKAiDgB+GqPty9JbWBf\nJ+kwvR6h2gacHBGfA0aAM3u8fUlqA/s6SYcZmZycbLoGSZKkBc0be0qSJBUyUEmSJBUyUEmSJBUa\nmvumRMTxwMWZORERTwW2ApPATuCszDzYZH0lImIpsAV4CnA0cAHwNRbXPi4BNgNBtU9vAB5gEe0j\nQEQcA3wZOBk4wCLbP3Vvpp/zzPxkQ7X8y3GamV9voP23Az8HLAPem5lXDbj9pcCHqP4tHgJeO8jP\noQ2/z6bVcBzwHqrP4kHgVZn5T4OsYcq804Bfr59iMFBDMUIVEW8FrgSW17MuBTZl5hqqv9BZ6Dd+\neSVwT70/LwYuZ/Ht4ykAmXkisAm4kEW2j3Un/X7g/nrWoto/FZvp53zgZjhOB93+BPAC4ERgLfCk\nBsp4CTCamS8A3knVHw1EG36fzVDDH1GFmAngWuBtDdRARDwHeA3V5zBwQxGogLuBU6e8Xg3cWk/f\nAKwbeEW99THg/Hp6hGpkY1HtY2Z+Anhd/fLJwF4W2T4ClwBXAN+sXy+2/VOZmX7OmzD9OB20n6W6\n79c24Drg+gZquBMYrR+S/VjgBwNsuw2/z6bX8MuZeUc9PUp19mCgNUTEDwO/C7xlAG3PaCgCVWZ+\nnMMP+JHMPHS/iH3AysFX1TuZeV9m7ouIMeAaqhGcRbWPAJl5ICI+RDW0/Ccson2MiDOA3Zl545TZ\ni2b/VG6Wn/OBmuU4HbQfoXp24i9Snfr/k4gY9IjEfVSn+75OdSnCZYNquA2/z6bXkJn/CBARLwDe\nBPzBIGuoLwm5CvgNqs+gEUMRqGYw9fzyGNVox4IWEU8CbgY+kplXswj3ESAzXw08naoTe9SURQt9\nHzdS3SjyFuA44MPAMVOWL/T9Uw/M8HM+aI84TiPiCQOu4R7gxsz8fmYm1WjI+IBr+M91DU8HjgU+\nFBHLO7ynX1rR10fEK6hGLl+ambsH3Pxq4GnA+4D/Afy7iPjDAdcwtIHq9vo8PMB6YEeDtRSLiMcD\n24G3ZeaWevZi28fT6wtRAfZTdSJfWiz7mJkvzMy19TUIdwCvAm5YLPuncrP8nA/UTMdpZn5rwGXc\nBrw4IkYi4onAo6lC1iDt4eGHY38HWAosGXANhzTe10fEK6lGpiYy8+8G3X5mfjEzn1kfl78MfC0z\nB37qb2j+ym+ac4DNEbEM2EU1fL6QnQesAs6PiEPXWJwNXLaI9vFa4IMR8RmqzustVPu1mP4dp1ts\nx6nKzPRzvj4zG7k4vCmZeX1EvBD4ItWgwFmZ+dCAy/gDYEtE7KD6S8PzMvN7A67hkEb7ifp022XA\n/wGujQiAWzPztwdZRxv46BlJkqRCw3rKT5IkqWcMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIk\nSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUM\nVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIk\nSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUM\nVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVJIkSYUMVOqriNgaEf+lwzorI+Km\nKa/viIgf6n91kobRMPZLEfG8iLiinp6IiJ1N17TYjDZdgASsAp5/6EVmHtdgLZIEi69feibwo00X\nsZgZqIZUREwAvw/8P+DHgfuBM4BvAn8MHAdMAjcA52XmgYg4APwh8NPAo+v510bEGcAvZObL6m0f\n9npKmxuB1wPLgMcBF2Xm+4APAo+KiDuA1cABYDwzvx0R5wO/Us+7E3hTZn4rIm4BPg+cCPwYsAN4\ndWYe7O0nJWlQhrFfiogVwBXACcBe4GsAmXlGRHwD+ALwbOC8uq3LgR+uP4d3Z+aHI+J24Dcz8y8j\n4peBrcCqzLw/IjYD/xd4DbAyIj4IfAh4TET8D+AngOXAazNzx1z/Ppqbp/yG27+n+oF8NlXn8RHg\nMuAe4FnAc4FjgUND40uA72TmauCXgC0RMT6fhiLiMcBrgZdk5nOAVwDvqhefCdyfmcdl5kNT3nMm\nsB54Xl3jTqqO4pB/C0zUtZ4ErD2SnZfUSsPWL51PNbjxE8A64DnTlu/MzGcA1wGfBN5Tt7se+N2I\n+ClgG/Diev0XA3uANRFxFPBS4P3AbwE7MvPMer0fBf6gHnl7P/BfO9SpDgxUw+1/TflGsoXqB/k0\n4PLMnMzMB6m+Oa2f8p7LATLzb4CvAi+cT0OZeR/wMuClEfE7wDuAx3R423rgg5n5vfr1HwE/ExHL\n6tfXZebBzNwH3EX17VLSwjZs/dJLgKvq99xLNXo01aHP4unA8sy8tq79m8DHqQLUNh7+PNYAlwIn\nA8cDd2fmt2Zo9+7M/EI9fQdwTIc61YGBargdmDI9MuW/qY4Cls7ynqOAh6iGnqe+bxnTRMSPUv3Q\n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\nR8TxwMWZORERzwGuB/62Xvy+zPxoRLwWeD3Vc64uyMzr+1KxJElSy3QMVBHxVuB04Hv1rNXApZn5\n7inrPAHLxS/BAAAPIUlEQVR4M/BcYDlwW0R8KjMf7H3JkiRJ7TKfEaq7gVOBj9SvVwMRERuoRqne\nAjwf+GwdoB6MiLuAZwN/3fuSJUmS2qVjoMrMj0fEU6bM+iJwZWZ+OSLeAfw2cAfw3SnrzOv5Vm14\nHMOR3HK+Dbfeb7oG2/cYaLp9SWqjbm7suS0zDz27ahvwHuAzVM+0OmRez7dqw+MY5nvL+Tbcer/p\nGmzfY2C29g1ZkoZdN3/ld2NEPL+e/hngy1SjVmsiYnlErASeAezsUY2SJEmt1s0I1a8B74mIHwDf\nAl6XmfdGxGXADqqQ9o7MfKCHdUqSJLXWvAJVZn4DOKGe/gpw4gzrbAY297I4SZKkhcCHI0vSkNh4\n0U1NlyAtWt4pXZIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCB\nSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIk\nqZCBSpIkqdBo0wVIUptFxBJgMxDAJPAG4AFga/16J3BWZh5sqkZJzXOESpLmdgpAZp4IbAIuBC4F\nNmXmGmAE2NBceZLawEAlSXPIzE8Ar6tfPhnYC6wGbq3n3QCsa6A0SS3iKT9J6iAzD0TEh4D/CPwC\ncHJmTtaL9wEr53r/qlUrGB1d0ucqF5/x8bGmSzgiC63eI+G+dWagkqR5yMxXR8TbgC8Aj5qyaIxq\n1GpWe/bs72dpi9bu3fuaLmHexsfHFlS9R8J9O3z92XjKT5LmEBGnR8Tb65f7gYPAlyJiop63HtjR\nRG2S2sMRKkma27XAByPiM8BS4C3ALmBzRCyrp69psD5JLWCgkqQ5ZOb3gF+aYdHaQdciqb085SdJ\nklTIQCVJklTIQCVJklTIQCVJklTIQCVJklTIQCVJklTIQCVJklTIQCVJklTIQCVJklTIQCVJklTI\nQCVJklTIZ/lJklpp40U39WW7W849qS/b1XCbV6CKiOOBizNzIiKeCmwFJoGdwFmZeTAiXgu8HjgA\nXJCZ1/epZkmSpFbpeMovIt4KXAksr2ddCmzKzDXACLAhIp4AvBk4EfhZ4Pci4uj+lCxJktQu87mG\n6m7g1CmvVwO31tM3AOuA5wOfzcwHM/O7wF3As3tZqCRJUlt1POWXmR+PiKdMmTWSmZP19D5gJfBY\n4LtT1jk0X5KkVvHaLPVDNxelH5wyPQbsBe6tp6fPn9OqVSsYHV3SRQm9Mz4+1nmlLtbtl6ZrsH2P\ngabbl6Q26iZQ3R4RE5l5C7AeuBn4InBhRCwHjgaeQXXB+pz27NnfRfO9tXv3vnmtNz4+Nu91+6Xp\nGmzfY2C29g1ZkoZdN4HqHGBzRCwDdgHXZOZDEXEZsIPquqx3ZOYDPaxTkiSpteYVqDLzG8AJ9fSd\nwNoZ1tkMbO5lcZIkSQuBd0qXJEkqZKCSJEkqZKCSJEkqZKCSJEkqZKCSJEkqZKCSJEkqZKCSJEkq\nZKCSJEkqZKCSJEkqZKCSJEkqZKCSJEkq1M3DkSVpaETEUmAL8BTgaOAC4GvAVmAS2AmclZkHGypR\nUgs4QiVJc3slcE9mrgFeDFwOXApsqueNABsarE9SCxioJGluHwPOr6dHgAPAauDWet4NwLoG6pLU\nIp7yk6Q5ZOZ9ABExBlwDbAIuyczJepV9wMqGypPUEgYqSeogIp4EbAPem5lXR8S7piweA/bO9f5V\nq1YwOrqknyWqBcbHx5ouoW/ct84MVJI0h4h4PLAdeFNmfrqefXtETGTmLcB64Oa5trFnz/7+FqlW\n2L17X9Ml9MX4+Jj7NmX92RioJGlu5wGrgPMj4tC1VGcDl0XEMmAX1alASUPMQCVJc8jMs6kC1HRr\nB12LpPYyUEmS1AMbL7qpL9vdcu5JfdmuesvbJkiSJBUyUEmSJBUyUEmSJBXyGipJklrMa7MWBkeo\nJEmSChmoJEmSChmoJEmSChmoJEmSChmoJEmSChmoJEmSChmoJEmSChmoJEmSChmoJEmSChmoJEmS\nChmoJEmSChmoJEmSChmoJEmSChmoJEmSChmoJEmSChmoJEmSChmoJEmSCo12+8aI+Apwb/3y74EL\nga3AJLATOCszD5YWKEmS1HZdBaqIWA6MZObElHmfBDZl5i0RcQWwAdjWkyolSZJarNsRqmOBFRGx\nvd7GecBq4NZ6+Q3AizBQSZKkIdBtoNoPXAJcCTyNKkCNZOZkvXwfsLK8PEmSpPbrNlDdCdxVB6g7\nI+IeqhGqQ8aAvZ02smrVCkZHl3RZQm+Mj4/1Zd1+aboG2/cYaLp9SWqjbgPVRuBZwBsj4onAY4Ht\nETGRmbcA64GbO21kz579XTbfO7t375vXeuPjY/Net1+arsH2PQZma9+QJWnYdRuorgK2RsRtVH/V\ntxH4NrA5IpYBu4BrelOiJElSu3UVqDLz+8BpMyxaW1aOJEnSwuONPSVJkgoZqCRJkgp1fad0SRoW\nEXE8cHFmTkTEU/GpEJKmcYRKkuYQEW+luufe8nrWpVRPhVgDjFA9FULSkDNQSdLc7gZOnfJ6+lMh\n1g28Ikmt4yk/SZpDZn48Ip4yZdYRPxWiDTcxlqZbaDe27pde7ZuBSpKOzNTrpeb1VIg23MRYmm4h\n3di6X4503+YKX57yk6Qjc3tETNTT64EdDdYiqSUcoZKkI3MOPhVC0jQGKknqIDO/AZxQT9+JT4WQ\nNI2n/CRJkgoZqCRJkgoZqCRJkgp5DZUkSUNo40U39WW7W849qS/bbTtHqCRJkgoZqCRJkgoZqCRJ\nkgoZqCRJkgoZqCRJkgoZqCRJkgoZqCRJkgoZqCRJkgoZqCRJkgoZqCRJkgoZqCRJkgoZqCRJkgoZ\nqCRJkgoZqCRJkgoZqCRJkgqNNl2AJElaPDZedFNftrvl3JP6st1ecYRKkiSpkIFKkiSpkIFKkiSp\nkIFKkiSpkIFKkiSpkIFKkiSpkIFKkiSpkIFKkiSpkIFKkiSp0NDfKX1Y7+gqSZJ6xxEqSZKkQj0d\noYqIo4D3AscCDwL/KTPv6mUbktQ0+zpp8Np+RqnXI1QvB5Zn5k8B5wLv7vH2JakN7OskHabX11D9\nB+AvADLzryLiuT3evqRp2v6tbZGyr5N0mF4HqscC353y+qGIGM3MAz1up/X69UuuX/zlKR0R+zpJ\nh+l1oLoXGJvy+qi5Opjx8bGR+W74undvKKlLPTI+PtZ5JdsfaA2D/tlow2fQAvZ1kg7T62uoPgu8\nBCAiTgC+2uPtS1Ib2NdJOkyvR6i2ASdHxOeAEeDMHm9fktrAvk7SYUYmJyebrkGSJGlB88aekiRJ\nhQxUkiRJhQxUkiRJhVr1cOROj3OIiFOA3wIOAFsyc3MDNfwK8Ja6hq8Cb8zMg4Nqf8p6HwC+k5nn\n9qrt+bQfEc8DLqW6EPdbwCsz84EB1/CrwDnAQ1THwft62f6Udo4HLs7MiWnz+34cdmi/r8dgp/an\nLO/LMTishuFxNp2OqYUoIpYCW4CnAEcDF2TmJxstqkciYgmwGQhgEnhDZu5stqreiYhjgC8DJ2fm\n10u317YRqlkf51AftH8AvAhYC7wuIh4/4BoeBVwA/HRmngisBF42qPan1PF64Fk9brdj+xExQvXD\ndWZmHrpT9JMHWUPtEmAdcCJwTkSs6nUBEfFW4Epg+bT5AzkO52h/EMfgrO1PWd7PY3BYLerH2XQ6\nphawVwL3ZOYa4MXA5Q3X00unANR9zSbgwmbL6Z26L38/cH+vttm2QHXY4xyAqY9zeAZwV2buyczv\nA7cBLxxwDQ8CL8jM/fXrUaCnozMd2iciXgAcT3Ug9MNc7T8duAf4zxFxK/C4zMwB1wDwN1RBYjnV\nSFk//lT1buDUGeYP6jicrf1BHINztT+IY3BYdTruF7pZj6kF7mPA+fX0CNXI8aKQmZ8AXle/fDKw\nt8Fyeu0S4Argm73aYNsC1YyPc5hl2T6qX6oDqyEzD2bmPwFExK8DjwE+Naj2I+JfAb8NvKnHbc6r\nfeBHgBdQfQNbB/xMRPTjmTVz1QCwk2qY9n8D12dmz3/IM/PjwA/mUVtfjsPZ2h/QMThr+wM6BodV\np+N+QZvjZ2pBy8z7MnNfRIwB11CN5CwamXkgIj4EvAf4k6br6YWIOAPYnZk39nK7bQtUcz3OYfqy\nMfqTlud8pEREHBURlwAnAz+fmb0eHZmr/V+kCjV/TnVK4LT6wBhU+/dQjc7syswfUH2b7se36Flr\niIhnAy8F/g3VNQvHRMQv9qGG+dbWr+NwVgM4BucyiGNwWB3R42zUHhHxJOBm4COZeXXT9fRaZr6a\n6gzF5oh4dNP19MBGqhvz3gIcB3w4Ip5QutG2Baq5HuewC3haRDwuIpZRnWb5/IBrgOo0x3Lg5VNO\nuwyk/cy8LDNX1xd0XgRcnZlbB9U+8HfAYyLiqfXrNVSjRL02Vw3fpTrnfX9mPgT8M9Dza6jmMKjj\ncC79PgZnNaBjcFj5OJsFqL6Gcjvwtszc0nQ9vRQRp0fE2+uX+4GD9X8LWma+MDPX1v3YHcCrMvNb\npdtt23DyIx7nEBGnAY/JzA9ExG8AN1IFwS2Z+f8GWQPwJeA1wA7gpogA+KPM3DaI9jPzAz1sp6v2\nI+I1wNX1Beqfy8w/a6CG9wO3RcT3qa7L2NqHGg7TwHE4Y/sM5hictf0BHYPDysfZLEznUX2pOz8i\nDl1LtT4ze3axc4OuBT4YEZ8BlgJvWST71Rc+ekaSJKlQ2075SZIkLTgGKkmSpEIGKkmSpEIGKkmS\npEJt+ys/SQ2Zz3PWIuKPqB75cx/Vn4l/YUDlSVKrGagkHXrO2unA9+ZY52VUD0l9PvA4+ndjV0la\ncAxUkuDh56x9BCAingVcRnU/pHuo7iz874AbM/Mg8O2IeCgintCLG+JJ0kLnNVSSZnrO2mbgrPr0\n358Db6W6o/CLI2JpRPw48ExgMTyGQpKKOUIlaSbPAN5b34l9KfC3mbk9Ip4H3EL1yKEvU41eSdLQ\nc4RK0kyS6vlWE1SjU9dHxNOBf8jME4HfAQ5m5kAfDC1JbeUIlaSZ/BrVE9hHgUmq5wf+H+D3IuKN\nwAPAWQ3WJ0mt4rP8JEmSCnnKT5IkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIkqZCBSpIk\nqZCBSpIkqdD/B+1oMbOjxhXkAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"%matplotlib inline\n",
"\n",
"fig = plt.figure(figsize=(10,10))\n",
"ax = fig.add_subplot(111)\n",
"\n",
"q6 = '''\n",
"select population, population_growth, birth_rate, death_rate\n",
"from facts\n",
"where population != (select max(population) from facts)\n",
"and population != (select min(population) from facts);\n",
"'''\n",
"pd.read_sql_query(q6, conn).hist(ax=ax)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Which countries have the highest population density?"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" name | \n",
" density | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Macau | \n",
" 21168.964286 | \n",
"
\n",
" \n",
" 1 | \n",
" Monaco | \n",
" 15267.500000 | \n",
"
\n",
" \n",
" 2 | \n",
" Singapore | \n",
" 8141.279770 | \n",
"
\n",
" \n",
" 3 | \n",
" Hong Kong | \n",
" 6445.041516 | \n",
"
\n",
" \n",
" 4 | \n",
" Gaza Strip | \n",
" 5191.819444 | \n",
"
\n",
" \n",
" 5 | \n",
" Gibraltar | \n",
" 4876.333333 | \n",
"
\n",
" \n",
" 6 | \n",
" Bahrain | \n",
" 1771.859211 | \n",
"
\n",
" \n",
" 7 | \n",
" Maldives | \n",
" 1319.640940 | \n",
"
\n",
" \n",
" 8 | \n",
" Malta | \n",
" 1310.015823 | \n",
"
\n",
" \n",
" 9 | \n",
" Bermuda | \n",
" 1299.925926 | \n",
"
\n",
" \n",
" 10 | \n",
" Sint Maarten | \n",
" 1167.323529 | \n",
"
\n",
" \n",
" 11 | \n",
" Bangladesh | \n",
" 1138.069143 | \n",
"
\n",
" \n",
" 12 | \n",
" Guernsey | \n",
" 847.179487 | \n",
"
\n",
" \n",
" 13 | \n",
" Jersey | \n",
" 838.741379 | \n",
"
\n",
" \n",
" 14 | \n",
" Barbados | \n",
" 675.823256 | \n",
"
\n",
" \n",
" 15 | \n",
" Mauritius | \n",
" 656.777941 | \n",
"
\n",
" \n",
" 16 | \n",
" Taiwan | \n",
" 650.781712 | \n",
"
\n",
" \n",
" 17 | \n",
" Aruba | \n",
" 623.122222 | \n",
"
\n",
" \n",
" 18 | \n",
" Lebanon | \n",
" 594.682788 | \n",
"
\n",
" \n",
" 19 | \n",
" Saint Martin | \n",
" 588.037037 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" name density\n",
"0 Macau 21168.964286\n",
"1 Monaco 15267.500000\n",
"2 Singapore 8141.279770\n",
"3 Hong Kong 6445.041516\n",
"4 Gaza Strip 5191.819444\n",
"5 Gibraltar 4876.333333\n",
"6 Bahrain 1771.859211\n",
"7 Maldives 1319.640940\n",
"8 Malta 1310.015823\n",
"9 Bermuda 1299.925926\n",
"10 Sint Maarten 1167.323529\n",
"11 Bangladesh 1138.069143\n",
"12 Guernsey 847.179487\n",
"13 Jersey 838.741379\n",
"14 Barbados 675.823256\n",
"15 Mauritius 656.777941\n",
"16 Taiwan 650.781712\n",
"17 Aruba 623.122222\n",
"18 Lebanon 594.682788\n",
"19 Saint Martin 588.037037"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q7 = \"select name, cast(population as float)/cast(area as float) density from facts order by density desc limit 20\"\n",
"pd.read_sql_query(q7, conn)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" population | \n",
" population_growth | \n",
" birth_rate | \n",
" death_rate | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 32564342 | \n",
" 2.32 | \n",
" 38.57 | \n",
" 13.89 | \n",
"
\n",
" \n",
" 1 | \n",
" 3029278 | \n",
" 0.30 | \n",
" 12.92 | \n",
" 6.58 | \n",
"
\n",
" \n",
" 2 | \n",
" 39542166 | \n",
" 1.84 | \n",
" 23.67 | \n",
" 4.31 | \n",
"
\n",
" \n",
" 3 | \n",
" 85580 | \n",
" 0.12 | \n",
" 8.13 | \n",
" 6.96 | \n",
"
\n",
" \n",
" 4 | \n",
" 19625353 | \n",
" 2.78 | \n",
" 38.78 | \n",
" 11.49 | \n",
"
\n",
" \n",
" 5 | \n",
" 92436 | \n",
" 1.24 | \n",
" 15.85 | \n",
" 5.69 | \n",
"
\n",
" \n",
" 6 | \n",
" 43431886 | \n",
" 0.93 | \n",
" 16.64 | \n",
" 7.33 | \n",
"
\n",
" \n",
" 7 | \n",
" 3056382 | \n",
" 0.15 | \n",
" 13.61 | \n",
" 9.34 | \n",
"
\n",
" \n",
" 8 | \n",
" 22751014 | \n",
" 1.07 | \n",
" 12.15 | \n",
" 7.14 | \n",
"
\n",
" \n",
" 9 | \n",
" 8665550 | \n",
" 0.55 | \n",
" 9.41 | \n",
" 9.42 | \n",
"
\n",
" \n",
" 10 | \n",
" 9780780 | \n",
" 0.96 | \n",
" 16.64 | \n",
" 7.07 | \n",
"
\n",
" \n",
" 11 | \n",
" 324597 | \n",
" 0.85 | \n",
" 15.50 | \n",
" 7.05 | \n",
"
\n",
" \n",
" 12 | \n",
" 1346613 | \n",
" 2.41 | \n",
" 13.66 | \n",
" 2.69 | \n",
"
\n",
" \n",
" 13 | \n",
" 168957745 | \n",
" 1.60 | \n",
" 21.14 | \n",
" 5.61 | \n",
"
\n",
" \n",
" 14 | \n",
" 290604 | \n",
" 0.31 | \n",
" 11.87 | \n",
" 8.44 | \n",
"
\n",
" \n",
" 15 | \n",
" 9589689 | \n",
" 0.20 | \n",
" 10.70 | \n",
" 13.36 | \n",
"
\n",
" \n",
" 16 | \n",
" 11323973 | \n",
" 0.76 | \n",
" 11.41 | \n",
" 9.63 | \n",
"
\n",
" \n",
" 17 | \n",
" 347369 | \n",
" 1.87 | \n",
" 24.68 | \n",
" 5.97 | \n",
"
\n",
" \n",
" 18 | \n",
" 10448647 | \n",
" 2.78 | \n",
" 36.02 | \n",
" 8.21 | \n",
"
\n",
" \n",
" 19 | \n",
" 741919 | \n",
" 1.11 | \n",
" 17.78 | \n",
" 6.69 | \n",
"
\n",
" \n",
" 20 | \n",
" 10800882 | \n",
" 1.56 | \n",
" 22.76 | \n",
" 6.52 | \n",
"
\n",
" \n",
" 21 | \n",
" 3867055 | \n",
" 0.13 | \n",
" 8.87 | \n",
" 9.75 | \n",
"
\n",
" \n",
" 22 | \n",
" 2182719 | \n",
" 1.21 | \n",
" 20.96 | \n",
" 13.39 | \n",
"
\n",
" \n",
" 23 | \n",
" 204259812 | \n",
" 0.77 | \n",
" 14.46 | \n",
" 6.58 | \n",
"
\n",
" \n",
" 24 | \n",
" 429646 | \n",
" 1.62 | \n",
" 17.32 | \n",
" 3.52 | \n",
"
\n",
" \n",
" 25 | \n",
" 7186893 | \n",
" 0.58 | \n",
" 8.92 | \n",
" 14.44 | \n",
"
\n",
" \n",
" 26 | \n",
" 18931686 | \n",
" 3.03 | \n",
" 42.03 | \n",
" 11.72 | \n",
"
\n",
" \n",
" 27 | \n",
" 56320206 | \n",
" 1.01 | \n",
" 18.39 | \n",
" 7.96 | \n",
"
\n",
" \n",
" 28 | \n",
" 10742276 | \n",
" 3.28 | \n",
" 42.01 | \n",
" 9.27 | \n",
"
\n",
" \n",
" 29 | \n",
" 15708756 | \n",
" 1.58 | \n",
" 23.83 | \n",
" 7.68 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 210 | \n",
" 112162 | \n",
" 1.33 | \n",
" 12.56 | \n",
" 8.18 | \n",
"
\n",
" \n",
" 211 | \n",
" 148406 | \n",
" 0.43 | \n",
" 13.80 | \n",
" 8.20 | \n",
"
\n",
" \n",
" 212 | \n",
" 39689 | \n",
" 1.51 | \n",
" 13.00 | \n",
" 4.51 | \n",
"
\n",
" \n",
" 213 | \n",
" 9838 | \n",
" 2.95 | \n",
" 14.33 | \n",
" 8.03 | \n",
"
\n",
" \n",
" 214 | \n",
" 1190 | \n",
" 0.03 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 215 | \n",
" 1337 | \n",
" 0.01 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 216 | \n",
" 1872 | \n",
" 0.03 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 217 | \n",
" 15700 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 218 | \n",
" 16418 | \n",
" 2.03 | \n",
" 12.67 | \n",
" 4.57 | \n",
"
\n",
" \n",
" 219 | \n",
" 70196 | \n",
" 0.50 | \n",
" 11.33 | \n",
" 8.23 | \n",
"
\n",
" \n",
" 220 | \n",
" 33454 | \n",
" 2.32 | \n",
" 10.91 | \n",
" 4.99 | \n",
"
\n",
" \n",
" 221 | \n",
" 56092 | \n",
" 2.10 | \n",
" 12.11 | \n",
" 5.53 | \n",
"
\n",
" \n",
" 222 | \n",
" 15700 | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 223 | \n",
" 3361 | \n",
" 0.01 | \n",
" 10.90 | \n",
" 4.90 | \n",
"
\n",
" \n",
" 224 | \n",
" 29258 | \n",
" 0.24 | \n",
" 14.08 | \n",
" 8.37 | \n",
"
\n",
" \n",
" 225 | \n",
" 66080 | \n",
" 0.34 | \n",
" 9.84 | \n",
" 8.78 | \n",
"
\n",
" \n",
" 226 | \n",
" 97294 | \n",
" 0.80 | \n",
" 11.91 | \n",
" 7.68 | \n",
"
\n",
" \n",
" 227 | \n",
" 87545 | \n",
" 0.76 | \n",
" 11.10 | \n",
" 10.06 | \n",
"
\n",
" \n",
" 228 | \n",
" 5241 | \n",
" 0.50 | \n",
" 11.26 | \n",
" 6.30 | \n",
"
\n",
" \n",
" 229 | \n",
" 48 | \n",
" 0.00 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 230 | \n",
" 7795 | \n",
" 0.24 | \n",
" 9.88 | \n",
" 7.44 | \n",
"
\n",
" \n",
" 231 | \n",
" 50280 | \n",
" 2.30 | \n",
" 16.13 | \n",
" 3.10 | \n",
"
\n",
" \n",
" 232 | \n",
" 54343 | \n",
" 0.30 | \n",
" 22.89 | \n",
" 4.75 | \n",
"
\n",
" \n",
" 233 | \n",
" 161785 | \n",
" 0.54 | \n",
" 16.82 | \n",
" 5.12 | \n",
"
\n",
" \n",
" 234 | \n",
" 52344 | \n",
" 2.18 | \n",
" 18.32 | \n",
" 3.71 | \n",
"
\n",
" \n",
" 235 | \n",
" 3598357 | \n",
" 0.60 | \n",
" 10.86 | \n",
" 8.67 | \n",
"
\n",
" \n",
" 236 | \n",
" 103574 | \n",
" 0.59 | \n",
" 10.31 | \n",
" 8.54 | \n",
"
\n",
" \n",
" 237 | \n",
" 1869055 | \n",
" 2.81 | \n",
" 31.11 | \n",
" 3.04 | \n",
"
\n",
" \n",
" 238 | \n",
" 2785366 | \n",
" 1.95 | \n",
" 22.99 | \n",
" 3.50 | \n",
"
\n",
" \n",
" 239 | \n",
" 570866 | \n",
" 2.82 | \n",
" 30.24 | \n",
" 8.34 | \n",
"
\n",
" \n",
"
\n",
"
240 rows × 4 columns
\n",
"
"
],
"text/plain": [
" population population_growth birth_rate death_rate\n",
"0 32564342 2.32 38.57 13.89\n",
"1 3029278 0.30 12.92 6.58\n",
"2 39542166 1.84 23.67 4.31\n",
"3 85580 0.12 8.13 6.96\n",
"4 19625353 2.78 38.78 11.49\n",
"5 92436 1.24 15.85 5.69\n",
"6 43431886 0.93 16.64 7.33\n",
"7 3056382 0.15 13.61 9.34\n",
"8 22751014 1.07 12.15 7.14\n",
"9 8665550 0.55 9.41 9.42\n",
"10 9780780 0.96 16.64 7.07\n",
"11 324597 0.85 15.50 7.05\n",
"12 1346613 2.41 13.66 2.69\n",
"13 168957745 1.60 21.14 5.61\n",
"14 290604 0.31 11.87 8.44\n",
"15 9589689 0.20 10.70 13.36\n",
"16 11323973 0.76 11.41 9.63\n",
"17 347369 1.87 24.68 5.97\n",
"18 10448647 2.78 36.02 8.21\n",
"19 741919 1.11 17.78 6.69\n",
"20 10800882 1.56 22.76 6.52\n",
"21 3867055 0.13 8.87 9.75\n",
"22 2182719 1.21 20.96 13.39\n",
"23 204259812 0.77 14.46 6.58\n",
"24 429646 1.62 17.32 3.52\n",
"25 7186893 0.58 8.92 14.44\n",
"26 18931686 3.03 42.03 11.72\n",
"27 56320206 1.01 18.39 7.96\n",
"28 10742276 3.28 42.01 9.27\n",
"29 15708756 1.58 23.83 7.68\n",
".. ... ... ... ...\n",
"210 112162 1.33 12.56 8.18\n",
"211 148406 0.43 13.80 8.20\n",
"212 39689 1.51 13.00 4.51\n",
"213 9838 2.95 14.33 8.03\n",
"214 1190 0.03 NaN NaN\n",
"215 1337 0.01 NaN NaN\n",
"216 1872 0.03 NaN NaN\n",
"217 15700 NaN NaN NaN\n",
"218 16418 2.03 12.67 4.57\n",
"219 70196 0.50 11.33 8.23\n",
"220 33454 2.32 10.91 4.99\n",
"221 56092 2.10 12.11 5.53\n",
"222 15700 NaN NaN NaN\n",
"223 3361 0.01 10.90 4.90\n",
"224 29258 0.24 14.08 8.37\n",
"225 66080 0.34 9.84 8.78\n",
"226 97294 0.80 11.91 7.68\n",
"227 87545 0.76 11.10 10.06\n",
"228 5241 0.50 11.26 6.30\n",
"229 48 0.00 NaN NaN\n",
"230 7795 0.24 9.88 7.44\n",
"231 50280 2.30 16.13 3.10\n",
"232 54343 0.30 22.89 4.75\n",
"233 161785 0.54 16.82 5.12\n",
"234 52344 2.18 18.32 3.71\n",
"235 3598357 0.60 10.86 8.67\n",
"236 103574 0.59 10.31 8.54\n",
"237 1869055 2.81 31.11 3.04\n",
"238 2785366 1.95 22.99 3.50\n",
"239 570866 2.82 30.24 8.34\n",
"\n",
"[240 rows x 4 columns]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"q7 = '''select population, population_growth, birth_rate, death_rate\n",
"from facts\n",
"where population != (select max(population) from facts)\n",
"and population != (select min(population) from facts);\n",
"'''\n",
"pd.read_sql_query(q7, conn)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}