Weka 教學
(UI & Code)
建立訓練資料集
使用excel建立
打開Execl
輸入下面程式碼,下拉新增100筆訓練資料。
另存檔案 副檔名為 *.csv 檔
RAND() -產生亂數。
ROUND("value",X) -四捨五入到x位。
IF("value"> 500,"1","0") - value大於500為1,否則為0。
=ROUND(RAND()*1024,0)

=IF("value">500,"1","0")
"value" - 要判斷的欄位
value:
state:
Weka
Weka資料型態轉換
步驟:
- 開啟Weka
- 點選Explorer
- 載入訓練資料
- 修改資料屬性型態
在這裡我們使用的範例需要的型態是
value → Numeric
state → Nominal - 令存檔案為*.arff檔
操作說明(一)


操作說明(二)
修改資料屬性型態 :
點選Choose,選擇路徑
weka > filters > unsupervise > attribute > NumericToNominal


操作說明(三)
點選紅色方框選擇型態修改的套用範圍(如下圖所示),原本first-last 修改成 last(如右圖所示) 按下OK ,按下Apply套用所制定的修改型態。


最後把修改完的屬性儲存點選Save...,存儲檔案副檔名為*.arff檔。
Weka(圖形介面)
使用NaiveBayes做分類
Weka訓練分類model
- 點選Classify
- Choose需要分類的演算法,這裡我們使用NaiveBayes。
Path : weka > classifiers > bayes > NaiveBayes - 選擇使用訓練集來訓練model。
- 選擇要預測的屬性。
- 開始訓練model。

操作說明 :
Weka 使用model分類
- 選擇已訓練的model。
- 輸入要分類的測試集。
PS.輸入的測試集需要跟訓練集屬性的型態相同。
- 點選More options...,
把Output predictions勾選。
- 點選Start,開始預測分類。

操作說明 :

預測結果

Weka(Java Library)
使用NaiveBayes做分類
使用Eclipse IDE(一)
- 建立新專案及Main類別。
- 建立一個lib資料夾,放入weka.jar(在weka安裝路徑下)、mysql-connent-java-5.1.37-bin.jar。
- 載入jar方式在專案按下右鍵點選Build Path → Configure Build Path...。


使用Eclipse IDE(二)
- 點選Add JARs...
- 選擇所需的lib

讀取arff檔 :
import java.io.BufferedReader;
import java.io.FileReader;
import weka.core.Instances;
...
BufferedReader reader = new BufferedReader(
new FileReader("arff檔的路徑"));
Instances training = new Instances(reader);
reader.close();
//顯示資料
System.out.println(training);
讀取database(一)
import weka.core.Instances;
import weka.experiment.InstanceQuery;
...
public static final String URL = "jdbc:mysql://資料庫IP:3306/資料庫名稱";
public final static String USER = "使用者帳號";
public final static String PASSWORD = "使用者密碼";
InstanceQuery query = new InstanceQuery();
query.setUsername(USER);
query.setPassword(PASSWORD);
query.setDatabaseURL(URL);
query.setQuery("select * from {資料表}");
Instances data = query.retrieveInstances();
//顯示資料
System.out.println(data );
讀取database(二)
執行完會產生錯誤訊息 :

