Python主要数据探索函数
Python中用于数据探索的库主要是Pandas(数据分析)和Matplotlib(数据可视化)。
其中,Pandas提供了大量的与数据探索相关的函数,这些数据探索函数可大致分为统计特征函数与统计作图函数,而作图函数依赖于Matplotlib,所以往往又会跟Matplotlib结合在一起使用。
基本统计特征函数
统计特征函数用于计算数据的均值、方差、标准差、分位数、相关系数和协方差等,这些统计特征能反映出数据的整体分布。
- Pandas主要统计特征函数
方法名 | 函数功能 | 所属库 |
---|---|---|
sum() | 计算数据样本的总和(按列计算) | Pandas |
mean() | 计算数据样本的算术平均数 | Pandas |
var() | 计算数据样本的方差 | Pandas |
stdO | 计算数据样本的标准差 | Pandas |
corr() | 计算数据样本的Spearman (Pearson)相关系数矩阵 | Pandas |
cov() | 计算数据样本的协方差矩阵 | Pandas |
skew() | 样本值的偏度(三阶矩) | Pandas |
kurtO | 样本值的峰度(四阶矩) | Pandas |
describeQ | 给出样本的基本描述(基本统计量如均值、标准差等) | Pandas |
- 详解
(1) sum
□功能:计算数据样本的总和(按列计算)。
□使用格式: D.sum()
按列计算样本D的总和,样本D可为DataFrame或者Series
(2) mean
□功能:计算数据样本的算术平均数。
□使用格式: D.mean()
按列计算样本D的均值,样本D可为DataFrame或者Series
(3) var
□功能:计算数据样本的方差。
□使用格式: D.var()
按列计算样本D的均值,样本D可为DataFrame或者Series
(4) std
□功能:计算数据样本的标准差。
□使用格式: D.std()
按列计算样本D的均值,样本D可为DataFrame或者Series
(5) corr
□功能:计算数据样本的Spearman (Pearson)相关系数矩阵。
□使用格式:D.corr(method-pearson')
样本D可为DataFrame,返回相关系数矩阵,method参数为计算方法,支持pearson(皮尔森相关系数,默认选项)、kendall(肯德尔系数)、spearman(斯皮尔曼系数);
S1.corr(S2,method-pearson')S1、S2均为 Series,这种格式指定计算两个Series之间的相关系数。
import pandas as pd
D = pd.DataFrame ([range (1, 8) , range (2, 9) ] ) #生成样本D, —行为 1~7, —行为2~8
print("相关系数矩阵:")
print(D.corr (method='spearman')) #计算相关系数矩阵
S1=D.loc[0]# 提取第一行
S2=D.loc[1]# 提取第二行
print("S1、S2的相关系数:",S1.corr(S2,method= 'pearson'))#计算S1、S2的相关系数
(6)COV
□功能:计算数据样本的协方差矩阵。
□使用格式:D.cov()
样本D可为DataFrame,返回协方差矩阵;
S1.cov(S2)S1、S2均为Series,这种格式指定计算两个Series之间的协方差。
# 计算6x5随机矩阵的协方差矩阵
import pandas as pd
import numpy as np
D = pd.DataFrame (np.random. randn (6, 5) ) #产生6X5随机矩阵
D.cov() #计算协方差矩阵
D[0] .cov(D[1] ) #计算第一列和第二列的协方差
0.3158824363527972
(7) skew/kurt
□功能:计算数据样本的偏度(三阶矩)/峰度(四阶矩)。
□使用格式:D.skew() / D.kurt()
计算样本D的偏度(三阶矩)/峰度(四阶矩)。样本D可为DataFrame或Series
# 计算6x5随机矩阵的偏度(三阶矩)/峰度(四阶矩)
import pandas as pd
import numpy as np
D = pd.DataFrame(np.random.randn(6, 5)) # 产生6x5随机矩阵
D.skew()
D.kurt()
(8) describe
□功能:直接给出样本数据的一些基本的统计量,包括均值、标准差、最大值、最小 值、分位数等。
□使用格式:D.describe()
括号里可以带一些参数,比如percentiles = [0.2, 0.4, 0.6, 0.8]就是指定只计算0.2、 0.4、0.6、0.8分位数,而不是默认的1/4、1/2、3/4分位数。
# 给出6x5随机矩阵的describe
import pandas as pd
import numpy as np
D = pd. DataFrame (np. random. randn ( 6, 5)) # 产生 6X5 随机矩阵
D.describe()
拓展统计特征函数
除了上述基本的统计特征外,Pandas还提供了一些非常方便实用的计算统计特征的函数, 主要有累积计算(cum)和滚动计算(pd.rolling_)
- Pandas累积统计特征函数
方法名 | 函数功能 | 所属库 |
---|---|---|
cumsum() | 依次给出前1、2、…、n个数的和 | Pandas |
cumprod() | 依次给出前1、2、…、n个数的积 | Pandas |
cummax() | 依次给出前1、2、…、n个数的最大值 | Pandas |
cummin() | 依次给出前1、2、…、n个数的最小值 | Pandas |
- Pandas累积统计特征函数()
方法名 | 函数功能 | 所属库 |
---|---|---|
D.rolling().sum() | 计算数据样本的总和(按列计算) | Pandas |
D.rolling().mean() | 数据样本的算术平均数 | Pandas |
D.rolling().var() | 计算数据样本的方差 | Pandas |
D.rolling().std() | 计算数据样本的标准差 | Pandas |
D.rolling().corr() | 计算数据样本的Spearman(Pearson)相关系数矩阵 | Pandas |
D.rolling().cov() | 计算数据样本的协方差矩阵 | Pandas |
D.rolling().skew() | 样本值的偏度(三阶矩) | Pandas |
D.rolling().kurt() | 样本值的峰度(四阶矩) | Pandas |
import pandas as pd
D=pd.Series (range (0, 20) ) #构造Series,内容为0~19共20个整数
D.cumsum () #给出前n项和
D.rolling(2).sum()
统计作图函数
通过统计作图函数绘制的图表可以直观地反映出数据及统计量的性质及其内在规律,如 盒图可以表示多个样本的均值,误差条形图能同时显示下限误差和上限误差,最小二乘拟合 曲线图能分析两变量间的关系。
- Python主要统计作图函数
作图函数名 | 作图函数功能 | 所属工具箱 |
---|---|---|
plot() | 绘制线性二维图,折线图 | Matplotlib/Pandas |
pie() | 绘制饼型图 | Matplotlib/Pandas |
hist() | 绘制二维条形直方图,可显示数据的分配情形 | Matplotlib/Pandas |
boxplot() | 绘制样本数据的箱形图 | Pandas |
plot(logy = True) | 绘制y轴的对数图形 | Pandas |
plot(yen = error) | 绘制误差条形图 | Pandas |
import matplotlib.pyplot as plt #导入作图库
%matplotlib inline
plt.rcParams [ 'font.sans-serif' ] = ['SimHei' ] #用来正常显示中文标签
plt. rcParams [ 'axes.unicode_minus' ] = False #用来正常显示负号
plt.figure (figsize = (7, 5) ) #创建图像区域,指定比例
plt.show()
(1)plot
□功能:绘制线性二维图、折线图。
□使用格式:
plt.plot(x, y, S)
这是Matplotlib通用的绘图方式,绘制*对于x(即以x为横轴的二维图形),字符串参量S指定绘制时图形的类型、样式和颜色,常用的选项有:,b,为蓝色、T为红色、官为 绿色、6为圆圈、+为加号标记、-为实线、,-,为虚线。当x、y均为实数同维向量时,则描出点(x(i),y(f)),然后用直线依次相连。
D.plot(kind = 'box')
这里使用的是DataFrame或Series对象内置的方法作图,默认以Index为横坐标,每列数据为纵坐标自动作图,通过kind参数指定作图类型,支持line(线)、bar(条形)、barh、hist(直方图)、box(箱线图)、kde(密度图)和area、pie(饼图)等,同时也能够接受plt.plot()中接受的参数。因此,如果数据已经被加载为Pandas中的对象,那么以这种方式作图是比较简洁的。
# 在区间(0<=x<=2)绘制一条蓝色的正弦虚线,并在每个坐标点标上五角星
import matplotlib.pyplot as plt #导入作图库
%matplotlib inline
import numpy as np
x = np.linspace (0,2*np.pi, 50) #x坐标输入
y = np.sin (x) #计算对应x的正弦值
plt.plot (x, y ,'bp--') #控制图形格式为蓝色带星虚线,,显示正弦曲线
plt.show()
(2) pie
□功能:绘制饼型图。
□使用格式:plt.pie(size)
使用Matplotlib绘制饼图,其中size是一个列表,记录各个扇形的比例。
import matplotlib.pyplot as plt #导入作图库
%matplotlib inline
# The slices will be ordered and plotted counter-clockwise.
labels = ' Frogs', 'Hogs', ' Dogs', 'Logs' , #定义标签
sizes = [15, 30, 45, 10] # 每一块的比例
colors = [ 'yellowgreen', 'gold', 'lightskyblue', 'lightcoral' ] #每一块的颜色
explode = (0, 0.1, 0, 0) #突出显示,这里仅仅突出显示第二块(即'Hogs')
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%',shadow=True, startangle=90)
plt .axis ('equal') #显示为圆(避免比例压缩为椭圆)
plt.show()
(3)hist
□功能:绘制二维条形直方图,可显示数据的分布情形。
□使用格式:plt.hist(x, y)
其中,X是待绘制直方图的一维数组,y可以是整数,表示均匀分为"组;也可以是列表, 列表各个数字为分组的边界点(即手动指定分界点)。
import matplotlib.pyplot as plt #导入作图库
%matplotlib inline
import numpy as np
x = np. random. randn (1000) #1000个服从正态分布的随机数
plt .hist (x, 10) #分成10组进行绘制直方图
plt.show()
(4)boxplot
□功能:绘制样本数据的箱形图。
□使用格式:D.boxplot() / D.plot(kind = 'box')
有两种比较简单的方式绘制D的箱形图,其中一种是直接调用DataFrame的boxplot()方法;另外一种是调用Series或者DataFrame的plot。方法,并用kind参数指定箱形图(box)。其中,盒子的上、下四分位数和中值处有一条线段。箱形末端延伸出去的直线称为须,表示盒外数据的长度。如果在须外没有数据,则在须的底部有一点,点的颜色与须的颜色相同。
import matplotlib.pyplot as plt # 导入作图库
import numpy as np
import pandas as pd
%matplotlib inline
x = np.random.randn(1000) #1000个服从正态分布的随机数
D = pd.DataFrame([x, x + 1]).T #构造两歹4 的DataFrame
D.boxplot() #调用Series内置的作图方法画图,用kind参数指定箱形图box
plt.show()
(5)plot(logx = True) / plot(logy = True)
□功能:绘制x或'轴的对数图形。
□使用格式:D.plot(logx = True) / D.plot(logy = True)
对X轴(y轴)使用对数刻度(以10为底),y轴(X轴)使用线性刻度,进行plot函数绘图,D为 Pandas 的DataFrame或者Series
import matplotlib.pyplot as plt # 导入作图库
import numpy as np
import pandas as pd
%matplotlib inline
plt. rcParams ['font.sans-serif' ] = [ 'SimHei' ] #用来正常显示中文标签
plt. rcParams [ 'axes.unicode_minus'] = False #用来正常显示负号
x = pd. Series (np.exp (np. arange (20) ) ) #原始数据
x.plot (label = u'原始数据图',legend = True)
plt.show()
x.plot (logy = True,label = u'原始数据图',legend = True)
plt.show()
(6)plot(yerr = error)
□功能:绘制误差条形图。
□使用格式:D.plot(yerr = error)
绘制误差条形图。D为Pandas的DataFrame或Series,代表着均值数据列,而error则是误差列,此命令在y轴方向画出误差棒图;类似地,如果设置参数xerr = error,则在x轴 方向画出误差棒图。
import matplotlib.pyplot as plt # 导入作图库
import numpy as np
import pandas as pd
%matplotlib inline
error = np. random. randn (10) #定义误差列
y = pd.Series (np. sin (np. arange (10) ) ) #均值数据列
y .plot (yerr = error) #绘制误差图
plt.show()
小结
数据质量分析要求我们拿到数据后先检测是否存在缺失值和异常值;数据特征分析要求我们在数据挖掘建模前,通过频率分布分析、对比分析、帕累托分析、周期性分析、相关性分析等方法,对采集的样本数据的特征规律进行分析,以了解数据的规律和趋势,为数据挖掘的后续环节提供支持。
在数据可视化中,由于主要使用Pandas作为数据探索和分析的工具,因此我们介绍的作图工具都是Matplotlib和Pandas结合使用。一方面,Matplotlib是作图工 具的基础,Pandas作图依赖于它;另一方面,Pandas作图有着简单直接的优势,因此,两者 相互结合,往往能够以最高的效率作出符合我们需要的图。