aptpod Tech Blog

株式会社アプトポッドのテクノロジーブログです

生成AIにデータ分析していただきたい

気軽に計測データを分析したいみなさん、

こんにちは、ソリューションアーキテクトの伊勢です。

せっかくデータ収集しても、こんな悩みはないですか。

  • 収集したデータをどう利活用したらいいかわからない
  • 分析ツールを導入したけどどう分析したいかわからない
  • 分析結果をどう考察したらいいかわからない

IoTあるあるですね。


今回は専門的な分析知識を使わず、

intdashの収集データをノーコードで分析したいと思います。

生成AIはChatGPTの最新版GPT-5を利用します。1

はじめに

データ分析とは

数値や記録などのデータを収集・整理・可視化・解釈し、有用な知見(インサイト)を得る一連の活動です。

データ分析の流れ

DXを推進するAIポータルメディア「AIsmiley」

データ分析とは?基礎から分かる手法と流れ、仕事でのメリットも解説

このうち、前処理(クレンジング)〜結果の解釈、また報告のためのレポート作成を

ChatGPTにまるっとお願いできますし、

なんなら、問題の発見や定義への助言も得られます。2

GPT-5とは

OpenAIが2025年に発表した最新の大規模言語モデルで、マルチモーダル処理(テキスト・画像などを併用可能)や高いコーディング能力を備えています。

また、CSVファイルなどのデータを読み込んで「要約・可視化・パターン検出」といった分析支援を行えます。

今回はこのGPT-5を活用して、intdashの計測データをノーコードで分析してみます。

VM2M Data Visualizerとは

時系列データを可視化するダッシュボードアプリケーションです。

エッジからintdashサーバーに送られているリアルタイムデータをサーバー経由で受信して表示したり、intdashサーバーに保存された過去のデータを表示したりします。

www.aptpod.co.jp

分析対象データは、このダッシュボードからCSVファイルでダウンロードします。

やってみた

3つ課題を設定してデータ分析によって結論を導きます。

まずはデータの準備方法の説明です。

CSVダウンロード

intdashのビューアーであるVM2M Data Visualizerで分析対象データを作成します。

任意の計測を選択してから、CSVダウンロードします。

CSVダウンロード項目の指定

注意点です。

適度にサンプリングする

データが100万行を超えるとChatGPTの分析処理が重くなってくるため、必要な精度にサンプリングします。

Sampling Intervalで 1 / 10 / 100 / 1,000 ms のいずれかを選択します。

必要項目に限定する

余計な項目があると、ChatGPTが勘違いしたり、分析が重くなったります。

必要な項目のチェックボックスだけを選択します。

自然言語形式のタイムスタンプを付与する

分析しやすいように「年月日 時分秒」形式の時刻を最初の列に追加します。

Add human-readable timestamps (yyyy/mm/dd HH:MM:SS).をチェックします。


それでは、最初の分析課題です。

センサーデータで体感を定量化

課題
船酔いしなかったのはなぜか。


こちらの記事でご紹介したカーフェリーのGNSSデータを使います。

tech.aptpod.co.jp

私は元々船酔いしやすいタイプなのですが、この出張時には幸い大丈夫でした。

これは当日の船揺れが穏やかだったからなのか、私が船酔いを克服したからなのか、収集データから分析してみます。

茨城県大洗港〜北海道苫小牧港

Data VisualizerからダウンロードしたCSVファイルはこのようになります。

"#timestring","#timestamp","UBX-HNR-ATT_roll@0/UBX-HNR-ATT[BD-67]","UBX-HNR-ATT_pitch@0/UBX-HNR-ATT[BD-67]","UBX-HNR-PVT_lon@0/UBX-HNR-PVT[BD-67]","UBX-HNR-PVT_lat@0/UBX-HNR-PVT[BD-67]","UBX-HNR-PVT_speed@0/UBX-HNR-PVT[BD-67]","UBX-HNR-PVT_headVeh@0/UBX-HNR-PVT[BD-67]"
"'2025/03/20 05:21:58.000000'","1742415718.000000","0","24.45279","140.5754456","36.308563","0.1476","102.80244"
"'2025/03/20 05:21:59.000000'","1742415719.000000","0","24.45279","140.5754431","36.3085641","0.3456","102.80244"
"'2025/03/20 05:22:00.000000'","1742415720.000000","1.31278","8.01281","140.5754409","36.3085642","0.9359999999999999","121.40534000000001"
"'2025/03/20 05:22:01.000000'","1742415721.000000","0","8.11894","140.5754397","36.308563899999996","0.3564","112.06946"
...

