一、Python基础、数据加载及其可视化

1_Python基础

print(“hello world”)

python代码每一行之间是没有分号隔开的!
print(“hello world”)
print(“hello EEG”)
注释:“#”,批量/解释注释:ctrl+1

python层次控制

MATLAB中使用 end 来控制不同的层次,而python使用 “Tab”来控制不同语句的层次

%MATLAB层次控制
if <condition>
<statements>
if <condition>
<statements>
end %作为流程控制
end
if <condition>
<statements>
if <condition>
<statements>
end %作为流程控制
end
#Python层次控制 #完整的语句后一定没有冒号,判断、条件、循环这些非完整的语句使用冒号
if <condition>:
<statements> #使用tab来表示层次。
if <condition>:
<statements>

python运算符

https://www.runoob.com/python/python-operators.html

python流程控制语句

循环:https://www.runoob.com/python3/python3-loop.html
判断:https://www.runoob.com/python/python-if-statement.html
跳转语句:continue跳出当次循环继续下一次、break直接跳出当前循环
碰到死循环或者程序长时间不响应:ctrl+c等方法

conda pip wheel

有时候,我们需要从互联网上下载其他研究者打包好的模块,一般使用这三个执行。优先conda–pip–wheel
安装以下软件库:

  1. mne 加载EEG
  2. numpy 矩阵运算
  3. matplotlib 绘图
  4. seaborn 绘图
  5. pandas 行为数据处理
  6. scipy 读取matlab文件
  7. nibabel 读取fMRI文件
  8. scikit-learn 机器学习

python库的导入

import numpy
import numpy as np
#使用from加载大库中的一个小库
from numpy import random
from numpy import *
from numpy.random import randint

2_Python数据加载及其可视化

2.1 nii、edf数据加载

nii加载结构项,用的较少(略)

补:eeg数据的读取

很少用python直接读取eeg数据,大多都在matlab中进行预处理和特征提取后,保存为.mat文件再读入python中
相关内容可直接百度read_epochs_eeglab

import mne
import matplotlib.pyplot as plt
#使用ctrl+鼠标左键可以查看函数说明
data_path = r"C:\Users\lwh\Desktop\eeg_and_machine_learning\data\1_LH.set"
raw_data = mne.io.read_epochs_eeglab(data_path)

#查看属性
raw_data.info 
raw_data.info['ch_names']  #通道名
raw_data.ch_names
#读取EEG的原始数据
raw_data_data = raw_data._data
raw_data_data.shape
raw_data.plot()
plt.show() #画完图后调用这个函数显示图片

在这里插入图片描述在这里插入图片描述

补:npy数据读取

import numpy as np
data = np.load(r'C:\Users\lwh\Desktop\eeg_and_machine_learning\data\data.npy')

2.2 csv、mat、txt文件加载

csv数据读取

地址前的r表示进入只读模式,否则会由于转义字符\t报错

import pandas as pd
csv_file_path = r'C:\Users\lwh\Desktop\eeg_and_machine_learning\data\csv_test.csv'
cvs_file = pd.read_csv(csv_file_path)

读取.mat文件

mat_file是dict字典类型,提取里面的data,并指定保存地址

import scipy
mat_file_path = r"C:\Users\lwh\Desktop\eeg_and_machine_learning\data\mat_test.mat"
mat_file = scipy.io.loadmat(mat_file_path)

mat_file_data = mat_file['data']
#.mat文件的保存
mat_file_save_path = r"C:\Users\lwh\Desktop\eeg_and_machine_learning\data\mat_test_save.mat"
scipy.io.savemat(mat_file_save_path,{"x":mat_file_data})

{“mat_data”:mat_file_data, ‘va’:1}里面可以写多个字典形式的数据
在这里插入图片描述

读取txt文件

txt_test1中分隔符为空格,默认可不指定
txt_test2中分隔符为“,”,需要指定分隔符delimiter = “,”

