一、项目背景
近年来,直播带货、短视频种草、社交裂变等新电商模式迅速发展,成为电商行业新的增长引擎。与传统货架电商相比,新电商具有更强的互动性和内容驱动特征,用户可以在直播间实时互动下单,也可以通过短视频了解产品后直接购买。然而,新电商的快速发展也带来了新的挑战:多平台数据分散,商家难以全面掌握经营状况;用户评论中蕴含着大量有价值的信息,但人工分析效率低下;直播带货与短视频的效果如何量化评估,仍是决策中的痛点。
针对上述问题,我基于Kaggle公开电商销售数据集、LSEC直播电商数据集以及B站爬取的视频数据,利用Python生态中的Pandas、scikit-learn、Streamlit等工具,构建了一套新电商智能分析决策系统。
技术栈:Python 3.9 | Streamlit | Pandas | Scikit-learn | Jieba | Plotly | DeepSeek API
二、系统架构
系统采用分层架构设计,分为数据层、业务逻辑层和表示层三个层次。数据层负责原始数据的存储与读取,包含了商品数据、评论数据、销售趋势数据以及新电商特色的直播、短视频、社交裂变、达人和弹幕等八个数据文件。业务逻辑层是系统的核心,封装了数据处理、情感分析、销量预测、统计检验和AI智能分析等关键算法模块,每个模块以独立的形式存在,便于单独测试和维护。表示层基于Streamlit框架构建,负责与用户进行交互,接收用户的操作指令并调用业务逻辑层完成计算,最后将结果以图表、表格或文本的形式呈现给用户。
项目目录结构如下所示,主应用文件app.py是Streamlit的入口,约1500行代码。数据文件统一存放在data/raw目录下,核心业务逻辑代码封装在src目录下,其中data_processing子目录负责数据的加载、清洗、特征工程和标准化,models子目录包含了情感分析、销量预测、统计检验和AI智能分析等模块,visualization子目录统一管理所有图表绘制函数。
系统架构图如下所示,数据从底层的数据文件向上流向业务逻辑层各模块,经过处理后最终汇聚到表示层呈现给用户,层与层之间职责明确、流向清晰。
三、数据获取与处理
3.1 数据来源
系统整合了三个不同来源的真实数据集。第一个来源是Kaggle公开电商销售数据集,涵盖订单ID、订单日期、商品名称、品类、子品类、单价、销量、销售额及支付方式等关键字段,经过数据提取与转换,系统从中整理出3835个不同商品的完整信息。第二个来源是LSEC直播电商数据集,由京东AI研究院公开发布,以TSV格式存储了用户ID、商品ID和购买次数的三元组交互记录,共处理了632个商品,为直播带货分析模块提供了真实购买行为数据支撑。第三个来源是B站公开API,系统爬取了热门视频的播放量、点赞数和弹幕数等互动数据,共计3256条记录,为短视频分析模块提供了真实的用户互动素材。
数据获取与探索流程图如下所示,三路数据并行进入数据处理模块统一处理,随后依次经过数据清洗、特征工程和Z-score标准化三个环节,最终输出标准化的数据集。
3.2 数据加载
数据加载由数据处理模块统一管理。该模块会自动定位项目目录下的数据文件夹路径,通过pandas的read_csv函数直接读取商品、评论和销售趋势三个核心数据文件,并存储为DataFrame格式。加载完成后,按顺序触发完整的数据清洗、特征工程和标准化流程。数据加载的核心代码如下:
import pandas as pd import os class DataProcessor: def __init__(self, data_dir=None): base = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) self.data_dir = os.path.join(base, "data", "raw") def load_data(self): self.products_df = pd.read_csv( os.path.join(self.data_dir, "products_crawled.csv"), encoding="utf-8-sig" ) self.reviews_df = pd.read_csv( os.path.join(self.data_dir, "reviews_crawled.csv"), encoding="utf-8-sig" ) self.sales_df = pd.read_csv( os.path.join(self.data_dir, "sales_trend.csv"), encoding="utf-8-sig" ) return self3.3 数据清洗
数据清洗是确保模型质量的前提。系统针对不同数据表的特点执行了差异化的清洗策略。对于商品表,主要操作是删除重复的商品记录,并对促销类型字段中的缺失值统一填充为"无促销"。对于评论表,系统先删除了重复的评论记录,然后剔除了评论内容为空或仅包含无意义字符串的记录,在此过程中使用了pandas的向量化操作来替代低效的逐行处理方式。对于销售趋势表,清洗工作主要是将日期列转换为标准的日期时间格式,并删除销量或收入为空的无效记录。数据清洗的核心代码如下:
def clean_data(self): # 商品表:删除重复商品 self.products_df = self.products_df.drop_duplicates(subset=["product_id"]) # 商品表:填充缺失值 self.products_df["promotion_type"] = self.products_df["promotion_type"].fillna("无促销") # 评论表:删除重复评论 self.reviews_df = self.reviews_df.drop_duplicates(subset=["review_id"]) # 评论表:过滤空文本(向量化操作) self.reviews_df = self.reviews_df[ self.reviews_df["review_text"].str.len() >= 3 ] invalid_texts = ["nan", "null", ""] self.reviews_df = self.reviews_df[ ~self.reviews_df["review_text"].str.lower().isin(invalid_texts) ] # 销售趋势表:日期格式转换 self.sales_df["date"] = pd.to_datetime(self.sales_df["date"]) # 销售趋势表:删除空记录 self.sales_df = self.sales_df.dropna(subset=["daily_sales", "daily_revenue"]) return self3.4 特征工程
特征工程旨在从原始数据中构造出更具预测能力的解释变量。系统从商品维度、评论聚合维度和销售聚合维度三个方面构造了丰富的特征集。在商品维度,通过匹配"满减"、"限时"、"半价"等关键词生成了促销标记,同时将是否直播和是否视频营销转换为数值型的0/1标记。在评论维度,按商品进行分组聚合,计算了每个商品的平均评分、总点赞数和实际评论数。在销售维度,同样按商品分组统计了30天总销量、日均销量、日销量标准差以及平均直播时长,并进一步计算了变异系数以衡量销量的波动程度。最后,通过数据合并操作将上述聚合特征整合到商品主数据中,并对合并过程中产生的缺失值进行了合理填充。特征工程的核心代码如下:
def feature_engineering(self): # 商品维度特征 self.products_df["has_promotion"] = ( self.products_df["promotion_type"] .str.contains("满减|限时|半价|新人|买赠|秒杀", na=False) .astype(int) ) self.products_df["is_live_numeric"] = ( self.products_df["is_live_streaming"].map({"是": 1, "否": 0}) ) # 评论维度聚合 r_agg = self.reviews_df.groupby("product_id", sort=False).agg( avg_review_rating=("rating", "mean"), total_likes=("likes_count", "sum"), review_count_actual=("review_id", "count"), ).reset_index() # 销售维度聚合 s_agg = self.sales_df.groupby("product_id", sort=False).agg( total_sales_30d=("daily_sales", "sum"), avg_daily_sales=("daily_sales", "mean"), std_daily_sales=("daily_sales", "std"), total_revenue_30d=("daily_revenue", "sum"), avg_live_hours=("live_streaming_hours", "mean"), ).reset_index() s_agg["sales_cv"] = s_agg["std_daily_sales"] / (s_agg["avg_daily_sales"] + 1) # 合并特征 self.merged_df = self.products_df.merge(r_agg, on="product_id", how="left") self.merged_df = self.merged_df.merge(s_agg, on="product_id", how="left") return self数据处理与特征工程流程图如下所示,三个并行的清洗分支汇聚后进入特征工程模块,并行构造三类特征,随后通过数据合并将所有特征整合,再经过Z-score标准化输出完整数据集。
3.5 数据标准化
由于不同特征的量纲和数值范围差异较大,为避免模型训练时偏向于数值较大的特征,系统使用StandardScaler对选取的数值型特征进行了Z-score标准化处理。该操作使得每个特征的数据分布变为均值为0、标准差为1,从而消除了量纲影响。标准化后的新特征列在原列名基础上添加了"_norm"后缀,并最终合并回主数据中,供后续的模型训练使用。
from sklearn.preprocessing import StandardScaler def standardize_data(self): num_cols = ["price", "rating", "reviews_count", "sales_volume"] scaler = StandardScaler() scaled = scaler.fit_transform(self.merged_df[num_cols]) for i, col in enumerate(num_cols): self.merged_df[f"{col}_norm"] = scaled[:, i] return self四、评论情感分析
4.1 情感分析方法
评论情感分析是系统的重要功能模块之一,基于jieba分词工具对评论文本进行精确切词,并利用内置的正面情感词典(包含"好"、"棒"、"赞"、"满意"、"实惠"等60余个词汇)和负面情感词典(包含"差"、"烂"、"失望"、"退货"、"破损"等80余个词汇)进行词频统计。同时,算法还考虑了"不"、"没"、"无"等否定词以及"非常"、"特别"、"很"、"有点"等程度副词对情感极性的修饰与反转作用,最终综合计算出一条评论的情感得分,范围在-1(极度负面)到1(极度正面)之间。
情感关键词提取功能分别提取正面和负面评论中的TOP15关键词,过滤掉无实际意义的停用词后返回出现频率最高的关键词。若筛选出的关键词少于3个,系统会自动退回到普通词频统计模式,确保分析结果始终有内容可展示。
情感分析流程图如下所示,从评论文本输入开始,经过jieba分词后并行进入正面匹配和负面匹配两个分支,汇合后进入否定词与程度副词检测环节,随后计算情感得分并分类,最终进入可视化展示阶段。
情感分析的核心代码如下:
import jieba class SentimentAnalyzer: def __init__(self): self.positive_words = {"好", "棒", "赞", "满意", "推荐", "实惠", "耐用"} self.negative_words = {"差", "烂", "失望", "退货", "破损", "瑕疵", "色差"} self.negation_words = {"不", "没", "无"} self.adverb_words = {"非常": 1.5, "特别": 1.4, "很": 1.2, "有点": 0.7} def analyze_single(self, text): words = jieba.lcut(text) pos_score, neg_score = 0, 0 negate = False for word in words: if word in self.negation_words: negate = True continue weight = 1 if word in self.adverb_words: weight = self.adverb_words[word] if word in self.positive_words: pos_score += weight * (-1 if negate else 1) negate = False elif word in self.negative_words: neg_score += weight * (-1 if negate else 1) negate = False total = pos_score + neg_score return max(-1, min(1, total))4.2 分析结果展示
在系统的"评论洞察"页面,以直观的卡片和图表形式展示了分析成果,包括评论总数(3835条)、平均情感得分(0.51)和正面评价占比(56.3%)三个关键指标,情感分布饼图(正面占56.3%、中性占42.3%、负面占1.41%),情感得分分布直方图,以及正面关键词TOP15和负面关键词TOP15柱状图。底部提供评论详情展开区,支持按情感类型筛选查看具体评论文本、评分和情感得分。
五、销量预测模型
5.1 模型选择
销量预测本质上是一个典型的回归问题。本系统选择随机森林作为核心预测模型,主要基于其出色的鲁棒性和泛化能力。随机森林通过Bootstrap抽样生成多个不同的训练子集,在每个子集上独立训练决策树,最后取所有树的平均值作为预测结果,能够有效降低过拟合风险,同时天然支持混合类型的特征输入并输出特征重要性排序。
5.2 特征准备
模型的特征准备阶段从处理好的数据集中提取模型输入特征,包含价格、评分、评论数、是否直播、是否促销、品类编码、平台编码、平均评分、总点赞数以及平均直播时长等。系统会动态检测数据集中实际存在的列,并对可能存在的缺失值采用中位数填充策略。
5.3 模型训练与评估
模型训练采用标准流程,将数据按80%训练集和20%测试集的比例进行随机划分。为了寻找最优的超参数组合,系统采用网格搜索策略,参数空间包括树的数量、最大深度、内部节点再划分所需最小样本数和叶子节点最少样本数,并采用3折交叉验证以R²分数作为评价标准。搜索完成后使用最佳参数组合训练最终模型,并输出特征重要性排序。模型评估指标包括R²(测试集,0.7169)、CV R²(3折交叉验证,0.7215)、RMSE(1.5)和MAE(0.2)。
销量预测模型训练流程图如下所示,从特征和目标变量的准备开始,经过数据划分后进入网格搜索与交叉验证环节,随后训练最优模型并评估,最终输出特征重要性排序并用于交互式预测。
模型训练的核心代码如下:
from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score import numpy as np class SalesPredictor: def prepare_features(self, df): feature_cols = ["price", "rating", "reviews_count", "is_live_numeric", "has_promotion", "category_encoded", "platform_encoded"] X = df[feature_cols].fillna(df[feature_cols].median()) y = df["sales_volume"] return X, y def train(self, X, y): X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 ) param_grid = { "n_estimators": [100], "max_depth": [10, 15], "min_samples_split": [5], "min_samples_leaf": [2], } rf = RandomForestRegressor(random_state=42, n_jobs=-1) grid = GridSearchCV(rf, param_grid, cv=3, scoring="r2", n_jobs=-1) grid.fit(X_train, y_train) self.model = grid.best_estimator_ y_pred = self.model.predict(X_test) self.metrics = { "r2": r2_score(y_test, y_pred), "rmse": np.sqrt(mean_squared_error(y_test, y_pred)), "mae": mean_absolute_error(y_test, y_pred), } self.feature_importance = dict(zip(X.columns, self.model.feature_importances_)) return self5.4 模型预测界面
在"模型预测"页面,系统展示评估指标卡片、特征重要性排序图、预测值与实际值散点图,以及交互式预测区域。用户调整价格、评分、直播、促销、类目、平台、直播时长等参数后,系统实时输出预估月销量和预估月营收。交互式预测的核心代码如下:
def predict_single(self, features): X_input = pd.DataFrame([features]) X_input = X_input.fillna(X_input.median()) return self.model.predict(X_input)[0]六、统计检验
统计检验模块利用scipy.stats库为分析结论提供统计学支撑,集成了四种常用的假设检验方法。独立样本t检验用于检验直播带货组与非直播组的销量均值是否存在显著差异,先通过Levene检验判断方差齐性,若方差不齐则采用Welch t检验。单因素方差分析用于检验不同电商平台间的商品评分是否存在显著差异,要求每个平台至少有3个样本才参与计算。相关性检验同时计算Pearson相关系数和Spearman秩相关系数。卡方检验用于检验"是否直播带货"与"是否参与促销"两个类别变量之间是否存在关联。
统计检验流程图如下所示,从数据集出发并行进入四个分支,各分支独立完成统计计算后汇聚到结果汇总表。
独立样本t检验的核心代码如下:
from scipy import stats def t_test(self, df): live_sales = df[df["is_live_numeric"] == 1]["sales_volume"] normal_sales = df[df["is_live_numeric"] == 0]["sales_volume"] levene_stat, levene_p = stats.levene(live_sales, normal_sales) equal_var = levene_p >= 0.05 t_stat, t_p = stats.ttest_ind(live_sales, normal_sales, equal_var=equal_var) return { "检验类型": "独立样本t检验", "t统计量": t_stat, "p值": t_p, "显著性": "显著" if t_p < 0.05 else "不显著", "直播组均值": live_sales.mean(), "非直播组均值": normal_sales.mean() }在"统计检验"页面,系统依次展示四项检验结果:Welch t检验(p=0.0000,直播与非直播销量存在显著差异)、ANOVA方差分析(p=0.0924,不同平台间评分无显著差异)、价格-销量相关性检验(Pearson r=-0.1256,p=0.0000,显著负相关)、Mann-Whitney U检验(p=0.0000,促销对销量有显著影响)。页面下方展示特征相关性热力图和检验结果汇总表格。
七、新电商特色分析
新电商特色页面是本系统区别于传统电商分析工具的核心亮点,通过五个Tab页分别展示直播带货、短视频种草、社交裂变、达人画像和弹幕互动五个新电商核心场景。
直播带货Tab页展示直播场次(1860场)、累计GMV(18894.2万)、平均客单价(¥89)和平均转化率(5.2%)四个指标卡片,以及TOP10主播GMV排行柱状图,展示疯狂小杨哥、辛巴、交个朋友、李佳琦、董宇辉等头部主播的GMV表现。
短视频种草Tab页展示视频总数、累计播放和累计点赞三个指标,视频类型分布饼图(教程分享、开箱测评、品牌故事、产品种草),以及各平台完播率箱线图。
社交裂变Tab页展示社交商品数(100个)、平均K因子(0.176)和社交占比(17%)三个指标,K因子分布直方图和TOP10裂变商品排行。K因子≥0.15的商品可称为"社交爆品",通过分享机制实现低成本获客。
达人画像Tab页展示达人总数(50位)、月总GMV(14.2千万)和头部占比(32%)三个指标,达人等级分布饼图、各品类达人GMV柱状图和达人综合实力榜表格。头部达人贡献约60%GMV,"头部效应"显著。
弹幕互动Tab页展示弹幕总数(500条)、下单相关(49%)和正面弹幕占比三个指标,弹幕情感分布饼图、下单意向占比环形图和弹幕内容样本表格。"买买买""已下单"等弹幕可触发从众效应,弹幕密度与GMV具有显著正相关。
八、AI智能分析
AI智能分析页面通过三个Tab页分别展示RAG智能问答、知识库管理和智能体分析三大功能。RAG智能问答提供基于电商知识库与大模型API的智能问答系统,用户输入问题后,系统先从知识库中检索相关知识作为上下文,再调用大模型API生成增强分析结果。知识库管理展示了知识库内容概览(商品4467件、评论3835条、直播商品1860件、促销商品632件、品类11个大类、平台4个)和技术方案(sentence-transformers向量化、余弦相似度检索、语义搜索+关键词搜索双引擎、DeepSeek-V3大模型),并提供加载重建与搜索测试功能。智能体分析展示了智能数据分析代理的三大能力:意图识别、工具调用和结果整合,用户选择分析任务后智能体自动调用相应工具生成分析报告。
AI智能分析流程图如下所示,从用户输入问题开始,判断是否启用大模型。若不启用则直接返回基于真实数据的统计摘要;若启用则进入知识库检索,根据向量检索是否可用分别走语义向量检索或关键词检索两条路径,检索结果与用户问题共同构建Prompt后调用DeepSeek大模型API,最终生成AI分析报告并展示。
九、页面展示
系统包含八个核心功能页面,导航采用Streamlit的侧边栏机制构建,侧边栏顶部为品牌标识区域,展示了"新电商智能分析"标题以及"直播带货·短视频种草·社交裂变"三个核心标签,并配有"实时"、"AI"、"短视频"三个状态徽章。导航菜单包含八个菜单项,当前选中项以高亮样式突出显示。
新电商智能分析决策系统
十、AI使用说明
在开发过程中使用了AI辅助编程工具DeepSeek,主要应用场景如下:
| 使用场景 | 具体应用 |
|---|---|
| 数据加载与字段映射 | 将原始CSV字段名规范化为Python命名风格,处理数据类型转换 |
| 商品名称翻译 | 将英文品类词直译为中文,去除拉丁占位词 |
| 性能优化 | 将apply逐行操作改为向量化操作,groupby禁用排序 |
| Bug修复 | 修复KeyError缺失列异常等运行问题 |
典型迭代案例如下:数据加载性能优化过程中,初始版本加载时间约30秒,通过AI协作排查定位到三个性能瓶颈(评论清洗的逐行操作、分组聚合排序开销、SnowNLP逐条分析耗时),优化后加载时间显著缩短。AI分析报告数据异常的修复过程中,发现情感分析模块重新实例化并覆盖了预处理阶段已生成的标签列,修复后直接基于现有数据计算统计摘要。缺失字段导致页面崩溃的问题通过AI建议的防御性编程策略,在访问列之前增加列存在性判断,保证了应用在不同数据状态下的稳定性。
十一、项目启动
系统的部署与启动极为简便。开发者或用户在安装完所有依赖后,只需在终端中切换到项目根目录并执行以下命令:
cd 新电商智能分析系统 pip install -r requirements.txt streamlit run app.pyStreamlit会在本地启动开发服务器并自动打开浏览器访问地址,用户即可通过侧边栏导航在各个功能页面之间自由切换。
十二、总结
本系统实现了从数据采集、数据处理、特征工程、模型训练到可视化决策的完整数据分析流程,涵盖首页概览、新电商特色、商品分析、评论洞察、直播带货分析、模型预测、统计检验和AI智能分析八个功能页面。其核心价值在于将复杂的算法模型封装在直观的交互界面背后,让非技术人员也能轻松进行数据探索和决策支持。
后续优化方向包括融入更多时序特征(节假日效应、活动周期)以提升预测精度,增加本地轻量级模型作为大模型API的备选方案以增强系统稳定性,以及支持更多平台数据接入扩展分析维度。
技术栈:Python 3.9 | Streamlit | Pandas | Scikit-learn | Jieba | Plotly | DeepSeek API