解決方式 :
- 使用解壓縮軟體開啟weka.jar檔
- 路徑weka.jar\weka\experiment下找到DatabaseUtils.props,並且解壓縮該檔案。
- 使用文字編輯器修改DatabaseUtils.props,並輸入下列程式碼,之後將該檔案再拉回解壓縮軟體,即可修復該錯誤訊息。
# Database settings for MySQL 3.23.x, 4.x
#
# General information on database access can be found here:
# http://weka.wikispaces.com/Databases
#
# url: http://www.mysql.com/
# jdbc: http://www.mysql.com/products/connector/j/
# author: Fracpete (fracpete at waikato dot ac dot nz)
# version: $Revision: 5836 $
# JDBC driver (comma-separated list)
jdbcDriver=org.gjt.mm.mysql.Driver
#jdbcDriver=com.mysql.jdbc.Driver
# database URL
#jdbcURL=jdbc:mysql://server_name:3306/database_name
#jdbcURL=jdbc:mysql://localhost:3306/rtest
# specific data types
# string, getString() = 0; --> nominal
# boolean, getBoolean() = 1; --> nominal
# double, getDouble() = 2; --> numeric
# byte, getByte() = 3; --> numeric
# short, getByte()= 4; --> numeric
# int, getInteger() = 5; --> numeric
# long, getLong() = 6; --> numeric
# float, getFloat() = 7; --> numeric
# date, getDate() = 8; --> date
# text, getString() = 9; --> string
# time, getTime() = 10; --> date
# specific data types
string, getString() = 0; --> nominal
boolean, getBoolean() = 1; --> nominal
double, getDouble() = 2; --> numeric
byte, getByte() = 3; --> numeric
short, getByte()= 4; --> numeric
int, getInteger() = 5; --> numeric
long, getLong() = 6; --> numeric
float, getFloat() = 7; --> numeric
date, getDate() = 8; --> date
text, getString() = 9; --> string
time, getTime() = 10; --> date
TINYINT=3
SMALLINT=4
#SHORT=4
SHORT=5
INTEGER=5
INT=5
INT_UNSIGNED=6
BIGINT=6
LONG=6
REAL=7
NUMERIC=2
DECIMAL=2
FLOAT=2
DOUBLE=2
CHAR=0
TEXT=0
VARCHAR=0
LONGVARCHAR=9
BINARY=0
VARBINARY=0
LONGVARBINARY=9
BIT=1
BLOB=9
DATE=8
TIME=8
DATETIME=8
TIMESTAMP=8
# other options
CREATE_DOUBLE=DOUBLE
CREATE_STRING=TEXT
CREATE_INT=INT
CREATE_DATE=DATETIME
DateFormat=yyyy-MM-dd HH:mm:ss
checkUpperCaseNames=false
checkLowerCaseNames=false
checkForTable=true
# All the reserved keywords for this database
# Based on the keywords listed at the following URL (2009-04-13):
# http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-0.html
Keywords=\
ADD,\
ALL,\
ALTER,\
ANALYZE,\
AND,\
AS,\
ASC,\
ASENSITIVE,\
BEFORE,\
BETWEEN,\
BIGINT,\
BINARY,\
BLOB,\
BOTH,\
BY,\
CALL,\
CASCADE,\
CASE,\
CHANGE,\
CHAR,\
CHARACTER,\
CHECK,\
COLLATE,\
COLUMN,\
COLUMNS,\
CONDITION,\
CONNECTION,\
CONSTRAINT,\
CONTINUE,\
CONVERT,\
CREATE,\
CROSS,\
CURRENT_DATE,\
CURRENT_TIME,\
CURRENT_TIMESTAMP,\
CURRENT_USER,\
CURSOR,\
DATABASE,\
DATABASES,\
DAY_HOUR,\
DAY_MICROSECOND,\
DAY_MINUTE,\
DAY_SECOND,\
DEC,\
DECIMAL,\
DECLARE,\
DEFAULT,\
DELAYED,\
DELETE,\
DESC,\
DESCRIBE,\
DETERMINISTIC,\
DISTINCT,\
DISTINCTROW,\
DIV,\
DOUBLE,\
DROP,\
DUAL,\
EACH,\
ELSE,\
ELSEIF,\
ENCLOSED,\
ESCAPED,\
EXISTS,\
EXIT,\
EXPLAIN,\
FALSE,\
FETCH,\
FIELDS,\
FLOAT,\
FLOAT4,\
FLOAT8,\
FOR,\
FORCE,\
FOREIGN,\
FROM,\
FULLTEXT,\
GOTO,\
GRANT,\
GROUP,\
HAVING,\
HIGH_PRIORITY,\
HOUR_MICROSECOND,\
HOUR_MINUTE,\
HOUR_SECOND,\
IF,\
IGNORE,\
IN,\
INDEX,\
INFILE,\
INNER,\
INOUT,\
INSENSITIVE,\
INSERT,\
INT,\
INT1,\
INT2,\
INT3,\
INT4,\
INT8,\
INTEGER,\
INTERVAL,\
INTO,\
IS,\
ITERATE,\
JOIN,\
KEY,\
KEYS,\
KILL,\
LABEL,\
LEADING,\
LEAVE,\
LEFT,\
LIKE,\
LIMIT,\
LINES,\
LOAD,\
LOCALTIME,\
LOCALTIMESTAMP,\
LOCK,\
LONG,\
LONGBLOB,\
LONGTEXT,\
LOOP,\
LOW_PRIORITY,\
MATCH,\
MEDIUMBLOB,\
MEDIUMINT,\
MEDIUMTEXT,\
MIDDLEINT,\
MINUTE_MICROSECOND,\
MINUTE_SECOND,\
MOD,\
MODIFIES,\
NATURAL,\
NOT,\
NO_WRITE_TO_BINLOG,\
NULL,\
NUMERIC,\
ON,\
OPTIMIZE,\
OPTION,\
OPTIONALLY,\
OR,\
ORDER,\
OUT,\
OUTER,\
OUTFILE,\
PRECISION,\
PRIMARY,\
PRIVILEGES,\
PROCEDURE,\
PURGE,\
READ,\
READS,\
REAL,\
REFERENCES,\
REGEXP,\
RELEASE,\
RENAME,\
REPEAT,\
REPLACE,\
REQUIRE,\
RESTRICT,\
RETURN,\
REVOKE,\
RIGHT,\
RLIKE,\
SCHEMA,\
SCHEMAS,\
SECOND_MICROSECOND,\
SELECT,\
SENSITIVE,\
SEPARATOR,\
SET,\
SHOW,\
SMALLINT,\
SONAME,\
SPATIAL,\
SPECIFIC,\
SQL,\
SQLEXCEPTION,\
SQLSTATE,\
SQLWARNING,\
SQL_BIG_RESULT,\
SQL_CALC_FOUND_ROWS,\
SQL_SMALL_RESULT,\
SSL,\
STARTING,\
STRAIGHT_JOIN,\
TABLE,\
TABLES,\
TERMINATED,\
THEN,\
TINYBLOB,\
TINYINT,\
TINYTEXT,\
TO,\
TRAILING,\
TRIGGER,\
TRUE,\
UNDO,\
UNION,\
UNIQUE,\
UNLOCK,\
UNSIGNED,\
UPDATE,\
UPGRADE,\
USAGE,\
USE,\
USING,\
UTC_DATE,\
UTC_TIME,\
UTC_TIMESTAMP,\
VALUES,\
VARBINARY,\
VARCHAR,\
VARCHARACTER,\
VARYING,\
WHEN,\
WHERE,\
WHILE,\
WITH,\
WRITE,\
XOR,\
YEAR_MONTH,\
ZEROFILL
# The character to append to attribute names to avoid exceptions due to
# clashes between keywords and attribute names
KeywordsMaskChar=_
#flags for loading and saving instances using DatabaseLoader/Saver
nominalToStringLimit=50
idColumn=auto_generated_id
程式碼可以下拉 ↓ 請完整複製
更新database
import weka.core.Instances;
import weka.experiment.InstanceQuery;
...
public static final String URL = "jdbc:mysql://資料庫IP:3306/資料庫名稱";
public final static String USER = "使用者帳號";
public final static String PASSWORD = "使用者密碼";
InstanceQuery query = new InstanceQuery();
query.setUsername(USER);
query.setPassword(PASSWORD);
query.setDatabaseURL(URL);
//執行更新sql
/*
* UPDATE light SET state = 0 WHERE id=1
* 更新light 資料表 id = 1 更改 state = 0
* EX: query.execute("UPDATE light SET state = 0 WHERE id=1");
*/
query.execute("Sql語法");
Filter
Remove remove=new Remove();
String[] options= new String[2];
options[0]="-R"; //範圍
options[1]="1,4"; //第1個、第4個屬性
remove.setOptions(options);
remove.setInputFormat(data);
Instances dataClusterer = Filter.useFilter(data, remove);
刪除屬性 :
數值轉名詞屬性 :
NumericToNominal convert= new NumericToNominal();
String[] options= new String[2];
options[0]="-R";
options[1]="2";
convert.setOptions(options);
convert.setInputFormat(removedata);
Instances Dataset=Filter.useFilter(removedata, convert);
貝氏分類
BufferedReader reader = new BufferedReader(new FileReader("arff檔的路徑"));
Instances training = new Instances(reader);
reader.close();
// 設定要分類的屬性
training.setClassIndex(training.numAttributes() - 1);
// 實作貝氏分類
NaiveBayes nb = new NaiveBayes();
// 開始訓練
nb.buildClassifier(training);
/*
* 分類
* 基於測試:這邊使用訓練集的資料來做分類
*/
double result = nb.classifyInstance(training.instance(0));
System.out.println(training.instance(0).value(0) + "," + result);
使用PHP取得Mysql資料

資料庫欄位
PHP 連接Mysql
<?php
//使用者資訊
$host = "主機IP";
$user = "使用者帳號";
$pass = "使用者密碼";
//資料庫資訊
$databaseName = "資料庫";
$tableName = "資料表";
//連結資料庫
$con = mysql_connect($host,$user,$pass);
$dbs = mysql_select_db($databaseName, $con);
//資料庫Sql query語法
$sql = "SELECT * FROM $tableName";
//執行query語法
$result = mysql_query($sql);
//取出資料
$data=array();
while ($row = mysql_fetch_array($result)){
array_push($data, $row);
}
//輸出並且轉成json格式
echo json_encode($data);
?>
Code :
HighCharts
HTML
<!DOCTYPE html>
<html lang="zh-tw">
<head>
<!--<meta charset="UTF-8" http-equiv="refresh" content="5">-->
<title>Highcharts</title>
<!-- jQuery js>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<!--include the highcharts library-->
<script src="http://code.highcharts.com/highcharts.js"></script>
<body>
<div class="container">
<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto">
Insert Highchart Here
</div>
</div>
</body>
</html>
建立一個highchart.html檔:
highchats初始化
<script language="javascript">
$(function(){
$('#container').highcharts({
//標題
title: {
text: 'Sensor data from MySQL to Highcharts',
x: -20 //center
},
//子標題
subtitle: {
text: 'Light Value',
x: -20
},
//設定X座標
xAxis: {
//X座標標題
title: {
text: 'Time'
},
//設定X間格
categories: [1,2,3,4,5],
labels:{
//隱藏X軸的標籤
enabled: false,
}
},
//設定Y座標
yAxis: {
//Y座標標題
title: {
text: 'value',
}
},
//圖表的資料
series: [{
name: 'Sensor-Light',
data: [10,2,6,4,5]
}]
});
})
</script>
將下列程式碼貼在highcharts.html的<head></head>之間。
更改資料點的顏色
series: [{
name: 'Sensor-Light',
data: [
{y:10 ,fillColor:'#FF0000'},
{y:6 ,fillColor:'#00FF00'},
{y:14 ,fillColor:'#0000FF'}
]
}]
把原本的series,data增加一個fillColor屬性,如下:
Jquery Ajax
<script>
$(function () {
$.ajax({
url: 'database.php',//連接的URL
data: "{}",//夾帶的參數
dataType: 'json', //資料格式
success: function(data) //傳送成功的function
{
for (var i = 0; i < data.length; i++)
{
//案F12選擇console 即可看到訊息
console.log(
"value=" + data[i]['value'] + "," +
"state=" + data[i]['state'] + "," +
"time=" + data[i]['time']
);
}
}
});
});
</script>
Jquery Ajax + HighCharts
<script>
$(function () {
$.ajax({
url: 'database.php',//連接的URL
data: "{}",//夾帶的參數
dataType: 'json', //資料格式
success: function(data) //傳送成功的function
{
var values = [];
var time = [];
for (var i = 0; i < data.length; i++)
{
values.push(parseInt(data[i]['value']));
time.push(data[i]['time']);
}
$('#container').highcharts({
//標題
title: {
text: 'Sensor data from MySQL to Highcharts',
x: -20 //center
},
//子標題
subtitle: {
text: 'Light Value',
x: -20
},
//設定X座標
xAxis: {
//X座標標題
title: {
text: 'Time'
},
//設定X間格
categories: time,
labels:{
//隱藏X軸的標籤
enabled: false,
}
},
//設定Y座標
yAxis: {
//Y座標標題
title: {
text: 'value',
}
},
//圖表的資料
series: [{
name: 'Sensor-Light',
data: values
}]
});
}
});
});
</script>
原始碼參考
Weka 教學
By isamare0304
Weka 教學
weka介紹
- 1,588