Hi all, Just wanted to add an even shorter GRASS -> Pandas snippet, taken from Anna Petrasova's GRASS GIS workshop at FOSS4G 2021 [1]:
``` import json import pandas as pd pd.DataFrame(json.loads(gs.read_command("v.db.select", map="viewpoints", columns="cat,height", layer=2, format="json"))["records"]) ``` Since v.db.select has JSON output, it's only one line. Again, a strong argument for adding JSON as a standard output option for modules that return text. Caitlin [1] https://github.com/ncsu-geoforall-lab/grass-gis-workshop-FOSS4G-2021/blob/main/workshop_part_2.ipynb On Mon, Apr 18, 2022 at 3:20 PM Caitlin Haedrich <caitlin.haedr...@gmail.com> wrote: > Hi all, > > Last week, we wrapped a final push on grass.jupyter and are excited for > its official release with GRASS 8.2. Here's my final report along with a > summary of grass.jupyter changes introduced as part of the project. Thank > you all for your support, feedback and testing over the past few months! > > *The state of the art BEFORE the start of the Mini Project:* > During GSoC 2021, we created “grass.jupyter”, a package that improves the > integration of GRASS GIS and Jupyter with a set of functions for displaying > GRASS data in Jupyter Notebooks. In its previous state, “grass.jupyter” > allows users to create static visuals and simple interactive maps. However, > several additional features are needed to allow Jupyter users to fully and > easily access the power GRASS, including space-time dataset visualization > and more options for interactive mapping. > > *Project Goals*: > In preparation for the stable release of grass.jupyter with GRASS 8.2, > this project had three main goals: (1) create space time dataset > visualizations for use in Jupyter Notebooks, (2) improve the integration of > GRASS with folium (leaflet library for Python) and (3) write a function for > displaying vector attributes in nicely-formatted tables (using Pandas or > Geopandas). Along the way, we also wanted to finalize the naming of > grass.jupyter classes and create documentation (thank you Vaclav Petras). > > *The state of the art AFTER the Mini Project:* > 1. New TimeSeriesMap class that creates ipywidget time sliders of space > time datasets (see attached timeseriesmap.png) and a notebook documenting > it's usage [1] > 2. Improved GRASS-folium integration allowing rasters and vectors to be > added to existing folium maps (see attached grass-folium.png) and updated > notebook demonstrating its usage [2] > 3. Updated class names: > > - GrassRenderer -> Map > - Grass3dRenderer -> Map3D > - InteractiveMap > - TimeSeries -> TimeSeriesMap > > 4. Thanks to Vaclav Petras, we also have a manual page for grass.jupyter > [3] > 5. I didn't end up working to integrate GRASS and Pandas. It seems that it > is quite straightforward to display vector attributes in nicely-formatted > Pandas tables. For example: > > >>> import pandas as pd > > >>> import sqlite3 > >>> sql_path = gs.read_command("db.databases", > driver="sqlite").replace('\n', '') > >>> con = sqlite3.connect(sql_path) > >>> sql_stat="SELECT * FROM field" > >>> df = pd.read_sql_query(sql_stat, con) > > >>> con.close() > >>> df > > There are other outputs that would be nice to display in nice Pandas > tables, like text output from r.univar, r.stats, or t.vect.list. However, > this is difficult since there is no standard output that is easily > parse-able to pandas. I think the best way would be to create a standard > json or csv output for all modules that return text. Then, it would be > simple to take any module output and convert to a nice-looking Pandas table. > > *Next Steps:* > 1. Bug: InteractiveMap does not honor use_region=True for vectors. > 2. Bug: InteractiveMap for Jupyter does not handle not existing data > properly (https://github.com/OSGeo/grass/issues/2302) > 3. InteractiveMap: add legend options for rasters, support simpleCRS for > faster rendering, ToolTip integration for vector attributes > 4. Continue Pandas integration by adding standard json or csv output to > modules that return text > 5. ... And many others! I think there's still lots of ways we can improve > and expand the integration of GRASS and Jupyter. Ideas welcome. > > You can find an archive of all my weekly reports at [4] and follow next > steps for grass.jupyter on our project page on GitHub [5]. Thank you again > to Vaclav Petras and Anna Petrasova for their guidance and contributions to > grass.jupyter. And, another thank you to Vero Andreo, Stefan Blumentrath > and Markus Neteler for their feedback and testing! > > Best, > Caitlin > > [1] > https://mybinder.org/v2/gh/OSGeo/grass/main?urlpath=lab%2Ftree%2Fdoc%2Fnotebooks%2Ftemporal.ipynb > [2] > https://mybinder.org/v2/gh/OSGeo/grass/main?urlpath=lab%2Ftree%2Fdoc%2Fnotebooks%2Fgrass_jupyter.ipynb > [3] https://grass.osgeo.org/grass81/manuals/libpython/grass.jupyter.html > [4] > https://trac.osgeo.org/grass/wiki/GSoC/2021/JupyterAndGRASS/MiniGrant2022 > [5] https://github.com/OSGeo/grass/projects/7 >
_______________________________________________ grass-dev mailing list grass-dev@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/grass-dev