Metadata-Version: 2.4
Name: pyrsig
Version: 0.12.0
Summary: Python interface to RSIG Web API
Home-page: https://github.com/barronh/pyrsig
Author: Barron H. Henderson
Author-email: barronh@gmail.com
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Development Status :: 4 - Beta
Classifier: Operating System :: OS Independent
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy
Requires-Dist: pandas<3
Requires-Dist: xarray
Requires-Dist: requests
Provides-Extra: polygon
Requires-Dist: geopandas; extra == "polygon"
Provides-Extra: emiss
Requires-Dist: scipy; extra == "emiss"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license-file
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# pyrsig

[![Docs](https://github.com/barronh/pyrsig/actions/workflows/documentation.yaml/badge.svg)](https://barronh.github.io/pyrsig/)
[![Tests](https://github.com/barronh/pyrsig/actions/workflows/tests.yml/badge.svg)](https://github.com/barronh/pyrsig/actions/workflows/tests.yml)
[![pypi](https://github.com/barronh/pyrsig/actions/workflows/python-publish.yml/badge.svg)](https://pypi.org/project/pyrsig/)


`pyrsig` is a Python interface to the RSIG Web API. RSIG connects you to
petabytes of air quality data from EPA, NASA, NOAA, and many other partners.
`pyrsig` connects RSIG to xarray, pandas, and all your favorite python libraries.


## Install

There are two easy ways to isntall `pyrsig` easily.

From pypi.org (most stable):

```bash
pip install pyrsig
```

From github (latest):

```bash
pip install git+https://github.com/barronh/pyrsig.git
```

## User Guide

Many examples, tutorials, and guides are available at 
https://barronh.github.io/pyrsig. Only a few very basic examples
are shown below.


## Example

## Get DataFrame for AQS ozone

```python
import pyrsig

rsigapi = pyrsig.RsigApi(bdate='2022-03-01')
print([k for k in rsigapi.keys() if 'ozone' in k])
# ['airnow.ozone', 'airnow2.ozone', 'aqs.ozone', 'aqs.ozone_8hour_average', 'aqs.ozone_daily_8hour_maximum', 'pandora.ozone']
df = rsigapi.to_dataframe('aqs.ozone')
print(df.shape, *df.columns)
# (26760, 6) Timestamp(UTC) LONGITUDE(deg) LATITUDE(deg) STATION(-) ozone(ppb) SITE_NAME
```

## Get DataFrame for PurpleAir PM25

```python
import pyrsig

rsigapi = pyrsig.RsigApi(bdate='2022-03-01')
rsigapi.purpleair_kw['api_key'] = '<put your api key here>'
df = rsigapi.to_dataframe('purpleair.pm25_corrected')
```

## Get DataFrame for TropOMI NO2

```python
import pyrsig

rsigapi = pyrsig.RsigApi(bdate='2022-03-01')
df = rsigapi.to_dataframe('tropomi.offl.no2.nitrogendioxide_tropospheric_column')
print(df.shape, *df.columns)
# (303444, 4) Timestamp(UTC) LONGITUDE(deg) LATITUDE(deg) nitrogendioxide_tropospheric_column(molecules/cm2)
```

## Get IOAPI formatted NetCDF TropOMI NO2

```python
import pyrsig

rsigapi = pyrsig.RsigApi(bdate='2022-03-01')
ds = rsigapi.to_ioapi('tropomi.offl.no2.nitrogendioxide_tropospheric_column')
print(ds.data_vars)
# Data variables:
#     TFLAG      (TSTEP, VAR, DATE-TIME) int32 ...
#     LONGITUDE  (TSTEP, LAY, ROW, COL) float32 ...
#     LATITUDE   (TSTEP, LAY, ROW, COL) float32 ...
#     COUNT      (TSTEP, LAY, ROW, COL) int32 ...
#     NO2        (TSTEP, LAY, ROW, COL) float32 ...
```

## Get List of Possible

```python
import pyrsig

rsigapi = pyrsig.RsigApi()
keys = rsigapi.keys()
print(len(keys), keys)
# 80 ('airnow.pm25', ... 'aqs.ozone', ... 'cmaq.equates.conus.aconc.O3', ... 'hms.smoke',
#     'metar.wind', ... 'pandora.ozone', 'purpleair.pm25_corrected', ...
#     'tropomi.offl.no2.nitrogendioxide_tropospheric_column', ...
#     'viirsnoaa.jrraod.AOD550', ...)
keys = rsigapi.keys(offline=False) # slow and likely to many options
print(len(keys))
# 3875
```