#读取txt文件
import numpy as np
#https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.loadtxt.html
txt_file_paht = r'C:\Users\lwh\Desktop\eeg_and_machine_learning\data\txt_test2.txt'
txt_file_2 = np.loadtxt(txt_file_paht,delimiter = ",")
#txt_file = np.loadtxt(txt_file_paht)

2.3 数据可视化及绘图基础

numpy

matplotlib

绘图流程:
1)库加载

import matplotlib 
import matplotlib.pyplot as plt
from matplotlib import style

2)绘制步骤

#2.1 给一个横坐标的list,给一个纵坐标的list,注意都是list类型
plt.bar(X,Y) #柱状图
plt.scatter(X,Y) #散点图
plt.plot(X,Y) #折线图

#2.2 设置参数
plt.xlable, plt.ylable #设置x,y轴的标题文字
plt.title #设置标题
plt.xlim, plt.ylim #设置x,y轴显示范围

3)图像绘制(Spyder中可以不写)

plt.show()
#图像保存(可选)
plt.saveFig()

折线图:plt.plot()
https://matplotlib.org/stable/plot_types/basic/plot.html
在这里插入图片描述在这里插入图片描述example文档:
https://matplotlib.org/stable/plot_types/index.html
https://matplotlib.org/stable/gallery/index.html

sklearn

3_Python进阶

3.1 函数定义及使用

def sum(num1,num2):
	#两数之和
	return num1+num2

# 调用函数
print(sum(5,6))

3.2 函数传参方法

def main(name): # name 即为形参
	print(name)
	return name

main("python") # python 即为实参
# 位置传参,实参与形参需要一一对应,不可多也不可少。
def main(name, age, hobby):
	content = [name, age, hobby]
	print(content)
	return content
content = main("张三", 26, "playgame")

# 关键字传参,实参与形参无需一一对应,不可多也不可少。实参和形参按照形参名进行匹配,可以不按照位置进行匹配。
def main(name, age, hobby):
	content = [name, age, hobby]
	print(content)
	return content
content = main(age=28, name="王五", hobby="fishing") 

#位置传参和关键字传参混合使用
def main(name, age, hobby):
	content = [name, age, hobby]
	print(content)
	return content
# content = main(name="张三", 28, hobby="fishing") # 报错:位置传参必须写在关键字传参的左边
# content = main("张三", 28, age="fishing") # 报错:同一个参数不能两次或者多次传值,只能传一次
content = main("张三", age=28, hobby="fishing")

3.3 Python基础数据结构

四种基础数据结构

  1. list(列表) #可变:可改变里面的数据值
  2. tuple(元组)#不可变:一经创建,不可改变,要改只能重新创建
  3. set(集合) #可变
  4. dict(字典) #可变

list列表

列表(list)是python中使用最频繁的数据类型,它是放在方括号([])内、用逗号分隔的一系列元素。列表中元素的类型可以不同,它支持数字、字符串甚至可以包含列表。换言之,列表允许嵌套。python中列表是可变的,且元素可重复。
列表的创建:

list1 = ['fMRI', 'EEG', 2022, 611]
list2 = [1, 2, 3, 4, 5 ]
list3 = ["a", "b", "c", "d"]
list4 = [list1,list2,list3,list4] #表中表,通过[i][j]缩影

列表的截取:

list1 = [1,2,3,4,5,6,7,8,9,10]
1)从0开始 list[0] list[2]
2)列表截取,左闭右开 list[1:4]
3)冒号索引、默认值 list[3:] list[:3]
4)负数索引 list[-3] list[-1] list[-3:-1] list[-3:] list[:-3] list[:]

列表的方法:

list.append(x) # 把一个元素添加到列表的结尾
list.insert(i, x) #在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如a.insert(0, x) 会插入到整个列表之前,而 a.insert(len(a), x) 相当于 a.append(x) 。
list.remove(x) #删除列表中值为 x 的第一个元素。如果没有这样的元素,就会返回一个错误。
list.pop() #从列表的指定位置移除元素,并将其返回。如果没有指定索引,list.pop(i)
a.pop()返回最后一个元素。元素随即从列表中被移除。
list.index(x) #返回列表中第一个值为 x 的元素的索引
list.sort(x) #对列表中的元素进行排序。
list.count(x) #返回 x 在列表中出现的次数。
del:通过缩影删除list中的某个值

