「Claude Codeにデータ集計を任せてみたいけれど、生成されたコードの精度は本当に信頼できるのか」「処理速度はどれくらいなのか」「手元にある数万行規模のCSVでも問題なく使えるのか」――実務でCSVやExcelを扱っているデータサイエンティスト・アナリストであれば、一度はこうした疑問を持ったことがあるはずです。
Claude CodeでCSVデータ分析はどこまで任せられるのか
この記事では、概念の紹介にとどまらず、個人情報を含まない架空の売上データ(1,000行・10,000行・100,000行の3パターン)を実際に用意し、集計・可視化コードを生成させ、その妥当性・処理時間・大量データでの挙動を検証した結果を一次情報として提示します。
結論を先に述べると、独立した別ロジックによるクロスチェックでは矛盾は一件も見つからず、100,000行のデータでも読み込み・集計・可視化の合計処理時間は1秒未満でした。一方で、今回の検証はローカル環境でのスクリプト直接実行によるものであり、Claude Code CLI経由の対話的な実行そのものを検証したわけではない点、数十万行を超える規模は検証していない点など、断っておくべき前提もあります。詳しくは本文で順に解説します。
なお、Claude Code自体の基本機能や導入方法をまだ知らない方は、まずClaude Codeとは何かを解説した記事を読んでおくと、この記事の内容がより理解しやすくなります。
検証の前提:どんなデータで何を確認したか
検証結果を正しく評価してもらうために、まず今回使用したデータの内容と検証環境、そして検証の範囲を明確にしておきます。過大評価を避けるための前提条件として先に共有します。
今回使用したのは、個人情報を含まない架空の小売売上データです。日付・カテゴリ・商品名・数量・単価・店舗・匿名の顧客ID・売上金額の8列で構成し、乱数生成によって作成しました。カテゴリは食品・日用品・電化製品・文房具・衣料品の5種類、店舗は東京本店・大阪支店・名古屋支店・福岡支店・札幌支店の5店舗とし、顧客IDは「C012345」のような連番の匿名コードのみで、氏名や住所などの実在の個人情報は一切含んでいません。
データ規模は、実務でよくある範囲を想定して1,000行・10,000行・100,000行の3パターンを用意しました。検証環境はWindows 11 Home、Python 3.13.14、pandas 3.0.5、numpy 2.5.2、matplotlib 3.11.1です。
ここで正直に断っておきたいのは、この検証がローカルのPython/pandas環境で検証者自身がスクリプトを直接実行したものであり、Claude Code CLIを通じた対話的なコード生成・実行のセッションそのものではないという点です。実際にClaude Code経由でCSV分析を依頼した場合の応答時間やコード品質は、今回の検証結果と異なる可能性があります。また、使用したデータはすべて乱数生成の架空データであり、実データに特有の欠損値・表記揺れ・外れ値・エンコーディング崩れなどは含んでいません。そのため、実務で発生しがちなデータクリーニングの作業時間は、今回の実行時間には含まれていません。
Claude CodeにCSVを読み込ませて集計・可視化を指示する手順
ここからは、実際にどのような手順でClaude Codeに分析を指示したのかを具体的に見ていきます。ファイルの準備から自然言語での指示の出し方、生成されたコードの中身まで、読者が自分のCSVで同じ流れを再現できるように順を追って説明します。
CSVファイルをClaude Codeに読み込ませる
分析対象のCSVファイルは、プロジェクトディレクトリ内に配置するか、指示文の中に絶対パス・相対パスを含めて指定します。Claude Codeはファイルシステムに直接アクセスできるため、「〇〇.csvを読み込んで、以下の集計をしてください」という形で指示するだけで、ファイルの内容を確認しながらコードを組み立ててくれます。個人情報や機密情報を含むデータを扱う場合は、実行環境やログの取り扱いに注意し、必要であれば匿名化・マスキングしたデータを使うことをおすすめします。
集計・可視化を自然言語で指示する
今回は次のような内容を自然言語で依頼しました。
- 月別・カテゴリ別の売上をクロス集計してほしい
- 店舗別の売上ランキングを算出してほしい
- 月次売上の前月比と3ヶ月移動平均を計算してほしい
- 店舗別売上ランキングの棒グラフと、月次売上推移+移動平均の折れ線グラフをPNG画像として出力してほしい
いずれも「〇〇を集計して」「グラフにして」といった一般的な言い回しで指示しており、pandasの関数名やオプションを細かく指定する必要はありませんでした。
生成されたコードと出力結果を確認する
実際に生成されたコードのうち、集計部分は次のようなものでした。
df["year_month"] = df["date"].dt.to_period("M").astype(str)
monthly_category = df.pivot_table(
index="year_month", columns="category", values="sales_amount",
aggfunc="sum", fill_value=0
)
store_ranking = df.groupby("store")["sales_amount"].sum().sort_values(ascending=False)
monthly_total = df.groupby("year_month")["sales_amount"].sum().sort_index()
monthly_total_df = monthly_total.to_frame("sales_amount")
monthly_total_df["mom_pct_change"] = monthly_total_df["sales_amount"].pct_change() * 100
monthly_total_df["rolling_3m_avg"] = monthly_total_df["sales_amount"].rolling(3).mean()
pivot_tableで月別×カテゴリ別の集計表を作り、groupbyで店舗別ランキングを算出し、pct_changeとrolling(3).mean()で前月比と3ヶ月移動平均を求めるという、pandasの基本的な集計パターンを組み合わせたコードが自動的に生成されました。可視化についても、店舗別売上ランキングの棒グラフと月次売上推移+移動平均の折れ線グラフがPNG画像として出力されました。
なお、ここで示している集計結果の数値そのものは、今回用意した架空データに基づくものであり、実データを反映したものではありません。
生成されたコードの集計結果は正しいのか:3手法によるクロスチェック
生成されたコードが「動く」ことと「結果が正しい」ことは別問題です。ここでは、Claude Codeが生成したpandasの集計結果を、独立した別ロジックで再計算し、一致するかどうかを実際に検証した結果を示します。
検証方法は次の通りです。まず店舗別売上合計については、groupbyによる集計結果を、店舗ごとにデータをフィルタしてquantity × unit_priceを再計算した値と比較しました。
manual_store_sum = {}
for store in df["store"].unique():
sub = df[df["store"] == store]
manual_store_sum[store] = int((sub["quantity"] * sub["unit_price"]).sum())
match = all(
manual_store_sum[k] == v for k, v in store_ranking.round(0).astype(int).to_dict().items()
)
# -> 1,000/10,000/100,000行いずれの規模でも match は True(完全一致)であることを確認した
同様に、総売上金額はsales_amount列のsum()とquantity × unit_priceを都度再計算したsum()を比較し、月別売上合計はdt.to_period("M")ベースの集計とdt.strftime("%Y-%m")ベースの別集計を比較しました。
結果として、1,000行・10,000行・100,000行のいずれの規模でも、店舗別売上合計・総売上金額・月別売上合計のすべての項目で完全一致し、矛盾は一件も見つかりませんでした。実測値としては、総売上金額が1,000行で13,359,327円、10,000行で142,079,398円、100,000行で1,421,313,394円となり、いずれも独立した再計算値と完全に一致しています。
ただし、この結果はあくまで今回検証した架空データと、今回検証者自身が行ったクロスチェックの範囲での結果です。あらゆるデータ、あらゆる集計内容において常に正確であることを保証するものではない点には注意してください。
データ量を増やすと処理速度はどう変わるのか:実測結果
続いて、データ行数を増やしたときに処理速度やメモリ使用量がどう変化するのかを実測しました。1,000行・10,000行・100,000行それぞれについて、CSV読み込み・集計・可視化(PNG出力)の合計時間を計測しています。
実測処理時間は、1,000行で0.76秒、10,000行で0.52秒、100,000行で0.76秒でした(いずれもCSV読み込み・集計・可視化の合計で、CSV自体の生成時間は含んでいません)。メモリピークは100,000行でも約19MBにとどまり、今回検証した範囲(〜10万行、8列)では、速度・メモリ面で明確な限界は確認されませんでした。

