一、 项目背景与意义

云南作为中国的“花卉王国”,其鲜花产业在全国乃至全球都具有举足轻重的地位。然而,传统的鲜花销售模式面临着信息不对称、供需失衡、价格波动大、物流损耗高等诸多挑战。大数据技术的引入,为破解这些难题提供了全新的思路。

项目背景:

  • 产业规模庞大:云南鲜切花产量占全国近70%,交易量巨大,每日产生海量的订单、物流、价格数据。
  • 数据价值待挖掘:传统方式下,这些数据分散、孤立,未能有效整合分析,无法为生产、销售、物流决策提供精准指导。
  • 市场需求多变:消费者偏好、节日效应、气候因素等对鲜花销售影响显著,需要动态预测与响应。

项目意义:

  • 赋能产业升级:通过数据分析实现精准种植、智能定价、优化库存,提升产业整体效益。
  • 辅助科学决策:为花农、经销商、电商平台提供销量预测、价格趋势、热销品种等数据洞察。
  • 优化供应链:分析物流路径与时效,降低损耗,提升消费者体验。
  • 探索新商业模式:基于用户画像实现个性化推荐,挖掘潜在市场机会。

二、 技术栈选型

本项目采用以Python为核心的大数据技术栈,覆盖数据采集、存储、处理、分析与可视化全流程。

技术环节可选技术栈本项目选用说明
数据采集与接入Scrapy, BeautifulSoup, Requests, Selenium, Logstash, FlumeScrapy + RequestsScrapy用于结构化爬取电商平台、批发市场网站数据;Requests用于调用第三方数据API(如天气、物流)。
数据存储MySQL, PostgreSQL, MongoDB, HDFS, HBase, MinIOMySQL + MinIOMySQL存储结构化的交易、用户信息;MinIO对象存储用于存放原始的日志文件、图片等非结构化数据。
数据处理与计算Pandas, NumPy, PySpark, DaskPandas + PySparkPandas进行中小规模数据的快速清洗、转换与探索性分析;PySpark用于处理TB级历史数据的分布式计算。
数据分析与挖掘Scikit-learn, Statsmodels, TensorFlow, PyTorchScikit-learn实现销量预测(回归模型)、品种聚类、关联规则分析(如搭配购买)等经典机器学习任务。
数据可视化Matplotlib, Seaborn, Plotly, Pyecharts, SupersetPyecharts + SupersetPyecharts用于生成交互式分析图表;Superset用于构建面向业务人员的BI仪表板。
工作流调度Apache Airflow, LuigiApache Airflow编排每日的数据采集、清洗、计算任务,确保数据分析 pipeline 自动化、可监控。

三、 核心代码示例

1. 数据清洗与预处理 (Pandas)

原始销售数据通常存在缺失、异常、格式不一致等问题,需进行清洗。

import pandas as pd
import numpy as np
from datetime import datetime
def clean_sales_data(file_path):
"""
清洗鲜花销售数据
"""
# 读取数据
df = pd.read_csv(file_path, parse_dates=['order_date'])
# 1. 处理缺失值
# 价格用中位数填充,品种用‘未知’填充
df['price'] = df['price'].fillna(df['price'].median())
df['flower_type'] = df['flower_type'].fillna('未知')
2. 处理异常值 (基于IQR)
Q1 = df['quantity'].quantile(0.25)
Q3 = df['quantity'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df = df[(df['quantity'] >= lower_bound) & (df['quantity'] <= upper_bound)]
3. 数据转换:创建衍生特征
df['order_month'] = df['order_date'].dt.month
df['order_day_of_week'] = df['order_date'].dt.dayofweek
df['is_weekend'] = df['order_day_of_week'].apply(lambda x: 1 if x >= 5 else 0)
4. 标准化地区名称
df['region'] = df['region'].str.replace('云南省', '云南').str.strip()
print(f"清洗完成。原始记录数: {len(df)}, 清洗后记录数: {len(df)}")
return df
使用示例
cleaned_df = clean_sales_data('yunnan_flower_sales_raw.csv')
print(cleaned_df.head())

2. 销量预测模型 (Scikit-learn)

使用历史销量数据,构建时间序列特征,预测未来短期销量。

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error, mean_squared_error
import pandas as pd
def prepare_features(df, flower_type='玫瑰'):
"""
为指定鲜花品种准备时序特征
"""
# 筛选品种并按时序聚合(日销量)
df_type = df[df['flower_type'] == flower_type].copy()
daily_sales = df_type.groupby('order_date')['quantity'].sum().reset_index()
daily_sales.set_index('order_date', inplace=True)
daily_sales = daily_sales.asfreq('D').fillna(0) # 填充无销售日为0
# 创建滞后特征 (过去3天,7天,30天的销量)
for lag in [1, 2, 3, 7, 30]:
    daily_sales[f'lag_{lag}'] = daily_sales['quantity'].shift(lag)
创建滚动统计特征
daily_sales['rolling_mean_7'] = daily_sales['quantity'].rolling(window=7).mean().shift(1)
daily_sales['rolling_std_7'] = daily_sales['quantity'].rolling(window=7).std().shift(1)
添加星期几和月份特征
daily_sales['day_of_week'] = daily_sales.index.dayofweek
daily_sales['month'] = daily_sales.index.month
daily_sales.dropna(inplace=True) # 删除因创建特征产生的NaN行
return daily_sales
def train_sales_forecast_model(df, target_flower='玫瑰'):
"""
训练销量预测模型
"""
feature_df = prepare_features(df, target_flower)
划分特征和目标变量
X = feature_df.drop('quantity', axis=1)
y = feature_df['quantity']
划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)
训练模型
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
预测与评估
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print(f"模型训练完成 ({target_flower})")
print(f"平均绝对误差(MAE): {mae:.2f}")
print(f"均方根误差(RMSE): {rmse:.2f}")
查看特征重要性
feature_importance = pd.DataFrame({
'feature': X.columns,
'importance': model.feature_importances_
}).sort_values('importance', ascending=False)
print("\n特征重要性Top5:")
print(feature_importance.head())
return model, feature_df
使用示例
model, features = train_sales_forecast_model(cleaned_df, '玫瑰')

