Python大数据分析与挖掘实战平台
Python大数据分析与挖掘实战平台
1、项目整体介绍
本平台是一个基于 Streamlit 构建的互动式教学实验系统,专为配合《Python大数据分析与挖掘实战(微课版)》教材而设计。其核心目标是降低初学者学习数据科学的门槛,通过“所见即所得”的方式,让学习者无需配置复杂开发环境,即可在浏览器中直接编写、运行和调试 Python 代码,并实时查看输出结果、图表可视化及代码解析。
平台支持三种语言界面切换(简体中文、英文、壮语),充分体现了对多语言用户群体的包容性,尤其在民族地区高校教学中具有独特优势。整个界面采用现代化 UI 设计,融合了动态加载动画、呼吸灯效果、渐变标题栏等视觉元素,提升交互体验的同时也增强了学习的沉浸感。
无论是课堂教学演示、学生课后练习,还是自学探索,该平台都能提供一体化、零配置、高反馈的学习环境,真正实现“边学边练、即时验证”。
2、项目技术栈
平台完全使用 Python 3.8+ 开发,无需任何前端框架(如 React、Vue),所有界面逻辑均由 Streamlit 驱动,极大简化了开发与部署流程。主要依赖如下:
- Streamlit:用于快速构建交互式 Web 应用,自动处理状态管理、组件渲染与用户输入。
- Pandas + NumPy:作为数据处理的核心库,支持结构化数据读取、清洗、转换与统计分析。
- Matplotlib:用于生成静态、动态或交互式图表,所有绘图操作均可被平台自动捕获并展示。
- re(正则表达式):用于代码静态分析,识别关键语法结构以生成教学解释。
- io.StringIO + sys.stdout:实现标准输出重定向,捕获 print() 等控制台输出。
- types.ModuleType:创建隔离的执行上下文,确保每次代码运行互不干扰,防止变量污染。
3、项目文件结构
项目根目录下需要按照教材章节创建文件夹,每个章节文件夹内放入对应的Python实验文件。具体结构如下:
项目根目录/
├── app.py # 主程序文件
├── 第1章 Python基础知识/
├── 第2章 Numpy/
├── 第3章 Pandas/
├── 第4章 Matplotlib/
├── 第5章 数据预处理与特征工程/
├── 第6章 机器学习与实现/
├── 第7章 集成学习与实现/
└── 第8章 深度学习与实现/
程序启动时会自动扫描这些文件夹,识别所有的.py文件作为实验项目,并检测是否存在“数据”子文件夹用于数据文件路径配置。
4、核心模块详解
4.1多语言系统
平台内置完整的三语支持体系,覆盖所有用户可见文本,包括按钮、提示、章节标题、代码解释等约 150 个词条。
LANGUAGES = {
"zh": {"name": "简体中文", "flag": "🇨🇳", "font": "Noto Sans SC"},
"en": {"name": "English", "flag": "🇺🇸", "font": "Arial"},
"za": {"name": "Vahcuengh (壮语)", "flag": "🌾", "font": "Noto Sans"}
}
TRANSLATIONS = {
"zh": { "run_code": "运行代码", "reset_code": "重置为原始代码" },
"en": { "run_code": "Run Code", "reset_code": "Reset to Original" },
"za": { "run_code": "Guh Maqcoenz", "reset_code": "Dingz Gijcoj Lai" }
}
动态参数替换:支持如 get_text(“line_num”, num=5) → “第5行”(中文)或 “Line 5”(英文)。
文化包容性:壮语(Vahcuengh)支持是国内教育类平台中的创新实践,有助于推动少数民族地区 STEM 教育普及。
实时切换:语言选择后立即刷新界面,无需刷新页面或重启应用。
4.2 动态文件扫描系统
平台启动时自动遍历预设章节目录,按教材顺序加载实验文件,确保教学一致性。
def scan_chapter_files():
chapter_order = [
"第1章 Python基础知识",
"第2章 Numpy",
...
]
chapters = []
for dir_name in chapter_order:
path = os.path.join(base_dir, dir_name)
if os.path.exists(path):
py_files = sorted([f for f in os.listdir(path) if f.endswith('.py')])
data_dir = os.path.join(path, "数据")
chapters.append({
"title": dir_name,
"experiments": {f.replace('.py', ''): f for f in py_files},
"data_dir": data_dir if os.path.exists(data_dir) else None
})
return chapters
图标与颜色映射:每章配有专属图标(如 📊 表示数据分析,🧠 表示深度学习),增强视觉识别。
容错机制:即使某些章节缺失,平台仍能正常运行其余部分,适合分阶段部署。
4.3 代码执行引擎(核心)
这是平台最核心的部分,负责安全地执行用户代码并捕获所有输出。
def load_user_code_from_string(code_string, data_dir=None, file_dir=None):
"""
安全执行用户代码,捕获输出和图表
返回: (module, error, output_text, figures)
"""
captured_figures = []
original_figure = plt.figure
try:
# 1. 创建独立模块空间(避免变量污染)
module = ModuleType("user_module")
# 2. 重定向标准输出(捕获 print)
output_buffer = StringIO()
old_stdout = sys.stdout
# 3. 捕获 matplotlib 图表
def capture_figure(*args, **kwargs):
fig = original_figure(*args, **kwargs)
captured_figures.append(fig)
return fig
plt.figure = capture_figure
# 4. 设置工作环境
if data_dir and os.path.exists(data_dir):
sys.path.insert(0, data_dir)
if file_dir and os.path.exists(file_dir):
os.chdir(file_dir)
# 5. 执行代码
sys.stdout = output_buffer
exec(code_string, module.__dict__)
# 6. 恢复环境
sys.stdout = old_stdout
plt.figure = original_figure
return module, None, output_buffer.getvalue(), captured_figures
except Exception as e:
plt.figure = original_figure
return None, str(e), "", []
4.4 代码解释器
使用正则表达式分析代码,自动识别各种代码结构并生成解释。
class CodeExplainer:
@staticmethod
def explain_code(code_string, lang="zh"):
explanations = []
key_points = []
lines = code_string.split('\n')
# 识别 import 语句
import_pattern = re.compile(r'^import\s+(\w+)|^from\s+(\w+)\s+import')
for i, line in enumerate(lines, 1):
match = import_pattern.match(line.strip())
if match:
lib = match.group(1) or match.group(2)
explanations.append({
"line": i,
"text": f"📦 导入 {lib} 库",
"type": "import"
})
# 识别变量赋值
var_pattern = re.compile(r'^(\w+)\s*=\s*(.+)$')
for i, line in enumerate(lines, 1):
match = var_pattern.match(line.strip())
if match and not line.strip().startswith('#'):
var_name = match.group(1)
explanations.append({
"line": i,
"text": f"📌 创建变量 {var_name}",
"type": "variable"
})
# 识别函数定义
func_pattern = re.compile(r'^def\s+(\w+)\s*\(([^)]*)\):')
for i, line in enumerate(lines, 1):
match = func_pattern.match(line.strip())
if match:
func_name = match.group(1)
explanations.append({
"line": i,
"text": f"🔧 定义函数 {func_name}",
"type": "function"
})
key_points.append(f"函数 {func_name} 可以被多次调用")
# 识别循环结构
loop_pattern = re.compile(r'^for\s+\w+\s+in\s+(\w+)|^while\s+')
for i, line in enumerate(lines, 1):
if loop_pattern.match(line.strip()):
explanations.append({
"line": i,
"text": "🔄 循环结构",
"type": "loop"
})
key_points.append("循环可以高效处理重复性任务")
# 识别特定库的知识点
if 'plt.' in code_string or 'matplotlib' in code_string:
key_points.append("matplotlib 是数据可视化库")
if 'pd.' in code_string or 'pandas' in code_string:
key_points.append("Pandas 提供 DataFrame 数据结构")
if 'np.' in code_string or 'numpy' in code_string:
key_points.append("NumPy 提供高效的数组运算")
return {
"explanations": explanations[:10],
"key_points": key_points[:5]
}
5、页面展示
平台主界面采用左右双栏布局。左侧是代码编辑区,包含支持语法高亮的编辑器、“运行代码”“重置”“下载”等操作按钮,以及显示当前实验目标与注意事项的互动学习助手。右侧为结果展示区,通过标签页分别呈现程序输出、自动生成的图表、代码解释和交互式控制台。
用户修改代码后点击“运行”,系统会在隔离环境中执行:成功时播放庆祝动画并显示结果;出错时则高亮错误行并展示详细堆栈信息。所有 Matplotlib 绘图会自动捕获并显示在图表标签页中,无需手动调用 plt.show()。
代码运行后,平台会自动分析内容,逐行列出关键语句含义(如变量定义、函数调用等),并提炼核心知识点,帮助用户理解代码逻辑。同时,交互式控制台允许用户输入小段代码即时测试,快速验证想法。
侧边栏提供语言切换(简体中文、英文、壮语)、章节导航(点击章节加载实验列表,再点击实验自动填充代码)以及平台统计(如“共8章、32个实验”),提升整体使用效率与学习体验。

6、视频演示
1111111
更多推荐
所有评论(0)