机器学习-数据科学库(第三天)

本文介绍了numpy库在Python中的重要性,详细讲解了如何创建和操作数组,包括使用arange和astype方法。讨论了数组的形状、广播原则以及与数的计算。还涉及了numpy读取CSV数据、处理缺失值(如用均值填充NaN)以及数组的拼接。此外,提到了随机数生成和统计方法,如sum、mean、max、min。文章最后探讨了数据拼接和随机方法在数据分析中的应用。
摘要由CSDN通过智能技术生成

14.numpy的数组的创建

什么是numpy

一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算(数组就是列表、列表嵌套列表等)

import numpy as np
t1 = np.array([1,2,3])
print(t1)
print(type(t1))
t2 = np.array(range(10))
print(t2)
t3 = np.arange(10)
print(t3)
print(t3.dtype)
[1 2 3]
<class 'numpy.ndarray'>
[0 1 2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7 8 9]
int64

import numpy as np
t1 = np.array(range(10),dtype="float64")
print(t1)
print(t1.dtype)

t2 = t1.astype("int8")
print(t2.dtype)
[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
float64
int8
t3 = np.array([random.random() for i in range(10)])
print(t3)
print(t3.dtype)

t4 = np.round(t3,2)
print(t4)
[0.15551533 0.00401583 0.15190568 0.8632606  0.26929546 0.64721247
 0.40041603 0.18216162 0.36326966 0.80083215]
float64
[0.16 0.   0.15 0.86 0.27 0.65 0.4  0.18 0.36 0.8 ]

15.数组的计算和数组的计算

数组的形状

import numpy as np
t1 = np.arange(12)
print(t1)
print(t1.shape)

t2 = np.array([[1,2,3],[5,4,6]])
print(t2.shape)

t3 = np.array([[[1,2,3],[5,4,6]],[[2,2,5],[5,7,3]]])
print(t3.shape)

t4 = np.arange(12)
print(t4.reshape((3,4)))

t5 = np.arange(24).reshape((2,3,4))
print(t5)

print(t5.flatten())
[ 0  1  2  3  4  5  6  7  8  9 10 11]
(12,)
(2, 3)
(2, 2, 3)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

数组和数的计算

 广播原则

 

16.numpy读取本地数据

轴(axis)

在numpy中可以理解为方向,使用0,1,2...数字表示,对于一个一维数组,只有一个0轴,对于2维数组(shape(2,2)),有0轴和1轴,对于三维数组(shape(2,2,3)),有0,1,2轴

 

numpy读取数据

CSV:Comma-Separated Value,逗号分隔值文件 显示:表格状态 源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录 由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的

np.loadtxt(fname,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False) 

unpack为转置,默认为False

numpy中的转置

17.numpy中的索引和切片

numpy中的索引和切片

import numpy as np
a = np.array([[0,1,2,3],[4,5,6,7],[8,9,10,11]])
print(a[1])
#取第一行,第三行
print(a[[0,2]])
print(a[1:])
#取列
print(a[:,0])
print(a[:,[0,2]])

print(a[2,3])
print(type(a[2,3]))

#取多行多列,取第2行到第三行,第2列到第三列
#取的是行列的交叉点位置
b = a[1:3,1:3]

#取多个不相邻的点
c = a[[0,1],[0,3]]
print(c)
#取得点是 (0,0)(1,3)
[4 5 6 7]
[[ 0  1  2  3]
 [ 8  9 10 11]]
[[ 4  5  6  7]
 [ 8  9 10 11]]
[0 4 8]
[[ 0  2]
 [ 4  6]
 [ 8 10]]
11
<class 'numpy.int64'>
[0 7]

18.numpy中更多的索引方式

numpy中数值的修改

 

np.where(t>10,20,0) 把t中大于10的替换成20,其他的替换为0

numpy中的clip(裁剪) 

 

t里边小于10的换成10,大于18的换成18,nan是浮点类型 

19.numpy中的nan和常用统计方法

 numpy中的nan的注意点

nan(NAN,Nan):not a number表示不是一个数字

什么时候numpy中会出现nan:      

当我们读取本地的文件为float的时候,如果有缺失,就会出现nan当做了一个不合适的计算的时候(比如无穷大(inf)减去无穷大)  

import numpy as np
t3 = np.arange(12).reshape((3,4))
print(t3)
print(np.sum(t3))
print(np.sum(t3,axis=0))
print(np.sum(t3,axis=1))
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
66
[12 15 18 21]
[ 6 22 38]

那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?

比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行

import numpy as np
t2=np.array([[0,3,3,3,3,3],
             [0,3,3,3,10,11],
             [0,13,14,15,16,17],
             [0,19,20,11,20,20]])

print(t2.sum(axis=0))
print(t2.mean(axis=0))
print(t2.max(axis=0))
print(t2.min(axis=0))
print(np.median(t2,axis=0))
print(np.ptp(t2))  #极值,最大值和最小值之差
print(t2.std())   #标准差
[ 0 38 40 32 49 51]
[ 0.    9.5  10.    8.   12.25 12.75]
[ 0 19 20 15 20 20]
[0 3 3 3 3 3]
[ 0.   8.   8.5  7.  13.  14. ]
20
7.281540587906747

20.numpy中填充nan和youtube数据的练习

缺失值填充均值

import numpy as np
t1 = np.arange(12).reshape((3,4)).astype("float")
t1[1,2:] = np.nan
print(t1)
for i in range(t1.shape[1]):
    temp_col = t1[:,i] #当前的一列
    nan_num = np.count_nonzero(temp_col!=temp_col)
    if nan_num !=0: #不为0,说明当前这一列中有nan
        tem_not_nan_col = temp_col[temp_col==temp_col] #当前一列不为nan的array
        temp_col[np.isnan(temp_col)] = tem_not_nan_col.mean()
print(t1)
[[ 0.  1.  2.  3.]
 [ 4.  5. nan nan]
 [ 8.  9. 10. 11.]]
[[ 0.  1.  2.  3.]
 [ 4.  5.  6.  7.]
 [ 8.  9. 10. 11.]]

21.数据的拼接

数据的拼接

    

 数组的行列交换

22.numpy中的随机方法

数据拼接例子

现在希望把之前案例中两个国家的数据方法一起来研究分析,同时保留国家的信息(每条数据的国家来源),应该怎么办?

import numpy as np
us_data = ""
uk_data = ""

#加载国家数据
us_data = np.loadtxt(us_data,delimiter=",",dtype = int)
uk_data = np.loadtxt(us_data,delimiter=",",dtype = int)

#添加国家信息
#构造全为0的数据
zeros_data = np.zeros(us_data.shape[0],1).astype(int)
ones_date = np.ones(ukss_data.shape[0],1).astype(int)

#分别添加一列全为0,1的数据
us_data = np.hstack((us_data,zeros_data))
uk_data = np.hstack((uk_data,ones_date))

numpy更多好用的方法

  1. 获取最大值最小值的位置                                                                                                        每一列最大值位置:np.argmax(t,axis=0)   每一行最大值的位置:np.argmin(t,axis=1)
  2. 创建一个全0的数组: np.zeros((3,4))
  3. 创建一个全1的数组:np.ones((3,4))
  4. 创建一个对角线为1的正方形数组(方阵):np.eye(3)

numpy生成随机数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值