numpy

---恢复内容开始---

为什么要学习numpy

快速
方便
科学计算的基础库
什么是numpy?

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

numpy中常见的数组类型

数据类型的操作

数组的形状

数组的运算

数组和数的运算

数组和数组的运算

 

 

广播原则

怎么理解呢?
    可以把维度指的是shape所对应的数字个数
那么问题来了:
    shape为(3,3,3)的数组能够和(3,2)的数组进行计算么?
    shape为(3,3,2)的数组能够和(3,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个数据

二维数组的轴

三维数组的轴

numpy读取数据

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

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


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

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


数据来源:https://www.kaggle.com/datasnaek/youtube/data

 

 

---恢复内容结束---

---恢复内容开始---

为什么要学习numpy

快速
方便
科学计算的基础库
什么是numpy?

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

numpy中常见的数组类型

数据类型的操作

数组的形状

数组的运算

数组和数的运算

数组和数组的运算

 

 

广播原则

怎么理解呢?
    可以把维度指的是shape所对应的数字个数
那么问题来了:
    shape为(3,3,3)的数组能够和(3,2)的数组进行计算么?
    shape为(3,3,2)的数组能够和(3,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个数据

二维数组的轴

三维数组的轴

numpy读取数据

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

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


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

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

import numpy as np

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

t1 = np.loadtxt(us_file_path,delimiter=",",dtype="int",unpack=True)
t2 = np.loadtxt(us_file_path,delimiter=",",dtype="int")
print(t2)
print("*"*100)
# print(t2)
# b = t2[2:5,1:4]
# print(b)
c = t2[[0,2,2],[0,1,3]]
print(c)

数据来源:https://www.kaggle.com/datasnaek/youtube/data

numpy的转置

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

 

以上的三种方法都可以实现二维数组的转置的效果,大家能够看出来,转置和交换轴的效果一样
其实操作很简单,和python中列表的操作一样

 numpy索引和切片

numpy中的数值修改

numpy中的布尔索引

numpy中额三元运算符

numpy中的clip(裁剪)

 

 numpy中的nan和inf

an(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中的注意点

那么问题来了,在一组数据中单纯的把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)

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

标准差是一组数据平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值
反映出数据的波动稳定情况,越大表示波动越大,约不稳定

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.]])

数组拼接

数组的行列交换

numpy更多好用的方法

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

 

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

总结

如何选择一行或者多行的数据(列)?
如何给选取的行或者列赋值?
如何大于把大于10的值替换为10?
np.where如何使用?
np.clip如何使用?
如何转置(交换轴)?
读取和保存数据为csv
np.nan和np.inf是什么
常用的统计函数你记得几个?
标准差反映出数据的什么信息

 

---恢复内容结束---

posted @ 2019-02-12 12:59  qijunL  阅读(426)  评论(0编辑  收藏  举报