アットウィキロゴ

主成分分析

<html>
<head>
<meta charset="utf-8">
<title>matrix</title>
<script src="https://www.google.com/jsapi"></script>
<script src="jquery.js"></script>
<script src="fusion.js"></script> 
<script src="power.js"></script> 
<script src="eigen.js"></script> 
<script src="table.js"></script> 
</head>
<body onload="fusion()">
<div id="memo" style="width: 800px; height: 500px;">準備中</div>
</body>
</html>
 
 
 
var a=new Array();
var n=new Array();
var p=new Array();
var c=new Array();
var number_sen;
 
var datanumber;
var number;
var data=new Array();
var artist=new Array();
 
function fusion() {
 
var query = "SELECT * FROM ";   
query=query+"1w_rje_ZRhya9BXyrYaa4wpEeq-ehNxdNVKt5fG4"; 
 
 
 
        var encodedQuery = encodeURIComponent(query);
 
        var url = ['https://www.googleapis.com/fusiontables/v1/query'];
        url.push('?sql=' + encodedQuery);
        url.push('&key=AIzaSyAH0WCAXRIdHdbI-6bnMSN4kVDDZZmGyqY');
        url.push('&callback=?');
 
var sx;
 
sx=0;
 
        $.ajax({
          url: url.join(''),
          dataType: 'jsonp',
          success: function (data) {
 
 var rows = data['rows'];
 
for (var i in rows) {
sx=sx+1;
n[sx]=parseInt(rows[i][1]);
a[sx]=rows[i][0];
p[sx]=parseInt(rows[i][2]);
c[sx]=parseInt(rows[i][3]);        
}
 
number_sen=sx;
 
select();
 
power();
 
eig();
 
table();
 
}
});
 
}
 
 
function select(){
 
var s,sx;
var px=new Array();
var py=new Array();
 
 
 
sx=0;
for(s=1;s<number_sen+1;s++){
if(n[s]==1)sx=sx+1;
if(n[s]==1)px[sx]=p[s];
if(n[s]==1)py[sx]=c[s];
if(n[s]==1)artist[sx]=a[s];
}
 
datanumber=sx;
 
for(s=1;s<datanumber+1;s++){
data[s]=new Array();
}
 
number=2;
datanumber=sx;
for(s=1;s<datanumber+1;s++){
data[s][1]=px[s];
data[s][2]=py[s];
}
 
 
 
}
 
 
var b_eig=new Array();
var bx_eig=new Array();
var lam=new Array();
var v=new Array();
var z_eig;
 
function eig(){
 
var s,sx,page;
 
for(s=1;s<number+1;s++){
v[s]=new Array();
}
 
for(page=1;page<number+1;page++){
 
seekbs();
 
lam[page]=z_eig;
 
for(s=1;s<number+1;s++){
v[page][s]=b_eig[s];
}
 
 
for(s=1;s<number+1;s++){
for(sx=1;sx<number+1;sx++){
x[s][sx]=x[s][sx]-lam[page]*v[page][s]*v[page][sx];
}
}
 
}
 
}
 
function seekbs(){
 
var s,mode;
 
b_eig[1]=1;
for(s=2;s<number+1;s++){
b_eig[s]=0;
}
 
 
mode=0;
 
while(mode<100){
 
seekb();
 
var e;
e=0;
for(s=1;s<number+1;s++){
e=e+(bx_eig[s]-b_eig[s])*(bx_eig[s]-b_eig[s]);
}
if(e<0.001)mode=1000;
 
      for(s=1;s<number+1;s++){
      b_eig[s]=bx_eig[s];
      }
 
 
 
      mode=mode+1;
 
}
 
 
 
 
}
 
 
function seekb(){
 
var s,sx;
var b1;
 
    for(s=1;s<number+1;s++){
    b1=0;
    for(sx=1;sx<number+1;sx++){
    b1=b1+x[s][sx]*b_eig[sx];
    }
    bx_eig[s]=b1;
    }
 
   z_eig=0;
     for(s=1;s<number+1;s++){
     z_eig=z_eig+bx_eig[s]*bx_eig[s];
     }
 
z_eig=Math.sqrt(z_eig);
 
 
 for(s=1;s<number+1;s++){
     bx_eig[s]=bx_eig[s]/z_eig;
     }
 
}
 
 
 
var x=new Array();
var subdata=new Array();
 
function power(){
 
var s,sx;
var avgx=new Array();
var sigx=new Array();
 
var d1;
 
for(s=1;s<datanumber+1;s++){
subdata[s]=new Array();
}
 
for(s=1;s<number+1;s++){
x[s]=new Array();
}
 
for(s=1;s<number+1;s++){
d1=0;
for(sx=1;sx<datanumber+1;sx++){
d1=d1+data[sx][s];
}
avgx[s]=d1/datanumber;
}
 
for(s=1;s<number+1;s++){
d1=0;
for(sx=1;sx<datanumber+1;sx++){
d1=d1+(data[sx][s]-avgx[s])*(data[sx][s]-avgx[s]);
}
sigx[s]=Math.sqrt(d1/datanumber);
}
 
 
for(s=1;s<number+1;s++){
for(sx=1;sx<datanumber+1;sx++){
subdata[sx][s]=(data[sx][s]-avgx[s])/sigx[s];
}
}
 
var s1,s2;
 
for(s1=1;s1<number+1;s1++){
for(s2=1;s2<number+1;s2++){
d1=0;
for(sx=1;sx<datanumber+1;sx++){
d1=d1+subdata[sx][s1]*subdata[sx][s2];
}
x[s1][s2]=d1/datanumber;
}
}
 
}
 
 
 
 
 
 
google.load("visualization", "1", {packages:["corechart"]});
 
var px=new Array();
var py=new Array();
 
function table() {
 
var s;
 
change();
 
var data = new google.visualization.DataTable();
data.addColumn('string', 'c');
data.addColumn('number', 'a');
data.addColumn('number', 'b');
 
data.addRows(datanumber);
 
for(s=1;s<datanumber+1;s++){
data.setCell(s-1, 0, artist[s]);
data.setCell(s-1, 1, px[s]);
data.setCell(s-1, 2, py[s]);
}
 
        var options = {
          title: '主成分分析',
        };
 
var chart = new google.visualization.BubbleChart(document.getElementById('memo'));
chart.draw(data, options);
 
}
 
function change(){
 
for(s=1;s<datanumber+1;s++){
px[s]=v[1][1]*subdata[s][1]+v[1][2]*subdata[s][2];
py[s]=v[2][2]*subdata[s][2]+v[2][2]*subdata[s][2];
}
 
alert(v[1][1]+","+v[1][2]);
 
 
}
 
最終更新:2014年01月12日 15:55