基于 MySQL + Spark + Echarts + SpringBoot的豆瓣电影数据可视化项目

以下是一篇关于该项目的 blog,并附上部分关键代码:


基于 Spark + MySQL + Spring Boot + Echarts 的豆瓣电影大数据分析可视化项目

在当今大数据时代,数据分析和可视化对于深入理解数据背后的信息至关重要。今天,我要向大家介绍一个令人兴奋的项目——基于 Spark + MySQL + Spring Boot + Echarts 的豆瓣电影大数据分析可视化项目。

一、项目背景

豆瓣电影是一个拥有丰富电影信息的平台,对于电影爱好者、研究者和从业者来说,分析豆瓣电影数据可以获得有价值的洞察。本项目旨在通过爬取豆瓣电影数据,进行深入分析,并以直观的可视化方式呈现这些数据,帮助用户更好地理解豆瓣电影的各种特征和趋势。

二、项目流程

(一)爬虫部分

  1. 运行 getip.py 文件获取代理 IP 池。在使用前需删除 proxy.txt(存储爬取到的所有代理 IP)和 valid.txt(存储可用代理 IP)。

以下是 getip.py 的部分代码示例:

import requests
from lxml import etree
import random


def get_ip(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    response = requests.get(url, headers=headers)
    html = etree.HTML(response.text)
    # 根据实际网页结构提取 IP 和端口号
    ip = html.xpath('//tr/td[2]/text()')[0]
    port = html.xpath('//tr/td[3]/text()')[0]
    return ip + ':' + port
  1. 运行 GetData.py,从网页爬取所需内容,并初步保存到 ur.txt。其中,爬取的 URL 可根据需求进行调整,如 https://movie.douban.com/j/chart/top_list?type=11&interval_id=85%3A75&action=&start=,这里的 85%3A75 表示爬取评分在前 75%到 85%区间的内容,可根据实际需求自行修改。

  2. 运行 clear.py 进行数据处理,并将结果保存到 data.csv

  3. 修改 upload.py 中的 Hadoop 集群配置信息,运行该文件将 data.csv 上传到 Hadoop 集群。

(二)数据分析部分

七个数据分析文件都需要运行,注意以下操作:

  1. 在每个文件的开头几行,有以下代码需要根据实际路径进行修改:
System.setProperty("HADOOP_HOME", "C:\\Users\\Administrator\\Desktop\\大数据豆瓣电影数据分析与可视化\\数据分析\\SparkMovies\\apache-hadoop-3.1.3-winutils-master");
System.setProperty("hadoop.home.dir", "C:\\Users\\Administrator\\Desktop\\大数据豆瓣电影数据分析与可视化\\数据分析\\SparkMovies\\apache-hadoop-3.1.3-winutils-master");
System.load("C:\\Users\\Administrator\\Desktop\\大数据豆瓣电影数据分析与可视化\\数据分析\\SparkMovies\\apache-hadoop-3.1.3-winutils-master\\bin\\hadoop.dll");
  1. 文件中还涉及 Hadoop 集群配置和 MySQL 配置,需根据实际情况进行修改。MySQL 的数据库需手动创建,数据表的 SQL 文件为 part1~7.sql

以下是一个数据分析文件的示例代码结构:

from pyspark.sql import SparkSession
from pyspark.sql.functions import *

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

# 读取数据
df = spark.read.csv("path_to_data.csv", header=True, inferSchema=True)

# 数据分析操作
aggregated_df = df.groupBy("column_name").agg(sum("another_column"))

# 写入 MySQL
aggregated_df.write.format("jdbc") \
   .option("url", "jdbc:mysql://localhost:3306/database_name") \
   .option("dbtable", "table_name") \
   .option("user", "username") \
   .option("password", "password") \
   .mode("append") \
   .save()

(三)数据可视化部分(结合 Spring Boot 和 Echarts)

  1. 修改 src/main/resources/application.yml 文件中的 MySQL 配置。完整的表生成语句以及数据文件为 part1~7 完整.sql

  2. 在 Spring Boot 项目中进行配置和开发,将数据从 MySQL 数据库中读取出来,并通过后端接口提供给前端。以下是一个 Spring Boot 控制器的示例代码:

@RestController
@RequestMapping("/api")
public class DataController {

    @Autowired
    private DataService dataService;

    @GetMapping("/data")
    public List<DataModel> getData() {
        return dataService.getDataFromDatabase();
    }
}
  1. 在前端页面中使用 Echarts 库,根据后端提供的数据绘制各种可视化图表,如不同年份上映电影数、电影类型分析、电影类型平均评分、演员平均评分、不同年份电影平均评分、不同评分出现次数等。

以下是一个使用 Echarts 的前端代码示例:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Echarts Demo</title>
    <!-- 引入 Echarts 文件 -->
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.2/dist/echarts.min.js"></script>
</head>

<body>
    <!-- 为图表准备一个 DOM 容器 -->
    <div id="chart" style="width: 600px;height:400px;"></div>
    <script>
        // 基于准备好的 DOM,初始化 Echarts 实例
        var myChart = echarts.init(document.getElementById('chart'));

        // 使用 Ajax 获取后端数据
        $.ajax({
            url: '/api/data',
            type: 'GET',
            success: function (data) {
                // 指定图表的配置项和数据
                var option = {
                    title: {
                        text: 'Data Visualization'
                    },
                    tooltip: {},
                    xAxis: {
                        data: data.map(item => item.xValue)
                    },
                    yAxis: {},
                    series: [{
                        name: 'Data',
                        type: 'bar',
                        data: data.map(item => item.yValue)
                    }]
                };

                // 使用刚指定的配置项和数据显示图表
                myChart.setOption(option);
            }
        });
    </script>
</body>

</html>

三、技术栈

  1. MySQL:用于数据存储,方便后续的数据分析和查询。
  2. Spark:进行高效的大规模数据分析处理,能够快速处理爬取到的豆瓣电影数据。
  3. Echarts:实现数据的可视化展示,通过直观的图表呈现豆瓣电影数据的特征和趋势。
  4. Spring Boot:构建后端服务,提供数据接口,实现前后端分离的开发模式。

四、项目成果

  1. 通过爬虫获取了豆瓣电影的相关数据,并进行了有效的数据处理和存储。
  2. 利用 Spark 对数据进行分析,挖掘出有价值的信息和趋势。
  3. 使用 Spring Boot 和 Echarts 搭建了一个数据可视化平台,用户可以通过浏览器直观地查看豆瓣电影数据的各种可视化图表,深入了解豆瓣电影的特点和发展趋势。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

五、总结与展望

本项目成功实现了基于 MySQL + Spark + Echarts + Spring Boot 的豆瓣电影数据可视化,为电影爱好者、研究者和从业者提供了有价值的数据分析和可视化工具。未来,可以进一步扩展数据来源和分析维度,提高数据的准确性和完整性,同时优化可视化效果,提供更加丰富和交互性强的用户体验。还可以考虑添加更多的功能模块,如用户登录、数据分享等,使项目更加完善和实用。

如果你对这个项目感兴趣,欢迎前往项目下载地址:https://github.com/gongsunyanming/MoviesAnalysis 进行下载和探索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值