数据分析的基础

以下是学习数据分析所做的笔记,深入浅出的介绍了数据分析及使用的工具

####ipython是什么呢?就是调用python解释器的交互式环境

%run run命令,在ipython中执行.py程序,在一个空的命名空间执行%

ipython的魔术命令:

魔术命令

数据的维度

  • 维度:一组数据的组织形式

  • 一维数据:有对等关系的有序或无序数据构成,采用线性方式组织。对应列表、数组和集合等概念

  • 列表和数组:

    同:都是一组数据的有序结构

    不同:列表的数据类型不同,而数组的数据类型是相同的
    
  • 二维数据:

    由一维数据构成,是一维数据的组合形式。表格时典型的二维数据,其中表头可以是二维数据的一部分,也可以在二维数据之外。

除此之外还有多维数据存在,多维数据是由一维或二维数据在新的维度上扩展形成的

最后是高维数据,就是用键值对讲数据组织起来形成的数据组织方式。高维数据仅利用最基本的二元关系,就能展示数据间的复杂结构。那么这些数据维度在python中是如何表示的呢?

数据维度的python表示

一维数据:列表(有序)和集合(无序)类型

二维数据:二维列表

多维数据:多维列表

高维数据:字典类型或者数据表示格式(json,xml,yaml)

####NumPy

NumPy是一个开源的python科学计算基础库

image-20180827111756365

image-20180827112320141

numpy底层是使用c语言,速度快,效率高

一方面是编程上,简单方便。一方面是效率上高效。

image-20180827112612779

ndarray在程序中的别名是:array

描述ndarray的基本方式
轴(axis):保存数据的维度

秩(rank):轴的数量

ndarray对象的属性:

image-20180827113104950

numpy定义的元素类型:

image-20180827113545736

无符号:
image-20180827113704020

复数类型:

image-20180827113833404

为什么需要这么多的数据类型:

image-20180827114558540

ndaray也可以由非同质对象构成:

image-20180827114833920

ndarray数组的创建和变换

创建ndarray数组的方式有四种:

  • 从Python中的列表、元组等类型创建ndarray数组

    创建数组

    使用np.array()函数创建,可以指定数据类型

  • 使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等

image-20180827124428961

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

hanshu

函数2

np.linspace

第一个参数是起始位置,第二是结束位置,第三个是希望的元素个数

生成浮点数

endpoint是否是开区间

numpy将输出的数基本都是浮点数,除了arange这样的函数,因为numpy是科学计算的包

  • 从字节流(raw bytes)中创建ndarray数组
  • 从文件中读取特定格式,创建ndarray数组。
ndarray数组的变换

对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换

变换

ndarray数组的类型变换

类型转换

ndarray数组向列表转换

转换成数组

列表是python原始的数据类型,比数组与原生程序更加适应

ndarray数组的操作(索引和切片)

索引:获取数组中特定位置元素的过程

切片:获取数组元素子集的过程

#####一维数组的索引和切片:与python的列表类似

提供两种顺序方式:

  1. 从0开始向右侧递增;从-1开始向左侧递减
  2. 切片的基本方法[m:n:y]

    m:开始索引
    
    n:结束索引(不包含)
    
    y:步长
    
多维数组的索引

多维数组索引

多维数组的切片:

​ 在每个维度上,用户给出一个切片空间,将不同的切片空间组织起来,形成的一个子集的获取方式

多维数组的切片

我们可以将三维坐标看成一栋建筑,两层楼,每层3行4列共12个房间。选定任意一个房间,即楼层、行号和列号。例如,选定第1层楼、第1行、第1列的房间,冒号就是选定所有的楼层(不关心楼层),所有行列,::2就是步长为2,每隔一个元素选取一个元素。多个冒号可以用省略号代替。

ndarray的运算

标量:一个数据就叫标量

数组与标量之间的运算等价于数组的每一个元素都与标量进行运算

数组运算

一元运算

一元函数,对单一ndarray数组进行的运算,就是对每一个元素的运算
ndarray的一元函数

numpy一元函数

基本所有的一元函数都是新生成了数组

二元函数

二元函数

数据的csv存储

什么是csv文件

csv(Comma-Separated Value, 逗号分隔值)

csv是一种常见的文件格式,用来存储批量数据

在numpy中有两个函数可以向文件中写入csv格式,并从csv文件中读取数据

保存csv文件

fmt是用户主要修改的参数,默认是使用科学技术法保留18位小数

np的savetxt函数并不是为了特定的生成csv格式的文件而生,它可以生成任何带有逗号分隔或其他字符分割的文件,但由于csv文件的普遍使用所以我们一般用来生成csv格式的文件

