数据科学原理与数据处理

数据科学原理与数据处理

1 Python行业分析

通过Stack OverFlow专业网站的大数据统计,Python相关技术模块访问量最大的簇是数据科学相关,然后才是后台开发。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6iJQDlqu-1574825287642)(image/1573607426939.png)]

1.1 数据处理流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o3VhzMGM-1574825287645)(image/1573092293192.png)]

1.2 数据科学岗位分析

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqciqwj5-1574825287646)(image/1573092468415.png)]

2 数据分析好助手Jupyter notebook

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。

2.1 Jupyter notebook的安装

① 使用Anaconda安装

Anaconda一个封装多种工具,库的解释器,它已经自动为你安装了Jupter Notebook及其他工具。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9USygyWC-1574825287647)(image/1574043525927.png)]

② 使用pip 安装
pip3 install jupyter

注意:在安装Jupyter Notebook过程中可能面临无法安装的问题(提示你要升级pip),输入下面的命令即可

pip install --upgrade pip   升级pip
pip install juputer   安装Jupyter

2.2 Jupyter notebook 基本使用

  • 在命令行处,先cd到源代码文件目录
  • 然后输入 jupyter notebook 会自动打开一个jupyter web管理界面
  • 点击右上角的new 下边的python3 创建一个脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hxydh3Kl-1574825287648)(image/1573095091236.png)]

  • 点击 run进行运行会在运行完成后自动生成下一格
  • 在notebook的脚本中 想将变量打印出来,不需要加print,直接输入变量名即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wgwZGy1U-1574825287650)(image/1573521805960.png)]

  • **注释:**在notebook中的单元格内添加注释,直接#+注释就可以

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bfSVjl6h-1574825287651)(image/1573521785941.png)]

  • 标题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AAhY3seE-1574825287652)(image/1573522157184.png)]

  • 代码单元:用于编写代码,通过按 Shift + Enter 运行代码,其结果显示在本单元下方。代码单元左边有In [1]: 这样的序列标记,方便人们查看代码的执行次序。

    • shift+enter 直接运行并在下一行插入一个单元格
    • ctrl+enter 直接运行但不插入单元格
    • alt+enter 插入一个新的单元格
  • 编辑模式与命令行模式:

    • 编辑模式用来编写代码,执行文件,鼠标选中单元格,此单元格就会变为编辑模式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BbF8N5qX-1574825287653)(image/1574042470451.png)]

    • 命令模式用来执行快捷命令,可以通过鼠标点击两侧的空白处或者键盘上的Esc键,来使编辑模式转化命令模式。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZJ38yLZP-1574825287653)(image/1574042852747.png)]

    • 快捷键,只有在命令模式操作才可以修改文档,
      • Y:单元转入代码状态
      • M:单元转入markdown状态
      • A :在上方插入新单元
      • B:在下方插入新单元
      • X:剪切选中的单元
      • Shift +V:在上方粘贴单元
  • Markdown单元:用于编辑文本,采用 markdown 的语法规范,可以设置文本格式、插入链接、图片甚至数学公式。同样使用 Shift + Enter 运行 markdown 单元来显示格式化的文本(可以用来快速的生成标题)。

2.3 Jupyter notebook 内置的魔法命令
  • %run + 运行python文件路径
%run D:\hello.py
  • %load 将文件中的内容读出来【load回来的代码不会自动执行 ,需要手动执行一遍 】
%load D:\hello.py
  • %timeit 测试代码的执行时间 【%timeit后边只能跟一行代码】
%timeit lis = [x for x in range(10000)]
  • %%timeit 测试代码块的执行时间
%%timrit
lis = []
for i in range(10000):
    lis.append(1)
  • %time 测试单次运行所需要的时间 【%time和%timeit都是测试时间,但是%time没有%timeit准确】
%time lis = [x for x in range(10000)]
  • %%time 测试代码块的执行时间
%%time
lis = []
for i in range(10000):
	lis.append(i)
  • %%html 用于在notebook中显示页面代码
%%html
<a href = 'www.baidu.com'>百度一下</a>
  • %%js 用于在notebook中运行js文件的
%%html
<div class='mytest' style='color:red'>html content</div>

# 写在不同的单元格中
%%js
document.querySelector('.mytest').innerHTML='js content'
  • %%writefile 将内容编写成文件
%%writefile  haha.py
    lis = [x for x in ramge(1000)]

3 数据科学模块NumPy

3.1 初级NumPy

3.1.1 NumPy基本介绍

