swemaps


Nameswemaps JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummarySweden in GeoParquet for easy usage.
upload_time2024-05-07 17:47:18
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseNone
keywords geoarrow geopandas geoparquet maps pyarrow sweden
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # swemaps

Maps of Sweden in [GeoParquet](https://github.com/opengeospatial/geoparquet) for easy usage.  

The parquets have been created from files published by [Statistics Sweden](https://www.scb.se/hitta-statistik/regional-statistik-och-kartor/regionala-indelningar/) and [The Swedish Agency for Economic and Regional Growth](https://tillvaxtverket.se/tillvaxtverket/statistikochanalys/statistikomregionalutveckling/regionalaindelningar/faregioner.1799.html). Maps include counties, municipalities and FA regions. The original geometries have been transformed from SWEREF 99 TM to WGS 84 for better out of the box compatibility with different tools. The column names have also been somewhat sanitized (e.g. `KnKod` -> `kommun_kod`).

The package gets you the file path so that you can load it with your prefered tool, for example PyArrow or GeoPandas. An extra helper function is included to quickly convert a PyArrow table to GeoJSON.

Made for Python with inspiration from [swemaps2](https://github.com/filipwastberg/swemaps2).   

## Municipalities and counties

Municipalities             |  Counties
:-------------------------:|:-------------------------:
![municipalities](assets/ex1.png) | ![counties](assets/ex2.png)

### PyArrow example with Plotly

```python
>>> import pyarrow.parquet as pq
>>> import swemaps

# This loads the map for the specified type
>>> kommuner = pq.read_table(swemaps.get_path("kommun"))

>>> kommuner.column_names
['kommun_kod', 'kommun', 'geometry']

# This helper function returns GeoJSON from a PyArrow table
>>> geojson = swemaps.pyarrow_to_geojson(kommuner)

# Here's a dataframe with municipalities and some random values that we can plot
>>> df.head()
shape: (5, 2)
┌──────────┬───────┐
│ Kommun   ┆ Value │
│ ---      ┆ ---   │
│ str      ┆ i64   │
╞══════════╪═══════╡
│ Ale      ┆ 544   │
│ Alingsås ┆ 749   │
│ Alvesta  ┆ 771   │
│ Aneby    ┆ 241   │
│ Arboga   ┆ 763   │
└──────────┴───────┘

>>> fig = px.choropleth(
        df,
        geojson=geojson,
        color="Value",
        locations="Kommun",
        featureidkey="properties.kommun",
        projection="mercator",
        color_continuous_scale="Viridis",
        fitbounds="locations",
        basemap_visible=False,
    )

```

You could also subset the map of municipalities for a specific county or a group of counties. Since the geometry is loaded as a PyArrow table the filter operation is straightforward.

```python
>>> import pyarrow.compute as pc

>>> kommuner.schema 

kommun_kod: string
kommun: string
geometry: binary
-- schema metadata --
geo: '{"version":"1.0.0","primary_column":"geometry","columns":{"geometry' + 1478

# County code for Skåne is 12
>>> kommuner = kommuner.filter(pc.starts_with(pc.field("kommun_kod"), "12"))

>>> geojson = swemaps.pyarrow_to_geojson(kommuner)
```

You could also use list comprehension on the GeoJSON to filter it.

```python
>>> geojson["features"] = [
        feature
        for feature in geojson["features"]
        if feature["properties"]["kommun_kod"].startswith("12")
        ]
```

Anyway, now we can plot Skåne.
```python
>>> skane = px.choropleth(
        df,
        geojson=geojson,
        color="Value",
        locations="Kommun",
        featureidkey="properties.kommun",
        projection="mercator",
        color_continuous_scale="Viridis",
        fitbounds="locations",
        basemap_visible=False,
        title="Skåne municipalities"
    )

fig.show()
```

![skåne](assets/ex3.png)

## GeoPandas example

You can load the GeoParquet into a GeoDataFrame as well.

```python
>>> import geopandas as gpd

>>> gdf = gpd.GeoDataFrame.read_parquet(swemaps.get_path("lan"))

>>> gdf.head()

lan_kod            lan                                           geometry
0      01     Stockholms  MULTIPOLYGON (((17.24034 59.24219, 17.28475 59...
1      03        Uppsala  POLYGON ((17.36606 59.61224, 17.35475 59.60292...
2      04  Södermanlands  POLYGON ((15.95815 58.96497, 15.86130 58.99856...
3      05  Östergötlands  POLYGON ((14.93369 58.13112, 14.89472 58.08986...
4      06     Jönköpings  POLYGON ((14.98311 57.93450, 15.00458 57.89598...

# And with matplotlib installed as well we can have quick look
>>> gdf.plot()
```

![län](assets/ex4.png)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "swemaps",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "geoarrow, geopandas, geoparquet, maps, pyarrow, sweden",
    "author": null,
    "author_email": "Stefan Furne <stefan@furne.net>",
    "download_url": "https://files.pythonhosted.org/packages/97/b3/11f3293141ae11952b6e5372580140f0d8fc9822d711a2fda5ab00aaacc4/swemaps-0.1.0.tar.gz",
    "platform": null,
    "description": "# swemaps\n\nMaps of Sweden in [GeoParquet](https://github.com/opengeospatial/geoparquet) for easy usage.  \n\nThe parquets have been created from files published by [Statistics Sweden](https://www.scb.se/hitta-statistik/regional-statistik-och-kartor/regionala-indelningar/) and [The Swedish Agency for Economic and Regional Growth](https://tillvaxtverket.se/tillvaxtverket/statistikochanalys/statistikomregionalutveckling/regionalaindelningar/faregioner.1799.html). Maps include counties, municipalities and FA regions. The original geometries have been transformed from SWEREF 99 TM to WGS 84 for better out of the box compatibility with different tools. The column names have also been somewhat sanitized (e.g. `KnKod` -> `kommun_kod`).\n\nThe package gets you the file path so that you can load it with your prefered tool, for example PyArrow or GeoPandas. An extra helper function is included to quickly convert a PyArrow table to GeoJSON.\n\nMade for Python with inspiration from [swemaps2](https://github.com/filipwastberg/swemaps2).   \n\n## Municipalities and counties\n\nMunicipalities             |  Counties\n:-------------------------:|:-------------------------:\n![municipalities](assets/ex1.png) | ![counties](assets/ex2.png)\n\n### PyArrow example with Plotly\n\n```python\n>>> import pyarrow.parquet as pq\n>>> import swemaps\n\n# This loads the map for the specified type\n>>> kommuner = pq.read_table(swemaps.get_path(\"kommun\"))\n\n>>> kommuner.column_names\n['kommun_kod', 'kommun', 'geometry']\n\n# This helper function returns GeoJSON from a PyArrow table\n>>> geojson = swemaps.pyarrow_to_geojson(kommuner)\n\n# Here's a dataframe with municipalities and some random values that we can plot\n>>> df.head()\nshape: (5, 2)\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Kommun   \u2506 Value \u2502\n\u2502 ---      \u2506 ---   \u2502\n\u2502 str      \u2506 i64   \u2502\n\u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2561\n\u2502 Ale      \u2506 544   \u2502\n\u2502 Alings\u00e5s \u2506 749   \u2502\n\u2502 Alvesta  \u2506 771   \u2502\n\u2502 Aneby    \u2506 241   \u2502\n\u2502 Arboga   \u2506 763   \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n>>> fig = px.choropleth(\n        df,\n        geojson=geojson,\n        color=\"Value\",\n        locations=\"Kommun\",\n        featureidkey=\"properties.kommun\",\n        projection=\"mercator\",\n        color_continuous_scale=\"Viridis\",\n        fitbounds=\"locations\",\n        basemap_visible=False,\n    )\n\n```\n\nYou could also subset the map of municipalities for a specific county or a group of counties. Since the geometry is loaded as a PyArrow table the filter operation is straightforward.\n\n```python\n>>> import pyarrow.compute as pc\n\n>>> kommuner.schema \n\nkommun_kod: string\nkommun: string\ngeometry: binary\n-- schema metadata --\ngeo: '{\"version\":\"1.0.0\",\"primary_column\":\"geometry\",\"columns\":{\"geometry' + 1478\n\n# County code for Sk\u00e5ne is 12\n>>> kommuner = kommuner.filter(pc.starts_with(pc.field(\"kommun_kod\"), \"12\"))\n\n>>> geojson = swemaps.pyarrow_to_geojson(kommuner)\n```\n\nYou could also use list comprehension on the GeoJSON to filter it.\n\n```python\n>>> geojson[\"features\"] = [\n        feature\n        for feature in geojson[\"features\"]\n        if feature[\"properties\"][\"kommun_kod\"].startswith(\"12\")\n        ]\n```\n\nAnyway, now we can plot Sk\u00e5ne.\n```python\n>>> skane = px.choropleth(\n        df,\n        geojson=geojson,\n        color=\"Value\",\n        locations=\"Kommun\",\n        featureidkey=\"properties.kommun\",\n        projection=\"mercator\",\n        color_continuous_scale=\"Viridis\",\n        fitbounds=\"locations\",\n        basemap_visible=False,\n        title=\"Sk\u00e5ne municipalities\"\n    )\n\nfig.show()\n```\n\n![sk\u00e5ne](assets/ex3.png)\n\n## GeoPandas example\n\nYou can load the GeoParquet into a GeoDataFrame as well.\n\n```python\n>>> import geopandas as gpd\n\n>>> gdf = gpd.GeoDataFrame.read_parquet(swemaps.get_path(\"lan\"))\n\n>>> gdf.head()\n\nlan_kod            lan                                           geometry\n0      01     Stockholms  MULTIPOLYGON (((17.24034 59.24219, 17.28475 59...\n1      03        Uppsala  POLYGON ((17.36606 59.61224, 17.35475 59.60292...\n2      04  S\u00f6dermanlands  POLYGON ((15.95815 58.96497, 15.86130 58.99856...\n3      05  \u00d6sterg\u00f6tlands  POLYGON ((14.93369 58.13112, 14.89472 58.08986...\n4      06     J\u00f6nk\u00f6pings  POLYGON ((14.98311 57.93450, 15.00458 57.89598...\n\n# And with matplotlib installed as well we can have quick look\n>>> gdf.plot()\n```\n\n![l\u00e4n](assets/ex4.png)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Sweden in GeoParquet for easy usage.",
    "version": "0.1.0",
    "project_urls": {
        "Issue tracker": "https://github.com/stefur/swemaps/issues"
    },
    "split_keywords": [
        "geoarrow",
        " geopandas",
        " geoparquet",
        " maps",
        " pyarrow",
        " sweden"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8c8b9430967da4336adae81fd9b3c2ebf973ccfeb11d555fea983fe30682bf53",
                "md5": "ac22729c3d4fb97c59eafc5cc5bf93c4",
                "sha256": "75340c2d55d3332eabb3683141270183eb5e2efa7583f8122c13616c1f6a1ba0"
            },
            "downloads": -1,
            "filename": "swemaps-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ac22729c3d4fb97c59eafc5cc5bf93c4",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 199875,
            "upload_time": "2024-05-07T17:47:17",
            "upload_time_iso_8601": "2024-05-07T17:47:17.450671Z",
            "url": "https://files.pythonhosted.org/packages/8c/8b/9430967da4336adae81fd9b3c2ebf973ccfeb11d555fea983fe30682bf53/swemaps-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "97b311f3293141ae11952b6e5372580140f0d8fc9822d711a2fda5ab00aaacc4",
                "md5": "12ad02d07ff3c448de26f5f06d9b7733",
                "sha256": "1331661256ec071238ab058ffc7dde147db734662a16da571de206d02aed0ee5"
            },
            "downloads": -1,
            "filename": "swemaps-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "12ad02d07ff3c448de26f5f06d9b7733",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 357163,
            "upload_time": "2024-05-07T17:47:18",
            "upload_time_iso_8601": "2024-05-07T17:47:18.934617Z",
            "url": "https://files.pythonhosted.org/packages/97/b3/11f3293141ae11952b6e5372580140f0d8fc9822d711a2fda5ab00aaacc4/swemaps-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-05-07 17:47:18",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "stefur",
    "github_project": "swemaps",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "swemaps"
}
        
Elapsed time: 0.30598s