例子csv

例子2csv

读取csv格式的数据

读取csv

读取例子:

例子读取csv

​ 但csv文件也有局限性:

​ csv智能有效存储一维和二维数组,np.savetxt()/np.loadtxt()只能有效存储一维和二维数组。那么下面就来看看多维数据的存储方法

多维数据的存储

多维数组的读取

例子:

tofile例子

​ 与csv文件的不同在于,这个文件没有维度信息,只是将数组中的所有元素列出并输出到这个文件中

​ 如果不指定第二个参数,数据分割字符串,会生成二进制的文件,二进制文件无法用文本编辑器读取,但是二进制文件占用的空间更少,我们只能将它作为数据备份的一种方式

从二进制文件\文本文件还原数据

无论什么样的数据方法,从文件中读回元素的时候都要指定文件数据类型,因为只有指定了数据类型才能正确解析数据内容,默认的dtype是float类型

读取文件fromfile

fromfile例子

在读取文件的时候,维度信息丢失,必须指定维度信息才能还原数据

读取二进制文件

fromfile读取二进制文件

注意:该方法需要读取时知道存入文件时的数组维度和元素类型a.tofile()和np.fromfile()需要配合使用

​ 如何知道存入文件时的数组维度和元素类型呢?方法是在写一个文件,将数组的维度和元素类型作为元数据文件存储起来,在读取文件时打开元数据文件获取信息还原数组,虽然有一些麻烦,但是对于大规模数据的存储是很有效的

numpy提供的便捷的多维文件存储方法

numpy文件存储

savez就是压缩文件的存储

例子numpy文件存储

​ 这个自带的方法可以默认还原文件的维度和数据类型,十分便捷。因为这个方法是用二进制的方式将文件保存起来,而将数据的维度和类型以元信息的方式写到了第一行中,load函数在解析时通过解析第一行数据还原数组

​ 如果我们的程序中间需要文件缓存,那么使用save和load方法是非常有效便捷的一种

​ 如果你希望程序能够与其他的程序做数据交互和对接,那么你需要考虑使用csv文件,或者使用tofile方法生成一个其他程序可以使用的文件。

NumPy的随机数函数

python的内置函数random库为一般的标量参数提供随机数

在NumPy库中有一个相似的函数

  • np.random.*
  • np.random.randn()
  • np.random.rand()
  • np.random.randint()

numpy的随机数函数1

均匀分布每一个元素出现的概率都是相同的

例子:

均匀随机浮点数

rand例子

标准正态分布随机浮点数

randn

随机整数数组

randint

生成指定个相同的随机数

种子随机数

可以在测试时得到相同的产生的随机数组

高级的随机数函数

随机数函数2

例子1:高级的洗牌(混淆)函数,改变数组a的第一轴随机排序
高级随机数函数例子1

高级随机数函数2

例子2:
gjsjshs3

#####高级的随机数数组函数:

随机数数组

例子1:

正太分布数组

正态分布数组

正态分布是围绕某一均值,在特定方差下,一种随机变量取值的空间可能

NumPy的统计函数

统计函数顾名思义就是能够对数据中的信息进行统计运算的函数,NumPy提供的统计类函数直接使用函数名来调用

  • np.std()

  • np.var()

  • np.average()

np.random的统计函数1:

np.random的统计函数

期望:即算术平均和

默认的是axis=None是统计函数的标配参数,即不关心数据的维度,对所有的元素操作
例子:
random统计函数

统计函数2:

random的统计函数2

argmin(a)/argmax(a):获取最大值和最小值的被扁平化形成一维之后的位置(下标)

例子:

统计函数例子2

tips:median函数获取中位数是一种运算,是通过公式求得的

NumPy的梯度函数

NumPy中的梯度函数只有一个:

梯度函数

梯度:是指连续值之间的变化率,即斜率

​ 在xy坐标轴中有连续的三个值,它们的Y轴值为a,b,c。我们计算b的梯度(斜率)就是用后一个值减去前面一个值的差除以它的后一个值到前一个值之间的距离。就是:(c-a)/2

​ 最后一个值就是本身减去上一个值,除上距离

例子:

梯度值例子

二维函数计算梯度值与一维函数类似:

梯度例子2

​ 梯度变化了元素的变化率,特别是我们在处理图像和声音时,梯度有助于我们发现图像和声音的边缘。在变化明显的地方,梯度可以明显的发现。所以在进行图像和声音等多媒体运算时非常有用。