# data_extraction **Repository Path**: luyi1678/data_extraction ## Basic Information - **Project Name**: data_extraction - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: 2026-03-13-a6qq - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-05 - **Last Updated**: 2026-04-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 尺寸测量数据分析平台 从Excel表格中提取尺寸测量数据,按时间序列组织,实现时间序列图、控制图可视化,支持按日期/尺寸/模穴筛选,并提供聚类分析功能。 ## 环境要求 - Python 3.14+ - uv (包管理器) ## 安装 ### 1. 安装 uv ```bash # Windows (PowerShell) powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # Linux/macOS curl -LsSf https://astral.sh/uv/install.sh | sh ``` ### 2. 创建虚拟环境并安装依赖 ```bash uv venv uv pip install -r requirements.txt ``` ## 使用方法 ### 方法1:使用批处理文件(推荐) ```bash # 解析Excel数据 parse_data.bat # 启动可视化应用 start_app.bat ``` ### 方法2:使用命令行 ```bash # 设置环境变量 set PYTHONPATH=D:\code\data_extraction\src # 解析Excel数据 .venv\Scripts\python.exe run_parser.py # 启动可视化应用 .venv\Scripts\streamlit.exe run index.py ``` ### 方法3:使用-m参数 ```bash # 解析Excel数据 .venv\Scripts\python.exe run_parser.py # 启动可视化应用 .venv\Scripts\python.exe -m streamlit run index.py ``` 访问 http://localhost:8501 查看可视化界面。 解析后的数据将保存在: - `data/processed/reports.json` - 原始报告格式 - `data/processed/long_format.json` - 长格式数据(适合分析) ## 项目结构 ``` data_extraction/ ├── data/ │ ├── raw/ # 原始Excel文件 │ ├── processed/ # 处理后的JSON数据 │ └── cache/ # 缓存数据 ├── src/ │ ├── models.py # 数据模型定义 │ ├── parser.py # Excel解析器 │ ├── visualizer.py # 可视化模块 │ ├── app.py # Streamlit应用 │ ├── data_preview.py # 数据预览页面 │ ├── upload.py # Excel上传页面 │ ├── cluster.py # 聚类分析模块 │ └── database.py # 数据库模块 ├── logs/ # 开发日志 ├── tests/ # 测试文件 ├── requirements.txt # 依赖列表 ├── run_parser.py # 数据解析入口 ├── index.py # 主入口文件 └── README.md ``` ## 功能特性 ### 1. 数据提取 - 自动识别Excel中的所有工作表 - 从工作表名称提取日期信息 - 解析尺寸信息(编号、特征、名义值、公差) - 提取8个模穴的测量数据 ### 2. 可视化分析 - **时间序列图**:展示测量值随时间的变化趋势 - **控制图**:显示过程控制限(UCL/LCL)和过程能力指标(Cp/Cpk) - **模穴对比图**:箱线图展示各模穴的偏差分布 ### 3. 交互功能 - 按日期范围筛选 - 按尺寸编号筛选 - 按模穴筛选 - 按特征类型筛选 ### 4. 统计分析 - 合格率统计 - 数据概览(总记录数、合格数、尺寸种类数) - 原始数据表格查看 ## 数据模型 ### 尺寸测量记录 | 字段 | 说明 | |------|------| | date | 测试日期 | | place_id | 尺寸编号 | | feature | 特征类型(如:直径) | | cavity_id | 模穴编号(A1-A4, #5-#8)| | value | 测量值 | | nominal | 名义值 | | tol_upper | 上限公差 | | tol_lower | 下限公差 | | deviation | 偏差值 | | is_within_tolerance | 是否合格 | ## API(FastAPI) 项目内置了一个简单的 REST API,基于 FastAPI 实现,便于其它系统访问和管理数据。 - 启动命令(在虚拟环境中): ```bash python -m uvicorn src.api:app --reload --port 8000 ``` - 交互式文档: - Swagger UI: `http://localhost:8000/docs` - ReDoc: `http://localhost:8000/redoc` - 主要路由示例: - `GET /health`:健康检查 - `GET /parts`:获取所有零件编号 - `GET /parts/{part_number}/dates`:获取指定零件的所有日期 - `GET /parts/{part_number}/records`:按条件查询测量记录 - `GET /records/{record_id}`:按 ID 获取单条记录 - `POST /records`:新增测量记录(需要认证) - `PUT /records/{record_id}`:更新单条记录(需要认证) - `DELETE /records/{record_id}`:删除单条记录(需要认证) - `DELETE /parts/{part_number}/dates/{date}`:删除某零件某天的所有记录(需要认证) - `POST /upload-excel`:上传并解析 Excel 文件(需要认证) - 认证方式(写接口): - 在请求头中携带 `X-API-Key: <你的 Token>`(当前为固定 Token,后续可扩展为 JWT) ## Docker(推荐:局域网内给其它电脑使用) 本项目提供 `Dockerfile` + `docker-compose.yml`,可以一键同时启动: - Streamlit 网页(8501) - FastAPI 接口(8000) ### 1) 构建并启动 在项目根目录执行: ```bash docker compose up -d --build ``` ### 2) 访问地址 - 网页(Streamlit):`http://localhost:8501` - API 文档(Swagger):`http://localhost:8000/docs` 其它电脑访问时,把 `localhost` 换成这台机器的局域网 IP(例如 `http://192.168.1.10:8501`)。 ### 3) 数据持久化(重要) `docker-compose.yml` 已将宿主机的 `./data` 挂载到容器 `/app/data`: - 数据库:`data/measurement_data.db` - 上传文件:`data/uploads/` - 别名配置:`data/place_aliases.json` 因此容器重启/升级不会丢数据。 ### 4) 配置 API Token 在 `docker-compose.yml` 的 `api` 服务中设置环境变量: - `API_TOKEN=CHANGE_ME_TOKEN` 调用写接口时携带请求头: - `X-API-Key: ` ## 开发日志 详细的开发过程和经验教训请查看 `logs/development_notes.md` ## 注意事项 1. Excel文件需放在项目根目录或 `data/raw/` 目录下 2. 工作表名称需包含8位日期(如:尺寸报告20260301) 3. 表头需包含 `# Places` 字段用于识别数据起始位置 4. 模穴数据需在固定的列位置(列9-16) ## 技术栈 - **数据解析**:pandas + openpyxl - **可视化**:plotly - **Web框架**:streamlit - **统计计算**:scipy + numpy - **机器学习**:scikit-learn(聚类功能) - **包管理**:uv