列表操作符

#加号和乘号
[1,2,3] + [1,2,3] #拼接
[1,2,3]*2 #重复

列表的内建函数

len(list)
max(list)
min(list)
list() #list函数

查看函数说明的三种方法

#1)用ctrl+鼠标左键 只对部分有用 而且有的跳转过后还没有注释
import scipy.io
mat_file_path = r'D:\脑电与机器学习2\python基础-数据加载示例数据\mat\test.mat'
mat_file = scipy.io.loadmat(mat_file_path)
#2)输入一个括号,旁边出现小框简单提示
list1.append()
list1.sort()
#3)help 选中按ctrl+i 在函数上方
list1.sort()
mat_file = scipy.io.loadmat(mat_file_path)

tuple元组

不可变的!一经创建,不能更改!
通过括号连接 a = (1,2,3,4)
可以索引,不能更改!

set集合

使用大括号 { } 或者 set() 函数创建集合,a = {1,2,4,‘a’}。集合是无序的、不支持+,*, index, slice

集合的常见操作:
add、update方法:增加
remove方法:删除
len方法:获取长度

dic字典

dic是一种可变的数据结构,可以储存任意类型的变量。集合也是无序、不可重复的,d = {key1 : value1, key2 : value2 }。
键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。
dic的创建:

tel = {'jack': 4098, 'sape': 4139}

字典的特性:
不支持+,*, index, slice(因为集合无序不重复的)
支持in和not in

d = {"name":"westos", "age":18, "city":"西安"}
print('name' in d) # True, 判断是否为所有key值得成员
print("westos" in d) # False

字典的索引:字典只能通过key索引

tel = {'jack': 4098, 'sape': 4139}
tel['guido'] = 4127

字典的方法:

dic.keys()
list(tel.keys())
dic.values()
len(dic)

字典的遍历:

d = {"name":"eeg", "age":18, "city":"成都"}
#默认情况下,字典只会遍历key值
for item in d:
print(item)
#如果遍历字典的key和value呢?(特别特别重要)
for key,value in d.items():
print(key,value)

3.4 类、实例、方法、构造函数

类(面向对象编程):
类是某类事物的统称,对象是实物。
例如:动物是一个类,狗或者猫则是对象。猫和狗是对对象的实例化。
关键词 class 类实例化后的类叫作对象对象可以调用方法和属性

定义一个基础类:

class test_class:
	x = 1 #x是class的属性
p = test_class()
p.x #通过.调用属性

init()函数:
所有类都有一个名为 init() 的函数,它始终在启动类时执行。
使用 init() 函数将值赋给对象属性,或者在创建对象时需要执行的其他操作:

class Person:
def __init__(self, name, age):
	self.name = name
	self.age = age
p1 = Person("Bill", 63)
print(p1.name)
print(p1.age)
#每次使用类创建新对象时,都会自动调用 init() 函数

对象方法:
对象也可以包含方法。对象中的方法是属于该对象的函数。

#self 参数是对类的当前实例的引用,用于访问属于该类的变量。
#所有类方法,第一个参数都必须为self
class Person:
	def __init__(self, name, age):
		self.name = name
		self.age = age
	def myfunc(self):
		print(self.name) #要使用self访问
p1 = Person("Bill", 63)
p1.myfunc()

修改对象属性:

p1.age = 40
del p1

类的继承:
继承的主要作用是实现代码的重用。继承使得子类拥有父类的方法和属性。·

class animal:
	test = 1
	#def __init__(self,test):
	#	self.test = test
	def eat(self):
		print("吃")
	def drink(self):
		print("喝")
		
class dog(animal):
	def dark(self):
		print("汪汪叫")
		
goudan = dog()
goudan.eat()
goudan.drink()
#注:python2.0需要继承obejct基类,python3不需要
  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值