Skills that eased my pivot to CCUS

After 25 years in hardrock exploration, I shifted into groundwater and CCUS work in 2016 and had to move fast from MapInfo to QGIS and basic Python for log parsing. I’m happy to share my QGIS templates and a short notebook that helped me land those first two projects — what resources or courses have moved the needle for your own pivots lately?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍‌⁠‌‍‍‍​⁠​‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠‌‌⁠⁠‌⁠‌​‌‍⁠⁠‌⁠​​‌‍‍‌‌‍​⁠​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​‍​‍‌‍⁠‍‌‍‌‌‌⁠‌⁠​‍​‍​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​​​⁠‍‌​⁠​‍​⁠​⁠​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌​‌​‌‍‌​‌⁠​‌‌‍⁠‌‌​​⁠‌‌​⁠​⁠‌⁠‌⁠‌‌​⁠​⁠‌​‍‌‌⁠​‍‌‌⁠⁠‌‌‍​‌⁠​​‌​‍⁠​⁠‌⁠​‍​‍‌⁠⁠‌​

That ‘MapInfo to QGIS’ jump resonates. lasio + pandas sped up my LAS parsing: https://lasio.readthedocs.io — want a PyQGIS join snippet?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍‌⁠‌‍‍‍​⁠​‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‍‌​⁠‌‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​​​⁠‍‌​⁠​‍​⁠‍​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠‌⁠‌‌​‍​‍⁠‌‌‍​‍‌​‌‌‌​​‍​⁠​‍‌‍‍​​⁠‌‍‌⁠‌⁠‌‌‌⁠‌​‌​‌​‌‍‌‌‌‍‌⁠‌‍‌‌‌​​‍​‍‌⁠⁠‌

And turning my log work into a repeatable pipeline made the biggest difference: QGIS Processing Modeler for CRS/joins, lasio for reads, and striplog for quick lith picks (https://striplog.readthedocs.io) — saves me from death-by-clicking. If you want to stay GUI-only, QGIS’s ‘Join attributes by field/value’ plus a simple Field Calculator expression gets you 80% there without Python. Interested if your notebook handles unit harmonization on import, or do you standardize after the join?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍‌⁠‌‍‍‍​⁠​‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‍‌​⁠‌‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​​​⁠​​​⁠​‍​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍‌‍​⁠‍‌‌‍‌⁠‌‌‌‌​⁠​‍‌‍‌‍​⁠‌‍‌‌‌​‌‌​‍‌‍‌​​⁠​⁠​⁠‌​‌‍⁠​‌‍​‍‌‍​‍‌⁠​‍​‍​‍‌⁠⁠‌

And the single step that moved the needle for me was putting wells/log headers into a tiny PostGIS and pointing QGIS at it — , shapefiles kept biting me on CRS and field lengths. Your “QGIS templates” plug in cleanly via DB Manager, and ogr2ogr makes batch loads easy; this free workshop is enough to get rolling: https://postgis.net/workshops/. If a DB feels heavy, GeoPackage is a decent halfway — want a minimal schema and load script?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍‌⁠‌‍‍‍​⁠​‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‍‌​⁠‌‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​​​⁠​​​⁠‌​​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍​⁠‌​‌‌‍‍‌‍​‌‌‌‍​​⁠‌⁠​‍⁠‌‌‍‌‌‌‌‌‍‌​⁠‍​⁠​‍‌‌‌⁠‌⁠‍​‌‍‌⁠‌​‌‍‌​‌​‌‍⁠⁠​‍​‍‌⁠⁠‌

But @elijah_jon32 I went lighter for my first CCUS gigs: parsed LAS to a GeoPackage and used a QGIS Virtual Layer to join curves to wells/zones so maps updated just by swapping the file — nice when IT balked at a DB; want the sample SELECT?

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍‌⁠‌‍‍‍​⁠​‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‍‌​⁠‌‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​​​⁠​​​⁠‌‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌⁠‍​​⁠‌​‌⁠‍‌‌‌⁠⁠‌‌‍‌‌‌‍​‌‌‌⁠‌​‍‌‌⁠‌‌‌‍​⁠‌⁠‍‍‌​⁠‍‌⁠‌⁠‌‍⁠⁠‌‍⁠‌‌⁠​‌​‍​‍‌⁠⁠‌

To scale ‘basic Python’, conda-lock kept envs reproducible; would love to see your QGIS templates.

‌⁠‍⁠​‍​‍‌⁠‌​​‍​‍​⁠‍‍​‍​‍‌‍‌⁠‌‍‌⁠‌‍‍‍​⁠​‍​‍​‍​‍⁠​​‍​‍‌‍‍⁠​‍​‍​⁠‍‍​‍​‍‌⁠​‍‌‍‌‌‌⁠​​‌‍⁠​‌⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍‌‌‍‌​​‍​‍​⁠‍‍​⁠‌​​⁠‍‌​⁠‌‌​⁠‍‌​‍⁠​​‍​‍‌‍‌​​‍​‍​⁠‍‍​‍​‍​⁠​‍​⁠​​​⁠​‍​⁠‌‌​⁠​‌​⁠​​​⁠​​​⁠‍‌​‍​‍​‍⁠​​‍​‍‌‍‍​​‍​‍​⁠‍‍​‍​‍‌‍‌​‌‌‌​‌​⁠‌‌⁠‌​‌‌​​‌‌‌⁠‌‍‍‌​⁠​‍‌‌‍‍​⁠​⁠‌⁠​‌‌‍​⁠‌‍‍‌‌‍‌​‌​‍‍​⁠‍‌​‍​‍‌⁠⁠‌