公告 |
求真务实打基础, 宁缺毋滥读好书。
数据挖掘青年(DMman) |
链接 |
|
Blog信息 |
blog名称:DMman(数据挖掘青年) 日志总数:102 评论数量:564 留言数量:57 访问次数:1769183 建立时间:2007年4月9日 |

| |
[Weka]Weka如何连接数据库  原创空间
数据挖掘青年 发表于 2007/5/24 17:26:15 |
Weka如何连接数据库
作者:DMman(数据挖掘青年)
以SQL Server2000为例,使用jdbc-odbc桥的方式。其他的数据库操作方法一样,具体细节各异。
1 jdbc-odbc桥的方式不用安装驱动程序,我们在管理工具里面建个数据源。
2 修改 weka\experiment下的DatabaseUtils.props文件。
********************将weka安装目录下的weka.jar解压后 就可以看到weka\experiment\DatabaseUtils.props目录********************
我们可以看到有DatabaseUtils.props.odbc;DatabaseUtils.props.oracle等我们先将DatabaseUtils.props随便改成一个其他的名字,然后将DatabaseUtils.props.mssqlserver改成DatabaseUtils.props,打开现在的DatabaseUtils.props可以看到以下部分:(#表示注释)
2.1驱动加载# JDBC driver (comma-separated list)jdbcDriver=sun.jdbc.odbc.JdbcOdbcDriver2.2数据库连接
# database URLjdbcURL=jdbc:odbc:(这里是你建的数据源的名称)
2.3数据类型的转换。由于weka仅支持名词型(nominal)、数值型(numeric)、字符串、日期(date)。所以我们要将现在数据库中的数据类型对应到这四种类型上来。
将以下数据类型对应的句子前面的注释符合去掉。由于SQL Server2000有其他的数据类型Weka尚不能识别,所以我们在下面再添加上smallint=3datetime=8等等
string,getString()= 0; -->nominalboolean,getBoolean() = 1; -->nominaldouble,getDouble() = 2; -->numericbyte,getByte() = 3; -->numericshort,getByte()= 4; -->numericint,getInteger() = 5; -->numericlong,getLong() = 6; -->numericgloat,getFloat() = 7; -->numericdate,getDate() = 8; -->datevarchar=0float=2tinyint=3int=53其他说明,暂时不用去管了(我也不是很明白...)# other optionsCREATE_DOUBLE=DOUBLE PRECISIONCREATE_STRING=VARCHAR(8000)CREATE_INT=INTcheckUpperCaseNames=falsecheckLowerCaseNames=falsecheckForTable=true********************注意,因为weka软件运行时需要读取weka。jar,所以你修改之后要重新打包jar文件替换原来的jar才可以运行weka软件成功连接数据库********************
4 OK,下面可以操作了!运行weka的Explore界面后,通过Open DB..打开SQL Viewer工作界面(3.5.5版本比3.4.10在这里精细了许多)。通过user我们设置好用户名和密码后即可connect;连接成功后,可以通过书写sql语句查询出想要的结果后,OK即可在Explore界面的preprocoss面板中看到了输入的数据。********************查询出结果来,OK导入Explore时可能会出错,说某个类型无法识别,这时候 就要看看在2.3步骤那里是否加入了该数据类型********************在连接读取数据库的数据时,SQL Viewer面板也提供了Info,相当与我们单纯用jdbc连接数据库时的调试信息。
下面是我使用的sql server 2000的数据库配置文件 可以看看
500)this.width=500'>DatabaseUtils.rar |
|
回复:Weka如何连接数据库 原创空间
bb(游客)发表评论于2008/3/13 21:26:45 |
请教楼主WEKA支持SPSS或SAS的数据类型吗,也是用您说的方法吗
以下为blog主人的回复:
不知。weka支持cvs等常用格式,或许可以在它们之间搭个桥. |
|
回复:Weka如何连接数据库 原创空间
CC(游客)发表评论于2008/2/22 14:23:11 |
請教如何設classpath。thank you
以下为blog主人的回复:
?关于java的classpath?我的电脑-右键-属性-高级-环境变量。细节部分还请自己查查,这是java的基本东西 |
|
回复:Weka如何连接数据库 原创空间
数据挖掘青年发表评论于2007/12/21 18:04:08 |
以下引用大可(游客)在2007-12-21 17:12:25的评论:
你好.请问我改了DatabaseUtils.props文件以后重新打成jar包,然后weka就不能运行了,请问这个原因出在哪里?
谢谢.
jar包没有打好,楼下的朋友用winzip压缩的方式是不可取的。打包后的jar如果双击的话应该可以运行才可以。我以前忽略了这个地方。
可在网上搜索 jar cvfm 看看打包的详细方法。打包时要指定主类 Main-Class 这里是weka.gui.Main |
|
回复:Weka如何连接数据库 原创空间
大可(游客)发表评论于2007/12/21 17:12:25 |
你好.请问我改了DatabaseUtils.props文件以后重新打成jar包,然后weka就不能运行了,请问这个原因出在哪里?
谢谢. |
|
回复:Weka如何连接数据库 原创空间
linamath(游客)发表评论于2007/11/27 13:49:30 |
以下引用linamath(游客)在2007-11-27 10:21:41的评论:
再请教楼主一个问题:我已经连接上了oracle 9i数据库,用explore已经查询出数据(在result里已有结果),但点击ok后,出现如下提示:Can't read from database:Unkown datatype:DATE.Add entry in weka/experiment/DatabaseUtils.props. If the type contains blanks,either escape them with a backslash or use underscores instead of blanks.
我认为是oracle的数据类型到weka里不能识别,于是改了weka/experiment/DatabaseUtils.props,将此文件中的数据类型部分前面的"#"号全部去掉,见下面语句,我查了一下,发现date类型已有对应,请问楼主这是什么问题呢?
# specific data typesstring, getString() = 0; --> nominalboolean, getBoolean() = 1; --> nominaldouble, getDouble() = 2; --> numericbyte, getByte() = 3; --> numericshort, getByte()= 4; --> numericint, getInteger() = 5; --> numericlong, getLong() = 6; --> numericgloat, getFloat() = 7; --> numericdate, getDate() = 8; --> datetext, getString() = 9; --> stringVARCHAR2=0NUMBER=2DOUBLE_PRECISION=2TIMESTAMP=8
以下为blog主人的回复:
DATE date不同,java是区分大小写的——可以是这个原因 你再末尾再加上 DATE=8 试试(或者DATE=0 作为字符串处理也行)
没错,谢谢楼主,果真是因为大小写的原因!可是现在又报了这样一个错误:Can't read from database:[Oracle][ODBC]Invalid transaction state
然后我点击确定,没什么反映,一切正常,请问对于这样的错误是否可以忽略呢?谢谢楼主的及时回复!再次感谢!
以下为blog主人的回复:
客气了。我没有用过orcle,百度了一下,我的理解如下(不一定对):这个错误是oracle比较常见的,后果是消耗内存较大。似乎是weka源码中操作数据库处理的不大完善,如果这个错误不影响把数据导入weka,暂且容忍了吧。
以下为blog主人的回复:
我再用weka连接access时候也出现了这个错误:非法的事务状态。导致程序巨慢致死。java操作sqlserver却不存在这个问题,费解?! |
|
回复:Weka如何连接数据库 原创空间
linamath(游客)发表评论于2007/11/27 10:21:41 |
再请教楼主一个问题:我已经连接上了oracle 9i数据库,用explore已经查询出数据(在result里已有结果),但点击ok后,出现如下提示:Can't read from database:Unkown datatype:DATE.Add entry in weka/experiment/DatabaseUtils.props. If the type contains blanks,either escape them with a backslash or use underscores instead of blanks.
我认为是oracle的数据类型到weka里不能识别,于是改了weka/experiment/DatabaseUtils.props,将此文件中的数据类型部分前面的"#"号全部去掉,见下面语句,我查了一下,发现date类型已有对应,请问楼主这是什么问题呢?
# specific data typesstring, getString() = 0; --> nominalboolean, getBoolean() = 1; --> nominaldouble, getDouble() = 2; --> numericbyte, getByte() = 3; --> numericshort, getByte()= 4; --> numericint, getInteger() = 5; --> numericlong, getLong() = 6; --> numericgloat, getFloat() = 7; --> numericdate, getDate() = 8; --> datetext, getString() = 9; --> stringVARCHAR2=0NUMBER=2DOUBLE_PRECISION=2TIMESTAMP=8
以下为blog主人的回复:
DATE date不同,java是区分大小写的——可以是这个原因 你再末尾再加上 DATE=8 试试(或者DATE=0 作为字符串处理也行) |
|
Weka.jar如何打包制作 原创空间
linamath(游客)发表评论于2007/11/27 9:13:41 |
以下引用linamath(游客)在2007-11-26 16:25:55的评论:
请问楼主如何将修改过的weka文件转换为.jar格式啊?
以下为blog主人的回复:
这是java的问题,请 google 或百度 一下 如何打包jar。 简单步骤:1当前目录下 有文件夹 weka(里面是class文件),新建一个文件随便起名 比如mf 用UtralEdit等打开mf,里面写上 Main-Class: weka.gui.Main(注意:冒号之后有一个空格;Main-Class前面不要有空格,结尾也不要有多余的空格)2 cmd 进入控制台 进入当前目录后 使用命令 java -jar cvfm weka.jar mf weka--检查打包文件是否成功:双击weka.jar如果能够运行就可以了,不能运行则需要找出原因重新打包我知道怎么处理了,将解压weka.jar文件后生成的META-INF和weka文件夹压缩为zip格式,生成压缩文件后,将.zip直接改为.jar就可以了
以下为blog主人的回复:
这种方法是无法运行的。 必须jar双击可以运行才可以 |
|
回复:Weka如何连接数据库 原创空间
linamath(游客)发表评论于2007/11/26 16:25:55 |
请问楼主如何将修改过的weka文件转换为.jar格式啊?
以下为blog主人的回复:
这是java的问题,请 google 或百度 一下 如何打包jar。 简单但不规范的操作:1当前目录下 有文件夹 weka(里面是class文件),新建一个文件随便起名 比如m2 cmd 进入控制台 进入当前目录后 使用命令 java -jar weka.jar cvfm weka |
|
如何把SQL中的表数据转换为ARFF文件 原创空间
suny(游客)发表评论于2007/11/21 19:26:52 |
想请教楼主,在使用SQL数据库中的数据时,通过数据转换后直接导入Explore就可以了吧?如果我想把它转换为ARFF格式该怎么转换?是不是导入的时候weka已经自动转换了?
谢谢
以下为blog主人的回复:
直接导入就行了。 读文件还是读数据库 数据都是放到一个Instances类保存了。如果在weka中 用数据库读入数据库,在使用Explorer上面的保存,就可以保存为arff格式的文件了 |
|
回复:Weka如何连接数据库 原创空间
suny(游客)发表评论于2007/11/13 14:58:42 |
|
|