手动转化excel数据为符合网络输入格式的npy文件

错误:ValueError: too many values to unpack (expected 3)

运行新的代码,将我的数据转化为npy格式然后修改了路径,运行报这个错误ValueError: too many values to unpack (expected 3)参考博客,这个错误一般是元素赋值数量不对等造成的,找到报错位置:(这里有两个数组,一个元组)

data_, label_, (length, input_size) = np.load(filepath, allow_pickle=True)#读取npy文件赋值

我使用的转化代码为:(这个是直接转化的)

import pandas as pd
import numpy as np

# 先用pandas读入csv
m= pd.read_csv("MY/105_10.csv");
# 再使用numpy保存为npy
np.save("MY/105_10.npy", m);

对于元组列表不是很了解,于是查阅资料编写了元组、列表基础介绍,对这些有了基础的认识之后

我打印源代码的npy文件,发现他是有格式的shape的值为(3,),和前面的值是对应的,其中2678是数据的条数,8是每条数据的维度,data和label的数据量是相同的2678:
在这里插入图片描述
只需要将我的数据转化为相同的格式就可以了。

新建一个python文件,将如何创建对应的npy文件的逻辑理清楚。参考博客代码如下:

a=[[1,2,3],[2,3,4]]
b=[1,0,1]
total=[]
total.append(a)
total.append(b)
total.append((12,6))

np.save('./data/text.npy',total)
a1,a2=[],[]
r=np.load('./data/text.npy',allow_pickle=True)#allow_pickle=True这句是必须的,否则要报错
print(r)  #[list([[1, 2, 3], [2, 3, 4]]) list([1, 0, 1]) (12, 6)]
a1,a2,(len,wid)=np.load('./data/text.npy',allow_pickle=True)

没有报错,但是类型为list和array不太一样,先试试将我的excel的数据按照上面的思路转化为同样的格式。

对于数据data属于多行多列的数据,取值的代码如下:

import csv
total=[]
with open('I:\\代码\\数据\\修改的数据\\8-2_27-28_产气.csv','r') as myFile:
    lines=csv.reader(myFile)
    for line in lines:
       total.append(list(map(float,list(line))))#多行多列的数据

安装xlrd包的命令:pip install xlrd

对于标签label是一列的数据,参考博客取值的代码如下:

l=list(xlrd.open_workbook("I:\\代码\\数据\\修改的数据\\8-2_27-28_产气_标签.xlsx").sheets()[0].col_values(0))
label=list(map(int,l))#转化为int类型
print(label)#[0, 0, 0, 0, 0, 0, 0,..., 1, 1, 1, 1, 1]

报错:xlrd.biffh.XLRDError: Excel xlsx file; not supported参考博客,发现是xlrd的版本太高,只支持.xls文件,安装旧版xlrd:

pip uninstall xlrd
pip install xlrd==1.2.0

在这里插入图片描述
完整代码如下:

import numpy as np
import csv # 读取csv文件
import xlrd  #读取xlsx文件
total=[]
label=[]

#多行多列的数据
with open('I:\\代码\\数据\\修改的数据\\8-2_27-28_产气.csv','r') as myFile:
    lines=csv.reader(myFile)
    for line in lines:
       total.append(list(map(float,list(line))))
y=len(total[0])  #维度27
x=len(total)  #条数39887

#一列的标签数据
l=list(xlrd.open_workbook("I:\\代码\\数据\\修改的数据\\8-2_27-28_产气_标签.xlsx").sheets()[0].col_values(0))
label=list(map(int,l))

result=[]
result.append(total)
result.append(label)
result.append((x,y))

np.save('./data/8-2_27-28_q.npy',result)

在这里插入图片描述
然后将我转化的npy文件,运行试试,没有报错了,按照这个代码将我的数据全部转化。

将excel数据转化为训练集、测试集、验证集的npy文件

import numpy as np
import csv # 读取csv文件
import xlrd  #读取xlsx文件

test_total=[]
train_total=[]
vaild_total=[]

test_label=[]
train_label=[]
vaild_label=[]