Numpy:提供了一个在Python中做科学计算的基础库,主要用于数值计算、多维数组(矩阵)的处理。本身是由C语言开发,是个很基础的扩展,Python其余的科学计算扩展大部分都是以此为基础。

NumPy是使用Python进行科学计算的基本软件包。它包含以下内容:

  • 强大的N维数组对象
  • 复杂的(广播)功能
  • 集成C / C ++和Fortran代码的工具
  • 有用的线性代数,傅立叶变换和随机数功能
  • Nmupy本质就是ndarray
  • 多维矩阵
    • 1维数组看做向量vector–点和直线
    • 2维数组看做2维矩阵–表和平面
    • 3维数组看做3维矩阵–空间

除了其明显的科学用途外,NumPy还可以用作通用数据的高效多维容器。可以定义任意数据类型。这使NumPy可以无缝,快速地与各种数据库集成。官方学习资料https://numpy.org/

3.1.2 NumPy的安装与导入
# 安装  
pip install numpy

# 导入 
import numpy as np
3.1.3 NumPy中的数组创建

NumPy提供的最重要的数据结构是一个称为NumPy数组的强大对象。NumPy数组是通常的Python数组的扩展。NumPy数组配备了大量的函数和运算符,可以帮助我们快速编写各种类型计算的高性能代码。

arange 生成遍历得到的数的数组
array 生成列表元素的数组
linspace 生成元素之间’等差关系‘的数组
logspace 生成元素之间’等比关系‘的数组
ones 生成所有元素都为 1 的数组
zeros 生成所有元素都为 0 的数组
eye 生成一种类似单位矩阵的数组
diag 生成一个对角矩阵数组
random.random 生成 (0,1)的随机数据的随机数组
random.rand 生成随机数据的均匀分布的数组
random.randn 生成一个符合正态分布的数组
random.randint 生成固定范围内的,固定形状的数组
import numpy as np

# 使用arange创建数组
arr = np.arange(0, 6, 2) # 一维数组
arr = np.arange(0, 6, 2).reshape(1, 3) # 二维数组
print(arr)

print('--------------------------------------------------------------------')
# 使用linspace创建数组——元素之间’等差‘
# 参数1 开始位置
# 参数2 结束位置
# 参数3 创建数组元素的个数
arr= np.linspace(0, 6, 7)
print(arr)

print('------------------------------------------------------------------')
# 使用logspace创建函数--元素之间’等比‘
# 参数1 开始位置 10^0
# 参数2 结束位置 10^2
# 参数3 创建数组元素的个数
arr = np.logspace(0, 2, 5)
print(arr)

print('------------------------------------------------------------------')
# ones --生成所有元素都为 1 的数组
arr = np.ones(shape = (2, 3))
print(arr)

print('------------------------------------------------------------------')
# zeros --生成所有元素都为 0 的数组
arr = np.zeros(shape=(2, 3))
print(arr)

print('------------------------------------------------------------------')
# eye--生成一种类似单位矩阵的数组
# 参数k 决定对角线的位置
# 参数k<0 ,对角线上移k个位置
# 参数k>0 ,对角线下移k个位置
# 参数k超出范围,是个(3,3)都为0的数组
arr = np.eye(3, 3, k = 0)
print(arr)

print('------------------------------------------------------------------')
# diag 生成一个对角矩阵数组,参数为对角线上的值
# k 上移,下移 和eye 一样
arr = np.diag([1, 3, 5, 7], k = 0)
arr1 = np.diag([[1, 3, 5, 7], [2, 4, 6, 8]])
print(arr, '\n', arr1)

print('------------------------------------------------------------------')
# 生成 (0,1)的随机数据的随机数组
arr = np.random.random(5)
arr1 = np.random.random((2, 3))
print(arr, '\n', arr1)

print('------------------------------------------------------------------')
# 生成随机数据的均匀分布的数组【需要数据量比较大】
arr = np.random.rand(5)
arr1 = np.random.rand(2, 3)
print(arr,'\n',arr1)

print('------------------------------------------------------------------')
# 生成一个符合正态分布的数组
# 参数为 元素个数 或者 行列数
arr = np.random.randn(2, 3)
print(arr)

print('------------------------------------------------------------------')
# 生成固定范围内的,固定形状的数组
#如果不传size ,那么生成一个随机整数
arr = n.random.randint(0, 5, size = [2, 3])
arr1 = np.random.randint(0, 5)
print(arr, '\n', arr1)

print('------------------------------------------------------------------')
# 获得一个均值为0 标准差为1 的矩阵数组
# 第一个参数是均值 第二个参数是标准差,第三个参数是元素的个数
arr = np.random.normal(0, 1, size = 1000000)
print(arr)
3.1.4 NumPy的数组属性
ndim 输出数组的维度
shape 输出数组的形状
size 输出数组的元素个数
dtype 输出数组的数据类型
itemsize 输出数组的大小
import numpy as np
arr = np.array([[[1,2,3],[4,5,6],[7,8,9]],[[2,3,4],[9,8,7],[5,6,4]]])

print('数组的维度 : ',arr.ndim)
print('数组的形状 : ',arr.shape) # 2块 3行3列
print('数组的元素个数 : ',arr.size)
print('数组的数据类型 : ',arr.dtype)
print('数组的大小 : ',arr.itemsize)
print('数组转置 : ',arr.T)
3.1.5 数组的索引
# # 普通取值
# 一维数组

import numpy as np 
my_array = np.array([1, 2, 3, 4, 5]) 

print(my_array[0])  # 取一维数组的第一个
print(my_array[-1]) # 取一维数组的最后一个

# 二维数组
import numpy as np 
my_array = np.arange(15).reshape(3, 5)

print(my_array[0])  # 取二维数组的第一行
print(my_array[-1])  # 取二维数组的最后一行


# # 切片取值
# 一维数组
import numpy as np 
my_array = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 

print(my_array[0: 5])
print(my_array[: 5])
print(my_array[0: 8: 2])
print(my_array[::-1])

# 二维数组
import numpy as np 
my_array = np.arange(15).reshape(3, 5)

print(my_array[0:5])
print(my_array[:5])
# 注:python生成的普通数组中,切片切出来的值和原来的数据没有任何关系,一个改变 ,另一个不发生改变
# 注:numpy生成的数组,切片切出来的值和原来的数据有引用关系,一个改变,另一个也发生改变

# bool取值
import numpy as np

a = np.array([[1,2], [3, 4], [5, 6]])
bool_idx = (a > 2)              
print(bool_idx)                          
print(a[bool_idx])  

# 或者
print(a[a > 2])   
3.1.6 ndarray 中的合并与分割
concatenate 进行数组的合并 参数:axis = 0与vstack一致,axis = 1与hstack一致
vstack 垂直方向上进行拼接 【行】
hstack 水平方向上进行拼接 【列】
split 进行数组的分割 参数:axis = 0与vstack一致,axis = 1与hstack一致
vsplit 垂直方向上进行分割 【行】
hsplit 水平方向上进行分割 【列】
import numpy as np
# # 合并

# 一维数组的合并
arr_1 = np.array([1, 2, 3])
arr_2 = np.array([4, 5, 6])
arr = np.concatenate([arr_1, arr_2])

print(arr)

# 二维数组的合并
import numpy as np

arr_1 = np.arange(4).reshape((2, 2))
arr_2 = np.arange(4, 8).reshape((2, 2))

#数组组合
# 按行的方向【垂直】,进行拼接,参数是一个对象
new_arr = np.vstack((arr_1, arr_2))
print(new_arr)

# 按列的方向【水平】,进行拼接,参数是一个对象
new_arr = np.hstack((arr_1, arr_2))
print(new_arr)

# 和vstack一样
new_arr = np.concatenate((arr_1, arr_2), axis=0)
print(new_arr)

# 和hstack一样
new_arr = np.concatenate((arr_1, arr_2), axis=1)
print(new_arr)

# # 分割
# 一维数组
arr = np.arange(10)
print(arr.split(arr, 2))
print(arr.split(arr, 5))
# 第二个参数是指分割成几份 ,要传入正确的分割值,因为平均拆分,必须可以被数组位数整除

# 二维数组
arr = np.arange(16).reshape(4, 4)

# 在列的方向上进行分割数组
new_arr = np.hsplit(arr, 4)
new_arr1 = np.split(arr, 4, axis = 1)
print(new_arr)
print('-----------------------------------------------')
print(new_arr1)
print('-----------------------------------------------')

# 在行的方向上进行分割数组
new_arr = np.vsplit(arr, 4)
new_arr1 = np.split(arr, 4, axis = 0)
print(new_arr)
print('-----------------------------------------------')
print(new_arr1)
3.1.7 NumPy中的矩阵创建
mat 创建矩阵
matrix 创建矩阵,会占用更多的内存
asmatrix 创建矩阵,三个都是矩阵的创建,创建方式上并没差别,但是推荐使用mat,asmatrix
bmat 进行堆积组合矩阵
import numpy as np

# 创建矩阵,---【必须是二维的】

## mat
m11 = np.mat('1 2 3;4 5 6;7 8 9')
print(m11)
print('--------------------------mat1-----------------------')
#可以将列表转化为矩阵
m12 = np.mat([[1,2,3],[4,5,6],[7,8,9]])
print(m12)
print('--------------------------mat2-----------------------')
# 可以将数组转化为矩阵
m13 = np.mat(np.array([[1,2,3],[4,5,6],[7,8,9]]))
print(m13)
print('--------------------------mat3-----------------------')


## matrix
#m11 = np.matrix('1 2 3;4 5 6;7 8 9')
m11 = np.asmatrix('1 2 3;4 5 6;7 8 9')
print(m11)
print('--------------------------matrix1-----------------------')
#m12 = np.matrix([[1,2,3],[4,5,6],[7,8,9]])
m12 = np.asmatrix([[1,2,3],[4,5,6],[7,8,9]])
print(m12)
print('--------------------------matrix2-----------------------')
#m13 = np.matrix(np.array([[1,2,3],[4,5,6],[7,8,9]]))
m13 = np.asmatrix(np.array([[1,2,3],[4,5,6],[7,8,9]]))
print(m13)
print('--------------------------matrix3-----------------------')

# 推荐使用mat 或者 asmatrix【matrix,会复制一份,占用更多的内存空间】

## bmat 进行堆积组合矩阵

arr1 = list(np.arange(4).reshape(2,2))
arr2 = list(np.arange(4,8).reshape(2,2))
print(arr1,type(arr1))
new_arr = np.bmat([[arr1,arr2],[arr2,arr1]])
print(new_arr)
print('--------------------------bmat1-------------------------')
# 数组组合矩阵
arr1 = np.arange(4).reshape(2,2)
arr2 = np.arange(4,8).reshape(2,2)
print(arr1,type(arr1))

new_arr = np.bmat([[arr1,arr2],[arr2,arr1]])
print(new_arr)
print('--------------------------bmat2-------------------------')
#列表组合矩阵
arr1 = [[1,2,3],[4,5,6]]
arr2 = [[5,6,7],[7,8,9]]
print(arr1,type(arr1))

new_arr = np.bmat([[arr1,arr2],[arr2,arr1]])
print(new_arr)
print('--------------------------bmat3-------------------------')
# 矩阵组合矩阵
arr1 = np.mat('1 2;3 4')
arr2 = np.mat('5 6;7 8')
print(arr1,type(arr1))

new_arr = np.bmat([[arr1,arr2],[arr2,arr1]])
print(new_arr)
print('--------------------------bmat4-------------------------')
3.1.8 NumPy数组中矩阵的运算
import numpy as np

# Basic Operators
a = np.arange(25).reshape((5, 5))

b = np.array([10, 62, 1, 14, 2, 56, 79, 2, 1, 45,
              4, 92, 5, 55, 63, 43, 35, 6, 53, 24,
              56, 3, 56, 44, 78]).reshape((5,5))

print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a ** 2)
print(a < b) 
print(a > b)
# 这些操作符都是对数组进行逐元素运算。比如 (a, b, c) + (d, e, f) 的结果就是 (a+d, b+e, c+f)。它将分别对每一个元素进行配对,然后对它们进行运算。它返回的结果是一个数组。

print(a.dot(b))
# dot() 函数计算两个数组的点积。它返回的是一个标量(只有大小没有方向的一个值)而不是数组。



import numpy as np

jz1 = np.mat(np.arange(9).reshape(3,3))
jz2 = np.mat(np.arange(9,18).reshape(3,3))
jz3 = np.mat(np.arange(6).reshape(2,3))
jz4 = np.mat(np.arange(9,15).reshape(2,3))

#矩阵与数相乘
result = 3*jz1
print(result)
print('---------------------矩阵运算 1----------------------')

#矩阵与同形矩阵相加
result = jz1+jz2
print(result)
print('---------------------矩阵运算 2----------------------')

#矩阵与同形矩阵相减
result = jz1-jz2
print(result)
print('---------------------矩阵运算 3----------------------')

#矩阵与矩阵相乘【左矩阵列数 == 右矩阵行数(必须满足!)】
# result = jz3*jz1
# result = np.matmul(jz3,jz1) #在某些情况下 matmul 会比dot严格一点
result = np.dot(jz3,jz1) #
print(result)
print('---------------------矩阵运算 4----------------------')