興味深いのは、処理時間の内訳です。集計処理そのものにかかった時間は1,000行で0.015秒、10,000行で0.026秒、100,000行で0.149秒と、行数が増えても増加はごくわずかでした。一方で、matplotlibのfigure生成・保存にかかる可視化の時間は0.48〜0.74秒と、行数によらずほぼ一定で、処理時間全体の大半を占めていました。つまり、行数を増やしていく際のボトルネックは集計処理そのものではなく、グラフ描画側の固定コストである可能性が高いということです。
なお、今回の検証はあくまで最大100,000行までの範囲であり、数十万行を超える規模は検証していません。100,000行までの範囲で明確な限界が見えなかったからといって、それ以上の規模でも同様の性能が出るとは限らない点には注意してください。
手動集計と比べてどれくらい速いのか(見積もりであることに注意)
Claude Codeによる自動集計が「速い」と言われても、比較対象がなければ実感が湧きません。ここでは手動での作業時間との比較を示しますが、これは実測ではなく一般的な実務経験に基づく見積もりであることを、まずはっきりお伝えしておきます。
1,000行のデータをExcelで月別・カテゴリ別集計、店舗別ランキング、簡単なグラフ作成まで行う場合、ピボットテーブル作成自体は数分で終わるものの、データ整形やグラフの体裁調整、前月比列の追加などを含めると15〜30分程度が一般的な目安と考えられます。10,000行規模になるとExcelの動作がやや重くなり始めるため、pandasを手書きで使うケースも想定されますが、この場合はgroupbyやpivot_table、rolling等の構文を都度確認しながら書くことになり、慣れたエンジニアでも一通りのコードを書いてデバッグするのに30〜60分程度かかると考えられます。100,000行規模になるとExcelでは動作が重くなるため実務ではpandas/SQL等を使うのが一般的ですが、コード自体は10,000行の場合とほぼ同じで書けるものの、大量データゆえの動作確認やグラフの見た目調整、型変換エラーなどのデバッグに追加時間がかかると想定され、45〜90分程度が目安です。これらの見積もりはあくまで一般的な目安であり、個人のExcel・pandasスキルによって大きく変動します。
ここで注意したいのは、Claude Codeの実測処理時間(1秒未満〜数秒)と、この手動見積もり時間(15分〜90分)を単純に比較できない点です。実測値は「コードが完成した後の実行時間」であるのに対し、見積もり時間は「要件把握・コード記述・デバッグ・体裁調整まで含めた作業時間」であり、比較している作業の単位が異なります。桁違いの差があるように見えても、両者を同じ土俵で比較した数値ではないことを踏まえて読んでください。
実務でClaude CodeによるCSV分析を使う際に気をつけたいこと
最後に、実際に自分のデータでClaude CodeによるCSV分析を試す際に踏まえておきたい注意点を、今回の検証で分かった範囲でまとめます。過度な期待を防ぎ、導入の判断材料としてもらうことが目的です。
matplotlibのデフォルトフォント(DejaVu Sans)は日本語グリフを含まないため、店舗名やカテゴリ名を日本語ラベルとしてグラフに描画しようとすると、Glyph missingという警告が大量に出力され、グラフ内の日本語文字が正しく表示されない、いわゆる「豆腐文字」になる現象が今回の検証でも実際に発生しました。実務で日本語ラベル入りのグラフを作る場合は、Meiryo・IPAexGothicといった日本語対応フォントを明示的に設定する必要があります。
また、繰り返しになりますが、今回の検証はローカルでのスクリプト直接実行によるものであり、Claude Code CLI経由の対話的なやり取りそのものを検証したわけではありません。実際にClaude Code経由でCSV分析を依頼した場合の応答時間や対話でのコード品質は、今回の検証結果とは異なる可能性があります。加えて、実データには欠損値・表記揺れ・外れ値・エンコーディング崩れが含まれることが多く、今回の実行時間にはそうしたデータクリーニング作業の時間は含まれていません。そして、検証は最大100,000行までであり、数十万行を超える規模の挙動は未検証です。それ以上の規模を扱う場合は、自身の環境・データで改めて確認することをおすすめします。
まとめ:Claude CodeでのCSV分析、どこまで信頼して任せられるか
今回の検証で確認できたのは、Claude Codeが生成したpandasコードの集計結果が、3手法による独立したクロスチェックで矛盾なく完全一致したこと、そして100,000行までのデータでは処理速度・メモリ面で明確な限界が見られなかったことです。これらは実際にスクリプトを実行して得られた実測結果です。
一方で、手動作業との比較で示した時間は実測ではなく見積もりである点は改めて強調しておきます。実測情報(クロスチェック結果、処理時間)と見積もり情報(手動作業時間)を混同せず、それぞれ何に基づく数値なのかを意識して判断材料にしてください。
実務で使う際は、日本語フォントの設定、Claude Code CLI経由の対話実行との差異、実データ特有のクリーニングコスト、数十万行を超える規模が未検証であることといった点に注意が必要です。まずは個人情報を含まない小規模なデータで試し、生成されたコードの妥当性を自分自身でも確認しながら、段階的に活用範囲を広げていくことをおすすめします。





コメント