with open('I:\\代码\\数据\\修改的数据\\105_11_出水.csv','r') as myFile:
   lines=list(csv.reader(myFile))  #把获取的数据转化为列表
   num=len(lines)  #总的行数

   #按照2:2:6划分测试集、验证集、训练集
   test_num=int(num*0.2)  #int(num)向下取整,math.ceil(num)向下取整,round(num)四舍五入,math.modf(num),分别取整数部分和小数部分
   vaild_num=test_num 
   train_num=num-test_num*2  #剩下的部分全部作为训练集


   for i in range(train_num):
      train_total.append(lines[i])

   for i in range(train_num,train_num+test_num):
      test_total.append(lines[i])

   for i in range(train_num+test_num,num):
      vaild_total.append(lines[i])

   y=len(lines[0])  #维度27

   #一列的标签数据
   l=list(xlrd.open_workbook("I:\\代码\\数据\\修改的数据\\105_11_出水_标签.xlsx").sheets()[0].col_values(0))
   label=list(map(int,l))

   for j in range(train_num):
      train_label.append(label[i])

   for j in range(train_num,train_num+test_num):
      test_label.append(label[i])

   for j in range(train_num+test_num,num):
      vaild_label.append(label[i])

   train_result=[]
   train_result.append(train_total)
   train_result.append(train_label)
   train_result.append((train_num,y))

   test_result=[]
   test_result.append(test_total)
   test_result.append(test_label)
   test_result.append((test_num,y))

   vaild_result=[]
   vaild_result.append(vaild_total)
   vaild_result.append(vaild_label)
   vaild_result.append((vaild_num,y))  #条数和维度

   np.save('I:\\代码\\数据\\npy文件\\训练集\\train_105_11_s.npy',train_result)  #存储
   np.save('I:\\代码\\数据\\npy文件\\测试集\\test_105_11_s.npy',test_result)
   np.save('I:\\代码\\数据\\npy文件\\验证集\\valid_105_11_s.npy',vaild_result)

任务描述 本关任务:以澳大利亚信贷批准数据集为本关数据集,划分前600为训练数据集,后90数据为测试数据集,利用逻辑回归模型预测及输出准确率。 相关知识 为了完成本关任务,你需要掌握:1.如何读取数据集,2.如何准确划分训练和测试数据集,3.如何利用逻辑回归进行预测及准确率的输出。 读取数据集 读取数据集是个基本功,导入pandas包,进行数据读取 示例如下: import pandas as pd df=pd.read_excel('数据集') 划分训练和测试数据集 划分数据集,就是将数据集分成两部分,我们可以考虑用切片实现数据集的划分。需要注意的是数据的划分需要分开特征数据和预测变量。列如,训练用的特征数据集用x表示,预测数据用y表示,测试数据则用x1,y1。 示例如下: x=df.iloc[:600,:15].values y=df.iloc[:600,15].values x1=df.iloc[600:,:15].values y1=df.iloc[600:,15].values 如何利用逻辑回归模型预测及准确率分析 1.导入逻辑回归模型板块命名为LR 2.利用逻辑回归模型创建对象lr 3.调用对象中的fit()的方法将训练数据的特征数据和预测变量进行拟合 4.调用对象中的score()方法返回模型准确率。 5.调用对象中的predict()方法,对测试样本进行预测,获得预测结果。 #导入逻辑回归模型 from sklearn.linear_model import LogisticRegression as LR lr = LR() lr.fit(训练的特征数据,训练的预测变量) r=lr.score(训练的特征数据,训练的预测变量) R=lr.predict(预测的特征数据) Z=R-预测的预测变量 Rs=len(Z[Z==0])/len(Z) print('模型准确率为:',r) print('预测准确率为:',Rs) 编程要求 根据提示,在右侧编辑器完善代码,得到结果。#********** Begin **********# #在上一关基础,对经过缺失值填充、数值变量标准化后的数据集,取前600条记录作为训练数据,后90条记录作为测试数据 #构逻辑回归模型,返回计算结果模型准确率rv和预测准确率r def return_values(): import numpy as np X1=np.load('X1.npy') #经过缺失值填充、数值变量标准化后的数据集,numpy数组690*15 Y=np.load('Y.npy') #因变量,numpy数组,690个元素 return(rv,r) #********** End **********#
最新发布
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值