Skip to content

Repository files navigation

豆瓣华语电视剧数据分析

CI Python License

一个面向学习与作品展示的数据工程项目:围绕 2021—2024 年华语电视剧元数据,完成采集示例、数据清洗、统计分析、可视化和自动化测试。仓库默认运行离线分析流程,不会自动访问外部网站。

本项目是课程项目的整理版。公开版本已移除姓名、学号、班级、登录 Cookie 和账号标识,并重构了原始脚本中的数据口径与工程结构。

分析概览

基于仓库内现有数据运行离线流程,得到以下可复现结果:

  • 数据范围:2021—2024 年,每年 500 条,共 2,000 条记录;电视剧 ID 无重复。
  • 缺失处理:填充 19 个缺失导演和 347 个缺失主演,清洗后结构化字段无缺失。
  • 评分口径:原始 平均评分 = 0 视为“尚未评分”;1,692 条已评分记录均值为 6.6988,中位数为 6.7。
  • 热度分布:评价人数中位数为 5,417.5,最大值为 1,096,709;268 条高热度记录被标记为 IQR 异常值,但不会被截断或删除。
  • 类型分布:剧情、爱情、真人秀出现次数居前;类型字段允许一部剧对应多个类型。
  • 相关性:已评分数据中,平均评分与评价人数的 Pearson 相关系数约为 0.1973,仅表示弱线性相关,不代表因果关系。

分析总览

清洗前后对比

快速开始

建议使用 Python 3.10 或更高版本。

python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"
douban-tv pipeline
python -m pytest

macOS 或 Linux 激活环境时使用:

source .venv/bin/activate

完整离线流程会读取 data/raw/douban_tv_2021_2024.csv,并生成:

  • data/processed/douban_tv_clean.csv
  • data/processed/analysis/summary.json
  • data/processed/analysis/yearly_summary.csv
  • data/processed/analysis/region_summary.csv
  • data/processed/analysis/genre_summary.csv
  • docs/images/analysis-dashboard.png
  • docs/images/cleaning-comparison.png

命令行用法

douban-tv pipeline     # 完整离线流程(推荐)
douban-tv clean        # 仅清洗现有 CSV
douban-tv analyze      # 仅生成统计结果
douban-tv visualize    # 仅重新生成图表
douban-tv crawl        # 明确启用实时采集
douban-tv schedule     # 明确启用定时采集

查看参数:

douban-tv --help
douban-tv pipeline --help

项目结构

.
├─ data/
│  ├─ raw/                         # 原始课程数据快照
│  └─ processed/                   # 清洗数据与统计输出
├─ docs/images/                    # 可复现图表
├─ reports/project-report.md       # 匿名化项目报告
├─ scripts/verify_public_repo.py   # 公开仓库隐私检查
├─ src/douban_tv_analysis/         # 可复用 Python 包与 CLI
├─ tests/                          # 离线单元测试与集成测试
├─ .github/workflows/ci.yml        # GitHub Actions
└─ pyproject.toml                  # 依赖、打包与工具配置

数据字段

字段 含义 处理说明
电视剧id 来源记录 ID 用作去重主键
电视剧名字 剧集名称 去除首尾空白
年份 标注年份 校验合理范围
所属区域 制作区域 别名统一,多地区用 / 分隔
电视剧分类 一个或多个类型 多类型用 / 分隔
导演主演 主创信息 缺失时填入“未知导演/未知主演”
评价人数 评价数量 保留原值,另加异常值标记
评分上限 评分上限 旧数据字段名为“最高评分”
星级 来源接口的 star_count 旧数据误命名为“最低评分”
平均评分 平均分 0 表示尚未评分,不参与评分均值
评价人数异常值 IQR 高值标记 仅用于识别,不删除记录

数据采集说明

仓库保留了一个低频、有限重试的教学采集客户端,但它不是默认流程,也不保证外部接口长期可用。实时命令必须显式提供 --acknowledge-site-rules,并将并发限制为 1—2、设置超时和请求间隔。

使用者在运行实时采集前,应自行确认目标网站当时有效的服务条款、robots 规则、接口许可和当地法律要求;遇到拒绝访问或限流应立即停止。测试与 CI 使用静态样例,不进行网络请求。

测试与公开检查

python -m ruff check .
python -m pytest
python scripts/verify_public_repo.py

测试覆盖数据去重、缺失填充、极端评价人数保留、字段重命名、类型拆分、分析输出、请求超时、无 Cookie 请求和完整离线流水线。公开检查脚本用于阻止已知实名信息、学号、旧账号标识和登录 Cookie 进入仓库。

局限性

  • 数据是特定时间形成的课程快照,不能代表平台当前完整内容。
  • 榜单或推荐接口可能带来样本选择偏差,不应将结果外推到全部华语电视剧。
  • 2024 年未评分记录比例较高,跨年度评分比较需谨慎。
  • 相关性分析为描述性统计,不提供因果解释。
  • 报告结论仅以仓库内数据和当前代码输出为准。

作者与版权

整理与维护:@862OvO

本仓库用于作品展示、招聘评估与学习交流。代码、文档和原创图表未授予复制、修改、分发或商业使用许可;详见 COPYRIGHT.md。第三方平台名称、数据及相关权利归各自权利人所有。

About

基于 Python 的华语电视剧数据工程项目,覆盖 2021—2024 年数据清洗、统计分析、可视化、CLI、自动化测试与 GitHub Actions。

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages