目录
前言
之前写了那么多的关于金融数据分析的实战案例,我想是时候将这些例子中的使用到的python基础知识进行总结了……
想要学好数据分析,必须掌握的numpy、pandas、matplotlib三大数据分析相关库的知识,收藏这一篇万字长文就足够了!!!
一、numpy
numpy为python提供了大量高效实现复杂数组和矩阵运算的函数
1、数组创建
import numpy as np
# 32位整数型数组
a = np.array([1,2,3])
print('a = ', a)
print('数组元素类型:', a.dtype)
Out: a = [1 2 3]
数组元素类型:int32
# 浮点数型数组
b = np.array([1.2, 2.3, 3.4])
print('b = ', b)
print('数组元素类型:', b.dtype)
Out: b = [1.2 2.3 3.4]
数组元素类型:float64
# 复数型数组
c = np.array([[1,2],[3,4]], dtype=np.complex64)
print('c = ', c)
print('数组元素类型:', c.dtype)
Out: c = [[1.+0.j 2.+0.j]
[3.+0.j 4.+0.j]]
数组元素类型:complex64
# 二维数组
d = np.array([(1.2, 2.3),(3, 4)])
print('d = ', d)
print('数组元素类型:', d.dtype)
Out: d = [[1.2 2.3]
[3. 4. ]]
数组元素类型: float64
# 生成3*4的二维数组,并用0填充
e = np.zeros((3,4))
print('e = ', e)
print('数组元素类型:', e.dtype)
e = [[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
数组元素类型: float64
# 生成2*3*4的三维数组,并用1填充,元素类型限定为int16
f = np.ones((2,3,4), dtype=np.int16)
print('f = ', f)
print('数组元素类型:', f.dtype)
f = [[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]]
数组元素类型: int16
# 生成数组h,取值范围[0,2),步长0.3
h = np.arrange(0, 2, 0.3)
print('h = ', h)
print('数组元素类型:', h.dtype)
h = [0. 0.3 0.6 0.9 1.2 1.5 1.8]
数组元素类型: float64
numpy使用ndarray类对象来处理多维数组,ndarray一些可以直接访问的属性:
属性名 | 含义 |
---|---|
ndarray.ndim | 数组轴的个数 |
ndarray.shape | 数组的形状 |
ndarray.size | 数组中元素的总数 |
ndarray.dtype | 数组中元素的数据类型 |
ndarray.itemsize | 数组中每个元素的字节大小 |
ndarray.data | 实际数组元素的缓冲区 |
# 数组x,取值范围[0,14),步长1,
x = np.arange(15).reshape(3,5)
print('x = ', x)
print('数组轴的个数:',x.ndim)
print('数组的形状:',x.shape)
print('数组中元素的总数:',x.size)
print('数组中元素的数据类型:',x.dtype)
print('数组中每个元素的字节大小:',x.itemsize)
print('实际数组元素的缓冲区:',x.data)
x = [[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]]
数组轴的个数: 2
数组的形状: (3, 5)
数组中元素的总数: 15
数组中元素的数据类型: int32
数组中每个元素的字节大小: 4
实际数组元素的缓冲区: <memory at 0x0000024C2033D708>
numpy数组输出基本规则:一维数组输出成行,二维数组输出为矩阵,三维数组输出为矩阵列表。
2、数组运算
a = np.array([20,30,40,50])
b = np.arange(4)
print('a = ',a)
print('b = ',b)
a = [20 30 40 50]
b = [0 1 2 3]
# 数组减法运算
c = a - b
print('c = (a - b) = ',c)
c = (a - b) = [20 29 38 47]
# 数组元素乘方
b_2 = b**2
print('b_2 = b * b = ',b_2)
b_2 = b * b = [0 1 4 9]
# 数组元素求正弦值
a_sin = np.sin(a)
print('a_sin = sin(a) = ',a_sin)
a_sin = sin(a) = [ 0.91294525 -0.98803162 0.74511316 -0.26237485]
# 数组元素条件运算
a_cond = (a<35)
print('a_cond = (a<35) = ',a_cond)
# 输出数组中满足条件的元素
print('a数组中小于35的元素是:',a[a<35])
a_cond = (a<35) = [ True True False False]
a数组中小于35的元素是: [20 30]
# 数组加法、乘法运算
# 'a+=b'相当于'a=a+b'
# 其他运算同理
f = np.ones((2,3),dtype=np.int)
g = np.random.random((2,3))
print('f = ',f)
print('g = ',g)
f*=3
g+=f
print('f = ',f)
print('g = ',g)
f = [[1 1 1]
[1 1 1]]
g = [[0.48818655 0.14805382 0.24190023]
[0.23753093 0.87251939 0.53028234]]
f = [[3 3 3]
[3 3 3]]
g = [[3.48818655 3.14805382 3.24190023]
[3.23753093 3.87251939 3.53028234]]
# 数组的和、最大值、最小值
print('g.sum()=',g.sum())
print('g.min()=',g.min())
print('g.max()=',g.max())
g.sum()= 20.518473272469617
g.min()= 3.1480538249037986
g.max()= 3.872519388164515
# 按指定的轴axis进行运算
print('axis=0,表示按列进行运算,g.max(axis=0)=',g.max(axis=0))
print('axis=1,表示按行进行运算,g.max(axis=1)=',g.max(axis=1))
axis=0,表示按列进行运算,g.max(axis=0)= [3.48818655 3.87251939 3.53028234]
axis=1,表示按行进行运算,g.max(axis=1)= [3.48818655 3.87251939]
# 对数组进行排序
h = np.random.random(15)
print('h = ',h)
print('排序后的h = ',np.sort(h))
h = [0.05010685 0.16184821 0.59109447 0.98844731 0.68039122 0.13331593
0.61283281 0.49090379 0.30930569 0.0817642 0.30148594 0.18140083
0.03374513 0.75961934 0.990532 ]
排序后的h = [0.03374513 0.05010685 0.0817642 0.13331593 0.16184821 0.18140083
0.30148594 0.30930569 0.49090379 0.59109447 0.61283281 0.68039122
0.75961934 0.98844731 0.990532