No description
  • CSS 38.5%
  • Python 35%
  • HTML 20.1%
  • JavaScript 5.7%
  • Batchfile 0.7%
Find a file
2026-09-04 14:43:14 +08:00
.idea first_add 2026-09-02 14:26:26 +08:00
.trae/documents first_add 2026-09-02 14:26:26 +08:00
.wdm first_add 2026-09-02 14:26:26 +08:00
__pycache__ first_add 2026-09-02 14:26:26 +08:00
data 添加用户 2026-09-02 15:10:42 +08:00
models 添加用户 2026-09-04 14:43:14 +08:00
output/charts 添加用户 2026-09-04 14:43:14 +08:00
sql first_add 2026-09-02 14:26:26 +08:00
src first_add 2026-09-02 14:26:26 +08:00
web 添加用户 2026-09-02 15:10:42 +08:00
config.py 添加用户 2026-09-04 14:43:14 +08:00
crawl_20000.py first_add 2026-09-02 14:26:26 +08:00
current_login.png first_add 2026-09-02 14:26:26 +08:00
current_login2.png first_add 2026-09-02 14:26:26 +08:00
generate_sample_data.py first_add 2026-09-02 14:26:26 +08:00
README.md 添加用户 2026-09-04 14:43:14 +08:00
real_spider.py first_add 2026-09-02 14:26:26 +08:00
requirements.txt 添加用户 2026-09-04 14:43:14 +08:00
requirements_real.txt first_add 2026-09-02 14:26:26 +08:00
review_test_output.txt first_add 2026-09-02 14:26:26 +08:00
run_all.py first_add 2026-09-02 14:26:26 +08:00
run_spider.py first_add 2026-09-02 14:26:26 +08:00
test_real_review_result.txt first_add 2026-09-02 14:26:26 +08:00
test_spider.py first_add 2026-09-02 14:26:26 +08:00
启动.bat first_add 2026-09-02 14:26:26 +08:00
爬取20000条.bat first_add 2026-09-02 14:26:26 +08:00
爬取真实数据.bat first_add 2026-09-02 14:26:26 +08:00
真实数据爬取说明.md first_add 2026-09-02 14:26:26 +08:00
运行代码 first_add 2026-09-02 14:26:26 +08:00

基于豆瓣影评情感特征与多维度属性的电影评分预测与可视化系统

本科毕业设计项目 · 数据科学与大数据技术专业

完整链路:数据爬取 → 情感特征提取 → 多特征融合 → 评分预测 → 可视化展示

一、项目介绍

本项目自主爬取豆瓣电影公开页面的影片元数据与用户影评数据,以评论文本为核心提取情感维度特征同时融合电影导演、类型、上映时间、制片地区、片长等多维度元数据特征构建机器学习回归模型线性回归、随机森林、XGBoost实现电影评分的定量预测并搭建 Web 可视化交互面板对数据分布、情感特征、模型效果、预测结果进行多维度展示。

差异化亮点

  • 自主爬取数据:核心数据源通过爬虫从豆瓣电影公开页面获取,禁止使用现成数据集
  • 情感特征与多维度属性融合驱动评分预测:区别于纯可视化、纯情感分析类项目
  • 完整链路闭环:从数据采集到可视化展示的全流程自主实现

二、技术栈

模块 技术
开发语言 Python 3.10
数据爬取 requests + BeautifulSoup4 + fake_useragent
数据处理 Pandas、NumPy
文本与情感 jieba 分词、中文停用词过滤、TF-IDF、Boson/知网情感词典(禁止调用大模型 API
机器学习 scikit-learn + XGBoost线性回归/随机森林/XGBoost 三模型对比)
评估指标 MAE、MSE、RMSE、决定系数 R²
数据存储 CSV 文件(默认)/ MySQL可选扩展
Web 后端 Python 标准库 http.serverThreadingHTTPServer 多线程)
前端可视化 HTML + ECharts
模型持久化 joblib

三、环境配置步骤

1. Python 环境

要求 Python 3.8+(推荐 3.10)。安装依赖:

cd movie-rating-prediction
pip install -r requirements.txt

2. 数据存储说明

系统默认采用 CSV 文件存储,开箱即用,无需安装数据库。所有数据文件位于 data/ 目录下:

目录 内容
data/raw/ 爬虫原始数据movies_raw.csv, reviews_raw.csv
data/processed/ 清洗与特征融合后的数据
data/dict/ 情感词典与停用词表
data/users.csv 用户账号数据

(可选)启用 MySQL 数据库:如需使用数据库存储,可按以下步骤配置:

(1) 安装 MySQL:下载安装 MySQL 8.0官网),记住 root 密码。

(2) 创建数据库:执行项目根目录下的建表脚本

mysql -u root -p < sql/create_tables.sql

该脚本会自动创建 douban_movie 数据库及 3 张核心表(movie_metamovie_reviewsmovie_features)。

(3) 修改配置:打开 config.py,将 ENABLE_DB 设为 True,并修改 DB_CONFIG 中的密码为本机 MySQL 密码:

ENABLE_DB = True  # 启用 MySQL 数据库

DB_CONFIG = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "password": "your_password",   # 改为本机 MySQL 密码
    "database": "douban_movie",
    "charset": "utf8mb4",
}

说明:系统默认 ENABLE_DB = False,仅使用 CSV 存储全流程即可正常运行。MySQL 作为可选扩展,启用后数据会同时写入数据库和 CSV 备份。

3. 词典资源

项目已内置 data/dict/ 下的停用词表与情感词典(正向/负向/程度副词/否定词),无需额外下载。如需扩展词典,可直接编辑对应文件。

四、爬虫启动与配置说明

爬虫模块位于 src/spider/,含反爬、重试、断点续爬机制。

配置项

config.pySPIDER_CONFIG 中修改:

SPIDER_CONFIG = {
    "movie_count": 200,          # 爬取电影数量TOP200
    "reviews_per_movie": 200,    # 每部电影评论数
    "delay_min": 2.0,            # 请求最小延时(秒)
    "delay_max": 4.0,            # 请求最大延时(秒)
    "movie_delay": 5.0,          # 单部电影完成后额外延时
    "retry_max": 3,               # 失败重试次数
}

合规声明

本爬虫仅用于本科毕业设计学习研究,遵守豆瓣 robots 协议,已内置随机延时与请求头伪装,禁止用于大规模商用爬取。

单独运行爬虫

# 爬电影元数据
python -m src.spider.movie_spider

# 爬影评(需先完成电影爬取)
python -m src.spider.review_spider

支持断点续爬:中断后再次运行会自动跳过已爬取的电影(进度记录于 data/raw/spider_progress.json)。

五、模型训练步骤

一键执行全流程

python run_all.py

该脚本按顺序执行:爬虫 → 数据清洗 → 情感提取 → 特征工程 → 模型训练。

分步执行

# 跳过爬虫(已有数据时)
python run_all.py --skip-spider

# 仅指定爬取数量
python run_all.py --movie-count 50

# 仅执行训练步骤5
python run_all.py --steps 5

训练完成后产出:

  • models/best_model.pkl:最优评分预测模型
  • models/feature_scaler.pkl:特征标准化处理器
  • models/feature_columns.pkl:特征列名(预测对齐用)
  • models/model_compare.csv:多模型评估指标对比

六、Web 系统启动步骤

python web/app.py

浏览器访问:http://127.0.0.1:5000

5 个可视化看板

  1. 数据概览:核心指标卡片 + 评分分布直方图 + 类型 TOP10 + 年份趋势 + 地区分布饼图
  2. 情感分析:情感倾向分布饼图 + 评分-情感散点图 + 高频情感词云 + 类型情感对比
  3. 模型效果:三模型指标对比 + 预测vs真实对比 + 特征重要性 + 残差分布
  4. 预测交互:表单输入电影参数与影评,实时返回预测评分与情感特征
  5. 榜单分析:真实评分/预测评分/情感正向度 TOP10支持类型与年份筛选

七、功能模块说明

