(1)在urls.py中新增以下url,
(2)在data_mining.html中增加链接到主成分分析页面(data_pca),
(3)页面布局如下,
{% extends "base.html" %}
{% load staticfiles %}
{% block main %}
<div class="div_center" style="margin:50px">
<h2>PCA計算</h2>
<button id="pca_cal">計算獲取</button>
<table id="list_data">
<tr id="row_1">
</tr>
<tr id="row_2">
</tr>
</table>
<input id="comp_num" value="3" placeholder="3">
<button id="extra_comp">顯示主成分結果</button>
<table id="list_low">
</table>
</div>
{% endblock %}
布局效果:
(4)要实现点击效果:
因此编写如下代码:
<script>
$(function(){
$('#pca_cal').on('click',function(){
$.get("/data_mining/pca/cal",function(data){
//alert(data['var'][0]);
vardata=data.var;
$.each(vardata,function(i,j){
j=j.toFixed(3);
$('#row_1').append("<th>"+i+" "+"</th>");
$('#row_2').append("<td>"+j+""+"</td>");
});
//document.write(typeof('vardata'));
})
});
#计算各主成分的方差贡献率,并赋值给表格
$('#extra_comp').on('click',function(){
var comp_num=$('#comp_num').val();
$.get("/data_mining/pca/res",{'comp_num':comp_num},function(data){
{# alert(data['low_d'][0]);#}
{# $.each(vardata,function(i,j){#}
{# j=j.toFixed(3);#}
{# $('#row_1').append("<th>"+i+" "+"</th>");#}
{# $('#row_2').append("<td>"+j+""+"</td>");#}
{##}
{# });#}
{# //document.write(typeof('vardata'));#}
$.each(data.low_d,function(i,j){
//alert(j);
var tr=$("<tr></tr>");
for (var s=0;s<comp_num;s++){
tr.append("<td>"+j[s]+""+"</td>");
}
var table=$('#list_low');
//alert(tr);
tr.appendTo(table);
})
})
})
});
#根据方差贡献率,确定提取的主成分数目,将主成分分析结果赋值给表格。
</script>
(5)在views中,编写试图函数。
首先导入pca模块,from sklearn.decomposition import PCA。
然后,编写模板显示函数,
def pca_show(request):
return render(request, "data_mining/pca.html")
编写主成分分析函数,输出方差贡献率,
@csrf_exempt
def pca_cal(request):
base_dir = 'media/data_mining/'
l = os.listdir(base_dir)
l.sort(key=lambda fn: os.path.getmtime(base_dir + fn) if not os.path.isdir(base_dir + fn) else 0)
name = l[-1]
inputfile = base_dir + name
data = pd.read_csv(inputfile, index_col=0, header=0)
pca=PCA()
pca.fit(data)
components=pca.components_.tolist()
explained_variance_ratio=pca.explained_variance_ratio_.tolist()
obj={}
obj['comp']=components
obj['var'] = explained_variance_ratio
return HttpResponse(json.dumps(obj),content_type="application/json")
编写主成分分析函数,输出降维后的结果,
@csrf_exempt
def pca_res(request):
comp_num = request.GET.get('comp_num', '')
base_dir = 'media/data_mining/'
l = os.listdir(base_dir)
l.sort(key=lambda fn: os.path.getmtime(base_dir + fn) if not os.path.isdir(base_dir + fn) else 0)
name = l[-1]
inputfile = base_dir + name
outputfile = "static/output/" + name + "pca_output" + ".csv"
data = pd.read_csv(inputfile, index_col=0, header=0)
pca=PCA(int(comp_num))
pca.fit(data)
low_d=pca.transform(data)
pd.DataFrame(low_d).to_csv(outputfile)
low_d=low_d.tolist()
obj={}
obj['low_d']=low_d
return HttpResponse(json.dumps(obj),content_type="application/json")