【大数据】小红书达人领域数据分析可视化系统 计算机项目 Hadoop+Spark环境配置 数据科学与大数据技术 附源码+文档+讲解

57 阅读6分钟

一、个人简介

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

二、系统介绍

大数据框架:Hadoop+Spark(Hive需要定制修改) 开发语言:Java+Python(两个版本都支持) 数据库:MySQL 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持) 前端:Vue+Echarts+HTML+CSS+JavaScript+jQuery

《小红书达人领域数据分析可视化系统》是一款面向小红书平台达人数据的综合分析工具。系统采用Hadoop+Spark大数据框架作为底层支撑,通过Spark SQL对海量达人数据进行高效处理与分析,结合Pandas和NumPy进行数据清洗与特征提取。后端基于Django框架构建RESTful API接口,前端采用Vue+ElementUI组件库搭建交互界面,利用Echarts实现数据可视化呈现。系统核心功能涵盖达人特征分析、商业价值评估、内容领域分布统计、潜力达人挖掘以及数据可视化大屏展示等模块。通过对达人的粉丝量、互动率、内容质量、垂直领域等多维度指标进行量化分析,为品牌方和MCN机构提供达人筛选与合作决策依据。系统将分散的达人数据整合到MySQL数据库中统一管理,运用HDFS进行数据存储,借助Spark的分布式计算能力实现大规模数据的快速分析,最终通过直观的图表形式呈现分析结果,帮助用户快速洞察小红书达人生态的发展趋势和商业价值分布规律。

三、视频解说

小红书达人领域数据分析可视化系统

四、部分功能展示

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

五、部分代码展示


from pyspark.sql import SparkSession
from pyspark.sql.functions import col, avg, sum, count, when, desc, row_number, dense_rank
from pyspark.sql.window import Window
from django.http import JsonResponse
from django.views import View
import json
import pandas as pd
import numpy as np

spark = SparkSession.builder.appName("XiaohongshuAnalysis").config("spark.sql.warehouse.dir", "/user/hive/warehouse").config("spark.executor.memory", "4g").config("spark.driver.memory", "2g").getOrCreate()

class InfluencerFeatureAnalysis(View):
    def post(self, request):
        params = json.loads(request.body)
        domain = params.get('domain', 'all')
        min_fans = params.get('min_fans', 0)
        max_fans = params.get('max_fans', 10000000)
        df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/xiaohongshu").option("dbtable", "influencer_data").option("user", "root").option("password", "password").load()
        filtered_df = df.filter((col("fans_count") >= min_fans) & (col("fans_count") <= max_fans))
        if domain != 'all':
            filtered_df = filtered_df.filter(col("content_domain") == domain)
        feature_stats = filtered_df.groupBy("content_domain").agg(avg("fans_count").alias("avg_fans"),avg("engagement_rate").alias("avg_engagement"),avg("post_frequency").alias("avg_frequency"),count("influencer_id").alias("total_count"),sum("total_likes").alias("domain_likes"))
        engagement_distribution = filtered_df.withColumn("engagement_level",when(col("engagement_rate") < 0.02, "低互动").when((col("engagement_rate") >= 0.02) & (col("engagement_rate") < 0.05), "中互动").otherwise("高互动")).groupBy("engagement_level").agg(count("influencer_id").alias("count"))
        fans_distribution = filtered_df.withColumn("fans_level",when(col("fans_count") < 10000, "初级达人").when((col("fans_count") >= 10000) & (col("fans_count") < 100000), "腰部达人").when((col("fans_count") >= 100000) & (col("fans_count") < 500000), "中部达人").otherwise("头部达人")).groupBy("fans_level").agg(count("influencer_id").alias("count"),avg("engagement_rate").alias("avg_engagement"))
        content_quality_score = filtered_df.withColumn("quality_score",(col("engagement_rate") * 0.4 + col("content_originality") * 0.3 + col("post_frequency") / 30 * 0.3)).select("influencer_id", "influencer_name", "quality_score", "fans_count", "engagement_rate")
        top_quality_influencers = content_quality_score.orderBy(desc("quality_score")).limit(20)
        feature_stats_pd = feature_stats.toPandas()
        engagement_dist_pd = engagement_distribution.toPandas()
        fans_dist_pd = fans_distribution.toPandas()
        top_quality_pd = top_quality_influencers.toPandas()
        result = {"domain_stats": feature_stats_pd.to_dict('records'),"engagement_distribution": engagement_dist_pd.to_dict('records'),"fans_distribution": fans_dist_pd.to_dict('records'),"top_quality_influencers": top_quality_pd.to_dict('records'),"total_analyzed": filtered_df.count()}
        return JsonResponse(result, safe=False)

