【有源码】基于 Hadoop 生态的化妆品销售数据存储分析与可视化 面向化妆品行业的用户画像构建与销售机会识别研究

注意:该项目只展示部分功能,如需了解,文末咨询即可。

本文目录

  • [1 开发环境](#1 开发环境)
  • [2 系统设计](#2 系统设计)
  • [3 系统展示](#3 系统展示)
    • [3.1 功能展示视频](#3.1 功能展示视频)
    • [3.2 大屏页面](#3.2 大屏页面)
    • [3.3 分析页面](#3.3 分析页面)
    • [3.4 基础页面](#3.4 基础页面)
  • [4 更多推荐](#4 更多推荐)
  • [5 部分功能代码](#5 部分功能代码)

1 开发环境

发语言:python

采用技术:Spark、Hadoop、Django、Vue、Echarts等技术框架

数据库:MySQL

开发环境:PyCharm

2 系统设计

基于 Hadoop 生态的化妆品销售数据存储分析与可视化能够把化妆品销售订单数据转化为品牌竞争、品类销售、渠道运营、区域市场、用户画像、价格折扣和销售机会等多维洞察,帮助识别头部与长尾品牌、热门与高端品类、主力渠道与区域市场、核心消费年龄段、主力价格带与最优折扣档位,并通过 K-Means 客户分群、PCA 品牌综合价值评估和 Isolation Forest 异常订单检测发现潜在商机与异常交易,为产品定价、渠道选品、区域营销、用户运营、库存管理和风险控制提供数据依据,同时为后续可视化展示和经营决策提供结构化 CSV 结果支撑。

数据上传与预处理模块:将原始数据集上传到 HDFS 的 dataset 子目录,用 pandas 完成类型转换、Region 省份简称转全称、浮点列保留 2 位小数,结果落 cosmetics_sales_preprocessed_data.csv 并上传 HDFS。

品牌竞争分析模块:按品牌聚合销售额、销量、品类矩阵、平均评分与好评率,识别头部品牌、长尾品牌、优势品类与口碑差异。

品类销售分析模块:按品类聚合销量、销售额、原价均值/中位数/最值、渠道分布、平均评分与评分方差,识别热门品类、高端品类、渠道偏好与口碑差异。

渠道运营分析模块:按销售渠道聚合销售额、品类结构、折扣档位分布、品牌组合,识别主力渠道、渠道品类定位、定价策略与品牌组合差异。

区域市场分析模块:按销售区域聚合销售额、品类偏好、平均客单价与高客单价订单占比、品牌偏好,识别主力市场、区域品类偏好、购买力差异与品牌偏好差异。

用户画像分析模块:将客户年龄分为青年、青壮年、中年、中老年,聚合销售额、品类偏好、购买力与评分差异,识别核心消费年龄段、年龄段品类偏好与满意度差异。

价格折扣分析模块:将原价分低档、中档、高档、奢侈品,折扣率分 6 档,聚合销售额、销量、平均评分,识别主力价格带、最优折扣档位、折扣销量效应与折扣对评分影响。

销售机会分析模块:用 K-Means 对客户聚类分群,用 PCA 对品牌做综合价值评估,用 Isolation Forest 对订单做异常检测,输出客户簇画像、品牌价值排名、异常订单清单与异常类型说明。

3 系统展示

3.1 功能展示视频

基于Hadoop大数据的化妆品销售数据分析与可视化源码

!!!请点击这里查看功能演示!!!

3.2 大屏页面

3.3 分析页面

3.4 基础页面

4 更多推荐

计算机专业毕业设计新风向,2026年大数据 + AI前沿60个毕设选题全解析,涵盖Hadoop、Spark、机器学习、AI等类型

计算机专业毕业设计选题深度剖析,掌握这些技巧,让你的选题轻松通过,文章附35个优质选题助你顺利通过开题!

【避坑必看】26届计算机毕业设计选题雷区大全,这些毕设题目千万别选!选题雷区深度解析

紧跟风口!2026计算机毕设新赛道:精选三大热门领域下的创新选题, 拒绝平庸!毕设技术亮点+功能创新,双管齐下

纯分享!2026届计算机毕业设计选题全攻略(选题+技术栈+创新点+避坑),这80个题目覆盖所有方向,计算机毕设选题大全收藏

计算机专业毕业设计选题深度剖析,掌握这些技巧,让你的选题轻松通过,文章附35个优质选题助你顺利通过开题!

5 部分功能代码

python 复制代码
def customer_segmentation_analysis(input_df):
    """
    K-Means 客户分群:基于 Customer_Age / Purchase_Quantity /
    Customer_Rating / Sales_Revenue 4 维数值特征标准化后聚类。
    """
    logger.info("开始执行 客户分群洞察(K-Means) 分析...")

    feature_cols = [
        "Customer_Age",
        "Purchase_Quantity",
        "Customer_Rating",
        "Sales_Revenue"
    ]

    assembler = VectorAssembler(
        inputCols=feature_cols,
        outputCol="features_raw",
        handleInvalid="skip"
    )
    assembled_df = assembler.transform(input_df)

    scaler = SparkStandardScaler(
        inputCol="features_raw",
        outputCol="features",
        withMean=True,
        withStd=True
    )
    scaler_model = scaler.fit(assembled_df)
    scaled_df = scaler_model.transform(assembled_df)

    logger.info("肘部法则计算各 K 的 WSSSE:")
    for k in [3, 4, 5]:
        kmeans = SparkKMeans(
            k=k,
            seed=42,
            featuresCol="features",
            predictionCol="prediction",
            maxIter=50
        )
        model = kmeans.fit(scaled_df)
        wssse = float(model.summary.trainingCost)
        logger.info(f"  K={k}, WSSSE={wssse:.2f}")

    best_k = 4
    logger.info(f"选定 K={best_k}")

    final_kmeans = SparkKMeans(
        k=best_k,
        seed=42,
        featuresCol="features",
        predictionCol="prediction",
        maxIter=100
    )
    final_model = final_kmeans.fit(scaled_df)
    predictions = final_model.transform(scaled_df)

    cluster_profile = predictions.groupBy("prediction").agg(
        spark_count("ID").alias("customer_count"),
        spark_round(spark_avg("Customer_Age"), 2).alias("avg_age"),
        spark_round(spark_avg("Purchase_Quantity"), 2).alias("avg_quantity"),
        spark_round(spark_avg("Customer_Rating"), 2).alias("avg_rating"),
        spark_round(spark_avg("Sales_Revenue"), 2).alias("avg_revenue")
    )

    total_customer = input_df.count()
    cluster_profile = cluster_profile.withColumn(
        "customer_share",
        spark_round(col("customer_count") / lit(float(total_customer)), 2)
    )

    cluster_profile_pd = cluster_profile.orderBy("prediction").toPandas()

    cluster_profile_pd_sorted = cluster_profile_pd.sort_values(
        "avg_revenue",
        ascending=True
    ).reset_index(drop=True)

    revenue_labels = [
        "低消费群体",
        "中低消费群体",
        "中高消费群体",
        "高消费群体"
    ]
    cluster_profile_pd_sorted["cluster_label"] = revenue_labels

    def build_description(row):
        return (
            f"平均年龄{row['avg_age']:.1f}岁, "
            f"平均购买{row['avg_quantity']:.1f}件, "
            f"平均评分{row['avg_rating']:.2f}, "
            f"平均销售额{row['avg_revenue']:.1f}元"
        )

    cluster_profile_pd_sorted["cluster_description"] = (
        cluster_profile_pd_sorted.apply(build_description, axis=1)
    )

    cluster_profile_pd_sorted = cluster_profile_pd_sorted.rename(
        columns={"prediction": "cluster_id"}
    )

    cluster_profile_pd_sorted = cluster_profile_pd_sorted[[
        "cluster_id",
        "cluster_label",
        "cluster_description",
        "customer_count",
        "customer_share",
        "avg_age",
        "avg_quantity",
        "avg_rating",
        "avg_revenue"
    ]]

    cluster_profile_pd_sorted = cluster_profile_pd_sorted.sort_values(
        "cluster_id"
    ).reset_index(drop=True)

    save_pandas_result(
        cluster_profile_pd_sorted,
        "customer_segmentation",
        "sales_opportunity"
    )
    logger.info(
        "保存到: output/sales_opportunity_analysis/"
        "customer_segmentation_analysis.csv 成功"
    )

源码项目、定制开发、文档报告、PPT、代码答疑

希望和大家多多交流 ↓↓↓↓↓

相关推荐
2601_962078197 小时前
Python中calendar.weekday用法
python·编程技巧·calendar·日期处理·weekday
2601_962218617 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_966949657 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_962885727 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
李高钢7 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi
ocean21038 小时前
2025-2026年Python面试高频知识点洞察
开发语言·python·面试·python八股文
Easy_API8 小时前
从“有多少卡“到“卖多少 Token“:算力的标尺正在换
大数据·人工智能·深度学习
Warson_L8 小时前
Python的OrderedDict
python
隐擎fox8 小时前
高性能网络爬虫架构设计:基于 Python 的长连接复用与分布式会话池调度实践
分布式·python·网络协议·tcp/ip·高并发·网络爬虫、