ChatGPTでCSVファイルを選んでアップロードします。

最初にこういったプロンプトを与えます。

フェリー航行のCSVデータをアップロードします。
タイムスタンプ、緯度経度、方位角、速度、姿勢角が含まれます。
課題:船酔いしなかったのはなぜか
のためにデータ分析を行います。

以下を確認してください。
- 項目の一覧
- データ行数
- タイムスタンプ範囲

アップロードファイルの内容確認

必要に応じてデータをクレンジングします。3

データを整えてください。
- 見やすさのため、項目名のUBX-HNR-PVT_部分と"@"以降を削除してください。
- 空の値が含まれます。直前の値を使用して穴埋め(forward fill)してください。

結果表示についても指示しておきます。4

また、
- 分析結果のグラフは英語で、本文は日本語で表記してください。

分析準備

早速、効果的な分析方法をおすすめしてくれます。

次に進めるとしたら、まず「ロール角・ピッチ角の変動」を時系列グラフで描いて、船の揺れが小さかったかどうかを確認しますか?

そのまま実行してもらいます。

姿勢角のグラフ化

Data Visualizerの roll/pitch のグラフ描画ともあっているようです。

修正して欲しいところは追加で依頼します。

修正後のグラフ

分析結果をどう理解したらいいかも質問できます。

評価指標のアドバイス

気になる部分を他項目を絡めて分析します。

特定時間帯への質問

船揺れに対する知見

最後にレポートとしてまとめてもらいます。

レポート指示

レポートまとめ

結論はこのようになりそうです。

結論
船酔いしなかったのは、当日の船の揺れが小さかったためである。
体質改善や慣れによる克服ではない。


続いての分析課題です。

行動データから安全性を客観評価

課題
弊社営業は安全運転か。


こちらの記事でご紹介した社用車の計測データを使います。

tech.aptpod.co.jp

この日、社用車は出張で弊社の営業担当が運転していました。

関西への長距離ドライブで危険運転がなかったか、分析してみます。

社用車の走行計測データ
複数計測に跨って1つのCSVファイルを生成するため、

Data Visualizerを開始時刻と終了時刻をブラウザのアドレスバーで指定します。

エンジン始動で計測が区切れているためです。

https://example.jp/vm2m/?playMode=storedData&startTime=2024-11-13T15:42:01.389%2B09:00&endTime=2024-11-13T19:53:20.124%2B09:00

ダウンロードしたCSVファイルをアップしてプロンプトを与えます。

社用車走行のCSVデータをアップロードします。
タイムスタンプ、緯度経度、方位角、速度、アクセル、ブレーキ、ステアリングが含まれます。
課題:ドライバーは安全運転していたか
のためにデータ分析を行います。

以下を確認してください。
- 項目の一覧
- データ行数
- タイムスタンプ範囲

CSVファイルのアップロード

データをクレンジングします。

データを整えてください。
- 見やすさのため、項目名の0_RMC_部分と"@"以降を削除してください。
- 空の値が含まれます。直前の値を使用して穴埋め(forward fill)してください。

また、
- 分析結果のグラフは英語で、本文は日本語で表記してください。

データクレンジング

複数のデータ項目をクロス分析してグラフ描画して、考察させてみます。

特にステアリング(ハンドル操作)は高速になるほど操作が少なくなっていることがわかります。

車速 vs 各操作

わかりやすいように閾値を設定して再分析してもらいます。

閾値設定

ハンドル操作は低速時のみのようです。

具体的にどういうときに発生しているのか、地図に可視化してみます。5

地図ファイルのダウンロードリンク

出力されたHTML

ハンドル操作は曲がり角と駐車時に集中

ハンドル操作は停車・低速走行に集中しているという分析結果が、視覚的にも確認できました。

では、まとめてもらいます。

レポートまとめ

結論
データが示す限り、弊社営業は模範的なドライバーでした。
少なくともアクセルとブレーキは疑う余地なしです。


最後の課題は少し難しめです。

現場運用を解決

