📄 kdd.java
字号:
//package test;
import java.sql.*;
import java.io.*;
import java.io.InputStream;
/*import org.jfree.data.*;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;*/
public class Kdd{
public static Connection conn;
public static Statement stmt;
public static ResultSet res;
public static int rowNumber;
public static int columnNumber;
public static ResultSetMetaData rsmd;
public static final double UPPER = 10;
public static final double LOWER = 1;
public static void main(String avg[])
{
try
{
//数据库连接
connect();
//显示读取数据的行数
showrow();
//显示属性字段的列数
showcolumn();
//数据规范化处理
double x[][]=new double[rowNumber+1][columnNumber+1];
dispose(x);
res.close();
//算法计算
double R[]=new double[columnNumber];
R = kdd(x);
//属性相关系数排序并可视化输出
bubbleSort(R);
}catch (Exception ex)
{
System.out.println("Error : " + ex.toString());
}
}
public static void connect(){
try{
//加载Connector/J驱动
Class.forName("com.mysql.jdbc.Driver");
//建立到MySQL的连接
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/rawdata?user=root&password=me");
//执行SQL语句
stmt = conn.createStatement();
res = stmt.executeQuery("select * from rawdata");
rsmd = res.getMetaData();
}catch (Exception ex){
System.out.println("Error : " + ex.toString());
}
}
public static void showrow(){
//显示数据行数
try{
ResultSet resultset=stmt.executeQuery("select count(*) from rawdata");
resultset.next();
rowNumber=resultset.getInt(1);
System.out.print(rowNumber+"行\t");
}catch (Exception ex){
System.out.println("Error : " + ex.toString());
}
}
public static void showcolumn(){
try{
//列数
columnNumber=rsmd.getColumnCount();
System.out.print(columnNumber+"列");
System.out.println();
for(int i=1;i<columnNumber+1;i++){
String columnName=rsmd.getColumnName(i);
System.out.print(columnName+'\n');
}
}catch (Exception ex){
System.out.println("Error : " + ex.toString());
}
}
static double[][] dispose(double x[][]){
//处理数据
int i=0;
InputStream asc;
try{
res = stmt.executeQuery("select * from rawdata");
while (res.next())
{
for(int j=1;j<columnNumber+1;j++){
asc = res.getAsciiStream(j);
x[i][j-1] = asc.read();
}
i++;
}
double min[] = new double[columnNumber+1];
double max[] = new double[columnNumber+1];
String columnName;
for(int k=1;k<columnNumber+1;k++){
columnName=rsmd.getColumnName(k);
res = stmt.executeQuery("select "+columnName+" from rawdata where group by "+columnName);
res.first();
min[k] = res.getAsciiStream(1).read();
res.last();
max[k] = res.getAsciiStream(1).read();
if(min[k]==max[k])
max[k] = min[k]+1;
res.close();
}
standard(x,min,max);
}catch(Exception e){
e.printStackTrace();
}
return x;
}
public static double[][] standard(double x[][],double min[],double max[]){
//标准化数据
double temp;
int i,j;
i=j=1;
for(;j<columnNumber;j++)
for(;i<rowNumber;i++){
temp = (x[i][j]-min[j])/(max[j]-min[j]);
x[i][j] = LOWER+(UPPER-LOWER)*temp;
}
return x;
}
public static double[] kdd(double x[][]){
//计算属性相关系数并排序
double a,b;
double R[]=new double[columnNumber];
for(int i=0;i<columnNumber;i++){
double temp1 = 0.0;
double temp2 = 0.0;
double temp3 = 0.0;
for(int k=0;k<rowNumber;k++)
{//System.out.println("x["+i+"]="+average(x,i));
//if(x[k][columnNumber-1] != 0)
// System.out.println("y["+k+"]="+x[k][columnNumber-1]);
temp1+=(x[k][i]-average(x,i))*(x[k][columnNumber-1]-average(x,columnNumber-1));
temp2+=pow((x[k][i]-average(x,i)));
temp3+=pow((x[k][columnNumber-1]-average(x,columnNumber-1)));
/*System.out.println("temp1="+temp1);
System.out.println("temp2="+temp2);
System.out.println("temp3="+temp3);*/
}
a = pow(temp1);
b = temp2*temp3;
//System.out.println("a="+a);
//System.out.println("b="+b);
R[i]=a/b;
System.out.println("R["+i+"]="+R[i]+"\t");
}
return R;
}
static double pow(double d){
//平方值
return d*d;
}
static double sum(double x[][],int i){
//合计
int M = x.length;
double total = 0.0;
for(int k=0;k<M;k++)
total+=x[k][i];
return total;
}
static double average(double x[][],int i){
//计算均值
int M = x.length;
double ave_x = sum(x,i)/M;
return ave_x;
}
static void bubbleSort(double []R){
//冒泡法排序
double t;
int mid;
int R_index[]=new int[R.length];
for(int i=0;i<R.length;i++){
R_index[i]=i+1;
}
for(int i=0;i<R.length;i++)
{
for(int j=0;j<R.length-i-1;j++)
//升序排列用大于,降序排列用小于,此处为降序排列。
if(R[j]<R[j+1]){
t=R[j];R[j]=R[j+1];R[j+1]=t;
mid=R_index[j];
R_index[j]=R_index[j+1];
R_index[j+1]=mid;
}
}
for(int i=0;i<R.length;i++) {
System.out.println(R[i]+"\t"+R_index[i]);
}
//柱状图显示
chart(R,R_index);
}
public static void chart (double R[],int R_index[]){
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
int M = R.length;
for(int i = 0;i<M;i++)
{String s = String.valueOf(R_index[i]);
dataset.setValue(R[i],"第"+s+"属性","第"+s+"属性");
}
JFreeChart chart = ChartFactory.createBarChart3D("属性x(i)和输出变量y之间的依赖度表", "属性X[i]","依赖度R[i]",dataset,PlotOrientation.HORIZONTAL,true,false,false);
ChartFrame BarFrame = new ChartFrame("属性x(i)和输出变量y之间的依赖度表",chart);
BarFrame.pack();
BarFrame.setVisible(true);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -