机器学习-数据科学库-day3

机器学习-数据科学库-day3

*
@[TOC](机器学习-数据科学库-day3)
* numpy学习
*
什么是numpy
numpy创建数组(矩阵)

+ numpy中常见的更多数据类型
+ 数据类型的操作
+ 数组的形状
+ 练习
+ 数组和数的计算
+ 数组和数组的计算
+ 广播原则
+ 轴(axis)
+
* 二维数组的轴
* 三维数组的轴
数组的切片

+ numpy读取数据
+ numpy读取和存储数据
+ numpy中的转置
+ numpy索引和切片
+ numpy中数值的修改
+ numpy中布尔索引
+ numpy中三元运算符
+ numpy中的clip(裁剪)
+
* 练习
+ numpy中的nan和inf
+ numpy中的nan的注意点
+ numpy中常用统计函数
+ ndarry缺失值填充均值
+ 动手练习
数组的拼接

+ 数组的竖直和水平拼接
+ 数组的行列交换
+ 动手练习
numpy更多好用的方法
numpy生成随机数

+ 分布的补充
+ numpy的注意点copy和view
day2 & day3 小结:

numpy学习

什么是numpy

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

numpy创建数组(矩阵)

机器学习-数据科学库-day3

; numpy中常见的更多数据类型

机器学习-数据科学库-day3

数据类型的操作

机器学习-数据科学库-day3

; 数组的形状

机器学习-数据科学库-day3
机器学习-数据科学库-day3

练习


import numpy as np
import random

t1=np.array([1,2,3,4,5])
print(t1)
print(type(t1))

t2=np.array(range(10))
print(t2)
print(type(t2))

t3=np.arange(1,10,2)
print(t3)
print(type(t3))
print(t3.dtype)
print("*"*20)

t4=np.array(range(1,4),dtype="f8")
print(t4)
print(t4.dtype)

t5=np.array([1,1,0,0,1,0,1],dtype=bool)
print(t5)
print(t5.dtype)

t6=t5.astype("int8")
print(t6)
print(t6.dtype)

t7=np.array([random.random() for i in range(10)])
print(t7)
print(t7.dtype)

t8=np.round(t7,2)
print(t8)
print(t8.dtype)

print(np.arange(0,10).reshape(2,5))

运行结果:

C:\ANACONDA\python.exe C:/Users/Lenovo/PycharmProjects/Code/day02/page58.py
[1 2 3 4 5]
<class 'numpy.ndarray'>
[0 1 2 3 4 5 6 7 8 9]
<class 'numpy.ndarray'>
[1 3 5 7 9]
<class 'numpy.ndarray'>
int32
********************
[1. 2. 3.]
float64
[ True  True False False  True False  True]
bool
[1 1 0 0 1 0 1]
int8
[0.53470254 0.68531382 0.08348858 0.55545799 0.21017324 0.92818368
 0.20948581 0.89012421 0.35591318 0.06539644]
float64
[0.53 0.69 0.08 0.56 0.21 0.93 0.21 0.89 0.36 0.07]
float64
[[0 1 2 3 4]
 [5 6 7 8 9]]

Process finished with exit code 0

数组和数的计算

机器学习-数据科学库-day3

; 数组和数组的计算

机器学习-数据科学库-day3

广播原则

机器学习-数据科学库-day3

; 轴(axis)

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

有了轴的概念之后,我们计算会更加方便,比如计算一个2维数组的平均值,必须指定是计算哪个方向上面的数字的平均值

二维数组的轴

机器学习-数据科学库-day3

; 三维数组的轴

机器学习-数据科学库-day3

数组的切片

numpy读取数据

CSV:Comma-Separated Value,逗号分隔值文件
显示:表格状态
源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录

由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的

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

机器学习-数据科学库-day3

; numpy读取和存储数据

现在这里有一个英国和美国各自youtube1000多个视频的点击,喜欢,不喜欢,评论数量([“views”,”likes”,”dislikes”,”comment_total”])的csv,运用刚刚所学习的只是,我们尝试来对其进行操作

import numpy as np

us_file_path="./youtube_video_data/US_video_data_numbers.csv"
gb_file_path="./youtube_video_data/GB_video_data_numbers.csv"

t1=np.loadtxt(us_file_path,delimiter=",",dtype="int")
t2=np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)

print(t1)
print("*"*100)
print(t2)

运行结果:

C:\ANACONDA\python.exe C:/Users/Lenovo/PycharmProjects/Code/day03/page74.py
[[4394029  320053    5931   46245]
 [7860119  185853   26679       0]
 [5845909  576597   39774  170708]
 ...

 [ 142463    4231     148     279]
 [2162240   41032    1384    4737]
 [ 515000   34727     195    4722]]
