Altair数据可视化:数据规范完全指南
数据模型基础
Altair采用表格数据模型作为基础,类似于电子表格或数据库表。每个数据集包含若干记录(行),每条记录包含多个命名字段(列)。所有顶层图表对象(如Chart、LayerChart等)都接受数据集作为第一个参数。
数据源类型
Altair支持多种数据源格式:
- pandas DataFrame:最常用的数据格式,Altair能自动推断数据类型
- 支持DataFrame交换协议的DataFrame(如polars、pyarrow)
- Data类对象:包括UrlData、InlineData、NamedData等
- URL字符串:指向JSON或CSV格式文件的URL
- 地理空间数据:GeoDataFrame、Shapely几何对象、GeoJSON等
- 生成数据:数值序列或地理参考元素等
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"))
最佳实践建议
- 优先使用pandas DataFrame,享受自动类型推断
- 地理数据推荐使用GeoPandas处理
- 大数据集考虑使用URL引用而非内联数据
- 复杂转换操作可在pandas中预处理
- 注意数据格式(长格式vs宽格式)对可视化效果的影响
通过合理选择数据源和处理方式,可以充分发挥Altair强大的可视化能力。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考