課題
モーター発熱の要因はなにか。


こちらの記事で紹介した、2025年7月の展示会での計測データを使います。

tech.aptpod.co.jp

Unitree Go2-Wは研究開発モデルのため、稼働を続けるとモーターが過熱して、基板保護のために自ら脱力します。6
分析には複数エッジの計測を利用します。

展示会でのData Visualizerスクリーン

  • マルチモーダル環境センシング(俯瞰カメラ)
    • 検出人物数 7
  • 四足ロボット Unitree Go2-W
    • ロボット脚関節モーターの温度
    • ロボット脚関節モーターの角度・加速度8
    • ロボットの消費電流

カメラ画角が限られて不正確ながら、検出人物数は会場の人出の推移とします。

CSVをアップして、データをクレンジングします。

展示会中の計測データをアップロードします。
タイムスタンプ、俯瞰カメラによる検出人物数、四足ロボットの脚関節モーターの温度・角度・加速度、ロボットの消費電流が含まれます。
課題:モーター発熱の要因はなにか。
のためにデータ分析を行います。

以下を確認してください。
- 項目の一覧
- データ行数
- タイムスタンプ範囲

データを整えてください。
- 見やすさのため、項目名のimu.、motor_state.部分と"@"以降を削除してください。

また、
- 分析結果のグラフは英語で、本文は日本語で表記してください。

CSVファイルアップロード

まずは各データの日にち・時間帯ごとのヒートマップを表示してもらいます。

会期3日間、開催時間10〜17時の時間帯別のヒートマップを示してください。
 - 人出の多寡:検出人物数で推測してください。
 - ロボットの稼働負荷:加速度XYZで代替してください。
 - ロボットのモーター温度

各平均値のヒートマップ

ぱっと見では相関関係はよくわかりません。

もう少し細かく判定条件を検討します。

脚関節角より、ロボットの状態を分類してください。
- 電源OFF:ロボットデータの行なし。
- 直立:関節角が以下の値近辺、姿勢を保つためにモーター負荷が発生。
  0.angle: 0
  1.angle: 42
  2.angle: -85
  3.angle: 0
- 歩行・階段:加速度・関節角の揺れが激しい。
- 伏せ:関節角が以下の値近辺、脱力状態でモーター負荷がかからない。
  0.angle: -29
  1.angle: 75
  2.angle: -145
  3.angle: 29

ロボット状態の判定

条件ごとに他項目との関係性を分析してもらいます。

状態ごとのモーター温度と消費電流)

状態ごとのモーター温度と消費電流(テキスト)

よく知らない要素は別の要素に置き換えて説明してもらいます。

分析結果の解釈質問

具体的な運用対処も確認してみます。

運用対処の助言

これは実用上の経験とも合致します。9
まとめです。

まとめ(依頼)

まとめ(結論)

他データとの関連性を見出せたかも報告してもらいます。

まとめ(人出との関連)

結論
モーターの発熱は「酷使」の証拠である。
ただし、それが必ずしも来場者への貢献量を意味するわけではない。

おわりに

本記事では、簡単にCSVと生成AIだけでここまで分析できることを紹介しました。

intdashは複数データのタイムスタンプが揃うため、分析の正確さが向上します。


今回は最も基本的な形式として数値データを分析しました。

他の形式の計測データも分析にトライしてみようと思います。


  1. 有償サブスクリプションのChatGPT Plusを利用しています。
  2. 生成AIの回答には意図しない嘘:ハルシネーションが含まれます。常に分析結果の妥当性を確認しながら使うことが重要です。
  3. GNSSとCANのように複数ソースからデータを収集している場合、1つのソースから発生タイミングでは他のソースの項目は空であるためです。
  4. 確認したバージョンだとグラフ中の日本語が文字化けします。
  5. 過去の記事で利用したPythonのfoliumライブラリを指定しています。
  6. 上位モデルは長時間の稼働ができるようになっています。
  7. 人物検出:SDK入門④〜YOLOで物体検知しちゃう〜を動かしています。
  8. 実際はモーターは5つ以上あります。稼働中はどのモーターも動いているため、一部で分析しました。
  9. 同じ質問でも毎回回答が異なります。複雑な課題ほど、データの与え方やプロンプトの微妙なニュアンスでも分析結果が変わりやすいかもしれません。