数据分析之Numpy基础库(Numpy简介、CSV数据存储和加载、ndarray数组创建、数据类型和矩阵运算(索引与切片))

Numpy:提供了一个在Python中做科学计算的基础库,重在数值计算,主要用于多维数组(矩阵)处理的库。

               高性能科学计算和数据分析的基础包,用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多。

               本身是由C语言开发,是个很基础的扩展,Python其余的科学计算扩展大部分都是以此为基础。

               ndarray,多维数组(矩阵),具有矢量运算能力,快速、节省空间。

               常用引用方法:import numpy as np

CSVComma-Separated Values,逗号分隔值)是存储表格数据的常用文件格式。很多应用都支持CSV格式,因为它很简洁。

 和Python一样,CSV里留白(whitespace)也是很重要的:每一行都用一个换行符分隔,列与列之间用逗号分隔(因此也叫逗号分隔符)。CSV文件还可以用Tab字符或其他字符分隔行,但是不太常见,用的不多。

CSV数据存储


数据加载:np.loadtxt()

import numpy as np
filename = "./presidential_polls.csv"
data_arr = np.loadtxt(filename, #需要打开的文件名
    delimiter = "," ,           #文件的分隔符
    #skiprows = 1,             #可以选择跳过开头指定的行
    dtype=str,                  #数据是按编码后的字符串格式存储
    usecols = (3,17,18,19),     #表示读取文件里的列的索引位置
)
print(data_arr)

注意skiprows = n,代表跳过开头前 n 行

数据加载:np. genfromtxt()

import numpy as np
filename = "./presidential_polls.csv"
data_arr = np.genfromtxt(filename,  #需要打开的文件名
    delimiter = "," ,               #文件的分隔符
    dtype=str,                      #数据按字符串格式存储,不进行bytes编码
    usecols = (3,17,18,19),         #表示读取文件里列索引位置
    )
print(data_arr)

注意np. genfromtxt()方法中没有skiprows属性

ndarray数组创建


NumPy数组是一个多维的数组对象(矩阵),称为ndarray,具有矢量算术运算能力,并具有执行速度快和节省空间的特点。

注意:ndarray的下标从0开始,且数组里的所有元素必须是相同类型

ndarray属性:

        ndim属性:维度个数

        shape属性:维度大小

        dtype属性:数据类型

ndarray的随机创建

通过随机抽样 (numpy.random) 生成随机数据

np.random.rand()   # 随机样本位于[0, 1)中,rand固定区间0.0 ~ 1.0 
np.random.randn()   # 随机样本是从标准正态分布中返回一个或多个样本值
# 生成指定维度大小(m行n列)的随机多维整型数据(二维),randint()可以指定区间(x,y)
# size可省略不写
np.random.randint(x,y,size=(m,n))  
np.random.randint(x,y,(m,n))
# 生成指定维度大小(m行n列)的随机多维浮点型数据(二维),uniform()可以指定区间(x, y)
# size可省略不写 
np.random.uniform(x,y,size=(m,n))  
np.random.uniform(x,y,(m,n)) 

例:

import numpy as np

arr = np.random.rand(2,2)    # 创建一个随机样本在[0,1)且size为2行2列的数组
print(arr)
print(type(arr))
print('维度个数: ', arr.ndim)
print('维度大小: ', arr.shape)
print('数据类型: ', arr.dtype)

输出结果:
[[0.2669522  0.65501258]
 [0.05080951 0.4335143 ]]
<class 'numpy.ndarray'>
维度个数:  2
维度大小:  (2, 2)
数据类型:  float64

ndarray的序列创建

 1.  np.array(collection)

collection 为序列型对象(list)、嵌套序列对象(list of list)

list序列转换为 ndarray

list = range(10) 
arr = np.array(list) 
print(arr)    # ndarray数据 

list of list嵌套序列转换为ndarray

list_list = [range(10), range(10)] 
arr = np.array(list_list)
print(arr)    # ndarray数据

2.  np.zeros()

指定大小的全0数组。

注意:第一个参数是元组,用来指定大小,如(3, 4)

例:

