一、项目概述

1.1 项目背景

本系统是一个基于 Streamlit 构建的数据挖掘综合实验平台,旨在为数据科学学习提供一个交互式、可视化的实验环境。系统集成了 Python 基础知识、NumPy、Pandas、Matplotlib、数据预处理、机器学习、集成学习和深度学习等八大章节的代码实验。

1.2 核心功能

功能模块 功能描述
多语言支持 支持中文、英文、藏语、维吾尔语、蒙古语、朝鲜语6种语言
代码运行 在线执行Python代码,实时显示输出结果
变量查看 自动捕获并展示代码运行后的内存变量
图表生成 自动识别并显示Matplotlib生成的图表
AI智学助手 内置智能问答系统,解答数据科学相关问题
批量运行 同时运行多个实验,对比执行结果
结果对比 对比不同实验生成的变量数据

1.3 技术栈

# 核心依赖库
import streamlit as st          # Web应用框架
import pandas as pd             # 数据处理
import numpy as np              # 数值计算
import matplotlib.pyplot as plt # 数据可视化

二、系统架构设计

2.1 整体架构图

2.2 目录结构


三、核心功能实现详解

3.1 多语言系统

系统内置了6种语言的翻译字典,支持界面动态切换。

# 多语言翻译字典结构示例
TRANSLATIONS = {
    'zh': {                      # 中文
        'app_title': '数据挖掘综合实验平台',
        'student': '学生:   ',
        'run_result': '🚀 运行结果',
        # ... 更多翻译键值对
    },
    'en': {                      # 英文
        'app_title': 'Data Mining Experimental Platform',
        'student': 'Student: Li Jinling',
        # ... 更多翻译
    },
    # 'bo': 藏语, 'ug': 维吾尔语, 'mn': 蒙古语, 'ko': 朝鲜语
}

# 获取翻译文本的函数
def get_text(key):
    lang = st.session_state.get('language', 'zh')  # 获取当前语言
    if lang in TRANSLATIONS:
        return TRANSLATIONS[lang].get(key, TRANSLATIONS['zh'][key])
    return TRANSLATIONS['zh'][key]

功能说明:

  • 使用 st.session_state 存储当前选择的语言

  • 通过 get_text() 函数动态获取对应语言的文本

  • 支持6种语言的界面切换

3.2 章节与实验配置映射

系统将8大章节与对应的实验文件进行结构化配置。

# ====== 获取当前文件所在目录 ======
current_dir = os.path.dirname(os.path.abspath(__file__))

