跳转至

第10章 数据可视化

数据可视化

📚 章节概述

本章将深入讲解数据可视化,包括Tableau、Looker、Superset等。通过本章学习,你将能够创建高质量的数据可视化。

🎯 学习目标

完成本章后,你将能够:

  1. 理解数据可视化的核心概念
  2. 掌握Tableau的使用
  3. 了解Looker和Superset
  4. 掌握数据可视化设计原则
  5. 能够创建生产级的数据可视化

10.1 数据可视化概述

10.1.1 什么是数据可视化

数据可视化是将数据转换为图形表示,帮助人们理解数据的技术。

数据可视化价值

  1. 快速理解
  2. 直观展示数据
  3. 快速发现模式
  4. 便于决策

  5. 洞察发现

  6. 发现隐藏模式
  7. 识别异常值
  8. 理解数据关系

  9. 沟通有效

  10. 简化复杂信息
  11. 讲故事能力强
  12. 提高说服力

10.1.2 数据可视化类型

  1. 比较类
  2. 柱状图
  3. 条形图
  4. 饼图

  5. 趋势类

  6. 折线图
  7. 面积图
  8. 散点图

  9. 分布类

  10. 直方图
  11. 箱线图
  12. 热力图

  13. 关系类

  14. 散点图
  15. 气泡图
  16. 树状图

10.2 Tableau

10.2.1 Tableau概述

Tableau是强大的数据可视化工具,支持多种数据源和图表类型。

核心特性

  1. 拖拽式操作
  2. 简单易用
  3. 无需编程
  4. 快速创建

  5. 丰富图表

  6. 50+图表类型
  7. 自定义图表
  8. 交互式仪表板

  9. 数据连接

  10. 多种数据源
  11. 实时数据
  12. 大数据支持

10.2.2 Tableau使用

Python
import tableauserverclient as TSC

# 连接到 Tableau Server
tableau_auth = TSC.TableauAuth('username', 'password', site_id='site_name')
server = TSC.Server('https://your-server.com', use_server_version=True)

with server.auth.sign_in(tableau_auth):
    # 查询已有项目
    all_projects, _ = server.projects.get()
    project = next(p for p in all_projects if p.name == 'Sales Project')

    # 发布数据源(从 .tdsx 文件)
    ds_item = TSC.DatasourceItem(project.id, name='Sales Data Source')
    ds_item = server.datasources.publish(
        ds_item,
        'sales_data.tdsx',
        TSC.Server.PublishMode.Overwrite
    )
    print(f"Datasource published: {ds_item.id}")

    # 发布工作簿(从 .twbx 文件)
    wb_item = TSC.WorkbookItem(project.id, name='Sales Dashboard')
    wb_item = server.workbooks.publish(
        wb_item,
        'sales_dashboard.twbx',
        TSC.Server.PublishMode.Overwrite
    )
    print(f"Workbook published: {wb_item.id}")

    # 查询工作簿中的视图
    server.workbooks.populate_views(wb_item)
    for view in wb_item.views:
        print(f"View: {view.name}, URL: {view.content_url}")

10.3 Looker

10.3.1 Looker概述

Looker是商业智能和数据分析平台,支持SQL查询和可视化。

核心特性

  1. SQL查询
  2. 可视化SQL编辑器
  3. 自动完成
  4. 语法高亮

  5. LookML

  6. 数据建模语言
  7. 声明式定义
  8. 版本控制

  9. 协作功能

  10. 团队共享
  11. 权限管理
  12. 评论和讨论

10.3.2 Looker使用

Python
import looker_sdk

# 初始化 Looker SDK(使用 looker.ini 配置文件)
sdk = looker_sdk.init40()  # 使用 API 4.0

# 创建查询
body = looker_sdk.models40.WriteQuery(
    model="ecommerce",
    view="order_items",
    fields=["products.category", "order_items.total_revenue"],
    filters={"order_items.created_date": "30 days"},
    sorts=["order_items.total_revenue desc"],
    limit="10"
)
query = sdk.create_query(body=body)

# 运行查询并获取结果
result = sdk.run_query(query_id=query.id, result_format="json")
print(result)

