From 2a9ee9435917879879489ce269533af2aa67b152 Mon Sep 17 00:00:00 2001 From: Serge Rey Date: Mon, 31 Oct 2022 16:05:14 -0700 Subject: [PATCH] ENH: more granularity in example handling --- examples.ipynb | 49 +- libpysal/examples/__init__.py | 40 +- libpysal/examples/base.py | 41 +- libpysal/examples/builtin.py | 26 +- libpysal/examples/remotes.py | 12 +- libpysal/examples/tests/test_available.py | 17 +- notebooks/examples.ipynb | 735 ++++++++++++++++------ 7 files changed, 661 insertions(+), 259 deletions(-) diff --git a/examples.ipynb b/examples.ipynb index 8fe631cba..ac82386be 100644 --- a/examples.ipynb +++ b/examples.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 46, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -25,7 +25,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -83,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 71, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -126,9 +126,21 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: 'libpysal/examples/examples.json'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [5]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mlibpysal/examples/examples.json\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m efile:\n\u001b[1;32m 2\u001b[0m examples \u001b[38;5;241m=\u001b[39m json\u001b[38;5;241m.\u001b[39mload(efile)\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'libpysal/examples/examples.json'" + ] + } + ], "source": [ "with open('libpysal/examples/examples.json', 'r') as efile:\n", " examples = json.load(efile)" @@ -136,18 +148,19 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 6, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "dict_keys(['nat', 'south', 'rio', 'mexico', 'baltimore'])" - ] - }, - "execution_count": 73, - "metadata": {}, - "output_type": "execute_result" + "ename": "NameError", + "evalue": "name 'examples' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [6]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mexamples\u001b[49m\u001b[38;5;241m.\u001b[39mkeys()\n", + "\u001b[0;31mNameError\u001b[0m: name 'examples' is not defined" + ] } ], "source": [ @@ -555,7 +568,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -569,9 +582,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.10.6" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/libpysal/examples/__init__.py b/libpysal/examples/__init__.py index eb02d9e07..46c9246b2 100644 --- a/libpysal/examples/__init__.py +++ b/libpysal/examples/__init__.py @@ -1,5 +1,9 @@ -""" The :mod:`libpysal.examples` module includes a number of small built-in - example datasets as well as functions to fetch larger datasets. +"""The :mod:`libpysal.examples` module provides example datasets. + +The datasets consist of two sets, built-ins which are installed with +this module and remotes that can be downloaded. + +This module provides functionality for working with these example datasets. """ @@ -7,17 +11,20 @@ from .base import example_manager from .remotes import datasets as remote_datasets from .builtin import datasets as builtin_datasets +from typing import Union -from typing import Union +available_datasets = builtin_datasets.copy() +available_datasets.update(remote_datasets.datasets) -__all__ = ["get_path", "available", "explain", "fetch_all"] +__all__ = ["get_path", "available", "explain", "fetch_all", + "get_url", "load_example", "summary"] + +example_manager.add_examples(available_datasets) -example_manager.add_examples(builtin_datasets) def fetch_all(): - """Fetch and install all remote datasets - """ + """Fetch and install all remote datasets.""" datasets = remote_datasets.datasets names = list(datasets.keys()) names.sort() @@ -32,31 +39,27 @@ def fetch_all(): def available() -> pd.DataFrame: """Return a dataframe with available datasets.""" - fetch_all() - return example_manager.available() def explain(name: str) -> str: """Explain a dataset by name.""" - return example_manager.explain(name) +def get_url(name: str) -> str: + """Get url for remote dataset.""" + return example_manager.get_remote_url(name) + + def load_example(example_name: str) -> Union[base.Example, builtin.LocalExample]: """Load example dataset instance.""" example = example_manager.load(example_name) - - if example is None: - fetch_all() # refresh remotes - example = example_manager.load(example_name) - return example def get_path(file_name: str) -> str: """Get the path for a file by searching installed datasets.""" - installed = example_manager.get_installed_names() for name in installed: example = example_manager.datasets[name] @@ -64,3 +67,8 @@ def get_path(file_name: str) -> str: if pth: return pth print("{} is not a file in any installed dataset.".format(file_name)) + + +def summary(): + """Summary of datasets.""" + example_manager.summary() diff --git a/libpysal/examples/base.py b/libpysal/examples/base.py index aa20f7a5f..21f7753a1 100644 --- a/libpysal/examples/base.py +++ b/libpysal/examples/base.py @@ -8,8 +8,6 @@ import io import os import webbrowser -from os import environ, makedirs -from os.path import exists, expanduser, join from platformdirs import user_data_dir import zipfile import requests @@ -35,9 +33,9 @@ def get_data_home(): appname = "pysal" appauthor = "pysal" - data_home = user_data_dir(appname, appauthor) - if not exists(data_home): - makedirs(data_home, exist_ok=True) + data_home = user_data_dir(appname, appauthor) + if not os.path.exists(data_home): + os.makedirs(data_home, exist_ok=True) return data_home @@ -122,7 +120,9 @@ class Example: """ - def __init__(self, name, description, n, k, download_url, explain_url): + def __init__(self, name, description, n, k, download_url, + explain_url): + """Initialze Example.""" self.name = name self.description = description self.n = n @@ -134,12 +134,10 @@ def __init__(self, name, description, n, k, download_url, explain_url): def get_local_path(self, path=get_data_home()) -> str: """Get the local path for example.""" - - return join(path, self.root) + return os.path.join(path, self.root) def get_path(self, file_name, verbose=True) -> Union[str, None]: """Get the path for local file.""" - file_list = self.get_file_list() for file_path in file_list: base_name = os.path.basename(file_path) @@ -151,7 +149,6 @@ def get_path(self, file_name, verbose=True) -> Union[str, None]: def downloaded(self) -> bool: """Check if the example has already been installed.""" - path = self.get_local_path() if os.path.isdir(path): self.installed = True @@ -180,7 +177,7 @@ def download(self, path=get_data_home()): if not self.downloaded(): request = requests.get(self.download_url) archive = zipfile.ZipFile(io.BytesIO(request.content)) - target = join(path, self.root) + target = os.path.join(path, self.root) print("Downloading {} to {}".format(self.name, target)) archive.extractall(path=target) self.zipfile = archive @@ -213,8 +210,8 @@ def load(self, file_name) -> io.FileIO: class Examples: """Manager for pysal example datasets.""" - def __init__(self): - self.datasets = {} + def __init__(self, datasets={}): + self.datasets = datasets def add_examples(self, examples): """Add examples to the set of datasets available.""" @@ -273,5 +270,23 @@ def get_installed_names(self) -> list: ds = self.datasets return [name for name in ds if ds[name].installed] + def get_remote_url(self, name): + if name in self.datasets: + try: + return self.datasets[name].download_url + except: + print(f'{name} is a built-in dataset, no url.') + else: + print(f'{name} is not an available dataset.') + + + def summary(self): + """Report on datasets.""" + available = self.available() + n = available.shape[0] + n_installed = available.Installed.sum() + n_remote = n - n_installed + print(f'{n} datasets available, {n_installed} installed, {n_remote} remote.') + example_manager = Examples() diff --git a/libpysal/examples/builtin.py b/libpysal/examples/builtin.py index 6fe40c689..69e788490 100644 --- a/libpysal/examples/builtin.py +++ b/libpysal/examples/builtin.py @@ -1,5 +1,4 @@ -"""Handle local builtin datasets. -""" +"""Handle local builtin datasets.""" import os from .base import get_list_of_files @@ -38,11 +37,30 @@ class LocalExample: - """ - Builtin pysal example dataset + """Builtin pysal example dataset. + + Attributes + ---------- + name : str + Example name + dirname : str + Path holding example files + installed : boolean + If True, example is installed locally, if false it is remote. + description : str + Summary of the properties of the example """ def __init__(self, name, dirname): + """Initialize LocalExample with name and dirname. + + Parameters + --------- + name : str + example name + dirname: str + path to directory holding example files + """ self.name = name self.dirname = dirname self.installed = True diff --git a/libpysal/examples/remotes.py b/libpysal/examples/remotes.py index 213b2684c..f4aaf2a47 100644 --- a/libpysal/examples/remotes.py +++ b/libpysal/examples/remotes.py @@ -1,5 +1,4 @@ -"""Handle remote datasets. -""" +"""Handle remote datasets.""" from bs4 import BeautifulSoup import requests @@ -16,7 +15,6 @@ def poll_remotes(): Example datasets keyed by the dataset name. """ - # Geoda Center Data Sets url = "https://geodacenter.github.io/data-and-lab//" @@ -95,17 +93,19 @@ def poll_remotes(): return datasets -#datasets = poll_remotes() - class Remotes: + """Remote datasets.""" + def __init__(self): + """Initialize Remotes.""" self._datasets = None @property def datasets(self): + """Create dictionary of remotes.""" if self._datasets is None: self._datasets = poll_remotes() return self._datasets -datasets = Remotes() +datasets = Remotes() diff --git a/libpysal/examples/tests/test_available.py b/libpysal/examples/tests/test_available.py index 1592c39c8..e8e6d7e6c 100644 --- a/libpysal/examples/tests/test_available.py +++ b/libpysal/examples/tests/test_available.py @@ -3,19 +3,21 @@ import os import platform import unittest -import numpy as np import pandas -from .. import available +from .. import (available, get_url, load_example) + from ..base import get_data_home os_name = platform.system() + class Testexamples(unittest.TestCase): def test_available(self): examples = available() self.assertEqual(type(examples), pandas.core.frame.DataFrame) + self.assertEqual(examples.shape, (98, 3)) def test_data_home(self): pth = get_data_home() @@ -37,6 +39,17 @@ def test_data_home(self): self.assertEqual(heads[-2], 'Local') self.assertEqual(heads[-3], 'AppData') + def test_get_url(self): + self.assertEqual(get_url('10740'), None) + url = 'https://geodacenter.github.io/data-and-lab//data/baltimore.zip' + self.assertEqual(get_url('Baltimore'), url) + + def test_load_example(self): + taz = load_example("taz") + flist = taz.get_file_list() + self.assertEquals(len(flist), 4) + + suite = unittest.TestLoader().loadTestsFromTestCase(Testexamples) if __name__ == "__main__": diff --git a/notebooks/examples.ipynb b/notebooks/examples.ipynb index ed6208903..5905f568d 100644 --- a/notebooks/examples.ipynb +++ b/notebooks/examples.ipynb @@ -46,7 +46,7 @@ { "data": { "text/plain": [ - "'/home/serge/Dropbox/p/pysal/src/subpackages/libpysal/libpysal/examples/mexico/mexicojoin.dbf'" + "'/home/serge/Documents/p/pysal/src/subpackages/libpysal/libpysal/examples/mexico/mexicojoin.dbf'" ] }, "execution_count": 2, @@ -132,30 +132,83 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## `available` is updated" + "The function `available` is also available but has been updated to return a Pandas DataFrame. In addition to the builtin datasets, `available` will report on what datasets are available, either as builtin or remotes." ] }, { - "cell_type": "markdown", + "cell_type": "code", + "execution_count": 5, "metadata": {}, + "outputs": [], "source": [ - "The function `available` is also available but has been updated to return a Pandas DataFrame. In addition to the builtin datasets, `available` will fetch all available remote datasets that have not already been downloaded, and report if any remotes are unavailable:" + "from libpysal.examples import available" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "df = available()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(98, 3)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Example not downloaded: Chicago parcels\n", - "Example not downloaded: Chile Migration\n", - "Example not downloaded: Spirals\n" + "98 datasets available, 27 installed, 71 remote.\n" ] - }, + } + ], + "source": [ + "libpysal.examples.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that there are 98 total datasets available for use with PySAL. On an initial install (i.e., `examples` has not been used yet), 27 of these are builtin datasets and 71 are remote. The latter can be downloaded and installed." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Downloading Remote Datasets" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ { "data": { "text/html": [ @@ -193,106 +246,227 @@ " 1\n", " AirBnB\n", " Airbnb rentals, socioeconomics, and crime in C...\n", - " True\n", + " False\n", " \n", " \n", " 2\n", " Atlanta\n", " Atlanta, GA region homicide counts and rates\n", - " True\n", + " False\n", " \n", " \n", " 3\n", " Baltimore\n", " Baltimore house sales prices and hedonics\n", - " True\n", + " False\n", " \n", " \n", " 4\n", " Bostonhsg\n", " Boston housing and neighborhood data\n", - " True\n", - " \n", - " \n", - " ...\n", - " ...\n", - " ...\n", - " ...\n", - " \n", - " \n", - " 93\n", - " taz\n", - " Traffic Analysis Zones in So. California\n", - " True\n", - " \n", - " \n", - " 94\n", - " tokyo\n", - " Tokyo Mortality data\n", - " True\n", - " \n", - " \n", - " 95\n", - " us_income\n", - " Per-capita income for the lower 48 US states 1...\n", - " True\n", - " \n", - " \n", - " 96\n", - " virginia\n", - " Virginia counties shapefile\n", - " True\n", - " \n", - " \n", - " 97\n", - " wmat\n", - " Datasets used for spatial weights testing\n", - " True\n", + " False\n", " \n", " \n", "\n", - "

98 rows × 3 columns

\n", "" ], "text/plain": [ - " Name Description Installed\n", - "0 10740 Albuquerque, New Mexico, Census 2000 Tract Dat... True\n", - "1 AirBnB Airbnb rentals, socioeconomics, and crime in C... True\n", - "2 Atlanta Atlanta, GA region homicide counts and rates True\n", - "3 Baltimore Baltimore house sales prices and hedonics True\n", - "4 Bostonhsg Boston housing and neighborhood data True\n", - ".. ... ... ...\n", - "93 taz Traffic Analysis Zones in So. California True\n", - "94 tokyo Tokyo Mortality data True\n", - "95 us_income Per-capita income for the lower 48 US states 1... True\n", - "96 virginia Virginia counties shapefile True\n", - "97 wmat Datasets used for spatial weights testing True\n", - "\n", - "[98 rows x 3 columns]" + " Name Description Installed\n", + "0 10740 Albuquerque, New Mexico, Census 2000 Tract Dat... True\n", + "1 AirBnB Airbnb rentals, socioeconomics, and crime in C... False\n", + "2 Atlanta Atlanta, GA region homicide counts and rates False\n", + "3 Baltimore Baltimore house sales prices and hedonics False\n", + "4 Bostonhsg Boston housing and neighborhood data False" ] }, - "execution_count": 21, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "from libpysal.examples import available\n", - "available()" + "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Working with an example dataset\n", + "The remote `AirBnB` can be installed by calling `load_example`:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading AirBnB to /home/serge/.local/share/pysal/AirBnB\n" + ] + } + ], + "source": [ + "airbnb = libpysal.examples.load_example(\"AirBnB\")" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "98 datasets available, 28 installed, 70 remote.\n" + ] + } + ], + "source": [ + "libpysal.examples.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we see that the number of remotes as declined by one and the number of installed has increased by 1." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Trying to load an example that doesn't exist will return None and alert the user:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Example not available: dataset42\n" + ] + } + ], + "source": [ + "libpysal.examples.load_example('dataset42')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Getting remote urls\n", "\n", - "`explain` will render maps for an example if available" + "If the url, rather than the dataset, is needed this can be obtained on a remote with `get_url`. \n", + "As the `Baltimore` dataset has not yet been downloaded in this example, we can grab it's url:" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'https://geodacenter.github.io/data-and-lab//data/baltimore.zip'" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "balt_url = libpysal.examples.get_url('Baltimore')\n", + "balt_url" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Explaining a dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "taz\n", + "===\n", + "\n", + "Dataset used for regionalization\n", + "--------------------------------\n", + "\n", + "* taz.dbf: attribute data. (k=14)\n", + "* taz.shp: Polygon shapefile. (n=4109)\n", + "* taz.shx: spatial index.\n", + "\n" + ] + } + ], + "source": [ + "libpysal.examples.explain('taz')" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading taz to /home/serge/.local/share/pysal/taz\n" + ] + } + ], + "source": [ + "taz = libpysal.examples.load_example('taz')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['/home/serge/.local/share/pysal/taz/taz-master/taz.dbf',\n", + " '/home/serge/.local/share/pysal/taz/taz-master/taz.shp',\n", + " '/home/serge/.local/share/pysal/taz/taz-master/README.md',\n", + " '/home/serge/.local/share/pysal/taz/taz-master/taz.shx']" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "taz.get_file_list()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -302,50 +476,48 @@ " \n", " " ], "text/plain": [ - "" + "" ] }, - "execution_count": 22, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "from libpysal.examples import explain\n", - "explain('Tampa1')" + "libpysal.examples.explain('Baltimore')" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 18, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading Baltimore to /home/serge/.local/share/pysal/Baltimore\n" + ] + } + ], "source": [ - "from libpysal.examples import load_example\n", - "tampa1 = load_example('Tampa1')" + "balt = libpysal.examples.load_example('Baltimore')" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 19, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Example not downloaded: Chicago parcels\n", - "Example not downloaded: Chile Migration\n", - "Example not downloaded: Spirals\n" - ] - }, { "data": { "text/html": [ @@ -389,7 +561,7 @@ " 2\n", " Atlanta\n", " Atlanta, GA region homicide counts and rates\n", - " True\n", + " False\n", " \n", " \n", " 3\n", @@ -401,7 +573,7 @@ " 4\n", " Bostonhsg\n", " Boston housing and neighborhood data\n", - " True\n", + " False\n", " \n", " \n", " ...\n", @@ -448,9 +620,9 @@ " Name Description Installed\n", "0 10740 Albuquerque, New Mexico, Census 2000 Tract Dat... True\n", "1 AirBnB Airbnb rentals, socioeconomics, and crime in C... True\n", - "2 Atlanta Atlanta, GA region homicide counts and rates True\n", + "2 Atlanta Atlanta, GA region homicide counts and rates False\n", "3 Baltimore Baltimore house sales prices and hedonics True\n", - "4 Bostonhsg Boston housing and neighborhood data True\n", + "4 Bostonhsg Boston housing and neighborhood data False\n", ".. ... ... ...\n", "93 taz Traffic Analysis Zones in So. California True\n", "94 tokyo Tokyo Mortality data True\n", @@ -461,18 +633,78 @@ "[98 rows x 3 columns]" ] }, - "execution_count": 8, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "available()" + "libpysal.examples.available()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Working with an example dataset\n", + "\n", + "`explain` will render maps for an example if available" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from libpysal.examples import explain\n", + "explain('Tampa1')" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading Tampa1 to /home/serge/.local/share/pysal/Tampa1\n" + ] + } + ], + "source": [ + "from libpysal.examples import load_example\n", + "tampa1 = load_example('Tampa1')" + ] + }, + { + "cell_type": "code", + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -481,7 +713,7 @@ "True" ] }, - "execution_count": 9, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -492,96 +724,96 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['/home/serge/pysal_data/Tampa1/__MACOSX/._TampaMSA',\n", - " '/home/serge/pysal_data/Tampa1/__MACOSX/TampaMSA/._tampa_counties.sbn',\n", - " '/home/serge/pysal_data/Tampa1/__MACOSX/TampaMSA/._tampa_final_census2.sbn',\n", - " '/home/serge/pysal_data/Tampa1/__MACOSX/TampaMSA/._2000 Census Data Variables_Documentation.pdf',\n", - " '/home/serge/pysal_data/Tampa1/__MACOSX/TampaMSA/._tampa_final_census2.sbx',\n", - " '/home/serge/pysal_data/Tampa1/__MACOSX/TampaMSA/._tampa_counties.sbx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.prj',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.shp',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/2000 Census Data Variables_Documentation.pdf',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.kml',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.gpkg',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.shx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.mif',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.dbf',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.sbx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.shp',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.sbn',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.sqlite',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.sbx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.gpkg',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.shx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.mid',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.mid',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByBackwardLabel.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000002.gdbtable',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.gdbindexes',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/gdb',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.gdbtablx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.gdbindexes',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.gdbtablx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.gdbtablx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.FDO_UUID.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByName.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.CatItemsByPhysicalName.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.CatItemTypesByUUID.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.FDO_UUID.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.CatRelsByDestinationID.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.gdbindexes',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.gdbtable',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.spx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.gdbtable',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.CatItemTypesByName.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.gdbtable',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByUUID.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.gdbtable',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.spx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.spx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000003.gdbtablx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.gdbtablx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.CatRelsByType.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.gdbtable',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.CatItemTypesByParentTypeID.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.CatItemsByType.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.gdbindexes',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.gdbtablx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.CatRelsByOriginID.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000003.gdbtable',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000002.gdbtablx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.gdbtable',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.gdbindexes',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.gdbindexes',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000003.gdbindexes',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByDestItemTypeID.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/timestamps',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.gdbtablx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.TablesByName.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.gdbtablx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByOriginItemTypeID.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByForwardLabel.atx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.gdbindexes',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.gdbtable',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.mif',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.dbf',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.xlsx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.kml',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.sbn',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.prj',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.sqlite',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.geojson',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_final_census2.xlsx',\n", - " '/home/serge/pysal_data/Tampa1/TampaMSA/tampa_counties.geojson']" + "['/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.shp',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.prj',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/2000 Census Data Variables_Documentation.pdf',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.kml',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.dbf',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.kml',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.sbn',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.mif',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.prj',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.sqlite',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.shx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.sbn',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.sbx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.gdbtablx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.gdbtable',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.FDO_UUID.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000002.gdbtable',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByName.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.gdbtablx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000003.gdbtable',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.gdbindexes',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000002.gdbtablx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.CatRelsByType.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.spx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.gdbtable',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByDestItemTypeID.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.gdbtable',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/timestamps',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.CatItemTypesByName.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000003.gdbtablx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.gdbtable',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.gdbindexes',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.gdbtablx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.CatItemTypesByUUID.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.CatItemTypesByParentTypeID.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.CatItemsByType.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.gdbindexes',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByForwardLabel.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.gdbtable',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.gdbtablx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.FDO_UUID.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByUUID.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.gdbindexes',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.TablesByName.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.gdbtablx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.gdbtable',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.CatRelsByOriginID.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000003.gdbindexes',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.gdbindexes',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.spx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.gdbtablx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.CatItemsByPhysicalName.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.gdbtablx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByOriginItemTypeID.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.gdbtable',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/gdb',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.gdbindexes',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.spx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByBackwardLabel.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.gdbindexes',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.CatRelsByDestinationID.atx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.mid',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.sbx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.geojson',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.mid',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.xlsx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.mif',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.dbf',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.shp',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.gpkg',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.gpkg',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.xlsx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.shx',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.sqlite',\n", + " '/home/serge/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.geojson',\n", + " '/home/serge/.local/share/pysal/Tampa1/__MACOSX/TampaMSA/._2000 Census Data Variables_Documentation.pdf',\n", + " '/home/serge/.local/share/pysal/Tampa1/__MACOSX/TampaMSA/._tampa_counties.sbn',\n", + " '/home/serge/.local/share/pysal/Tampa1/__MACOSX/TampaMSA/._tampa_final_census2.sbn',\n", + " '/home/serge/.local/share/pysal/Tampa1/__MACOSX/TampaMSA/._tampa_counties.sbx',\n", + " '/home/serge/.local/share/pysal/Tampa1/__MACOSX/TampaMSA/._tampa_final_census2.sbx',\n", + " '/home/serge/.local/share/pysal/Tampa1/__MACOSX/._TampaMSA']" ] }, - "execution_count": 10, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -592,7 +824,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ @@ -601,16 +833,16 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 12, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -621,7 +853,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -630,7 +862,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -639,7 +871,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 28, "metadata": {}, "outputs": [ { @@ -648,20 +880,18 @@ "" ] }, - "execution_count": 15, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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gwf5OI1m+Pw51dfX45FHHsGHH36IkJAQe4feKj7PqaXX+Pj4QCIR+AWSs7OiUFy+fJkNHz6ccRzHxGIxCwsLY6dOnWp1/0OHDjGpVMp27NjR5nFramrYtGnTGAAmkUiYj4/PLV9jL3yc0+HDhxkA5u/vz7788kt28uRJ9uyzzzKZTMYyMzN5OIvm+Po5zZs3jz355JO2r+GglhJj/J3T9SoqKliPHj3YK6+8YoeI+eXWSem1115jANp8HD9+nFksFnb33XezO++8kx08eJClpqayZ555hoWHh7Pi4uKbjnv27FkWFBTE3njjjVvGsHDhQjZy5Ei2a9culpaWxv7+978zlUrF0tPTXfKcfvvtNwaALV26tNn2gQMHspdeesklz2nLli0sJiaG6XQ627auJiVnn9P1NBoNGzVqFJs+fTozGAydPidHceukVF5ezi5cuNDmo6Ghge3atYuJRCKm0WiavT4mJoYlJyc323bu3DmmVqvZyy+/fMv3z8rKYgDY2bNnm22/44472J/+9CeXPKecnBwGgP33v/9ttv3BBx9kjz76qEue0+LFi22tlKsPAEwkErGJEye65DldpdVq2ZgxY9gdd9zBGhoaOnUujibwi8uuCQwMRGBg4C33q6+vB4Cb7h6JRCJYLBbb1+fOncPtt9+Oxx57DMuXL+/0ccVicbPjdoSzz6lnz54ICwtDRkZGs+2ZmZm4884723MKN3H2Ob300kt46qmnmm0bOHAg3nvvPcycObM9p3ATZ58TYC0ON23aNMjlcqSkpEChUHTgDJzI2VlRCMrLy1lAQAC77777WFpaGsvIyGDPP/88k0qlLC0tjTF2rdk8e/ZsVlJSYnuUlZXZjnP58mXWr18/dvToUcYYYwaDgcXExLDx48ezo0ePsqysLLZixQrGcRzbunWrS54TY4y99957zMfHh3333Xfs0qVLbNmyZUyhULCsrCyXPacbwYF33/g4J61Wy0aNGsUGDhzIsrKymr3OZDLxfl5dQUmpyfHjx9nUqVOZv78/UyqVbPTo0Wzbtm2251vrI4iKirLtk5ubywCwPXv22LZlZmay++67j6nVaubp6ckGDRp00xABVzsnxhhLTk5mERERzNPTk40ZM4YdOHDA5c/peo5KSozxc0579uxptS8rNzfXIefVWVS6hBAiKDROiRAiKJSUCCGCQkmJECIolJQIIYJCSYkQIiiUlAghgkJJiRAiKJSUCCGCQkmJECIolJQIIYJCSYkQIiiUlAghgvL/hODAVLRXoYoAAAAASUVORK5CYII=\n", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -681,7 +911,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -714,7 +944,7 @@ } ], "source": [ - "explain('Rio Grande do Sul')" + "libpysal.examples.explain('Rio Grande do Sul')" ] }, { @@ -726,17 +956,122 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading Rio Grande do Sul to /home/serge/.local/share/pysal/Rio_Grande_do_Sul\n" + ] + } + ], "source": [ - "rio = load_example('Rio Grande do Sul')" + "rio = libpysal.examples.load_example('Rio Grande do Sul')" ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'AirBnB': ,\n", + " 'Atlanta': ,\n", + " 'Baltimore': ,\n", + " 'Bostonhsg': ,\n", + " 'Buenosaires': ,\n", + " 'Charleston1': ,\n", + " 'Charleston2': ,\n", + " 'Chicago Health': ,\n", + " 'Chicago commpop': ,\n", + " 'Chicago parcels': ,\n", + " 'Chile Labor': ,\n", + " 'Chile Migration': ,\n", + " 'Cincinnati': ,\n", + " 'Cleveland': ,\n", + " 'Columbus': ,\n", + " 'Elections': ,\n", + " 'Grid100': ,\n", + " 'Groceries': ,\n", + " 'Guerry': ,\n", + " 'Health+': ,\n", + " 'Health Indicators': ,\n", + " 'Hickory1': ,\n", + " 'Hickory2': ,\n", + " 'Home Sales': ,\n", + " 'Houston': ,\n", + " 'Juvenile': ,\n", + " 'Lansing1': ,\n", + " 'Lansing2': ,\n", + " 'Laozone': ,\n", + " 'LasRosas': ,\n", + " 'Liquor Stores': ,\n", + " 'Malaria': ,\n", + " 'Milwaukee1': ,\n", + " 'Milwaukee2': ,\n", + " 'NCOVR': ,\n", + " 'Natregimes': ,\n", + " 'NDVI': ,\n", + " 'Nepal': ,\n", + " 'NYC': ,\n", + " 'NYC Earnings': ,\n", + " 'NYC Education': ,\n", + " 'NYC Neighborhoods': ,\n", + " 'NYC Socio-Demographics': ,\n", + " 'Ohiolung': ,\n", + " 'Orlando1': ,\n", + " 'Orlando2': ,\n", + " 'Oz9799': ,\n", + " 'Phoenix ACS': ,\n", + " 'Pittsburgh': ,\n", + " 'Police': ,\n", + " 'Sacramento1': ,\n", + " 'Sacramento2': ,\n", + " 'SanFran Crime': ,\n", + " 'Savannah1': ,\n", + " 'Savannah2': ,\n", + " 'Scotlip': ,\n", + " 'Seattle1': ,\n", + " 'Seattle2': ,\n", + " 'SIDS': ,\n", + " 'SIDS2': ,\n", + " 'Snow': ,\n", + " 'South': ,\n", + " 'Spirals': ,\n", + " 'StLouis': ,\n", + " 'Tampa1': ,\n", + " 'US SDOH': ,\n", + " 'Rio Grande do Sul': ,\n", + " 'nyc_bikes': ,\n", + " 'taz': ,\n", + " 'clearwater': ,\n", + " 'newHaven': }" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "libpysal.examples.remote_datasets.datasets # a listing of all remotes" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -750,7 +1085,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.10.6" } }, "nbformat": 4,