# ====== 定义各章节的文件映射 ======
chapters_config = {
    "✨ 第 1 章 Python 基础知识": {
        "icon": "🐍", 
        "folder": "第 1 章 Python 基础知识",
        "files": {
            "1.3 基础数据类型": "1.3.py",
            "1.4 序列索引与切片": "1.4.py",
            "1.5.1 列表操作": "1.5.1.py",
            "1.5.2 元组操作": "1.5.2.py",
            "1.5.3 字符串操作": "1.5.3.py",
            "1.6 字典操作": "1.6.py",
            "1.7 条件语句": "1.7.py",
            "1.8 循环语句": "1.8.py",
            "1.9 函数定义": "1.9.py"
        }
    },
    "🔮 第 2 章 NumPy": {
        "icon": "🔢", 
        "folder": "第 2 章 Numpy",
        "files": {
            "2.1 数组创建": "2.1.py",
            "2.2 数组运算": "2.2.py",
            "2.3 索引与切片": "2.3.py",
            "2.4 数组形状操作": "2.4.py",
            "2.5 随机数生成": "2.5.py",
            "2.6 统计分析": "2.6.py",
            "2.7 矩阵运算": "2.7.py",
            "2.8 数组排序": "2.8.py",
            "2.9 数组保存与加载": "2.9.py",
            "2.10 高级索引": "2.10.py"
        }
    },
    "📊 第 3 章 Pandas": {
        "icon": "📊", 
        "folder": "第 3 章 Pandas",
        "files": {
            "3.2.1 Series 创建": "3.2.1.py",
            "3.2.2 DataFrame 创建": "3.2.2.py",
            "3.2.3 数据查看": "3.2.3.py",
            "3.2.4 数据筛选": "3.2.4.py",
            "3.2.5 数据操作": "3.2.5.py",
            "3.3 数据读取与写入": "3.3.py",
            "3.4 数据清洗": "3.4.py"
        }
    },
    "📈 第 4 章 Matplotlib": {
        "icon": "📈", 
        "folder": "第 4 章 Matplotlib",
        "files": {
            "4.2.1 散点图": "4.2.1.py",
            "4.1.2 线性图": "4.1.2.py",
            "4.1.3 曲线图": "4.1.3.py",
            "4.1.4 折线图": "4.1.4.py",
            "4.2.2-4.2.6 综合绘图": "4.2.2~4.2.6.py",
            "4.2.7 子图布局": "4.2.7.py"
        }
    },
    "🧹 第 5 章 数据预处理": {
        "icon": "🧹", 
        "folder": "第 5 章 数据预处理与特征工程",
        "files": {
            "5.1 缺失值处理": "5.1.py",
            "5.2.1 数据标准化": "5.2.1.py",
            "5.2.2 数据归一化": "5.2.2.py",
            "5.3.1 数据编码": "5.3.1.py",
            "5.3.2-5.4 特征选择": "5.3.2-5.4.py",
            "5.5.1 PCA 降维": "5.5.1.py",
            "5.5.2 PCA 可视化": "5.5.2.py",
            "5.7.1 数据不平衡处理": "5.7.1.py",
            "5.7.2 SMOTE": "5.7.2.py",
            "5.8.1 特征提取": "5.8.1.py",
            "5.8.2 特征构造": "5.8.2.py",
            "5.9 特征工程综合": "5.9.py",
            "5.10.1 特征重要性": "5.10.1.py",
            "5.10.2 特征选择综合": "5.10.2.py"
        }
    },
    "🤖 第 6 章 机器学习": {
        "icon": "🤖", 
        "folder": "第 6 章 机器学习与实现",
        "files": {
            "6.1 线性回归": "6.1.py",
            "6.2 逻辑回归": "6.2.py",
            "6.3.3 KNN 分类": "6.3.3.py",
            "6.3.4 KNN 回归": "6.3.4.py",
            "6.4 决策树": "6.4.py",
            "6.5.1 K-Means": "6.5.1.py",
            "6.5.2 SVM 回归": "6.5.2.py",
            "6.6.3 朴素贝叶斯": "6.6.3.py"
        }
    },
    "🎯 第 7 章 集成学习": {
        "icon": "🎯", 
        "folder": "第 7 章 集成学习与实现",
        "files": {
            "7.2.3 Bagging (1)": "7.2.3 Bagging算法的应用举例(1).py",
            "7.2.3 Bagging (2)": "7.2.3 Bagging算法的应用举例(2).py",
            "7.3.3 随机森林 (1)": "7.3.3 Python随机森林算法的应用举例(1).py",
            "7.3.3 随机森林 (2)": "7.3.3 Python随机森林算法的应用举例(2).py",
            "7.5.3 AdaBoost (1)": "7.5.3 AdaBoost算法的应用举例(1).py",
            "7.5.3 AdaBoost (2)": "7.5.3 AdaBoost算法的应用举例(2).py",
            "7.6.3 GBDT (1)": "7.6.3 GBDT算法的应用举例(1).py",
            "7.6.3 GBDT (2)": "7.6.3 GBDT算法的应用举例(2).py",
            "7.7.3 XGBoost (1)": "7.7.3 XGBOOST算法的应用举例(1).py",
            "7.7.3 XGBoost (2)": "7.7.3 XGBOOST算法的应用举例(2).py"
        }
    },
    "🧠 第 8 章 深度学习": {
        "icon": "🧠", 
        "folder": "第 8 章 深度学习与实现",
        "files": {
            "8.3.3 TensorFlow 基础": "8.3.3 tensorflow案例.py",
            "8.4.2 MLP-MNIST": "8.4.2-MLP-MNIST案例.py",
            "8.4.3 MLP-MPG 分类": "8.4.3-MLP-MPG分类问题.py",
            "8.5.4 CNN-Cifar10": "8.5.4-CNN-Cifar10案例.py",
            "8.6.3 RNN-IMDB": "8.6.3-RNN-IMDB案例.py"
        }
    }
}

