一个面向学习与作品展示的数据工程项目:围绕 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 pytestmacOS 或 Linux 激活环境时使用:
source .venv/bin/activate完整离线流程会读取 data/raw/douban_tv_2021_2024.csv,并生成:
data/processed/douban_tv_clean.csvdata/processed/analysis/summary.jsondata/processed/analysis/yearly_summary.csvdata/processed/analysis/region_summary.csvdata/processed/analysis/genre_summary.csvdocs/images/analysis-dashboard.pngdocs/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。第三方平台名称、数据及相关权利归各自权利人所有。

