python数据分析与展示笔记 第一周 数据表示
内容来自中国大学MOOC,北京理工大学,python数据分析与展示课程,侵删。
如有错误,烦请指出。
python数据分析与展示笔记 第一周 数据表示
一、列表与数组
1. 列表:数据类型可以不同
3.1413, 'pi', 3.1404, [3.1401, 3.1349], '3.1376'
2. 数组:数据类型相同
3.1413, 3.1398, 3.1404, 3.1401, 3.1349, 3.1376
二、数据维度:数据的组织形式
1. 一维数据:列表和集合类型
[3.1398, 3.1349, 3.1376] 有序
{3.1398, 3.1349, 3.1376} 无序
2. 二维数据:列表类型
[ [3.1398, 3.1349, 3.1376],
[3.1413, 3.1404, 3.1401] ]
3. 多维数据:字典类型或数据表示格式
dict = {
"firstName": "Tian",
"lastName" : "Song",
}
三、NumPy库的 n 维数组对象 ndarray
(np.array
)
1. ndarray 数组创建
1.1 从 python 中的列表、元组等类型创建 ndarray 数组
1.2 使用 NumPy 中的函数创建 ndarray 数组
1.3 使用 NumPy 中的其他函数创建 ndarray 数组
2. ndarray 数组维度变换
.reshape()
和.resize()
.flatten()
.swapaxes()
3. ndarray 数组的类型变换
new_a = a.astype(new_type)
.astype()
方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致
4. ndarray 数组向列表转换
ls = a.tolist()
5. 一维数组的索引和切片
6. 多维数组的索引
7. ndarray 数组的运算
- 数组与标量之间的运算作用于数组的每一个元素
8. NumPy 一元函数
- 对
ndarray
中的数据执行元素级运算的函数
np.abs()
np.sqrt()
np.square()
np.modf()
9. NumPy 二元函数
np.maximum()
>
四、NumPy 库的数据存取
1. csv 文件:存储一维和二维数组
np.savetxt()
np.loadtxt()
2. dat 文件:存储多维数据
需要读取时知道存入文件时数组的维度和元素类型,.tofile()
和 np.fromfile()
需要配合使用
.tofile()
当不使用分隔符sep
时,生成的是二进制文件
np.fromfile()
3. npy 文件:存储多维数据、便捷文件存取
np.save()
np.load()
五、NumPy库的随机数函数:np.random.*
np.random.rand()
np.random.randn()
np.random.randint()
np.random.seed()
如果每次运行代码时设置相同的seed
,则每次生成的随机数相同。
如果不设置seed
,则每次生成的随机数都不同。
np.random.shuffle()
np.random.permutation()
np.random.choice()
np.random.uniform()
np.random.normal()
np.random.poisson()
六、NumPy库的统计函数:np.*
axis=None
是统计函数的标配参数
np.sum()
和np.mean()
np.average()
np.std()
和np.var()
七、NumPy库的梯度函数:np.gradient()
- 一维数组的梯度
- 二维数组的梯度
八、使用 PIL 库进行图像变换
pip install PIL
from PIL import Image
1. 灰度值取反
2. 区间变换
3. 像素平方
九、实例一:图像的手绘效果
1. 代码
'''实例一:图像的手绘效果'''
from PIL import Image
import numpy as np
a = np.asarray(Image.open('img1.jpg').convert('L')).astype('float')
depth = 10. # 预设深度值为10,取值范围为 0-100
grad = np.gradient(a) # 取图像灰度的梯度值
grad_x, grad_y = grad # 分别取 x 和 y 方向的图像梯度值
grad_x = grad_x*depth/100. # 根据深度调整 x 方向的梯度值
grad_y = grad_y*depth/100. # 根据深度调整 y 方向的梯度值
A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
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)
im = Image.fromarray(b.astype('uint8')) # 重构图像
im.save('img1HD.jpg')
2. 代码分析
(1) 梯度重构
(2) 光源效果
(3) 梯度归一化
(4) 图像生成
3. 原图与手绘效果图展示
- 原图
- 手绘效果图