3.3 智能文件查找引擎

系统能够智能查找实验脚本文件,支持多种匹配策略。

def find_file(filename, folder_hint=None):
    """智能查找文件,支持模糊匹配"""
    
    # 1. 定义搜索路径列表
    search_paths = [current_dir, os.path.join(current_dir, "数据")]
    
    # 2. 添加各章节文件夹路径
    for chapter_name, config in chapters_config.items():
        folder = config.get("folder", chapter_name)
        # 移除图标前缀
        for prefix in ("✨ ", "🔮 ", "📊 "):
            if folder.startswith(prefix):
                folder = folder[2:]
                break
        path = os.path.join(current_dir, folder)
        if path not in search_paths and os.path.isdir(path):
            search_paths.append(path)
    
    # 3. 精确匹配
    for path in search_paths:
        full_path = os.path.join(path, filename)
        if os.path.exists(full_path):
            return full_path
    
    # 4. 模糊匹配(忽略空格和括号差异)
    for path in search_paths:
        for file in os.listdir(path):
            norm_file = file.replace(" ", "").replace("(", "(").replace(")", ")")
            norm_filename = filename.replace(" ", "").replace("(", "(").replace(")", ")")
            if norm_file == norm_filename:
                return os.path.join(path, file)
    
    # 5. 递归搜索
    for root, dirs, files in os.walk(current_dir):
        for file in files:
            if file == filename:
                return os.path.join(root, file)
    
    return None

3.4 Python代码安全执行引擎

核心执行引擎,负责运行Python代码并捕获输出、变量和图表。

def execute_python_code(code, filename, file_dir, exp_name):
    """安全执行Python代码,捕获输出、变量和图表"""
    
    output_buffer = io.StringIO()          # 捕获控制台输出
    original_cwd = os.getcwd()             # 保存原始工作目录
    
    # 切换工作目录到脚本所在文件夹
    if file_dir and os.path.exists(file_dir):
        os.chdir(file_dir)
    
    # 记录执行前的图片文件
    before_images = set()
    if file_dir:
        for f in os.listdir(file_dir):
            if f.endswith(('.png', '.jpg', '.jpeg')):
                before_images.add(f)
    
    # 清空Matplotlib图形
    plt.clf()
    plt.close('all')
    
    # 准备执行环境
    exec_globals = {
        'np': np, 'pd': pd, 'plt': plt,    # 常用库
        'os': os, 'sys': sys,              # 系统库
        '__name__': '__main__'
    }
    
    # 重定向标准输出
    old_stdout, old_stderr = sys.stdout, sys.stderr
    sys.stdout = output_buffer
    sys.stderr = output_buffer
    
    try:
        # 执行用户代码
        exec(code, exec_globals)
        output = output_buffer.getvalue()
        
        # 检测新生成的图片
        generated_images = []
        if file_dir:
            after_images = set(os.listdir(file_dir))
            new_images = after_images - before_images
            for img in new_images:
                if img.endswith(('.png', '.jpg', '.jpeg')):
                    generated_images.append(os.path.join(file_dir, img))
        
        # 捕获Matplotlib图形对象
        figures = []
        all_figs = [plt.figure(i) for i in plt.get_fignums()]
        for fig in all_figs:
            if fig and fig.get_axes():
                figures.append(fig)
        
        # 提取内存变量
        variables = {}
        exclude_names = {'np', 'pd', 'plt', 'os', 'sys', '__name__'}
        for key, value in exec_globals.items():
            if key.startswith('_') or callable(value):
                continue
            if key in exclude_names:
                continue
            variables[key] = value
        
        return output, None, variables, generated_images, figures
        
    except Exception as e:
        error_msg = f"执行出错:\n{str(e)}\n\n{traceback.format_exc()}"
        return output_buffer.getvalue(), error_msg, {}, [], []
        
    finally:
        # 恢复标准输出和工作目录
        sys.stdout, sys.stderr = old_stdout, old_stderr
        os.chdir(original_cwd)

