【Python大数据+AI毕设实战】化妆品数据可视化分析系统

66 阅读8分钟

🎓 作者:计算机毕设小月哥 | 软件开发专家

🖥️ 简介:8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。

🛠️ 专业服务 🛠️

  • 需求定制化开发

  • 源码提供与讲解

  • 技术文档撰写(指导计算机毕设选题【新颖+创新】、任务书、开题报告、文献综述、外文翻译等)

  • 项目答辩演示PPT制作

🌟 欢迎:点赞 👍 收藏 ⭐ 评论 📝

👇🏻 精选专栏推荐 👇🏻 欢迎订阅关注!

大数据实战项目

PHP|C#.NET|Golang实战项目

微信小程序|安卓实战项目

Python实战项目

Java实战项目

🍅 ↓↓主页获取源码联系↓↓🍅

基于大数据的化妆品数据可视化分析系统-功能介绍

本系统是一套基于Python大数据技术栈开发的化妆品数据可视化分析平台,采用Hadoop+Spark分布式计算框架对海量化妆品数据进行深度挖掘与分析。系统后端采用Django框架构建RESTful API接口,前端利用Vue+ElementUI+Echarts技术栈实现交互式数据可视化展示。在数据处理层面,系统运用Spark SQL进行高效的数据查询与转换,结合Pandas和NumPy库完成数据清洗、特征提取等预处理工作,所有原始数据及分析结果均存储于HDFS分布式文件系统中,确保数据的高可用性。系统实现了15大核心分析功能模块,涵盖化妆品品类分布分析、品牌产品数量排行、价格区间分布、评分分布、不同品类均价对比、主流品牌均价分析、价格与评分相关性分析、针对不同肤质的产品覆盖率统计、品类对敏感肌专注度分析、品牌敏感肌友好度排行、品牌产品线广度分析、品类平均评分对比、主流品牌口碑分析、热门化妆品成分词云分析,以及基于K-Means算法的价格评分聚类分析等功能,通过Echarts图表库将分析结果以柱状图、饼图、散点图、雷达图、词云图等多种可视化形式呈现,为化妆品市场研究、消费者决策、品牌定位分析提供数据支撑。

基于大数据的化妆品数据可视化分析系统-选题背景意义

选题背景 随着电商平台和社交媒体的快速发展,化妆品行业进入了数据爆炸式增长的时代,各大品牌每天都在产生海量的产品信息、用户评价、价格变动等数据。传统的Excel表格分析方式已经难以应对这种数据规模的处理需求,消费者在面对琳琅满目的化妆品时往往无从下手,不知道哪个品牌性价比高、哪些成分更适合自己的肤质、不同价位的产品质量差异到底有多大。同时,化妆品市场的信息不对称问题比较突出,商家的宣传与产品实际效果之间存在一定差距,消费者缺乏一个客观的数据分析平台来辅助决策。从技术层面来看,大数据技术特别是Hadoop和Spark框架的成熟,为处理这类海量非结构化数据提供了可能性,通过分布式计算可以快速完成对数万条化妆品数据的清洗、统计、挖掘工作。在这样的背景下,开发一套基于大数据技术的化妆品数据可视化分析系统,能够将分散的产品信息整合起来进行多维度分析,帮助用户更直观地了解市场现状。 选题意义 从实际应用角度来说,这个系统能够帮助普通消费者在购买化妆品时做出更理性的选择。通过对不同品牌、不同价位产品的评分数据进行对比分析,消费者可以快速找到性价比高的产品,避免盲目追求高价品牌或者被虚假宣传误导。特别是对于敏感肌、油性肌等有特殊需求的用户群体,系统提供的肤质适配度分析功能可以筛选出真正适合他们的产品类别和品牌,降低试错成本。对于化妆品行业的从业者和研究人员来说,系统的成分分析、品类分布、品牌产品线广度等功能模块,可以帮助他们了解当前市场的热门趋势、竞争格局、消费者偏好,为产品研发和营销策略提供一些参考依据。从技术学习的角度看,这个毕业设计项目整合了Hadoop分布式存储、Spark大数据计算、Django后端开发、Vue前端框架、Echarts数据可视化等多项主流技术,涵盖了从数据采集、清洗、分析到可视化展示的完整流程,能够比较系统地锻炼大数据项目的开发能力。同时,项目中运用的K-Means聚类算法也涉及到了机器学习的基础应用,对于理解数据挖掘算法的实际落地场景有一定帮助。

基于大数据的化妆品数据可视化分析系统-技术选型

