以下是学习数据分析所做的笔记,深入浅出的介绍了数据分析及使用的工具
####ipython是什么呢?就是调用python解释器的交互式环境
%run run命令,在ipython中执行.py程序,在一个空的命名空间执行%
ipython的魔术命令:
数据的维度
维度:一组数据的组织形式
一维数据:有对等关系的有序或无序数据构成,采用线性方式组织。对应列表、数组和集合等概念
列表和数组:
同:都是一组数据的有序结构
不同:列表的数据类型不同,而数组的数据类型是相同的
二维数据:
由一维数据构成,是一维数据的组合形式。表格时典型的二维数据,其中表头可以是二维数据的一部分,也可以在二维数据之外。
除此之外还有多维数据存在,多维数据是由一维或二维数据在新的维度上扩展形成的
最后是高维数据,就是用键值对讲数据组织起来形成的数据组织方式。高维数据仅利用最基本的二元关系,就能展示数据间的复杂结构。那么这些数据维度在python中是如何表示的呢?
数据维度的python表示
一维数据:列表(有序)和集合(无序)类型
二维数据:二维列表
多维数据:多维列表
高维数据:字典类型或者数据表示格式(json,xml,yaml)
####NumPy
NumPy是一个开源的python科学计算基础库
numpy底层是使用c语言,速度快,效率高
一方面是编程上,简单方便。一方面是效率上高效。
ndarray在程序中的别名是:array
描述ndarray的基本方式
轴(axis):保存数据的维度
秩(rank):轴的数量
ndarray对象的属性:
numpy定义的元素类型:
无符号:
复数类型:
为什么需要这么多的数据类型:
ndaray也可以由非同质对象构成:
ndarray数组的创建和变换
创建ndarray数组的方式有四种:
从Python中的列表、元组等类型创建ndarray数组
使用np.array()函数创建,可以指定数据类型
- 使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等
np.arange(n): 生成一个递增的整数序列
np.ones(shape): 生成一个m行,n列的数组,也可以用来生成多维数组
np.zeros(shape): 生成一个m行n列,值全部为0的数组
ones,zeros生成的都是浮点数类型,除非用户来指定
np.full(shape, val): 生成一个元素值为val的数组
np.eye(n): 生成一个n*n的单位矩阵,对角线为1,其余为0
第一个参数是起始位置,第二是结束位置,第三个是希望的元素个数
生成浮点数
endpoint是否是开区间
numpy将输出的数基本都是浮点数,除了arange这样的函数,因为numpy是科学计算的包
- 从字节流(raw bytes)中创建ndarray数组
- 从文件中读取特定格式,创建ndarray数组。
ndarray数组的变换
对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换
ndarray数组的类型变换
ndarray数组向列表转换
列表是python原始的数据类型,比数组与原生程序更加适应
ndarray数组的操作(索引和切片)
索引:获取数组中特定位置元素的过程
切片:获取数组元素子集的过程
#####一维数组的索引和切片:与python的列表类似
提供两种顺序方式:
- 从0开始向右侧递增;从-1开始向左侧递减
切片的基本方法[m:n:y]
m:开始索引 n:结束索引(不包含) y:步长
多维数组的索引
多维数组的切片:
在每个维度上,用户给出一个切片空间,将不同的切片空间组织起来,形成的一个子集的获取方式
我们可以将三维坐标看成一栋建筑,两层楼,每层3行4列共12个房间。选定任意一个房间,即楼层、行号和列号。例如,选定第1层楼、第1行、第1列的房间,冒号就是选定所有的楼层(不关心楼层),所有行列,::2就是步长为2,每隔一个元素选取一个元素。多个冒号可以用省略号代替。
ndarray的运算
标量:一个数据就叫标量
数组与标量之间的运算等价于数组的每一个元素都与标量进行运算
一元运算
一元函数,对单一ndarray数组进行的运算,就是对每一个元素的运算
基本所有的一元函数都是新生成了数组
二元函数
数据的csv存储
什么是csv文件
csv(Comma-Separated Value, 逗号分隔值)
csv是一种常见的文件格式,用来存储批量数据
在numpy中有两个函数可以向文件中写入csv格式,并从csv文件中读取数据
fmt是用户主要修改的参数,默认是使用科学技术法保留18位小数
np的savetxt函数并不是为了特定的生成csv格式的文件而生,它可以生成任何带有逗号分隔或其他字符分割的文件,但由于csv文件的普遍使用所以我们一般用来生成csv格式的文件
读取csv格式的数据
读取例子:
但csv文件也有局限性:
csv智能有效存储一维和二维数组,np.savetxt()/np.loadtxt()只能有效存储一维和二维数组。那么下面就来看看多维数据的存储方法
多维数据的存储
例子:
与csv文件的不同在于,这个文件没有维度信息,只是将数组中的所有元素列出并输出到这个文件中
如果不指定第二个参数,数据分割字符串,会生成二进制的文件,二进制文件无法用文本编辑器读取,但是二进制文件占用的空间更少,我们只能将它作为数据备份的一种方式
从二进制文件\文本文件还原数据
无论什么样的数据方法,从文件中读回元素的时候都要指定文件数据类型,因为只有指定了数据类型才能正确解析数据内容,默认的dtype是float类型
在读取文件的时候,维度信息丢失,必须指定维度信息才能还原数据
读取二进制文件
注意:该方法需要读取时知道存入文件时的数组维度和元素类型a.tofile()和np.fromfile()需要配合使用
如何知道存入文件时的数组维度和元素类型呢?方法是在写一个文件,将数组的维度和元素类型作为元数据文件存储起来,在读取文件时打开元数据文件获取信息还原数组,虽然有一些麻烦,但是对于大规模数据的存储是很有效的
numpy提供的便捷的多维文件存储方法
savez就是压缩文件的存储
这个自带的方法可以默认还原文件的维度和数据类型,十分便捷。因为这个方法是用二进制的方式将文件保存起来,而将数据的维度和类型以元信息的方式写到了第一行中,load函数在解析时通过解析第一行数据还原数组
如果我们的程序中间需要文件缓存,那么使用save和load方法是非常有效便捷的一种
如果你希望程序能够与其他的程序做数据交互和对接,那么你需要考虑使用csv文件,或者使用tofile方法生成一个其他程序可以使用的文件。
NumPy的随机数函数
python的内置函数random库为一般的标量参数提供随机数
在NumPy库中有一个相似的函数
- np.random.*
- np.random.randn()
- np.random.rand()
- np.random.randint()
均匀分布每一个元素出现的概率都是相同的
例子:
均匀随机浮点数
标准正态分布随机浮点数
随机整数数组
生成指定个相同的随机数
可以在测试时得到相同的产生的随机数组
高级的随机数函数
例子1:高级的洗牌(混淆)函数,改变数组a的第一轴随机排序
例子2:
#####高级的随机数数组函数:
例子1:
正太分布数组
正态分布是围绕某一均值,在特定方差下,一种随机变量取值的空间可能
NumPy的统计函数
统计函数顾名思义就是能够对数据中的信息进行统计运算的函数,NumPy提供的统计类函数直接使用函数名来调用
np.std()
np.var()
np.average()
np.random的统计函数1:
期望:即算术平均和
默认的是axis=None是统计函数的标配参数,即不关心数据的维度,对所有的元素操作
例子:
统计函数2:
argmin(a)/argmax(a):获取最大值和最小值的被扁平化形成一维之后的位置(下标)
例子:
tips:median函数获取中位数是一种运算,是通过公式求得的
NumPy的梯度函数
NumPy中的梯度函数只有一个:
梯度:是指连续值之间的变化率,即斜率
在xy坐标轴中有连续的三个值,它们的Y轴值为a,b,c。我们计算b的梯度(斜率)就是用后一个值减去前面一个值的差除以它的后一个值到前一个值之间的距离。就是:(c-a)/2
最后一个值就是本身减去上一个值,除上距离
例子:
二维函数计算梯度值与一维函数类似:
梯度变化了元素的变化率,特别是我们在处理图像和声音时,梯度有助于我们发现图像和声音的边缘。在变化明显的地方,梯度可以明显的发现。所以在进行图像和声音等多媒体运算时非常有用。