zeros_arr = np.zeros((3, 4))
print(zeros_arr)

输出结果:
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

3.   np.ones()

指定大小的全1数组。

注意:第一个参数是元组,用来指定大小,如(3, 4)

例:

ones_arr = np.ones((3, 4))
print(ones_arr)

输出结果:
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

4.   np.empty()

初始化数组,不是总是返回全0,有时返回的是未初始的随机值(内存里的随机值)。

empty_arr = np.empty((3, 3))
empty_int_arr = np.empty((3, 3), int)   # 指定数据类型
print(empty_arr)
print(empty_int_arr)

输出结果:
[[0.00000000e+000 0.00000000e+000 0.00000000e+000]
 [0.00000000e+000 0.00000000e+000 3.18178276e-321]
 [9.34609110e-307 2.56761491e-312 2.56761491e-312]]

[[   6881348    7340147    6357100]
 [   5439609    7471220    7209065]
 [       103 1920098592 1529379169]]

5.   np.arange() 和 reshape()

arange() 类似 python range() ,创建一个一维 ndarray 数组。

reshape() 将重新调整数组的维数。

print(np.arange(15))       # 15个元素的 一维数组

输出结果:
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
print(arr.reshape(3, 5))       # 3x5个元素的 二维数组

输出结果:
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
print(arr.reshape(1, 3, 5))    # 1x3x5个元素的 三维数组

输出结果:
[[[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10 11 12 13 14]]]

ndarray数据类型


1.   dtype参数

指定数组的数据类型,类型名+位数,如float64, int32

例:

初始化34列数组,数据类型为float64

zeros_float_arr = np.zeros((3, 4), dtype=np.float64) 
print(zeros_float_arr) 
print(zeros_float_arr.dtype)

输出结果:
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

float64

2.   astype方法

转换数组的数据类型

例:

将已有的数组的数据类型转换为int32

zeros_int_arr = zeros_float_arr.astype(np.int32)
print(zeros_int_arr)
print(zeros_int_arr.dtype)

输出结果:
[[0 0 0 0]
 [0 0 0 0]
 [0 0 0 0]]

int32

ndarray的矩阵运算


ndarray的索引与切片

1.   一维数组的索引与切片

Python的列表索引功能相似

arr1 = np.arange(10)
print(arr1)           # [0 1 2 3 4 5 6 7 8 9]
print(arr1[2:5])      # [2 3 4]  索引从0开始

2.   多维数组的索引与切片

arr[r1:r2, c1:c2]

arr[1,1] 等价 arr[1][1]

[:] 代表某个维度的数据

arr2 = np.arange(12).reshape(3,4)
print(arr2)
print(arr2[1])         # 输出行索引为1 的行
print(arr2[0:2, 2:])   # 输出行索引为0,1的行,且列索引为2(包含2)以后的所有列
print(arr2[:, 1:3])    # 输出所有行,且列索引为1,2的列

输出结果:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

[4 5 6 7]

[[2 3]
 [6 7]]

[[ 1  2]
 [ 5  6]
 [ 9 10]]

3.   条件索引

布尔值多维数组:arr[condition]condition也可以是多个条件组合。

注意:多个条件组合要使用 & | 连接,而不是Python的 and or

例:

单个条件:  找出 year_arr 2005年后的数据

year_arr = np.array([[2000, 2001, 2000], [2005, 2002, 2009], [2001, 2003, 2010]])
is_year_after_2005 = year_arr >= 2005
print(is_year_after_2005)
# print(is_year_after_2005.dtype)      # bool
print(year_arr[is_year_after_2005])

输出结果:
[[False False False]
 [ True False  True]
 [False False  True]]

[2005 2009 2010]

多个条件:找出 year_arr 2005年以前的数据 且 年份可整除2

year_arr = np.array([[2000, 2001, 2000], [2005, 2002, 2009], [2001, 2003, 2010]])
is_year_before_2005 = (year_arr <= 2005) & (year_arr % 2 == 0)
print(is_year_before_2005)
print(year_arr[is_year_before_2005])

输出结果:
[[ True False  True]
 [False  True False]
 [False False False]]

[2000 2000 2002]

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值