2025软工L班个人编程任务

B站大语言模型相关视频弹幕数据分析系统

github: https://github.com/102301617/102301617.git
博客:https://www.cnblogs.com/skjs/p/19228814

这是一个完整的B站弹幕数据采集、统计、可视化和分析系统,专门用于分析B站用户对大语言模型技术的主流看法。

一、PSP表格

PSP2.1 阶段 预估时间(分钟) 实际时间(分钟)
Planning 计划 60 45
- Estimate 估计任务时间 60 45
Development 开发 480 520
- Analysis 需求分析 60 50
- Design Spec 生成设计文档 30 25
- Design Review 设计复审 20 15
- Coding Standard 代码规范 10 10
- Design 具体设计 60 70
- Coding 具体编码 200 250
- Code Review 代码复审 30 40
- Test 测试(自测、修改代码、提交修改) 70 60
Reporting 报告 90 85
- Test Report 测试报告 30 25
- Size Measurement 计算工作量 20 15
- Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 40 45
合计 630 650

二、任务要求的实现

项目设计与技术栈

项目结构

.
├── main.py                      # 主程序入口
├── danmaku_crawler.py           # 弹幕爬虫模块
├── data_processor.py            # 数据处理模块(原始版本)
├── data_processor_optimized.py  # 数据处理模块(性能优化版本)
├── excel_writer.py              # Excel导出模块
├── visualizer.py                # 可视化模块
├── data_analyzer.py             # 数据分析模块
├── performance_profiler.py      # 性能分析工具
├── performance_comparison.py    # 性能对比测试工具
├── requirements.txt             # 依赖包列表
├── README.md                    # 项目说明
├── performance_analysis.md   # 性能分析报告
├── PERFORMANCE_README.md        # 性能分析使用说明
└── 性能改进总结.md              # 性能改进总结文档

``

技术栈

  • 爬虫: requests, BeautifulSoup4
  • 数据处理: pandas, jieba
  • 可视化: wordcloud, matplotlib
  • Excel操作: openpyxl
  • 数据分析: collections.Counter
  • 性能分析: cProfile, pstats, matplotlib, time

爬虫与数据处理

main.py (主程序)

├──→ BilibiliDanmakuCrawler (数据采集)
│ ├── search_videos() → 获取视频列表
│ ├── get_cid() → 获取视频cid
│ └── get_danmaku() → 获取弹幕

├──→ DanmakuProcessor (数据处理)
│ ├── filter_danmaku() → 过滤噪声
│ └── count_word_frequency() → 统计词频

├──→ ExcelWriter (数据导出)
│ └── write_statistics() → 生成Excel

├──→ Visualizer (可视化)
│ ├── process_text() → 文本分词
│ ├── create_wordcloud() → 基础词云
│ └── create_advanced_wordcloud() → 高级词云

└──→ DataAnalyzer (数据分析)
├── analyze_sentiment() → 情感分析
├── analyze_cost_mentions() → 成本分析
├── analyze_application_mentions() → 应用分析
└── generate_conclusion() → 生成报告

数据统计接口部分的性能改进

performance_chart

问题识别

通过性能分析发现三个主要瓶颈:

瓶颈1: 正则表达式重复编译(主要问题)* 问题: 每次调用is_noise时,re.match(pattern, text)都会重新编译正则表达式

  • 影响: 8,467次调用累计浪费大量时间(约58.67ms)
  • 位置: is_noise函数中的正则匹配

瓶颈2: 列表查找效率低(次要问题)* 问题: 使用列表进行关键词查找,时间复杂度O(n)

  • 影响: 每次查找都需要遍历整个列表
  • 位置: is_noise函数中的关键词检查

瓶颈3: 循环效率可优化(轻微问题)* 问题: 使用传统for循环和append,增加函数调用开销

  • 影响: 影响整体性能
  • 位置: filter_danmaku和count_word_frequency函数
  • 改进方式:
  1. 减少重复计算: 预编译正则表达式,避免重复编译
  2. 优化数据结构: 使用集合替代列表,提升查找效率
  3. 使用内置优化: 列表推导式比手动循环更高效
  4. 性能分析驱动: 通过cProfile识别瓶颈,针对性优化

数据结论的可靠性

数据统计
  • 统计每类弹幕的总数量
  • 输出词频排名前8的弹幕
  • 自动生成Excel统计表格(danmaku_statistics.xlsx
数据可视化
  • 生成美观的词云图
  • 支持中文分词和词频统计
  • 提供基础版和高级版两种词云图样式
数据结论
  • 情感倾向分析(积极/消极/中性)
  • 应用成本关注度分析
  • 潜在应用领域统计
  • 不利影响和担忧提取
  • 自动生成完整的分析报告

数据可视化界面的展示

数据可视化系统
├── 词云图可视化(Visualizer类)
│ ├── 基础版词云图(create_wordcloud)
│ └── 高级版词云图(create_advanced_wordcloud)
└── Excel表格可视化(ExcelWriter类)
└── 统计表格(write_statistics)

三、心得体会

通过本次作业,我完成了一个B站弹幕数据采集与分析系统,从需求分析到实现、测试与优化,完整实践了软件开发流程。

在模块化设计上,我将系统拆分为爬虫、数据处理、可视化、分析等模块,各模块职责清晰、低耦合。这提升了代码的可维护性和可扩展性,也便于后续功能扩展。

在错误处理方面,我遇到了B站API的412封禁问题。通过优化请求头、添加随机延迟、初始化会话获取cookies等方式解决。同时将matplotlib设为可选依赖,确保核心功能在缺少依赖时仍可用。这让我认识到完善的错误处理对用户体验的重要性。

在性能优化方面,我使用cProfile定位到filter_danmaku占78.5%的执行时间。通过预编译正则表达式、使用集合查找、采用列表推导式等优化,总体性能提升23.6%,从312.45ms降至238.67ms。这让我认识到性能分析工具的重要性,数据驱动的优化比猜测更有效。

在数据可视化方面,我生成了基础版和高级版词云图,并使用Excel表格展示统计数据。可视化能直观展示数据特征,提升报告的可读性和说服力。

在技术学习方面,我掌握了requests、BeautifulSoup4、pandas、jieba、wordcloud、matplotlib等工具的使用,学会了使用cProfile进行性能分析。合理选择工具能显著提高开发效率。

在项目管理方面,我使用PSP表格记录预估和实际时间,通过Git管理代码版本,编写了完整的README和使用文档。规范的项目管理能提高开发效率和代码质量。

在数据分析方面,我认识到数据清洗的重要性,通过过滤噪声数据提升了分析质量。同时进行了多维度分析,包括情感倾向、应用领域、成本关注等,基于6,427条有效数据得出了可靠的结论。

本次作业让我深刻体会到,软件工程不仅是编码,还包括需求分析、系统设计、性能优化、错误处理、文档编写等环节。每个环节都需要认真对待,系统化思考和持续改进才能开发出高质量的软件系统。这些经验对今后的软件开发工作具有重要的指导意义。



posted @ 2025-11-16 19:46  std017  阅读(0)  评论(0)    收藏  举报