#矩阵对应元素相乘 ---需要满足广播机制 ---数组的广播机制
result = np.multiply(jz1,jz2) #【必须同形】
print(result)
print('---------------------矩阵运算 5----------------------')

print(jz1,'\n',type(jz1))
print('矩阵的转置 : \n',jz1.T)
print('矩阵的逆矩阵 : \n',
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MATLAB 处理心电图数据的原理是基于数字信号处理和算法设计。心电图是记录心脏电活动的信号,MATLAB 可以读取心电图数据文件并对其进行预处理、滤波、特征提取和分类等操作。 具体来说,MATLAB 可以使用数字滤波器对心电图数据进行滤波,以去除高频噪声和基线漂移等干扰。然后,可以使用多种算法进行特征提取,例如基于小波变换的 QRS 检测算法、心率变异性分析算法等。 最后,根据提取的特征进行分类,例如根据心跳间期的长度判断心律失常类型,或者使用机器学习算法进行自动分类诊断。总的来说,MATLAB 处理心电图数据的原理是将数字信号处理和算法设计相结合,以实现对心电信号的分析和诊断。 ### 回答2: MATLAB是一种强大的科学计算软件,可以用于处理和分析心电图(ECG)数据。处理心电图数据的原理主要包括数据读取、预处理、特征提取和数据分析等步骤。 首先,MATLAB可以通过调用相应的数据读取函数(如`readtable`或`importdata`)来读取心电图数据文件,或者使用串口进行实时数据采集。读取后的数据将以矩阵或者表格的形式保存在MATLAB的工作空间中。 然后,进行数据预处理步骤,包括滤波、去基线、降噪等。滤波常用于去除心电图中的高频噪声或者低频漂移。MATLAB提供了多种滤波函数(如`designfilt`、`filter`等),可以根据需要选择适当的滤波器类型和参数。去基线操作可消除心电图的直流偏移,其中`detrend`函数可以用于去除线性或非线性趋势。降噪方法如小波变换、Kalman滤波等也可应用于心电图数据预处理。 接下来,通过特征提取方法将心电图信号转化为有意义的特征。常用的特征包括QRS波群、ST段、P波等。MATLAB提供了丰富的信号处理工具箱,如波形峰值检测、心跳周期计算等,可以用于提取这些特征。 最后,进行数据分析。使用MATLAB的统计分析工具箱,可以进行心电图数据的统计描述、频谱分析、时域参数计算以及心电图图像绘制等。统计描述可计算平均值、标准差、峰值等基本参数。频谱分析可通过快速傅里叶变换(FFT)来研究心电图信号的频率特征。时域参数计算可根据QRS维度进行心率、R-R间期等参数的计算。绘制心电图图像可使用MATLAB的绘图函数(如`plot`、`subplot`),将各个心电图特征可视化展示。 综上所述,MATLAB通过数据读取、预处理、特征提取和数据分析等步骤对心电图数据进行处理。它提供了丰富的信号处理和统计工具箱,以及强大的绘图功能,使得心电图数据的分析和研究变得更加简便和高效。 ### 回答3: Matlab处理心电图数据的原理主要涉及信号处理和数据分析的技术。 首先,Matlab可以通过导入心电图数据文件(如PDF、CSV等格式)或直接接收实时心电图信号。然后,使用Matlab的信号处理工具箱,可以对心电图信号进行预处理。预处理步骤包括滤波、去噪和基线漂移校正等。滤波可以选择合适的滤波器(如低通、高通或带通滤波器)来去除干扰信号和噪声,并突出心电信号的特征。 接下来,Matlab可以通过心电图中的波形特征,如R波(心脏收缩的峰值)来进行心率分析。通过计算R-R间期(相邻两个R波之间的时间间隔),可以得到心率的时间序列。此外,Matlab还可以进行心率变异性(HRV)分析,通过计算R-R间期的差异和特征统计参数,来评估心脏自主神经系统的功能状况。 另外,Matlab还可以进行心电图的特征提取和分类。特征提取可以从心电信号中提取出时间域、频谱域和时频域等特征,如心电图的QRS波形形状、频谱分布和心电波形的能量等。这些特征可以用于心律失常、心脏疾病和心绞痛等心血管病的自动诊断。分类算法可以根据所提取的特征,通过机器学习技术,将心电图数据分为正常和异常的类别,并进行疾病风险评估。 总之,Matlab处理心电图数据的原理包括预处理、特征提取、心率和HRV分析以及心电图分类。它提供丰富的信号处理和数据分析工具,使得研究人员和医生可以更准确和全面地分析和诊断心脏相关的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值