アットウィキロゴ

tptp

package univ;
 
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class pro {
 
 
     String[] data=new String[6000];
    int s,datanumber,number;
    String[] name=new String[6000];
      int[][] v=new int[1200][60];
      String[] code_name=new String[6000];
    int[] point=new int[1200];
 
    double[][] p=new double[1200][6];
    double[] q=new double[6];
    double[][] mu=new double[6][50];
     double[][] sig=new double[6][50];
 
    public static void main(String[] args) {
        pro t=new pro();
    }
 
    pro(){
 
 
        readx("data.csv");
 
        int sx;
        for(s=2;s<datanumber+1;s++){
        String[] x=data[s].split(",");    
        name[s-1]=x[0];
        for(sx=1;sx<x.length;sx++){
        v[s-1][sx]=num_int(x[sx]);
        }
        number=x.length-1;
        }
 
    datanumber=datanumber-1;
 
    for(s=1;s<datanumber+1;s++){
    int n1,n2;
    n1=0;
    n2=0;
    for(sx=1;sx<number+1;sx++){ 
    if(v[s][sx]>10)n1=n1+1;
    if(v[s][sx]>10)n2=n2+v[s][sx];
    }
    if(n1>0)point[s]=n2/n1;
 
    }
 
    for(s=1;s<datanumber+1;s++){
 
    int h=1;
     if(point[s]>40)h=h+1;
    if(point[s]>50)h=h+1;
    if(point[s]>60)h=h+1;
    if(point[s]>70)h=h+1;
 
    for(sx=1;sx<6;sx++){
    p[s][sx]=0.025;    
    }
 
    if(h==1)p[s][5]=0.9;
    if(h==2)p[s][4]=0.9;
    if(h==3)p[s][3]=0.9;
    if(h==4)p[s][2]=0.9;
    if(h==5)p[s][1]=0.9;
    }
 
    int tr;
 
    for(tr=1;tr<101;tr++){
 
     double q1=0;   
    for(s=1;s<6;s++){
    for(sx=1;sx<datanumber+1;sx++){
    q1=q1+p[sx][s];
    }
    }
 
     for(s=1;s<6;s++){
    double q2=0;    
    for(sx=1;sx<datanumber+1;sx++){
    q2=q2+p[sx][s];
    }
    q[s]=q2/q1;
     }
 
 
    int tx=0;
    for(s=1;s<6;s++){
    for(sx=1;sx<number+1;sx++){
    double a1=0;
    double a2=0;
    for(tx=1;tx<datanumber+1;tx++){
   if(v[tx][sx]>10)a1=a1+p[tx][s];
   if(v[tx][sx]>10)a2=a2+v[tx][sx]*p[tx][s];
    }
    mu[s][sx]=30;
    if(a1>0)mu[s][sx]=a2/a1;
    }}
 
    for(s=1;s<6;s++){
    for(sx=1;sx<number+1;sx++){
    double a1=0;
    double a2=0;
    for(tx=1;tx<datanumber+1;tx++){
   if(v[tx][sx]>10) a1=a1+p[tx][s];
   if(v[tx][sx]>10) a2=a2+p[tx][s]*(v[tx][sx]-mu[s][sx])*(v[tx][sx]-mu[s][sx]);
    }
   sig[s][sx]=5;
   if(a1>0)sig[s][sx]=Math.sqrt(a2/a1);
    }}
 
   double[][] pxs=new double[1200][6]; 
 
   for(tx=1;tx<datanumber+1;tx++){
   for(s=1;s<6;s++){
   double p1=1; 
   for(sx=1;sx<number+1;sx++){
   if(v[tx][sx]>0)p1=p1*f(v[tx][sx],mu[s][sx],sig[s][sx]);   
   } 
   pxs[tx][s]=p1*q[s]; 
   }
   double z=0;
   for(s=1;s<6;s++){
    z=z+pxs[tx][s];    
    }
 
   for(s=1;s<6;s++){
   if(z>0)p[tx][s]=pxs[tx][s]/z;
   }
   }     
 
 
  }
 
  for(s=1;s<datanumber+1;s++){
  double maxp=0;
  String rank="";
  if(p[s][1]>maxp)rank="A";
  if(p[s][1]>maxp)maxp=p[s][1];
  if(p[s][2]>maxp)rank="B";
  if(p[s][2]>maxp)maxp=p[s][2];
  if(p[s][3]>maxp)rank="C";
  if(p[s][3]>maxp)maxp=p[s][3];
  if(p[s][4]>maxp)rank="D";
  if(p[s][4]>maxp)maxp=p[s][4];
  if(p[s][5]>maxp)rank="E";
  if(p[s][5]>maxp)maxp=p[s][5];
 if(rank.equals("B")) System.out.println(name[s]+","+rank);    
  }
 
 
 
 
   }
 
     double f(double x,double mux,double sigx){
double pi,f1,f2;
 
        pi=Math.PI;
 
        f2=Math.sqrt(2*pi*sigx*sigx);
        f1=-(x-mux)*(x-mux)/(2*sigx*sigx);
 
        return Math.exp(f1)/f2;
}
 
       int num_int(String str){
 
    int nx;
 
    nx=0;
 
 try{
 
    nx=Integer.parseInt(str);
 
 }catch (Exception e) {}
 
 return nx;
 
 
 
}
 
 
 
    void readx(String file){
 
String str;
BufferedReader br;  
int s;
s=0;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));  
while((str = br.readLine()) != null) {  
s=s+1;
data[s]=str;  
}
br.close();
} catch (IOException e) {System.out.println(e);}  
 
datanumber=s;
 
} 
 
 
}
 
最終更新:2017年01月05日 01:24