python中主要数据探索函数在pandas和matplotlib两个库中。其中前者主要对数据进行分析,后者主要进行数据可视化。本节结合两个库进行初步的整理。
(提一嘴:matplotlib里面默认执行的操作对象是matrix矩阵,所以即使是一个数也可以称为矩阵)
一些基本的统计特征函数
以下这些函数主要作为pandas的对象DataFrame或Series的方法出现。
sum() | 默认按列计算数据样本的和 | D.sum() |
mean() | 计算数据样本的平均值 | D.mean() |
var() | 计算数据样本的方差 | D.var() |
std() | 计算数据样本的标准差 | D.std() |
corr() | 计算数据样本的相关系数矩阵(默认是Spearman) | D.corr(method='pearson') S1.corr(S2,method='pearson') |
cov() | 计算数据样本的协方差矩阵 | D.cov() S1.cov(S2) |
skew() | 计算数据样本的偏度 | D.skew() |
kurt() | 计算数据样本的峰度 | D.kurt() |
describe() | 给出数据样本的基本描述 | D.describe() |
其中,D表示DataFrame类型的数据对象,S表示Series的数据对象。以上这些方法中仍然含有很多的默认值可以修改。
以下展示一些基本统计函数的实践代码:
# 代码3-10 计算两个列向量的相关系数
import pandas as pd#导入pandas库并且用pd标记
D = pd.DataFrame([range(1, 8), range(2, 9)]) # 生成样本D,用pandas库中的DataFrame方法生成一个严格本,0行为1~7,1行为2~8
print(D)
print(D.corr(method='spearman')) # 计算相关系数矩阵,得出的结果是矩阵,计算每一个数与每一个数实践的Spearman秩相关系数
S1 = D.loc[0] # 提取第一行
S2 = D.loc[1] # 提取第二行
print(S1.corr(S2, method='pearson')) # 计算S1、S2的相关系数,两个Series对象的相关系数是一个对象
# 代码3-11 计算6×5随机矩阵的协方差矩阵
import pandas as pd
import numpy as np
D = pd.DataFrame(np.random.randn(6, 5)) # 产生6×5随机矩阵np.random.randn(6, 5)
print(D)
print(D.cov()) # 计算协方差矩阵
print(D[0].cov(D[1])) # 计算第一列和第二列的协方差
# 代码3-12 计算6×5随机矩阵的偏度(三阶矩)∕峰度(四阶矩)
import numpy as np
import pandas as pd
D = pd.DataFrame(np.random.randn(6, 5)) # 产生6×5随机矩阵
print(D)
print(D.skew()) # 计算偏度
print(D.kurt()) # 计算峰度
# 代码3-13 6×5随机矩阵的describe
import pandas as pd
import numpy as np
D = pd.DataFrame(np.random.randn(6, 5)) # 产生6×5随机矩阵
print(D)
print(D.describe())
拓展统计特征函数
主要介绍两种:累积计算(cum)和滚动计算(pd.rolling_),其中cum系列函数是作为DataFrame或者Series对象的方法而出现的,因此命令格式为D.cum***()。而rolling_系列函数是pandas的函数,不是DataFrame或Series对象的方法,它的使用格式为pd.rolling_***(D,k),意思是每k列计算一次均值,滚动计算。
cumsum() | 依次给出前1,2,……n个数的和 |
cumprod() | 依次给出前1,2,……n个数的积 |
cummax() | 依次给出前1,2,……n个数的最大值 |
cummin() | 依次给出前1,2,……n个数的最小值 |
而对于rolling系列的算法,只要在之前的基本的统计函数前面加上rolling_就可,例如rolling_sum(),再如rolling_mean()。
例如如下代码:
# 代码3-14 pandas累积统计特征函数、移动窗口统计函数示例import pandas as pd
D=pd.Series(range(0, 20)) # 构造Series,内容为0~19共20个整数
print(D)
print(D.cumsum()) # 给出前n项和,这是一个一个个累计求和然后展示出来的方法
print(D.rolling(2).sum()) # 依次对相邻两项求和,是每两个两个求
统计绘图函数
下面介绍的是一些基本的绘图函数,是pandas库和Matplotlib库的结合使用。
先简单介绍一下各个绘图函数什么意思:
plot() | 绘制线性二维图,折线图 |
pie() | 绘制饼图 |
hist() | 绘制二维条形直方图,可显示数据的分配类型 |
boxplot() | 绘制样本数据的箱型图 |
plot(logy=True) | 绘制y轴的对数图形 |
plot(yerr=error) | 绘制误差条形图 |
多提一句,在每次使用这些绘图函数时,一般都要使用一些加载代码,这个东西比较的固定。
# 代码3-15 绘图之前需要加载的代码
import matplotlib.pyplot as plt # 导入绘图库
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.figure(figsize = (7, 5)) # 创建图像区域,指定比例
以下具体展示每个函数的使用方法:
1.plot
一共有两种使用格式。
(1)plt.plot(x,y,S)
这种是plot函数最基础的使用方法,其中x是自变量,y是因变量,S是绘制图形的类型、样式和颜色。
详情请见以下博客。
Python直接使用plot()函数画图-CSDN博客一、plot()函数的认识在使用Python进行数据可视化编程中matplotlib库是我们用来对数据进行画图常用的第三方库。其中含有各类函数也就是不同类型的图形,要使用matplotlib库中的函数就需要了解函数所需要数据的格式,这也是我们学习matplotlib库的重点。直接使用plot()函数画图,是对于一般的简单数据。我们可以采用直接调用plot()函数对列表数据进行直接画图。初期学习直接使用plot()函数能便于我们对后面图形学习奠定函数的参数及基础。matplotlib图的组成:https://blog.csdn.net/Sheenky/article/details/123976807?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167861432216782425142242%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167861432216782425142242&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-123976807-null-null.142^v73^insert_down1,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=plot%EF%BC%88%EF%BC%89&spm=1018.2226.3001.4187(2)D.plot(kind='***')
表示对D进行***类型的绘图。其中D是DataFrame类型或者是Series类型。有点自动生成的意味。同时在使用这种kind方法之后还可以使用上面提到的plot(x,y,S)的一些命令。
line | 线 |
bar | 条形 |
barh | 水平方向的条形图 |
hist | 直方图 |
box | 箱型图 |
kde | 密度图 |
area | 区域图 |
pie | 饼状图 |
举个例子:
我遇到的问题
解决办法:
没有在绘图前加载需要加载的代码。
具体的代码如下:
# 代码3-16 绘制一条蓝色的正弦虚线
# 代码3-15 绘图之前需要加载的代码
import matplotlib.pyplot as plt # 导入绘图库
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.figure(figsize = (7, 5)) # 创建图像区域,指定比例
#一定要提前加载这些代码,这些代码是绘图库的代码
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),其中size是一个列表,记录各个扇形的面积比例。pie()函数有很多丰富的参数。
一些具体的参数请参考如下链接。
Matplotlib——饼图pie()函数_上课不要睡觉了的博客-CSDN博客**饼图(扇形图)**是一种常见的可以表示离散变量各水平占比情况的一种统计图。Matpllotlib提供了pie()函数用于绘制饼图。import matplotlib.pyplot as plt_ = plt.pie(range(5))plt.show()pie()提供一些详细选项如下。plt.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=Falsehttps://blog.csdn.net/XQC_KKK/article/details/123550644?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167861569716800225533395%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167861569716800225533395&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-123550644-null-null.142^v73^insert_down1,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=pie%EF%BC%88%EF%BC%89&spm=1018.2226.3001.4187
具体的代码展示如下:
import matplotlib.pyplot as plt # 导入绘图库
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.figure(figsize = (7, 5)) # 创建图像区域,指定比例# 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可以是整数也可以是列表。如果是整数的话,表示将x均分为y组;如果是列表,列表中各个数字为分组的边界点,也就是手动设置分界点。
举个例子,具体代码如下。
# 代码3-18 绘制二维条形直方图import matplotlib.pyplot as plt # 导入绘图库
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.figure(figsize = (7, 5)) # 创建图像区域,指定比例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')
具体代码如下:
# 代码3-19 绘制箱型图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)
使用格式:D.plot(logx=True)或者D.plot(logy=True)
D为pandas的DataFrame或者Series,这个函数表示对x轴或者y轴使用对数刻度(以10为底)。
具体的代码展示如下:
我遇到的问题:
不了解arrange()函数的用法
解决办法:
https://blog.csdn.net/qianwenhong/article/details/41414809?ops_request_misc=&request_id=&biz_id=102&utm_term=arrange%E5%87%BD%E6%95%B0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-6-41414809.142^v73^insert_down1,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187https://blog.csdn.net/qianwenhong/article/details/41414809?ops_request_misc=&request_id=&biz_id=102&utm_term=arrange%E5%87%BD%E6%95%B0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-6-41414809.142^v73^insert_down1,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187代码如下:
我遇到的问题:
不了解subplot()函数的用法
解决办法:
matlab绘图 subplot函数使用方法_平平无奇的小女子~的博客-CSDN博客在平铺位置创建坐标轴语法subplot(m,n,p)subplot(m,n,p,‘replace’)subplot(m,n,p,‘align’)subplot(m,n,p,ax)subplot(‘Position’,pos)subplot(___,Name,Value)ax = subplot(___)subplot(ax)说明①subplot(m,n,p) 将当前图形划分为 m×n 网格,并在 p 指定的位置创建坐标轴。MATLAB® 按行号对子图位置进行编号。第一个子图是第一行的第https://blog.csdn.net/onlyfanlala/article/details/121706740?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167862455216800227451125%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167862455216800227451125&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-121706740-null-null.142^v73^insert_down1,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=subplot&spm=1018.2226.3001.4187
我遇到的问题:
不了解plot()函数中legend函数的用法
解决办法:
具体代码展现如下:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
import numpy as np
import pandas as pdx = pd.Series(np.exp(np.arange(20))) # 原始数据
plt.figure(figsize = (8, 9)) # 设置画布大小
ax1 = plt.subplot(2, 1, 1)#subplot(m,n,p) 将当前图形划分为 m×n 网格,并在 p 指定的位置创建坐标轴。
#这里的数字不是坐标值的数字,而是描述起始点的相对位置。是在画布的这个位置开始描述函数,画函数曲线。
x.plot(label = '原始数据图', legend = True)#legend = True用于添加图例ax1 = plt.subplot(2, 1, 2)
x.plot(logy = True, label = '对数数据图', legend = True)#这里的logy是指对y进行log化
plt.show()
运行结果如下:
6.plot(yerr=error)
使用格式为D.plot(yerr=error)。其中D为DataFrame或Series,yerr=error表示在y轴方向画出误差棒图,也可以设置为xerr=error,表示在x轴方向画出误差棒图。
举个例子:
# 代码3-21 绘制误差棒图import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
import numpy as np
import pandas as pderror = np.random.randn(10) # 定义误差列
y = pd.Series(np.sin(np.arange(10))) # 均值数据列
y.plot(yerr = error) # 绘制误差图
plt.show()
具体的运行结果如下: