{"id":13703968,"url":"https://github.com/oturns/geosnap","last_synced_at":"2026-04-01T20:21:58.653Z","repository":{"id":37550192,"uuid":"149518412","full_name":"oturns/geosnap","owner":"oturns","description":"The Geospatial Neighborhood Analysis Package","archived":false,"fork":false,"pushed_at":"2026-03-09T04:45:20.000Z","size":466222,"stargazers_count":270,"open_issues_count":15,"forks_count":32,"subscribers_count":15,"default_branch":"main","last_synced_at":"2026-03-28T01:34:28.020Z","etag":null,"topics":["geodemographics","neighborhood-dynamics","spatial-analysis","spatial-data-science","urban-analytics","urban-data-science","urban-informatics","urban-modeling"],"latest_commit_sha":null,"homepage":"https://oturns.github.io/geosnap-guide","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oturns.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-09-19T22:17:02.000Z","updated_at":"2026-03-26T12:33:47.000Z","dependencies_parsed_at":"2024-05-16T21:00:45.192Z","dependency_job_id":"764bc2fb-8f1f-4910-b18e-6540d8a191db","html_url":"https://github.com/oturns/geosnap","commit_stats":{"total_commits":857,"total_committers":9,"mean_commits":95.22222222222223,"dds":"0.18786464410735126","last_synced_commit":"ca5faf30ff21ff63eeb248c5a039816152302382"},"previous_names":["spatialucr/geosnap"],"tags_count":42,"template":false,"template_full_name":null,"purl":"pkg:github/oturns/geosnap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oturns%2Fgeosnap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oturns%2Fgeosnap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oturns%2Fgeosnap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oturns%2Fgeosnap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oturns","download_url":"https://codeload.github.com/oturns/geosnap/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oturns%2Fgeosnap/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291520,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["geodemographics","neighborhood-dynamics","spatial-analysis","spatial-data-science","urban-analytics","urban-data-science","urban-informatics","urban-modeling"],"created_at":"2024-08-02T21:01:02.389Z","updated_at":"2026-04-01T20:21:58.634Z","avatar_url":"https://github.com/oturns.png","language":"Python","funding_links":[],"categories":["Planning Coding Resources","Python"],"sub_categories":["Python"],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg height=200 src=\"https://github.com/oturns/geosnap/raw/main/docs/figs/geosnap_long.png\" alt=\"geosnap\"/\u003e\n\u003c/p\u003e\n\n\u003ch2 align=\"center\" style=\"margin-top:-10px\"\u003eThe Geospatial Neighborhood Analysis Package\u003c/h2\u003e \n\n[![Continuous Integration](https://github.com/oturns/geosnap/actions/workflows/unittests.yml/badge.svg)](https://github.com/oturns/geosnap/actions/workflows/unittests.yml)\n[![codecov](https://codecov.io/gh/oturns/geosnap/branch/main/graph/badge.svg)](https://codecov.io/gh/oturns/geosnap)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/geosnap)\n![PyPI](https://img.shields.io/pypi/v/geosnap)\n![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/geosnap)\n![Conda](https://img.shields.io/conda/dn/conda-forge/geosnap)\n![GitHub commits since latest release (branch)](https://img.shields.io/github/commits-since/oturns/geosnap/latest)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3526163.svg)](https://doi.org/10.5281/zenodo.3526163)\n\n`geosnap` provides a suite of tools for exploring, modeling, and visualizing the social context and spatial extent of neighborhoods and regions over time. It brings together state-of-the-art techniques from [geodemographics](https://en.wikipedia.org/wiki/Geodemography), [regionalization](https://www.sciencedirect.com/topics/earth-and-planetary-sciences/regionalism), [spatial data science](https://geographicdata.science/book), and [segregation analysis](https://github.com/pysal/segregation) to support social science research, public policy analysis, and urban planning. It provides a simple interface tailored to formal analysis of spatiotemporal urban data.\n\n\u003cp align=\"center\"\u003e\n\u003cimg width='50%' src='https://github.com/oturns/geosnap/raw/main/docs/figs/Washington-Arlington-Alexandria_DC-VA-MD-WV.gif' alt='DC Transitions' style=' display: block; margin-left: auto; margin-right: auto; max-height: 540px'/\u003e\n\u003c/p\u003e\n\n\n## Main Features\n\n* fast, efficient tooling for standardizing data from multiple time periods into a shared geographic representation appropriate for spatiotemporal analysis\n\n* analytical methods for understanding sociospatial structure in neighborhoods, cities, and regions, using unsupervised ML from scikit-learn and spatial optimization from [PySAL](https://pysal.org)\n  * classic and spatial analytic methods for diagnosing model fit, and locating (spatial) statistical outliers\n\n* novel techniques for understanding the evolution of neighborhoods over time, including identifying hotspots of local neighborhood change, as well as modeling and simulating neighborhood conditions into the future\n\n* quick access to [a large database](https://open.quiltdata.com/b/spatial-ucr) of commonly-used neighborhood indicators from U.S. providers including Census, EPA, LEHD, NCES, and NLCD, streamed from the cloud thanks to [quilt](https://quiltdata.com/) and the highly-performant [geoparquet](https://carto.com/blog/introducing-geoparquet-geospatial-compatibility/) file format.\n\n## Why\n\nUnderstanding neighborhood context is critical for social science research, public policy analysis, and urban planning. The social meaning, formal definition, and formal operationalization of [\"neighborhood\"](https://www.cnu.org/publicsquare/2019/01/29/once-and-future-neighborhood) depends on the study or application, however, so neighborhood analysis and modeling requires both flexibility and adherence to a formal pipeline. Maintaining that balance is challenging for a variety of reasons:\n\n* many different physical and social data can characterize a neighborhood (e.g. its proximity to the urban core, its share of residents with a high school education, or the median price of its apartments) so there are countless ways to model neighborhoods by choosing different subsets of attributes to define them\n\n* conceptually, neighborhoods evolve through both space and time, meaning their socially-construed boundaries can shift over time, as can their demographic makeup.\n\n* geographic tabulation units change boundaries over time, meaning the raw data are aggregated to different areal units at different points in time.\n\n* the relevant dimensions of neighborhood change are fluid, as are the thresholds that define meaningful change\n\nTo address those challenges, geosnap incorporates tools from the PySAL ecosystem and scikit-learn along with internal data-wrangling that helps keep inputs and outputs simple for users. It operates on long-form geodataframes and includes logic for common transformations, like harmonizing geographic boundaries over time, and standardizing variables within their time-period prior to conducting pooled geodemographic clustering.\n\nThis means that while geosnap has native support for commonly-used datasets like the Longitudinal Tract Database [(LTDB)](https://www.brown.edu/academics/spatial-structures-in-social-sciences/ltdb-following-neighborhoods-over-time), or the Neighborhood Change Database [(NCDB)](https://geolytics.com/products/normalized-data/neighborhood-change-database), it can also incorporate a wide variety of datasets, at _any_ spatial resolution, as long as the user understands the implications of the interpolation process.\n\n## Research Questions\n\nThe package supports social scientists examining questions such as:\n\n- Where are the socially-homogenous districts in the city?\n  - Have the composition of these districts or their location shifted over time?\n- What are the characteristics of prototypical neighborhoods in city or region X?\n- Have the locations of different neighborhood prototypes changed over time? e.g:\n  - do central-city neighborhoods show signs of gentrification?(and/or does poverty appear to be suburbanizing?)\n  - is there equitable access to fair housing in high-opportunity neighborhoods (or a dearth of resources in highly-segregated neighborhoods)?\n- Which neighborhoods have experienced dramatic change in several important variables? (and are they clustered together in space?)\n- If spatial and temporal trends hold, how might we expect neighborhoods to look in the future?\n  - how does the region look differently if units 1,2, and 3 are changed to a different type in the current time period?\n- Has the region become more or less segregated over time?\n  - at which spatial scales?\n  - is the change statistically significant?\n\n\n## Installation\n\nWe recommend installing `geosnap` via a package manager that supports installing conda packages from [conda-forge](https://conda-forge.org/). Installing directly from the Python Package Index (PyPI) is also supported.\n\n### Installation via [Miniforge](https://github.com/conda-forge/miniforge)\n\n```bash\nmamba install -c conda-forge geosnap\n```\n\n### Installation via [Pixi](https://pixi.sh/latest/)\n\n Installation via `pixi` is supported, excluding `pixi global install`:\n\n```bash\npixi init name_of_my_project\ncd name_of_my_project\npixi add geosnap\n```\n\n### Installation via pip\n\n```bash\npip install geosnap\n```\n\n### Installation via [uv](https://docs.astral.sh/uv/)\n\n```bash\nuv pip install geosnap\n```\n\n## User Guide\n\nSee the [User Guide](https://oturns.github.io/geosnap-guide/) for a\ngentle introduction to using `geosnap` for neighborhood research\n\n## API Documentation\n\nSee the [API docs](https://oturns.github.io/geosnap/api.html) for a thorough explanation of `geosnap`'s core functionality\n\n## Development\n\ngeosnap development is hosted on [github](https://github.com/oturns/geosnap)\n\nTo get started with the development version,\nclone this repository or download it manually then `cd` into the directory and run the\nfollowing commands:\n\n```bash\nconda env create -f environment.yml\nconda activate geosnap \npip install -e . --no-deps\n```\n\nThis will download the appropriate dependencies and install geosnap in its own conda environment.\n\n## Bug reports\n\nTo search for or report bugs, please see geosnap’s\n[issues](http://github.com/oturns/geosnap/issues)\n\n## License information\n\nSee the file “LICENSE.txt” for information on the history of this software, terms \u0026\nconditions for usage, and a DISCLAIMER OF ALL WARRANTIES.\n\n## Citation\n\nFor a generic citation of geosnap, we recommend the following:\n\n```latex\n@misc{Knaap2019,\nauthor = {Knaap, Elijah and Kang, Wei and Rey, Sergio and Wolf, Levi John and Cortes, Renan Xavier and Han, Su},\ndoi = {10.5281/ZENODO.3526163},\ntitle = {{geosnap: The Geospatial Neighborhood Analysis Package}},\nurl = {https://zenodo.org/record/3526163},\nyear = {2019}\n}\n```\n\nIf you need to cite a specific release of the package, please find the appropriate version on [Zenodo](https://zenodo.org/record/3526163)\n\n## Funding\n\n\u003cimg src=\"docs/figs/nsf_logo.jpg\" width=100 /\u003e This project is supported by NSF Award #1733705,\n[Neighborhoods in Space-Time Contexts](https://www.nsf.gov/awardsearch/showAward?AWD_ID=1733705\\\u0026HistoricalAwards=false)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foturns%2Fgeosnap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foturns%2Fgeosnap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foturns%2Fgeosnap/lists"}