From 6bae556ea4f0ab5df1379d6e1f024abfac1549f9 Mon Sep 17 00:00:00 2001 From: ZXH-ZDH <73742643+ZXH-ZDH@users.noreply.github.com> Date: Sun, 28 Nov 2021 20:14:25 +0800 Subject: [PATCH 1/2] =?UTF-8?q?Create=202021-11-26-=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=88=86=E6=9E=90=E7=9A=84=E8=A1=A8=E7=A4=BA=E5=8F=8A=E5=8F=AF?= =?UTF-8?q?=E8=A7=86=E5=8C=96-ZXH.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...45\217\257\350\247\206\345\214\226-ZXH.md" | 216 ++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 "docs/views/data/2021-11-26-\346\225\260\346\215\256\345\210\206\346\236\220\347\232\204\350\241\250\347\244\272\345\217\212\345\217\257\350\247\206\345\214\226-ZXH.md" diff --git "a/docs/views/data/2021-11-26-\346\225\260\346\215\256\345\210\206\346\236\220\347\232\204\350\241\250\347\244\272\345\217\212\345\217\257\350\247\206\345\214\226-ZXH.md" "b/docs/views/data/2021-11-26-\346\225\260\346\215\256\345\210\206\346\236\220\347\232\204\350\241\250\347\244\272\345\217\212\345\217\257\350\247\206\345\214\226-ZXH.md" new file mode 100644 index 00000000..d6b988ab --- /dev/null +++ "b/docs/views/data/2021-11-26-\346\225\260\346\215\256\345\210\206\346\236\220\347\232\204\350\241\250\347\244\272\345\217\212\345\217\257\350\247\206\345\214\226-ZXH.md" @@ -0,0 +1,216 @@ +--- +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的引用 + +***import numpy as np*** + +## ndarray数组的创建方法 + +1.从Python中的列表、元组等类型创建ndarray数组 +***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()只能有效存取一维和二维数组 +***np.savetxt(frame,array,fmt='%.18e',delimiter=None)*** +***np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)*** +### 任意维度数据的存取 +***a.tofile(frame,sep='',format='%s')*** +***np.fromfile(frame,dtype-float,cout=-1,sep='')*** +## NumPy的统计函数 +NumPy直接提供的统计类函数:np.* +## NumPy的梯度函数 +***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) +``` + From b2db39a45cecf121a173344563c0e28e7267a9a4 Mon Sep 17 00:00:00 2001 From: ZXH-ZDH <73742643+ZXH-ZDH@users.noreply.github.com> Date: Sun, 28 Nov 2021 20:58:59 +0800 Subject: [PATCH 2/2] =?UTF-8?q?Update=202021-11-26-=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=88=86=E6=9E=90=E7=9A=84=E8=A1=A8=E7=A4=BA=E5=8F=8A=E5=8F=AF?= =?UTF-8?q?=E8=A7=86=E5=8C=96-ZXH.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...45\217\257\350\247\206\345\214\226-ZXH.md" | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git "a/docs/views/data/2021-11-26-\346\225\260\346\215\256\345\210\206\346\236\220\347\232\204\350\241\250\347\244\272\345\217\212\345\217\257\350\247\206\345\214\226-ZXH.md" "b/docs/views/data/2021-11-26-\346\225\260\346\215\256\345\210\206\346\236\220\347\232\204\350\241\250\347\244\272\345\217\212\345\217\257\350\247\206\345\214\226-ZXH.md" index d6b988ab..33eaca8b 100644 --- "a/docs/views/data/2021-11-26-\346\225\260\346\215\256\345\210\206\346\236\220\347\232\204\350\241\250\347\244\272\345\217\212\345\217\257\350\247\206\345\214\226-ZXH.md" +++ "b/docs/views/data/2021-11-26-\346\225\260\346\215\256\345\210\206\346\236\220\347\232\204\350\241\250\347\244\272\345\217\212\345\217\257\350\247\206\345\214\226-ZXH.md" @@ -18,14 +18,18 @@ NumPy是一个开源的Python科学计算基础库,包含: NumPy是SciPy、Pandas等数据处理或科学计算库的基础 ## NumPy的引用 +```python +import numpy as np*** +``` -***import numpy as np*** - ## ndarray数组的创建方法 1.从Python中的列表、元组等类型创建ndarray数组 -***x=np.array(list/tuple)*** -***x=np.array(list/tuple,dtype=no.float32)*** +```python +x=np.array(list/tuple) + +x=np.array(list/tuple,dtype=no.float32) +``` 2.使用NumPy中函数创建ndarray数组,如:arange/ones/zeros等 3.使用NumPy中其他函数创建ndarray数组 @@ -33,15 +37,23 @@ NumPy是SciPy、Pandas等数据处理或科学计算库的基础 ### CSV文件 csv文件只能有效存储一维数组和二维数组 np.savetxt() np.loadtxt()只能有效存取一维和二维数组 -***np.savetxt(frame,array,fmt='%.18e',delimiter=None)*** -***np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)*** +```python +np.savetxt(frame,array,fmt='%.18e',delimiter=None) +np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False) +``` + ### 任意维度数据的存取 -***a.tofile(frame,sep='',format='%s')*** -***np.fromfile(frame,dtype-float,cout=-1,sep='')*** +```python +a.tofile(frame,sep='',format='%s') +np.fromfile(frame,dtype-float,cout=-1,sep='') +``` + ## NumPy的统计函数 NumPy直接提供的统计类函数:np.* ## NumPy的梯度函数 -***np.gradient(f)*** +```python +np.gradient(f)*** +``` ## 图像的手绘效果