Python大数据实验分析与挖掘综合实验平台
一、实验目的
-
构建一个基于 Streamlit 的交互式 Web 应用,用于展示和运行《Python大数据分析与挖掘实战(第2版)》教材中的代码示例。
-
提供多语言界面(中文、英文、越南语、老挝语),支持深色模式,增强用户体验。
-
实现代码查看、自动解析(提取文档字符串与注释)、在线运行测试、AI 智能问答等核心功能。
-
支持用户标记学习进度(已完成实验),并能自动跳转下一实验或下一章。
-
解决原始代码中存在的目录定位、编码兼容、进度条参数错误等问题,并进行全面优化。
二、实验环境
| 项目 | 说明 |
|---|---|
| 操作系统 | Windows 11 / 10 |
| Python 版本 | 3.8+ |
| 主要库 | streamlit, subprocess, tempfile, pathlib, re, typing, openai(可选) |
| 代码编辑器 | VS Code / Spyder / PyCharm |
| 运行命令 | streamlit run app.py |
| 数据目录 | C:\Users\23769\.spyder-py3\...\程序与数据 (2) (可动态修改) |
三、系统设计与架构
3.1 总体架构
系统采用前后端一体的 Streamlit 框架,整体分为以下几个模块:
-
国际化模块:基于字典的翻译系统,支持动态语言切换。
-
文件加载模块:递归扫描指定根目录,识别“第1章”~“第8章”文件夹,读取所有
.py文件内容(支持多种编码)。 -
代码解析模块:自动提取文档字符串(docstring)或前20行注释,展示章节学习要点。
-
代码运行模块:将代码写入临时文件,调用子进程执行,捕获标准输出/错误,超时控制。
-
AI 助手模块:可选调用 OpenAI API 进行智能问答,无 API Key 时提供基于正则的模拟分析。
-
进度管理模块:使用
st.session_state存储用户完成的实验列表,支持章节进度重置。 -
UI 样式模块:自定义 CSS 背景图、卡片样式,适配深色模式。
3.2 核心函数与流程
| 函数名 | 功能描述 |
|---|---|
t(key, **kwargs) |
根据当前语言返回翻译文本,支持命名参数格式化。 |
get_chapter_number() |
从“第N章”中提取数字 N。 |
read_file_content() |
多编码尝试读取文件内容(utf-8, gbk, gb2312, utf-8-sig)。 |
find_chapter_root() |
智能路径穿透:如果当前目录无“第”字文件夹但只有一个子目录,则自动进入,最多穿透3层。 |
load_all_data() |
缓存加载所有章节的代码内容,返回 {章节名: {文件名: 代码}}。 |
get_ai_response() |
调用 OpenAI API 或生成模拟回答。 |
apply_custom_css() |
设置背景图片、渐变覆盖、卡片样式。 |
init_session_state() |
初始化所有会话状态变量。 |
3.3 目录结构示例
text
程序与数据 (2)/
└── Python大数据分析与挖掘实战:微课版(第2版)程序与数据/
├── 第1章/
│ ├── 1-1 基础语法.py
│ └── ...
├── 第2章/
│ ├── 2-1 NumPy数组.py
│ └── ...
...
└── 第8章/
└── ...
应用支持自动穿透一层子目录,用户只需指定最外层文件夹即可。
四、主要功能实现
4.1 多语言国际化
-
定义
TRANSLATIONS字典,包含四种语言的所有界面文本。 -
侧边栏提供下拉菜单,切换时自动刷新页面并播放气球动画。
-
所有动态文本(如文件数、进度)均通过
t()函数格式化输出。
4.2 代码查看与分析
-
代码查看:语法高亮 + 行号显示,并提供下载按钮。
-
代码解析:
-
优先提取文件开头的三引号文档字符串。
-
若无文档字符串,则提取前20行中的单行注释。
-
根据章节号显示预设的学习要点(如“NumPy 数组创建”、“Pandas 数据清洗”)。
-
4.3 在线运行测试
-
使用
subprocess.run()在独立进程中执行临时 Python 文件。 -
超时时间设为 30 秒,防止死循环。
-
自动检测代码中的
import/from语句,列出依赖库提醒用户。 -
分别显示标准输出和错误输出。
4.4 AI 智能助手
-
真实模式:若环境变量
OPENAI_API_KEY存在,调用gpt-3.5-turbo分析代码。 -
模拟模式:无 API Key 时,基于正则提取代码特征(行数、导入库、函数/类名、注释、绘图/机器学习关键词)生成基础分析报告。
-
对话历史保存在
st.session_state.ai_messages中,支持连续问答。
4.5 进度跟踪与导航
-
每个实验(.py 文件)可标记为“已完成”,数据存储在
completed_experiments[章节]列表中。 -
侧边栏显示当前章节的进度条(已完成数/总数)。
-
提供“重置本章进度”和“重置全部进度”按钮。
-
主界面底部提供“下一实验”和“下一章”按钮,自动跳转。
4.6 样式与用户体验
-
背景图采用东南亚风格的棕榈树与寺庙图片(来自 Pexels),叠加半透明白/黑色渐变。
-
学习卡片(
.learning-card)使用圆角、左边框高亮。 -
深色模式动态切换,适配侧边栏、代码块、卡片背景。
-
语言切换时播放
st.balloons()动画并显示友好提示。
五、优化与修复说明
相比原始版本,本实验报告对应的代码进行了以下优化:
| 问题 | 解决方案 |
|---|---|
| 根目录下嵌套一层文件夹导致找不到“第1章” | 增加 find_chapter_root() 自动穿透唯一子目录,最多三层。 |
| 文件编码错误(如 GBK 无法解码) | 增加 utf-8-sig 编码尝试,并按优先级依次尝试。 |
st.progress 参数格式错误(原代码中使用了未命名的参数) |
改为 st.progress(value, text=formatted_string)。 |
翻译字典中 learning_points 被错误当作字符串处理 |
直接返回字典对象,并在使用时判断类型。 |
| 模拟 AI 回答过于简单 | 增加对函数、类、注释、可视化、机器学习等特征的提取与描述。 |
| 临时文件可能未删除 | 在 finally 块中增加异常安全的删除操作。 |
| 章节排序使用字符串而非数字 | 提取章节号并按整数排序,避免“第10章”排在“第2章”之前。 |
| 缺少对空目录或权限错误的处理 | 添加 try...except PermissionError 和目录存在性检查。 |
| 代码重复(如文件读取逻辑) | 抽取为独立函数 read_file_content,提高可维护性。 |
六、实验步骤与结果展示
6.1 运行应用
-
安装 Streamlit:
pip install streamlit -
将最终代码保存为
app.py -
执行命令:
streamlit run app.py -
浏览器自动打开
http://localhost:8501
6.2 界面功能演示
| 功能模块 | 操作说明 | 预期结果 |
|---|---|---|
| 语言切换 | 侧边栏选择“English” | 界面立即切换为英文,并显示气球动画。 |
| 深色模式 | 点击“🌙 深色模式”开关 | 背景变暗,卡片、代码块颜色自动调整。 |
| 根目录设置 | 输入正确路径(如 C:\Users\23769\...\程序与数据 (2)) |
自动识别章节文件夹,侧边栏显示章节列表。 |
| 代码查看 | 选择“第1章” → 某个 .py 文件 → “📝 代码查看”标签 | 显示语法高亮的代码,可下载。 |
| 代码解析 | 切换到“📖 代码解析”标签 | 展示文件文档字符串或注释,以及本章学习要点。 |
| 运行代码 | 切换到“⚙️ 运行测试”,点击“▶️ 运行此代码” | 弹出运行结果(输出/错误),超时提示。 |
| AI 助手 | 在“🤖 AI 助手”标签输入问题,例如“解释这段代码的用途” | 模拟模式下返回代码概览;真实模式下返回 GPT 分析。 |
| 标记完成 | 点击“✅ 标记当前实验为已完成” | 进度条更新,文件状态变为“已完成”。 |
| 下一实验/下一章 | 完成一个文件后点击“下一实验 ➡️”;章节末尾点击“下一章 ➡️” | 自动切换到下一个文件或下一章的第一个文件。 |
6.3 实际运行截图(描述)
-
侧边栏:显示语言选择、深色模式、根目录输入框、当前目录下的文件夹列表、章节下拉框、文件搜索框、平台统计卡片、进度条、重置按钮。
-
主内容区:顶部标题与副标题;文件信息行(文件名、行数);四个标签页(代码查看、代码解析、运行测试、AI 助手)。
-
底部:标记完成按钮、下一实验/下一章按钮、版权信息。
七、实验总结
-
成功构建了一个功能完善的 Python 教学辅助平台,支持教材代码的统一管理、运行和分析。
-
多语言国际化设计使得平台可面向不同语种的学生,具有较好的扩展性。
-
智能目录穿透解决了常见的一层嵌套问题,降低了用户配置门槛。
-
AI 助手的加入(即使模拟模式)为学生提供了基础的代码理解辅助,真实 API 模式下可提供更深入的解答。
-
进度跟踪与导航功能有助于学生按章节顺序学习,提升实验效率。
-
通过本次实验,深入掌握了 Streamlit 的状态管理、缓存机制、子进程调用、动态样式修改以及国际化实现技巧。
八、后续改进方向
-
增加代码自动保存与运行历史记录。
-
支持更多编程语言(R、SQL)的展示与运行。
-
集成 Jupyter Notebook 内核,实现交互式单元格执行。
-
增加用户登录与云端进度同步功能。
-
优化模拟 AI 的解析能力,引入本地小模型(如 transformers)替代正则。
-
20260412150627-streamlit运行视频-1
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)