excel中提取数据转成txt训练的办法
来源:互联网 发布:阿里云 上海机房 编辑:程序博客网 时间:2024/04/28 00:56
问题来源:由于要做一个利用神经网络来训练负荷数据,以预测负荷数据,而给的数据是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 nulldrop table aatestdeclare @ss varchar(8000)declare @i intset @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+1endset @ss='create table aatest ('+@ss+')'print @ssexec(@ss)结果如下:
4、训练数据的形成
需要将表aadata中的数据,以特定的形式转换到aatest中来。
一次取504个数据,每次循环向后推24个数据(即一天)
实现代码如下:
use DADdeclare @xh intdeclare @value floatdeclare @s1 varchar(4000)--存储字符串1declare @s2 varchar(4000)--存储字符串2declare @ss varchar(8000)--连接@s1与@s2declare @i intdeclare @count int --记得声明类型set @count=1while @count<24*70 --24*70 共70组数据,每次往后推一天beginset @i=0set @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 @valuewhile(@@fetch_status=0)beginset @i=@i+1set @s1=@s1+'v'+convert(varchar(100),@i)set @s2=@s2+convert(varchar(100),@value)if @i<504begin --有两行以上的一定要用begin end,因为没有括号set @s1=@s1+','set @s2=@s2+','endelse break fetch next from cur into @valueend--关闭游标close cur--释放游标deallocate curset @ss='insert into aatest('+@s1+')'+'values('+@s2+')'--print @ssexec(@ss)set @count=@count+24end结果如下:
接下来将其导出为txt的形式
在这里,我将前70行作为测试数据,后20行作为测试数据,结果如下
但是结果显示,txt无法一次显示504列,excel最多只能有256列,所以需要在原程序中修改加载数据的办法,看能否直接从数据库中加载数据
- excel中提取数据转成txt训练的办法
- 使用fscanf()提取txt中一定格式的数据例子
- 如何将word的内容提取出来转成txt
- 用EXCEL打开TXT文件的办法
- 从Excel中提取数据
- 数据向Excel中写入的加速的办法.
- Hu不变矩的提取以及输出到Excel或txt文件中
- 把数据转成excel格式的方法
- MFC中读取txt的一种办法
- txt数据格式化导入excel文件中
- 将Excel数据写入到TXT中
- [C#][CAD][dxf]提取dxf中指定的数据到TXT文件中
- python把txt中字符串数据提取为numpy数组
- Apache POI TXT转成EXCEL(XLSX)
- 用Python在训练好的log文件中提取出数据并画图
- EXCEL数据转成内表数据的函数
- 读取txt数据,向excel中写入数据
- Excel数据提取问题
- 灰色系统理论
- Lock Convoys Explained
- datagrid行内编辑时为datetimebox
- Tomcat 启动报错 java.net.BindException: Permission denied :80
- ESql查询
- excel中提取数据转成txt训练的办法
- c语言_知识点总结
- Java程序中函数的理解及应用
- 开源项目源码解析-Volley 源码解析
- java对xml文件的出来和生成
- svn异地开发
- eclipse恢复默认设置
- SQL Server 2008 评估期已过解决方法
- /bin/bash^M: bad interpreter: No such file or dire