| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 机器学习 科学数据库 Day3 -> 正文阅读 |
|
[人工智能]机器学习 科学数据库 Day3 |
Day3 第二部分 numpy学习 1.什么是numpy 2.numpy基础 3.numpy常用方法 4.numpy常用统计方法 为什么要学习numpy 1.快速 2.方便 3.科学计算的基础库 什么是numpy 一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组(各种列表形式,例如列表嵌套)上执行数值运算 numpy创建数组(矩阵)
? 【示例】
结果: [1 2 3] <class 'numpy.ndarray'> int32 [0 1 2 3 4 5 6 7 8 9] <class 'numpy.ndarray'> [4 6 8] <class 'numpy.ndarray'> numpy中常见的更多数据类型
?数据类型的操作
? 【示例】
结果: <class 'numpy.ndarray'> [1. 2. 3.] float32 [ True ?True False ?True False False] bool [1 1 0 1 0 0] int8 [0.77605271 0.83797713 0.21914121 0.00532719 0.40877846 0.46288983 ?0.92196868 0.60972947 0.88912385 0.60868958] float64 那么问题来了,python中如何保留固定位数的小数? 使用round() 【操作】
结果: [0.77605271 0.83797713 0.21914121 0.00532719 0.40877846 0.46288983 ?0.92196868 0.60972947 0.88912385 0.60868958] float64 [0.78 0.84 0.22 0.01 0.41 0.46 0.92 0.61 0.89 0.61] 数组的形状(几行几列的数组) ?—————————————————————————————————————————— ? ?————————————————————————————————————————— 【示例】
结果: (24,) [[ 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]] [ 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9 10 11 12 13 14 15 16 17 18 19 20 21 22 23] 数组和数的计算(会应用于数组中的每一个数字)
这是一个numpy的广播机制造成的,在运算过程中,加减乘除的值1被广播到所有的元素上面 ? 【示例】数组和数组的运算(对应位置上的数进行计算)
结果: ?[4 5 6]] [[3 2 1] ?[6 5 4]] ******* t1+t2 ?[[ 4 ?4 ?4] ?[10 10 10]] t1*t2 ?[[ 3 ?4 ?3] ?[24 25 24]] 【示例】除以0 t=np.array(range(24)) print(t/0) 结果: ?inf inf inf inf inf inf] ? 结果:(行和列两个维度都不相同不能进行计算) ValueError: cannot reshape array of size 13 into shape (3,4) —————————————————————————— ? ? 【示例】不同维度数组计算
结果:(t5的每一列减去t8的一列) [[ 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]] t5-t8 ?[[ 0 ?1 ?2 ?3 ?4 ?5] ?[ 5 ?6 ?7 ?8 ?9 10] ?[10 11 12 13 14 15] ?[15 16 17 18 19 20]] 注意: 但若两个数组的行和列都不相等,则无法进行计算。必须某一维度上一样才能进行计算 广播原则 ? 怎么理解呢? 可以把维度指的是shape所对应的数字个数 那么问题来了: shape为(3,3,3)的数组能够和(3,2)的数组进行计算么? 答:不能 shape为(3,3,2)的数组能够和(3,2)的数组进行计算么? 答:可以计算 【示例】
结果: ??[ 2 ?3] ??[ 4 ?5]] ?[[ 6 ?7] ??[ 8 ?9] ??[10 11]] ?[[12 13] ??[14 15] ??[16 17]]] [[0 1] ?[2 3] ?[4 5]] [[[ 0 ?2] ??[ 4 ?6] ??[ 8 10]] ?[[ 6 ?8] ??[10 12] ??[14 16]] ?[[12 14] ??[16 18] ??[20 22]]] 注:2维数组只要有一个形状方向(行或列)一样,就可以计算 ??? 轴(axis) 在numpy中可以理解为方向,使用0,1,2...数字表示 对于一个一维数组,只有一个0轴,对于2维数组(shape(2,2)),有0轴和1轴,对于三维数组(shape(2,2, 3)),有0,1,2轴 有了轴的概念之后,我们计算会更加方便,比如计算一个2维数组的平均值,必须指定是计算哪个方向(行还是列)上面的数字的平均值 那么问题来了: 在前面的知识,轴在哪里? 回顾np.arange(0,10).reshape((2,5)),reshpe中2表示0轴长度(包含数据的条数)为2,1轴长度为5,2X5一共10个数据 二维数组的轴
?三维数组的轴
? 明白了轴的概念之后,对于shape返回的结果和reshape的结果能够更加清楚 numpy读取数据 (numpy读取数据一般用的较少) CSV:Comma-Separated Value,逗号分隔值文件 显示:表格状态 源文件:换行和逗号分隔行列的格式化文本,每一行的数据表示一条记录 由于csv便于展示,读取和写入,所以很多地方也是用csv的格式存储和传输中小型的数据,为了方便教学,我们会经常操作csv格式的文件,但是操作数据库中的数据也是很容易的实现的 np.loadtxt(frame,dtype=np.float,delimiter=None,skiprows=0,usecols=None,unpack=False)
? 现在这里有一个英国和美国各自youtube1000多个视频的点击,喜欢,不喜欢,评论数量(["views","likes","dislikes","comment_total"])的csv,运用刚刚所学习的只是,我们尝试来对其进行操作 【示例】读取csv数据
结果: ?[ 320053 ?185853 ?576597 ... ???4231 ??41032 ??34727] ?[ ??5931 ??26679 ??39774 ... ????148 ???1384 ????195] ?[ ?46245 ??????0 ?170708 ... ????279 ???4737 ???4722]] **** [[4394029 ?320053 ???5931 ??46245] ?[7860119 ?185853 ??26679 ??????0] ?[5845909 ?576597 ??39774 ?170708] ?... ?[ 142463 ???4231 ????148 ????279] ?[2162240 ??41032 ???1384 ???4737] ?[ 515000 ??34727 ????195 ???4722]] unpack:实现转置 ? numpy中的转置 (对unpack的拓展,转置:行和列互换) 转置是一种变换,对于numpy中的数组来说,就是在对角线方向交换数据,目的也是为了更方便的去处理数据 ①.transpose() ②.swapaxes(1,0) ③.T ? ? 以上的三种方法都可以实现二维数组的转置的效果,大家能够看出来,转置和交换轴的效果一样 numpy读取和存储数据 那么,结合之前的所学的matplotlib把英国和美国的数据呈现出来? 看到这个问题,我们应该考虑什么? 我们想要反映出什么样的结果,解决什么问题? 选择什么样的呈现方式? 数据还需要做什么样的处理? 写代码
结果: [[4394029 ?320053 ???5931 ??46245] ?[7860119 ?185853 ??26679 ??????0] ?[5845909 ?576597 ??39774 ?170708] ?... ?[ 142463 ???4231 ????148 ????279] ?[2162240 ??41032 ???1384 ???4737] ?[ 515000 ??34727 ????195 ???4722]] numpy索引和切片 对于刚刚加载出来的数据,我如果只想选择其中的某一列(行)我们应该怎么做呢? 其实操作很简单,和python中列表的操作一样 ? ? 是不是还可以加上步长呢?
? 【示例】 #取第3行(索引从0开始) numpy中数值的修改 ? ? 修改行列的值,我们能够很容易的实现,但是如果条件更复杂呢? 比如我们想要把t中小于10的数字替换为3 numpy中布尔索引 t[t<10]=0 ? ? 那么问题来了: 如果我们想把t中小于10的数字替换为0,把大于10的替换为10,应该怎么做?? numpy中三元运算符 np.where(t<10,0,18) 把t中小于10的数字替换为0,把大于10的替换为10
那么问题来了: 如果我们想把t中小于10的数字替换为0,把大于20的替换为20,应该怎么做?? numpy中的clip(裁剪) t.clip(10,18) 把t中小于10的数字替换为10,把大于18的替换为18
? 观察操作: 小于10的替换为10,大于18的替换为了18,但是nan没有被替换,那么nan是什么? 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类型 ? numpy中的nan的注意点 ? np.count_nonzero(t!=t) 判断nan是因为np.nan!=np.nan 所以t!=t可以判断nan的个数 【示例】
结果: False True 1 [False False ?True False] [ 1. ?2. ?0. 20.] 【示例】关于nan的计算
结果: [[ 0. ?1. nan ?2.] ?[ 3. ?4. ?5. ?6.] ?[ 7. ?8. ?9. 10.]] nan [10. 13. nan 18.] [nan 18. 34.] numpy中的nan的注意点 那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响? 比如,全部替换为0后,替换之前的平均值如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值(中位数))或者是直接删除有缺失值的一行 那么问题来了: ??????如何计算一组数据的中值或者是均值 ??????如何删除有缺失数据的那一行(列)[在pandas中介绍] 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) ? 注1: 标准差是一组数据平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值,反映出数据的波动稳定情况,越大表示波动越大,约不稳定 注2. 默认返回多维数组的全部的统计结果,如果指定axis则返回一个当前轴上的结果 【示例】nan统计函数
结果: ?[ 3. ?4. ?5. ?6.] ?[ 7. ?8. ?9. 10.]] [10. 13. 14. 18.] [3.33333333 4.33333333 4.66666667 6. ???????] [3. 4. 5. 6.] [ 7. ?8. ?9. 10.] [0. 1. 0. 2.] [7. 7. 9. 8.] [2.86744176 2.86744176 3.68178701 3.26598632] ndarry缺失值填充均值 t中存在nan值,如何操作把其中的nan填充为每一列的均值 t = array([[ ?0., ??1., ??2., ??3., ??4., ??5.], ???????[ ?6., ??7., ?nan, ??9., ?10., ?11.], ???????[ 12., ?13., ?14., ?nan, ?16., ?17.], ???????[ 18., ?19., ?20., ?21., ?22., ?23.]]) ? 【示例】
结果: [[ 0. ?1. ?2. ?3.] ?[ 4. ?5. nan nan] ?[ 8. ?9. 10. 11.]] --------------------- [[ 0. ?1. ?2. ?3.] ?[ 4. ?5. ?6. ?7.] ?[ 8. ?9. 10. 11.]] 麻烦么?学完pandas我们有更容易的方法处理缺失值 小结 1.如何选择一行或者多行的数据(列)? 切片(选一部分)和索引(选一个值)—— 选择行t[2]、t[3:,:]/选择列t[:,4:] /选择行列,连续的多行t[2:,:3];不连续的多行 t[[1,3],[2,4]]:选择的是(1,2),(3,4)两个位置的值 索引:t[2,3]:第3行第4列的值 2.如何给选取的行或者列赋值? 赋值:t[2:,3]=3 把从第3行开始,第4列赋值为3 3.如何大于把大于10的值替换为10? 布尔索引 t[t>10]=10 4.np.where如何使用? 三元运算符 ?t=np.where(t>10,20,0) 把t中大于10的替换为20,其他的替换为0 5.np.clip如何使用? 裁剪 ?t=t.clip(10,20) 把t中小于10的替换为10,大于20的替换为20 6.如何转置(交换轴)? 转置 ?①t.T ??②t.transpose() ?③t.swapaxes() 7.读取和保存数据为csv dtype:数据类型 delimiter:字符分割符 读取本地文件 np.loadtxt(file_path,delimiter,dtype) 8.np.nan和np.inf是什么 nan:不是一个数字 _number_nan = np.count_nonzero(t!=t) #统计t中nan的个数 nan的性质:np.nan!=np.nan np.isnan(t) #统计t中哪些为nan,返回布尔值,效果和np.nan!=np.nan相同 t[np.isnan(t)]=1??#把t中为nan的替换为1 inf表示无穷 9.常用的统计函数你记得几个? 求和:t.sum(axis=0) #axis计算每列的值,每行第一个数的和,每行第二个数的和...所以为求列的和 求均值:t.mean(axis=0) 求中位数:np.median(t,axis=0) 最值:t.max(),t.min() 计算极差(最大-最小):np.ptp(t,axis=0) 计算标准差:t.std 10.标准差反映出数据的什么信息 反映数据的离散程度,稳定程度 练习: ①英国和美国各自youtube1000的数据结合之前的matplotlib绘制出各自的评论数量的直方图 ②希望了解英国的youtube中视频的评论数和喜欢数的关系,应该如何绘制改图(散点图) 【操作】:
结果: ? 【操作】
结果: ? 数组的拼接 现在我希望把之前案例中两个国家的数据方法一起来研究分析,那么应该怎么做? np.vstack((t1,t2)) 竖直拼接 ???????np.hstack((t1,t2)) ?水平拼接 (竖直分割和水平分割与拼接为互逆) ? 数组的行列交换 数组水平或者竖直拼接很简单,但是拼接之前应该注意什么? 竖直拼接的时候:每一列代表的意义相同!!!否则牛头不对马嘴 如果每一列的意义不同,这个时候应该交换某一组的数的列,让其和另外一类相同 那么问题来了? 如何交换某个数组的行或者列呢?
? 练习:现在希望把之前案例中两个国家的数据方法一起来研究分析,同时保留国家的信息(每条数据的国家来源),应该怎么办 【操作】
结果: ?[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]] numpy更多好用的方法 1.获取最大值最小值的位置 ??np.argmax(t,axis=0) ??np.argmin(t,axis=1) 【示例】
结果: ?[0. 1. 0. 0.] ?[0. 0. 1. 0.] ?[0. 0. 0. 1.]] [0 1 2 3] ??——>最大值的位置 [[-1. ?0. ?0. ?0.] ?[ 0. -1. ?0. ?0.] ?[ 0. ?0. -1. ?0.] ?[ 0. ?0. ?0. -1.]] [0 1 2 3] ??——>最小值的位置 2.创建一个全0的数组: np.zeros((3,4)) 3.创建一个全1的数组:np.ones((3,4)) 4.创建一个对角线为1的正方形数组(方阵):np.eye(3) 【示例】
结果: [[1. 1. 1.] ?[1. 1. 1.]] ------- [[0. 0. 0.] ?[0. 0. 0.]] ------- [[1. 0. 0.] ?[0. 1. 0.] ?[0. 0. 1.]] numpy生成随机数
? 【示例】np.random.rand()
结果: 0.18760242455098486 [0.65982013] [[0.52775828 0.84049786] ?[0.89130358 0.71245619]] 【示例】randint,uniform
结果: [[15 13 19 ?0] ?[ 6 10 ?2 17] ?[ 3 ?4 18 19]] [4.59312834 9.60812837 2.73907317 9.21329994 5.75528342] 【示例】seed():使得每次生成的随机数都一样
结果: [[ 9 ?4 15 ?0] ?[17 16 17 ?8] ?[ 9 ?0 10 ?8]] 分布的补充 均匀分布:在相同的大小范围内的出现概率是等可能的 ?正态分布:呈钟型,两头低,中间高,左右对称(平均数为0) ? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 20:49:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |