以下是一篇关于该项目的 blog,并附上部分关键代码:
基于 Spark + MySQL + Spring Boot + Echarts 的豆瓣电影大数据分析可视化项目
在当今大数据时代,数据分析和可视化对于深入理解数据背后的信息至关重要。今天,我要向大家介绍一个令人兴奋的项目——基于 Spark + MySQL + Spring Boot + Echarts 的豆瓣电影大数据分析可视化项目。
一、项目背景
豆瓣电影是一个拥有丰富电影信息的平台,对于电影爱好者、研究者和从业者来说,分析豆瓣电影数据可以获得有价值的洞察。本项目旨在通过爬取豆瓣电影数据,进行深入分析,并以直观的可视化方式呈现这些数据,帮助用户更好地理解豆瓣电影的各种特征和趋势。
二、项目流程
(一)爬虫部分
- 运行
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
-
运行
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%区间的内容,可根据实际需求自行修改。 -
运行
clear.py
进行数据处理,并将结果保存到data.csv
。 -
修改
upload.py
中的 Hadoop 集群配置信息,运行该文件将data.csv
上传到 Hadoop 集群。
(二)数据分析部分
七个数据分析文件都需要运行,注意以下操作:
- 在每个文件的开头几行,有以下代码需要根据实际路径进行修改:
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");
- 文件中还涉及 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)
-
修改
src/main/resources/application.yml
文件中的 MySQL 配置。完整的表生成语句以及数据文件为part1~7 完整.sql
。 -
在 Spring Boot 项目中进行配置和开发,将数据从 MySQL 数据库中读取出来,并通过后端接口提供给前端。以下是一个 Spring Boot 控制器的示例代码:
@RestController
@RequestMapping("/api")
public class DataController {
@Autowired
private DataService dataService;
@GetMapping("/data")
public List<DataModel> getData() {
return dataService.getDataFromDatabase();
}
}
- 在前端页面中使用 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>
三、技术栈
- MySQL:用于数据存储,方便后续的数据分析和查询。
- Spark:进行高效的大规模数据分析处理,能够快速处理爬取到的豆瓣电影数据。
- Echarts:实现数据的可视化展示,通过直观的图表呈现豆瓣电影数据的特征和趋势。
- Spring Boot:构建后端服务,提供数据接口,实现前后端分离的开发模式。
四、项目成果
- 通过爬虫获取了豆瓣电影的相关数据,并进行了有效的数据处理和存储。
- 利用 Spark 对数据进行分析,挖掘出有价值的信息和趋势。
- 使用 Spring Boot 和 Echarts 搭建了一个数据可视化平台,用户可以通过浏览器直观地查看豆瓣电影数据的各种可视化图表,深入了解豆瓣电影的特点和发展趋势。
五、总结与展望
本项目成功实现了基于 MySQL + Spark + Echarts + Spring Boot 的豆瓣电影数据可视化,为电影爱好者、研究者和从业者提供了有价值的数据分析和可视化工具。未来,可以进一步扩展数据来源和分析维度,提高数据的准确性和完整性,同时优化可视化效果,提供更加丰富和交互性强的用户体验。还可以考虑添加更多的功能模块,如用户登录、数据分享等,使项目更加完善和实用。
如果你对这个项目感兴趣,欢迎前往项目下载地址:https://github.com/gongsunyanming/MoviesAnalysis 进行下载和探索。