在python中,主要两个库用于数据探索,一个是Pandas(用于数据分析,这可能是数据分析领域最强的python库),另一个是Matplotlib(用于数据可视化,绘制图表,起源于MATLAB)。
1.基本统计特征函数
下面介绍的函数主要作为Pandas的两大基本对象Series和DataFrame的方法出现。
方法名 | 函数功能 |
sum() | 计算和(按列) |
mean() | 计算平均数(按列) |
var() | 计算方差(按列) |
std() | 计算标准差(按列) |
corr() | 计算相关系数矩阵 |
cov() | 计算协方差矩阵 |
skew() | 计算三阶矩 |
kurt() | 计算四阶矩 |
describe() | 给出基本描述 |
给出如下数据。
测试代码:
# -*- coding: utf-8 -*-
import pandas as pd
source = './test.xlsx'
data = pd.read_excel(source, index_col='ID')
print("打印数据类型")
print(type(data))
data_0 = data["A"]
print("打印数据类型")
print(type(data_0))
# 求和
print("求和")
print(data.sum())
print(data_0.sum())
print("计算算数平均数")
# 计算算数平均数
print(data.mean())
print(data_0.mean())
# 计算方差
print("计算方差")
print(data.var())
print(data_0.var())
# 计算标准差
print("计算标准差")
print(data.std())
print(data_0.std())
# 计算相关系数
print("计算相关系数")
# method为计算方法,可选为pearson,kendall,spearman
print(data.corr(method='pearson'))
print(data["A"].corr(data["B"]))
# 计算协方差矩阵
print("计算协方差矩阵")
print(data.cov())
print(data.loc[101].cov(data.loc[102]))
# 计算阶矩
print("计算阶矩")
print(data.skew())
print(data_0.kurt())
# 基本统计量
print("基本统计量")
print(data.describe())
print(type(data.describe()))
print(data.describe().loc["mean"])
运行结果:
2.拓展统计特征函数
数据类型拥有的累计函数。
方法名 | 函数功能 |
cumsum() | 依次求前n个数的和 |
cumprod() | 依次求前n个数的积 |
cummax() | 依次求前n个数的最大值 |
cummin() | 依次求前n个数的最小值 |
Pandas拥有的累计函数。
pd.rolling_method(data,k)
上面的method替换名字为基本函数名称如pd.rolling_var(data,k)为每k列计算一次方差。
注意:新版本Pandas已经将这些方法修改到基础类型中了,什么的语句此时应该data=data.rolling(k).var()。
测试代码:
import pandas as pd
import matplotlib.pyplot as plt
data = pd.Series(range(2, 9))
# 累计计算
print("累计计算")
print(data.cumsum())
print(data.cumprod())
print(data.cummax())
print(data.cummin())
运行结果:
3.统计作图函数
Pandas对Matplotlib命令做了不少简化,因此常常结合使用。
函数名 | 功能 |
plot(x,y,S) | 绘制线性二维图,折线图(y相对于x,即x为横轴,样式为S) |
pie(attrs) | 绘制饼图 |
hist(x,y) | 绘制条形图,x表示数据集,y表示组数 |
boxplot() | 绘制样本数据的箱型图 |
plot(yerr=error) | 绘制误差条形图 |
常用配置代码:
import matplotlib.pyplot as plt
# 显示中文,不加为方框
plt.rcParams['font.sans-serif'] = ['SimHei']
# 显示负号
plt.rcParams['axes.unicode_minus'] = False
# 创建图像区域,指定比例(可以不指定)
plt.figure(figsize=(8, 6))
测试代码:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 显示中文,不加为方框
plt.rcParams['font.sans-serif'] = ['SimHei']
# 显示负号
plt.rcParams['axes.unicode_minus'] = False
# 创建图像区域,指定比例(可以不指定)
plt.figure(figsize=(8, 6))
# 绘制线性图
x = np.linspace(0, 2*np.pi, 50)
y = np.sin(x)
plt.plot(x, y, 'bp--')
plt.show()
# 也可以直接用DataFrame或者Series调用plot方法,指定绘图类型(kind),默认index为横坐标
plt.figure()
data = pd.DataFrame([[1, 2, 3], [2, 3, 4]])
data.plot(kind='line', )
plt.show()
# 饼图
plt.figure()
labels = ["A", "B", "C", "D"]
sizes = [15, 30, 45, 10]
colors = ['yellow', 'green', 'lightskyblue', 'lightcoral']
explode = [0, 0.1, 0, 0]
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90)
plt.axis('equal')
plt.show()
# 条形图
plt.figure()
x = np.random.randn(1000)
plt.hist(x, 10)
plt.show()
# 箱型图
plt.figure()
D = pd.DataFrame([x, x+1]).T
D.plot(kind='box')
plt.show()
# 误差条形图
error = np.random.randn(10)
y = pd.Series(np.sin(np.arange(10)))
y.plot(yerr=error)
plt.figure()
plt.show()
运行结果:
具体代码包括实战项目可以查看我的github。