Claude Media
Claudeで中央監視のトレンドデータを分析 — 異常運転と省エネ余地をCSVから拾う

Claudeで中央監視のトレンドデータを分析 — 異常運転と省エネ余地をCSVから拾う

中央監視のトレンドCSVから、同時運転・夜間の残業空調・設定温度の乖離を時系列で拾う手順。外気温と突き合わせて誤検出を減らす方法まで、動かせるスクリプトつきで説明します。

中央監視のトレンドデータをCSVで書き出せば、Claudeに「同時運転」「夜間・休日の運転」「設定温度との乖離」を時系列で拾わせられます。ただし、拾えるのは異常の候補までです。外気温や運転スケジュールと突き合わせないと、正常な動きまで異常として並びます。

ここでは、CSVの整え方、依頼文の書き方、集計スクリプト、外気温との突き合わせ、候補を現場で確かめる順序を説明します。例に使うデータは手順の確認用に作った合成データで、実在の建物のものではありません。

中央監視のトレンドCSVから拾えるもの

中央監視(ビルの空調・電気設備を一か所で見る仕組み)のトレンドデータは、点ごとに数分おきの値が並ぶ時系列です。室温、設定温度、運転・停止の状態、電力量、外気温などが入ります。こうしたデータで、Claudeに任せやすい分析は次の3つです。

異常運転

トレンドCSVで拾う3つの候補

  • 同時運転

    冗長構成の熱源や空調機が、負荷が低いのに2台とも動いている区間です。

  • 夜間・休日の運転

    平日の夜や週末に空調が動き続けている区間です。残業や行事の申請と照らします。

  • 設定温度との乖離

    室温と設定温度の差が、運転中に一定時間以上続いている区間です。

3つとも、ルールで判定できる検出です。Claudeが得意なのは、そのルールをpandasのスクリプトに落として実行し、結果を読み解くところです。判定そのものは人間が決めた条件に従ってスクリプトが行います。

Claudeに分析を任せる前提と制限

CSVを読ませてスクリプトを走らせるには、コード実行とファイル作成の機能が必要です。無料・Pro・Maxでは設定の「機能」から「Code execution and file creation」をオンにします。TeamとEnterpriseでは組織の設定で既定のまま有効ですが、組織のオーナーが無効にしている場合があります。

押さえておく制限は次のとおりです。

項目内容
読み込める形式内容CSV、TSV、XLSXなど。XLSXはコード実行を有効にしないとアップロードできない
チャットへのアップロード内容1ファイル500MBまで、1チャット20ファイルまで
ファイル作成機能の説明内容アップロードとダウンロードは1ファイル30MBまで
実行環境(APIのコード実行ツールの仕様)内容Python 3.11、pandas・matplotlib導入済み、メモリ5GiB、CPU1つ
ネットワーク(同上)内容インターネットに出られず、導入済みライブラリだけ使える

アップロード上限は、サポート記事によって500MBと30MBの2通りの記述があります。前者はチャットへの添付、後者はファイル作成機能の説明に書かれた数字です。数か月分のトレンドをまとめて渡すときは、手前の数字である30MB以内に収めておくと確実です。

API版の実行環境はメモリ5GiBです。claude.aiの環境の数値は記載がないため、1分間隔で数百点を1年分並べたような巨大な表は読み込めない可能性があります。月ごと、系統ごとに分けて渡します。分けてもそのまま使えるように、列名は全ファイルで揃えておきます。

CSVを渡す前に整える5つのこと

中央監視のCSV出力は、装置ごとに形式が違います。ここを整えずに依頼すると、集計の前に読み込みで躓きます。次の5点を確かめます。

  1. 縦長か横長か。「日時・点名・値」の縦長形式なら、スクリプト側でピボットして横長にします
  2. 文字コード。Shift_JIS(cp932)で出力される装置もあります。読み込めないときは、その旨をClaudeに伝えます
  3. 点名の命名。「3F室温」「3F設定温度」「AHU-3運転」のように、系統と種類が名前で分かる形にします。点番号だけの列は、対応表を別に渡します
  4. 運転状態の値。1が運転か、0が運転かは装置次第です。依頼文に書きます
  5. 記録間隔と欠測。5分間隔か15分間隔か、通信断で抜けた時間があるかを確かめます

点名の対応表は、Claudeが列の意味を取り違える最大の原因になります。列名が「AI001」のような記号なら、1行ずつ意味を書いた小さなCSVを添えます。

実際のビル名や設備の通し番号、テナント名が入っている場合は、渡す前に仮名に置き換えます。Team・Enterpriseでは、ネットワークの設定でインターネットへの接続を絞れます。Enterpriseの新規組織では、既定でネットワーク接続がオフです。MCP連携を有効にしていると、その接続を通じた通信はネットワーク設定にかかわらず残ります。

検出ルールを先に決めて依頼する

「異常を見つけて」と頼むと、毎回違う基準で選ばれます。基準は先に数字で決め、依頼文に書きます。

検出ルールの例決めないと起きること
同時運転ルールの例熱源2台が運転中で、負荷率40%未満が30分以上続く決めないと起きること起動直後の短い並行運転まで拾う
夜間・休日の運転ルールの例22時〜6時、または土日に運転中が1時間以上続く決めないと起きること予冷・予熱の立ち上がりまで拾う
設定温度の乖離ルールの例運転中に室温と設定温度の差が2℃超で1時間以上続く決めないと起きること起動直後の過渡状態まで拾う

数字はすべて説明用です。自分の建物の仕様や運用ルールに置き換えます。継続時間の条件は、短い揺らぎを除くために必須です。

依頼文は次のような形にします。

添付の trend_2026-09.csv は、中央監視の9月分トレンドデータ(5分間隔)です。
列の意味は points.csv に書きました。運転状態は 1 が運転、0 が停止です。
 
次の3つを、pandasのスクリプトで検出してください。
1. CH-1とCH-2が同時に運転し、熱源負荷率が40%未満の状態が30分以上続く区間
2. AHU-3が22時〜6時、または土日に運転している状態が1時間以上続く区間
3. AHU-3運転中に、3F室温と3F設定温度の差が2℃を超える状態が1時間以上続く区間
 
条件:
- 欠測(空白)は除外して、件数を別に報告すること
- 結果は開始・終了・継続時間・その間の外気温の平均を一覧にすること
- 異常と断定せず、「候補」として出すこと。考えられる正常な理由も添えること
- 元のCSVは編集しないこと

「候補として出す」「正常な理由を添える」の指定が肝心です。この指定がないと、出力が「異常を発見しました」という断定調に傾きやすくなります。

3つの検出を実行するスクリプト

次のスクリプトは、依頼文のルールをそのまま実装した例です。列名は例なので、自分のCSVに合わせます。5分間隔なので、30分は6回、1時間は12回の連続にあたります。

import pandas as pd
 
raw = pd.read_csv("trend_2026-09.csv", encoding="cp932", parse_dates=["日時"])
wide = raw.pivot_table(index="日時", columns="点名", values="値", aggfunc="mean")
wide = wide.sort_index().resample("5min").mean()
t = wide.index.to_series()
 
 
def runs(mask, min_steps):
    """mask が True のまま min_steps 回以上続く区間を一覧にする"""
    grp = (mask != mask.shift()).cumsum()
    out = []
    for _, g in mask.groupby(grp):
        if g.iloc[0] and len(g) >= min_steps:
            out.append((g.index[0], g.index[-1], len(g) * 5))
    return pd.DataFrame(out, columns=["開始", "終了", "継続(分)"])
 
 
ahu_on = wide["AHU-3運転"] == 1
 
# 1. 低負荷での同時運転(30分 = 6回以上)
both = (wide["CH-1運転"] == 1) & (wide["CH-2運転"] == 1)
simul = runs(both & (wide["熱源負荷率"] < 40), 6)
 
# 2. 夜間・休日の運転(1時間 = 12回以上)
off_hours = (t.dt.hour >= 22) | (t.dt.hour < 6) | (t.dt.dayofweek >= 5)
night = runs(ahu_on & off_hours, 12)
 
# 3. 設定温度との乖離(1時間 = 12回以上)
dev = (wide["3F室温"] - wide["3F設定温度"]).abs() > 2.0
gap = runs(ahu_on & dev, 12)
 
# 各区間の外気温の平均を付ける
for df in (simul, night, gap):
    df["外気温平均"] = [
        round(wide.loc[s:e, "外気温"].mean(), 1)
        for s, e in zip(df["開始"], df["終了"])
    ]
    print(df.to_string(index=False), "\n")

欠測の行は値が空になり、比較の結果が偽になるので、区間の判定から自然に外れます。欠測が多い日は、その日を丸ごと除くかどうかを先に決めます。

出力を受け取ったら、まず件数と継続時間の分布を見ます。1件も出ないなら条件が厳しすぎるか、列名の取り違えを疑います。数百件出るなら、条件が緩すぎます。件数が妥当でも、各区間の開始・終了時刻を中央監視の画面で開いて照合します。

外気温と突き合わせて誤検出を減らす

トレンドの異常候補は、外気温を並べると正体が見えます。同じ検出でも、外気温が極端な日は正常な動きであることが多いためです。ここがこの分析の勘所になります。

くらべる

外気温を見る前と後で変わる読み方

候補の一覧

外気温を見る前

「9月の午後に設定温度より3℃高い区間が12回ある」ことしか分かりません。能力不足なのか、設定の問題なのか決められません。

切り分け

外気温を見た後

乖離した区間の外気温平均が高ければ、猛暑日の能力不足が候補になります。外気温が平年並みなのに乖離が続くなら、制御や設定の確認が候補になります。

外気温を帯に分けて、乖離の出る割合を比べるには、次のコードを足します。

