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