Asopitech With · 気象情報サービス
Weather Underground 観測所ネットワーク with Alopex DB & Alopex Skulk
Weather Undergroundの観測所ネットワークは、気象情報サービスのWeather Undergroundに、個人の気象観測所のデータを集める仕組みです。これをAlopex DBとAlopex Skulkで作り直すと…?
更新: 2026/10/12
どんなサービスか
Weather Undergroundのような観測ネットワークは、世界中の個人が持つ気象観測所や空気質のセンサーをつなぎ、その場所だけの細かな気象データを集めます。観測所の持ち主は、自分の観測所のダッシュボードとグラフ、過去のデータの保管、データの共有を使えます。扱うデータは、観測所の情報と、気温、湿度、風、雨量などの観測値の時系列です。
データの置き場所
- Skulkの時系列:観測値を、観測所と地域のタグを付けてSkulkに取り込みます。
- 時間の集計:ダッシュボードのグラフは、時間で区切る集計で、時間ごとや日ごとの平均を出します。最新の値や地域ごとの比較は、PromQLで問い合わせます。
- Alopex DBのテーブル:観測所の登録情報、持ち主、設置場所をテーブルに持ちます。
配置の形
取り込みと問い合わせを受けるアプリのサーバーに、Skulkを組み込みます。観測所が増えても、同じエンジンのままSkulkのサーバー、クラスタへ広げられます。観測所の側にもSkulkを組み込み、ネットワークが切れている間の観測を手元にためておきます。貯めたデータはParquetなので、過去の気象の分析では、ほかのツールからそのまま読めます。
Alopex DBとAlopex Skulkが合う理由
観測ネットワークのデータは、時刻とタグの付いた数値が、途切れずに届き続けるものです。Skulkは、この形のデータの取り込み、保存、集計を、アプリの中のライブラリとして受け持ちます。
コードで見る
観測所の登録情報はAlopex DBが持ちます(観測値の時系列はSkulk)。地域ごとの観測所数を集計する中心だけを取り出したコードです。
import alopex
# 観測所の登録情報は Alopex DB(観測値の時系列は Skulk が取り込む)
db = alopex.Database.open("weather.alopex")
db.execute_sql("""
CREATE TABLE IF NOT EXISTS stations (
id INTEGER PRIMARY KEY,
owner TEXT,
region TEXT,
place TEXT
)
""")
stations = [
(1, "tanaka", "関東", "世田谷"),
(2, "suzuki", "関東", "横浜"),
(3, "sato", "関西", "大阪"),
]
for s in stations:
db.execute_sql("INSERT INTO stations (id, owner, region, place) VALUES (?, ?, ?, ?)", list(s))
# 地域ごとの観測所の数を集計する
for row in db.execute_sql("SELECT region, COUNT(*) AS n FROM stations GROUP BY region ORDER BY n DESC"):
print(row["region"], row["n"])登録情報はSQLで集計・絞り込みできます。気温・湿度・雨量の時系列は、Skulkが観測所と地域のタグ付きで取り込み、PromQLや時間の集計で見せます。
取り込みからPromQLの問い合わせまでをアプリの中で行えるAlopex Skulkで、観測所のネットワークを試してみよう。