《Python数据分析与挖掘实战》一3.3 Python主要数据探索函数

3.3 Python主要数据探索函数

Python中用于数据探索的库主要是Pandas(数据分析)和Matplotlib(数据可视化)。其中,Pandas提供了大量的与数据探索相关的函数,这些数据探索函数可大致分为统计特征函数与统计作图函数,而作图函数依赖于Matplotlib,所以往往又会跟Matplotlib结合在一起使用。本节对Pandas中主要的统计特征函数与统计作图函数进行介绍,并举例以方便理解。

3.3.1 基本统计特征函数

统计特征函数用于计算数据的均值、方差、标准差、分位数、相关系数和协方差等,这些统计特征能反映出数据的整体分布。本小节所介绍的统计特征函数如表3-8所示,它们主要作为Pandas的对象DataFrame或Series的方法出现。

(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之间的相关系数。
实例:计算两个列向量的相关系数,采用Spearman方法。
D = pd.DataFrame([range(1, 8), range(2, 9)]) #生成样本D,一行为1~7,一行为2~8
D.corr(method='spearson') #计算相关系数矩阵
S1 = D.loc[0] #提取第一行
S2 = D.loc[1] #提取第二行
S1.corr(S2, method='pearson') #计算S1、S2的相关系数
(6)cov
功能:计算数据样本的协方差矩阵。
使用格式:
D.cov()
样本D可为DataFrame,返回协方差矩阵;
S1.cov(S2) S1、S2均为Series,这种格式指定计算两个Series之间的协方差。
实例:计算6×5随机矩阵的协方差矩阵。

import numpy as np
D = pd.DataFrame(np.random.randn(6, 5)) #产生6×5随机矩阵
D.cov() #计算协方差矩阵
      0         1         2         3         4
0  1.745257 -0.299968  0.850216 -0.484931  1.068187
1 -1.453670  1.460928  0.347299  1.585089  0.595347
2 -0.751128  0.504498 -1.244944 -0.672183 -0.595296
3 -0.423802 -1.086470  0.637264  0.873043 -0.506736
4  0.969907  0.721997 -0.550993  1.033300 -0.903234
5 -0.705159  0.385077  0.120580  0.347470  2.036798
D[0].cov(D[1]) #计算第一列和第二列的协方差
0.5

(7)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随机矩阵
D.skew()
0   -0.210246
1   -0.348367
2   -1.152183
3   -0.378802
4   -0.859889
dtype: float64
D.kurt()
0   -0.191062
1   -1.831973
2    1.171797
3   -1.529854
4    1.494526
dtype: float64

(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分位数。
实例:给出6×5随机矩阵的describe。

import numpy as np
D = pd.DataFrame(np.random.randn(6, 5)) #产生6×5随机矩阵
D.describe()
          0         1         2         3         4
count  6.000000  6.000000  6.000000  6.000000  6.000000
mean   0.006958 -0.069822  0.113711 -0.168115 -0.584493
std    1.224979  1.017829  0.939980  1.173083  0.539911
min   -1.777763 -1.330542 -1.512842 -1.674685 -1.507229
25%   -0.669088 -0.937504 -0.202329 -1.109370 -0.721853
50%    0.176010  0.130924  0.472093  0.115791 -0.537366
75%    0.578993  0.650975  0.516907  0.538483 -0.305514
max    1.704960  1.119084  1.146215  1.272789  0.086585

3.3.2 拓展统计特征函数

除了上述基本的统计特征外,Pandas还提供了一些非常方便实用的计算统计特征的函数,主要有累积计算(cum)和滚动计算(pd.rolling_),见表3-8和表3-9。

其中,cum系列函数是作为DataFrame或Series对象的方法而出现的,因此命令格式为D.cumsum(),而rolling_系列是pandas的函数,不是DataFrame或Series对象的方法,因此,它们的使用格式为pd.rolling_mean(D, k),意思是每k列计算一次均值,滚动计算。
实例:

D=pd.Series(range(0, 20)) #构造Series,内容为0~19共20个整数
D.cumsum() #给出前n项和
0       0
1       1
2       3
3       6
……
19    190
dtype: int32
pd.rolling_sum(D, 2) #依次对相邻两项求和
0    NaN
1      1
2      3
3      5
……
19    37
dtype: float64

3.3.3 统计作图函数

通过统计作图函数绘制的图表可以直观地反映出数据及统计量的性质及其内在规律,如盒图可以表示多个样本的均值,误差条形图能同时显示下限误差和上限误差,最小二乘拟合曲线图能分析两变量间的关系。
Python的主要作图库是Matplotlib,在第2章中已经进行了初步的介绍,而Pandas基于Matplotlib并对某些命令进行了简化,因此作图通常是Matplotlib和Pandas相互结合着使用。本小节仅对一些基本的作图函数做一下简介,而真正灵活地使用应当参考书中所给出的各个作图代码清单。我们要介绍的统计作图函数如表3-8所示。

在作图之前,通常要加载以下代码。

import matplotlib.pyplot as plt #导入作图库
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通用的绘图方式,绘制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中的对象,那么以这种方式作图是比较简洁的。
实例:在区间(0≤x≤2π)绘制一条蓝色的正弦虚线,并在每个坐标点标上五角星。绘制图形如图3-13所示。

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是一个列表,记录各个扇形的比例。pie有丰富的参数,详情请参考下面的实例。
实例:通过向量[15, 30, 45, 10]画饼图,注上标签,并将第2部分分离出来。绘制结果如图3-14所示。

import matplotlib.pyplot as plt

# 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可以是整数,表示均匀分为n组;也可以是列表,列表各个数字为分组的边界点(即手动指定分界点)。
实例:绘制二维条形直方图,随机生成有1000个元素的服从正态分布的数组,分成10组绘制直方图。绘制结果如图3-15所示。

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。绘制结果如图3-16所示。

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参数指定箱形图box
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。
实例:构造指数函数数据使用plot(logy = True)函数进行绘图,绘制结果如图3-17所示。

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
import numpy as np
import pandas as pd

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轴方向画出误差棒图。
实例:绘制误差棒图。绘制结果如图3-18所示。

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
import numpy as np
import pandas as pd

error = np.random.randn(10) #定义误差列
y = pd.Series(np.sin(np.arange(10))) #均值数据列
y.plot(yerr = error) #绘制误差图
plt.show()

时间: 2024-11-02 12:36:47

《Python数据分析与挖掘实战》一3.3 Python主要数据探索函数的相关文章

《Python数据分析与挖掘实战》一3.1 数据质量分析

3.1 数据质量分析 数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础,没有可信的数据,数据挖掘构建的模型将是空中楼阁. 数据质量分析的主要任务是检查原始数据中是否存在脏数据,脏数据一般是指不符合要求,以及不能直接进行相应分析的数据.在常见的数据挖掘工作中,脏数据包括如下内容. 缺失值. 异常值. 不一致的值. 重复数据及含有特殊符号(如#.¥.*)的数据. 本小节将主要对数据中的缺失值.异常值和一致性进行分析. 3.1.1 缺失值分析

《Python数据分析与挖掘实战》一3.2 数据特征分析

3.2 数据特征分析 对数据进行质量分析以后,接下来可通过绘制图表.计算某些特征量等手段进行数据的特征分析. 3.2.1 分布分析 分布分析能揭示数据的分布特征和分布类型.对于定量数据,欲了解其分布形式是对称的还是非对称的,发现某些特大或特小的可疑值,可通过绘制频率分布表.绘制频率分布直方图.绘制茎叶图进行直观地分析:对于定性分类数据,可用饼图和条形图直观地显示分布情况.1.定量数据的分布分析对于定量变量而言,选择"组数"和"组宽"是做频率分布分析时最主要的问题,一

《Python数据分析与挖掘实战》一2.5 小结

2.5 小结 本章主要对Python进行简单介绍,包括软件安装.使用入门及相关注意事项和Python数据分析及挖掘相关工具箱.由于Python包含多个领域的扩展库,而且扩展库的功能也相当丰富,本章只介绍与数据分析及数据挖掘相关的一小部分,包括高维数组.数值计算.可视化.机器学习.神经网络和语言模型等.这些扩展库里面包含的函数在后续章节中会进行实例分析,通过在Python平台上完成实际案例来掌握数据分析和数据挖掘的原理,培养读者应用数据分析和挖掘技术解决实际问题的能力.

《Python数据分析与挖掘实战》一导读

前 言 为什么要写这本书LinkedIn对全球超过3.3亿用户的工作经历和技能进行分析后得出,目前最炙手可热的25项技能中,数据挖掘排名第一.那么数据挖掘是什么?数据挖掘是从大量数据(包括文本)中挖掘出隐含的.先前未知的.对决策有潜在价值的关系.模式和趋势,并用这些知识和规则建立用于决策支持的模型,提供预测性决策支持的方法.工具和过程.数据挖掘有助于企业发现业务的趋势,揭示已知的事实,预测未知的结果,因此"数据挖掘"已成为企业保持竞争力的必要方法. 但跟国外相比,由于我国信息化程度不太

《Python数据分析与挖掘实战》一3.4 小结

3.4 小结 本章从应用的角度出发,从数据质量分析和数据特征分析两个方面对数据进行探索分析,最后介绍了Python常用的数据探索函数及用例.数据质量分析要求我们拿到数据后先检测是否存在缺失值和异常值:数据特征分析要求我们在数据挖掘建模前,通过频率分布分析.对比分析.帕累托分析.周期性分析.相关性分析等方法,对采集的样本数据的特征规律进行分析,以了解数据的规律和趋势,为数据挖掘的后续环节提供支持. 要特别说明的是,在数据可视化中,由于主要使用Pandas作为数据探索和分析的工具,因此我们介绍的作图

《Python数据分析与挖掘实战》一2.1 搭建Python开发平台

2.1 搭建Python开发平台 2.1.1 所要考虑的问题 Python的官网:https://www.python.org/. 搭建Python开发平台有几个问题需要考虑,第一是选择什么操作系统,是Windows还是Linux?第二是选择哪个Python版本,是2.x还是3.x? 首先,来回答后一个问题.3.x是对2.x的一个较大的更新,可以认为,Python 3.x什么都好,就是它的部分代码不兼容2.x的,这使得不少好用的库都无法支持3.x(值得庆幸的是,越来越多的主流库已经开始支持3.x

《Python数据分析与挖掘实战》一2.3 Python数据分析工具

2.3 Python数据分析工具 Python本身的数据分析功能不强,需要安装一些第三方扩展库来增强它的能力.本书用到的库有Numpy.Scipy.Matplotlib.Pandas.Scikit-Learn.Keras和Gensim等,下面将对这些库的安装和使用进行简单的介绍. 如果读者安装的是Anaconda发行版,那么它已经自带了以下库:Numpy.Scipy.Mat-plotlib.Pandas和Scikit-Learn. 本章主要是对这些库进行简单的介绍,在后面的章节中,会通过各种案例

《Python数据分析与挖掘实战》一第2章 Python数据分析简介

第2章 Python数据分析简介 Python是一门简单易学且功能强大的编程语言.它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程.Python优雅的语法和动态类型,再结合它的解释性,使其在许多领域成为编写脚本或开发应用程序的理想语言. 要认识Python,首先得明确一点,Python是一门编程语言!这就意味着,原则上来说,它能够完成Matlab能够做的所有事情(因为大不了从头开始编写),而且在大多数情况下,同样功能的Python代码会比Matlab代码更加简洁.易懂:另一

《Python数据分析与挖掘实战》一2.2 Python使用入门

2.2 Python使用入门 限于篇幅,本书不可能详细地讲解Python的使用,而只能是针对本书涉及的数据挖掘案例所用到的代码进行基本讲解.如果读者是初步接触Python,并且用Python的目的就是数据挖掘,那么相信本节的介绍对你来说是比较充足的.如果读者需要进一步了解Python,或者需要运行更加复杂的任务,那么本书是不够的(例如,本书没有谈及到面向对象编程),请读者自行阅读相应的Python教程. 2.2.1 运行方式 本节示例代码使用的是Python 2.7.运行Python代码有两种方