Datasets for use with libpysal¶
As of version 4.2, libpysal has refactored the examples package to:
reduce the size of the source installation
allow the use of remote datasets from the Center for Spatial Data Science at the Unversity of Chicago, and other remotes
This notebook highlights the new functionality
Backwards compatibility is maintained¶
If you were familiar with previous versions of libpysal, the newest version maintains backwards compatibility so any code that relied on the previous API should work.
For example:
from libpysal.examples import get_path
get_path("mexicojoin.dbf")
'/home/runner/micromamba/envs/docs/lib/python3.14/site-packages/libpysal/examples/mexico/mexicojoin.dbf'
An important thing to note here is that the path to the file for this particular example is within the source distribution that was installed. Such an example data set is now referred to as a builtin dataset.
import libpysal
dbf = libpysal.io.open(get_path("mexicojoin.dbf"))
dbf.header
['POLY_ID',
'AREA',
'CODE',
'NAME',
'PERIMETER',
'ACRES',
'HECTARES',
'PCGDP1940',
'PCGDP1950',
'PCGDP1960',
'PCGDP1970',
'PCGDP1980',
'PCGDP1990',
'PCGDP2000',
'HANSON03',
'HANSON98',
'ESQUIVEL99',
'INEGI',
'INEGI2',
'MAXP',
'GR4000',
'GR5000',
'GR6000',
'GR7000',
'GR8000',
'GR9000',
'LPCGDP40',
'LPCGDP50',
'LPCGDP60',
'LPCGDP70',
'LPCGDP80',
'LPCGDP90',
'LPCGDP00',
'TEST']
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.
from libpysal.examples import available
df = available()
df.shape
(99, 3)
libpysal.examples.summary()
99 datasets available, 27 installed, 72 remote.
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.
Downloading Remote Datasets¶
df.head()
| Name | Description | Installed | |
|---|---|---|---|
| 0 | 10740 | Albuquerque, New Mexico, Census 2000 Tract Dat... | True |
| 1 | AirBnB | Airbnb rentals, socioeconomics, and crime in C... | False |
| 2 | Atlanta | Atlanta, GA region homicide counts and rates | False |
| 3 | Baltimore | Baltimore house sales prices and hedonics | False |
| 4 | Bostonhsg | Boston housing and neighborhood data | False |
The remote AirBnB can be installed by calling load_example:
airbnb = libpysal.examples.load_example("AirBnB")
Downloading AirBnB to /home/runner/.local/share/pysal/AirBnB
libpysal.examples.summary()
99 datasets available, 28 installed, 71 remote.
And we see that the number of remotes as declined by one and the number of installed has increased by 1.
Trying to load an example that doesn’t exist will return None and alert the user:
libpysal.examples.load_example("dataset42")
Example not available: dataset42
Getting remote urls¶
If the url, rather than the dataset, is needed this can be obtained on a remote with get_url.
As the Baltimore dataset has not yet been downloaded in this example, we can grab it’s url:
balt_url = libpysal.examples.get_url("Baltimore")
balt_url
'https://geodacenter.github.io/data-and-lab//data/baltimore.zip'
Explaining a dataset¶
libpysal.examples.explain("taz")
taz
===
Dataset used for regionalization
--------------------------------
* taz.dbf: attribute data. (k=14)
* taz.shp: Polygon shapefile. (n=4109)
* taz.shx: spatial index.
taz = libpysal.examples.load_example("taz")
Downloading taz to /home/runner/.local/share/pysal/taz
taz.get_file_list()
['/home/runner/.local/share/pysal/taz/taz-master/taz.shp',
'/home/runner/.local/share/pysal/taz/taz-master/taz.shx',
'/home/runner/.local/share/pysal/taz/taz-master/taz.dbf',
'/home/runner/.local/share/pysal/taz/taz-master/README.md']
libpysal.examples.explain("Baltimore")
balt = libpysal.examples.load_example("Baltimore")
Downloading Baltimore to /home/runner/.local/share/pysal/Baltimore
libpysal.examples.available()
| Name | Description | Installed | |
|---|---|---|---|
| 0 | 10740 | Albuquerque, New Mexico, Census 2000 Tract Dat... | True |
| 1 | AirBnB | Airbnb rentals, socioeconomics, and crime in C... | True |
| 2 | Atlanta | Atlanta, GA region homicide counts and rates | False |
| 3 | Baltimore | Baltimore house sales prices and hedonics | True |
| 4 | Bostonhsg | Boston housing and neighborhood data | False |
| ... | ... | ... | ... |
| 94 | taz | Traffic Analysis Zones in So. California | True |
| 95 | tokyo | Tokyo Mortality data | True |
| 96 | us_income | Per-capita income for the lower 48 US states 1... | True |
| 97 | virginia | Virginia counties shapefile | True |
| 98 | wmat | Datasets used for spatial weights testing | True |
99 rows × 3 columns
Working with an example dataset¶
explain will render maps for an example if available
from libpysal.examples import explain
explain("Tampa1")
from libpysal.examples import load_example
tampa1 = load_example("Tampa1")
Downloading Tampa1 to /home/runner/.local/share/pysal/Tampa1
tampa1.installed
True
tampa1.get_file_list()
['/home/runner/.local/share/pysal/Tampa1/__MACOSX/TampaMSA/._tampa_counties.sbx',
'/home/runner/.local/share/pysal/Tampa1/__MACOSX/TampaMSA/._2000 Census Data Variables_Documentation.pdf',
'/home/runner/.local/share/pysal/Tampa1/__MACOSX/TampaMSA/._tampa_counties.sbn',
'/home/runner/.local/share/pysal/Tampa1/__MACOSX/TampaMSA/._tampa_final_census2.sbn',
'/home/runner/.local/share/pysal/Tampa1/__MACOSX/TampaMSA/._tampa_final_census2.sbx',
'/home/runner/.local/share/pysal/Tampa1/__MACOSX/._TampaMSA',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.xlsx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.shx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.gpkg',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.prj',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.sbn',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.mid',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/2000 Census Data Variables_Documentation.pdf',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.shp',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.gdbtable',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.gdbindexes',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.CatItemTypesByName.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.spx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.FDO_UUID.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.spx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000002.gdbtable',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.gdbtable',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.gdbtable',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.spx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.gdbindexes',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.gdbindexes',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/gdb',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.gdbtable',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByName.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.gdbtablx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.gdbindexes',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.TablesByName.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.gdbindexes',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.CatRelsByOriginID.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.CatRelsByDestinationID.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.CatRelsByType.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.CatItemsByPhysicalName.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByOriginItemTypeID.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.gdbtable',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a0000000a.gdbindexes',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000009.gdbtablx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.gdbtablx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/timestamps',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.gdbtable',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000006.gdbtablx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000003.gdbindexes',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.gdbtablx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByUUID.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.CatItemsByType.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000003.gdbtablx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.CatItemTypesByParentTypeID.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000005.CatItemTypesByUUID.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.gdbtablx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000002.gdbtablx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.FDO_UUID.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByForwardLabel.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000004.gdbtablx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000001.gdbtable',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.gdbindexes',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByBackwardLabel.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000003.gdbtable',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/TampaMSA.gdb/a00000007.CatRelTypesByDestItemTypeID.atx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.gpkg',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.mid',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.prj',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.shp',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.geojson',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.sbx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.kml',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.xlsx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.sqlite',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.shx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.dbf',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.kml',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.mif',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.dbf',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.sbx',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_counties.sbn',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.mif',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.sqlite',
'/home/runner/.local/share/pysal/Tampa1/TampaMSA/tampa_final_census2.geojson']
tampa_counties_shp = tampa1.load("tampa_counties.shp")
tampa_counties_shp
<libpysal.io.iohandlers.pyShpIO.PurePyShpWrapper at 0x7f79175b4980>
import geopandas
tampa_df = geopandas.read_file(tampa1.get_path("tampa_counties.shp"))
%matplotlib inline
tampa_df.plot()
<Axes: xlabel='Geodetic longitude [degree]', ylabel='Geodetic latitude [degree]'>
Other Remotes¶
In addition to the remote datasets from the GeoData Data Science Center, there are several large remotes available at github repositories.
libpysal.examples.explain("Rio Grande do Sul")
Rio_Grande_do_Sul
======================
Cities of the Brazilian State of Rio Grande do Sul
-------------------------------------------------------
* 43MUE250GC_SIR.dbf: attribute data (k=2)
* 43MUE250GC_SIR.shp: Polygon shapefile (n=499)
* 43MUE250GC_SIR.shx: spatial index
* 43MUE250GC_SIR.cpg: encoding file
* 43MUE250GC_SIR.prj: projection information
* map_RS_BR.dbf: attribute data (k=3)
* map_RS_BR.shp: Polygon shapefile (no lakes) (n=497)
* map_RS_BR.prj: projection information
* map_RS_BR.shx: spatial index
Source: Renan Xavier Cortes
Reference: https://github.com/pysal/pysal/issues/889#issuecomment-396693495
Note that the explain function generates a textual description of this example dataset - no rendering of the map is done as the source repository does not include that functionality.
rio = libpysal.examples.load_example("Rio Grande do Sul")
Downloading Rio Grande do Sul to /home/runner/.local/share/pysal/Rio_Grande_do_Sul
libpysal.examples.remote_datasets.datasets # a listing of all remotes
{'AirBnB': <libpysal.examples.base.Example at 0x7f791a340ec0>,
'Atlanta': <libpysal.examples.base.Example at 0x7f791a2cd310>,
'Baltimore': <libpysal.examples.base.Example at 0x7f791a2cd590>,
'Bostonhsg': <libpysal.examples.base.Example at 0x7f791a44a8b0>,
'Buenosaires': <libpysal.examples.base.Example at 0x7f791a44a9e0>,
'Charleston1': <libpysal.examples.base.Example at 0x7f791a2ff790>,
'Charleston2': <libpysal.examples.base.Example at 0x7f791a2ff9b0>,
'Chicago Health': <libpysal.examples.base.Example at 0x7f791a8a5750>,
'Chicago commpop': <libpysal.examples.base.Example at 0x7f791a349d50>,
'Chicago parcels': <libpysal.examples.base.Example at 0x7f791a19c230>,
'Chile Labor': <libpysal.examples.base.Example at 0x7f791a19c320>,
'Chile Migration': <libpysal.examples.base.Example at 0x7f791a32edd0>,
'Cincinnati': <libpysal.examples.base.Example at 0x7f791a32ef90>,
'Cleveland': <libpysal.examples.base.Example at 0x7f791a9928f0>,
'Columbus': <libpysal.examples.base.Example at 0x7f791a2d1310>,
'Elections': <libpysal.examples.base.Example at 0x7f791a2d1250>,
'Grid100': <libpysal.examples.base.Example at 0x7f797cc4caa0>,
'Groceries': <libpysal.examples.base.Example at 0x7f791b9e7a10>,
'Guerry': <libpysal.examples.base.Example at 0x7f791a2b7d90>,
'Health+': <libpysal.examples.base.Example at 0x7f791a2b7f70>,
'Health Indicators': <libpysal.examples.base.Example at 0x7f791a2b7b10>,
'Hickory1': <libpysal.examples.base.Example at 0x7f791a1a02d0>,
'Hickory2': <libpysal.examples.base.Example at 0x7f791a1a0190>,
'Home Sales': <libpysal.examples.base.Example at 0x7f791a1a00f0>,
'Houston': <libpysal.examples.base.Example at 0x7f791a1a0050>,
'Juvenile': <libpysal.examples.base.Example at 0x7f791a1a0230>,
'Lansing1': <libpysal.examples.base.Example at 0x7f791a1a0b90>,
'Lansing2': <libpysal.examples.base.Example at 0x7f791a1a0910>,
'Laozone': <libpysal.examples.base.Example at 0x7f791a1a0eb0>,
'LasRosas': <libpysal.examples.base.Example at 0x7f791a1a04b0>,
'Liquor Stores': <libpysal.examples.base.Example at 0x7f791a1a11d0>,
'Malaria': <libpysal.examples.base.Example at 0x7f791a1a05f0>,
'Milwaukee1': <libpysal.examples.base.Example at 0x7f791a1a0690>,
'Milwaukee2': <libpysal.examples.base.Example at 0x7f791a1a0730>,
'NCOVR': <libpysal.examples.base.Example at 0x7f791a1a07d0>,
'Natregimes': <libpysal.examples.base.Example at 0x7f791a1a0870>,
'NDVI': <libpysal.examples.base.Example at 0x7f791a1a09b0>,
'Nepal': <libpysal.examples.base.Example at 0x7f791a1a0a50>,
'NYC': <libpysal.examples.base.Example at 0x7f791a1a0af0>,
'NYC Earnings': <libpysal.examples.base.Example at 0x7f791a1a0c30>,
'NYC Education': <libpysal.examples.base.Example at 0x7f791a1a0cd0>,
'NYC Neighborhoods': <libpysal.examples.base.Example at 0x7f791a1a0d70>,
'NYC Socio-Demographics': <libpysal.examples.base.Example at 0x7f791a1a0e10>,
'Ohiolung': <libpysal.examples.base.Example at 0x7f791a1a0f50>,
'Orlando1': <libpysal.examples.base.Example at 0x7f791a1a0ff0>,
'Orlando2': <libpysal.examples.base.Example at 0x7f791a1a1090>,
'Oz9799': <libpysal.examples.base.Example at 0x7f791a1a1130>,
'Phoenix ACS': <libpysal.examples.base.Example at 0x7f791a1a1270>,
'Pittsburgh': <libpysal.examples.base.Example at 0x7f791a1a1310>,
'Police': <libpysal.examples.base.Example at 0x7f791a1a13b0>,
'Sacramento1': <libpysal.examples.base.Example at 0x7f791a1a1450>,
'Sacramento2': <libpysal.examples.base.Example at 0x7f791a1a14f0>,
'SanFran Crime': <libpysal.examples.base.Example at 0x7f791a1a1590>,
'Savannah1': <libpysal.examples.base.Example at 0x7f791a1a1630>,
'Savannah2': <libpysal.examples.base.Example at 0x7f791a1a16d0>,
'Scotlip': <libpysal.examples.base.Example at 0x7f791a1a1770>,
'Seattle1': <libpysal.examples.base.Example at 0x7f791a1a1810>,
'Seattle2': <libpysal.examples.base.Example at 0x7f791a1a18b0>,
'SIDS': <libpysal.examples.base.Example at 0x7f791a1a1950>,
'SIDS2': <libpysal.examples.base.Example at 0x7f791a1a19f0>,
'Snow': <libpysal.examples.base.Example at 0x7f791a1a1a90>,
'South': <libpysal.examples.base.Example at 0x7f791a1a1b30>,
'Spirals': <libpysal.examples.base.Example at 0x7f791a1a1bd0>,
'StLouis': <libpysal.examples.base.Example at 0x7f791a1a1c70>,
'Tampa1': <libpysal.examples.base.Example at 0x7f791a1a1d10>,
'US SDOH': <libpysal.examples.base.Example at 0x7f791a1a1db0>,
'Rio Grande do Sul': <libpysal.examples.base.Example at 0x7f791a1a1e50>,
'nyc_bikes': <libpysal.examples.base.Example at 0x7f791a1a1ef0>,
'taz': <libpysal.examples.base.Example at 0x7f791a1a1f90>,
'clearwater': <libpysal.examples.base.Example at 0x7f791a1a2030>,
'newHaven': <libpysal.examples.base.Example at 0x7f791a1a20d0>,
'chicagoSDOH': <libpysal.examples.base.Example at 0x7f791a1a2170>}