大数据框架:Hadoop+Spark(本次没用Hive,支持定制) 开发语言:Python+Java(两个版本都支持) 后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis)(两个版本都支持) 前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery 详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy 数据库:MySQL

基于大数据的化妆品数据可视化分析系统-视频展示

基于大数据的化妆品数据可视化分析系统-视频展示

基于大数据的化妆品数据可视化分析系统-图片展示

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

基于大数据的化妆品数据可视化分析系统-代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, count, avg, sum, when, explode, split, trim, lower, round, expr
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.clustering import KMeans
import pandas as pd
import numpy as np

spark = SparkSession.builder.appName("CosmeticsDataAnalysis").config("spark.executor.memory", "4g").config("spark.driver.memory", "2g").getOrCreate()
df = spark.read.csv("hdfs://localhost:9000/cosmetics_data/化妆品数据集.csv", header=True, inferSchema=True)
df_cleaned = df.filter((col("Ingredients") != "Visit the boutique") & (col("Ingredients").isNotNull()))
df_valid_rank = df_cleaned.filter(col("Rank") > 0.0)

def brand_product_analysis():
    brand_count_df = df_cleaned.groupBy("Brand").agg(count("*").alias("product_count")).orderBy(col("product_count").desc())
    brand_top20 = brand_count_df.limit(20)
    brand_avg_price = df_cleaned.groupBy("Brand").agg(avg("Price").alias("avg_price"), count("*").alias("total_products"))
    brand_avg_price = brand_avg_price.withColumn("avg_price", round(col("avg_price"), 2))
    brand_analysis = brand_top20.join(brand_avg_price, on="Brand", how="inner")
    brand_analysis = brand_analysis.select("Brand", "product_count", "avg_price")
    brand_rank_analysis = df_valid_rank.groupBy("Brand").agg(avg("Rank").alias("avg_rank"), count("*").alias("ranked_products"))
    brand_rank_analysis = brand_rank_analysis.withColumn("avg_rank", round(col("avg_rank"), 2))
    brand_final = brand_analysis.join(brand_rank_analysis, on="Brand", how="left")
    brand_final = brand_final.fillna({"avg_rank": 0.0, "ranked_products": 0})
    brand_final = brand_final.orderBy(col("product_count").desc())
    result_pd = brand_final.toPandas()
    result_pd.to_csv("brand_product_analysis.csv", index=False, encoding="utf-8-sig")
    spark.sparkContext.textFile("brand_product_analysis.csv").coalesce(1).saveAsTextFile("hdfs://localhost:9000/cosmetics_result/brand_product_analysis")
    print("品牌产品综合分析完成,共分析{}个品牌".format(result_pd.shape[0]))
    return result_pd

def price_rank_correlation_analysis():
    correlation_df = df_valid_rank.select("Price", "Rank")
    price_bins = [0, 50, 100, 200, 500, 1000, 10000]
    price_labels = ["0-50", "51-100", "101-200", "201-500", "501-1000", "1000+"]
    correlation_df = correlation_df.withColumn("price_range", 
        when(col("Price") <= 50, "0-50")
        .when((col("Price") > 50) & (col("Price") <= 100), "51-100")
        .when((col("Price") > 100) & (col("Price") <= 200), "101-200")
        .when((col("Price") > 200) & (col("Price") <= 500), "201-500")
        .when((col("Price") > 500) & (col("Price") <= 1000), "501-1000")
        .otherwise("1000+"))
    price_range_stats = correlation_df.groupBy("price_range").agg(
        avg("Rank").alias("avg_rank"),
        count("*").alias("product_count"),
        avg("Price").alias("avg_price"))
    price_range_stats = price_range_stats.withColumn("avg_rank", round(col("avg_rank"), 2))
    price_range_stats = price_range_stats.withColumn("avg_price", round(col("avg_price"), 2))
    pandas_df = correlation_df.toPandas()
    correlation_coefficient = np.corrcoef(pandas_df["Price"], pandas_df["Rank"])[0, 1]
    price_range_result = price_range_stats.toPandas()
    price_range_result["correlation_coefficient"] = round(correlation_coefficient, 2)
    price_range_result.to_csv("price_rank_correlation.csv", index=False, encoding="utf-8-sig")
    spark.sparkContext.textFile("price_rank_correlation.csv").coalesce(1).saveAsTextFile("hdfs://localhost:9000/cosmetics_result/price_rank_correlation")
    print("价格与评分相关性分析完成,相关系数为{:.2f}".format(correlation_coefficient))
    return price_range_result

