🧠

Claudeの新機能analysis toolでデータ分析をやってみた

2024/10/28に公開

こんにちは。そのだです。
Claudeでanalysis tool(プレビュー機能)が出たので、試しにデータ分析をやってみました。

analysis toolとは

「Introducing the analysis tool in Claude.ai」によると、analysis toolは以下の機能を提供してます。

  • JavaScriptコードを記述して実行できるようになった
  • データの処理、分析の実行、リアルタイムの分析情報の生成を行えるようになった
  • 複雑な計算を実行し、データを分析し、さまざまなアイデアを繰り返し検討してから、答えを共有できる

すなわち、analysis toolは、データを読み込み、その内容を確認し、必要な計算や分析を行います。分析の過程で得られた結果はリアルタイムでチャット内に表示されるため、段階的にデータの理解を深めながら作業を進めることができます。

https://www.anthropic.com/news/analysis-tool

事前準備

analysis toolはプレビュー機能なので、有効化する必要があります。

  1. サイドバーのアドレスをクリックし、Feature Previewをクリックする
  2. Analysis Toolをonにする

実際に使ってみた

福岡市関連9ダム貯水量のcsvを使って、分析していこうと思います。
以下のデータを使用します。
https://ckan.open-governmentdata.org/dataset/401307-mizukanri
以下のプロンプトでcsvを分析します。

4つのダム(五ケ山ダム、曲渕ダム、瑞梅寺ダム、南畑ダム)の貯水量データについて、基本的な統計量を分析して下さい。
また、時系列での変化を可視化してください。

すると画像のような結果が返ってきました。

view analysisをクリックすると、分析した時のコードとその結果が記載されています。

import Papa from 'papaparse';
import _ from 'lodash';

// CSVファイルを読み込む
const fileContent = await window.fs.readFile('202410data3.csv', { encoding: 'utf8' });

// CSVをパース
const parsedData = Papa.parse(fileContent, {
  header: true,
  dynamicTyping: true,
  skipEmptyLines: true
});

// 対象のダム
const targetDams = ['五ケ山ダム', '曲渕ダム', '瑞梅寺ダム', '南畑ダム'];

// 各ダムの基本統計量を計算
const stats = {};
targetDams.forEach(dam => {
  const values = parsedData.data.map(row => row[dam]);
  stats[dam] = {
    mean: _.mean(values),
    min: _.min(values),
    max: _.max(values),
    std: Math.sqrt(_.meanBy(values, v => Math.pow(v - _.mean(values), 2))),
    current: values[0], // 最新値
    change: values[0] - values[values.length-1] // 期間中の変化
  };
});

console.log('基本統計量:', stats);

// 変動係数(標準偏差/平均)を計算
const cv = {};
targetDams.forEach(dam => {
  cv[dam] = (stats[dam].std / stats[dam].mean) * 100;
});

console.log('変動係数 (%):', cv);
Result

基本統計量: {"五ケ山ダム":{"mean":31676.293934681184,"min":31472,"max":31700,"std":50.761440747765,"current":31472,"change":-228},"曲渕ダム":{"mean":2366.7667185069986,"min":2353,"max":2368,"std":2.9339562343613035,"current":2368,"change":2},"瑞梅寺ダム":{"mean":1189.5365474339035,"min":1165,"max":1213,"std":13.115107759082782,"current":1198,"change":29},"南畑ダム":{"mean":3340.4961119751165,"min":3139,"max":3807,"std":222.00926360494003,"current":3668,"change":367}}
変動係数 (%): {"五ケ山ダム":0.16025056735626578,"曲渕ダム":0.12396474107140136,"瑞梅寺ダム":1.1025392861930141,"南畑ダム":6.645996767039309}

その下にartifactのコードがあり、プロンプトで指定した特徴が記載されています。

いい感じに可視化されましたね。

次はcsvのデータをわざと欠損させてみて、きちんと分析してくれるのか試してみます。
先ほどのデータはそのままで、曲渕ダムの2024/10/25 13:00から2024/10/27 11:00のデータを削除し、同じプロンプトを投げてみます。
view analysisをクリックした結果は以下のとおりです。

import Papa from 'papaparse';
import _ from 'lodash';

// CSVファイルを読み込む
const fileContent = await window.fs.readFile('202410data4.csv', { encoding: 'utf8' });

// CSVをパース
const parsedData = Papa.parse(fileContent, {
  header: true,
  skipEmptyLines: true,
  dynamicTyping: true
});

const data = parsedData.data;

// 対象のダム
const targetDams = ['五ケ山ダム', '曲渕ダム', '瑞梅寺ダム', '南畑ダム'];

// 基本統計量を計算
targetDams.forEach(dam => {
  const values = _.compact(data.map(row => row[dam])); // 欠損値を除外
  console.log(`\n${dam}の統計情報:`);
  console.log(`最大値: ${_.max(values)}`);
  console.log(`最小値: ${_.min(values)}`);
  console.log(`平均値: ${(_.sum(values) / values.length).toFixed(2)}`);
  console.log(`データ数: ${values.length}`);
});

// 貯水量の変動幅を計算
targetDams.forEach(dam => {
  const values = _.compact(data.map(row => row[dam]));
  const range = _.max(values) - _.min(values);
  console.log(`\n${dam}の変動幅: ${range}`);
});

先ほどとは違い、欠損値を除外するコードが追加されています。
次にプロンプトで指定した特徴とartifactを見てみましょう。

曲渕ダムの欠損部分もきちんと反映されていますね。

まとめ

使用したいデータを分析したい内容をプロンプトに入れることで、即座に分析し表示してくれました。それだけではなく、追加で分析したい場合は、追加で質問することで、その分析結果やグラフを生成してくれます。しかも、作成されたartifactはPublish Artifactで公開することができるので、他のメンバーに共有することができます。とても便利なので、皆様使ってみて下さい。

Fusic 技術ブログ

Discussion