<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