Python数据分析与展示_1

学习过程主要依照中国MOOC课程,感谢MOOC,感谢北理授课大佬。

单元1:NumPy库入门

数据维度的Python表示:

  • 一维数据:列表和集合(无序)类型
  • 多维数据:多维列表类型
  • 高维数据:字典类型或数据表示格式(json,xml.yaml)

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

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合C/C++/Fortran代码的工具
  • 线性代数、傅里叶变换、随机生成树等功能

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

引用: import numpy as np(建议使用上述约定的别名)

ndarray: 是一个多维数组类型,由两部分构成:1)实际的数据;2)描述这些数据的元数据,如数据维度、数据类型等。ndarray数组一般要求所有元素类型相同,数组下标从0开始。

轴(axis):保存数据的维度
秩(rank):轴的数量

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

    1
    x=np.array(list/tuple)
  • 使用NumPy中函数创建ndarray数组;
1
2
3
4
5
6
7
np.arange(n):类似range()函数;
np.ones(shape):根据shape生产一个全1数组;
np.zeros(shape):根据shape生产一个全0数组;
np.full(shape,val):根据shape生产一个数组,每个元素值都是val;
np.eye(n):创建一个n*n的单位矩阵,对角线为1,其余全为0;
np.linspace():根据起止数据等间距的填充数据,形成数组;
np.concatenate():将两个或多个数组合并成一个新的数组;
  • 从字节流中创建ndarray数组;
  • 从文件中读取特定格式,创建ndarray数组;
  1. 维度变换
    .reshape(shape):不改变数组元素,返回一个shape形状的数组,原数组不变;
    .resize(shape):同上,但修改原数组;
    .swapaxes(ax1,ax2):将数组n个维度中两个维度进行调换;
    .flatten():对数组进行降维,返回折叠后的一维数组,原数组不变;
  2. 类型转换
    .astype(new_type):数组的类型转换
  3. 数组转为列表
    .tolist()
  4. 操作:索引、切片
  5. 运算
    数组与标量之间的运算作用于数组中每一个元素。
    一元函数运算,二元函数运算

单元2:NumPy数据存取与函数

数据的csv文件存取

csv文件:逗号分隔值文件。只能有效存储一维和二维数据。
将ndarray保存为csv:
np.savetxt(frame,array,fmt=’%.18e’,delimiter=None)
frame:文件、字符串或产生器;
array:存入文件的数组;
fmt:写入文件的格式;
delimiter:分割字符串,默认是空格;
将csv写入ndarray:
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
unpack:默认False,如为True,读入属性将分别写入不同变量;

多维数据的存取

生成文件:
a.tofile(frame,sep=’’,format=’%s’)
sep:数据分割字符串,如为空,则生成一个二进制文件,而不是文本文件;
format:写入数据的格式;
还原数据:
np.fromfile(frame,dtype=float,count=-1,sep=’’)
count:读入元素个数,-1表示读入整个文件;
NumPy的便捷文件存取:
np.save(fname,array)或np.savez(fname,array)
frame:文件名,以.npy为扩展名,压缩扩展名为.npz;
np.load(fname)

NumPy的随机数函数

random子库中的的随机数基本函数:rand/randn/randint/seed;
random子库中的的随机数高级函数:shuffle/permutation/choice;
带有分布的高级函数:uniform/normal/poisson;

NumPy的统计函数

常用统计函数:sum/mean/average/std/var;
其他统计函数:min/max/argmin/argmax/unravel_index/ptp/median;

NumPy的梯度函数

np.gradient(f):计算数组f中元素的梯度,当f为多维时,返回每个维度梯度,梯度,即斜率;

单元3:实例:图像的手绘效果

图像的数组表示

RGB色彩模式,每个通道0-255。
PIL,Python Image Library,一个具有强大图像处理能力的第三方库。
from PIL import Image:Image是PIL库中代表一个图像的类(对象)
图像是一个由像素组成的二维矩阵,每个元素是一个RGB值。

图像的变换

读入图像,修改RGB值,修改后保存为新的图像。

图像手绘效果实例

特征:黑白灰色;边界线条较重;相同或相近颜色趋于白色;略有光源效果;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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.)
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('./beijingHD.jpg')

以上。

:转载文章请注明出处,谢谢~