一、实际应用场景描述在零售与消费行业的数据分析中常见假设是天气越好线下外出消费人数越多但在实际 BI 报表与运营数据中经常观察到另一种现象- 晴天 / 多云线下客流上升线上订单平稳- 恶劣天气暴雨、暴雪、台风等线下客流下降线上消费金额显著上升本示例基于这一典型业务场景使用 Python 构建一个小型数据分析与验证流程用于- 清洗与整合天气数据与消费数据- 按天气等级聚合消费指标- 对比不同天气条件下的线上 / 线下消费差异二、引入痛点BI 分析中的现实问题在实际商务智能项目中常遇到以下问题1. 数据来源异构- 天气数据气象接口或 CSV- 消费数据订单表、交易日志2. 口径不一致- 天气粒度天- 消费粒度订单级含时间戳3. 结论依赖主观经验- “天气好就多卖”缺乏量化验证- 难以区分线上与线下在不同天气下的表现4. 分析过程不可复现- Excel 手工透视难维护、难复用因此需要一个模块化、可重复执行的分析脚本。三、核心逻辑讲解分析思路1. 分析假设- H0天气好坏对线上消费金额无显著影响- H1恶劣天气下线上消费金额显著上升2. 数据处理流程原始数据↓数据清洗缺失值、异常值↓时间对齐按天聚合↓天气等级划分好 / 一般 / 恶劣↓指标聚合订单数、消费金额、线上线下拆分↓对比分析与可视化3. 关键 BI 概念映射BI 概念 本例实现方式维度 日期、天气等级指标 订单数、消费金额切片 线上 / 线下聚合 groupby洞察 对比分析四、代码模块化实现Python项目结构weather_consumption_analysis/│├── data/│ ├── weather.csv│ └── orders.csv│├── src/│ ├── __init__.py│ ├── loader.py│ ├── cleaner.py│ ├── analyzer.py│ └── visualizer.py│├── main.py├── README.md└── requirements.txt1️⃣ 数据加载loader.pyimport pandas as pddef load_weather(path: str) - pd.DataFrame:加载天气数据字段要求date, weather_score (0-10)df pd.read_csv(path)df[date] pd.to_datetime(df[date])return dfdef load_orders(path: str) - pd.DataFrame:加载订单数据字段要求order_id, order_time, amount, channel(online/offline)df pd.read_csv(path)df[order_time] pd.to_datetime(df[order_time])return df2️⃣ 数据清洗与对齐cleaner.pyimport pandas as pddef align_by_date(orders: pd.DataFrame, weather: pd.DataFrame) - pd.DataFrame:按日期合并订单与天气数据orders[date] orders[order_time].dt.datedaily_orders (orders.groupby([date, channel])[amount].sum().reset_index())merged pd.merge(daily_orders, weather, ondate, howleft)return merged3️⃣ 天气等级划分与分析analyzer.pyimport pandas as pddef classify_weather(score: int) - str:天气评分分类if score 8:return goodelif score 5:return normalelse:return baddef analyze(merged_df: pd.DataFrame) - pd.DataFrame:按天气等级与渠道分析消费金额df merged_df.copy()df[weather_level] df[weather_score].apply(classify_weather)result (df.groupby([weather_level, channel])[amount].mean().unstack(fill_value0))return result4️⃣ 可视化visualizer.pyimport matplotlib.pyplot as pltdef plot_bar(result_df: pd.DataFrame):绘制柱状图result_df.plot(kindbar, figsize(6, 4))plt.ylabel(Average Daily Amount)plt.title(Weather vs Consumption by Channel)plt.tight_layout()plt.show()5️⃣ 主程序main.pyfrom src.loader import load_weather, load_ordersfrom src.cleaner import align_by_datefrom src.analyzer import analyze, classify_weatherfrom src.visualizer import plot_bardef main():weather load_weather(data/weather.csv)orders load_orders(data/orders.csv)merged align_by_date(orders, weather)result analyze(merged)print(result)plot_bar(result)if __name__ __main__:main()五、README 文件简化版# Weather vs Consumption Analysis## 项目简介本项目用于分析天气状况与消费行为之间的关系重点对比不同天气条件下线上与线下消费金额的变化趋势。## 使用说明1. 安装依赖pip install -r requirements.txt2. 准备数据- data/weather.csv- data/orders.csv3. 运行分析python main.py## 适用人群- 商务智能学习者- 数据分析入门者- 全栈 / 后端工程师六、核心知识点卡片BI Python类别 内容数据处理 pandas, groupby, merge时间处理 dt.date, to_datetime业务建模 维度 / 指标 / 聚合分析思维 假设 → 验证 → 对比工程化 模块化、函数封装可视化 matplotlib 基础绘图七、总结通过本示例可以看到- 天气确实会影响消费渠道选择- 恶劣天气下线上消费金额往往高于线下- 借助 Python 与 BI 分析框架可以将经验假设转化为可量化、可复现的结论利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