ClaudeCodeでCSVファイルを処理する方法【データ集計・変換・分析の実例】
「毎月、何千行もある売上CSVをExcelで開いて、ピボットテーブルでまとめている」「複数のCSVを結合したいが、VLOOKUPの式を組むのが面倒」「カラム名がバラバラで、毎回手作業で揃えている」——こうした“CSVに振り回される作業”は、業務の中でも特に時間を奪われやすい領域です。本記事では、自然言語で指示するだけでCSVファイルを自在に処理できるClaudeCodeを使い、読み込みからクレンジング、集計、Excel出力までを一気通貫で行う方法を、具体的なプロンプトとコード例を交えながら解説します。エンジニアでなくても、コピー&ペーストで実行できるようまとめました。
結論:CSV処理はClaudeCodeに任せれば数分で終わる
結論から言うと、ClaudeCodeとPython(特にPandasライブラリ)を組み合わせれば、これまで半日かけていたCSV集計作業が「3〜5分の対話」で完了します。理由は3つあります。第一に、ClaudeCodeはCSVのカラム構造を自動で読み取り、適切なデータ型を判定してくれるため、「日付がテキストになっている」「数値にカンマが入っていて計算できない」といったよくあるトラブルを自動で解消します。第二に、「月別の売上を集計して」「カテゴリ別の平均を出して」といった日本語の指示をそのままPandasのコードに翻訳してくれるため、SQLやプログラミング知識がほぼ不要です。第三に、結果をその場でExcel(.xlsx)形式で出力し、グラフ付きのレポートまで自動生成できるため、最終成果物までシームレスに到達できます。本記事では、実際の売上CSV(1万行規模)を題材に、月別・商品別・担当者別の集計を行い、最終的にExcelレポートとして出力する流れを実演します。CSV処理が日常業務に組み込まれている方なら、確実に数時間/週の削減になるはずです。
h2-1. ClaudeCodeでCSVを扱うための準備
CSV処理を始める前に、最低限の環境を整えておきましょう。といっても、難しいセットアップは不要です。
必要なもの
- ClaudeCodeがインストールされた端末(Mac/Windows両対応)
- Python 3.10以上
- 処理したいCSVファイル
PythonとClaudeCodeのインストールが済んでいない場合は、関連記事「ClaudeCodeのインストール手順」と「ClaudeCodeでPythonを使う方法」を先に参照してください。
まず、作業フォルダを作成します。デスクトップに csv-work というフォルダを作り、その中に処理したいCSVファイルを置きます。たとえば sales_2025.csv のような売上データです。次に、ターミナル(Macの場合)またはコマンドプロンプト(Windowsの場合)でそのフォルダに移動し、claude コマンドを実行してClaudeCodeを起動します。
cd ~/Desktop/csv-work
claude
起動後、最初に行うべきは「CSVの中身を見てもらう」ことです。これにより、ClaudeCodeはカラム構造やデータの傾向を把握し、後続の集計指示を正確に解釈できるようになります。
プロンプト例1:CSVの中身を確認する
sales_2025.csv の中身を確認して、カラム名、データ型、行数、欠損値の有無を教えてください。最初の10行も見せてください。
このプロンプトを送ると、ClaudeCodeは自動でPandasを使って pd.read_csv() を実行し、.info() や .head() の結果を返してくれます。出力例は以下のようなイメージです。
カラム一覧:
- order_date (object): 注文日(文字列形式)
- product_name (object): 商品名
- category (object): カテゴリ
- quantity (int64): 数量
- unit_price (float64): 単価
- staff_name (object): 担当者名
行数: 12,453
欠損値: category列に12件
ここまでで「データの全体像」が見えました。次のステップに進みましょう。
h2-2. CSVの読み込みと文字コード問題の解決
日本のビジネスCSVで最も多いトラブルが「文字コードのズレ」です。日本語Windowsで作成されたCSVは Shift_JIS(cp932) で保存されていることが多く、UTF-8 を前提とした処理だと文字化けします。
プロンプト例2:文字化けを解消する
sales_2025.csv を読み込もうとしたら文字化けしました。文字コードを自動判定して正しく読み込むPythonスクリプトを作ってください。
ClaudeCodeは chardet ライブラリで自動判定するスクリプトを書いてくれます。
import chardet
import pandas as pd
with open('sales_2025.csv', 'rb') as f:
result = chardet.detect(f.read(100000))
encoding = result['encoding']
print(f"検出された文字コード: {encoding}")
df = pd.read_csv('sales_2025.csv', encoding=encoding)
print(df.head())
これを read_csv.py というファイル名で保存し、python read_csv.py で実行すれば、文字化けせずに読み込めます。ClaudeCodeに「このスクリプトを実行して」と頼めば、実行までやってくれます。
大きなCSVを扱うコツ
10万行を超える大規模CSVの場合、メモリ不足になることがあります。その際は次のように指示します。
1GBのCSVファイル big_log.csv をチャンク単位で読み込み、メモリを節約しながら処理する方法を教えてください。
ClaudeCodeは pd.read_csv(..., chunksize=10000) を使ったループ処理のサンプルを提示してくれます。
h2-3. データクレンジング:実務で頻発する5つのパターン
生のCSVをそのまま集計しても、正確な結果は得られません。実務でよく遭遇する“汚れ”を、ClaudeCodeで一気に整える方法を見ていきます。
よくある5つの汚れ
- 日付列が文字列のまま(例: "2025/4/1" "2025-04-01" が混在)
- 数値にカンマが入っている(例: "1,200")
- 商品名の前後に空白が入っている
- 同じカテゴリ名の表記ゆれ(例: "雑貨" と "ザッカ")
- 欠損値(NaN)の扱いが曖昧
プロンプト例3:一気にクレンジング
df に対して以下のクレンジングをまとめて実行してください:
1. order_date を日付型に変換(形式が混在しているので自動判定)
2. unit_price のカンマを除去して数値型に変換
3. product_name の前後空白を削除
4. category の「ザッカ」を「雑貨」に統一
5. category の欠損値を「未分類」で埋める
ClaudeCodeが返すコード例:
import pandas as pd
df['order_date'] = pd.to_datetime(df['order_date'], errors='coerce')
df['unit_price'] = df['unit_price'].astype(str).str.replace(',', '').astype(float)
df['product_name'] = df['product_name'].str.strip()
df['category'] = df['category'].replace({'ザッカ': '雑貨'})
df['category'] = df['category'].fillna('未分類')
print(df.dtypes)
print(df.isnull().sum())
このように、これまで「Excelで1列ずつ置換していた」作業が、たった数行で完結します。
h2-4. 集計の基本:月別・カテゴリ別・担当者別
ここからが本番です。売上CSVを多角的に集計してみましょう。
プロンプト例4:月別売上を集計
df から月別の売上合計を出してください。売上は quantity × unit_price で計算します。結果を月ごとの表で見せてください。
ClaudeCodeのコード例:
df['sales'] = df['quantity'] * df['unit_price']
df['year_month'] = df['order_date'].dt.to_period('M')
monthly = df.groupby('year_month')['sales'].sum().reset_index()
monthly['sales'] = monthly['sales'].map('{:,.0f}'.format)
print(monthly)
出力例:
year_month sales
0 2025-01 3,452,800
1 2025-02 3,891,200
2 2025-03 4,210,500
...
プロンプト例5:カテゴリ × 月のクロス集計
カテゴリと月でクロス集計し、売上合計のピボットテーブルを作ってください。合計行と合計列も追加してください。
pivot = df.pivot_table(
index='category',
columns='year_month',
values='sales',
aggfunc='sum',
fill_value=0,
margins=True,
margins_name='合計'
)
print(pivot)
Excelのピボットテーブルとほぼ同じ結果が、コード1ブロックで得られます。
担当者別ランキング
担当者ごとの売上合計を降順で並べ、上位10名を表示してください。各担当者の取扱商品数も併記してください。
rank = df.groupby('staff_name').agg(
total_sales=('sales', 'sum'),
product_count=('product_name', 'nunique')
).sort_values('total_sales', ascending=False).head(10)
print(rank)
h2-5. 複数CSVの結合:VLOOKUPからの卒業
実務では「売上CSV」と「商品マスタCSV」を突き合わせて分析することがよくあります。Excelの VLOOKUP や XLOOKUP で行っていた作業も、ClaudeCodeなら一発です。
プロンプト例6:マスタCSVと結合
sales_2025.csv と product_master.csv を product_id をキーに結合してください。マスタには「原価」と「仕入先」のカラムがあるので、それを売上CSVに付与してください。
sales = pd.read_csv('sales_2025.csv', encoding='cp932')
master = pd.read_csv('product_master.csv', encoding='cp932')
merged = sales.merge(master[['product_id', 'cost', 'supplier']], on='product_id', how='left')
merged['profit'] = (merged['unit_price'] - merged['cost']) * merged['quantity']
print(merged.head())
これだけで、利益額(profit)まで一気に計算できます。VLOOKUPで5万行に式を入れていた人なら、その爆速感に驚くはずです。
複数フォルダ内のCSVを一括結合
data フォルダ内にある複数のCSVファイル(同じ構造)を全部読み込んで、1つのDataFrameに結合してください。
import glob
files = glob.glob('data/*.csv')
df_all = pd.concat([pd.read_csv(f, encoding='cp932') for f in files], ignore_index=True)
print(f"結合後の行数: {len(df_all)}")
h2-6. 異常値・重複・欠損のチェック
集計の前に必ずやっておきたいのが「データ品質チェック」です。これを怠ると、誤ったレポートで意思決定をしてしまうリスクがあります。
プロンプト例7:データ品質レポート
df に対して次のチェックを行い、結果をレポート形式でまとめてください:
- 行数、列数
- 各列の欠損数と割合
- 重複行の数
- 数値列の最小値・最大値・平均・中央値
- 異常値の候補(unit_price がマイナス、quantity が0以下など)
ClaudeCodeはこんなコードを返します。
print(f"形状: {df.shape}")
print("\n欠損値:")
print(df.isnull().sum())
print("\n重複行:", df.duplicated().sum())
print("\n数値列の統計:")
print(df.describe())
print("\n異常値候補:")
print("単価がマイナス:", (df['unit_price'] < 0).sum())
print("数量がゼロ以下:", (df['quantity'] <= 0).sum())
エラーや異常値が見つかれば、次のように対処を依頼できます。
unit_price がマイナスの行と、quantity が0以下の行を削除した新しいDataFrame df_clean を作ってください。
h2-7. 集計結果をExcelに出力する(グラフ付き)
CSVで集計しただけでは、上司や同僚に共有しづらいことがあります。最終的にはExcel(.xlsx)形式にまとめ、グラフも入れた“見せる資料”にしたいところです。
プロンプト例8:複数シートのExcelレポートを作る
集計結果を以下の構成でExcelファイル sales_report_2025.xlsx に出力してください:
- シート1: 月別売上(棒グラフ付き)
- シート2: カテゴリ × 月のピボット
- シート3: 担当者別ランキング上位10名
- シート4: 元データ(クレンジング後)
ClaudeCodeは openpyxl を使ったコードを生成してくれます。
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.utils.dataframe import dataframe_to_rows
wb = Workbook()
# シート1: 月別売上
ws1 = wb.active
ws1.title = "月別売上"
for r in dataframe_to_rows(monthly, index=False, header=True):
ws1.append(r)
chart = BarChart()
chart.title = "月別売上推移"
data = Reference(ws1, min_col=2, min_row=1, max_row=len(monthly)+1, max_col=2)
cats = Reference(ws1, min_col=1, min_row=2, max_row=len(monthly)+1)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
ws1.add_chart(chart, "D2")
# シート2-4 も同様に追加
ws2 = wb.create_sheet("カテゴリ別")
for r in dataframe_to_rows(pivot, index=True, header=True):
ws2.append(r)
ws3 = wb.create_sheet("担当者ランキング")
for r in dataframe_to_rows(rank.reset_index(), index=False, header=True):
ws3.append(r)
wb.save('sales_report_2025.xlsx')
print("レポートを出力しました")
これで、棒グラフ付きの月別売上表、ピボットテーブル、ランキング表が1つのExcelにまとまります。
h2-8. 定型化と自動化:毎月の作業をワンコマンドに
ここまでで個別の処理ができるようになりました。最後の仕上げは「毎月この処理を自動でやらせる」ことです。
プロンプト例9:処理を1ファイルにまとめる
これまでの処理(読み込み → クレンジング → 集計 → Excel出力)を1つの関数 generate_monthly_report(csv_path) にまとめ、引数のCSVパスを渡せば自動で同じレポートを出力できるようにしてください。
def generate_monthly_report(csv_path: str, output_path: str = 'report.xlsx'):
df = pd.read_csv(csv_path, encoding='cp932')
# クレンジング
df['order_date'] = pd.to_datetime(df['order_date'], errors='coerce')
df['unit_price'] = df['unit_price'].astype(str).str.replace(',', '').astype(float)
df['sales'] = df['quantity'] * df['unit_price']
# 集計
df['year_month'] = df['order_date'].dt.to_period('M')
monthly = df.groupby('year_month')['sales'].sum()
# 出力
monthly.to_excel(output_path)
print(f"{output_path} を出力しました")
generate_monthly_report('sales_2025.csv', 'sales_report_2025.xlsx')
これを monthly_report.py として保存し、毎月CSVが届いたら python monthly_report.py を叩くだけ、という運用に切り替えられます。さらにWindowsのタスクスケジューラやMacの cron と組み合わせれば、完全自動化も視野に入ります。
実践チュートリアル:売上CSVを30分で月次レポート化する
ここまでの内容を、1つのワークフローとしてまとめます。今夜にでも試してみてください。
ステップ1: デスクトップに csv-work フォルダを作り、対象のCSVを置く。
ステップ2: ターミナルで cd ~/Desktop/csv-work && claude を実行。
ステップ3: 次のプロンプトを連続で投げる。
1. sales_2025.csv の中身を見せてください。
2. 文字コードを判定して正しく読み込んでください。
3. データクレンジングを行ってください(日付変換、空白除去、欠損値処理)。
4. 月別、カテゴリ別、担当者別の集計を行ってください。
5. これらを sales_report_2025.xlsx に4シート構成で出力してください。グラフも入れてください。
6. 一連の処理を generate_monthly_report.py という1つのスクリプトにまとめてください。
実測で、初回は30分程度、2回目以降はCSVを差し替えて python generate_monthly_report.py を実行するだけなので3分以内で完了します。
FAQ
Q1. CSVファイルが文字化けして読み込めません。どうすればいいですか?
ほぼ確実に文字コードのミスマッチです。プロンプト例2で紹介した chardet を使った自動判定スクリプトを使うか、ClaudeCodeに「文字コードを自動判定して読み込んで」と指示すれば、cp932 や Shift_JIS を見つけ出して正しく開いてくれます。
Q2. 何百MBもある大きなCSVを扱えますか?
可能です。pd.read_csv(..., chunksize=10000) を使った逐次処理を依頼すれば、メモリにすべて載せずに集計できます。ClaudeCodeに「メモリを節約しながら処理してほしい」と一言添えるだけで対応してくれます。
Q3. Excelで開いてセルに色を付けたいのですが、できますか?
openpyxl を使えば、セルの背景色・フォント・罫線まで自由に指定できます。「金額が100万円以上のセルを黄色で塗ってください」のように具体的に指示するだけです。
Q4. CSVではなくTSV(タブ区切り)の場合は?
pd.read_csv(..., sep='\t') で読み込めます。ClaudeCodeに「これはTSVファイルです」と伝えれば、自動で対応してくれます。
Q5. 個人情報を含むCSVを扱うときの注意点は?
社外のサービスにアップロードしないでください。ClaudeCodeの処理は基本ローカルで行えますが、機微情報(マイナンバー、口座番号、メールアドレス等)はマスキングしてから扱うのが鉄則です。社内ルールがある場合は必ずそれに従い、不明な点はエンジニアに相談してください。
Q6. 集計結果をGoogleスプレッドシートに直接書き込めますか?
gspread ライブラリを使えば可能です。ただし、認証情報の取り扱いがやや煩雑なので、社内利用ならまずはExcel出力 → スプレッドシートにアップロード、という流れがおすすめです。
Q7. 毎月自動で実行する仕組みは作れますか?
Macなら cron、Windowsなら「タスクスケジューラ」で python monthly_report.py を定期実行する設定にすればOKです。ClaudeCodeに「毎月1日の朝9時に実行する設定方法を教えてください」と聞けば、具体的な手順を案内してくれます。
まとめ
CSV処理は、ビジネスパーソンが避けて通れない「地味だが時間のかかる作業」の代表格です。本記事では、ClaudeCodeを使ってCSVの読み込み・クレンジング・集計・Excel出力までを一気通貫で行う方法を紹介しました。ポイントは、(1)最初に必ずCSVの中身を見せて構造を把握させる、(2)汚れの種類を具体的に指示してクレンジングを依頼する、(3)集計はピボット・ランキングなど目的別に分けて頼む、(4)最後にExcel出力と関数化までセットで依頼する——この4ステップです。一度作ったスクリプトは何度でも再利用できるので、月次・週次の集計業務は確実に圧縮できます。今日のCSV、まずは「中身を見せてください」の一言から始めてみましょう。
関連記事
- ClaudeCodeとは何か?基本の理解
- ClaudeCodeの初めての使い方
- ClaudeCodeのプロンプトのコツ
- ClaudeCodeでPythonを使う方法
- ClaudeCodeでデータ分析を行う方法
- ClaudeCodeでExcel業務を自動化する方法