Skip to content

UW-Madison-DSI/wiscopy

Repository files navigation

Wiscopy

Python wrapper for Wisconet. Currently supporting API v1.

Main Features

  1. Easy to use interface: simply specify the stations, datetime range, and fields you want
  2. Data automatically formatted into a pandas DataFrame
  3. Fetch large amounts of data with transparent concurrency

Install

From PyPI

base install

To install wiscopy from PyPI run

python -m pip install wiscopy

install with plotting library dependencies

python -m pip install 'wiscopy[plot]'

From conda-forge

To install and add wiscopy to a project from conda-forge with Pixi, from the project directory run

pixi add wiscopy

and to install into a particular conda environment with conda, in the activated environment run

conda install --channel conda-forge wiscopy

Usage

Fetch data from multiple stations, create a Dataframe, and plot.

import nest_asyncio  # needed to run wiscopy in a notebook
import hvplot.pandas  # needed for df.hvplot()
import holoviews as hv
from datetime import datetime

from wiscopy.interface import Wisconet

hv.extension('bokeh')
hv.plotting.bokeh.element.ElementPlot.active_tools = ["box_zoom"]
nest_asyncio.apply()  # needed to run in notebook

w = Wisconet()
df = w.get_data(
    station_ids=["maple", "arlington"],
    start_time="2025-01-01",
    end_time="2025-02-01",
    fields=["60min_air_temp_f_avg"]
)
df.hvplot(
    y="value",
    by="station_id",
    title="60min_air_temp_f_avg",
    ylabel=df.final_units.iloc[0],
    grid=True,
    rot=90,
)

Specific data over a specific time period

More examples

see more examples in notebooks/examples.ipynb, or run

pixi run start

Wisconet

Current stations

Wisconet's list of current stations shows all active station names. You can get also that list of strings in wiscopy with:

from wiscopy.interface import Wisconet

w = Wisconet()
station_names = w.all_station_names()

Wisconet also provides a map of those stations with a dropdown menu including some of the currently available fields/variables. You can determine the fields available per station in wiscopy with:

from wiscopy.interface import Wisconet

w = Wisconet()
station_names = w.all_station_names()
this_station = w.get_station(station_names[0])
fields = this_station.get_field_names()

dev install (contribute!)

1. install pixi

See pixi install guide.

2. check out from repo

git clone git@github.com:UW-Madison-DSI/wiscopy.git

3. install local editable version

cd wiscopy
pixi install

About

Python wrapper for Wisconet API

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •