掌握表示、清洗、统计和展示数据的能力
主题思想
摘要:有损地提取数据特征的过程
内容组织
编辑工具
实例
实例1:图像的手绘效果
实例2:引力波的绘制
实例3:房价趋势的关联因素分析
实例4:股票数据的趋势分析曲线
坐标系的绘制
饼图的绘制
直方图的绘制
极坐标图的绘制
散点图的绘制
conda:
一个工具,用于包管理和环境管理,其中:
包管理与pip类似,管理Python第三方库
环境管理能够允许用户使用不同版本Python,并能灵活切换
anaconda:
一个集合,包括conda、某版本Python、一批第三方库等
conda将工具、第三方库、Python版本、conda都当作包,同等对待
Win平台: cmd
,执行 conda ‐‐version 获取conda版本
执行 conda update conda 升级conda
从一个数据到一组数据
维度:一组数据的组织形式
一维数据
对应列表、数组和集合等概念
列表和数组
一组数据的有序结构
数组:数据类型相同
二维数据
二维数据由多个一维数据构成,是一维数据的组合形式
表格是典型的二维数据
其中,表头是二维数据的一部分
多维数据
多维数据由一维或二维数据在新维度上扩展形成
高维数据
数据维度的Python表示
数据维度是数据的组织形式
数据维度的Python表示
数据维度是数据的组织形式
NumPy
NumPy是一个开源的Python科学计算基础库,包含:
一个强大的N维数组对象 ndarray
广播功能函数
整合C/C++/Fortran代码的工具
线性代数、傅里叶变换、随机数生成等功能
NumPy是SciPy、Pandas等数据处理或科学计算库的基础
NumPy的引用
N维数组对象:ndarray
ndarray是一个多维数组对象,由两部分构成:
ndarray数组一般要求所有元素类型相同(同质),数组下标从
0开始
ndarray实例
ndarray对象的属性
ndarray实例
ndarray为什么要支持这么多种元素类型?
对比:
Python语法仅支持整数、浮点数和复数3种类型
非同质的ndarray对象
ndarray数组的创建方法
(1)从Python中的列表、元组等类型创建ndarray数组
2)使用NumPy中函数创建ndarray数组,如:arange, ones, zeros等
2)使用NumPy中函数创建ndarray数组,如:arange, ones, zeros
ndarray数组的维度变换
a = np.ones((2,3,4), dtype=np.int32)
a = np.ones((2,3,4), dtype=np.int32)
ndarray数组的维度变换
a = np.ones((2,3,4), dtype=np.int32)
ndarray数组的类型变换
new_a = a.astype(new_type
)
astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致
ndarray数组向列表的转换
ls = a.tolist()
数组的索引和切片
索引:获取数组中特定位置元素的过程
切片:获取数组元素子集的过程
一维数组的索引和切片:与Python的列表类似
数组与标量之间的运算
NumPy一元函数
NumPy二元函数
np.savetxt(frame, array, fmt='%.18e', delimiter=None
)
frame :
文件、字符串或产生器,可以是.gz或.bz2的压缩文件
array :
存入文件的数组
fmt :
写入文件的格式,例如:%d %.2f %.18e
delimiter :
分割字符串,默认是任何空格
np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False
)
• frame :
文件、字符串或产生器,可以是.gz或.bz2的压缩文件
• dtype :
数据类型,可选
• delimiter :
分割字符串,默认是任何空格
a.tofile(frame, sep='', format='%s'
)
• frame :
文件、字符串
• sep :
数据分割字符串,如果是空串,写入文件为二进制
• format :
写入数据的格式
np.fromfile(frame, dtype=float, count=‐1, sep=''
)
• frame :
文件、字符串
• dtype :
读取的数据类型
• count :
读入元素个数,‐1表示读入整个文件
• sep :
数据分割字符串,如果是空串,写入文件为二进制
np.save(fname, array
) 或 np.savez(fname, array
)
• fname :
文件名,以.npy为扩展名,压缩扩展名为.npz
• array :
数组变量
np.load(fname
)
• fname :
文件名,以.npy为扩展名,压缩扩展名为.npz
PIL
PIL, Python Image Library
PIL库是一个具有强大图像处理能力的第三方库
在命令行下的安装方法: pip install pillow
from
PIL import
Image
Image是PIL库中代表一个图像的类(对象)
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')
plt.plot(x, y, format_string, **kwargs
)
∙ x :
X轴数据,列表或数组,可选
∙ y :
Y轴数据,列表或数组
∙ format_string:
控制曲线的格式字符串,可选
∙ **kwargs :
第二组或更多(x,y,format_string)
当绘制多条曲线时,各条曲线的x不能省略
plt.plot(x, y, format_string, **kwargs
)
**kwargs :
第二组或更多(x,y,format_string)
color :
控制颜色, color=‘green’linestyle :
线条风格, linestyle=‘dashed’marker :
标记风格, marker=‘o’markerfacecolor:
标记颜色, markerfacecolor=‘blue’markersize :
标记尺寸, markersize=20
http://python123.io/dv/grawave.html
http://python123.io/dv/H1_Strain.wav
http://python123.io/dv/L1_Strain.wav
http://python123.io/dv/wf_template.txt
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
rate_h, hstrain= wavfile.read(r"H1_Strain.wav","rb")
rate_l, lstrain= wavfile.read(r"L1_Strain.wav","rb")
#reftime, ref_H1 = np.genfromtxt('GW150914_4_NR_waveform_template.txt').transpose()
reftime, ref_H1 = np.genfromtxt('wf_template.txt').transpose() #使用python123.io下载文件
htime_interval = 1/rate_h
ltime_interval = 1/rate_l
fig = plt.figure(figsize=(12, 6))
# 丢失信号起始点
htime_len = hstrain.shape[0]/rate_h
htime = np.arange(-htime_len/2, htime_len/2 , htime_interval)
plth = fig.add_subplot(221)
plth.plot(htime, hstrain, 'y')
plth.set_xlabel('Time (seconds)')
plth.set_ylabel('H1 Strain')
plth.set_title('H1 Strain')
ltime_len = lstrain.shape[0]/rate_l
ltime = np.arange(-ltime_len/2, ltime_len/2 , ltime_interval)
pltl = fig.add_subplot(222)
pltl.plot(ltime, lstrain, 'g')
pltl.set_xlabel('Time (seconds)')
pltl.set_ylabel('L1 Strain')
pltl.set_title('L1 Strain')
pltref = fig.add_subplot(212)
pltref.plot(reftime, ref_H1)
pltref.set_xlabel('Time (seconds)')
pltref.set_ylabel('Template Strain')
pltref.set_title('Template')
fig.tight_layout()
plt.savefig("Gravitational_Waves_Original.png")
plt.show()
plt.close(fig)