阅读提示
三、Python主要数据探索函数
Python中用于数据探索的库主要是Pandas(数据分析和Matplotlib(数据可视化))
1、基本统计特征函数
统计特征函数用于计算数据的均值、方差、标准差、分位数相关系数和协方差等,这些统计特征能反映出数据的整体分布本小节所介绍的统计特征函数如下表所示,它们主要作为Pandas的对象DataFrame或Series的方法出现。
方法名 | 函数功能 | 所属库 |
---|---|---|
sum() | 计算数据样本的综合(按列) | Pandas |
mean() | 计算数据样本的算术平均 | Pandas |
var() | 计算数据样本的方差 | Pandas |
std() | 计算数据样本的标准差 | Pandas |
corr() | 计算数据样本的Spearman(Person)相关系数矩阵 | Pandas |
cov() | 计算数据样本的协方差矩阵 | Pandas |
skew() | 样本值的偏度(三阶矩阵) | Pandas |
kurt() | 样本值的峰度(四阶矩阵) | Pandas |
describe() | 给出样本的基本描述(基本统计量如均值、标准差等) | 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、corr
使用格式: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
D.corr(method='pearson') # 计算相关系数矩阵
S1 = D.loc[0]
S2 = D.loc[1] # 提取第二行
print(S1.corr(S2, method='pearson')) # 计算S1 S2的相关系数
5、cov
使用格式:D.cov()
样本D可为DataFrame,返回协方差矩阵;S1.cov(S2) S1、S2均为Series,这种格式指定计算两个Series 之间的协方差。
实例:
import pandas as pd
D = pd.DataFrame(np.random.randn(6, 5)) # 产生6*5的随机矩阵
print(D.cov()) # 计算协方差矩阵
print('========================================')
print(D[0].cov(D[1])) # 计算第一列和第二列的协方差
结果:
0 1 2 3 4
0 0.742496 -0.015836 -0.253130 -0.536648 -0.424968
1 -0.015836 1.336934 -0.339149 0.241932 0.276907
2 -0.253130 -0.339149 0.360729 0.168980 0.125558
3 -0.536648 0.241932 0.168980 0.488131 0.429641
4 -0.424968 0.276907 0.125558 0.429641 0.422932
========================================
-0.015835749483391982
Process finished with exit code 0
6、skew/kurt
使用格式:D.skew()/D.kurt()
计算样本D的偏度(三阶矩) /峰度(四阶矩),样本D可为DataFrame或Series。
实例:
计算6 * 5随机矩阵的偏度(三矩阵) / 峰度(四矩阵)
import numpy as np
D = pd.DataFrame(np.random.randn(6, 5)) # 产生6*5的随机矩阵
print(D.skew()) # 样本的偏度
print('====================================')
print(D.kurt()) # 样本的峰度
结果:
0 0.302379
1 -0.878279
2 0.489669
3 -0.179533
4 -0.495596
dtype: float64
====================================
0 -1.169185
1 -1.879734
2 -1.762360
3 -0.025193
4 -0.454343
dtype: float64
Process finished with exit code 0
7、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分位数。
实例:
给出6 * 5随机矩阵的describe
import numpy as np
D = pd.DataFrame(np.random.randn(6, 5))
print(D.describe()) #默认输出的是1/4,1/2.3/4分位数
print('================================')
print(D.describe(percentiles=[0.2, 0.4, 0.6, 0.8]))#可自定义输出的指定分位数
0 1 2 3 4
count 6.000000 6.000000 6.000000 6.000000 6.000000
mean -0.771062 -0.026751 0.140886 -0.427550 -0.037832
std 1.011756 1.158380 1.117073 1.144170 1.043531
min -1.771862 -1.159860 -1.597854 -2.059976 -1.905252
25% -1.686237 -0.962643 -0.332456 -1.235530 -0.316053
50% -0.843122 -0.220491 0.270780 -0.102965 0.184622
75% 0.008876 0.655342 0.610429 0.376142 0.710032
max 0.506134 1.703078 1.711499 0.777811 0.906790
================================
0 1 2 3 4
count 6.000000 6.000000 6.000000 6.000000 6.000000
mean -0.771062 -0.026751 0.140886 -0.427550 -0.037832
std 1.011756 1.158380 1.117073 1.144170 1.043531
min -1.771862 -1.159860 -1.597854 -2.059976 -1.905252
20% -1.762736 -0.992227 -0.472198 -1.581288 -0.436652
40% -1.456740 -0.873891 0.086769 -0.198258 0.045742
50% -0.843122 -0.220491 0.270780 -0.102965 0.184622
60% -0.229505 0.432909 0.454791 -0.007672 0.323503
80% 0.088336 0.729486 0.662308 0.504080 0.838874
max 0.506134 1.703078 1.711499 0.777811 0.906790
Process finished with exit code 0
2、扩展统计特征函数
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累积统计特征函数
方法名 | 函数功能 | 所属库 |
---|---|---|
rolling_sum() | 计算数据样本的总和 | Pandas |
rolling_mean() | 数据样本的算数平均数 | Pandas |
rolling_var() | 计算数据样本的方差 | Pandas |
rolling_std() | 计算数据样本的标准差 | Pandas |
rolling_corr() | 计算数据样本的Spearman(Pearson)相关系数矩阵 | Pandas |
rolling_cov() | 计算数据样本的协方差矩阵 | Pandas |
rolling_skew() | 样本值的偏度(三阶矩阵) | Pandas |
rolling_kurt() | 样本值的峰度(四阶矩阵) | Pandas |
cum系列函数是作为DataFrame或Series对象的方法而出现的,因此命令格式为D.cumsum(),
rolling_系列是pandas的函数,不是DataFrame或Series对象的方法,因此,它们的使用格式为pd.rolling_mean(D, k),意思是每k列计算一次均值, 滚动计算。
实例:
import pandas as pd
D = pd.Series(range(0, 20)) # 构造Series,内容为0~19共20个整数
print(D.cumsum()) # 给出前n项和
0 0
1 1
2 3
3 6
4 10
5 15
6 21
7 28
8 36
9 45
10 55
11 66
12 78
13 91
14 105
15 120
16 136
17 153
18 171
19 190
dtype: int64
Process finished with exit code 0
3、统计作图函数
Python的主要作图库是Matplotlib,Pands基于Matplotlib对某些命令进行了简化。
作图函数名 | 作图函数功能 | 所属工具箱 |
---|---|---|
plot() | 绘制线性二维图,折线图 | Matplotlib/Pandas |
pie() | 绘制饼图 | Matplotlib/Pandas |
boxplot() | 绘制样本数据的箱型图 | Matplotlib/Pandas |
hist() | 绘制二维条形直方图 | Pandas |
plot(logy = True) | 绘制Y轴的对数图形 | Pandas |
plot(yerr = error) | 绘制误差条形图 | Pandas |
在作图前一般要加载以下代码:
import matplotlib.pyplot as plt # 导入作图库
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axex.unicode_minus'] = False # 用来正常显示负号
plt.figure(figsize=(7, 5)) # 创建图像区域,指定比例
#作图结束后使用plt.show()显示作图结果
(1)plot
功能:绘制线性二维图、折线图
使用格式: plt.plot(x, y, S)
这是Matplotlib通用的绘图方式,绘制y对于x (即以x为横轴的二维图形),
字符串参量S:
指定绘制时图形的类型、样式和颜色,常用的选项有: ’ b ’ 为蓝色、 ’ r ’ 为红色、’ g ‘为绿色、’ o ’ 为圆圈、’ + ‘为加号标记、’ - ‘为实线、’–’ 为虚线。当x、y均为实数同维向量时,则描出点( x ( i ) ,y ( i ) ),然后用直线依次相连。
D.plot(kind = ‘box’)
这里使用的是DataFrame或Series对象内置的方法作图,默认以Index为横坐标,每列数据为纵坐标自动作图,通过kind参数指定作图类型,支持line(线)、bar(条形)、barh、hist(直方图)、box (箱线图)、kde (密度图)和area、pie (饼图)等,同时也能够接受plt.plot()中接受的参数。因此,如果数据已经被加载为Pandas中的对象,那么以这种方式作图是比较简洁的。
实例:
import matplotlib.pyplot as plt
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是一个列表,记录各个扇形的比例。
实例:
通过向量[15,30,45,10]绘制饼图,注上标签,并将第二部分分离出来
import matplotlib.pyplot as plt
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可以是整数,表示均匀分为n组;也可以是列表,列表各个数字为分组的边界点(即手动指定分界点)。
实例:
绘制二维条形直方图,随机生成有1000个元素的服从正态分布的数组,分成10组绘制直方图
import matplotlib.pyplot as plt
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)。 其中,盒子的上、下四分位数和中值处有一 条线段。箱形末端延伸出去的直线称为须,表示盒外数据的长度。如果在须外没有数据,则在须的底部有一点,点的颜色与须的颜色相同。
实例:
绘制样本数据的箱型图,样本由两组正态分布的随机数据组成。其中一组数据的均值为0,标准差为1,另一组数据的均值为1,标准差为1。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(1000) # 1000个服从正态分布的随机数
plt.hist(x, 10) # 分成10组进行绘制直方图
plt.show()
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
x = np.random.randn(1000) # 1000个服从正态分布的随机数
D = pd.DataFrame([x, x + 1]).T # 构造两列的DataFrame
D.plot(kind='box') # 调用Series内置的作图方法画图,用kind参数指定箱型图
plt.show()
效果图:
(5)plot(logx = True) / plot(logy = True)
功能: 绘制x或y轴的对数图形
使用格式: D.plot(logx = True)/ D.plot(logy = True)
对x轴(y轴)使用对数刻度(以10为底), y轴(x轴)使用线性刻度,进行plot函数绘图,D为Pandas的DataFrame或者Series。
实例:
# coding=utf8
import matplotlib.pyplot as plt # 导入作图库
import numpy as np
import pandas as pd
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
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
error = np.random.randn(10) # 定义误差列
y = pd.Series(np.sin(np.arange(10))) # 均值数据列
y.plot(yerr=error) # 绘制误差图
plt.show()
效果图:
小结:
本次从应用的角度出发,从数据质量分析和数据特征分析两个方面对数据进行探索分析,最后介绍了Python常用的数据探索函数及用例。数据质量分析要求我们拿到数据后先检测是否存在缺失值和异常值;数据特征分析要求我们在数据挖掘建模前,通过频率分布分析、对比分析、帕累托分析、周期性分析、相关性分析等方法,对采集的样本数据的特征规律进行分析,以了解数据的规律和趋势,为数据挖掘的后续环节提供支持。
要特别说明的是,在数据可视化中,由于主要使用Pandas作为数据探索和分析的工具,因此我们介绍的作图工具都是Matplotlib和Pandas结合使用。一方面,Matplotlib 是作图工具的基础,Pandas 作图依赖于它;另一方面,Pandas 作图有着简单直接的优势,因此,两者相互结合,往往能够以最高的效率作出符合我们需要的图。
★学习Python数据挖掘纯属个人爱好,如有不足或错误请指出谢谢。