excel中提取数据转成txt训练的办法

问题来源:由于要做一个利用神经网络来训练负荷数据,以预测负荷数据,而给的数据是excel以一列的形式给出,一年的数据,每一个小时一个数据。共8788

而需要做成txt形式:一行显示3周数据,其中2周是输入,一周输出,用来训练数据,这样一行就有504个数据。

在这里需要做50组训练数据,20组测试数据,显然手动转换是非常困难的,而且要从列转行,非常费时,果断先转换成sql,然后用sql语句来实现。

1、归一化表格数据

如果不采用归一化,那么训练速度回非常慢

这里采用归一化的常用公式:

X=(X-min)/(max-min)
在表格中果断采用公式来实现

步骤:

在一个单元中写入   =MIN(A2:A8788)

这样就能求出A2:A8788之间的最小值了,同理可以求出最大值,

接下来再新的一列中第一个写入  =(A2-30)/(430-30),30为最小值,430为最大值

然后往下拉动即可完成所有数据的归一化转化任务,转化后的效果如下图所示


2、先将excel中的数据导入到sql中,方便用sql语句来操作

但是遇到问题,转化的时候无法将所有行导入,后来才发现解决方案,


导入的时候,必须选择下面那个,才可以,具体是什么原因,待我后面查看书籍再做解释。

3、新建表

由于需要建立多列,从v1...v504,手动建立显然太费时,果断用sql语句

代码如下:

use DAD
--判断表是否存在
if object_id('aatest') is not null
drop table aatest


declare @ss varchar(8000)
declare @i int
set @ss=''
set @i=1
--建立504列的表
while @i<505 
begin
<span style="white-space:pre">	</span>--注意连接和转换方式
<span style="white-space:pre">	</span>if @i!=1
<span style="white-space:pre">		</span>set @ss=@ss+','
<span style="white-space:pre">	</span>set @ss=@ss+'v'+convert(varchar(100),@i)+ ' float' 
<span style="white-space:pre">	</span>set @i=@i+1
end
set @ss='create table aatest ('+@ss+')'
print @ss
exec(@ss)
结果如下:


4、训练数据的形成

需要将表aadata中的数据,以特定的形式转换到aatest中来。

一次取504个数据,每次循环向后推24个数据(即一天)

实现代码如下:

use DAD

declare @xh int
declare @value float
declare @s1 varchar(4000)--存储字符串1
declare @s2 varchar(4000)--存储字符串2
declare @ss varchar(8000)--连接@s1与@s2
declare @i int
declare @count int --记得声明类型
set @count=1
while @count<24*70 --24*70 共70组数据,每次往后推一天
begin	
	set @i=0
	set @s1='' --一定要记得初始化,否则执行@s1=@s1+..的时候出现错误
	set @s2=''
	set @ss=''
	--声明游标
	declare cur cursor for  --记住一定要接一个查询的语句,而且不能使exec形式的
	select gyvalue from aadata where bianhao<=(@count+503) and bianhao>=@count
	--打开游标
	open cur
	--取得每行的值(fetch)
	fetch next from cur into @value
	while(@@fetch_status=0)
	begin
		set @i=@i+1
		set @s1=@s1+'v'+convert(varchar(100),@i)
		set @s2=@s2+convert(varchar(100),@value)
		if @i<504
			begin --有两行以上的一定要用begin end,因为没有括号
			set @s1=@s1+','
			set @s2=@s2+','
			end
		else 
			break
	   	fetch next from cur into @value
	end
	--关闭游标
	close cur	
	--释放游标
	deallocate cur
	set @ss='insert into aatest('+@s1+')'+'values('+@s2+')'
	--print @ss
	exec(@ss)
	set @count=@count+24
end
结果如下:

接下来将其导出为txt的形式

在这里,我将前70行作为测试数据,后20行作为测试数据,结果如下



但是结果显示,txt无法一次显示504列,excel最多只能有256列,所以需要在原程序中修改加载数据的办法,看能否直接从数据库中加载数据


你可能感兴趣的:(excel中提取数据转成txt训练的办法)