****************************************************************************************************
[[4394029 7860119 5845909 ...  142463 2162240  515000]
 [ 320053  185853  576597 ...    4231   41032   34727]
 [   5931   26679   39774 ...     148    1384     195]
 [  46245       0  170708 ...     279    4737    4722]]

Process finished with exit code 0

numpy中的转置

转置是一种变换,对于numpy中的数组来说,就是在对角线方向交换数据,目的也是为了更方便的去处理数据

机器学习-数据科学库-day3

.transpose, .T, .swapaxes(1,0)
这三种方法都可以实现二维数组的转置的效果,大家能够看出来,转置和交换轴的效果一样

机器学习-数据科学库-day3

import numpy as np

t2=np.arange(24).reshape(4,6)

t3=t2.transpose()
t4=t2.T
t5=t2.swapaxes(1,0)

print(t2)
print("*"*100)
print(t3)
print("*"*100)
print(t4)
print("*"*100)
print(t5)

运行结果:

C:\ANACONDA\python.exe C:/Users/Lenovo/PycharmProjects/Code/day03/test-transpose.py
[[ 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  6 12 18]
 [ 1  7 13 19]
 [ 2  8 14 20]
 [ 3  9 15 21]
 [ 4 10 16 22]
 [ 5 11 17 23]]
****************************************************************************************************
[[ 0  6 12 18]
 [ 1  7 13 19]
 [ 2  8 14 20]
 [ 3  9 15 21]
 [ 4 10 16 22]
 [ 5 11 17 23]]
****************************************************************************************************
[[ 0  6 12 18]
 [ 1  7 13 19]
 [ 2  8 14 20]
 [ 3  9 15 21]
 [ 4 10 16 22]
 [ 5 11 17 23]]

Process finished with exit code 0

numpy索引和切片

对于刚刚加载出来的数据,如果只想选择其中的某些列(行)

机器学习-数据科学库-day3

机器学习-数据科学库-day3

; numpy中数值的修改

机器学习-数据科学库-day3

numpy中布尔索引

机器学习-数据科学库-day3

; numpy中三元运算符

机器学习-数据科学库-day3

numpy中的clip(裁剪)

机器学习-数据科学库-day3

; 练习


t1=np.arange(44).reshape(11,4)
print(t1[2])
print("*"*100)

print(t1[2:])
print("*"*100)

print(t1[[2,8,10]])
print("*"*100)

print(t1[:,1])

print(t1[:,2:])

print(t1[:,[0,2]])

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

b=t1[2:5,1:4]
print(b)
print(type(b))

c=t1[[0,2,2],[0,1,3]]
print(c)

t8=np.arange(24).reshape(4,6)
print(t8)
print(t8<10)
t8[t8<10]=0
print(t8)

print(np.where(t80,100,300))

运行结果:

C:\ANACONDA\python.exe C:/Users/Lenovo/PycharmProjects/Code/day03/page74.py
[ 8  9 10 11]
****************************************************************************************************
[[ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]
 [24 25 26 27]
 [28 29 30 31]
 [32 33 34 35]
 [36 37 38 39]
 [40 41 42 43]]
****************************************************************************************************
[[ 8  9 10 11]
 [32 33 34 35]
 [40 41 42 43]]
****************************************************************************************************
[ 1  5  9 13 17 21 25 29 33 37 41]
[[ 2  3]
 [ 6  7]
 [10 11]
 [14 15]
 [18 19]
 [22 23]
 [26 27]
 [30 31]
 [34 35]
 [38 39]
 [42 43]]
[[ 0  2]
 [ 4  6]
 [ 8 10]
 [12 14]
 [16 18]
 [20 22]
 [24 26]
 [28 30]
 [32 34]
 [36 38]
 [40 42]]
11
<class 'numpy.int32'>
[[ 9 10 11]
 [13 14 15]
 [17 18 19]]
<class 'numpy.ndarray'>
[ 0  9 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]]
[[ True  True  True  True  True  True]
 [ True  True  True  True False False]
 [False False False False False False]
 [False False False False False False]]
[[ 0  0  0  0  0  0]
 [ 0  0  0  0 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]
[[100 100 100 100 100 100]
 [100 100 100 100 300 300]
 [300 300 300 300 300 300]
 [300 300 300 300 300 300]]

Process finished with exit code 0

numpy中的nan和inf

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

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

inf(-inf,inf):infinity,inf表示正无穷,-inf表示负无穷

什么时候回出现inf包括(-inf,+inf)
比如一个数字除以0,(python中直接会报错,numpy中是一个inf或者-inf)

那么如何指定一个nan或者inf呢?注意他们的type类型

机器学习-数据科学库-day3

; numpy中的nan的注意点

机器学习-数据科学库-day3

numpy中常用统计函数

求和:t.sum(axis=None)
均值:t.mean(a,axis=None) 受离群点的影响较大
中值:np.median(t,axis=None)
最大值:t.max(axis=None)
最小值:t.min(axis=None)
极值:np.ptp(t,axis=None) 即最大值和最小值只差
标准差:t.std(axis=None)

机器学习-数据科学库-day3

对于axis的设置,默认返回多维数组的全部的统计结果,如果指定axis则返回一个当前轴上的结果

; ndarry缺失值填充均值


import numpy as np

def fill_ndarray(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:

            temp_not_nan_col=temp_col[temp_col==temp_col]

            temp_col[np.isnan(temp_col)]=temp_not_nan_col.mean()

    return t1

if __name__=="__main__":
    t1 = np.arange(12).reshape(3, 4).astype("float")

    t1[1, 2:] = np.nan
    print(t1)
    fill_ndarray(t1)
    print(t1)

运行结果:

C:\ANACONDA\python.exe C:/Users/Lenovo/PycharmProjects/Code/day03/page87.py
[[ 0.  1.  2.  3.]
 [ 4.  5. nan nan]
 [ 8.  9. 10. 11.]]
[[ 0.  1.  2.  3.]
 [ 4.  5.  6.  7.]
 [ 8.  9. 10. 11.]]

Process finished with exit code 0

动手练习

英国和美国各自youtube1000的数据结合之前的matplotlib绘制出各自的评论数量的直方图


import numpy as np
from matplotlib import pyplot as plt

us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"

t_us=np.loadtxt(us_file_path,delimiter=",",dtype="int")

t_us_comment=t_us[:,-1]

t_us_comment=t_us_comment[t_us_comment5000]

print(t_us_comment.max(),t_us_comment.min())

d=50

bin_nums = (t_us_comment.max()-t_us_comment.min())//d

plt.figure(figsize=(12,8),dpi=80)

plt.hist(t_us_comment,bin_nums)

plt.show()

print(t_us_comment)
print(bin_nums)

运行结果:

4995 0
[   0 3040 1071 ...  279 4737 4722]
99

机器学习-数据科学库-day3

希望了解英国的youtube中视频的评论数和喜欢数的关系,应该如何绘制改图


import numpy as np
from matplotlib import pyplot as plt

us_file_path = "./youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "./youtube_video_data/GB_video_data_numbers.csv"

t_uk=np.loadtxt(uk_file_path,delimiter=",",dtype="int")

t_uk=t_uk[t_uk[:,1]500000]

t_uk_comment=t_uk[:,-1]
t_uk_like=t_uk[:,1]

plt.figure(figsize=(20,8),dpi=80)

plt.scatter(t_uk_like,t_uk_comment)

plt.show()

运行结果:

机器学习-数据科学库-day3

数组的拼接

数组的竖直和水平拼接

机器学习-数据科学库-day3

; 数组的行列交换

机器学习-数据科学库-day3

动手练习

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


import numpy as np
import day03

us_file_path = "../day03/youtube_video_data/US_video_data_numbers.csv"
uk_file_path = "../day03/youtube_video_data/GB_video_data_numbers.csv"

us_data=np.loadtxt(us_file_path,delimiter=",",dtype="int")
uk_data=np.loadtxt(uk_file_path,delimiter=",",dtype="int")

zero_data=np.zeros((us_data.shape[0],1)).astype(int)
ones_data=np.ones((uk_data.shape[0],1)).astype(int)

us_data=np.hstack((us_data,zero_data))
uk_data=np.hstack((uk_data,ones_data))

final_data=np.vstack((us_data,uk_data))
print(final_data)

运行结果:

C:\ANACONDA\python.exe C:/Users/Lenovo/PycharmProjects/Code/day04/page94.py
[[4394029  320053    5931   46245       0]
 [7860119  185853   26679       0       0]
 [5845909  576597   39774  170708       0]
 ...

 [ 109222    4840      35     212       1]
 [ 626223   22962     532    1559       1]
 [  99228    1699      23     135       1]]

Process finished with exit code 0

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生成随机数

机器学习-数据科学库-day3

; 分布的补充

1.均匀分布:在相同的大小范围内的出现概率是等可能的

机器学习-数据科学库-day3

2.正态分布:呈钟型,两头低,中间高,左右对称

机器学习-数据科学库-day3
import numpy as np

np.random.seed(6)
t=np.random.randint(0,20,(3,4))
print(t)

运行结果:

[[10  9  3 10]
 [13 15 10 16]
 [ 1 11 13 15]]

numpy的注意点copy和view

  1. a=b 完全不复制,a和b相互影响
  2. a =b[:],视图的操作,一种切片,会创建新的对象a,但是a的数据完全由b保管,他们两个的数据变化是一致的,
  3. a =b.copy(),复制,a和b互不影响

day2 & day3 小结:

机器学习-数据科学库-day3
机器学习-数据科学库-day3

Original: https://blog.csdn.net/weixin_47049321/article/details/124185278
Author: weixin_47049321
Title: 机器学习-数据科学库-day3

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/600473/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球