基于大数据的豆瓣读书数据分析与可视化系统 【python、Hadoop、spark、数据可视化、高分毕设项目、python项目、vue前端、课程毕设】

70 阅读7分钟

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

@TOC

基于大数据的豆瓣读书数据分析与可视化系统介绍

《基于大数据的豆瓣读书数据分析与可视化系统》是一个完整贯穿数据采集、处理、分析与可视化全链路的大数据综合性项目。本系统在技术架构上,核心采用了Hadoop分布式文件系统(HDFS)作为海量豆瓣读书数据的底层存储方案,并利用高性能的分布式计算框架Spark,特别是其Spark SQL模块,对存储于HDFS上的结构化数据进行高效的ETL、聚合与深度分析,充分展现了大数据技术栈在处理复杂业务场景下的强大能力。系统后端架构提供了Java和Python两种主流实现路径,分别基于成熟稳定的Spring Boot框架和高效敏捷的Django框架,通过接口为前端提供数据支撑;前端则采用Vue.js作为核心框架,结合ElementUI组件库快速构建用户交互界面,并利用强大的Echarts图表库,将复杂的分析结果以直观、动态的数据大屏形式进行可视化呈现。在功能层面,系统不仅包含了用户管理、个人信息维护等基础模块,更核心的是实现了针对豆瓣读书数据的多维度智能分析,包括作者维度分析、书籍特征分析、内容价值分析和出版社维度分析,最终通过数据大屏将各项分析指标与结论进行集中展示,帮助用户快速洞察图书市场的内在规律与价值分布,是一个兼具技术深度与业务价值的完整大数据应用实践。

基于大数据的豆瓣读书数据分析与可视化系统演示视频

演示视频

基于大数据的豆瓣读书数据分析与可视化系统演示图片

出版社维度分析.png

动态数据大屏.png

静态数据大屏.png

内容价值分析.png

书记特征分析.png

作者维度分析.png

基于大数据的豆瓣读书数据分析与可视化系统代码展示

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, count, avg, sum, when, lit, log
# 初始化SparkSession,这是与大数据框架交互的入口
spark = SparkSession.builder \
    .appName("DoubanBookAnalysis") \
    .master("local[*]") \
    .config("spark.sql.warehouse.dir", "file:///C:/path/to/spark-warehouse") \
    .getOrCreate()
# 假设df是从HDFS加载的豆瓣读书数据DataFrame
# df = spark.read.csv("hdfs://namenode:9000/douban/books.csv", header=True, inferSchema=True)
# --- 核心功能一:作者维度分析 ---
def analyze_author_dimension(df):
    # 对作者和评分数据进行清洗,去除关键信息为空的记录
    author_df = df.filter(col("author").isNotNull() & col("rating_score").isNotNull() & col("rating_count").isNotNull())
    # 按作者进行分组,并计算其出版书籍总数、平均评分、总评价人数
    author_stats = author_df.groupBy("author").agg(
        count("book_name").alias("total_books"),
        avg("rating_score").alias("avg_rating"),
        sum("rating_count").alias("total_ratings")
    )
    # 为保证平均分的可信度,过滤掉出版书籍少于3本的作者
    filtered_authors = author_stats.filter(col("total_books") >= 3)
    # 对评分进行格式化,保留两位小数
    formatted_authors = filtered_authors.withColumn("avg_rating", col("avg_rating").cast("decimal(10,2)"))
    # 引入一个综合影响力评分,结合平均分和书籍数量(使用对数平滑)
    # 这个复杂的计算可以体现业务处理的深度
    influential_authors = formatted_authors.withColumn(
        "influence_score",
        col("avg_rating") * log(col("total_books") + 1) + col("total_ratings") / 10000
    )
    # 按照综合影响力评分进行降序排序
    sorted_authors = influential_authors.orderBy(col("influence_score").desc())
    # 选取影响力排名前20的作者作为核心结果
    top_authors = sorted_authors.limit(20)
    # 选择最终需要返回给前端的字段
    result = top_authors.select("author", "total_books", "avg_rating", "total_ratings", "influence_score")
    # 将结果DataFrame转换为JSON格式字符串列表,方便API返回
    result_json = result.toJSON().collect()
    return result_json
