数据分析知识备忘

By pocaster

一、基础必备技能

1. Python语法基础

  • 核心掌握
    • 变量/数据类型(整型、字符串、列表、字典)
    • 循环与条件语句(for/while/if-elif-else
    • 函数定义与调用(def函数、lambda匿名函数)
    • 文件读写(with open()处理CSV/TXT)
# 示例:快速数据清洗函数
def clean_data(text):
    return text.strip().lower()  # 去空格+转小写

data = [clean_data(line) for line in open('raw.txt')]

2. 数据处理三剑客

| 库 | 核心功能 | 典型应用场景 | |———–|—————————-|————————–| | NumPy | 多维数组运算 | 数值计算、矩阵操作 | | Pandas | 表格数据处理 | 数据清洗、聚合分析 | | Matplotlib | 基础可视化 | 快速绘制折线图/柱状图 |

# Pandas基础操作
import pandas as pd
df = pd.read_csv('sales.csv')
df.groupby('产品类别')['销售额'].sum().plot(kind='bar')  # 分类汇总+绘图

二、数据分析进阶能力

1. 数据清洗技巧

  • 处理缺失值:df.fillna()/df.dropna()
  • 去重处理:df.drop_duplicates()
  • 异常值检测:分位数筛选(df[df['价格'] < df['价格'].quantile(0.99)]

2. 特征工程方法

  • 时间特征提取:
    df['日期'] = pd.to_datetime(df['日期'])
    df['月份'] = df['日期'].dt.month  # 提取月份
    
  • 分类变量编码:pd.get_dummies()(独热编码)

3. 统计分析工具

  • 描述性统计:df.describe()
  • 相关性分析:df.corr()
  • 假设检验(需scipy.stats):
    from scipy import stats
    stats.ttest_ind(group1, group2)  # T检验
    

三、可视化技能树

1. 基础可视化库

  • Matplotlib:定制化强(适合科研)
    plt.scatter(x, y, s=50, alpha=0.5)  # 散点图
    
  • Seaborn:统计图表(适合业务报告)
    sns.heatmap(df.corr(), annot=True)  # 相关性热力图
    

2. 交互式可视化

  • Plotly:动态图表
    import plotly.express as px
    px.line(df, x='日期', y='销售额', color='地区')  # 交互式折线图
    

四、机器学习衔接

1. 基础算法实现

  • 使用scikit-learn快速建模:
    from sklearn.linear_model import LinearRegression
    model = LinearRegression()
    model.fit(X_train, y_train)
    

2. 模型评估指标

  • 分类问题:准确率(accuracy_score)、ROC曲线
  • 回归问题:MAE、RMSE

3. 特征重要性分析

pd.Series(model.feature_importances_, index=X.columns).sort_values().plot(kind='barh')

五、实战工具链

1. 自动化报告

  • Jupyter Notebook:交互式分析
  • PyPDF2/reportlab:生成PDF报告

2. 大数据处理

  • Dask:处理超出内存的数据
  • SQLAlchemy:与数据库交互

3. 部署应用

  • Streamlit:快速构建数据应用
    import streamlit as st
    st.line_chart(df)  # 一行代码生成网页图表
    

六、学习路径建议

  1. 新手阶段(1-2周)
    • 掌握Pandas数据操作(筛选/分组/合并)
    • 学会用Matplotlib绘制基础图表
  2. 进阶阶段(1个月)
    • 完成一个完整的数据分析项目(数据获取→清洗→分析→可视化)
    • 学习使用Seaborn/Plotly提升图表表现力
  3. 实战阶段(持续迭代)
    • 参与Kaggle竞赛(如Titanic、House Prices)
    • 复现行业分析报告(如电商销售分析、股票价格预测)

七、常见避坑指南

  • 内存不足:处理大文件时用chunksize分块读取
    for chunk in pd.read_csv('big_data.csv', chunksize=10000):
        process(chunk)  # 分批处理
    
  • 代码优化:避免用for循环处理DataFrame,优先使用向量化操作

以下通过一个 电商销售数据分析 的完整案例,用通俗易懂的方式说明数据分析的标准工作路径,包含每个阶段的具体代码和输出示例:


案例背景

某电商平台2023年销售数据(虚构数据),需分析:

  1. 哪些商品最赚钱?
  2. 用户购买行为的时间规律?
  3. 如何提高复购率?

一、数据获取与加载

1. 数据源

  • 格式:CSV文件(sales_2023.csv
  • 字段:订单ID、用户ID、商品名称、类别、单价、数量、订单日期、地区

2. Python代码

import pandas as pd
import matplotlib.pyplot as plt

# 加载数据
df = pd.read_csv('sales_2023.csv')
print(df.head())  # 查看前5行

输出示例: | 订单ID | 用户ID | 商品名称 | 类别 | 单价 | 数量 | 订单日期 | 地区 | |——–|——–|————|——–|——|——|————|——| | 1001 | U001 | 无线耳机 | 数码 | 299 | 2 | 2023-01-05 | 华东 | | 1002 | U002 | 运动水壶 | 家居 | 89 | 1 | 2023-01-12 | 华北 |


二、数据清洗与预处理

1. 处理问题

  • 缺失值:订单日期为空
  • 异常值:数量为负数
  • 新增字段:计算销售额(单价×数量)

2. Python代码

# 处理缺失值(删除日期缺失的行)
df = df.dropna(subset=['订单日期'])

# 处理异常值(数量必须>0)
df = df[df['数量'] > 0]

# 新增销售额字段
df['销售额'] = df['单价'] * df['数量']

# 转换日期格式
df['订单日期'] = pd.to_datetime(df['订单日期'])
df['月份'] = df['订单日期'].dt.month  # 提取月份

三、探索性分析(EDA)

1. 分析目标1:最赚钱的商品

# 按商品统计总销售额
top_products = df.groupby('商品名称')['销售额'].sum().sort_values(ascending=False).head(5)

# 可视化
top_products.plot(kind='bar', title='销售额TOP5商品', color='orange')
plt.ylabel('销售额(元)')
plt.show()

输出图表

2. 分析目标2:购买时间规律

# 按月统计订单量
monthly_orders = df['月份'].value_counts().sort_index()

# 绘制趋势图
monthly_orders.plot(marker='o', title='月度订单量趋势')
plt.xlabel('月份')
plt.ylabel('订单量')
plt.grid()
plt.show()

关键发现

  • 6月(618大促)、11月(双11)订单量激增
  • 3月、8月为销售低谷

四、深入分析(用户行为)

1. 复购率计算

# 计算每个用户的购买次数
user_purchase = df['用户ID'].value_counts()

# 复购用户定义:购买≥2次的用户
repeat_users = user_purchase[user_purchase >= 2].count()
total_users = user_purchase.count()
repeat_rate = repeat_users / total_users

print(f"复购率:{repeat_rate:.2%}")

输出结果复购率:35.67%

2. 复购用户特征分析

# 对比复购用户 vs 单次用户的客单价
df['用户类型'] = df['用户ID'].map(
    lambda x: '复购用户' if user_purchase[x] >= 2 else '单次用户'
)
df.groupby('用户类型')['单价'].mean().plot(kind='pie', autopct='%.1f%%')

结论: 复购用户的平均客单价(¥152)比单次用户(¥98)高55%


五、报告与建议

1. 关键结论

  • 高价值商品:无线耳机、高端键盘(数码类)
  • 最佳促销时间:3月/8月低谷期可加大促销力度
  • 复购策略:对客单价>¥100的用户推送会员权益

2. 自动化报告

from matplotlib.backends.backend_pdf import PdfPages

with PdfPages('销售分析报告.pdf') as pdf:
    # 保存图表到PDF
    plt.figure()
    top_products.plot(kind='bar')
    plt.title('高价值商品分析')
    pdf.savefig()
    plt.close()

六、工具与技巧总结

| 阶段 | 关键操作 | 常用函数/库 | |————–|—————————–|—————————-| | 数据获取 | 读取CSV/Excel | pd.read_csv() | | 数据清洗 | 处理缺失值/异常值 | dropna(), fillna() | | 特征工程 | 提取时间特征/分类编码 | dt.month, get_dummies()| | 分析可视化 | 绘制统计图表 | plot(), seaborn | | 报告输出 | 生成PDF/PPT | PdfPages, pptx |


下一步优化方向

  1. 预测模型:用历史数据预测下季度销售额(时间序列分析)
  2. 用户分群:通过RFM模型识别高价值用户
  3. AB测试:针对复购策略设计实验

如果「做菜」来比喻数据分析的全过程:


数据分析 = 做一道菜

1. 明确目标(想吃啥?)

  • ❌ 错误:”随便分析一下数据“ ✅ 正确:”找出为什么酸菜鱼外卖销量下降了20%“ 就像做菜前要先确定是煮面还是炒饭

2. 准备食材(找数据)

  • 需要哪些材料:
    • 订单表(买了啥)
    • 用户评价表(口味反馈)
    • 天气数据(下雨天是否影响配送) 就像做酸菜鱼需要鱼、酸菜、辣椒

3. 洗菜切菜(清洗数据)

  • 常见问题处理:
    • 去掉烂叶子 → 删除无效订单(如支付失败的)
      df = df[df['订单状态'] == '已完成']  # 只保留有效订单
      
    • 统一计量单位 → 把“半斤”“500克”统一成“克”
    • 检查过期食材 → 排除3年前的历史数据

4. 尝味道(探索分析)

  • 快速发现线索:
    • 销量下降的时间点:6月开始突然下跌
    • 差评关键词统计:
      # 统计差评里出现最多的词
      from collections import Counter
      bad_reviews = df[df['评分'] < 3]['评价内容']
      word_counts = Counter(" ".join(bad_reviews).split()).most_common(5)
      

      输出示例: [(‘太咸’, 89次), (‘送得慢’, 76次)]

5. 炒菜(建模分析)

  • 简单有效的分析方法:
    • 对比法
      • 6月 vs 5月:发现差评率从5%升到15%
    • 拆分法
      • 不同地区的差评率:浦东店差评率高达25% 就像尝一口发现太咸,马上检查盐罐子

6. 摆盘(呈现结果)

  • 老板能看懂的结论: ```markdown

    销量下降主要原因:

    • 🚩 浦东店新厨师手艺不稳定(差评率↑400%)
    • ⏱ 6月雨天多导致平均配送时间从30→50分钟

      建议行动:

      1. 对浦东店厨师进行再培训
      2. 雨天增加骑手补贴 ```

7. 复盘改进(下次做更好)

  • 验证措施效果:
    • 实施后差评率是否下降?
    • 对比实验:浦东店培训 vs 未培训的虹口店

关键心法口诀

  1. 先问为什么,再动手 (不要拿到数据就瞎跑代码)
  2. 数据会说谎,交叉验证 (发现“下雨影响销量”,要同时看竞品销量是否也跌)
  3. 用老板听得懂的话 (别说“P值<0.05”,要说“这个结论有95%把握”)

实际案例:奶茶店分析

  1. 问题:为什么周三销量特别低?
  2. 分析过程
    • 查数据:周三的“满30减5”活动停了
    • 查天气:周三常下雨(但其他下雨天销量正常)
    • 查竞品:竞品每周三固定半价
  3. 真相:竞品半价 + 自家没活动 = 顾客被抢走

工具选择原则

  • 小数据(<10万行):Excel+Python
  • 大数据:SQL+PySpark
  • 演示汇报:PPT+截图(别炫技!)

大胆假设,小心求证

数据分析模型是用于从数据中提取规律、预测趋势或分类问题的数学工具。以下是最常用、最实用的模型分类和通俗解释,配合应用场景和工具示例:


一、预测类模型(知道X猜Y)

1. 线性回归

  • 作用:预测数值(比如根据面积预测房价)
  • 公式房价 = 100万 + 2万×面积
  • 工具
    from sklearn.linear_model import LinearRegression
    model = LinearRegression().fit(X, y)  # X是面积,y是房价
    

2. 逻辑回归

  • 作用:预测概率(比如用户是否点击广告)
  • 输出:0~1之间的概率值
  • 示例
    from sklearn.linear_model import LogisticRegression
    model = LogisticRegression().fit(X, y)  # y是0(不点)或1(点击)
    

3. 时间序列(ARIMA)

  • 作用:预测未来销量/股价
  • 关键参数
    • p(看过去几天)
    • d(数据波动程度)
    • q(误差影响)
  • 代码
    from statsmodels.tsa.arima.model import ARIMA
    model = ARIMA(data, order=(7,1,0))  # 用过去7天预测明天
    

二、分类类模型(判断A还是B)

1. 决策树

  • 原理:像玩20问游戏(”收入>1万吗?→是→买过奢侈品吗?→…“)
  • 可视化工具graphviz
    from sklearn.tree import export_graphviz
    export_graphviz(tree_model, out_file='tree.dot')  # 生成流程图
    

2. 随机森林

  • 优势:多个决策树投票,避免过拟合
  • 调参重点
    • n_estimators(树的数量)
    • max_depth(树的最大深度)

3. XGBoost

  • 比赛神器:Kaggle冠军常用
  • 代码示例
    import xgboost as xgb
    model = xgb.XGBClassifier().fit(X_train, y_train)
    

三、分组类模型(物以类聚)

1. K-Means聚类

  • 应用场景:用户分群、商品分类
  • 如何确定K值:手肘法(找拐点)
    from sklearn.cluster import KMeans
    inertias = []
    for k in range(1,10):
        kmeans = KMeans(n_clusters=k).fit(data)
        inertias.append(kmeans.inertia_)  # 画出曲线找拐点
    

2. DBSCAN

  • 适合:不规则形状的分组(比如地图热点区域)
  • 参数
    • eps(邻域半径)
    • min_samples(最小簇点数)

四、关联类模型(啤酒+尿布)

1. Apriori算法

  • 经典案例:购物篮分析
  • 输出:{牛奶,面包} → 鸡蛋(置信度80%)
  • 工具mlxtend
    from mlxtend.frequent_patterns import apriori
    rules = apriori(df, min_support=0.1)  # 至少出现10%的组合
    

2. FP-Growth

  • 优化版:比Apriori更快
  • 适用:超大规模交易数据

五、深度学习模型(复杂模式)

1. 神经网络

  • 适用场景:图像识别、自然语言处理
  • 简单实现
    from tensorflow.keras.models import Sequential
    model = Sequential([
        Dense(64, activation='relu'),  # 隐藏层
        Dense(1, activation='sigmoid') # 输出层
    ])
    

2. LSTM(时序专用)

  • 特点:能记忆长期规律(比如股票周期)
  • 结构
    model.add(LSTM(units=50, return_sequences=True))  # 记忆单元
    

六、模型选择速查表

| 问题类型 | 推荐模型 | 适用场景举例 | |—————-|————————-|———————| | 预测销售额 | 线性回归/XGBoost | 电商促销效果预估 | | 判断用户流失 | 随机森林/逻辑回归 | 会员续费预警 | | 客户分群 | K-Means | 制定差异化营销策略 | | 商品推荐 | Apriori | 购物车搭配推荐 | | 图像分类 | CNN(卷积神经网络) | 瑕疵品检测 |


七、避坑指南

  1. 过拟合问题
    • 症状:训练集准确率95%,测试集只有60%
    • 解药
      • 增加数据量
      • RandomForest代替单棵决策树
      • 添加正则化参数(如penalty='l2'
  2. 数据泄漏
    • 典型错误:用未来数据预测过去(比如用2023年数据预测2022年)
    • 检查方法:确保所有特征值在预测时是已知的
  3. 模型解释
    • 工具推荐
      • SHAP值(解释特征重要性)
        import shap
        explainer = shap.TreeExplainer(model)
        shap_values = explainer.shap_values(X_test)
        

八、一句话总结核心模型

  • 要预测数字:线性回归/XGBoost
  • 要分是非:逻辑回归/随机森林
  • 要分群体:K-Means
  • 要找关联:Apriori
  • 要处理图片/文本:神经网络

实际工作中,先用简单模型跑通流程(比如逻辑回归),再逐步升级复杂模型。

Tags: Public