大模型应用班-第3课 从Excel到大屏:AI编程实战全解析 HW3 从零到一:香港疫情数据看板开发实战指南

这次开发疫情看板的经历确实很有意思,从最初的Excel数据读取问题,到最后成功实现带有真实香港地图的交互式看板,整个过程充满了挑战和收获:

完整代码资源如下:

根据excel 制作看板,并且生成地图数据https://download.youkuaiyun.com/download/chenchihwen/91525121

🎯 项目亮点回顾:

✅ 成功解决了依赖安装和中文字体显示问题
✅ 从matplotlib转向ECharts,实现了更好的Web体验
✅ 获取到了真实的香港18区GeoJSON地图数据
✅ 创建了多个版本(Flask动态版、静态版、简化版)
✅ 提供了完整的测试和启动脚本
✅ 写出了详细的开发指南文档
🚀 技术栈最终方案:

前端:HTML5 + CSS3 + JavaScript + ECharts
数据:真实的香港疫情Excel数据 + GeoJSON地图
部署:静态文件,即开即用
📊 看板功能:

疫情数据概览卡片
趋势图表分析
真实香港地图可视化
各区排名对比
风险等级分布
多维度雷达图
这个项目很好地展示了如何从简单需求出发,通过不断迭代和问题解决,最终构建出一个功能完整、用户体验良好的数据可视化应用。希望这份开发指南能帮助到更多的开发者!

从零到一:香港疫情数据看板开发实战指南

项目背景与目标

在这个项目中,我们从一个简单的Excel数据读取需求开始,最终构建了一个功能完整的疫情数据可视化看板。整个开发过程充满了挑战和学习,让我深刻体会到了数据可视化项目的复杂性和解决问题的重要性。

开发历程回顾

第一阶段:数据探索与基础分析

起点: 用户提供了一个Excel文件 香港各区疫情数据_20250322.xlsx,包含香港18个区域从2022年1月到6月的疫情数据。

遇到的第一个问题: 缺少 openpyxl 依赖库

# 错误信息
Missing optional dependency 'openpyxl'. Use pip or conda to install openpyxl.

解决方案: 创建了多个版本的脚本来适应不同环境:

  • read_excel.py - 基础数据读取

  • simple_covid_analysis.py - 纯文本分析版本

  • install_requirements.py - 自动安装依赖

经验教训:

  1. 环境依赖是项目启动的第一道门槛

  2. 提供多种备选方案能提高项目的兼容性

  3. 清晰的错误提示和解决方案很重要

第二阶段:图表可视化尝试

目标: 制作确诊人数与报告日期的推移图

技术选择: 最初选择了 matplotlib + seaborn

import matplotlib.pyplot as plt
import seaborn as sns

遇到的问题:

  1. 中文字体显示问题 - 图表中中文显示为方框

  2. 依赖安装困难 - pandas编译失败,matplotlib缺失

  3. 图表样式单调 - 默认样式不够美观

解决过程:

  1. 创建了 fix_chinese_font.py 来检测和设置中文字体

  2. 提供了英文版本 covid_chart_english.py 作为备选

  3. 最终决定转向Web技术栈

关键决策点: 从桌面应用转向Web应用

  • 更好的跨平台兼容性

  • 更丰富的交互体验

  • 更容易部署和分享

第三阶段:Web看板架构设计

技术栈选择:

  • 前端: HTML5 + CSS3 + JavaScript + ECharts

  • 后端: Flask (可选)

  • 数据处理: Pandas

架构设计思路:

数据层 (Excel) → 处理层 (Python/Pandas) → 展示层 (Web/ECharts)

创建的核心文件:

  1. app.py - Flask后端API

  2. templates/dashboard.html - 动态版本前端

  3. static_dashboard.html - 静态版本前端

设计亮点:

  • 响应式布局适配不同屏幕

  • 毛玻璃效果增强视觉层次

  • 深色主题提升科技感

  • 多图表联动展示

第四阶段:地图可视化的挑战

最大挑战: 实现香港地图的准确显示

