当前位置: 首页 > 科技观察

分享一个流行的Python可视化模块,简单快速上手!!

时间:2023-03-20 12:02:42 科技观察

Altair是什么?Altair之所以被称为统计可视化库,是因为它可以全面理解数据,通过分类汇总、数据转换、数据交互、图形合成等方式来理解和分析数据,而且它的安装过程也非常简单,直接通过pip命令即可执行如下:pipinstallaltairpipinstallvega_datasetspipinstallaltair_viewer如果使用condapackagemanager安装Altair模块,代码如下:condainstall-cconda-forgealtairvega_datasetsAltair初体验我们来简单的尝试画一下一个直方图,首先创建一个DataFrame数据集,代码如下:df=pd.DataFrame({"brand":["iPhone","Xiaomi","HuaWei","Vivo"],"profit(B)":[200,55,88,60]})接下来是绘制直方图的代码:importaltairasaltairimportpandasaspdimportaltair_viewerchart=alt.Chart(df).mark_bar().encode(x="brand:N",y="profit(B):Q")#显示数据,调用display()方法altair_viewer.display(chart,inline=True)output从整个语法结构来看,首先使用alt.Chart()指定使用的数据集,然后使用实例方法mark_*()绘制图表的样式,最后指定X轴和Y轴表示的数据。你可能很好奇N和Q分别代表什么。这是变量类型的缩写。也就是说,Altair模块需要知道绘制图形所涉及的变量类型,只有这样,绘制出来的图形才是我们期望的效果。其中,N代表标称变量(Nominal)。例如,手机的品牌是一个专有名词,而Q代表一个数值变量(Quantitative),可以分为离散数据(discrete)和连续数据。数据(continuous),除了时间序列数据,缩写为T和时序变量(O),比如商家在网购过程中的评分有1-5星。保存图表要保存最终的图表,我们可以直接调用save()方法将对象保存为HTML文件,代码如下:chart.save("chart.html")也可以保存为JSON文件,从代码上看很相似。chart.save("chart.json")当然我们也可以将其保存为图片格式的文件,如下图:Altair的高级操作我们在上面的基础上进一步推导和扩展,例如,我们要画一个水平方向的条形图,X轴和Y轴的数据互换,代码如下:chart=alt.Chart(df).mark_bar().encode(x="profit(B):Q",y="brand:N")chart.save("chart1.html")output同时我们尝试绘制折线图,??调用mark_line()方法代码如下:##新建一组数据,日期为行索引值np.random.seed(29)value=np.random.randn(365)data=np.cumsum(value)date=pd.date_range(start="20220101",end="20221231")df=pd.DataFrame({"num":data},index=date)line_chart=alt.Chart(df.reset_index()).mark_line().encode(x="index:T",y="num:Q")line_chart.save("chart2.html")输出我们还可以绘制甘特图,一般在项目管理中使用。X轴添加时间和日期,Y轴表示项目进度,代码如下:project=[{"project":"Proj1","start_time":"2022-01-16","end_time":"2022-03-20"},{"project":"Proj2","start_time":"2022-04-12","end_time":"2022-11-20"},...]df=alt.Data(values=project)chart=alt.Chart(df).mark_bar().encode(alt.X("start_time:T",axis=alt.Axis(format="%x",formatType="时间",tickCount=3),scale=alt.Scale(domain=[alt.DateTime(year=2022,month=1,date=1),alt.DateTime(year=2022,month=12,date=1)])),alt.X2("end_time:T"),alt.Y("project:N",axis=alt.Axis(labelAlign="left",labelFontSize=15,labelOffset=0,labelPadding=50)),颜色=alt.Color("project:N",legend=alt.Legend(labelFontSize=12,symbolOpacity=0.7,titleFontSize=15)))chart.save("chart_gantt.html")output从上图中我们看到团队那里有几个项目在做,每个项目的进度都不一样。当然,不同项目的时间跨度也不一样。在图表上显示它非常直观。接下来我们再画一个散点图,调用mark_circle()方法,代码如下:df=data.cars()##过滤掉地区为“USA”,即美国的乘用车数据状态df_1=alt.Chart(df).transform_filter(alt.datum.Origin=="USA")df=data.cars()df_1=alt.Chart(df).transform_filter(alt.datum.Origin=="USA"“)图表=df_1。mark_circle().encode(alt.X("Horsepower:Q"),alt.Y("Miles_per_Gallon:Q"))chart.save("chart_dots.html")output当然我们可以进一步优化,让图表看起来更漂亮,加点颜色,代码如下:chart=df_1.mark_circle(color=alt.RadialGradient("radial",[alt.GradientStop("white",0.0),alt.GradientStop("red",1.0)]),size=160).encode(alt.X("Horsepower:Q",scale=alt.Scale(zero=False,padding=20)),alt.Y("Miles_per_Gallon:Q",scale=alt.Scale(zero=False,padding=20)))output我们改变散点的大小,不同散点的大小代表不同的值,代码如下:chart=df_1.mark_circle(color=alt.RadialGradient("radial",[alt.GradientStop("white",0.0),alt.GradientStop("red",1.0)]),size=160).encode(alt.X("Horsepower:Q",scale=alt.Scale(zero=False,padding=20)),alt.Y("Miles_per_Gallon:Q",scale=alt.Scale(zero=False,padding=20)),size="加速度:Q")输出