|
|
|
@ -5,7 +5,20 @@
|
|
|
|
<p style="font-weight: 400;font-size: 12px;color: #E6E6E6;">(给出任务清单参考,做哪些数据的统计分析)Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p>
|
|
|
|
<p style="font-weight: 400;font-size: 12px;color: #E6E6E6;">(给出任务清单参考,做哪些数据的统计分析)Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean euismod bibendum laoreet. Proin gravida dolor sit amet lacus accumsan et viverra justo commodo. Proin sodales pulvinar sic tempor. Sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam fermentum, nulla luctus pharetra vulputate, felis tellus mollis orci, sed rhoncus pronin sapien nunc accuan eget.</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="main-but">
|
|
|
|
<div class="main-but">
|
|
|
|
<el-button><img src="../../../assets/images/导入.png" alt="">算法知识导入</el-button>
|
|
|
|
<el-upload
|
|
|
|
|
|
|
|
ref="uploadRef"
|
|
|
|
|
|
|
|
class="upload-demo"
|
|
|
|
|
|
|
|
:file-list="fileList"
|
|
|
|
|
|
|
|
:auto-upload="false"
|
|
|
|
|
|
|
|
:on-change="handleChange"
|
|
|
|
|
|
|
|
:show-file-list="false"
|
|
|
|
|
|
|
|
multiple="multiple"
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
<template #trigger>
|
|
|
|
|
|
|
|
<el-button><img src="../../../assets/images/导入.png" alt="">算法知识导入</el-button>
|
|
|
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<!-- <div class="reportPromptFile" v-html="item[`${index}`].path"></div> -->
|
|
|
|
|
|
|
|
</el-upload>
|
|
|
|
<el-button @click="taskSubmit"><img src="../../../assets/images/提交.png" alt="">实训任务提交</el-button>
|
|
|
|
<el-button @click="taskSubmit"><img src="../../../assets/images/提交.png" alt="">实训任务提交</el-button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="app-main">
|
|
|
|
<div class="app-main">
|
|
|
|
@ -15,7 +28,7 @@
|
|
|
|
<span>一、选择指标</span>
|
|
|
|
<span>一、选择指标</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="metrics">
|
|
|
|
<div class="metrics">
|
|
|
|
<el-select v-model="input" placeholder="请选择数据" style="width: 180px">
|
|
|
|
<el-select v-model="input" placeholder="请选择" style="width: 180px" @change="optionData">
|
|
|
|
<el-option
|
|
|
|
<el-option
|
|
|
|
v-for="item in options"
|
|
|
|
v-for="item in options"
|
|
|
|
:key="item.value"
|
|
|
|
:key="item.value"
|
|
|
|
@ -25,19 +38,19 @@
|
|
|
|
</el-select>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="metrics-table" style="margin-top: 10px">
|
|
|
|
<div class="metrics-table" style="margin-top: 10px">
|
|
|
|
<el-table border :data="tableData" style="width: 100%" :header-cell-style="headerCellStyle">
|
|
|
|
<el-table border :data="tableData" style="width: 100%" :header-cell-style="headerCellStyle" @selection-change="handleSelectionChange" >
|
|
|
|
<el-table-column type="selection" prop="date" label="Date" align="center"/>
|
|
|
|
<el-table-column type="selection" label="Date" align="center" :selectable="flag"/>
|
|
|
|
<el-table-column prop="name" label="指标" align="center"/>
|
|
|
|
<el-table-column prop="text" label="指标" align="center"/>
|
|
|
|
</el-table>
|
|
|
|
</el-table>
|
|
|
|
<el-button>确定</el-button>
|
|
|
|
<el-button @click="taskZB">确定</el-button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="left-top">
|
|
|
|
<div class="left-top">
|
|
|
|
<span>二、数据预处理</span>
|
|
|
|
<span>二、数据预处理</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="metrics">
|
|
|
|
<div class="metrics">
|
|
|
|
<el-select v-model="input" placeholder="请选择数据" style="width: 180px">
|
|
|
|
<el-select v-model="input2" @change="optionData2" placeholder="请选择" style="width: 180px">
|
|
|
|
<el-option
|
|
|
|
<el-option
|
|
|
|
v-for="item in options"
|
|
|
|
v-for="item in options2"
|
|
|
|
:key="item.value"
|
|
|
|
:key="item.value"
|
|
|
|
:label="item.label"
|
|
|
|
:label="item.label"
|
|
|
|
:value="item.value"
|
|
|
|
:value="item.value"
|
|
|
|
@ -45,9 +58,9 @@
|
|
|
|
</el-select>
|
|
|
|
</el-select>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="metrics" style="margin-top:15px">
|
|
|
|
<div class="metrics" style="margin-top:15px">
|
|
|
|
<el-select v-model="input" placeholder="请选择数据" style="width: 180px">
|
|
|
|
<el-select v-model="input3" @change="optionData2" placeholder="请选择" style="width: 180px">
|
|
|
|
<el-option
|
|
|
|
<el-option
|
|
|
|
v-for="item in options"
|
|
|
|
v-for="item in options3"
|
|
|
|
:key="item.value"
|
|
|
|
:key="item.value"
|
|
|
|
:label="item.label"
|
|
|
|
:label="item.label"
|
|
|
|
:value="item.value"
|
|
|
|
:value="item.value"
|
|
|
|
@ -58,11 +71,32 @@
|
|
|
|
<span>三、模型参数设置</span>
|
|
|
|
<span>三、模型参数设置</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="metrics-table" style="margin-top: 10px">
|
|
|
|
<div class="metrics-table" style="margin-top: 10px">
|
|
|
|
<el-table border :data="tableData" style="width: 100%" :header-cell-style="headerCellStyle">
|
|
|
|
<span style="font-weight: 400;font-size: 12px;color: #FFFFFF;">
|
|
|
|
<el-table-column type="selection" prop="date" label="Date" align="center"/>
|
|
|
|
聚类方法:
|
|
|
|
<el-table-column prop="name" label="指标" align="center"/>
|
|
|
|
</span>
|
|
|
|
</el-table>
|
|
|
|
<div class="metrics" style="margin-top:10px">
|
|
|
|
<el-button>计算</el-button>
|
|
|
|
<el-select v-model="input4" placeholder="请选择" style="width: 180px">
|
|
|
|
|
|
|
|
<el-option
|
|
|
|
|
|
|
|
v-for="item in options4"
|
|
|
|
|
|
|
|
:key="item.value"
|
|
|
|
|
|
|
|
:label="item.label"
|
|
|
|
|
|
|
|
:value="item.value"
|
|
|
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
</el-select>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div style="margin-top:10px">
|
|
|
|
|
|
|
|
<span style="font-weight: 400;font-size: 12px;color: #FFFFFF;">
|
|
|
|
|
|
|
|
设置簇数K值:
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<el-input v-model="input5" style="width: 180px;margin-top:5px"/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div style="margin-top:10px">
|
|
|
|
|
|
|
|
<span style="font-weight: 400;font-size: 12px;color: #FFFFFF;">
|
|
|
|
|
|
|
|
最大迭代次数:
|
|
|
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
<el-input v-model="input6" style="width: 180px;margin-top:5px"/>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<el-button @click="computation">计算</el-button>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div style="margin-top: auto;">
|
|
|
|
<div style="margin-top: auto;">
|
|
|
|
@ -76,7 +110,7 @@
|
|
|
|
<div class="main-right">
|
|
|
|
<div class="main-right">
|
|
|
|
<div>
|
|
|
|
<div>
|
|
|
|
<span style="font-weight: bold;font-size: 18px;color: #3596EB;">分析数据:</span>
|
|
|
|
<span style="font-weight: bold;font-size: 18px;color: #3596EB;">分析数据:</span>
|
|
|
|
<el-table :data="tableData" style="width: 94%;margin-top:10px" :header-cell-style="headerCellStyle" height="350">
|
|
|
|
<el-table :data="tableData2" style="width: 94%;margin-top:10px" :header-cell-style="headerCellStyle" height="350">
|
|
|
|
<el-table-column v-for="column in tableLabel" :key="column.prop" :prop="column.prop" :label="column.label" align="center"/>
|
|
|
|
<el-table-column v-for="column in tableLabel" :key="column.prop" :prop="column.prop" :label="column.label" align="center"/>
|
|
|
|
</el-table>
|
|
|
|
</el-table>
|
|
|
|
<el-pagination style="margin-top:10px" background layout="prev, pager, next" :total="1000" />
|
|
|
|
<el-pagination style="margin-top:10px" background layout="prev, pager, next" :total="1000" />
|
|
|
|
@ -89,6 +123,17 @@
|
|
|
|
</el-table>
|
|
|
|
</el-table>
|
|
|
|
<el-pagination style="margin-top:10px" background layout="prev, pager, next" :total="1000" />
|
|
|
|
<el-pagination style="margin-top:10px" background layout="prev, pager, next" :total="1000" />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div style="margin-top:20px;gap:25px;display: flex;">
|
|
|
|
|
|
|
|
<!-- <img src="../../../assets/images/图1.png" alt=""> -->
|
|
|
|
|
|
|
|
<div style="background:#FFFFFF;">
|
|
|
|
|
|
|
|
<div id="main" style="width: 500px;height: 500px;"></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div style="background:#FFFFFF;">
|
|
|
|
|
|
|
|
<div id="main" style="width: 500px;height: 500px;"></div>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</el-scrollbar>
|
|
|
|
</el-scrollbar>
|
|
|
|
@ -96,7 +141,7 @@
|
|
|
|
<el-dialog
|
|
|
|
<el-dialog
|
|
|
|
v-model="dialogVisible"
|
|
|
|
v-model="dialogVisible"
|
|
|
|
title="实训任务提交"
|
|
|
|
title="实训任务提交"
|
|
|
|
width="565"
|
|
|
|
width="600"
|
|
|
|
custom-class="dialogClass"
|
|
|
|
custom-class="dialogClass"
|
|
|
|
:show-close="false"
|
|
|
|
:show-close="false"
|
|
|
|
>
|
|
|
|
>
|
|
|
|
@ -108,44 +153,29 @@
|
|
|
|
<img class="xtImg" src="../../../assets/images/线条.png" alt="">
|
|
|
|
<img class="xtImg" src="../../../assets/images/线条.png" alt="">
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
<div class="from-item">
|
|
|
|
<div class="from-item">
|
|
|
|
<el-form :inline="true" label-position="right" label-width="84px" :model="form" class="demo-form-inline">
|
|
|
|
<el-form :inline="true" label-position="right" label-width="115px" :model="form" class="demo-form-inline">
|
|
|
|
<el-form-item label="平均数:">
|
|
|
|
<el-form-item label="聚类个数:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="众数:">
|
|
|
|
<el-form-item label="最大迭代次数:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="中位数:">
|
|
|
|
</el-form>
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<span style="color:#FFFFFF;font-weight: 700;">各簇类特征描述:</span>
|
|
|
|
|
|
|
|
<el-form :inline="true" label-position="right" style="margin:15px 0" label-width="115px" :model="form" class="demo-form-inline">
|
|
|
|
|
|
|
|
<el-form-item label="簇类1:">
|
|
|
|
|
|
|
|
<el-input style="width: 240px;" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="标准差:">
|
|
|
|
<el-form-item label="簇类2:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 240px;" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="方差:">
|
|
|
|
<el-form-item label="簇类3:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 240px;" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="峰度:">
|
|
|
|
<el-form-item label="簇类4:">
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
<el-input style="width: 240px;" v-model="formInline.user" clearable />
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="标准误差:">
|
|
|
|
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="偏度:">
|
|
|
|
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="最大值:">
|
|
|
|
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="最小值:">
|
|
|
|
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
</el-form-item>
|
|
|
|
<el-form-item label="求和:">
|
|
|
|
</el-form>
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="观测数:">
|
|
|
|
|
|
|
|
<el-input style="width: 120px;" v-model="formInline.user" clearable />
|
|
|
|
|
|
|
|
</el-form-item>
|
|
|
|
|
|
|
|
</el-form>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<template #footer>
|
|
|
|
<template #footer>
|
|
|
|
<div class="dialog-footer">
|
|
|
|
<div class="dialog-footer">
|
|
|
|
@ -159,79 +189,300 @@
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script setup>
|
|
|
|
<script setup>
|
|
|
|
|
|
|
|
import * as echarts from 'echarts';
|
|
|
|
|
|
|
|
import ecStat from 'echarts-stat';
|
|
|
|
|
|
|
|
import * as API from '@/api/AI.js'
|
|
|
|
|
|
|
|
import { getUserInfo } from "@/utils/auth";
|
|
|
|
|
|
|
|
import { onMounted } from 'vue';
|
|
|
|
|
|
|
|
const { proxy } = getCurrentInstance()
|
|
|
|
const dialogVisible=ref(false)
|
|
|
|
const dialogVisible=ref(false)
|
|
|
|
const tableLabel=reactive([
|
|
|
|
const tableLabel=reactive([
|
|
|
|
{prop:'date',label:'用户ID'},
|
|
|
|
{prop:'date',label:''},
|
|
|
|
{prop:'name',label:'登录名'},
|
|
|
|
|
|
|
|
{prop:'name',label:'用户姓名'},
|
|
|
|
|
|
|
|
{prop:'name',label:'学号'},
|
|
|
|
|
|
|
|
{prop:'name',label:'班级'},
|
|
|
|
|
|
|
|
{prop:'name',label:'专业'},
|
|
|
|
|
|
|
|
{prop:'name',label:'学校'},
|
|
|
|
|
|
|
|
{prop:'name',label:'角色名称'},
|
|
|
|
|
|
|
|
{prop:'name',label:'角色性别'},
|
|
|
|
|
|
|
|
{prop:'name',label:'角色年龄'},
|
|
|
|
|
|
|
|
{prop:'name',label:'注册时间'},
|
|
|
|
|
|
|
|
{prop:'name',label:'所在地'}
|
|
|
|
|
|
|
|
])
|
|
|
|
])
|
|
|
|
const formInline=reactive({
|
|
|
|
const getList=()=>{
|
|
|
|
user:'',
|
|
|
|
API.selectionMetrics({userId:JSON.parse(getUserInfo()).userId}).then((res)=>{
|
|
|
|
region:''
|
|
|
|
res.data.forEach(element => {
|
|
|
|
})
|
|
|
|
options.value.push({
|
|
|
|
const input=ref()
|
|
|
|
value:element,
|
|
|
|
const options = [
|
|
|
|
label:element
|
|
|
|
{
|
|
|
|
})
|
|
|
|
value: 'Option1',
|
|
|
|
})
|
|
|
|
label: 'Option1',
|
|
|
|
})
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
const fileList=ref([])
|
|
|
|
|
|
|
|
const handleChange=(info)=>{
|
|
|
|
|
|
|
|
fileList.value.push(info);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
const flag=ref(false)
|
|
|
|
|
|
|
|
onMounted(()=>{
|
|
|
|
|
|
|
|
getList()
|
|
|
|
|
|
|
|
var chartDom = document.getElementById('main');
|
|
|
|
|
|
|
|
var myChart = echarts.init(chartDom);
|
|
|
|
|
|
|
|
var option;
|
|
|
|
|
|
|
|
echarts.registerTransform(ecStat.transform.clustering);
|
|
|
|
|
|
|
|
const data = [
|
|
|
|
|
|
|
|
[3.275154, 2.957587],
|
|
|
|
|
|
|
|
[-3.344465, 2.603513],
|
|
|
|
|
|
|
|
[0.355083, -3.376585],
|
|
|
|
|
|
|
|
[1.852435, 3.547351],
|
|
|
|
|
|
|
|
[-2.078973, 2.552013],
|
|
|
|
|
|
|
|
[-0.993756, -0.884433],
|
|
|
|
|
|
|
|
[2.682252, 4.007573],
|
|
|
|
|
|
|
|
[-3.087776, 2.878713],
|
|
|
|
|
|
|
|
[-1.565978, -1.256985],
|
|
|
|
|
|
|
|
[2.441611, 0.444826],
|
|
|
|
|
|
|
|
[-0.659487, 3.111284],
|
|
|
|
|
|
|
|
[-0.459601, -2.618005],
|
|
|
|
|
|
|
|
[2.17768, 2.387793],
|
|
|
|
|
|
|
|
[-2.920969, 2.917485],
|
|
|
|
|
|
|
|
[-0.028814, -4.168078],
|
|
|
|
|
|
|
|
[3.625746, 2.119041],
|
|
|
|
|
|
|
|
[-3.912363, 1.325108],
|
|
|
|
|
|
|
|
[-0.551694, -2.814223],
|
|
|
|
|
|
|
|
[2.855808, 3.483301],
|
|
|
|
|
|
|
|
[-3.594448, 2.856651],
|
|
|
|
|
|
|
|
[0.421993, -2.372646],
|
|
|
|
|
|
|
|
[1.650821, 3.407572],
|
|
|
|
|
|
|
|
[-2.082902, 3.384412],
|
|
|
|
|
|
|
|
[-0.718809, -2.492514],
|
|
|
|
|
|
|
|
[4.513623, 3.841029],
|
|
|
|
|
|
|
|
[-4.822011, 4.607049],
|
|
|
|
|
|
|
|
[-0.656297, -1.449872],
|
|
|
|
|
|
|
|
[1.919901, 4.439368],
|
|
|
|
|
|
|
|
[-3.287749, 3.918836],
|
|
|
|
|
|
|
|
[-1.576936, -2.977622],
|
|
|
|
|
|
|
|
[3.598143, 1.97597],
|
|
|
|
|
|
|
|
[-3.977329, 4.900932],
|
|
|
|
|
|
|
|
[-1.79108, -2.184517],
|
|
|
|
|
|
|
|
[3.914654, 3.559303],
|
|
|
|
|
|
|
|
[-1.910108, 4.166946],
|
|
|
|
|
|
|
|
[-1.226597, -3.317889],
|
|
|
|
|
|
|
|
[1.148946, 3.345138],
|
|
|
|
|
|
|
|
[-2.113864, 3.548172],
|
|
|
|
|
|
|
|
[0.845762, -3.589788],
|
|
|
|
|
|
|
|
[2.629062, 3.535831],
|
|
|
|
|
|
|
|
[-1.640717, 2.990517],
|
|
|
|
|
|
|
|
[-1.881012, -2.485405],
|
|
|
|
|
|
|
|
[4.606999, 3.510312],
|
|
|
|
|
|
|
|
[-4.366462, 4.023316],
|
|
|
|
|
|
|
|
[0.765015, -3.00127],
|
|
|
|
|
|
|
|
[3.121904, 2.173988],
|
|
|
|
|
|
|
|
[-4.025139, 4.65231],
|
|
|
|
|
|
|
|
[-0.559558, -3.840539],
|
|
|
|
|
|
|
|
[4.376754, 4.863579],
|
|
|
|
|
|
|
|
[-1.874308, 4.032237],
|
|
|
|
|
|
|
|
[-0.089337, -3.026809],
|
|
|
|
|
|
|
|
[3.997787, 2.518662],
|
|
|
|
|
|
|
|
[-3.082978, 2.884822],
|
|
|
|
|
|
|
|
[0.845235, -3.454465],
|
|
|
|
|
|
|
|
[1.327224, 3.358778],
|
|
|
|
|
|
|
|
[-2.889949, 3.596178],
|
|
|
|
|
|
|
|
[-0.966018, -2.839827],
|
|
|
|
|
|
|
|
[2.960769, 3.079555],
|
|
|
|
|
|
|
|
[-3.275518, 1.577068],
|
|
|
|
|
|
|
|
[0.639276, -3.41284]
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
const redPoints = [
|
|
|
|
|
|
|
|
[4, 3], // 红色点1的坐标
|
|
|
|
|
|
|
|
[-4, -4], // 红色点2的坐标
|
|
|
|
|
|
|
|
[2, -2] // 红色点3的坐标
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
var CLUSTER_COUNT = 6;
|
|
|
|
|
|
|
|
var DIENSIION_CLUSTER_INDEX = 2;
|
|
|
|
|
|
|
|
var COLOR_ALL = [
|
|
|
|
|
|
|
|
'#37A2DA',
|
|
|
|
|
|
|
|
'#e06343',
|
|
|
|
|
|
|
|
'#37a354',
|
|
|
|
|
|
|
|
'#b55dba',
|
|
|
|
|
|
|
|
'#b5bd48',
|
|
|
|
|
|
|
|
'#8378EA',
|
|
|
|
|
|
|
|
'#96BFFF'
|
|
|
|
|
|
|
|
];
|
|
|
|
|
|
|
|
var pieces = [];
|
|
|
|
|
|
|
|
for (var i = 0; i < CLUSTER_COUNT; i++) {
|
|
|
|
|
|
|
|
pieces.push({
|
|
|
|
|
|
|
|
value: i,
|
|
|
|
|
|
|
|
label: 'cluster ' + i,
|
|
|
|
|
|
|
|
color: COLOR_ALL[i]
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
option = {
|
|
|
|
|
|
|
|
dataset: [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
value: 'Option2',
|
|
|
|
source: data
|
|
|
|
label: 'Option2',
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
value: 'Option3',
|
|
|
|
transform: {
|
|
|
|
label: 'Option3',
|
|
|
|
type: 'ecStat:clustering',
|
|
|
|
},
|
|
|
|
// print: true,
|
|
|
|
|
|
|
|
config: {
|
|
|
|
|
|
|
|
clusterCount: CLUSTER_COUNT,
|
|
|
|
|
|
|
|
outputType: 'single',
|
|
|
|
|
|
|
|
outputClusterIndexDimension: DIENSIION_CLUSTER_INDEX
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
],
|
|
|
|
|
|
|
|
tooltip: {
|
|
|
|
|
|
|
|
position: 'top'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
visualMap: {
|
|
|
|
|
|
|
|
show: false,
|
|
|
|
|
|
|
|
type: 'piecewise',
|
|
|
|
|
|
|
|
// top: 'middle',
|
|
|
|
|
|
|
|
min: 0,
|
|
|
|
|
|
|
|
max: CLUSTER_COUNT,
|
|
|
|
|
|
|
|
left: 10,
|
|
|
|
|
|
|
|
splitNumber: CLUSTER_COUNT,
|
|
|
|
|
|
|
|
dimension: DIENSIION_CLUSTER_INDEX,
|
|
|
|
|
|
|
|
pieces: pieces
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
grid: {
|
|
|
|
|
|
|
|
left: 120
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
xAxis: {},
|
|
|
|
|
|
|
|
yAxis: {},
|
|
|
|
|
|
|
|
series: [
|
|
|
|
{
|
|
|
|
{
|
|
|
|
value: 'Option4',
|
|
|
|
type: 'scatter',
|
|
|
|
label: 'Option4',
|
|
|
|
encode: { tooltip: [0, 1] },
|
|
|
|
|
|
|
|
symbolSize: 15,
|
|
|
|
|
|
|
|
itemStyle: {
|
|
|
|
|
|
|
|
borderColor: '#555'
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
datasetIndex: 1
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
|
value: 'Option5',
|
|
|
|
type: 'scatter',
|
|
|
|
label: 'Option5',
|
|
|
|
data: redPoints,
|
|
|
|
},
|
|
|
|
symbolSize: 15,
|
|
|
|
|
|
|
|
symbol: 'circle',
|
|
|
|
|
|
|
|
itemStyle: {
|
|
|
|
|
|
|
|
color: 'red', // 填充颜色
|
|
|
|
|
|
|
|
borderColor: 'red', // 边框颜色
|
|
|
|
|
|
|
|
opacity: 1 // 设置为不透明
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
tooltip: {
|
|
|
|
|
|
|
|
formatter: function (params) {
|
|
|
|
|
|
|
|
return params.value[0] + ' ' + params.value[1]; // 显示 X 和 Y 轴的值
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
]
|
|
|
|
]
|
|
|
|
const taskSubmit=()=>{
|
|
|
|
};
|
|
|
|
dialogVisible.value=true
|
|
|
|
|
|
|
|
|
|
|
|
option && myChart.setOption(option);
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
const optionData=()=>{
|
|
|
|
|
|
|
|
API.viewingMetrics({userId:JSON.parse(getUserInfo()).userId,tableName:input.value}).then((res)=>{
|
|
|
|
|
|
|
|
tableData.value=[]
|
|
|
|
|
|
|
|
res.data.forEach(element => {
|
|
|
|
|
|
|
|
tableData.value.push({
|
|
|
|
|
|
|
|
text:element
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
const tableData = [
|
|
|
|
const selectedRows = ref([]);
|
|
|
|
|
|
|
|
const handleSelectionChange = (selection) => {
|
|
|
|
|
|
|
|
selectedRows.value = selection;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
const tableData2=ref([])
|
|
|
|
|
|
|
|
const resTable2=ref()
|
|
|
|
|
|
|
|
const taskZB=()=>{
|
|
|
|
|
|
|
|
flag.value=true
|
|
|
|
|
|
|
|
if(!selectedRows.value){
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
const sendData={
|
|
|
|
|
|
|
|
tableName:input.value,
|
|
|
|
|
|
|
|
userId:JSON.parse(getUserInfo()).userId,
|
|
|
|
|
|
|
|
fieldList:selectedRows.value.map(item=>item.text)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
API.analysisDataDisplay(sendData).then((res)=>{
|
|
|
|
|
|
|
|
tableLabel.length=0
|
|
|
|
|
|
|
|
for (const key in res.data[0]) {
|
|
|
|
|
|
|
|
tableLabel.push({
|
|
|
|
|
|
|
|
label:key,
|
|
|
|
|
|
|
|
prop:key
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
tableData2.value=res.data
|
|
|
|
|
|
|
|
flag.value=true
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
const formInline=reactive({
|
|
|
|
|
|
|
|
user:'',
|
|
|
|
|
|
|
|
region:''
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
const input=ref()
|
|
|
|
|
|
|
|
const options = ref([])
|
|
|
|
|
|
|
|
const input2=ref()
|
|
|
|
|
|
|
|
const options2=ref([
|
|
|
|
{
|
|
|
|
{
|
|
|
|
date: '2016-05-03',
|
|
|
|
value:'数据区重',
|
|
|
|
name: 'Tom',
|
|
|
|
label:'数据去重'
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
}
|
|
|
|
},
|
|
|
|
])
|
|
|
|
|
|
|
|
const input3=ref()
|
|
|
|
|
|
|
|
const options3=ref([
|
|
|
|
{
|
|
|
|
{
|
|
|
|
date: '2016-05-02',
|
|
|
|
value:'缺失值处理--剔除数据',
|
|
|
|
name: 'Tom',
|
|
|
|
label:'缺失值处理--剔除数据'
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
},{
|
|
|
|
|
|
|
|
value:'缺失值处理--均值替换',
|
|
|
|
|
|
|
|
label:'缺失值处理--均值替换'
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
])
|
|
|
|
|
|
|
|
const input4=ref()
|
|
|
|
|
|
|
|
const options4=ref([
|
|
|
|
{
|
|
|
|
{
|
|
|
|
date: '2016-05-04',
|
|
|
|
value:'K-means',
|
|
|
|
name: 'Tom',
|
|
|
|
label:'K-means'
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
date: '2016-05-04',
|
|
|
|
|
|
|
|
name: 'Tom',
|
|
|
|
|
|
|
|
address: 'No. 189, Grove St, Los Angeles',
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
]
|
|
|
|
])
|
|
|
|
|
|
|
|
const input5=ref()
|
|
|
|
|
|
|
|
const input6=ref()
|
|
|
|
|
|
|
|
const taskSubmit=()=>{
|
|
|
|
|
|
|
|
dialogVisible.value=true
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
const tableData = ref([
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
])
|
|
|
|
const headerCellStyle=()=>{
|
|
|
|
const headerCellStyle=()=>{
|
|
|
|
return {
|
|
|
|
return {
|
|
|
|
backgroundColor: "#1882DE !important", // 设置表头背景颜色
|
|
|
|
backgroundColor: "#1882DE !important", // 设置表头背景颜色
|
|
|
|
color: "#ffffff !important",
|
|
|
|
color: "#ffffff !important",
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
const optionData2=()=>{
|
|
|
|
|
|
|
|
if(input2.value&&input3.value){
|
|
|
|
|
|
|
|
const sendData=ref({
|
|
|
|
|
|
|
|
mapList:tableData2.value,
|
|
|
|
|
|
|
|
method:input3.value,
|
|
|
|
|
|
|
|
userId:JSON.parse(getUserInfo()).userId
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
API.dataPreprocessing(sendData.value).then((res)=>{
|
|
|
|
|
|
|
|
resTable2.value=res.data
|
|
|
|
|
|
|
|
tableData2.value=[]
|
|
|
|
|
|
|
|
tableData2.value=res.data
|
|
|
|
|
|
|
|
proxy.$modal.msgSuccess("预处理成功!");
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
const computation=()=>{
|
|
|
|
|
|
|
|
if(input5.value&&input6.value&&input4.value){
|
|
|
|
|
|
|
|
const sendData={
|
|
|
|
|
|
|
|
k:input5.value,
|
|
|
|
|
|
|
|
t:input6.value,
|
|
|
|
|
|
|
|
userId:JSON.parse(getUserInfo()).userId,
|
|
|
|
|
|
|
|
deduplicatedDataList:resTable2.value
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
API.clusterAnalysis(sendData).then((res)=>{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
@ -274,7 +525,7 @@
|
|
|
|
min-height: 965px;
|
|
|
|
min-height: 965px;
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
width: 205px;
|
|
|
|
width: 205px;
|
|
|
|
height: 100%;
|
|
|
|
// height: 100%;
|
|
|
|
background: #041c49;
|
|
|
|
background: #041c49;
|
|
|
|
padding: 0px 10px;
|
|
|
|
padding: 0px 10px;
|
|
|
|
.left-top {
|
|
|
|
.left-top {
|
|
|
|
@ -295,6 +546,11 @@
|
|
|
|
background-size: 100% 100%;
|
|
|
|
background-size: 100% 100%;
|
|
|
|
margin: 15px;
|
|
|
|
margin: 15px;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
.el-input{
|
|
|
|
|
|
|
|
--el-input-text-color:#FFFFFF;
|
|
|
|
|
|
|
|
--el-input-bg-color:#002651;
|
|
|
|
|
|
|
|
--el-input-border-color:#67B3D6;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.startOver{
|
|
|
|
.startOver{
|
|
|
|
margin-left: -10px;
|
|
|
|
margin-left: -10px;
|
|
|
|
@ -318,7 +574,7 @@
|
|
|
|
}
|
|
|
|
}
|
|
|
|
.main-right {
|
|
|
|
.main-right {
|
|
|
|
width: 1639px;
|
|
|
|
width: 1639px;
|
|
|
|
height: 100%;
|
|
|
|
// height: 100%;
|
|
|
|
padding: 20px;
|
|
|
|
padding: 20px;
|
|
|
|
border: 1px solid #0452c6;
|
|
|
|
border: 1px solid #0452c6;
|
|
|
|
:deep(.el-table__header){
|
|
|
|
:deep(.el-table__header){
|
|
|
|
|