程序员Python 运维

长江三角洲城市群数据平台(5)-Data_mining(主成分分

2016-11-09  本文已影响49人  d33911380280

(1)在urls.py中新增以下url,

Paste_Image.png

(2)在data_mining.html中增加链接到主成分分析页面(data_pca),


Paste_Image.png Paste_Image.png

(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 %}

布局效果:


Paste_Image.png

(4)要实现点击效果:

Paste_Image.png

因此编写如下代码:

 <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")
上一篇 下一篇

猜你喜欢

热点阅读