movie-rating-prediction/
├── README.md                     # 项目说明文档
├── requirements.txt              # 依赖库清单
├── run_all.py                     # 一键执行脚本
├── config.py                      # 全局配置(数据库/爬虫/模型超参)
├── data/
│   ├── raw/                       # 爬虫原始数据 CSV 备份
│   ├── processed/                 # 清洗、特征融合中间数据
│   └── dict/                      # 停用词表、情感词典
├── src/
│   ├── spider/                    # 模块1豆瓣爬虫
│   │   ├── movie_spider.py        # 电影元数据爬虫
│   │   ├── review_spider.py       # 影评数据爬虫
│   │   └── spider_utils.py        # 爬虫工具(请求头/延时/重试/断点)
│   ├── data_process/              # 模块2数据预处理与数据库交互
│   │   ├── data_clean.py          # 原始数据清洗与规范化
│   │   └── db_operator.py         # MySQL 可选扩展接口(默认 CSV 存储)
│   ├── sentiment/                 # 模块3影评情感特征提取
│   │   ├── text_preprocess.py     # 影评分词、去停用词
│   │   └── sentiment_calc.py      # 情感得分计算 + 电影维度聚合
│   ├── feature_engineering/       # 模块4多维度特征工程
│   │   ├── meta_feature.py        # 元数据特征编码
│   │   ├── feature_merge.py       # 情感特征与元数据拼接
│   │   └── feature_split.py       # 特征选择 + 数据集划分
│   └── model/                     # 模块5评分预测模型
│       ├── train.py               # 三种模型训练 + 网格调优
│       ├── evaluate.py            # 模型评估指标计算 + 对比
│       └── predict_api.py         # 单样本预测接口封装
├── models/                        # 模型持久化文件
├── web/                           # 模块6Web 可视化系统
│   ├── app.py                     # http.server 后端入口 + API标准库零依赖
│   ├── static/css/style.css       # 页面样式
│   ├── static/js/main.js         # ECharts 渲染 + 交互
│   └── templates/index.html      # 单页可视化面板5 个 Tab
├── sql/create_tables.sql          # 数据库建表脚本
└── output/charts/                 # 静态分析图表输出

八、算法原理说明

情感特征提取(基于情感词典 + 规则)

  1. 分词jieba 精确模式,基于前缀词典 + 动态规划 + HMM 识别未登录词
  2. 情感得分:遍历分词,匹配正向/负向词典累加得分,考虑前缀否定词(反转极性)与程度副词(放大权重)
  3. 综合情感值归一化(正向得分 - 负向得分) / (正向得分 + 负向得分 + ε) ∈ [-1, 1]
  4. 电影维度聚合:单条评论特征按 movie_id 聚合为平均情感、方差、正负向占比、TOP20 高频情感词

特征工程

  • 类别特征:电影类型/导演/地区独热编码(导演与地区保留高频 Top-K 避免维度爆炸)
  • 时间特征上映年份、月份、是否档期春节1-2月/暑期7-8月/国庆10月
  • 数值特征:片长、评论总数 z-score 标准化
  • 特征选择:皮尔逊相关性分析 + 随机森林特征重要性

模型对比

  • 线性回归:基线模型,可解释性强,假设线性关系
  • 随机森林:集成多棵决策树,抗过拟合,捕捉非线性
  • XGBoost:梯度提升树,迭代优化残差,精度高
  • 网格调优:对最优模型用 GridSearchCV 搜索超参数组合

九、常见问题

Q1爬虫被限制访问返回 403 A调大 delay_min/delay_max 延时,更换网络环境,或先少量爬取测试(--movie-count 10)。

Q2需要安装 MySQL 吗? A不需要。系统默认使用 CSV 文件存储,开箱即用。如需数据库支持,可在 config.py 中将 ENABLE_DB 设为 True 并配置 MySQL 连接参数。

Q3xgboost 安装失败? A尝试 pip install xgboost --no-cache-dir 或下载预编译 wheel 包安装。

Q4Web 预测功能提示模型未加载? A需先执行训练流水线python run_all.py --steps 5)生成 models/best_model.pkl

十、合规与版权声明

  • 本项目仅用于本科毕业设计学习研究
  • 爬虫遵守豆瓣 robots 协议,内置限速与重试机制,不对目标网站造成压力
  • 禁止用于大规模商用爬取或数据倒卖
  • 仅供学术交流,请勿用于商业用途

十一、登录页视频背景说明

登录页(/login)左侧使用电影片段视频作为动态背景,营造沉浸式入场体验。

视频文件放置

请将视频文件命名为 movie_bg.mp4,放入以下目录:

web/static/video/movie_bg.mp4

视频要求

  • 格式MP4H.264 编码),兼容性最佳
  • 时长:建议 10-30 秒(短循环即可,文件体积更小)
  • 分辨率:建议 1920×1080 或更高,横屏比例
  • 内容:电影片段、胶片滚动、星光等与电影主题相关的画面
  • 体积:建议压缩到 5MB 以内,避免加载过慢

自动降级机制

  • 视频标签设置了 onerror 事件,当视频文件缺失或加载失败时,自动降级为浅灰渐变背景 + 电影胶片 SVG 插画,保证页面不空白
  • 视频属性为 autoplay muted loop playsinline(静音、循环、内联播放),符合浏览器自动播放策略

获取免费电影片段素材