只需修改path
代码语言:javascript复制class Reader:
"""
可读取的文件格式: .csv .tsv .xlsx .xlx .txt
"""
@staticmethod
def change_1d_array(array, header_cut=None, str_to_float=None):
"""
为一维数组去掉第一个值;将字符串转为数值
:param array: type:<class 'numpy.ndarray'> shape:(n,)
:param header_cut: Ture/None 是否需要第一个值
:param str_to_float: Ture/None 是否需要字符转数值
:return: 二维数组
"""
if header_cut != None:
arr = list(array)
arr.remove(arr[0])
array = np.array(arr)
if str_to_float != None:
array = np.array(list(map(float, array)))
return array
@staticmethod
def change_2d_array(array, header_cut=None, str_to_float=None):
"""
为二维数组去掉第一行;将字符串转为数值
:param array: type:<class 'numpy.ndarray'> shape:(n, n)
:param header_cut: Ture/None 是否需要第一行
:param str_to_float: Ture/None 是否需要字符转数值
:return: 二维数组
"""
if header_cut != None:
arr = list(array)
arr.remove(arr[0])
array = np.array(arr)
if str_to_float != None:
array = array.astype(np.float64)
return array
@staticmethod
def get_rows_cols(data):
"""
拿到二维数组的每一行和每一列(此处假设每一行的列数相同)
:param data: type: <class 'numpy.ndarray'> shape:(n,n)
:return:rows:every rows cols:every cols
"""
rows = [] # 每一行作为元素
cols = [] # 每一列作为元素
for value in data:
rows.append(value)
for i in range(len(data[0])):
cols.append(data[:, i])
# 转为np数组
rows = np.array(rows)
columns = np.array(cols)
return rows, columns
@staticmethod
def read_csv(path):
"""
读取.csv或.tsv文件
:param path:文件路径
:return:二维数组
"""
array = pd.read_csv(path, header=None)
np_array = np.array(array)
return np_array
@staticmethod
def read_xlsx(path, num_of_sheet):
"""
读取.xlsx或.xlx文件,为二维数组
:param path: 文件路径
:param num_of_sheet: 表数
:return: 二维数组
"""
# 读取文件
wb = load_workbook(path)
# 获取当前所有的sheet
sheets = wb.worksheets
# 选择某个sheet
sheet = sheets[num_of_sheet]
# 获得这个sheet的行
rows = sheet.rows
# 迭代读取所有的行,每一行作为一个列表
data = []
for row in rows:
data.append([col.value for col in row])
data = np.array(data)
return data
@staticmethod
def read_txt(path):
"""
1.目前.txt文件里每一行的相隔只能是','或者't'
:param path: 文件路径
:return: 二维数组
"""
data = np.loadtxt(path)
return data
if __name__ == '__main__':
reader = Reader() # 实例化
path = './y.xlsx' # 路径
data = reader.read_xlsx(path, 0) # 读取路径下的.xlsx的第0个表
data = reader.change_2d_array(data, header_cut=True, str_to_float=True) # 将第一行去掉,然后将所有字符串转为float
# 1.原始数据
x = data[:, 4]
y = data[:, 5]
ps = data[:, 6]