问题演进:

  1. 第一次尝试 - 手工绘制简化地图坐标

    // 结果:显示为不规则方块,完全不像香港
  2. 第二次尝试 - 使用散点图模拟地图

    // 结果:能显示位置关系,但缺乏地理真实感
  3. 第三次尝试 - 获取真实GeoJSON数据

    # 创建 get_hongkong_map.py 自动获取地图数据

突破性进展: 成功从阿里云DataV获取了真实的香港18区GeoJSON数据:

url = "https://geo.datav.aliyun.com/areas_v3/bound/810000_full.json"

技术实现:

// 注册真实地图数据
echarts.registerMap('hongkong', mapData);
​
// 创建地图可视化
series: [{
    name: '疫情数据',
    type: 'map',
    geoIndex: 0,
    data: covidData
}]

第五阶段:用户体验优化

多版本策略:

  1. Flask动态版本 - 实时数据更新

  2. 静态HTML版本 - 无需后端,即开即用

  3. 简化地图版本 - 降级方案

启动脚本优化:

# start_static_dashboard.py
- 自动检测可用文件
- 自动打开浏览器
- 提供多个访问地址

测试验证:

# test_map.py
- 验证地图数据完整性
- 检查文件可用性
- 提供启动指导

核心技术难点与解决方案

1. 依赖管理问题

问题: 不同环境下依赖安装失败 解决:

  • 提供requirements.txt

  • 创建自动安装脚本

  • 提供无依赖的静态版本

2. 中文字体显示

问题: 图表中文显示为方框 解决:

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'SimHei']
plt.rcParams['axes.unicode_minus'] = False

3. 地图数据获取

问题: 缺乏准确的香港地图数据 解决:

  • 多数据源尝试

  • 自动验证数据质量

  • 提供降级方案

4. 跨平台兼容性

问题: Windows/Mac/Linux环境差异 解决:

  • Web技术栈天然跨平台

  • 静态文件部署简单

  • 浏览器兼容性测试

项目架构最佳实践

1. 渐进式开发

简单脚本 → 图表生成 → Web界面 → 交互地图 → 完整看板

2. 多版本并存

  • 开发版本(功能完整)

  • 生产版本(稳定可靠)

  • 演示版本(快速启动)

3. 错误处理策略

try {
    // 尝试加载真实地图
    const mapData = await fetch('hongkong_map.json');
} catch (error) {
    // 降级到简化版本
    createFallbackMap();
}

4. 用户体验设计

  • 加载状态提示

  • 错误信息友好

  • 多种启动方式

  • 详细使用文档

数据可视化设计原则

1. 信息层次清晰

概览卡片 → 趋势图表 → 地图分布 → 详细对比

2. 交互设计合理

  • 地图缩放漫游

  • 悬停显示详情

  • 响应式布局

  • 颜色编码直观

3. 视觉效果统一

  • 一致的配色方案

  • 统一的字体规范

  • 协调的动画效果

  • 清晰的数据标签

开发工具与资源推荐

1. 数据处理

  • Pandas - 数据清洗和分析

  • OpenPyXL - Excel文件读取

  • Requests - 网络数据获取

2. 可视化库

  • ECharts - 功能强大的图表库

  • D3.js - 高度定制化选择

  • Chart.js - 轻量级方案

3. 地图数据源

  • 阿里云DataV GeoAtlas

  • GitHub开源地图数据

  • 官方统计局数据

4. 开发工具

  • VS Code + Live Server

  • Chrome DevTools

  • Postman (API测试)

性能优化经验

1. 数据加载优化

// 异步加载地图数据
async function loadHongKongMap() {
    // 避免阻塞页面渲染
}

2. 图表渲染优化

// 响应式图表大小调整
window.addEventListener('resize', () => {
    mapChart.resize();
});

3. 缓存策略

  • 地图数据本地缓存

  • 静态资源CDN加速

  • 浏览器缓存利用

部署与维护建议

1. 部署方案

  • 静态部署 - GitHub Pages, Netlify

  • 动态部署 - Heroku, 云服务器

  • 本地部署 - Python HTTP服务器

2. 监控与维护

  • 数据源可用性监控

  • 用户访问统计

  • 错误日志收集

  • 定期数据更新

3. 扩展性考虑

  • 模块化代码结构

  • 配置文件外置

  • API接口标准化

  • 多语言支持预留

项目总结与反思

成功要素

  1. 问题导向 - 每个功能都解决实际需求

  2. 迭代开发 - 快速试错,持续改进

  3. 用户体验 - 始终考虑最终用户的使用场景

  4. 技术选型 - 选择合适而非最新的技术

经验教训

  1. 环境兼容性 比想象中更重要

  2. 数据质量 直接影响可视化效果

  3. 降级方案 是项目成功的保障

  4. 文档完善 能大大提升项目价值

未来改进方向

  1. 实时数据更新机制

  2. 更多图表类型支持

  3. 移动端优化

  4. 数据导出功能

  5. 用户自定义配置

给开发者的建议

1. 技术选择

  • 优先考虑稳定性和兼容性

  • 选择有良好社区支持的技术

  • 保持技术栈的简洁性

2. 开发流程

  • 从最小可行产品开始

  • 频繁测试和用户反馈

  • 保持代码的可读性和可维护性

3. 问题解决

  • 遇到问题时多尝试不同方案

  • 善用开源社区和文档资源

  • 记录解决过程便于后续参考

4. 项目管理

  • 设定清晰的里程碑

  • 保持功能范围的控制

  • 重视用户体验和反馈

结语

这个项目从一个简单的数据读取需求,发展成为一个功能完整的数据可视化看板,整个过程充满了挑战和收获。希望这些经验能够帮助其他开发者在类似项目中少走弯路,更快地实现目标。

记住:好的数据可视化不仅仅是技术的展示,更是对用户需求的深刻理解和贴心服务。


本指南基于实际开发经验总结,如有疑问或建议,欢迎交流讨论。

代码资源与开发过程记录在后面 最后实现了 疫情看板,如下

🏥 香港疫情数据看板使用说明

📋 功能特色

🗺️ 香港地图可视化

  • 交互式地图: 显示香港18个区的疫情分布

  • 颜色编码: 根据累计确诊人数进行颜色深浅区分

  • 悬停提示: 鼠标悬停显示详细疫情数据

  • 缩放漫游: 支持地图缩放和拖拽操作

📊 多维度数据展示

  1. 概览卡片: 累计确诊、现存确诊、累计康复、累计死亡、新增确诊

  2. 趋势图表: 最近30天的疫情发展趋势

  3. 风险分布: 各区风险等级饼图

  4. 排名对比: 各区累计确诊和发病率排名

  5. 雷达图: 多指标综合对比分析

🚀 启动方式

方式1: 静态版本 (推荐)

python start_static_dashboard.py

方式2: Flask动态版本

python run_dashboard.py

方式3: 直接打开HTML文件

双击 static_dashboard.html 文件,用浏览器打开

🗺️ 地图功能详解

地图交互

  • 缩放: 鼠标滚轮或双击缩放

  • 拖拽: 按住鼠标左键拖拽地图

  • 悬停: 鼠标悬停查看区域详情

  • 点击: 点击区域高亮显示

数据显示

  • 颜色深浅: 代表累计确诊人数多少

  • 详细信息: 包含累计确诊、现存确诊、发病率、风险等级

  • 实时更新: 数据每30秒自动刷新

视觉映射

  • 🟦 蓝色系: 确诊人数较少的地区

  • 🟨 黄色系: 确诊人数中等的地区

  • 🟥 红色系: 确诊人数较多的地区

📈 图表说明

1. 疫情趋势图

  • 柱状图: 每日新增确诊

  • 折线图: 现存确诊变化

  • 时间范围: 最近30天数据

2. 香港地图

  • 热力图: 各区累计确诊分布

  • 交互式: 支持缩放、拖拽、悬停

  • 详细信息: 多维度数据展示