# --- 核心功能二:出版社维度分析 ---
def analyze_publisher_dimension(df):
    # 清洗数据,确保出版社、评分、价格字段不为空
    publisher_df = df.filter(col("publisher").isNotNull() & col("rating_score").isNotNull() & col("price").isNotNull())
    # 按出版社分组,统计其出版书籍数、平均分、平均定价
    publisher_stats = publisher_df.groupBy("publisher").agg(
        count("book_name").alias("book_count"),
        avg("rating_score").alias("avg_rating"),
        avg("price").alias("avg_price")
    )
    # 过滤掉出版书籍过少的出版社,使统计数据更具代表性
    filtered_publishers = publisher_stats.filter(col("book_count") > 10)
    # 增加一个市场定位的判断逻辑,根据平均定价划分不同区间
    market_position_df = filtered_publishers.withColumn("market_position",
        when(col("avg_price") >= 100, "高端市场")
        .when((col("avg_price") >= 50) & (col("avg_price") < 100), "中端市场")
        .otherwise("大众市场")
    )
    # 计算出版社的“质量分”,结合书籍数量和平均评分
    quality_df = market_position_df.withColumn("quality_score", col("book_count") * col("avg_rating"))
    # 按照质量分进行降序排序
    sorted_publishers = quality_df.orderBy(col("quality_score").desc())
    # 选取排名前20的出版社
    top_publishers = sorted_publishers.limit(20)
    # 对数值结果进行格式化,使其更适合前端展示
    final_result = top_publishers.select(
        col("publisher"),
        col("book_count"),
        col("avg_rating").cast("decimal(10,2)"),
        col("avg_price").cast("decimal(10,2)"),
        col("market_position"),
        col("quality_score")
    )
    # 将最终结果转换为JSON格式,用于接口传输
    result_json = final_result.toJSON().collect()
    return result_json
# --- 核心功能三:书籍特征分析(按年份) ---
def analyze_book_features_by_year(df):
    # 确保年份和评分数据有效,且年份在一个合理范围内
    feature_df = df.filter(
        col("publication_year").isNotNull() & col("rating_score").isNotNull() & (col("publication_year") > 1950)
    )
    # 将年份转换为整数类型以便于排序和分组
    feature_df = feature_df.withColumn("publication_year", col("publication_year").cast("integer"))
    # 按出版年份进行分组
    yearly_stats = feature_df.groupBy("publication_year").agg(
        count("book_name").alias("books_published"),
        avg("rating_score").alias("yearly_avg_rating")
    )
    # 增加一个评级分类字段,用于前端可视化区分
    yearly_classified = yearly_stats.withColumn("rating_level",
        when(col("yearly_avg_rating") >= 4.5, "黄金年代")
        .when(col("yearly_avg_rating") >= 4.0, "白银年代")
        .otherwise("青铜年代")
    )
    # 增加与前一年平均分的对比,计算增长率,体现更复杂的业务逻辑
    # 此处需要使用窗口函数,是Spark中一个核心且复杂的知识点
    from pyspark.sql.window import Window
    window_spec = Window.orderBy("publication_year")
    from pyspark.sql.functions import lag
    yearly_comparison = yearly_classified.withColumn(
        "prev_year_rating", lag("yearly_avg_rating", 1, 0).over(window_spec)
    )
    yearly_growth = yearly_comparison.withColumn(
        "rating_growth_rate",
        (col("yearly_avg_rating") - col("prev_year_rating")) / col("prev_year_rating")
    )
    # 按照年份升序排序,方便前端绘制趋势图
    sorted_yearly_stats = yearly_growth.orderBy(col("publication_year").asc())
    # 选择最终字段并进行数据格式化
    final_df = sorted_yearly_stats.select(
        col("publication_year"),
        col("books_published"),
        col("yearly_avg_rating").cast("decimal(10,2)"),
        col("rating_level"),
        col("rating_growth_rate").cast("decimal(10,4)")
    )
    # 收集结果为JSON格式
    result_json = final_df.toJSON().collect()
    return result_json

基于大数据的豆瓣读书数据分析与可视化系统文档展示

首图.png

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