Altair数据可视化库介绍

在数据分析和探索性数据分析中,揭示数据间的关系是一项充满乐趣的工作。无论是识别特征之间的关系,还是仅仅理解模型的工作原理,可视化通常是最佳途径。可视化还有助于向客户和利益相关者解释工作。Python提供了许多用于绘图和可视化的库,而通常在选择用于问题陈述的库时会感到困难。最近,遇到了Altair,这是一个Python中的可视化库,对其能力感到惊讶。它是一个非常用户友好的库,实际上可以用最少的代码完成很多事情。

Altair概述

Altair是一个基于Vega-lite的Python声明式统计可视化库。可能现在会问这两个问题:声明式是什么意思?为什么需要另一个可视化库?声明式意味着在绘制任何图表时,只需要声明数据列与编码通道(如x轴、y轴、颜色等)之间的链接,其余所有的图表细节都会自动处理。让通过一个例子来理解它。

以下是使用Altair生成图表的代码,以及上面的图表。如果注意到,只提到了x、y和颜色,其余的事情,如图例、轴标签、范围等,都是自动设置的。现在,让看看下面的图像,这是使用Altair进行的与之前相同的可视化的matplotlib实现。在这里,需要显式使用groupby函数,定义轴名称、图例等,这在进行探索性分析时会多出很多额外的工作。因此,声明式使得Altair简单、友好且一致。它用最少的代码产生美观有效的可视化。因此,可以花更多的时间理解数据,而不是设置图例、定义轴等。

安装Altair

Altair可以通过conda安装如下:

conda install altair --channel conda-forge

或者也可以这样通过pip安装:

pip install altair

现在,已经在系统上安装了Altair。一直觉得学习一个库的最好方法是在实际问题上练习它。所以,让不要拖延,立即开始!

探索实际问题

为此,使用了“大型超市销售”数据集。下载训练文件并将其加载到工作环境中。在数据集中,有多个连锁店的多个门店的产品销售情况。让看看数据集。

df = pd.read_csv('/Users/shubhamjain/Downloads/AV/Big Mart/train.csv')

总数据框架由12列组成,其中7列是分类的,其余的是数值的。在这里,有“Item_Outlet_Sales”作为目标特征。注意:只使用了前1000行,只是为了给一个使用Altair的不同图表的感觉。

直方图

在探索之旅中,通常从使用直方图的单变量分析开始。所以,让从“Item_Outlet_Sales”特征开始,使用Altair绘制其直方图。

Chart(df).mark_bar().encode( X('Item_Outlet_Sales',bin=True), Y('count(*):Q'))

要理解代码,让首先了解一些基本术语。Chart:它是Altair中的基本对象,只接受数据框架作为单个参数。mark:它是从图表对象中可视化数据点的属性。有不同形式的mark对象,如下所示。在这里,展示了条形图的mark,以便将数据点可视化为条形图。encode:它是一个函数,有助于将数据的不同特征映射到可视化中。可以为x轴、y轴、颜色等定义特征。

散点图

现在,让尝试使用Altair进行一些双变量分析。现在,让看看MRP和Sales特征之间的关系。

Chart(df).mark_point().encode( x='Item_MRP', y='Item_Outlet_Sales')

可以清楚地看到MRP和销售之间的线性关系。让引入一些其他的Altair编码,以便从可视化中得出更多的结论。

Chart(df).mark_point().encode( x='Item_MRP', y='Item_Outlet_Sales', color='Outlet_Type')

在这里,定义了另一个编码叫做color,它用于区分数据点,帮助更好地理解关系。可以看到,杂货店的销售与超市相比相当低,其中超市类型3显示了最高的销售。

堆叠条形图

对于这个,让看看Outlet_location_type和门店大小之间的关系。

Chart(df).mark_bar(stacked='normalize').encode( Y('Outlet_Location_Type'), X('count(*):Q', sort='descending'), Color('Outlet_Size:N'))

上面绘制的是堆叠条形图,它表示在第二层城市的门店只有小尺寸的门店,而第三层城市只有大尺寸的门店。注意,在这里在X编码中定义了计数聚合器,以产生水平堆叠图。

折线图

现在,让看看商品价格在年份中的变化。通常,对于与时间序列相关的可视化,更喜欢使用折线图,这是Altair通过使用line mark提供的。

Chart(df).mark_line().encode( X('Outlet_Establishment_Year:T', timeUnit='year'), Y('Item_MRP:Q', aggregate='mean'))

注意:在这里,使用aggregate属性单独定义了转换。

热图

Altair提供了另一种称为热图的图表,它使用text mark属性。

Chart(df).mark_text(applyColorToBackground=True).encode( Row('Outlet_Type:N'), Column('Outlet_Size:N'), Color('mean(Item_Outlet_Sales):Q', sort='descending'), Text('mean(Item_Outlet_Sales):Q'))

同样,可以通过这个绘制更多的数据模式,也可以尝试一些其他的数据转换和图表,以发现特征之间的各种趋势和关系。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485