3. 数据可视化分析 (Pyecharts)

生成交互式图表,直观展示销售趋势、品种占比等。

from pyecharts.charts import Line, Pie, Bar, Grid
from pyecharts import options as opts
import pandas as pd
def create_sales_dashboard(df):
"""
创建销售分析仪表板图表
"""
# 1. 月度销售趋势图 (折线图)
monthly_sales = df.groupby('order_month')['quantity'].sum().reset_index()
line_chart = (
Line()
.add_xaxis(monthly_sales['order_month'].tolist())
.add_yaxis("销量", monthly_sales['quantity'].tolist(),
is_smooth=True,
label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(
title_opts=opts.TitleOpts(title="云南鲜花月度销售趋势"),
tooltip_opts=opts.TooltipOpts(trigger="axis"),
yaxis_opts=opts.AxisOpts(name="销量(支)")
)
)
# 2. 鲜花品种销量占比 (饼图)
type_sales = df.groupby('flower_type')['quantity'].sum().nlargest(10).reset_index()
pie_chart = (
    Pie()
    .add("", [list(z) for z in zip(type_sales['flower_type'], type_sales['quantity'])])
    .set_global_opts(
        title_opts=opts.TitleOpts(title="热销鲜花品种占比 (Top10)"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical")
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)"))
)
3. 各地区销售额排名 (柱状图)
region_revenue = df.groupby('region').apply(
lambda x: (x['quantity'] * x['price']).sum()
).nlargest(10).reset_index(name='revenue')
bar_chart = (
Bar()
.add_xaxis(region_revenue['region'].tolist())
.add_yaxis("销售额", region_revenue['revenue'].round(2).tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="各地区鲜花销售额排名 (Top10)"),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-45)),
yaxis_opts=opts.AxisOpts(name="销售额(元)")
)
)
可以将图表渲染为HTML文件
line_chart.render("monthly_sales_trend.html")
pie_chart.render("flower_type_pie.html")
bar_chart.render("region_revenue_bar.html")
print("销售分析图表已生成。")
return line_chart, pie_chart, bar_chart
使用示例
line, pie, bar = create_sales_dashboard(cleaned_df)

四、 总结与展望

本文介绍了基于Python的云南鲜花销售大数据处理与分析项目的背景意义、完整的技术栈选型以及三个关键环节的核心代码示例

核心价值:通过这套技术方案,可以将零散、原始的销售数据转化为指导生产、定价、营销的数据资产,助力云南鲜花产业实现数字化转型与智能化升级。

未来展望:

  • 实时分析:引入Flink等流处理框架,实现对销售、物流数据的实时监控与预警。
  • 深度学习应用:尝试使用LSTM、Transformer等模型进行更精准的长期销量与价格预测。
  • 数据中台构建:整合供应链上下游数据,形成统一的鲜花产业数据中台,提供更全面的分析服务。

希望本文能为从事农业大数据、电商数据分析或Python数据科学的朋友们提供一个完整的项目参考。

更多推荐