Home
avatar

麒麟剑

Claude Code实战教程(18):数据分析自动化流水线——从Excel到洞察

《从零开始的 Claude Code 实战系列教程》第 18 篇 · 公众号「麒麟剑的AI自动化Lab」连载

Data analysis and visualization ▲ 数据分析是商业决策的核心,AI 让这个过程变得前所未有的简单


一、数据分析的痛点

传统的数据分析流程存在诸多问题:

手动数据处理流程:
下载数据 → 打开 Excel → 清洗数据 → 分析 → 制作图表 → 写报告

每个步骤都可能出错:
• 复制粘贴遗漏
• 公式错误
• 图表误解
• 报告不一致

真实场景:每周一早上,分析师要花 3 小时处理上周的销售数据,生成报表。如果数据源发生变化,整个流程都要重做。


二、自动化流水线设计

整体架构

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│   数据源     │ →  │  数据清洗   │ →  │  数据分析   │
│  (CSV/API)  │    │   (Pandas)  │    │  (统计/ML)  │
└─────────────┘    └─────────────┘    └──────┬──────┘

┌─────────────┐    ┌─────────────┐           │
│   报告生成  │ ←  │   可视化    │ ←─────────┘
│ (PDF/HTML)  │    │  (图表)     │
└─────────────┘    └─────────────┘

三、实战:构建销售数据分析流水线

Step 1:数据导入与清洗

import pandas as pd
import anthropic

client = anthropic.Anthropic()

# 读取原始数据
df = pd.read_csv('sales_data.csv')

# Claude 帮助识别问题
message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[{
        "role": "user",
        "content": f"""
        分析以下销售数据的常见问题:
        {df.head(20).to_string()}
        
        请指出:
        1. 缺失值的位置和比例
        2. 异常值
        3. 数据类型问题
        """
    }]
)

print(message.content[0].text)

Step 2:数据清洗

def clean_sales_data(df):
    """
    数据清洗流程
    """
    # 1. 处理缺失值
    df['customer_id'].fillna(df['customer_id'].mode()[0], inplace=True)
    
    # 2. 转换日期
    df['order_date'] = pd.to_datetime(df['order_date'])
    
    # 3. 移除异常值
    df = df[df['amount'] < df['amount'].quantile(0.99)]
    
    # 4. 标准化格式
    df['product_category'] = df['product_category'].str.lower().str.strip()
    
    return df

Step 3:数据分析

def analyze_sales(df):
    """
    多维度分析
    """
    analysis = {
        'total_sales': df['amount'].sum(),
        'avg_order_value': df['amount'].mean(),
        'top_products': df.groupby('product')['amount'].sum().nlargest(10),
        'monthly_trend': df.resample('M', on='order_date')['amount'].sum(),
        'region_performance': df.groupby('region')['amount'].agg(['sum', 'mean'])
    }
    
    return analysis

Step 4:可视化

import matplotlib.pyplot as plt
import seaborn as sns

def create_visualizations(analysis):
    fig, axes = plt.subplots(2, 2, figsize=(14, 10))
    
    # 月度趋势
    axes[0, 0].plot(analysis['monthly_trend'])
    axes[0, 0].set_title('Monthly Sales Trend')
    
    # Top 产品
    axes[0, 1].barh(analysis['top_products'].index, 
                    analysis['top_products'].values)
    axes[0, 1].set_title('Top 10 Products by Sales')
    
    # 地区表现
    axes[1, 0].bar(analysis['region_performance'].index, 
                   analysis['region_performance']['sum'])
    axes[1, 0].setTitle('Sales by Region')
    
    # 分布
    axes[1, 1].hist(analysis['df']['amount'], bins=30)
    axes[1, 1].set_title('Order Amount Distribution')
    
    plt.tight_layout()
    plt.savefig('sales_report.png')

Step 5:报告生成

def generate_report(analysis):
    """
    生成分析报告
    """
    report = f"""
    # 销售数据分析报告
    
    ## 概述
    - 总销售额:${analysis['total_sales']:,.2f}
    - 平均订单价值:${analysis['avg_order_value']:,.2f}
    
    ## 月度趋势
    [月度趋势图]
    
    ## 热门产品
    {analysis['top_products'].to_string()}
    
    ## 地区表现
    {analysis['region_performance'].to_string()}
    
    ## 结论与建议
    1. Q4 季度销售增长明显,建议增加库存
    2. 地区 A 表现最佳,可考虑扩张
    3. 产品 X、Y、Z 是主力产品,应重点维护
    """
    
    with open('sales_report.md', 'w') as f:
        f.write(report)

四、自动化调度

使用 cron 定时执行

# 编辑 crontab
crontab -e

# 每天早上 9 点执行分析
0 9 * * * cd /path/to/project && python analyze.py

或使用 Python schedule

import schedule
import time

def job():
    df = pd.read_csv('sales_data.csv')
    df = clean_sales_data(df)
    analysis = analyze_sales(df)
    create_visualizations(analysis)
    generate_report(analysis)

# 每天 9 点执行
schedule.every().day.at("09:00").do(job)

while True:
    schedule.run_pending()
    time.sleep(60)

五、进阶:交互式分析

使用 Streamlit 构建 Dashboard

import streamlit as st
import pandas as pd

st.title('销售数据分析仪表盘')

# 上传文件
uploaded_file = st.file_uploader("上传销售数据", type=['csv'])

if uploaded_file is not None:
    df = pd.read_csv(uploaded_file)
    
    # 筛选器
    region = st.sidebar.selectbox('选择地区', df['region'].unique())
    start_date = st.sidebar.date_input('开始日期')
    end_date = st.sidebar.date_input('结束日期')
    
    # 过滤数据
    filtered_df = df[(df['region'] == region) & 
                     (df['order_date'] >= start_date) &
                     (df['order_date'] <= end_date)]
    
    # 展示指标
    col1, col2, col3 = st.columns(3)
    col1.metric('总销售额', f"${filtered_df['amount'].sum():,.2f}")
    col2.metric('订单数', len(filtered_df))
    col3.metric('平均订单', f"${filtered_df['amount'].mean():.2f}")
    
    # 图表
    st.line_chart(filtered_df.resample('M', on='order_date')['amount'].sum())

六、本章小结

组件工具用途
数据导入Pandas读取 CSV/Excel/数据库
数据清洗Pandas + Claude处理缺失值、异常值
数据分析Pandas + Claude统计分析和洞察
可视化Matplotlib/Seaborn生成图表
报告生成Markdown + Claude自动生成报告
自动化调度cron/Schedule定时执行
交互界面Streamlit构建 Dashboard

下期预告(第 19 篇):内容创作生产力革命——用AI加速你的写作、设计和发布流程

关注本系列,从入门到专家,系统掌握 Claude Code 的全部技能。

Claude Code 数据分析 自动化 流水线 实战 教程 Anthropic