💖💖作者:IT跃迁谷毕设展 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 Java实战项目集 微信小程序实战项目集 Python实战项目集 安卓Android实战项目集 大数据实战项目集
💕💕文末获取源码
@TOC
小红书MCN机构数据可视化分析系统-功能介绍
本系统是一个基于Hadoop+Spark大数据技术栈构建的小红书MCN机构数据可视化分析平台,旨在对小红书平台上的MCN机构进行全方位的数据挖掘和可视化展示。系统采用分布式存储和计算架构,通过Hadoop HDFS实现海量MCN机构数据的可靠存储,利用Spark的内存计算能力进行高效的数据处理和分析。在技术实现上,系统提供Python+Django和Java+Spring Boot两套后端解决方案,前端采用Vue+ElementUI构建交互界面,结合Echarts实现丰富的数据可视化效果。系统的核心分析功能涵盖MCN机构规模实力评估、地理空间分布统计、运营效率评价以及内容领域挖掘四大维度。通过对签约达人数、粉丝总量、机构地域分布等关键指标的多维度分析,系统能够为品牌方选择合作机构、MCN机构制定发展策略、投资者评估市场机会提供数据支撑。系统运用Spark SQL进行复杂的数据查询和聚合运算,结合Pandas和NumPy进行数据预处理和特征工程,实现了从原始数据清洗、分析到可视化展示的完整数据处理流程,再通过大屏可视化的形式直观呈现分析结果。
小红书MCN机构数据可视化分析系统-选题背景意义
随着社交媒体营销的蓬勃发展,小红书作为国内主流的内容种草平台,聚集了大量的MCN机构和内容创作者。MCN机构作为连接品牌方和达人的桥梁,在整个内容生态中扮演着越来越重要的角色。当前小红书平台上的MCN机构数量众多,各机构在签约达人规模、粉丝影响力、地域分布、内容领域等方面存在显著差异。品牌方在选择合作机构时往往缺乏全面的数据支撑,MCN机构自身也需要了解行业格局来优化运营策略。传统的人工调研方式效率低下且难以获得全局视角,迫切需要借助大数据技术来实现对MCN机构的系统性分析。通过构建数据可视化分析系统,能够帮助各方更好地理解小红书MCN生态的发展现状和趋势。 本课题的实践价值体现在多个层面。对品牌方而言,系统提供的MCN机构排名和实力分析能够辅助其快速筛选合适的合作伙伴,降低营销决策的风险。对MCN机构来说,通过了解自身在行业中的定位以及竞争对手的情况,可以更有针对性地调整发展方向和资源配置。系统通过地理分布分析揭示了MCN产业的区域集聚特征,为地方政府制定相关产业政策提供参考依据。在技术层面,本课题将大数据处理技术应用于新媒体行业分析,探索了Hadoop+Spark在社交媒体数据分析场景下的实践方案。通过构建完整的数据处理流程和可视化展示体系,为类似的行业数据分析项目提供了可借鉴的技术路线。尽管这只是一个毕业设计项目,但其分析方法和技术架构对理解和分析MCN行业具有一定的参考价值。
小红书MCN机构数据可视化分析系统-技术选型
大数据框架: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
小红书MCN机构数据可视化分析系统-视频展示
小红书MCN机构数据可视化分析系统-图片展示
小红书MCN机构数据可视化分析系统-代码展示
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql.types import *
from pyspark.sql.window import Window
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
import jieba
import re
from collections import Counter
# 核心功能1: MCN机构规模实力综合评估与聚类分析
def analyze_mcn_scale_clustering():
spark = SparkSession.builder.appName("MCNScaleAnalysis").config("spark.sql.shuffle.partitions", "200").getOrCreate()
df = spark.read.csv("hdfs://localhost:9000/mcn_data/mcn_list.csv", header=True, inferSchema=True)
df_clean = df.filter((F.col("签约达人数").isNotNull()) & (F.col("达人粉丝总数").isNotNull()))
df_metrics = df_clean.select("MCN名称", "签约达人数", "达人粉丝总数")
df_metrics = df_metrics.withColumn("平均达人粉丝量", F.round(F.col("达人粉丝总数") / F.col("签约达人数"), 2))
df_metrics = df_metrics.withColumn("影响力指数", F.round(F.log10(F.col("达人粉丝总数") + 1) * F.sqrt(F.col("签约达人数")), 2))
pandas_df = df_metrics.toPandas()
features = pandas_df[['签约达人数', '达人粉丝总数', '平均达人粉丝量']].values
scaler = StandardScaler()
features_scaled = scaler.fit_transform(features)
kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
clusters = kmeans.fit_predict(features_scaled)
pandas_df['聚类标签'] = clusters
cluster_names = {0: '头部机构', 1: '肩部机构', 2: '腰部机构', 3: '潜力机构'}
pandas_df['机构等级'] = pandas_df['聚类标签'].map(cluster_names)
result_df = spark.createDataFrame(pandas_df)
windowSpec = Window.partitionBy("机构等级").orderBy(F.desc("影响力指数"))
result_df = result_df.withColumn("等级内排名", F.row_number().over(windowSpec))
top_mcns = result_df.filter(F.col("等级内排名") <= 10)
top_mcns.coalesce(1).write.mode("overwrite").csv("hdfs://localhost:9000/mcn_analysis/scale_clustering_result")
return top_mcns
# 核心功能2: MCN机构地理分布深度分析与区域实力评估
def analyze_geographic_distribution():
spark = SparkSession.builder.appName("GeographicAnalysis").config("spark.executor.memory", "4g").getOrCreate()
df = spark.read.csv("hdfs://localhost:9000/mcn_data/mcn_list.csv", header=True, inferSchema=True)
province_patterns = {'北京': '北京', '上海': '上海', '广东|深圳|广州': '广东', '浙江|杭州': '浙江', '江苏|南京|苏州': '江苏', '四川|成都': '四川', '湖北|武汉': '湖北', '福建|厦门': '福建', '山东|青岛': '山东', '重庆': '重庆'}
def extract_province(company_name):
if company_name is None:
return '未知'
for pattern, province in province_patterns.items():
if re.search(pattern, str(company_name)):
return province
return '其他'
extract_province_udf = F.udf(extract_province, StringType())
df_geo = df.withColumn("省份", extract_province_udf(F.col("机构公司")))
province_stats = df_geo.groupBy("省份").agg(F.count("MCN名称").alias("机构数量"), F.sum("签约达人数").alias("总签约达人数"), F.sum("达人粉丝总数").alias("总粉丝数"), F.avg("签约达人数").alias("平均签约达人数"), F.avg("达人粉丝总数").alias("平均粉丝数"))
province_stats = province_stats.withColumn("区域影响力指数", F.round(F.log10(F.col("总粉丝数") + 1) * F.col("机构数量"), 2))
province_stats = province_stats.withColumn("达人密度", F.round(F.col("总签约达人数") / F.col("机构数量"), 2))
windowSpec = Window.orderBy(F.desc("区域影响力指数"))
province_stats = province_stats.withColumn("全国排名", F.row_number().over(windowSpec))
city_extract_udf = F.udf(lambda x: re.findall(r'(北京|上海|深圳|广州|杭州|成都|南京|武汉|西安|重庆)', str(x))[0] if re.findall(r'(北京|上海|深圳|广州|杭州|成都|南京|武汉|西安|重庆)', str(x)) else '其他', StringType())
df_city = df.withColumn("城市", city_extract_udf(F.col("机构公司")))
city_stats = df_city.groupBy("城市").agg(F.count("MCN名称").alias("机构数量"), F.sum("达人粉丝总数").alias("总粉丝数"))
city_stats = city_stats.withColumn("城市竞争力", F.round(F.col("总粉丝数") / F.col("机构数量"), 2))
result = province_stats.union(city_stats.select(F.lit("城市").alias("省份"), "机构数量", F.lit(None).alias("总签约达人数"), "总粉丝数", F.lit(None).alias("平均签约达人数"), F.lit(None).alias("平均粉丝数"), F.lit(None).alias("区域影响力指数"), F.lit(None).alias("达人密度"), F.lit(None).alias("全国排名")))
result.coalesce(1).write.mode("overwrite").csv("hdfs://localhost:9000/mcn_analysis/geographic_distribution_result")
return result
# 核心功能3: MCN机构内容领域文本挖掘与赛道竞争分析
def analyze_content_domains():
spark = SparkSession.builder.appName("ContentDomainAnalysis").config("spark.sql.adaptive.enabled", "true").getOrCreate()
df = spark.read.csv("hdfs://localhost:9000/mcn_data/mcn_list.csv", header=True, inferSchema=True)
df_valid = df.filter(F.col("简介").isNotNull())
domain_keywords = {'美妆': ['美妆', '化妆', '护肤', '彩妆', '美容'], '时尚': ['时尚', '穿搭', '服装', '潮流', '街拍'], '母婴': ['母婴', '育儿', '亲子', '宝宝', '孕妇'], '美食': ['美食', '餐饮', '烹饪', '探店', '吃货'], '健身': ['健身', '运动', '瑜伽', '减肥', '塑形'], '旅游': ['旅游', '旅行', '景点', '民宿', '攻略'], '知识': ['知识', '教育', '学习', '科普', '职场'], '娱乐': ['娱乐', '搞笑', '段子', '剧情', '影视']}
def identify_domains(intro):
if intro is None:
return []
domains = []
for domain, keywords in domain_keywords.items():
for keyword in keywords:
if keyword in str(intro):
domains.append(domain)
break
return domains if domains else ['综合']
identify_domains_udf = F.udf(identify_domains, ArrayType(StringType()))
df_domains = df_valid.withColumn("内容领域", identify_domains_udf(F.col("简介")))
df_exploded = df_domains.select("MCN名称", "签约达人数", "达人粉丝总数", F.explode("内容领域").alias("领域"))
domain_stats = df_exploded.groupBy("领域").agg(F.count("MCN名称").alias("机构数量"), F.sum("签约达人数").alias("领域总达人数"), F.sum("达人粉丝总数").alias("领域总粉丝数"), F.avg("签约达人数").alias("领域平均达人数"), F.avg("达人粉丝总数").alias("领域平均粉丝数"))
domain_stats = domain_stats.withColumn("领域集中度", F.round(F.col("机构数量") / df_valid.count() * 100, 2))
domain_stats = domain_stats.withColumn("领域竞争指数", F.round(F.col("领域总粉丝数") / F.col("机构数量"), 2))
jieba.setLogLevel(20)
all_intros = df_valid.select("简介").rdd.flatMap(lambda x: jieba.cut(str(x[0]))).collect()
word_freq = Counter(all_intros)
stopwords = ['的', '了', '和', '是', '在', '有', '与', '为', '等', '及', '、', ',', '。', '!', '?']
word_freq_clean = {k: v for k, v in word_freq.items() if k not in stopwords and len(k) > 1 and v > 5}
top_words = sorted(word_freq_clean.items(), key=lambda x: x[1], reverse=True)[:50]
words_df = spark.createDataFrame(top_words, ["关键词", "词频"])
words_df = words_df.withColumn("词频占比", F.round(F.col("词频") / sum(word_freq_clean.values()) * 100, 3))
final_result = domain_stats.union(words_df.select(F.col("关键词").alias("领域"), F.col("词频").alias("机构数量"), F.lit(None).alias("领域总达人数"), F.lit(None).alias("领域总粉丝数"), F.lit(None).alias("领域平均达人数"), F.lit(None).alias("领域平均粉丝数"), F.col("词频占比").alias("领域集中度"), F.lit(None).alias("领域竞争指数")))
final_result.coalesce(1).write.mode("overwrite").csv("hdfs://localhost:9000/mcn_analysis/content_domain_result")
return final_result
小红书MCN机构数据可视化分析系统-结语
💕💕 Java实战项目集 微信小程序实战项目集 Python实战项目集 安卓Android实战项目集 大数据实战项目集 💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。