def ingredient_frequency_analysis():
    ingredient_df = df_cleaned.filter((col("Ingredients") != "Visit the boutique") & (col("Ingredients").isNotNull()))
    ingredient_split = ingredient_df.select(explode(split(col("Ingredients"), ",")).alias("ingredient"))
    ingredient_cleaned = ingredient_split.withColumn("ingredient", trim(lower(col("ingredient"))))
    ingredient_cleaned = ingredient_cleaned.filter((col("ingredient") != "") & (col("ingredient").isNotNull()))
    ingredient_count = ingredient_cleaned.groupBy("ingredient").agg(count("*").alias("frequency"))
    ingredient_top50 = ingredient_count.orderBy(col("frequency").desc()).limit(50)
    total_products = df_cleaned.count()
    ingredient_top50 = ingredient_top50.withColumn("coverage_rate", round((col("frequency") / total_products) * 100, 2))
    ingredient_result = ingredient_top50.toPandas()
    ingredient_result.to_csv("ingredient_frequency_analysis.csv", index=False, encoding="utf-8-sig")
    spark.sparkContext.textFile("ingredient_frequency_analysis.csv").coalesce(1).saveAsTextFile("hdfs://localhost:9000/cosmetics_result/ingredient_frequency")
    print("成分频率分析完成,共统计{}种高频成分".format(ingredient_result.shape[0]))
    return ingredient_result

def kmeans_clustering_analysis():
    clustering_df = df_valid_rank.select("Price", "Rank")
    clustering_df = clustering_df.filter((col("Price").isNotNull()) & (col("Rank").isNotNull()))
    assembler = VectorAssembler(inputCols=["Price", "Rank"], outputCol="features")
    feature_df = assembler.transform(clustering_df)
    kmeans = KMeans(k=4, seed=42, maxIter=20, featuresCol="features", predictionCol="cluster")
    model = kmeans.fit(feature_df)
    predictions = model.transform(feature_df)
    cluster_stats = predictions.groupBy("cluster").agg(
        avg("Price").alias("avg_price"),
        avg("Rank").alias("avg_rank"),
        count("*").alias("product_count"))
    cluster_stats = cluster_stats.withColumn("avg_price", round(col("avg_price"), 2))
    cluster_stats = cluster_stats.withColumn("avg_rank", round(col("avg_rank"), 2))
    cluster_result = cluster_stats.toPandas()
    cluster_result["cluster_description"] = cluster_result.apply(
        lambda row: "高价高评型" if row["avg_price"] > cluster_result["avg_price"].median() and row["avg_rank"] > cluster_result["avg_rank"].median()
        else "高价低评型" if row["avg_price"] > cluster_result["avg_price"].median() and row["avg_rank"] <= cluster_result["avg_rank"].median()
        else "平价高评型" if row["avg_price"] <= cluster_result["avg_price"].median() and row["avg_rank"] > cluster_result["avg_rank"].median()
        else "平价低评型", axis=1)
    cluster_result = cluster_result[["cluster", "avg_price", "avg_rank", "product_count", "cluster_description"]]
    cluster_result.to_csv("kmeans_clustering_analysis.csv", index=False, encoding="utf-8-sig")
    spark.sparkContext.textFile("kmeans_clustering_analysis.csv").coalesce(1).saveAsTextFile("hdfs://localhost:9000/cosmetics_result/kmeans_clustering")
    print("K-Means聚类分析完成,将产品划分为4个簇群")
    predictions_with_desc = predictions.join(spark.createDataFrame(cluster_result[["cluster", "cluster_description"]]), on="cluster", how="left")
    final_result = predictions_with_desc.select("Price", "Rank", "cluster", "cluster_description")
    final_pd = final_result.toPandas()
    final_pd.to_csv("kmeans_detailed_result.csv", index=False, encoding="utf-8-sig")
    return cluster_result

brand_result = brand_product_analysis()
correlation_result = price_rank_correlation_analysis()
ingredient_result = ingredient_frequency_analysis()
clustering_result = kmeans_clustering_analysis()
spark.stop()

基于大数据的化妆品数据可视化分析系统-结语

🌟 欢迎:点赞 👍 收藏 ⭐ 评论 📝

👇🏻 精选专栏推荐 👇🏻 欢迎订阅关注!

大数据实战项目

PHP|C#.NET|Golang实战项目

微信小程序|安卓实战项目

Python实战项目

Java实战项目

🍅 ↓↓主页获取源码联系↓↓🍅