ClaudeCodeでデータ分析する方法【Excel/CSVデータをPythonで分析】
「会社のExcelデータを分析したいけれど、関数では限界がある」「Pythonでデータ分析と聞くと難しそう」と感じている方は多いはずです。実はClaudeCodeを使えば、PandasやMatplotlibを暗記していなくても、自然言語の指示だけで本格的なデータ分析ができてしまいます。本記事では、売上データを題材にしながら、CSV/Excelの読み込み、集計、可視化、レポーティングまでの一連の流れを、プロンプト例とコードサンプルで丁寧に解説します。プログラミング未経験の方でも、この記事に沿って手を動かせば「自分のデータで自分の答えを出す」体験ができるはずです。
結論:ClaudeCode×Pythonで「Excel仕事」を5倍速にできる
Excelで何時間もかかっていた集計作業が、ClaudeCodeとPythonを組み合わせると驚くほど短時間で終わります。具体的にできるようになることは次の通りです。第一に、複数ファイルにまたがる大量のデータを一発で結合・集計できます。第二に、月次・週次・商品別など、自由な切り口でクロス集計が可能です。第三に、Matplotlibやseabornでプレゼン用の美しいグラフを自動生成できます。第四に、外れ値の検出や移動平均など、Excelでは煩雑な分析がワンコマンドで完了します。第五に、分析結果をExcelやPDFとして書き出して、関係者にすぐ共有できます。
本記事では「あるECショップの1年分の売上CSV」を題材に、ClaudeCodeに指示しながら売上の傾向把握、商品別ランキング、月次推移、異常値の検出までを実装していきます。完成する頃には、自分の業務データに置き換えてすぐ応用できる「分析テンプレート」が手元に残ります。
h2-1. 環境構築:PythonとClaudeCodeの準備
まずはローカルマシンにPython 3.11以上を入れます。Macならbrew install python@3.11、WindowsならMicrosoft Storeから「Python 3.11」をインストールするのが手軽です。
分析用フォルダを作りClaudeCodeを起動します。
mkdir sales-analysis && cd sales-analysis
claude
最初の指示はこちらです。
プロンプト例1:「このフォルダでPythonのデータ分析環境を作りたいです。venvで仮想環境を作り、pandas、openpyxl、matplotlib、seaborn、jupyterをインストールしてください。ノートブック形式とスクリプト形式の両方で作業できるようにしてください。」
ClaudeCodeは次のような手順で進めてくれます。
python3 -m venv .venv
source .venv/bin/activate
pip install pandas openpyxl matplotlib seaborn jupyter
requirements.txtも自動で生成してくれるので、別マシンでも同じ環境を再現できます。
h2-2. データの読み込み:CSV・Excelの基本
題材となる売上データは次のような構造を想定します。
order_id,order_date,customer_id,product_name,category,unit_price,quantity
1001,2025-04-01,C0001,シャンプーA,日用品,1200,2
1002,2025-04-01,C0042,フェイスマスクB,化粧品,800,3
...
ClaudeCodeに読み込みコードを書いてもらいます。
プロンプト例2:「data/sales_2025.csvを読み込んでDataFrameに格納するスクリプトを作成してください。order_dateは日付型に変換し、売上金額(amount = unit_price * quantity)の列を追加してください。」
# analyze.py
import pandas as pd
df = pd.read_csv('data/sales_2025.csv', parse_dates=['order_date'])
df['amount'] = df['unit_price'] * df['quantity']
print(df.head())
print(df.info())
Excelファイル(.xlsx)でも、pd.read_csvをpd.read_excelに変えるだけで同じように読み込めます。複数シートある場合はsheet_nameで指定できます。
df = pd.read_excel('data/sales_2025.xlsx', sheet_name='4月', parse_dates=['order_date'])
h2-3. データクレンジング:欠損値と異常値の処理
実務データは想像以上に汚れています。まずは状態を把握しましょう。
プロンプト例3:「DataFrameの基本統計量、欠損値の数、重複行の有無を出力してください。異常値(quantityが0以下、unit_priceがマイナス)の行を抽出してリストアップしてください。」
print(df.describe())
print('欠損値:')
print(df.isnull().sum())
print('重複:', df.duplicated().sum())
invalid = df[(df['quantity'] <= 0) | (df['unit_price'] < 0)]
print('異常値:')
print(invalid)
# クレンジング
df = df.drop_duplicates()
df = df[(df['quantity'] > 0) & (df['unit_price'] >= 0)]
df['product_name'] = df['product_name'].str.strip()
文字列の前後空白、表記揺れ(半角・全角)、カテゴリ名の統一などはこの段階で済ませておくと、後工程が楽になります。
h2-4. 集計:月次・カテゴリ別の売上推移
データが整ったらいよいよ集計です。
プロンプト例4:「月別の売上金額の合計と、カテゴリ別の売上ランキングを出力してください。月別はYYYY-MM形式、カテゴリ別は売上の高い順に並べてください。」
# 月別売上
monthly = (
df.assign(year_month=df['order_date'].dt.strftime('%Y-%m'))
.groupby('year_month', as_index=False)['amount']
.sum()
.sort_values('year_month')
)
print(monthly)
# カテゴリ別売上ランキング
by_category = (
df.groupby('category', as_index=False)['amount']
.sum()
.sort_values('amount', ascending=False)
)
print(by_category)
ピボットテーブル風のクロス集計もワンライナーで書けます。
pivot = pd.pivot_table(
df,
index=df['order_date'].dt.strftime('%Y-%m'),
columns='category',
values='amount',
aggfunc='sum',
fill_value=0,
)
print(pivot)
Excelで作るとマウス操作で5分かかるような集計が、Pythonでは数行で完了します。
h2-5. 可視化:Matplotlibとseabornでグラフを描く
数字だけ並んでいても傾向は掴みにくいので、グラフ化します。
プロンプト例5:「月別売上の折れ線グラフ、カテゴリ別売上の棒グラフ、月×カテゴリのヒートマップの3枚を作成してください。日本語フォントが文字化けしないように設定し、figures配下にPNGで保存してください。」
import matplotlib.pyplot as plt
import seaborn as sns
import os
os.makedirs('figures', exist_ok=True)
# 日本語対応(Macの場合)
plt.rcParams['font.family'] = 'Hiragino Sans'
# 1. 月別売上の折れ線
plt.figure(figsize=(8, 4))
plt.plot(monthly['year_month'], monthly['amount'], marker='o')
plt.title('月別売上推移')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('figures/monthly_sales.png', dpi=150)
plt.close()
# 2. カテゴリ別棒グラフ
plt.figure(figsize=(8, 4))
sns.barplot(data=by_category, x='category', y='amount')
plt.title('カテゴリ別売上')
plt.tight_layout()
plt.savefig('figures/category_sales.png', dpi=150)
plt.close()
# 3. ヒートマップ
plt.figure(figsize=(10, 5))
sns.heatmap(pivot, annot=True, fmt='.0f', cmap='Blues')
plt.title('月×カテゴリ売上ヒートマップ')
plt.tight_layout()
plt.savefig('figures/heatmap.png', dpi=150)
plt.close()
Windowsの場合は'Yu Gothic'、Linuxの場合は'Noto Sans CJK JP'など、環境に合わせてフォントを変えてください。文字化けはClaudeCodeに「Pythonのグラフで日本語が文字化けしないようにして」と頼めば一発で解決します。
h2-6. 実践チュートリアル:売上分析レポートを自動生成する
ここからは応用編です。分析結果を毎月手作業でまとめるのは大変なので、自動化します。
プロンプト例6:「これまでの集計結果と3つのグラフを、1つのExcelファイル(report.xlsx)にまとめてください。シート構成は『サマリー』『月別』『カテゴリ別』『ピボット』とし、サマリーシートにはグラフ画像も貼り付けてください。」
from openpyxl import Workbook
from openpyxl.drawing.image import Image
from openpyxl.utils.dataframe import dataframe_to_rows
wb = Workbook()
# サマリーシート
ws_summary = wb.active
ws_summary.title = 'サマリー'
ws_summary['A1'] = '売上分析レポート'
ws_summary['A2'] = f'対象期間: {df["order_date"].min().date()} 〜 {df["order_date"].max().date()}'
ws_summary['A3'] = f'総売上: {df["amount"].sum():,.0f} 円'
ws_summary['A4'] = f'注文件数: {len(df):,} 件'
ws_summary['A5'] = f'平均単価: {df["amount"].mean():,.0f} 円'
ws_summary.add_image(Image('figures/monthly_sales.png'), 'A7')
ws_summary.add_image(Image('figures/category_sales.png'), 'A30')
# 各シートにDataFrameを書き込む
def write_df(wb, name, frame):
ws = wb.create_sheet(name)
for row in dataframe_to_rows(frame, index=False, header=True):
ws.append(row)
write_df(wb, '月別', monthly)
write_df(wb, 'カテゴリ別', by_category)
write_df(wb, 'ピボット', pivot.reset_index())
wb.save('report.xlsx')
print('report.xlsx を生成しました')
これで関係者にメール添付するだけで分析報告が完了する状態になりました。毎月の定例レポートが10分以内に終わります。
h2-7. 一歩進んだ分析:移動平均と異常検知
トレンドを見るには移動平均、突発的な変動を見るには標準偏差ベースの異常検知が便利です。
プロンプト例7:「日次の売上を集計し、7日移動平均を計算してください。さらに、平均±2σを超える日を異常日として抽出し、CSVで保存してください。」
daily = df.groupby('order_date', as_index=False)['amount'].sum().sort_values('order_date')
daily['rolling_7d'] = daily['amount'].rolling(7).mean()
mean = daily['amount'].mean()
std = daily['amount'].std()
upper = mean + 2 * std
lower = mean - 2 * std
anomalies = daily[(daily['amount'] > upper) | (daily['amount'] < lower)]
anomalies.to_csv('anomalies.csv', index=False)
plt.figure(figsize=(10, 4))
plt.plot(daily['order_date'], daily['amount'], label='日次売上', alpha=0.5)
plt.plot(daily['order_date'], daily['rolling_7d'], label='7日移動平均', color='red')
plt.axhline(upper, color='gray', linestyle='--')
plt.axhline(lower, color='gray', linestyle='--')
plt.legend()
plt.tight_layout()
plt.savefig('figures/daily_with_ma.png', dpi=150)
plt.close()
セール日やキャンペーン日が異常日として浮かび上がるはずです。逆に売上が落ち込んだ日が見つかれば、当日のイベント(システム障害や天気など)と紐づけて原因分析できます。
h2-8. データの保管と再現性:パイプライン化のすすめ
最後に、分析の再現性を担保する工夫を紹介します。Excel手作業では「誰が・いつ・どんな順序で集計したか」が残らないため、結果がブレがちです。Pythonスクリプトであれば、同じデータと同じスクリプトから常に同じ結果が出ます。
プロンプト例(参考):「分析処理を
pipeline.pyにまとめ、コマンドラインからpython pipeline.py --input data/sales_2025.csv --output report.xlsxで実行できるようにしてください。」
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--input', required=True)
parser.add_argument('--output', default='report.xlsx')
args = parser.parse_args()
# 既存の処理を関数化して呼び出す
run_pipeline(args.input, args.output)
if __name__ == '__main__':
main()
このようにスクリプト化しておけば、毎月実行するだけでレポートが更新されます。さらに進めて、cronやCloudflare Workersの定期実行と組み合わせれば、完全自動の分析パイプラインが完成します。
FAQ
Q1. Excelで十分なのに、なぜPythonを使うのですか? A. 大量データ・複雑な集計・繰り返し処理ではPythonの方が圧倒的に速く、ミスも減ります。一度スクリプトを作れば翌月以降は数秒で再実行できます。
Q2. Jupyter Notebookとスクリプト、どちらで作業すべきですか? A. 探索的にデータを眺める段階はNotebook、最終的な定常業務はスクリプトに落とすのが王道です。両者を行き来する運用がベストです。
Q3. 個人情報を含むデータを扱っても安全ですか? A. ローカルで処理する分には問題ありませんが、クラウドにアップロードする場合は必ず会社の規程と暗号化を確認してください。生のCSVをGitリポジトリに含めないように注意しましょう。
Q4. グラフのデザインをもっと洗練させたいです。
A. seabornのテーマ(sns.set_theme(style='whitegrid')など)や、plotlyの利用がおすすめです。インタラクティブなダッシュボードならStreamlitも候補に入ります。
Q5. 機械学習による予測もできますか? A. はい、scikit-learnを追加すれば需要予測や顧客分類が可能です。ClaudeCodeに「過去データから来月の売上を予測したい」と相談すれば最適なモデルを提案してくれます。
Q6. データが10GB以上ある場合は? A. PandasではメモリにロードしきれないのでDuckDBやPolarsの利用が現実的です。ClaudeCodeに「大規模CSVを高速集計したい」と伝えれば適切なツールを選んでくれます。
Q7. 分析結果をWebで共有したいです。 A. Streamlit、Gradio、Next.jsダッシュボードなど選択肢は多数あります。社内利用ならCloudflare AccessでURLにアクセス制限をかけるのが安全でおすすめです。
まとめ
ClaudeCodeとPythonを組み合わせれば、これまでExcelで何時間も費やしていた集計・可視化作業が、ほんの数十行のスクリプトで完結します。本記事では売上データを題材に、読み込み・クレンジング・集計・可視化・レポート出力・異常検知・パイプライン化までを実践しました。重要なのは、ClaudeCodeに「やりたいこと」を素直に伝えることです。分析手法を知らなくても、ClaudeCodeが適切なアプローチを提案してくれます。あなたの手元にある業務データで、ぜひ今日から「自動分析」をはじめてみてください。