Chapter2 Python数据分析工具
序言
Python本身的数据分析功能不强,需要安装一些第三方扩展库来增强它的能力。
如果安装了Anaconda发行版,那么它自带了以下库:Numpu、Scipy、Matplotlib、Pandas、Scikit-Learn。
本章主要简单介绍这些库,在后面的章节中,会通过各种案例对这些库的使用进行更深入的说明。废话不多说,开始我的表演了!
1. Numpy
Python并没有提供数组功能。虽然列表可以完成基本的数组功能,但它不是真正的数组,而在数据量较大时,使用列表的速度就会慢得让人难以接受。为此,Numpy提供了真正的数组功能,以及对数据进行快速处理的函数。Numpy还是很多高级的扩展库的依赖库,后面章节介绍的Scipy、Matplotlib、Pandas都依赖于它。值得强调的是,Numpy内置函数处理数据的速度是C语言级别的,因此在编写程序的时候,应当尽量使用它的内置函数,避免出现效率瓶颈的现象。
在Windows中,Numpy的安装跟普通的第三方库安装一样:
pip install numpy
也可自行下载源代码,然后用:
python setup.py install # 安装
在Linux下上述方面也是可行的。此外,很多Linux发行版的软件源中都有Python常见的库,因此还可以通过Linux自带的软件管理器进行安装,如在Ubuntu下可以用:
sudo apt-get install python-numpy
安装。安装完成以后,就可以进行Numpy的基本操作了。
# Numpy-----提供数组支持,以及对数据进行快速处理的函数
import numpy as np
a = np.array([2, 0, 2, 0]) # 创建数组
print(a) # 输出数组
print(a[:3]) # 引用前三个数字(切片)
print(a.min()) # 输出a的最小值
a.sort() # 将a的元素从小到大排序,此操作直接修改a, 因此这时候a为[0, 0, 2, 2]
print(a)
b = np.array([[1, 2, 3], [4, 5, 6]]) # 创建二维数组
print(b*b) # 输出数组的平方阵,即[[1, 4, 9],[16, 25, 36]]
[2 0 2 0] # 输出数组
[2 0 2] # 引用前三个数字(切片)
0 # 输出a的最小值
[0 0 2 2] # 将a的元素从小到大排序
[[ 1 4 9]
[16 25 36]] # 输出数组的平方阵
2.Scipy
如果说Numpy让Python有了Matlab的味道,那么Scipy就让Python真正地成为了半个Matlab了。Numpy提供了多维数组的功能,但它只是一般的数组,并不是矩阵。例如,当两个数组相乘时,只是对应的元素相乘,而不是矩阵乘法。Scipy提供了真正的矩阵,以及大量基于矩阵运算的对象和函数。
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) # 输出结果,为array([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