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

再见,可视化!你好,熊猫!

时间:2023-03-13 11:37:33 科技观察

用Python做数据分析离不开pandas。Pnadas更负责处理和转换数据。Pandas也内置了可视化操作,但是效果很粗糙。因此,当你使用Python进行数据分析时,通常的做法是先使用pandas处理数据,然后使用Matplotlib、Seaborn、Plotly、Bokeh等可视化dataframe或series。但说实话,每个可视化包都有自己独特的方法和功能,我经常忘记这一点。这是我一直头疼的地方。好消息!从最新的pandas0.25.3版本开始,不再需要以上操作。数据处理和可视化可以单独使用pandas完成。Pandas现在可以使用Plotly和Bokeh作为可视化的后端,直接实现交互操作,无需使用单独的可视化包。让我们一起看看如何使用它。1.激活后台导入pandas后,直接使用如下代码激活后台,例如下面激活plotly。pd.options.plotting.backend='plotly'目前pandas后端支持以下可视化包。PlotlyHoloviewsMatplotlibPandas_bokehHyplot2。PlotlybackendPlotly的优势在于它是基于Javascript版本的库编写的,因此生成的Web可视化图表可以显示为HTML文件或嵌入到基于Python的Web应用程序中。让我们看看如何使用plotly作为pandas的后端进行可视化。如果你还没有安装Plotly,你需要pipintsallplotly安装它。如果您在Jupyterlab中使用Plotly,则需要一些额外的安装步骤来显示可视化效果。首先,安装IPywidgets。pipinstalljupyterlab"ipywidgets>=7.5"然后运行这个命令来安装Plotly扩展。jupyterlabextensioninstalljupyterlab-plotly@4.8.1示例选自openml.org的数据集,链接如下:数据链接:https://www.openml.org/d/187该数据也是中的示例数据Scikit-learn,所以也可以用下面的代码直接导入。importpandasaspdimportnumpyasnpfromsklearn.datasetsimportfetch_openmlpd.options.plotting.backend='plotly'X,y=fetch_openml("wine",version=1,as_frame=True,return_X_y=True)data=pd.concat([X,y],axis=1)data.head()这个数据集是与葡萄酒相关的,包含许多葡萄酒类型的特征和相应的标签。数据集的前几行如下所示。让我们使用Plotly后端探索数据集。绘图的完成方式与正常使用Pandas的内置绘图操作的方式大致相同,但现在具有丰富的Plotly可视化效果。下面的代码绘制了数据集中两个特征之间的关系。fig=data[['Alcohol','Proline']].plot.scatter(y='Alcohol',x='Proline')fig.show()如果将鼠标悬停在图表上,您可以选择下载图表用于高质量图像文件。我们可以结合Pandas的groupby函数来创建一个条形图,该条形图总结了类别之间色调的平均差异。data[['Hue','class']].groupby(['class']).mean().plot.bar()将类添加到我们刚刚创建的散点图中。使用Plotly可以很容易地为每个类应用不同的颜色以直观地查看分类。图=数据[['Hue','Proline','class']].plot.scatter(x='Hue',y='Proline',color='class',title='ProlineandHuebywineclass')fig.show()3。Bokeh后端Bokeh是另一个Python可视化包,同样提供了丰富的交互式可视化效果。Bokeh还有一个流式API来创建流式数据(例如金融市场)的实时可视化。pandas-Bokeh的GitHub链接如下:https://github.com/PatrikHlobil/Pandas-Bokeh,同理,用pip安装即可,pipinstallpandas-bokeh。为了在Jupyterlab中显示Bokeh可视化,需要安装两个新的扩展。jupyterlabextensioninstall@jupyter-widgets/jupyterlab-managerjupyterlabextensioninstall@bokeh/jupyter_bokeh接下来,我们使用Bokeh后端重新制作刚才plotly实现的散点图。pd.options.plotting.backend='pandas_bokeh'importpandas_bokehfrombokeh.ioimportoutput_notebookfrombokeh.plottingimportfigure,showoutput_notebook()p1=data.plot_bokeh.scatter(x='Hue',y='Proline',category='class',title='ProlineandHuebywine',show_figure=False)show(p1)的关键语句就一行代码,非常快,交互效果如下。Bokeh还有一个plot_grid函数,可以为多个图表创建类似仪表板的布局,下面以网格布局创建四个图表。output_notebook()p1=data.plot_bokeh.scatter(x='Hue',y='Proline',category='class',title='ProlineandHuebywineclass',show_figure=False)p2=data[['Hue','class']].groupby(['class']).mean().plot.bar(title='MeanHueperClass')df_hue=pd.DataFrame({'class_1':data[data['class']=='1']['Hue'],'class_2':data[data['class']=='2']['Hue'],'class_3':data[data['class']=='3']['Hue']},columns=['class_1','class_2','class_3'])p3=df_hue.plot_bokeh.hist(title='DistributionperClass:Hue')df_proline=pd.DataFrame({'class_1':data[data['class']=='1']['Proline'],'class_2':data[data['class']=='2']['Proline'],'class_3':data[data['class']=='3']['Proline']},columns=['class_1','class_2','class_3'])p4=df_proline.plot_bokeh.hist(title='DistributionperClass:Proline')pandas_bokeh.plot_grid([[p1,p2],[p3,p4]],plot_width=450)可以看出可视化部分是在pandasdataframe的基础上用一行代码完成的,最后plot_grid完成了布局。4.总结在Pandas内置的绘图功能中加入多个第三方可视化后端,大大增强了pandas的数据可视化能力。以后你可能真的不需要学很多可视化操作了,用pandas直击你的灵魂!