赞
踩
1.ndarray对象
python提供了array模块,它可以直接保存数值(而不是对象),但是它不支持多维数组,也缺乏丰富的运算函数
ndarray即n维数组,它弥补了以上不足,提供了以下对象:
ndarray对象:存储特定类型的多维数组
ufunc函数:对数组进行处理的函数
ndarray是numpy的核心对象,numpy中的所有函数都是围绕ndarray进行处理的
①创建ndarray对象
可以通过列表创建数组
可以通过shape属性,查看数组的行数和列数
可以使用reshape()方法,创建特定shape的新数组
reshape后得到的数组和原数组共享存储
可以通过dtype属性,查看数组的元素类型
可以在创建数组时声明dtype
可以使用astype()方法进行类型转换
②通过某些函数创建ndarray对象
通过列表创建数组效率显然不高,numpy提供了很多专门用来创建数组的函数
使用arange()创建等差数组,不包含终止值
可以后接reshape()方法,指定特定shape
使用linspace()创建等差数组,指定开始值,终止值,元素个数返回等差数组,注意,这里包含终止值,可以设置参数endpoint=False来排除终止值
使用logspace()创建等比数组,需要额外传入公比参数base,默认为10
可以使用zeros(),ones(),full()初始化特定值
③存取元素
使用索引存取,可以像存取列表list的方式那样来存取数组
切片获取的新数组是原始数组的视图,即它与原始元素共享内存
与list的切片不同,列表的切片返回的是一个新的列表
多维数组的存取使用多个值来表示
除了使用索引和切片,还可以使用list或者数组来存取元素
数组获取到的数组,是原始数组的副本
切片和数组存取元素对比
数组通过切片得到的数组,是原始数组的视图,共享内存
数组通过(整数或bool)数组得到的数组,是原始数组的副本
出现上述情况的原因,与ndarray对象内存结构的具体实现相关
④ufunc运算
ufunc是universal function的缩写,它是一种能对数组的每个元素进行运算的函数
⑤广播
ufunc函数处理的都是shape相同的多个数组,如果要处理的数组shape不同,会进行如下广播处理:
让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都在前面加1补齐
输出数组的shape是输入数组shape的各个维度上的最大值
当输入数组的某个维度的长度为1时,沿着此维度运算时都用此维度上的第一组值
如果输入数组的某个维度和输出数组的对应维度的长度相同或者其长度为1时,这个数组能够用来计算,否则出错
2.函数库
①随机数函数
numpy.random模块中提供了大量的随机数相关的函数
②求和,平均值,方差函数
③大小与排序函数
④数组操作函数
⑤乘积运算函数
如上所述,操作数组的函数非常多,对大家来说,需要做:
以上函数的函数名和功能多看几遍,知道numpy提供了这些功能,以后有相关需求,知道有函数可以用以及要用哪个函数
具体用法细节,就等在实践中慢慢熟悉
1.Series和DataFrame
Series和DataFrame是Pandas中最常用的两个对象
Series主要用来存储单列表格数据(仅包含一列的表格)
DataFrame主要用来存储多列表格数据
①Series
可以像使用numpy.array那样存取元素
Series对象包含两个数组:
index数组:保存key索引信息,如果不指定,默认用位置下表创建key索引(key索引允许我们像使用dict那样检索Series)
values数组:保存元素数值的ndarray对象,支持numpy的各种函数处理
Series同时具有数组和字典的功能,像ndarray数组那样,还可以使用数组来存取元素
Series对象还支持dict的一些函数,例如:items
②DataFrame
Dataframe中,每列数据拥有相同的元素类型,各列数据类型可以不同
可以通过shape属性查看dataframe对象的行列数
2.元素存取
Series和DataFrame提供了丰富的下标存取方法,我们可以使用[ ],.loc[ ],.iloc[ ],.at[ ],.iat[ ]和 .ix[ ]等方式存取其中的元素
[ ] 存取
通过[ ]对DataFrame对象进行存取时,支持以下几种下标对象:
单个列索引:获取标签对应的列,返回一个Series对象
多个列索引:获取以列表,数组(注意不能是元组)表示的多个标签对应的列,返回一个DataFrame对象
行切片:以行索引获取切片对应的行
布尔数组:获取数组中True对应的行
.loc[ ]和 .iloc[ ]存取
.loc[ ]的下标对象是一个元组,其中的两个元素分别指定dataframe的行和列
每个轴的下标对象都支持单个标签,标签列表,标签切片以及布尔数组
.iloc[ ]和 .loc[ ]用法类似,不过它的行列完全使用整数下标
.at[ ]和 .iat[ ]
.at[ ]和 .iat[ ]主要用来取单个值,和.loc[ ]和 .iloc[ ]的用法类似
.at[ ]允许我们用行列的标签取单个值
.iat[ ]允许我们用行列的整数下标取单个值
可以用lookup方法来依次获取多个值,这个区别于 .loc[ ]返回的网格数据
对比
.loc[ ]和 .iloc[ ]存取显然更为强大,[ ]存取和 .at[ ],.iat[ ]可以实现,用它可以完成
从表格检索角度,.loc[ ]直接提供行列信息进行索引更符合人的习惯
条件和query
我们可以声明一些判断条件来进行行筛选,或者使用query方法
3.文件的输入输出
你可以使用read_csv或read_excel读取csv或excel文件,生成一个dataframe对象
读取csv文件时,编码请正确声明,比如文件是gbk编码,你用utf-8来编码,肯定会报错
推荐读写csv文件时,统一使用utf-8编码:统一的好处是会减少大家在文件编码不一致方面踩坑
utf-8与utf-8-sig两个编码一定要区别,utf-8-sig文件在开头带了BOM(3个特殊字节标识此文件是utf-8),读取utf-8文件时需要弄清楚它有没有带BOM
4.分组运算
根据特定的条件,将数据分为多个分组,然后对每个分组进行运算,分组通过Series或DataFrame的groupby方法来实现
使用groupby分组后,得到的GroupBy对象提供了agg(),transforms(),filter(),apply()等方法,方便我们在每个group上面进行一些计算
agg():对每个group进行聚合运算(求和,平均,中位数等)
transform():对每个group进行转换运算
filter():对每个group进行条件过滤
apply():对每个group进行每个函数操作
Matplotlib内部使用面向对象实现,组成图标的各个元素都是对象
面向对象接口使用起来比较复杂,Matplotlib提供了pyplot模块来实现快速绘图
1.典型的绘图流程
①创建figure对象
②为figure对象创建一个或多个axes对象
③调用axes对象的方法,创建一些axis title line2D等简单类型组件,并设置其相关属性(你无需自己去手动创建这些简单组件对象)
④通过figure对象展示图像
2.高级封装Seaborn
Seaborn基于Matplotlib核心库进行了更高阶的API封装,Seaborn的漂亮主要体现在配色更加舒服,图形元素的样式更加细腻
Seaborn主要提供了好看的统计图接口,主要有四种统计图接口:
①可视化统计关系:使用散点图,直线图,对数据进行关联性分析
②可视化数据分布:使用直方图,累积分布图,核密度图,多变量分布图来展示数据分布
③用分类数据绘图:使用分类散点图,分类分布图,分类估计图来展示离散的类别数据
④可视化回归模型:在上述可视化的基础上,做一些简单的回归拟合
1.数值计算库SciPy
SciPy在numpy的基础上,增加了众多的数学计算,科学计算,以及工程计算中的常用模块,例如:线性代数,方程求解,信号处理,统计学,图像处理,稀疏矩阵等
下面主要介绍其中一些重要的子模块,它们在NLP生涯中很重要
2.拟合与优化
scipy.optimize模块提供了许多数值优化算法,我们可以使用其进行最小二乘拟合和计算函数最小值
3.线性代数和矩阵分解
Numpy和SciPy都提供了线性代数库linalg,但SciPy的线性代数库比Numpy更加全面
4.统计学分布与检验
SciPy中的stats模块包含了多种概率分布的随机变量,这里的随机变量包括:连续随机变量和离散随机变量
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。