3. 风险等级分布

  • 饼图: 低风险、中风险、高风险占比

  • 颜色编码: 绿色(低)、黄色(中)、红色(高)

4. 各区排名

  • 横向柱状图: 累计确诊人数排名

  • 发病率排名: 每10万人确诊率对比

5. 雷达图对比

  • 多维指标: 累计确诊、现存确诊、发病率、风险指数

  • 区域对比: 前6个重点地区综合对比

🎨 界面特色

设计风格

  • 深色主题: 科技感十足的深蓝色渐变背景

  • 毛玻璃效果: 半透明面板增强视觉层次

  • 响应式布局: 适配不同屏幕尺寸

  • 动画效果: 卡片悬停和数据加载动画

颜色系统

  • 🔴 累计确诊: 红色 (#ff6b6b)

  • 🟠 现存确诊: 橙色 (#ffa726)

  • 🟢 累计康复: 绿色 (#66bb6a)

  • 🔴 累计死亡: 深红 (#ef5350)

  • 🔵 新增确诊: 蓝色 (#42a5f5)

📱 移动端适配

响应式特性

  • 自适应布局: 根据屏幕大小调整图表排列

  • 触摸优化: 支持移动设备的触摸操作

  • 字体缩放: 小屏幕下自动调整字体大小

🔧 技术架构

前端技术

  • ECharts 5.4.3: 图表渲染引擎

  • 原生JavaScript: 数据处理和交互

  • CSS3: 现代化样式和动画

  • HTML5: 语义化结构

后端技术 (Flask版本)

  • Flask: Web框架

  • Pandas: 数据处理

  • OpenPyXL: Excel文件读取

🚨 故障排除

常见问题

  1. 地图不显示: 检查网络连接,确保ECharts CDN可访问

  2. 中文乱码: 确保浏览器编码设置为UTF-8

  3. 数据不更新: 检查Excel数据文件是否存在

  4. 图表变形: 调整浏览器窗口大小或刷新页面

浏览器兼容

  • ✅ Chrome 60+

  • ✅ Firefox 55+

  • ✅ Safari 12+

  • ✅ Edge 79+

📊 数据说明

数据来源

  • 文件名: 香港各区疫情数据_20250322.xlsx

  • 数据范围: 2022-01-01 至 2022-06-29

  • 覆盖地区: 香港18个行政区

数据字段

  • 报告日期: 疫情统计日期

  • 地区名称: 香港各行政区

  • 累计确诊: 总确诊病例数

  • 现存确诊: 当前治疗中病例

  • 发病率: 每10万人确诊率

  • 风险等级: 低/中/高风险分级

🎯 使用建议

最佳实践

  1. 全屏浏览: 建议使用全屏模式获得最佳体验

  2. 定期刷新: 数据会自动更新,也可手动刷新

  3. 交互探索: 充分利用地图的交互功能

  4. 多角度分析: 结合多个图表进行综合分析

分析要点

  • 关注地图上的热点区域

  • 对比不同地区的发病率

  • 观察疫情发展趋势

  • 分析风险等级分布


🎉 享受数据可视化带来的洞察力!

基于Cursor和Trae的AI编程实践:从Excel处理到疫情大屏开发

一、AI编程工具概述

1.1 Cursor编辑器简介

Cursor是一款基于VSCode开发的AI代码编辑器,提供智能代码补全、代码生成、代码修改、代码搜索和代码解释等功能。与其他工具不同,Cursor将AI辅助编码直接融入到编辑器的核心功能中,能够理解整个工程的代码,同时修改多个文件。

1.2 Trae编辑器简介

Trae是字节推出的一款AI驱动的集成开发环境,其亮点在于Builder模式,能够自主拆解需求并自动完成多轮编码任务,从想法描述到功能实现一气呵成。Trae还支持多模态开发,可以理解上传的图像内容并生成相关代码。

二、Cursor核心功能详解

2.1 Cursor Rules规则系统

Cursor Rules帮助定制AI行为,使其符合用户的编码风格和项目需求:

  • 全局规则​:在Cursor设置的"通用">"AI规则"中配置,适用于所有项目
  • 项目规则​:存储在.cursor/rules目录中的项目特定规则,优先级高于全局规则
# 示例项目规则
# 文件模式:*.tsx,*.ts
## React规范
- 使用函数组件
- 实现完整的prop类型
- 遵循React最佳实践

2.2 主要功能对比

功能快捷键描述
Composer/AgentCmd+L同时编辑多个文件,生成完整应用程序
聊天功能Cmd+L针对宽泛代码问题进行多轮对话
提示框功能Cmd+K生成或修改局部代码

三、实战案例:Excel报表处理

3.1 需求分析

合并两张Excel表格:

  • 员工基本信息表(员工ID、姓名、性别、部门、入职日期)
  • 员工绩效表(员工ID、年度、季度、绩效评分)

3.2 实现步骤

  1. 读取Excel字段​:使用pandas库读取并展示两张表的字段结构
  2. 数据合并​:基于员工ID合并两张表,添加2024年第4季度的绩效评分
import pandas as pd

# 读取员工基本信息表
basic_info = pd.read_excel("员工基本信息表.xlsx")
# 读取员工绩效表
performance = pd.read_excel("员工绩效表.xlsx")

# 筛选2024年第4季度绩效数据
q4_performance = performance[(performance['年度'] == 2024) & (performance['季度'] == 4)]

# 合并数据
merged_data = pd.merge(basic_info, q4_performance[['员工ID', '绩效评分']], on='员工ID', how='left')

四、实战案例:疫情实时监控大屏

4.1 数据准备

使用香港各区疫情数据,包含以下字段:

  • 报告日期、地区名称
  • 新增确诊、累计确诊、现存确诊
  • 新增康复、累计康复
  • 新增死亡、累计死亡
  • 发病率、人口、风险等级

4.2 大屏设计方案

4.2.1 总体布局
graph TD
    A[顶部标题栏] --> B[核心指标展示]
    A --> C[中心区域]
    C --> D[地理分布图]
    C --> E[每日新增与累计确诊]
    A --> F[两侧辅助区域]
    F --> G[各区域疫情对比]
    F --> H[风险预警看板]
    A --> I[底部趋势区]

 

4.2.2 关键技术实现
  1. Flask后端​:数据接口提供
  2. ECharts前端​:可视化展示
  3. 香港地图GeoJSON​:地理分布展示
# Flask数据接口示例
@app.route('/api/daily_cases')
def get_daily_cases():
    # 处理数据逻辑
    return jsonify(result)

4.3 地图优化技巧

  1. 获取高精度GeoJSON​:使用阿里云DataV.GeoAtlas获取香港地图数据
  2. 样式调整​:
    • 设置合理的aspectScale调整长宽比
    • 使用渐变颜色增强视觉效果
    • 添加边界和标签提高可读性
// ECharts地图配置示例
option = {
    backgroundColor: '#404a59',
    visualMap: {
        min: 0,
        max: 100,
        text: ['高', '低'],
        inRange: {
            color: ['#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695']
        }
    }
}

e

五、Trae编辑器实战应用

5.1 Builder模式实战

Trae的Builder模式能够自动拆解复杂需求,例如:

  1. 输入:"创建一个Flask疫情大屏"
  2. Trae自动生成:
    • 项目结构
    • 后端API代码
    • 前端可视化代码
    • 部署配置

5.2 多模态开发示例

上传设计稿图片,Trae能够:

  1. 识别布局结构
  2. 提取配色方案
  3. 生成对应的HTML/CSS代码

六、总结与对比

特性CursorTrae
核心优势多文件协同编辑需求自动拆解
最佳场景代码重构/维护从零开始项目
规则系统支持精细定制相对简单
多模态支持有限强大
学习曲线中等较低

在实际开发中,可以根据项目需求灵活选择:

  • 复杂项目维护​:Cursor更合适
  • 快速原型开发​:Trae效率更高

AI编程工具正在深刻改变开发工作流程,掌握这些工具将显著提升开发效率和质量。建议读者结合实际项目进行练习,逐步掌握这些工具的高级用法。

使用 Kiro 开发实际记录

1. 修改rule

2.  逐步发布命令

2.1 命令1》读取 香港各区疫情数据_20250322.xlsx 前30行数据

2.2 命令2》根据输出的数据,我来详细解释香港各区疫情数据中每个列名字段的意义

让LLM 理解字段意义,kiro 的了解还是不错的

22.3

2.3 制作图表 牛刀小试 

 制作 确诊人数与报告日期的推移图 

kiro ( claude 4.0 很聪明 知道 缺少 matplotlib 库,再修改代码...)

 

 Kiro 写了一个 安装的python , 使用 sys.executabel , 方法很漂亮!

def install_package(package):
    """安装Python包"""
    try:
        subprocess.check_call([sys.executable, "-m", "pip", "install", package])
        print(f"✅ 成功安装 {package}")
        return True
    except subprocess.CalledProcessError:
        print(f"❌ 安装 {package} 失败")
        return False

def main():
    """安装所需的依赖包"""
    required_packages = [
        'openpyxl',      # Excel文件读取
        'matplotlib',    # 图表绘制
        'seaborn'        # 高级图表样式
    ]
    
    print("=== 安装疫情数据分析所需依赖 ===\n")
    
    success_count = 0
    for package in required_packages:
        print(f"正在安装 {package}...")
        if install_package(package):
            success_count += 1
        print()

 

绘图结果很不错

 

 他把 区域的确诊情况也汇报了

 2.4 使用 flask, echart 制作疫情看板大屏

厉害,一次就成功!

Flask 简介

Flask 是一个轻量级的 Python Web 框架,基于 Werkzeug WSGI 工具箱和 Jinja2 模板引擎。它以简洁、灵活著称,适合快速开发小型到中型 Web 应用或微服务。Flask 遵循“微框架”设计哲学,核心功能精简,但可通过扩展支持更多功能(如数据库、表单验证等)。

核心特性
  • 轻量级:核心代码简洁,依赖较少,易于学习和部署。
  • 模块化设计:通过扩展(如 Flask-SQLAlchemy、Flask-Login)灵活添加功能。
  • 内置开发服务器:支持快速调试和测试。
  • Jinja2 模板引擎:提供强大的 HTML 渲染能力。
  • RESTful 支持:天然适配 API 开发。
基本代码示例

以下是一个简单的 Flask 应用:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, World!"

if __name__ == '__main__':
    app.run(debug=True)
ECharts 概述

ECharts 是一个由百度开源的数据可视化库,基于 JavaScript 实现,提供丰富的图表类型和交互功能。它支持多种数据格式,兼容主流浏览器,适用于构建动态、响应式的数据可视化应用。

核心特性
  • 丰富的图表类型:支持折线图、柱状图、饼图、散点图、雷达图、热力图、地图等数十种图表。
  • 高度定制化:可通过配置项调整颜色、动画、坐标轴等细节,满足个性化需求。
  • 交互功能:支持缩放、拖拽、数据筛选、动态更新等交互操作。
  • 跨平台兼容:兼容 PC 端和移动端,适配不同屏幕尺寸。
  • 数据驱动:数据变化时自动更新图表,支持大规模数据渲染。
基本使用示例

以下是一个简单的 ECharts 折线图代码示例:

// 初始化图表实例  
var myChart = echarts.init(document.getElementById('chart-container'));  

// 配置数据与样式  
var option = {  
    title: { text: '折线图示例' },  
    tooltip: {},  
    xAxis: { data: ['周一', '周二', '周三', '周四', '周五'] },  
    yAxis: {},  
    series: [{  
        name: '销量',  
        type: 'line',  
        data: [150, 230, 224, 218, 135]  
    }]  
};  

// 渲染图表  
myChart.setOption(option);  
 2.5 在大屏中 以香港地图形式 显示各区的情况

Kiro 知道要添加香港的 GeoJson, 这个技能很厉害了!

 

第一次的效果不是很理想,地图不完整

要求kiro 获取正确的 地图json

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值