Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
228 changes: 228 additions & 0 deletions docs/views/data/2021-11-26-数据分析的表示及可视化-ZXH.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
---
layout: post
title: 数据分析之表示与可视化
date: 2021-11-21
author: 翟小慧
categories:
- 数据分析部
tags:
- 数据分析学习
---
# 一.文字理论学习部分
## NumPy库入门
NumPy是一个开源的Python科学计算基础库,包含:
1.一个强大的N维数组对象 ndarray
2.广播功能函数
3.整合C/C++/Fortran代码的工具
4.线性代数、傅里叶变换、随机数生成等功能
NumPy是SciPy、Pandas等数据处理或科学计算库的基础

## NumPy的引用
```python
import numpy as np***
```

## ndarray数组的创建方法

1.从Python中的列表、元组等类型创建ndarray数组
```python
x=np.array(list/tuple)

x=np.array(list/tuple,dtype=no.float32)
```
2.使用NumPy中函数创建ndarray数组,如:arange/ones/zeros等
3.使用NumPy中其他函数创建ndarray数组

## NumPy数据存取与函数
### CSV文件
csv文件只能有效存储一维数组和二维数组
np.savetxt() np.loadtxt()只能有效存取一维和二维数组
```python
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
```

### 任意维度数据的存取
```python
a.tofile(frame,sep='',format='%s')
np.fromfile(frame,dtype-float,cout=-1,sep='')
```

## NumPy的统计函数
NumPy直接提供的统计类函数:np.*
## NumPy的梯度函数
```python
np.gradient(f)***
```


## 图像的手绘效果
### 图像的RGB色彩模式
RGB三个颜色通道的变化和叠加得到各种颜色,其中
R 红色,取值范围,0-255
G 绿色,取值范围,0-255
B 绿色,取值范围,0-255

### PIL库 (Python Image Library)
PIL库是一个具有强大图像处理能力的第三方库,在命令行下的安装方法**pip install pillow**

### 图像的变换
读入图像后,获得像素的RGB值,修改后保存为新的文件


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

梯度归一化,构造x和y轴梯度的三维归一化单位坐标系

图像生成,为避免数据越界,将生成的灰度值裁剪至0-255区间内

## Matplotlib库入门
### Matplotlib库的介绍
是Python优秀的数据可视化第三方库
Matplotlib库由各种可视化类构成,内部结构复杂,受Matlib启发
matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式
import matplotlib.pyplot as plt(plt是引入模块的别名)

## pyplot的绘图区域命令
***plt.subplot(nrows,ncols,plot_number)***
nrows表示将该区域分为几行
ncols表示将该区域分为几列
plot_number表示定位到某一个绘图区域

## pyplot的plot()函数
### ***plt.plot(x,y,format_string,kwargs)***
x表示**x轴数据**,列表或数组,可选
y表示**y轴数据**,列表或数组
format_string表示控制曲线的格式字符串,可选
kwargs表示第二组或更多(x,y,format_string)
注意:当绘制多条曲线时,各条曲线的x不能省略

fotmat_string:控制曲线的格式字符串,由颜色字符、风格字符和标识字符组成

## pyplot的中文显示
### 第一种方法,需要rcParams修改字体实现
```python
import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family']='SimHei'
plt.plot([3,1,4,5,2])
plt.ylabel("纵轴(值))
plt.savefig('test',dpi=600)
plt.show()
```
#### rcParams的属性
|属性|说明|
|---|---|
|'font.family'|用于显示字体的名字|
|'font.style'|字体风格,正常normal或斜体italic|
|'font.size|字体大小,整数字号或者'large''x-small'|

|中文字体的种类|说明|
|---|---|
|SimHei|中文黑体|
|Kaiti|中文楷体|
|Lisu|中文隶书|
|FangSong|中文仿宋|
|YouYuan|中文幼圆|
|STSong|华文宋体|

### 第二种方法,增加一个属性:fontproperties
```python
import numpy as np
import matplotlib.pyplot as plt
a=np.arange(0.0,5.0,0.02)
plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=20)
plt.ylabel('纵轴:振幅',fontproperties='SimHei',fontsize=20)
plt.show()
```
## pyplot的文本显示
|函数|说明|
|---|---|
|ply.xlabel()|对x轴增加文本标签|
|plt.ylabel()|对y轴增加文本标签|
|plt.title()|对图形整体增加文本标签|
|plt.text()|在任意位置增加文本|
|plt.annotate()|在图形中增加带箭头的注解|

## pyplot的子绘图区域
理念:设定网格,选中网格,确定选中行列区数量,编号从0开始
***plt.subplot2grid(GridSpec,CurSpec,colspan=1,rowspan=1)***

## GridSpec类
***import matplotlib.gridspec as gridspec***

## Matplotlib基础绘图函数示例
### pyplot基础图标函数概述
|函数|说明|
|:---:|:---:|
|plt.plot(x,y,fmt,...)|绘制一个坐标图|
|plt.boxplot(data,notch,position)|绘制一个箱型图|
|plt.bar(left,height,width,bottom)|绘制一个条形图|
|plt.barh(width,bottom,left,height)|绘制一个横向条形图|
|plt.polar(theta,r)|绘制极坐标图|
|plt.pie(data,explode)|绘制饼图|
|plt.psd(x,NFFT=256,pad_to,Fs)|绘制功率密度图|
|plt.specgram(x,NFTT=256,pad_to,F)|绘制谱图|
|plt.cohere(x,y,NFTT=256,Fs)|绘制x-y相关函数|
|plt.scatter(x,y)|绘制散点图,其中x和y长度相同|
|plt.step(x,y,where)|绘制步阶图|
|plt.hist(x,bins,normed)|绘制直方图|
|plt.contour(x,y,z,n)|绘制等值图|
|plt.vlines()|绘制垂直图|
|plt.stem(x,y,linefmt,markerfmt)|绘制柴火图|
|plt.plot_date()|绘制数据日期|

# 实例:引力波的绘制
在物理学中,引力波是因为时空弯曲对外以辐射形式传播的能量,爱因斯坦基于广义相对论预言了引力波的存在,我们需要绘制最原始的引力波和理想引力波


```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile

#从配置文档中读取相关数据
rate_h, hstrain= wavfile.read(r"G:/奇点工作室/引力波绘制的数据源/H1_Strain.wav","rb")
rate_l, lstrain= wavfile.read(r"G:/奇点工作室/引力波绘制的数据源/L1_Strain.wav","rb")
#reftime, ref_H1 = np.genfromtxt('GW150914_4_NR_waveform_template.txt').transpose()
reftime, ref_H1 = np.genfromtxt('G:/奇点工作室/引力波绘制的数据源/wf_template.txt').transpose() #使用python123.io下载文件

#读取应变数据
htime_interval = 1/rate_h
ltime_interval = 1/rate_l
#创建一个大小为12*6的绘图空间
fig = plt.figure(figsize=(12, 6))

# 丢失信号起始点
htime_len = hstrain.shape[0]/rate_h
htime = np.arange(-htime_len/2, htime_len/2 , htime_interval)
#画出以时间为x轴,应变数据为y轴的图像,并设置标题和坐标轴的标签
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)
```