第二章 Python数据分析简介
2.1 python数据分析工具
扩展库 | 简介 |
---|---|
Numpy | 提供数组支持,以及相应的高效的处理函数 |
Scipy | 提供矩阵支持,以及矩阵相关的数值计算模块 |
Matplotlib | 强大的数据可视化工具、作图等 |
Pandas | 强大、灵活的数据分析和探索工具 |
StatsModels | 统计建模和计量经济学,包括描述统计、统计模型估计和推断 |
Scikit-Learn | 支持回归、分类、聚类等强大的机器学习库 |
Keras | 深度学习库,用于建立神经网络以及深度学习模型 |
Gensim | 用来做文本主题模型的库,文本挖掘可能用到 |
2.1.1 Numpy
基本操作
import numpy as np
a = np.array([2, 0, 1, 5]) # 创建数组
print(a) # 打印
print(a[:3]) # 对数组切片,输出前三个数组元素
print(a.min()) # 输出a的最小值
a.sort() # 将a的元素从小到大排序,会直接修改a
b = np.array([[1, 2, 3], [4, 5, 6]]) # 创建二维数组
print(b * b) # 输出数组的平方阵,这里是对应元素相乘
'''
输出结果:
[2 0 1 5]
[2 0 1]
0
[[ 1 4 9]
[16 25 36]]
'''
2.1.2 Scipy
# Scipy求解非线性方程组和数值积分 2x1-x2^2=1,x1^2-x2=2
from scipy.optimize import fsolve # 导入求解方程组的函数
def f(x): # 定义要求解函数
x1 = x[0]
x2 = x[1]
return [2*x1 - x2**2 -1, x1**2 - x2 - 2]
result = fsolve(f, [1, 1]) # 输入初值[1,1]并求解
print(result) # 输出 结果[1.91963957 1.68501606]
# 数值积分
from scipy import integrate # 导入积分函数
def g(x):
return (1-x**2)**0.5
pi_2, err = integrate.quad(g, -1, 1) # 积分结果和误差
print(pi_2 * 2) # 积分结果为圆周率的一半
'''
输出结果
[1.91963957 1.68501606]
3.1415926535897967
'''
2.1.3 Matplotlib
# Matplotlib绘图
import matplotlib.pyplot as plt # 导入
x = np.linspace(0, 10, 1000) # 自变量
y = np.sin(x) + 1 # 因变量y
z = np.cos(x**2) + 1 # 因变量z
plt.figure(figsize=(8, 4)) # 设置图像大小
plt.plot(x, y, label='$\sin(x+1)$', color='red', linewidth=2) # 作图,设置标签、线条颜色,线条宽度
plt.plot(x, z, 'b--', label='$\cos(x^2+1)$')
plt.xlabel('Time(s)') # x轴名称
plt.ylabel('Volt') # y轴名称
plt.title('A Simple Example') # 标题
plt.ylim(0, 2.2) # 显示的y轴范围
plt.legend() # 显示图例
plt.show() # 显示作图结果
2.1.4 Pandas
Python最主要的数据分析——pandas
pandas基本的数据结构是Series和DataFrame。前者是序列,类似一维数组;后者是二维表格,类似二维数组,每一列是一个Series。
# Pandas简单例子
import pandas as pd
s = pd.Series([1, 2, 3], index=['a', 'b', 'c']) # 创建一个序列s
d = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c']) # 创建一个表
d2 = pd.DataFrame(s) # 可用序列创建表格
print(d.head()) # 预览前5行数据
print(d.describe()) # 数据基本统计量
d = pd.read_excel('学生基本信息.xls') # 读取Excel文件,创建DataFrame对象,这里读取官方提供的数据文件
print(d)
# 也可以用pd.read_csv() 读取csv文件
'''
输出
a b c
0 1 2 3
1 4 5 6
a b c
count 2.00000 2.00000 2.00000
mean 2.50000 3.50000 4.50000
std 2.12132 2.12132 2.12132
min 1.00000 2.00000 3.00000
25% 1.75000 2.75000 3.75000
50% 2.50000 3.50000 4.50000
75% 3.25000 4.25000 5.25000
max 4.00000 5.00000 6.00000
名字 班级 性别 身高(cm) 体重(kg)
0 小王 高一(1)班 男 160 45
1 丽丽 高一(2)班 女 158 48
2 王涛 高一(5)班 男 170 55
3 晓莹 高一(8)班 女 165 50
4 宁诚 高一(3)班 女 168 49
5 叶思雨 高一(9)班 女 155 45
6 赵锋 高一(4)班 男 162 52
7 陆露 高一(6)班 女 150 55
8 吴成 高一(7)班 男 172 51
'''
2.1.5 StatsModels
StatsModels更加注重数据的统计建模分析,支持与Pandas进行数据交互。
# 用StatsModels 进行ADF平稳检验
from statsmodels.tsa.stattools import adfuller as ADF # 导入ADF检验
print(ADF(np.random.rand(100))) # 返回的结果有ADF值、p值等
'''
输出:
(-9.464661879817763, 4.261843454585112e-16, 0, 99, {'1%': -3.498198082189098, '5%': -2.891208211860468, '10%': -2.5825959973472097}, 26.58397443489116)
'''
ADF检验是用于检测时间序列模型是否平稳,在之后的学习会涉及到
2.1.6 Scikit-Learn
Scikit-Learn 提供了完善的机器学习工具箱,包括数据预处理、分类、回归、聚类、预测和模型分析等。
# 创建机器学习模型
from sklearn.linear_model import LinearRegression # 导入线性回归模型
model = LinearRegression() # 建立线性回归模型
print(model)
Scikit-Learn提供的模型接口
- 所有模型提供的接口有:
- model.fit():训练模型,对于监督模型来说是fit(X,y),对于非监督模型来是fit(X)。
- 监督模型提供的接口有:
- model.predict(X_new):预测新样本
- model.predict_proba(X_new):预测概率,仅对某些模型有用(比如LR)
- model.score():得分越高,fit越好
- 非监督模型提供的接口有:
- model.transform():从数据中学到新的“基空间”
- model.fit_transform():从数据中学到新的基并将这个数据按照这组“基”进行转换
Scikit-Learn还提供了一些实例数据供于测试。
# 库提供的实例数据测试
from sklearn import datasets # 导入数据集
iris = datasets.load_iris() # 加载数据
print(iris.data.shape) # 查看数据集大小
from sklearn import svm # 导入svm模型
clf = svm.LinearSVC() # 建立线性svm分类器
clf.fit(iris.data, iris.target) # 用数据训练模型
clf.predict([[5.0, 3.6, 1.3, 0.25]]) # 训练模型之后,输入新数据进行预测
print(clf.coef_) # 查看训练好模型的参数
'''
输出
(150, 4)
[[ 0.18424588 0.4512314 -0.8079421 -0.45071554]
[ 0.05731289 -0.89596338 0.40326887 -0.95366612]
[-0.85067554 -0.98685598 1.38089201 1.86550333]]
'''
在这里程序会发出警告:
ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.warnings.warn(
参考ConvergenceWarning知道了解决方法:
修改:svm的LinearSVC的参数max_iter默认值为1000,改为更大的值,这里将其改为10000
clf = svm.LinearSVC(max_iter=10000)
程序不再警告
2.1.7 Keras
Keras是一个基于Theano的强大的深度学习库,利用它不仅仅可以搭建普通的神经网络,还可以搭建各种深度学习模型。
Keras依赖包除了Numpy、Scipy以外,还有Theano。
2.1.8 Gensim
Gensim是用来处理语言方面的任务,如文本相似度计算、LDA、Word2Vec等。
在这里不测试Keras和Gensim包,因为在pycharm中导入失败,为继续接下来的学习,计划等需要运用到该两个包时再进行查询安装。