执行流程图:

3.5 AI智学助手

内置智能问答系统,能够回答数据科学相关问题。

def ai_response(question, language='zh'):
    """AI助手响应函数,基于关键词匹配"""
    q = question.lower()
    
    # 数据挖掘相关问题
    if any(k in q for k in ['数据挖掘', 'data mining', '什么是数据挖掘']):
        return """📊 **数据挖掘详解**

数据挖掘是从大量数据中提取隐含的、未知的、潜在有用信息和知识的过程。

**核心任务**:分类、回归、聚类、关联规则、异常检测

**经典流程**:业务理解→数据理解→数据准备→建模→评估→部署"""
    
    # Python相关问题
    elif any(k in q for k in ['python', '编程', '代码']):
        if any(k in q for k in ['循环', 'for', 'while']):
            return """🔄 **Python 循环语句**

```python
for i in range(5):
    print(i)

while count < 5:
    print(count)
    count += 1
```"""
    
    # 机器学习相关问题
    elif any(k in q for k in ['机器学习', 'machine learning']):
        if any(k in q for k in ['聚类', 'kmeans']):
            return """🎯 **K-Means聚类**

```python
from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3)
labels = kmeans.fit_predict(X)
```"""
    
    # Pandas相关问题
    elif any(k in q for k in ['pandas', 'csv', 'excel']):
        return """📊 **Pandas**

```python
import pandas as pd

df = pd.read_csv('file.csv')
df.head(), df.info()
df[df['age'] > 18]
df.groupby('category').mean()
```"""
    
    # Matplotlib相关问题
    elif any(k in q for k in ['matplotlib', '绘图', '散点图']):
        return """📈 **Matplotlib**

```python
import matplotlib.pyplot as plt

plt.scatter(x, y)
plt.plot(x, y)
plt.bar(categories, values)
plt.show()
```"""
    
    # 默认响应
    else:
        return f"""💡 关于「{question[:50]}...」

我擅长回答:数据挖掘、Python、机器学习、数据可视化、数据清洗等问题。"""

3.6 批量运行功能

支持同时运行多个实验,适合对比分析。

# 批量运行核心代码
with batch_tab:
    # 多选实验
    selected_batch = st.multiselect(
        get_text('select_multiple'), 
        all_exps, 
        default=all_exps[:3]
    )
    
    if st.button("🚀 批量运行"):
        results = {}
        progress_bar = st.progress(0)      # 进度条
        status_text = st.empty()            # 状态文本
        
        for i, exp_name in enumerate(selected_batch):
            status_text.text(f"正在运行: {exp_name}")
            
            # 获取实验代码
            exp_file = current_config["files"][exp_name]
            exp_code, exp_path = read_file_content(exp_file, folder_hint)
            
            # 执行代码
            output, error, variables, images, figures = execute_python_code(
                exp_code, exp_path, exp_dir, exp_name
            )
            
            # 存储结果
            results[exp_name] = {
                'success': error is None,
                'output': output[:500],
                'variables': list(variables.keys()),
                'has_charts': len(images) + len(figures) > 0
            }
            
            # 更新进度
            progress_bar.progress((i + 1) / len(selected_batch))
        
        st.session_state.batch_results = results

3.7 结果对比功能

对比不同实验生成的变量,帮助理解算法差异。

# 结果对比核心代码
with compare_tab:
    # 选择要对比的实验
    exps_to_compare = st.multiselect(
        "选择要对比的实验 (最多4个)", 
        all_exps, 
        max_selections=4
    )
    
    if exps_to_compare and st.button("开始对比"):
        compare_results = {}
        
        for exp_name in exps_to_compare:
            # 执行实验代码
            # ... 执行逻辑 ...
            compare_results[exp_name] = {
                'success': error is None,
                'variables': variables,
                'has_charts': has_charts
            }
        
        # 提取所有变量名
        all_vars = set()
        for data in compare_results.values():
            if data['success']:
                all_vars.update(data['variables'].keys())
        
        # 并排对比显示
        for var_name in sorted(all_vars):
            cols = st.columns(len(compare_results))
            for col, (exp_name, data) in zip(cols, compare_results.items()):
                with col:
                    st.markdown(f"**{exp_name}**")
                    var_value = data['variables'].get(var_name)
                    # 根据类型显示变量内容
                    if isinstance(var_value, pd.DataFrame):
                        st.dataframe(var_value.head(5))
                    elif isinstance(var_value, np.ndarray):
                        st.write(f"形状: {var_value.shape}")

四、界面设计

4.1 CSS样式设计

系统采用了粉色主题和玻璃态卡片效果:

st.markdown("""
<style>
    /* 粉色渐变背景 */
    .stApp {
        background: linear-gradient(135deg, #ffe4ec 0%, #ffd0dd 30%, #ffb8cc 70%, #ffa3bd 100%);
        background-attachment: fixed;
    }
    
    /* 玻璃卡片效果 */
    .glass-card {
        background: rgba(255, 245, 248, 0.92);
        backdrop-filter: blur(15px);
        border-radius: 28px;
        padding: 28px;
        margin: 20px 0;
        border: 1px solid rgba(255, 200, 213, 0.8);
        box-shadow: 0 8px 32px rgba(255, 105, 140, 0.2);
        transition: all 0.3s ease;
    }
    
    .glass-card:hover {
        transform: translateY(-3px);
        box-shadow: 0 12px 40px rgba(255, 105, 140, 0.3);
    }
    
    /* 按钮粉色主题 */
    .stButton > button {
        background: linear-gradient(135deg, #f5a0b8, #ff7b9e);
        color: white !important;
        border-radius: 50px;
        padding: 10px 24px;
        font-weight: 600;
        border: none;
    }
    
    /* 输出框样式 */
    .output-box {
        background: rgba(50, 30, 40, 0.95);
        border-left: 4px solid #ff7b9e;
        padding: 20px;
        border-radius: 16px;
        font-family: monospace;
        color: #ffc0d0;
    }
    
    /* 动画效果 */
    @keyframes float {
        0%, 100% { transform: translateY(0px) rotate(0deg); }
        50% { transform: translateY(-20px) rotate(10deg); }
    }
</style>
""", unsafe_allow_html=True)

4.2 页面布局

# 页面配置
st.set_page_config(
    page_title="数据挖掘综合实验平台 | 李金灵", 
    layout='wide', 
    page_icon="🌸"
)

# 主标签页布局
main_tab, ai_tab, batch_tab, compare_tab = st.tabs([
    "🚀 运行实验",      # Tab 0: 代码运行
    "🤖 AI 智学助手",   # Tab 1: AI问答
    "🔄 批量运行",      # Tab 2: 批量执行
    "📊 结果对比"       # Tab 3: 结果对比
])

五、使用说明

5.1 启动方式

# 在终端中运行
streamlit run xxx.py

5.2 操作流程

  1. 选择语言:在左侧边栏点击对应语言的按钮

  2. 选择章节:从下拉菜单中选择要学习的章节

  3. 选择实验:从下拉菜单中选择具体的实验项目

  4. 运行代码:点击"运行代码"按钮查看执行结果

  5. 查看结果:系统自动显示输出、变量和图表

5.3 功能入口说明

入口位置 功能 说明
侧边栏 语言切换 6种语言即时切换
主界面 章节/实验选择 8大章节50+实验
Tab 0 运行实验 执行代码、查看结果
Tab 1 AI助手 智能问答
Tab 2 批量运行 多实验同时执行
Tab 3 结果对比 实验结果并排对比

六、功能截图

6.2 多语言切换截图

6.3 代码运行结果截图

6.4 AI智学助手截图

6.5 批量运行截图

6.6 结果对比截图

6.7 功能实现视频

1-8章数据挖掘分析第二版


七、总结

本系统实现了以下核心功能:

  1. 实验代码管理:支持8大章节50+实验脚本的组织和管理

  2. 代码安全执行:隔离执行环境,捕获输出、变量和图表

  3. 多语言国际化:6种语言界面动态切换

  4. AI智能问答:内置数据科学知识库,提供学习辅助

  5. 批量运行:支持多实验并行执行,提高效率

  6. 结果对比:实验结果并排对比,便于分析理解

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