【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示

单元一:NumPy库入门

1.1 数据的维度

维度:一组数据的组织形式
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第1张图片

一维数据
一维数据由对等关系的有序或无序数据构成,采用线性方式组织,对应列表、数组和集合等概念
如:3.1413, 3.1398, 3.1404, 3.1401, 3.1349, 3.1376。

其中,关于列表和数组的区别是:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第2张图片

二维数据
二维数据由多个一维数据构成,是一维数据的组合形式,表格是典型的二维数据,其中,表头是二维数据的一部分。
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第3张图片
多维数据
多维数据由一维或二维数据在新维度上扩展形成
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第4张图片

高维数据
高维数据仅利用最基本的二元关系展示数据间的复杂结构
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第5张图片

数据维度的Python表示
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第6张图片
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第7张图片

1.2 NumPy的数组对象:ndarray

NumPy是一个开源的Python科学计算基础库,包含:

• 一个强大的N维数组对象 ndarray

• 广播功能函数

• 整合C/C++/Fortran代码的工具

• 线性代数、傅里叶变换、随机数生成等功能

NumPy是SciPy、 Pandas等数据处理或科学计算库的基础

我们一般使用 import numpy as np来引用numpy库

ndarray 意为:N维数组对象

这里自然就有一个疑问:Python已有列表类型,为什么需要一个数组对象(类型)?看下面的例子:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第8张图片

那么,引入ndarray 的好处就是:

• 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据

• 设置专门的数组对象,经过优化,可以提升这类应用的运算速度

注:科学计算中,一个维度所有数据的类型往往相同

• 数组对象采用相同的数据类型,有助于节省运算和存储空间


ndarray由两部分构成:

• 实际的数据

• 描述这些数据的元数据(数据维度、数据类型等)

ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第9张图片

ndarray对象的属性
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第10张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第11张图片

1.3 ndarray数组的元素类型

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第12张图片
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第13张图片
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第14张图片

疑问:ndarray为什么要支持这么多种元素类型?

对比:Python语法仅支持整数、浮点数和复数3种类型

• 科学计算涉及数据较多,对存储和性能都有较高要求

• 对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能

• 对元素类型精细定义,有助于程序员对程序规模有合理评估

非同质的ndarray对象

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第15张图片

1.4 ndarray数组的创建

ndarray数组的创建方法

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

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

• 从字节流(raw bytes)中创建ndarray数组

• 从文件中读取特定格式,创建ndarray数组


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

使用方法:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第16张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第17张图片

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

函数用法1:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第18张图片
注意:shape这个参数应是 元组 类型

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第19张图片

函数用法2:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第20张图片

(3)使用NumPy中其他函数创建ndarray数组
函数用法:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第21张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第22张图片

1.5 ndarray数组的变换

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

维度变换:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第23张图片
注意:这里有些函数调用后会修改原数组,有些则不会。

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第24张图片

实例2:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第25张图片

元素类型变换:

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第26张图片

ndarray数组向列表的转换

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第27张图片

1.6 ndarray数组的操作

数组的索引和切片

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

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

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

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第28张图片

多维数组的索引

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第29张图片

多维数组的切片

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第30张图片

1.7 ndarray数组的运算

数组与标量之间的运算作用于数组的每一个元素
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第31张图片

NumPy一元函数:对ndarray中的数据执行元素级运算的函数

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第32张图片

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第33张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第34张图片

NumPy二元函数
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第35张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第36张图片

单元小结【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第37张图片

单元二:Numpy数据存取与函数

2.1 数据的CSV存取

CSV (Comma‐Separated Value, 逗号分隔值),CSV是一种常见的文件格式,用来存储批量数据
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第38张图片

savetxt: 存CSV文件
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第39张图片

实例1:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第40张图片

实例2:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第41张图片

loadtxt: 读CSV文件
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第42张图片
注:dtype一般默认为 浮点 类型

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第43张图片

CSV文件的局限性

CSV只能有效存储一维和二维数组

np.savetxt() np.loadtxt()只能有效存取一维和二维数组

2.2 多维数据的存取

使用tofile函数保存多维数据
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第44张图片

实例1:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第45张图片

实例2:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第46张图片

使用fromfile函数读取多维数据
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第47张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第48张图片

注意:该方法需要读取时知道存入文件时数组的维度和元素类型,a.tofile()和np.fromfile()需要配合使用,可以通过元数据文件来存储额外信息

NumPy便捷文件的读取
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第49张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第50张图片

2.3 NumPy的随机数函数

NumPy的随机函数子库:np.random.* 包含有关随机数的函数

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第51张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第52张图片

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第53张图片


【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第54张图片

注意函数是否改变原数组

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第55张图片

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第56张图片


【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第57张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第58张图片

2.4 NumPy的统计函数

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第59张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第60张图片


【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第61张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第62张图片

注:argmax/argmin经常与unravel_index结合使用—->得到多维数组中最大/小数据的多维数组下标

2.5 NumPy的梯度函数

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第63张图片

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第64张图片
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第65张图片

单元小结

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第66张图片
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第67张图片

单元三:实例1-图像的手绘效果

3.1 图像的数据表示

图像一般使用RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成。

RGB三个颜色通道的变化和叠加得到各种颜色,其中

• R 红色,取值范围,0‐255

• G 绿色,取值范围,0‐255

• B 蓝色,取值范围,0‐255

RGB形成的颜色包括了人类视力所能感知的所有颜色

PIL库
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第68张图片

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第69张图片

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第70张图片

注:图像是一个三维数组,维度分别是高度、宽度和像素RGB值

3.2图像的变换

变换原理:读入图像后,获得像素RGB值,修改后保存为新的文件
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第71张图片

实例:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第72张图片

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第73张图片

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第74张图片

3.3 -图像的手绘效果实例分析

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第75张图片

效果分析:
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第76张图片

代码:

#HandDrawPic.py
# -*- coding: utf-8 -*-
from PIL import Image
import numpy as np

a = np.asarray(Image.open('./beijing.jpg').convert('L')).astype('float')

depth = 10.                         # (0-100)
grad = np.gradient(a)               #取图像灰度的梯度值
grad_x, grad_y = grad               #分别取横纵图像梯度值
grad_x = grad_x*depth/100.
grad_y = grad_y*depth/100.
A = np.sqrt(grad_x**2 + grad_y**2 + 1.)#这里相当于 grad_z=1.0
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A

vec_el = np.pi/2.2                  # 光源的俯视角度(根据图片假设的),弧度值
vec_az = np.pi/4.                   # 光源的方位角度(根据图片假设的),弧度值
dx = np.cos(vec_el)*np.cos(vec_az)  #光源对x 轴 单位长度 的影响
dy = np.cos(vec_el)*np.sin(vec_az)  #光源对y 轴 单位长度 的影响
dz = np.sin(vec_el)                 #光源对z 轴 单位长度 的影响

b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)    #光源归一化
b = b.clip(0,255)#为避免数据越界,将生成的灰度值裁剪至0‐255区间

im = Image.fromarray(b.astype('uint8'))     #重构图像
im.save('./beijingHD.jpg')

代码分析:
原理:利用像素之间的梯度值和虚拟深度值对图像进行重构,根据灰度变化来模拟人类视觉的远近程度。

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第77张图片

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第78张图片
【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第79张图片

【MOOC】Python数据分析与展示-北京理工大学-【第一周】数据分析之表示_第80张图片

你可能感兴趣的:(公开课)