# 获取已有 Dashboard
dashboards = sdk.search_dashboards(title="Sales")
for dash in dashboards:
    print(f"Dashboard: {dash.title}, ID: {dash.id}")

# 获取 Look 列表
looks = sdk.all_looks()
for look in looks[:5]:
    print(f"Look: {look.title}, ID: {look.id}")

10.4 Superset

10.4.1 Superset概述

Superset是开源的数据可视化和数据探索平台。

核心特性

  1. 开源免费
  2. Apache顶级项目
  3. 社区活跃
  4. 持续更新

  5. SQL Lab

  6. SQL查询编辑器
  7. 数据探索
  8. 结果可视化

  9. 丰富的可视化

  10. 40+图表类型
  11. 地图可视化
  12. 交互式图表

10.4.2 Superset使用

Python
# Superset 示例(通过 REST API 调用)
import requests

SUPERSET_URL = "http://localhost:8088"

# 登录获取 Token
login_resp = requests.post(
    f"{SUPERSET_URL}/api/v1/security/login",
    json={"username": "admin", "password": "admin", "provider": "db"}
)
access_token = login_resp.json()["access_token"]
headers = {"Authorization": f"Bearer {access_token}"}

# 获取数据库连接列表
db_resp = requests.get(f"{SUPERSET_URL}/api/v1/database/", headers=headers)
for db in db_resp.json()["result"]:
    print(f"Database: {db['database_name']}, ID: {db['id']}")

# 执行 SQL 查询(通过 SQL Lab API)
sql_result = requests.post(
    f"{SUPERSET_URL}/api/v1/sqllab/execute/",
    headers=headers,
    json={
        "database_id": 1,
        "sql": "SELECT sale_date, SUM(amount) as total FROM sales GROUP BY sale_date",
        "schema": "public"
    }
)
print(sql_result.json())

# 获取图表列表
charts_resp = requests.get(f"{SUPERSET_URL}/api/v1/chart/", headers=headers)
for chart in charts_resp.json()["result"][:5]:  # 切片操作:[start:end:step]提取子序列
    print(f"Chart: {chart['slice_name']}, Type: {chart['viz_type']}")

10.5 练习题

基础题

  1. 选择题
  2. 数据可视化的核心价值不包括什么?

    • A. 快速理解
    • B. 洞察发现
    • C. 数据存储
    • D. 沟通有效
  3. 简答题

  4. 解释数据可视化的类型。
  5. 说明Tableau的核心特性。

进阶题

  1. 实践题
  2. 使用Tableau创建仪表板。
  3. 使用Looker创建数据查询。
  4. 使用Superset创建图表。

  5. 设计题

  6. 设计一个销售仪表板。
  7. 设计一个实时监控仪表板。

答案

1. 选择题答案

  1. C(数据可视化的核心价值不包括数据存储)

2. 简答题答案

数据可视化的类型: - 比较类、趋势类、分布类、关系类

Tableau的核心特性: - 拖拽式操作、丰富图表、数据连接

3. 实践题答案

参见10.2-10.4节的示例。

4. 设计题答案

参见10.1-10.4节的设计原则。

10.6 面试准备

大厂面试题

字节跳动

  1. 解释数据可视化的核心概念。
  2. 如何设计有效的仪表板?
  3. 数据可视化的最佳实践是什么?
  4. 如何处理大数据量的可视化?

腾讯

  1. Tableau和Looker的区别是什么?
  2. 如何选择合适的可视化工具?
  3. 如何设计交互式仪表板?
  4. 如何优化可视化性能?

阿里云

  1. 数据可视化的设计原则是什么?
  2. 如何设计实时数据可视化?
  3. 如何处理可视化中的数据隐私?
  4. 如何设计可视化的扩展性?

📚 参考资料

🎯 本章小结

本章深入讲解了数据可视化,包括:

  1. 数据可视化的核心概念
  2. Tableau的使用
  3. Looker和Superset
  4. 数据可视化设计原则

通过本章学习,你掌握了数据可视化的核心技术,能够创建生产级的数据可视化。下一章将深入学习数据管道。