💖💖作者:IT跃迁谷毕设展 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 Java实战项目集 微信小程序实战项目集 Python实战项目集 安卓Android实战项目集 大数据实战项目集
💕💕文末获取源码
@TOC
K-Means+Hadoop+Spark的小红书达人领域数据分析可视化-功能介绍
基于K-Means机器学习算法+Hadoop+Spark的小红书达人领域数据分析可视化系统是一个面向内容营销和达人经济的大数据分析平台,该系统以小红书达人数据为核心,运用分布式大数据处理技术实现海量达人信息的深度挖掘与智能分析。系统采用Hadoop生态圈作为数据存储和处理基础设施,通过HDFS实现数据的分布式存储,利用Spark引擎进行高效的数据计算和分析处理。在算法层面,系统集成K-Means无监督机器学习算法,能够自动识别和划分不同类型的达人群体,包括高影响力领袖、高互动潜力新星、商业化成熟达人等细分类别。后端采用Django和Spring Boot双技术栈支持,前端基于Vue+ElementUI+Echarts构建现代化的数据可视化界面,通过丰富的图表展示达人性别分布、地域分布、粉丝量级分析、商业价值评估、内容领域热度等多维度分析结果。系统还具备潜力达人挖掘功能,通过综合评估互动率、报价性价比等指标。
K-Means+Hadoop+Spark的小红书达人领域数据分析可视化-选题背景意义
近年来社交媒体平台快速发展,以小红书为代表的内容分享平台已成为品牌营销和消费者决策的重要渠道,达人经济在其中发挥着越来越重要的作用。小红书平台汇集了大量不同领域的内容创作者,这些达人在美妆、时尚、美食、旅游等各个垂直领域都有着显著的影响力,品牌方与达人的合作模式也日趋多样化和专业化。然而当前的达人选择和评估往往依赖于粉丝数量等单一指标,缺乏科学的数据分析支撑,品牌方在选择合作达人时面临信息不对称的问题。同时传统的数据分析方法难以处理海量的达人数据,无法深入挖掘达人的潜在价值和特征规律。随着大数据技术和机器学习算法的成熟,运用先进的数据处理技术对达人数据进行系统性分析成为可能,通过构建科学的评估体系可以更好地识别优质达人资源,为品牌营销决策提供数据支撑。 本课题的研究具有一定的理论价值和实践意义,为达人经济领域的数据分析提供了一种可行的技术方案。从技术角度来看,课题将K-Means机器学习算法与Hadoop、Spark等大数据技术相结合,探索了无监督学习在达人分类中的应用,丰富了大数据分析在社交媒体领域的实践案例。从实际应用角度,系统能够帮助品牌方更加科学地评估和筛选合作达人,通过多维度的数据分析减少盲目投放的风险,提升营销活动的投资回报率。对于内容创作者而言,系统提供的行业分析报告可以帮助他们了解自身在市场中的定位,为内容策略调整和商业化发展提供参考依据。对于平台运营方,系统产生的达人生态分析结果有助于优化平台的达人培养策略和资源配置。虽然作为毕业设计项目,系统在功能完整性和数据规模上还有改进空间。
K-Means+Hadoop+Spark的小红书达人领域数据分析可视化-技术选型
大数据框架: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
K-Means+Hadoop+Spark的小红书达人领域数据分析可视化-视频展示
[video(video-rjUaeafZ-1756567682856)(type-bilibili)(url-player.bilibili.com/player.html…)]
K-Means+Hadoop+Spark的小红书达人领域数据分析可视化-图片展示
K-Means+Hadoop+Spark的小红书达人领域数据分析可视化-代码展示
from pyspark.sql import SparkSession
from pyspark.ml.clustering import KMeans
from pyspark.ml.feature import VectorAssembler, StandardScaler
from pyspark.sql.functions import col, when, avg, count, sum as spark_sum, round as spark_round, desc, asc
from pyspark.sql.types import StructType, StructField, StringType, IntegerType, FloatType
import pandas as pd
spark = SparkSession.builder.appName("XiaohongshuAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()
def kmeans_influencer_clustering():
df = spark.read.csv("/data/xiaohongshu/processed_data.csv", header=True, inferSchema=True)
df_clean = df.filter((col("fans_count") > 0) & (col("likes_collections_total") > 0))
df_clean = df_clean.withColumn("interaction_rate", col("likes_collections_total") / col("fans_count"))
df_clean = df_clean.withColumn("avg_price", (col("graphic_post_price") + col("video_post_price")) / 2)
df_clean = df_clean.fillna({"avg_price": 0, "commercial_notes_count": 0})
feature_cols = ["fans_count", "likes_collections_total", "interaction_rate", "avg_price", "commercial_notes_count"]
assembler = VectorAssembler(inputCols=feature_cols, outputCol="features")
df_features = assembler.transform(df_clean)
scaler = StandardScaler(inputCol="features", outputCol="scaled_features")
scaler_model = scaler.fit(df_features)
df_scaled = scaler_model.transform(df_features)
kmeans = KMeans(k=5, seed=42, featuresCol="scaled_features", predictionCol="cluster")
model = kmeans.fit(df_scaled)
df_clustered = model.transform(df_scaled)
cluster_stats = df_clustered.groupBy("cluster").agg(
count("*").alias("count"),
avg("fans_count").alias("avg_fans"),
avg("interaction_rate").alias("avg_interaction_rate"),
avg("avg_price").alias("avg_price_level"),
avg("commercial_notes_count").alias("avg_commercial_notes")
)
df_with_description = cluster_stats.withColumn("cluster_description",
when(col("cluster") == 0, "高影响力头部达人")
.when(col("cluster") == 1, "商业化成熟达人")
.when(col("cluster") == 2, "高互动潜力新星")
.when(col("cluster") == 3, "垂直领域专家")
.otherwise("成长型达人")
)
final_result = df_with_description.select("cluster", "cluster_description", "count",
spark_round("avg_fans", 2).alias("avg_fans"),
spark_round("avg_interaction_rate", 4).alias("avg_interaction_rate"),
spark_round("avg_price_level", 2).alias("avg_price_level"),
spark_round("avg_commercial_notes", 2).alias("avg_commercial_notes")
).orderBy("cluster")
final_result.toPandas().to_csv("/output/kmeans_clustering_analysis.csv", index=False)
return final_result
def commercial_value_assessment():
df = spark.read.csv("/data/xiaohongshu/processed_data.csv", header=True, inferSchema=True)
df_clean = df.filter((col("fans_count") > 0) & (col("graphic_post_price") > 0))
df_clean = df_clean.withColumn("interaction_rate", col("likes_collections_total") / col("fans_count"))
df_clean = df_clean.withColumn("price_per_fan_graphic", col("graphic_post_price") / col("fans_count"))
df_clean = df_clean.withColumn("price_per_fan_video", col("video_post_price") / col("fans_count"))
df_clean = df_clean.withColumn("fan_level",
when(col("fans_count") < 10000, "素人达人")
.when((col("fans_count") >= 10000) & (col("fans_count") < 100000), "初级达人")
.when((col("fans_count") >= 100000) & (col("fans_count") < 500000), "腰部达人")
.when((col("fans_count") >= 500000) & (col("fans_count") < 1000000), "中部达人")
.otherwise("头部达人")
)
value_stats = df_clean.groupBy("fan_level").agg(
count("*").alias("influencer_count"),
avg("fans_count").alias("avg_fans"),
avg("graphic_post_price").alias("avg_graphic_price"),
avg("video_post_price").alias("avg_video_price"),
avg("interaction_rate").alias("avg_interaction_rate"),
avg("price_per_fan_graphic").alias("avg_price_per_fan_graphic"),
avg("commercial_notes_count").alias("avg_commercial_experience")
)
value_stats = value_stats.withColumn("commercial_efficiency_score",
(col("avg_interaction_rate") * 1000) / (col("avg_price_per_fan_graphic") * 100 + 1)
)
final_result = value_stats.select("fan_level", "influencer_count",
spark_round("avg_fans", 0).alias("avg_fans"),
spark_round("avg_graphic_price", 2).alias("avg_graphic_price"),
spark_round("avg_video_price", 2).alias("avg_video_price"),
spark_round("avg_interaction_rate", 4).alias("avg_interaction_rate"),
spark_round("avg_price_per_fan_graphic", 6).alias("avg_price_per_fan"),
spark_round("commercial_efficiency_score", 4).alias("roi_score"),
spark_round("avg_commercial_experience", 2).alias("avg_commercial_exp")
).orderBy(desc("roi_score"))
final_result.toPandas().to_csv("/output/commercial_value_assessment.csv", index=False)
return final_result
def content_domain_analysis():
df = spark.read.csv("/data/xiaohongshu/processed_data.csv", header=True, inferSchema=True)
df_tags = df.filter(col("tags").isNotNull() & (col("tags") != ""))
tags_exploded = df_tags.select("blogger_name", "fans_count", "likes_collections_total", "graphic_post_price", "video_post_price", explode(split(col("tags"), " ")).alias("single_tag"))
tags_exploded = tags_exploded.filter(col("single_tag") != "")
domain_stats = tags_exploded.groupBy("single_tag").agg(
count("*").alias("influencer_count"),
avg("fans_count").alias("avg_fans"),
avg("likes_collections_total").alias("avg_interactions"),
avg("graphic_post_price").alias("avg_graphic_price"),
avg("video_post_price").alias("avg_video_price")
).filter(col("influencer_count") >= 10)
domain_stats = domain_stats.withColumn("avg_interaction_rate", col("avg_interactions") / col("avg_fans"))
domain_stats = domain_stats.withColumn("commercialization_level",
when(col("avg_graphic_price") > 5000, "高度商业化")
.when((col("avg_graphic_price") > 1000) & (col("avg_graphic_price") <= 5000), "中度商业化")
.when((col("avg_graphic_price") > 0) & (col("avg_graphic_price") <= 1000), "初步商业化")
.otherwise("待开发")
)
domain_stats = domain_stats.withColumn("domain_popularity_score",
(col("influencer_count") * 0.4 + col("avg_fans") / 10000 * 0.3 + col("avg_interaction_rate") * 1000 * 0.3)
)
final_result = domain_stats.select("single_tag", "influencer_count",
spark_round("avg_fans", 0).alias("avg_fans"),
spark_round("avg_interactions", 0).alias("avg_interactions"),
spark_round("avg_graphic_price", 2).alias("avg_graphic_price"),
spark_round("avg_video_price", 2).alias("avg_video_price"),
spark_round("avg_interaction_rate", 4).alias("avg_interaction_rate"),
"commercialization_level",
spark_round("domain_popularity_score", 2).alias("popularity_score")
).orderBy(desc("popularity_score")).limit(50)
final_result.toPandas().to_csv("/output/content_domain_analysis.csv", index=False)
return final_result
K-Means+Hadoop+Spark的小红书达人领域数据分析可视化-结语
💕💕 Java实战项目集 微信小程序实战项目集 Python实战项目集 安卓Android实战项目集 大数据实战项目集 💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。