近期由于要做数据分析相关的工作,看到网友的推荐利用Python进行数据分析这本书,于是就开始学习起来,为了自己能够查阅方便就就把本书代码敲进了博客里来,正在学习这本书的朋友同样也可以翻一翻看一下,从本书第三章开始Numpy入门写起。
import numpy as np
import pandas as pd
from numpy.random import randn
# 创建ndarray
data1 = [1,2,3]
arr1 = np.array(data1)
data2 = [[1,2,3,4],[5,6,7,8]]
arr2 = np.array(data2)
print(arr2.shape) # 显示出数组的维度
print(arr2.dtype) # 显示出数组数据类型
np.zeros((3, 6)) # 创建维度(3,6)并使用 0 填充
np.empty((2,3,2)) # 创建一个(2,3,2)的维度的值,里面填充的是一些垃圾数值
np.eye(5) # 创建一个5*5矩阵进行对角线为1 其余为0
arr3 = np.array([1,2,3],dtype=np.float64) # 固定数值类型创建一个ndarray
arr3 = arr3.astype(np.int64) # 数据类型转换
int_array = np.arange(1,19,5,dtype=np.int64) #指定初始,结束值,步长和类型
# 数值和标量之间的计算
arr = np.array([[1,2],[3,4]])
arr * arr # [[1,4],[9,16]]
arr - arr # [[0,0],[0,0]]
# 基本的索引和切片
arr = np.arange(10)
arr[5] # 5
arr[5:8] # array([5,6,7])
arr[5:8] = 12 # [0,1,2,3,4,12,12,12,8,9] 标量向后传值
arr_slice = arr[5:8] # 这个其实是这个数组的一个试图而非数组的复制
arr_slice[1] = 1234 # [0,1,2,3,4,5,1234,7,8,9]
arr_slice = arr_slice.copy()
arr = np.empty((3,3),dtype=np.int64)
arr[1:2]
arr[:2,1:]
arr[1,1:2] # 索引与切片结合使用
randn(7,4) # 返回一个(7,4)维度的正态分布ndarray
names = ['Bob','Joe','Will','Bob','Joe','Tom','Jack']
names = np.array(names) # array([ True, False, False, True, False, False, False])
data = randn(7,4)
data[names=="Bob"]
arr = np.arange(32) # 创建一个32的一维数组
arr.reshape((8,4)) # 将数组转换成一个(8,4)维度
arr[[1,5,6,2],[0,3,2,1]] #花式索引,实际上是提取的(1,0)(5,3).... 是一个视图
arr[np.ix_([1,5,6,2],[0,3,2,1])] # 这个效果跟上面一下,这个是复制到新数组,不是视图
# 数组的转置和轴对换
arr = np.arange(15).reshape((3,5))
arr.T # 数组的转置
arr = np.random.randn(6,3)
np.dot(arr.T,arr) # 计算局矩阵的内积 arr.T * arr
# 通用函数,快速的元素级数组函数
arr = np.arange(10)
np.sqrt(arr) # 对所有数组进行开发运算
np.exp(arr) # e
arr2 = np.arange(10)
np.add(arr,arr2) # 数组相加 == arr1 + arr2
arr1 = randn(8)
arr2 = randn(8)
np.maximum(arr1,arr2) # 求出各自对应位置的最大值
np.isnan(arr1) # 返回哪一个位置是空值 [False, False, False, False]
# 利用数组尽心数据处理
point = np.arange(1,5,1)
xs, ys = np.meshgrid(point,point) # 复制相同行数
# 逻辑条件表达为数组的运算
xarr = np.array([1.1,1.2,1.3,1.4])
yarr = np.array([2.2,2.3,2.4,2.5])
cond = np.array([True,False,True,True])
arr = zip(xarr,yarr,cond) # 按照列打包
np.where(cond,xarr,yarr) # x if cond else y
arr = np.random.randn(4)
np.where(arr > 1,2,-2) # 第一个必须是数组,后面两个不必是数组,根据一个数组生成另一个数组
# 数学和统计方法
arr = np.random.randn(5,4)
arr.mean()
np.mean(arr) # 求平均数
np.sum(arr) # 求和公式
np.std(arr) # 标准差
np.var(arr) # 方差
np.max(arr) # 最小值
np.min(arr) # 最大值
# 数组中布尔值会被强制转换为1(True)和 0(False).因此sum可以用来计数
arr = np.random.randn(100)
(arr > 0).sum() # 51 计算有多少个 > 0
# 排序
arr = np.random.randn(8)
np.sort(arr,axis=1) # 返回排序后数组的副本
arr.sort(0) # 就地修改数组
# 数组分位数
large_arr = np.random.randn(1000)
large_arr.sort()
large_arr[0.05 * len(large_arr)]
# 唯一华以及其他的集合逻辑
# 提供一些针对一维数组的基本集合运算 常用np.unique
names = np.array(["Bob",'Jon','Will','Bob','Jon','Joe'])
np.unique(names) # 返回去重并且排序后的一个数组
names = np.array([6,0,0,3,2,5])
np.in1d(names,[2,3,6]) # 返回一个布尔值数组
网友评论