Altair数据可视化:数据规范完全指南

Altair数据可视化:数据规范完全指南

altair Declarative statistical visualization library for Python altair 项目地址: https://gitcode.com/gh_mirrors/al/altair

数据模型基础

Altair采用表格数据模型作为基础,类似于电子表格或数据库表。每个数据集包含若干记录(行),每条记录包含多个命名字段(列)。所有顶层图表对象(如Chart、LayerChart等)都接受数据集作为第一个参数。

数据源类型

Altair支持多种数据源格式:

  1. pandas DataFrame:最常用的数据格式,Altair能自动推断数据类型
  2. 支持DataFrame交换协议的DataFrame(如polars、pyarrow)
  3. Data类对象:包括UrlData、InlineData、NamedData等
  4. URL字符串:指向JSON或CSV格式文件的URL
  5. 地理空间数据:GeoDataFrame、Shapely几何对象、GeoJSON等
  6. 生成数据:数值序列或地理参考元素等

pandas DataFrame的优势

当使用pandas DataFrame时,Altair能自动推断字段的数据类型:

import altair as alt
import pandas as pd

data = pd.DataFrame({'x': ['A', 'B', 'C', 'D', 'E'],
                     'y': [5, 3, 6, 7, 2]})
alt.Chart(data).mark_bar().encode(
    x='x',  # 自动识别为分类数据
    y='y',  # 自动识别为定量数据
)

而非pandas数据源则需要显式声明数据类型:

data = alt.Data(values=[{'x': 'A', 'y': 5},
                        {'x': 'B', 'y': 3}])
alt.Chart(data).mark_bar().encode(
    x='x:N',  # 必须声明为分类数据
    y='y:Q',  # 必须声明为定量数据
)

数据处理技巧

处理索引数据

Altair默认不访问DataFrame索引。如需使用索引数据,需先重置索引:

data = data.reset_index()  # 将索引转为列

长格式与宽格式数据

Altair更适合处理长格式数据(每行一个观测值):

# 长格式示例
long_form = pd.DataFrame({
    'Date': ['2023-01-01', '2023-01-02'],
    'company': ['AAPL', 'AAPL'],
    'price': [150, 152]
})

宽格式数据(每行一个时间点,不同公司价格在不同列)可通过转换处理:

# 使用pandas转换
long_data = wide_form.melt('Date', var_name='company', value_name='price')

# 或使用Altair转换
alt.Chart(wide_form).transform_fold(
    ['AAPL', 'AMZN', 'GOOG'],
    as_=['company', 'price']
)

生成数据

Altair支持直接生成数据序列:

# 生成序列数据
data = alt.sequence(0, 10, 0.1, as_='x')

# 生成地理网格线
data = alt.graticule(step=[15, 15])

# 生成地球球体
data = alt.sphere()

地理空间数据处理

GeoPandas GeoDataFrame

import geopandas as gpd
from shapely import geometry

gdf = gpd.GeoDataFrame([
    {"color": "#F3C14F", "geometry": geometry.Polygon(...)}
])

alt.Chart(gdf).mark_geoshape().encode(
    alt.Color("color:N").scale(None)
).project(type="identity", reflectY=True)

GeoJSON数据

可直接使用GeoJSON对象或URL:

# 内联GeoJSON
data = alt.Data(values=geojson_obj, format=alt.DataFormat(property="features"))

# 远程GeoJSON
url = "https://example.com/data.geojson"
data = alt.Data(url=url, format=alt.DataFormat(property="features"))

TopoJSON数据

TopoJSON是GeoJSON的扩展,能更高效存储地理数据:

data = alt.Data(values=topojson_obj, 
               format=alt.DataFormat(type="topojson", feature="MY_DATA"))

最佳实践建议

  1. 优先使用pandas DataFrame,享受自动类型推断
  2. 地理数据推荐使用GeoPandas处理
  3. 大数据集考虑使用URL引用而非内联数据
  4. 复杂转换操作可在pandas中预处理
  5. 注意数据格式(长格式vs宽格式)对可视化效果的影响

通过合理选择数据源和处理方式,可以充分发挥Altair强大的可视化能力。

altair Declarative statistical visualization library for Python altair 项目地址: https://gitcode.com/gh_mirrors/al/altair

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

廉娴鹃Everett

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值