class CommercialValueAnalysis(View):
    def post(self, request):
        params = json.loads(request.body)
        target_domain = params.get('domain', None)
        budget_range = params.get('budget_range', [0, 1000000])
        df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/xiaohongshu").option("dbtable", "influencer_data").option("user", "root").option("password", "password").load()
        commercial_df = df.withColumn("cpm",(col("avg_cooperation_fee") / col("fans_count") * 1000)).withColumn("engagement_value",(col("engagement_rate") * col("fans_count"))).withColumn("conversion_potential",(col("engagement_rate") * 0.5 + col("content_originality") * 0.3 + col("fan_quality_score") * 0.2))
        commercial_df = commercial_df.withColumn("commercial_score",(col("engagement_value") / 10000 * 0.35 + col("conversion_potential") * 100 * 0.35 + (1 / col("cpm")) * 1000 * 0.3))
        filtered_commercial = commercial_df.filter((col("avg_cooperation_fee") >= budget_range[0]) & (col("avg_cooperation_fee") <= budget_range[1]))
        if target_domain:
            filtered_commercial = filtered_commercial.filter(col("content_domain") == target_domain)
        cost_efficiency_analysis = filtered_commercial.select("influencer_id","influencer_name","fans_count","engagement_rate","avg_cooperation_fee","cpm","commercial_score").orderBy("cpm")
        roi_prediction = filtered_commercial.withColumn("predicted_exposure",(col("fans_count") * col("engagement_rate") * 10)).withColumn("estimated_roi",(col("predicted_exposure") * 0.001 / col("avg_cooperation_fee"))).select("influencer_id","influencer_name","avg_cooperation_fee","predicted_exposure","estimated_roi","commercial_score")
        domain_value_comparison = commercial_df.groupBy("content_domain").agg(avg("commercial_score").alias("avg_commercial_score"),avg("cpm").alias("avg_cpm"),avg("engagement_rate").alias("avg_engagement"),count("influencer_id").alias("influencer_count")).orderBy(desc("avg_commercial_score"))
        high_value_influencers = filtered_commercial.filter(col("commercial_score") > 60).orderBy(desc("commercial_score")).limit(30)
        budget_allocation_suggestion = filtered_commercial.groupBy("content_domain").agg(avg("avg_cooperation_fee").alias("avg_budget"),count("influencer_id").alias("available_count"),avg("commercial_score").alias("domain_score"))
        cost_efficiency_pd = cost_efficiency_analysis.limit(50).toPandas()
        roi_prediction_pd = roi_prediction.orderBy(desc("estimated_roi")).limit(50).toPandas()
        domain_value_pd = domain_value_comparison.toPandas()
        high_value_pd = high_value_influencers.toPandas()
        budget_suggestion_pd = budget_allocation_suggestion.toPandas()
        result = {"cost_efficiency_ranking": cost_efficiency_pd.to_dict('records'),"roi_predictions": roi_prediction_pd.to_dict('records'),"domain_value_comparison": domain_value_pd.to_dict('records'),"high_value_influencers": high_value_pd.to_dict('records'),"budget_allocation_suggestion": budget_suggestion_pd.to_dict('records')}
        return JsonResponse(result, safe=False)

