Silvershed

Using the data

Ten minutes here saves a week of guessing at column names. The formats are deliberately dull: UTF-8 CSV, ISO dates, one row per measurement, no merged cells anywhere.

Fetching files

Every dataset is a static file under /data/. Direct download needs no token, no header, nothing:

curl -O p.meldris.xyz/data/monthly-bridge-counts.csv

If you build on top of the portal, fetch the yearly dump instead and cache it; it changes at most once a month, and its checksum is quoted on the datasets page whenever it is rebuilt.

Schemas

monthly-bridge-counts.csv — month,site,mode,daily_avg,caption. month is the first of the month, site one of weir, foundry, oldmill; mode is bike or foot; daily_avg is the corrected daily average for days the counter ran.

air-quality-2025.csv — month,station,pm25_ugm3,pm10_ugm3,no2_ugm3,valid_days. Stations central, riverside, northfield, depot and, from September, school-street. Values are monthly means over valid_days; a month with under 20 valid days ships with an empty value rather than a guess.

library-lending.csv — year,branch,collection,loans,renewals. Collections adult and children; branches as named by the library service.

Correction flags

When a counter is recalibrated we append corrected rows rather than editing the old ones. Corrected rows carry a caption beginning with revised: and a note of what changed, for example:

2025-03-01,weir,bike,612.4,revised: rain under-count, see note R-14

Figures without a revised caption are as first published. This policy exists because a correction that overwrites history also overwrites everyone's charts.

Worked examples

Average the cycling series by year with standard tools alone:

curl -s -O p.meldris.xyz/data/monthly-bridge-counts.csv
python3 - <<'PY'
import csv
from collections import defaultdict
rows = list(csv.DictReader(open('monthly-bridge-counts.csv')))
sums = defaultdict(list)
for r in rows:
    if r['mode'] == 'bike':
        sums[r['month'][:4]].append(float(r['daily_avg']))
for y in sorted(sums):
    print(y, round(sum(sums[y]) / len(sums[y]), 1))
PY

Spreadsheets work too: open any CSV directly, or point Power BI / LibreOffice at the dump. The numbers survive round-trips because the formats are boring.

Licence

All datasets are published under CC BY 4.0. Attribute “City of Ravensholm open data portal” and link the dataset you used; after that, everything from homework to commercial dashboards is fine without asking. The licence text ships inside the yearly dump, and the plain-language summary above is not a substitute for it.

Questions that the schema does not answer go to data@p.meldris.xyz — a human reads that inbox on weekdays.