gap_flag = ahu_on & dev
bins = pd.cut(wide["外気温"], [-50, 10, 20, 28, 50])
by_temp = gap_flag.groupby(bins, observed=True).agg(["sum", "count"])
by_temp["乖離率"] = (by_temp["sum"] / by_temp["count"]).round(3)
print(by_temp)

外気温の帯ごとに乖離率が大きく違うなら、外気温が原因の一部です。帯に関係なく乖離が出るなら、設定や制御の問題を疑う材料になります。

夜間・休日の運転は、外気温のほかに運用側の理由を確かめます。よくある例は次のとおりです。

  • 翌朝の始業に向けた予冷・予熱の立ち上がり
  • 外気で建物を冷ますナイトパージ
  • 残業や休日出勤の申請に基づく運転
  • サーバー室など、24時間の空調が前提の系統
  • 結露やカビの対策で、湿度が高い日だけ動かす運転

依頼文に「考えられる正常な理由も添える」と指定しておくと、Claudeはこうした可能性を一覧に載せます。ただし、その建物でどの理由が当てはまるかは、Claudeには分かりません。残業申請の記録や運転スケジュールの設定を人間が照らして初めて、候補が確かめられます。

同時運転も同様です。外気温が高い日に低負荷で2台が動いているなら、台数制御の設定が原因とは限りません。起動の順番や、機器の保護のための運転かもしれません。

省エネの余地は金額まで言い切らない

候補を拾えたら、削減できそうな電力量を見積もりたくなります。電力量の点があれば、候補区間の消費電力の合計は出せます。

# 夜間運転の候補区間について、その間の電力量を合計する
night_kwh = sum(
    wide.loc[s:e, "AHU-3電力量(kWh)"].sum()
    for s, e in zip(night["開始"], night["終了"])
)
print(f"夜間運転の候補区間の電力量: {night_kwh:.1f} kWh")

この合計は、候補区間を止めた場合の削減量の上限にあたります。実際に止めると、翌朝の立ち上がりが遅れて余計な運転が増える場合があります。見積もりは「最大でこの程度」と書き、金額や削減率の断定は避けます。Claudeに頼むときも「削減量の上限であって、削減できる量ではない」と条件に入れておきます。

建築物の省エネに関わる法令上の義務や基準値は、トレンドデータからは判定できません。適合義務の要否は建築物省エネ法の適合義務をClaudeで確認する手順で別に扱っています。

つまずきやすい点

落とし穴

運転状態の0と1を取り違えて、停止中を運転中として集計する

装置によって、1が運転の場合も、0が運転の場合もあります。依頼文に値の意味を書き、結果の最初の数件を中央監視の画面と見比べます。逆に取り違えると、昼間が停止、夜間が運転という不自然な結果になるので、すぐ気づけます。

ほかに、次の点に注意します。

  • 点名が途中で変わる。機器の更新や名称変更で、月の途中から列名が変わっていることがあります。月をまたぐ分析では、対応表に旧名と新名を書きます
  • 装置の時計のずれ。装置の時計がずれていると、夜間の区間がずれます。ずれが疑われるなら、時刻の補正値を依頼文に書きます
  • 積算値と瞬時値の混在。電力量が積算値(増え続ける値)なら、差分をとってから使います。瞬時値のように合計すると、桁違いの値になります
  • 実行時間と容量。巨大なCSVでは、処理が長引いたり、メモリ不足で止まったりします。期間を分けて再実行します

Claudeの出力が長い表になったときは、そのまま信じず、件数と合計を自分で数え直します。集計の方法を依頼に書いておけば、同じ手順で次の月も回せます。定義を先に決めてから集計させる進め方は、OEEの算出と同じです。設備の記録を時系列で区間に切る点は、温度ログの逸脱区間を洗い出す手順と共通です。CSVの基本的な集計とグラフ化は、Claude CSV分析の使い方にまとめています。

候補を現場で確かめる順序

出た候補は、次の順序で扱うと手戻りが少なくなります。

手順

候補から対策までの流れ

  1. 1

    件数と分布を確かめる

    ルールが緩すぎ・厳しすぎないかを、検出件数と継続時間の分布で見ます。

  2. 2

    外気温と運用記録に照らす

    外気温の帯別の割合と、残業申請・運転スケジュールの設定を突き合わせます。

  3. 3

    中央監視の画面で時刻を照合する

    開始・終了時刻の前後で、機器の状態や警報の履歴を見ます。

  4. 4

    設定を変えるのは担当者の判断

    運転時間や設定温度を変えるのは、設備の管理者の判断です。変更後は同じスクリプトで再集計して効果を見ます。

分析の結果で設備の運転を変えるかどうかは、人が決めます。Claudeが出すのは、確かめる順番を絞るための候補です。毎月同じCSVの形式で同じスクリプトを回し、件数の推移を見る運用にすると、設定変更の効果も追えます。

この記事を共有:XはてブLinkedIn