飞道的博客

上手Pandas,带你玩转数据(6)-- 摆脱对pandas可视化丑图的刻板印象吧

324人阅读  评论(0)


pandas数据可视化

其实,pandas作图是个什么效果大家心里应该有数,不然也不会有那么多其他的库来作图,或者说,pandas本身是一个做数据分析的库,作图的话,可能并不是它的本职工作。

但是呢,既然人家有,那我就放一下。

不急,文章后面会有比较好的pandas可视化工具。
(如果性子急的朋友可以从目录直接跳转到下面的第二个大板块儿)

线形图

import pandas as pd
import numpy as np
 
s = Series( np. random. randn( 10). cumsum(), index= np. arange( 0, 100, 10))
s. plot()

条形图

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')
df.plot.bar()

堆积条形图

传递stacked = True :

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')
df.plot.bar(stacked=True)

水平条形图

要获得水平条形图,请使用 barh 方法:

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d')

df.plot.barh(stacked=True)

直方图

df = pd.DataFrame({
   'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
 
df.plot.hist(bins=20)

箱型图

df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box()

区域图

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()

散点图

df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x='a', y='b')

饼状图

df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x'])
df.plot.pie(subplots=True)


plotly数据可视化

pandas现在可以使用Plotly、Bokeh作为可视化的backend,直接实现交互性操作,无需再单独使用可视化包了。

激活backend:

pd.options.plotting.backend = 'plotly'

可以填在上面的有:

Plotly
Holoviews
Matplotlib
Pandas_bokeh
Hyplot

Plotly backend简介

Plotly是基于Javascript版本的库写出来的,因此生成的Web可视化图表,可以显示为HTML文件或嵌入基于Python的Web应用程序中。
使用Plotly可以画出很多媲美Tableau的高质量图:

此前一直是苦于pyecharm的模板不够多,前端不熟的小伙伴,这可是一个好东西哦!!!


if Jupyter

如果是在Jupyterlab中使用Plotly,那还需要执行几个额外的安装步骤来显示可视化效果。

首先,安装IPywidgets。

pip install jupyterlab "ipywidgets>=7.5"

然后运行此命令以安装Plotly扩展。

jupyter labextension install jupyterlab-plotly@4.8.1

好,我用的是pyechart


数据集选取

数据集来源

这个数据也是Scikit-learn中的样本数据,所以也可以使用以下代码将其直接导入。

import pandas as pd
import numpy as np

from sklearn.datasets import fetch_openml

pd.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)
print(data.head().T)
                                     0       1       2       3      4
Alcohol                          14.23    13.2   13.16   14.37  13.24
Malic_acid                        1.71    1.78    2.36    1.95   2.59
Ash                               2.43    2.14    2.67     2.5   2.87
Alcalinity_of_ash                 15.6    11.2    18.6    16.8   21.0
Magnesium                        127.0   100.0   101.0   113.0  118.0
Total_phenols                      2.8    2.65     2.8    3.85    2.8
Flavanoids                        3.06    2.76    3.24    3.49   2.69
Nonflavanoid_phenols              0.28    0.26     0.3    0.24   0.39
Proanthocyanins                   2.29    1.28    2.81    2.18   1.82
Color_intensity                   5.64    4.38    5.68     7.8   4.32
Hue                               1.04    1.05    1.03    0.86   1.04
OD280%2FOD315_of_diluted_wines    3.92     3.4    3.17    3.45   2.93
Proline                         1065.0  1050.0  1185.0  1480.0  735.0
class                                1       1       1       1      1

该数据集是葡萄酒相关的,包含葡萄酒类型的许多功能和相应的标签。


开始绘图

散点图

绘图方式与正常使用Pandas内置的绘图操作几乎相同,只是现在以丰富的Plotly显示可视化效果。

fig = data[['Alcohol', 'Proline']].plot.scatter(y='Alcohol', x='Proline')
fig.show()

放大缩小,矢量图,你懂得。


条形辉度图

我们可以结合Pandas的groupby函数创建一个条形图,总结各类之间Hue的均值差异。

fig = data[['Hue','class']].groupby(['class']).mean().plot.bar()


散点分类图

将class添加到我们刚才创建的散点图中。通过Plotly可以轻松地为每个类应用不同的颜色,以便直观地看到分类。

fig = data[['Hue', 'Proline', 'class']].plot.scatter(x='Hue', y='Proline', color='class', title='Proline and Hue by wine class')


资料推荐

这里示例就放这些,比较简单一些。
这里不建议大家去看各种网文,质量都参差不齐的,直接去看官方文档。

Python Figure Reference: Single-Page
Plotly Python Open Source Graphing Library Fundamentals

推一篇还不错的博文:可视化神器Plotly(5)—参数详解



转载:https://blog.csdn.net/qq_43762191/article/details/115510744
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场