数据分析能够很好地帮我们了解数据,理解数据,能够帮助我们进行有效的特征工程,方便后续的机器学习建模。pandas作为强大的数据分析工具,提供的内置可视化功能也是十分强大的。
基本绘图
Series和DataFrame上的这个功能只是使用matplotlib库的plot()方法的简单包装实现。
%matplotlib inline
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('2019/04/15',
periods=10), columns=list('ABCD'))
df.plot()
绘图方法允许除默认线图之外的少数绘图样式。 这些方法可以作为plot()的kind关键字参数提供。这些包括 -
bar
或barh
为条形hist
为直方图boxplot
为盒型图area
为“面积”scatter
为散点图
我们根据不同的了解数据的需求来选择绘图样式。
下图为我在网上看到的一张图我觉得很棒,搬运过来:
条形图
条形图通常用来比较不同类的大小,而堆积条形图通常用来比较不同类占比。
df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
df.plot.bar()
如果我们要生成一个堆积条形图,可以指定stacked参数为True.
df.plot.bar(stacked=True)
要获得水平条形图,使用barh()
方法
df.plot.barh(stacked=True)
直方图
可以使用plot.hist()
方法绘制直方图。我们可以指定bins
的数量值。
直方图主要为了了解数据的分布情况,一般用于连续值的列,指定bins数进行区间划分,然后统计每个bin的数量进行展示。
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.hist(bins=20)
箱线图
对于数值变量,我们不仅需要了解数据的集中趋势(如均值),还要了解数据的离散趋势,即观测值偏离其中心的趋势。而箱线图能够很好地反应数据的离散趋势,受极端值影响较小。
首先直观了解一下四分位数、分位点和四分位距的概念,如下图所示:
基于这些指标我们能绘制出箱线图:
-
极端值/异常值(outliers)
- 在一组数据中,
小于Q1-1.5IQR
或者大于Q3+1.5IQR
的数据是疑似极端值; - 在一组数据中,
小于Q1-3IQR
或者大于Q3+3IQR
的数据是极端值。
修正箱线图不同于箱线图,它能够反映出数据的极端值情况。如下图所示:
pandas内置的箱线图可以如下方式绘制:
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E']) df.plot.box()
- 在一组数据中,
如图所示,上下边缘到四分位线的距离不对称,可以判断这里绘制的箱线图的上下边缘表示的是最大最小值。
区域块图
可以使用Series.plot.area()
或DataFrame.plot.area()
方法创建区域图形,主要用于相对和绝对差异的对比。
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()
散点图
绘制散点图可看出两个变量之间的关系。
可以使用DataFrame.plot.scatter()
方法创建散点图
df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x='a', y='b')
饼状图
饼状图用来反映各类的百分比情况。
饼状图可以使用DataFrame.plot.pie()
方法创建
df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x'])
df.plot.pie(subplots=True)