热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ruby样本数据处理1

关于我的论文课题。目前实验在预处理数据阶段,关于瓦斯预警系统的实现。原始数据为access存储的一年的数据。是KJ70系统所用到的处理数据。里面的格式是一个库里有一个
关于我的论文课题。
目前实验在预处理数据阶段,关于瓦斯预警系统的实现。
原始数据为access存储的一年的数据。是KJ70系统所用到的处理数据。
里面的格式是一个库里有一个月每天的数据,以及这一个月里的报警情况。
昨天试了一下用matlab不太适应。上手不快,所以数据预处理放在ruby里实现,得到学习样本,然后放到matlab里训练网络模型。
----基本思路是这样。
下面跟ruby处理数据库的方法。
首先是用ODBC连接数据库。ruby里面已经集成了DBI了,所以直接:
require 'DBI'

  conn = DBI.connect('DBI:ODBC:01','elite','system_project')

  current_tables=conn.tables
rs = conn.select_all('SELECT * FROM TABLE')
可以根据current_tables.class和rs.class看到这两个变量都是array型的。下面的操作就比较简单了。
整个原始数据的处理代码:
require 'DBI'
  conn = DBI.connect('DBI:ODBC:01','elite','system_project')
  current_tables=conn.tables

def get_column_names(connection,table_name)
  connection.columns(table_name).collect { |i| i.name  }
end

columns=get_column_names(conn,'01')
column_time=columns[0]
column_position=columns[1]
column_equip=columns[2]
column_data=columns[3]

def process_date(timestamp,tablename)
  str=timestamp.to_s
  arr=str.split(" ")
  year=2006
  month=1
  day=tablename.to_i
  t=arr[1].split('.')[0].split(':')
  hour=t[0].to_i
  min=t[1].to_i
  sec=t[2].to_i
  (day-1)*24*60*60+hour*60*60+min*60+sec
end

def update_time(arr,month)
  arr.each do |elem|
    elem[0]=process_date(elem[0],month)
  end
  arr.sort_by{|x| x[0]}
end

month=nil
gas_rs=wind_rs=tpt_rs=co_rs=prs_rs=Array.new
(1..2).each do |i|
  if i<10
    month&#61;"0"&#43;i.to_s
  else
    month&#61;i.to_s
  end
  gm&#61;conn.select_all("select #{column_time},#{column_data} from #{month} where #{column_position}&#61;21")
  wm&#61;conn.select_all("select #{column_time},#{column_data} from #{month} where #{column_position}&#61;22")
  tm&#61;conn.select_all("select #{column_time},#{column_data} from #{month} where #{column_position}&#61;25")
  cm&#61;conn.select_all("select #{column_time},#{column_data} from #{month} where #{column_position}&#61;26")
  pm&#61;conn.select_all("select #{column_time},#{column_data} from #{month} where #{column_position}&#61;4")
  #update database 01 time attribute
   gas_rs.push(update_time(gm,month.to_i))
   wind_rs.push(update_time(wm,month.to_i))
   tpt_rs.push(update_time(tm,month.to_i))
   co_rs.push(update_time(cm,month.to_i))
   prs_rs.push(update_time(pm,month.to_i))
end


def create_seq(gas,wind,tpt,co,prs)
  value&#61;Array.new
  (0..gas.length-2).to_a.each do |i|
    value[i]&#61;[gas[i][0],gas[i][1],wind[i][1],tpt[i][1],co[i][1],prs[i][1]]
  end
  value
end


seq1&#61; create_seq(gas_rs,wind_rs,tpt_rs,co_rs,prs_rs).sort


 msq &#61; DBI.connect(&#39;DBI:ODBC:seq&#39;,&#39;root&#39;,&#39;&#39;)


msq.do("CREATE TABLE seq1 (
             time INT  NOT NULL primary key,
             gas float NOT NULL,
             wind_speed FLOAT,
             temperature FLOAT,
             carbon_monoxide FLOAT,
             air_pressure FLOAT)")


 msq.do("INSERT INTO seq1 (time,gas,wind_speed,temperature,carbon_monoxide,air_pressure)
                  VALUES
                    (#{seq1[0]},#{seq1[1].to_f},#{seq1[2].to_f},#{seq1[3].to_f},#{seq1[4].to_f})
                    ")

 msq.do("INSERT INTO seq1 (time)
                  VALUES
                    (#{seq1[0].to_i})
                    ")


(0..seq1.length-1).each do |i|
   msq.do("INSERT INTO seq1 (time,gas,wind_speed,temperature,carbon_monoxide,air_pressure)
                  VALUES
                    (#{seq1[i][0]},#{seq1[i][1]},#{seq1[i][2]},#{seq1[i][3]},#{seq1[i][4]},#{seq1[i][5]})
                    ")
end

按照KJ70采集的数据&#xff0c;第一个月17天内的各种数据变化图&#xff1a;
瓦斯浓度序列图
 
风速序列图
温度序列图
负压序列图
一氧化碳序列图&#xff1a;




本文转自 fsjoy1983 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/fsjoy/213230&#xff0c;如需转载请自行联系原作者



推荐阅读
author-avatar
双鱼2502858483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有