当导师说“重做”时,我用Hadoop+Spark连夜翻盘

44 阅读4分钟

💖💖作者:计算机毕业设计小途 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目

@TOC

护肤品店铺运营数据可视化分析系统介绍

本系统《基于大数据的护肤品店铺运营数据可视化分析系统》以 Hadoop 构建分布式存储底座,利用 HDFS 集中存放店铺累积的订单、用户、渠道日志等 TB 级原始数据;通过 Spark 与 Spark SQL 完成分布式清洗、聚合与特征工程,结合 Pandas、NumPy 在 Python 侧进行深度探索,或以 Java 侧 Spring Boot 整合 MyBatis 将关键指标落 MySQL 供后续查询;前端基于 Vue、ElementUI 与 Echarts,把后端 Django 或 Spring Boot 暴露的 REST 接口封装成交互式仪表盘,实时呈现营销渠道效能、用户消费行为、增长活跃及画像四大主题,管理员可在用户中心修改密码、维护个人信息,运营人员通过系统公告掌握任务进度,最终帮助店铺用数据驱动护肤品的精准营销与库存优化。

护肤品店铺运营数据可视化分析系统演示视频

演示视频

护肤品店铺运营数据可视化分析系统演示图片

登陆界面.png

用户管理.png

护肤店铺数据.png

营销渠道效能分析.png

用户画像分析.png

用户消费行为分析.png

用户增长活跃分析.png

大屏上.png

大屏下.png

护肤品店铺运营数据可视化分析系统代码展示

# 1. 营销渠道效能分析:计算昨日各渠道ROI并写MySQL

def channel_roi_etl():

    spark = SparkSession.builder.appName("channelRoi").getOrCreate()

    df_order = spark.read.parquet("hdfs://master:9000/skincare/order/*.parquet")

    df_cost = spark.read.parquet("hdfs://master:9000/skincare/channel_cost/*.parquet")

    df_order.createOrReplaceTempView("orders")

    df_cost.createOrReplaceTempView("costs")

    roi_sql = """

        SELECT channel,

               SUM(revenue) AS revenue,

               SUM(cost) AS cost,

               ROUND(SUM(revenue)/SUM(cost),2) AS roi

        FROM (

            SELECT channel,

                   CAST(order_amount AS DOUBLE) AS revenue,

                   0 AS cost

            FROM orders

            WHERE dt = CURRENT_DATE - INTERVAL 1 DAY

            UNION ALL

            SELECT channel,

                   0 AS revenue,

                   CAST(cost_amount AS DOUBLE) AS cost

            FROM costs

            WHERE dt = CURRENT_DATE - INTERVAL 1 DAY

        ) GROUP BY channel

    """

    roi_df = spark.sql(roi_sql).coalesce(1)

    roi_df.write.format("jdbc") \

        .option("url", "jdbc:mysql://localhost:3306/skincare") \

        .option("dbtable", "channel_roi") \

        .option("user", "root").option("password", "123456") \

        .mode("overwrite").save()

    spark.stop()

# 2. 用户消费行为分析:每月用户RFM聚类

def rfm_cluster():

    spark = SparkSession.builder.appName("rfm").getOrCreate()

    df = spark.read.parquet("hdfs://master:9000/skincare/order/*.parquet")

    df.createOrReplaceTempView("orders")

    rfm_sql = """

        SELECT user_id,

               MAX(order_date) AS last_date,

               COUNT(order_id) AS frequency,

               SUM(order_amount) AS monetary

        FROM orders

        WHERE order_date >= DATE_SUB(CURRENT_DATE, 365)

        GROUP BY user_id

    """

    rfm = spark.sql(rfm_sql)

    rfm = rfm.withColumn("recency", datediff(current_date(), col("last_date")))

    assembler = VectorAssembler(inputCols=["recency", "frequency", "monetary"], outputCol="features")

    scaler = StandardScaler(inputCol="features", outputCol="scaled")

    kmeans = KMeans(k=5, seed=1, featuresCol="scaled")

    pipeline = Pipeline(stages=[assembler, scaler, kmeans])

    model = pipeline.fit(rfm)

    clustered = model.transform(rfm)

    clustered.select("user_id", "prediction").write.format("jdbc") \

        .option("url", "jdbc:mysql://localhost:3306/skincare") \

        .option("dbtable", "user_rfm") \

        .option("user", "root").option("password", "123456") \

        .mode("overwrite").save()

    spark.stop()

# 3. 用户画像分析:实时标签生成并推给前端

from django.db import connection

def refresh_user_profile():

    cursor = connection.cursor()

    cursor.execute("""

        SELECT user_id,

               gender,

               age,

               skin_type,

               SUM(order_amount) AS total_amount,

               COUNT(order_id) AS order_cnt

        FROM t_user u

        JOIN t_order o ON u.id = o.user_id

        GROUP BY user_id

    """)

    rows = cursor.fetchall()

    profile_list = []

    for r in rows:

        tag = []

        if r[5] > 5000:

            tag.append("高价值")

        if r[4] < 25:

            tag.append("Z世代")

        if r[3] == "敏感肌":

            tag.append("敏感肌")

        profile_list.append({

            "user_id": r[0],

            "gender": r[1],

            "age": r[2],

            "skin_type": r[3],

            "total_amount": r[4],

            "order_cnt": r[5],

            "tags": ",".join(tag)

        })

    cursor.execute("TRUNCATE TABLE user_profile")

    for p in profile_list:

        cursor.execute("""

            INSERT INTO user_profile(user_id,gender,age,skin_type,total_amount,order_cnt,tags)

            VALUES(%s,%s,%s,%s,%s,%s,%s)

        """, [p["user_id"], p["gender"], p["age"], p["skin_type"], p["total_amount"], p["order_cnt"], p["tags"]])

    connection.commit()

护肤品店铺运营数据可视化分析系统文档展示

文档.png

💖💖作者:计算机毕业设计小途 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目