class PotentialInfluencerDiscovery(View):
    def post(self, request):
        params = json.loads(request.body)
        growth_period = params.get('period_days', 30)
        min_growth_rate = params.get('min_growth_rate', 0.1)
        current_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/xiaohongshu").option("dbtable", "influencer_data").option("user", "root").option("password", "password").load()
        history_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/xiaohongshu").option("dbtable", "influencer_history").option("user", "root").option("password", "password").load()
        joined_df = current_df.alias("current").join(history_df.alias("history"),col("current.influencer_id") == col("history.influencer_id"),"inner").select(col("current.influencer_id"),col("current.influencer_name"),col("current.fans_count").alias("current_fans"),col("history.fans_count").alias("history_fans"),col("current.engagement_rate").alias("current_engagement"),col("history.engagement_rate").alias("history_engagement"),col("current.total_likes").alias("current_likes"),col("history.total_likes").alias("history_likes"),col("current.content_domain"),col("current.post_frequency"),col("current.content_originality"))
        growth_analysis = joined_df.withColumn("fans_growth_rate",((col("current_fans") - col("history_fans")) / col("history_fans"))).withColumn("engagement_growth",(col("current_engagement") - col("history_engagement"))).withColumn("likes_growth_rate",((col("current_likes") - col("history_likes")) / col("history_likes")))
        potential_score_df = growth_analysis.withColumn("potential_score",(col("fans_growth_rate") * 30 + col("engagement_growth") * 100 + col("content_originality") * 0.2 + col("post_frequency") / 30 * 0.1))
        high_potential = potential_score_df.filter((col("fans_growth_rate") > min_growth_rate) & (col("current_fans") < 500000) & (col("current_fans") > 5000))
        window_spec = Window.partitionBy("content_domain").orderBy(desc("potential_score"))
        domain_top_potential = high_potential.withColumn("rank", dense_rank().over(window_spec)).filter(col("rank") <= 10)
        consistency_check = growth_analysis.filter((col("fans_growth_rate") > 0) & (col("engagement_growth") > 0) & (col("likes_growth_rate") > 0))
        emerging_stars = consistency_check.filter((col("current_fans") < 100000) & (col("fans_growth_rate") > 0.3)).withColumn("star_potential",(col("fans_growth_rate") * 40 + col("current_engagement") * 100))
        growth_trend_prediction = potential_score_df.withColumn("predicted_fans_next_month",(col("current_fans") * (1 + col("fans_growth_rate")))).withColumn("predicted_engagement",(col("current_engagement") + col("engagement_growth"))).select("influencer_id","influencer_name","current_fans","predicted_fans_next_month","current_engagement","predicted_engagement","potential_score")
        domain_potential_stats = high_potential.groupBy("content_domain").agg(count("influencer_id").alias("potential_count"),avg("potential_score").alias("avg_potential_score"),avg("fans_growth_rate").alias("avg_growth_rate"))
        high_potential_pd = high_potential.orderBy(desc("potential_score")).limit(50).toPandas()
        domain_top_pd = domain_top_potential.toPandas()
        emerging_stars_pd = emerging_stars.orderBy(desc("star_potential")).limit(30).toPandas()
        growth_prediction_pd = growth_trend_prediction.orderBy(desc("potential_score")).limit(50).toPandas()
        domain_stats_pd = domain_potential_stats.orderBy(desc("avg_potential_score")).toPandas()
        result = {"high_potential_influencers": high_potential_pd.to_dict('records'),"domain_top_potential": domain_top_pd.to_dict('records'),"emerging_stars": emerging_stars_pd.to_dict('records'),"growth_predictions": growth_prediction_pd.to_dict('records'),"domain_potential_stats": domain_stats_pd.to_dict('records'),"analysis_period_days": growth_period}
        return JsonResponse(result, safe=False)

六、部分文档展示

在这里插入图片描述

七、END

💕💕文末获取源码联系计算机编程果茶熊