|
@@ -26,8 +26,8 @@
|
|
|
@selection-change="handleSelectChange"
|
|
@selection-change="handleSelectChange"
|
|
|
>
|
|
>
|
|
|
<el-table-column width="50" type="selection"></el-table-column>
|
|
<el-table-column width="50" type="selection"></el-table-column>
|
|
|
- <el-table-column label="字段id">
|
|
|
|
|
- <template #default="scope"><span>{{ scope.row.id }}</span></template>
|
|
|
|
|
|
|
+ <el-table-column label="序号">
|
|
|
|
|
+ <template #default="scope"><span>{{ scope.$index + 1 }}</span></template>
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
<el-table-column label="字段名">
|
|
<el-table-column label="字段名">
|
|
|
<template #default="scope"><span>{{ scope.row.fieldName }}</span></template>
|
|
<template #default="scope"><span>{{ scope.row.fieldName }}</span></template>
|
|
@@ -50,19 +50,10 @@
|
|
|
<el-form-item label="配置名" required>
|
|
<el-form-item label="配置名" required>
|
|
|
<el-input v-model="analysisConfName"></el-input>
|
|
<el-input v-model="analysisConfName"></el-input>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
-<!-- <el-form-item label="分析方法" required>-->
|
|
|
|
|
-<!-- <el-select v-model="form.type" placeholder="分析方法" class="handle-select mr10" @change="changeMethodMsg">-->
|
|
|
|
|
-<!-- <el-option key="1" label="数据分布" value="1"></el-option>-->
|
|
|
|
|
-<!-- <el-option key="2" label="散点图" value="2"></el-option>-->
|
|
|
|
|
-<!-- <el-option key="3" label="数据统计" value="3"></el-option>-->
|
|
|
|
|
-<!-- <el-option key="4" label="偏度-峰度" value="4"></el-option>-->
|
|
|
|
|
-<!-- <el-option key="5" label="皮尔森相关系数" value="5"></el-option>-->
|
|
|
|
|
-<!-- </el-select>-->
|
|
|
|
|
-<!-- </el-form-item>-->
|
|
|
|
|
<el-alert type="info"
|
|
<el-alert type="info"
|
|
|
show-icon style="height: 40px;">{{methodMsg.valueOf()}}</el-alert>
|
|
show-icon style="height: 40px;">{{methodMsg.valueOf()}}</el-alert>
|
|
|
<el-form-item label="方法和字段要求" required>
|
|
<el-form-item label="方法和字段要求" required>
|
|
|
- <text>皮尔森相关系数需要两个int/double字段,散点图可以传入2-3个字段,其他的方法只需一个字段。除了数据分布可以传入string字段,其他方法请传入int/double字段</text>
|
|
|
|
|
|
|
+ <text>皮尔森相关系数需要2个int/double字段,散点图可以传入2个字段,其他的方法只需一个字段。除了数据分布可以传入string字段,其他方法请传入int/double字段</text>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item label="已选择字段" required>
|
|
<el-form-item label="已选择字段" required>
|
|
|
<el-table :data="selectData" border class="table" header-cell-class-name="table-header" >
|
|
<el-table :data="selectData" border class="table" header-cell-class-name="table-header" >
|
|
@@ -80,54 +71,12 @@
|
|
|
</template>
|
|
</template>
|
|
|
</el-dialog>
|
|
</el-dialog>
|
|
|
|
|
|
|
|
- <!--数理函数分析结果-->
|
|
|
|
|
- <el-dialog title="数理函数分析结果" v-model="resultVisible" width="50%">
|
|
|
|
|
- <el-form label-width="120px">
|
|
|
|
|
- <el-form-item label="分析方法" required>
|
|
|
|
|
- {{ AnalysisMethodName[parseInt(form.type)-1] }}
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="已选择字段" required>
|
|
|
|
|
- <el-table :data="selectData" border class="table" header-cell-class-name="table-header" >
|
|
|
|
|
- <el-table-column label="字段名">
|
|
|
|
|
- <template #default="scope"><span>{{ scope.row.fieldName }}</span></template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- </el-table>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- <el-form-item label="分析结果" required>
|
|
|
|
|
- <el-table :data="analysisData" border class="table" header-cell-class-name="table-header" >
|
|
|
|
|
- <el-table-column label="分析指标" prop="attribute">
|
|
|
|
|
- <template #default="scope"><span>{{ scope.row.attribute }}</span></template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- <el-table-column label="指标数值" prop="value">
|
|
|
|
|
- <template #default="scope"><span>{{ scope.row.value }}</span></template>
|
|
|
|
|
- </el-table-column>
|
|
|
|
|
- </el-table>
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
- </el-form>
|
|
|
|
|
- <template #footer>
|
|
|
|
|
- <span class="dialog-footer">
|
|
|
|
|
- <el-button @click="resultVisible = false">取 消</el-button>
|
|
|
|
|
- </span>
|
|
|
|
|
- </template>
|
|
|
|
|
- </el-dialog>
|
|
|
|
|
-
|
|
|
|
|
<el-dialog title="新建AI模型配置" v-model="configCreate" width="50%">
|
|
<el-dialog title="新建AI模型配置" v-model="configCreate" width="50%">
|
|
|
<el-form label-width="120px">
|
|
<el-form label-width="120px">
|
|
|
<el-form-item label="配置名" required>
|
|
<el-form-item label="配置名" required>
|
|
|
<el-input v-model="form.name"></el-input>
|
|
<el-input v-model="form.name"></el-input>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
-<!-- <el-form-item label="模型类别" required>-->
|
|
|
|
|
-<!-- <el-select v-model="form.type" placeholder="模型类别" class="handle-select mr10" @change="selectModelTypeChange">-->
|
|
|
|
|
-<!-- <el-option key="1" label="逻辑回归" value="1"></el-option>-->
|
|
|
|
|
-<!-- <el-option key="2" label="决策树" value="2"></el-option>-->
|
|
|
|
|
-<!-- <el-option key="3" label="随机森林" value="3"></el-option>-->
|
|
|
|
|
-<!-- <el-option key="4" label="梯度提升决策树" value="4"></el-option>-->
|
|
|
|
|
-<!-- <el-option key="5" label="K-均值" value="5"></el-option>-->
|
|
|
|
|
-<!-- <el-option key="6" label="多层感知器分类器" value="6"></el-option>-->
|
|
|
|
|
-<!-- <el-option key="7" label="朴素贝叶斯" value="7"></el-option>-->
|
|
|
|
|
-<!-- <el-option key="8" label="随机森林回归" value="8"></el-option>-->
|
|
|
|
|
-<!-- </el-select>-->
|
|
|
|
|
-<!-- </el-form-item>-->
|
|
|
|
|
|
|
+
|
|
|
<el-form-item label="模型类别" required>
|
|
<el-form-item label="模型类别" required>
|
|
|
<el-select v-model="form.type" placeholder="学习类型" class="handle-select mr10">
|
|
<el-select v-model="form.type" placeholder="学习类型" class="handle-select mr10">
|
|
|
<el-option key="1" label="监督学习" value="SUPERVISED_LEARNING"></el-option>
|
|
<el-option key="1" label="监督学习" value="SUPERVISED_LEARNING"></el-option>
|
|
@@ -146,13 +95,6 @@
|
|
|
</el-table-column>
|
|
</el-table-column>
|
|
|
</el-table>
|
|
</el-table>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
-<!-- <el-form-item label="标签字段" v-if="labelTip===1">-->
|
|
|
|
|
-<!-- <el-table :data="selectData" border class="table" header-cell-class-name="table-header">-->
|
|
|
|
|
-<!-- <el-table-column label="字段名">-->
|
|
|
|
|
-<!-- <template #default="scope"><span>{{ scope.row.fieldName }}</span></template>-->
|
|
|
|
|
-<!-- </el-table-column>-->
|
|
|
|
|
-<!-- </el-table>-->
|
|
|
|
|
-<!-- </el-form-item>-->
|
|
|
|
|
|
|
|
|
|
</el-form>
|
|
</el-form>
|
|
|
<template #footer>
|
|
<template #footer>
|
|
@@ -168,10 +110,9 @@
|
|
|
<script>
|
|
<script>
|
|
|
import {ref, reactive} from "vue";
|
|
import {ref, reactive} from "vue";
|
|
|
import { ElMessage, ElMessageBox } from "element-plus";
|
|
import { ElMessage, ElMessageBox } from "element-plus";
|
|
|
-import {getFileDetail} from "../../api/file";
|
|
|
|
|
|
|
+import {getFileDescribe, getFileDetail} from "../../api/file";
|
|
|
import {useRoute}from "vue-router";
|
|
import {useRoute}from "vue-router";
|
|
|
import {useRouter}from "vue-router";
|
|
import {useRouter}from "vue-router";
|
|
|
-import { toRaw } from '@vue/reactivity'
|
|
|
|
|
import {addConfig,getFeatureSelection} from "../../api/config";
|
|
import {addConfig,getFeatureSelection} from "../../api/config";
|
|
|
import {addAnalysisConfig} from "../../api/analysisConfig";
|
|
import {addAnalysisConfig} from "../../api/analysisConfig";
|
|
|
|
|
|
|
@@ -202,39 +143,24 @@ export default {
|
|
|
|
|
|
|
|
// 获取表格数据
|
|
// 获取表格数据
|
|
|
const getData = () => {
|
|
const getData = () => {
|
|
|
- console.log('555')
|
|
|
|
|
const route=useRoute()
|
|
const route=useRoute()
|
|
|
if(route.query.fileId!=null) {
|
|
if(route.query.fileId!=null) {
|
|
|
const payload ={
|
|
const payload ={
|
|
|
fileInfoId: route.query.fileId,
|
|
fileInfoId: route.query.fileId,
|
|
|
userId: 1
|
|
userId: 1
|
|
|
}
|
|
}
|
|
|
- console.log('555')
|
|
|
|
|
getFileDetail(payload).then(res => {
|
|
getFileDetail(payload).then(res => {
|
|
|
tableData.value = res.result.fileFields;
|
|
tableData.value = res.result.fileFields;
|
|
|
fileId=route.query.fileId
|
|
fileId=route.query.fileId
|
|
|
})
|
|
})
|
|
|
-
|
|
|
|
|
|
|
+ // getFileDescribe(payload).then(res=>{
|
|
|
|
|
+ // console.log("describe: "+JSON.stringify(res.result))
|
|
|
|
|
+ // })
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
};
|
|
};
|
|
|
getData();
|
|
getData();
|
|
|
|
|
|
|
|
- const getFeature=()=>{
|
|
|
|
|
- if(selectData.value.length===0){ElMessage.error("请先选择目标字段");return;}
|
|
|
|
|
- if(selectData.value.length>1){ElMessage.error("目标字段仅可选择一个");return;}
|
|
|
|
|
- getFeatureSelection({"fileId":fileId,"fieldName":selectData.value[0].fieldName}).then(
|
|
|
|
|
- res=>{
|
|
|
|
|
- console.log(res)
|
|
|
|
|
- res=res.data
|
|
|
|
|
- for(let i=0;i<res.length;i++){
|
|
|
|
|
- selectData.value.unshift(res[i])
|
|
|
|
|
- }
|
|
|
|
|
- createConfig()
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
// 查询操作
|
|
// 查询操作
|
|
|
const handleSearch = () => {
|
|
const handleSearch = () => {
|
|
|
query.pageIndex = 1;
|
|
query.pageIndex = 1;
|
|
@@ -246,32 +172,15 @@ export default {
|
|
|
getData();
|
|
getData();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- // 删除操作
|
|
|
|
|
- const handleDelete = (index) => {
|
|
|
|
|
- // 二次确认删除
|
|
|
|
|
- ElMessageBox.confirm("确定要删除吗?", "提示", {
|
|
|
|
|
- type: "warning",
|
|
|
|
|
- })
|
|
|
|
|
- .then(() => {
|
|
|
|
|
- ElMessage.success("删除成功");
|
|
|
|
|
- tableData.value.splice(index, 1);
|
|
|
|
|
- //todo:
|
|
|
|
|
- })
|
|
|
|
|
- .catch(() => {});
|
|
|
|
|
- };
|
|
|
|
|
-
|
|
|
|
|
// 表格编辑时弹窗和保存
|
|
// 表格编辑时弹窗和保存
|
|
|
let analysisVisible = ref(false);
|
|
let analysisVisible = ref(false);
|
|
|
let form = reactive({
|
|
let form = reactive({
|
|
|
name: "",
|
|
name: "",
|
|
|
type: "",
|
|
type: "",
|
|
|
needLabel: "",
|
|
needLabel: "",
|
|
|
- // classification:"",
|
|
|
|
|
- // feature:"",
|
|
|
|
|
});
|
|
});
|
|
|
let analysisConfName = ref();
|
|
let analysisConfName = ref();
|
|
|
|
|
|
|
|
- let idx = -1;
|
|
|
|
|
const handleAnalysis = () => {
|
|
const handleAnalysis = () => {
|
|
|
if (selectData.value.length<1){
|
|
if (selectData.value.length<1){
|
|
|
ElMessage.warning("至少选择一个字段!");
|
|
ElMessage.warning("至少选择一个字段!");
|
|
@@ -299,111 +208,19 @@ export default {
|
|
|
})
|
|
})
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- const changeMethodMsg=(value)=>{
|
|
|
|
|
- console.log(value)
|
|
|
|
|
- if(value===1){
|
|
|
|
|
- methodMsg.value="数据分布无特殊限制"
|
|
|
|
|
- }else if(value===2){
|
|
|
|
|
- methodMsg.value="散点图可以传入2-3个int/double字段"
|
|
|
|
|
- }else if(value===3){
|
|
|
|
|
- methodMsg.value="请传入1个int/double字段"
|
|
|
|
|
- }else if(value===4){
|
|
|
|
|
- methodMsg.value="请传入1个int/double字段"
|
|
|
|
|
- }else if(value===5){
|
|
|
|
|
- methodMsg.value="请传入2个int/double字段"
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- const startAnalysis = () => {
|
|
|
|
|
- analysisVisible.value = false;
|
|
|
|
|
- //todo: 数理分析相关
|
|
|
|
|
-
|
|
|
|
|
- console.log(form.type);
|
|
|
|
|
- console.log(toRaw(selectData.value));
|
|
|
|
|
- let selectList=[];
|
|
|
|
|
- let fieldIds=[];
|
|
|
|
|
- for (var i=0; i<selectData.value.length;i++){
|
|
|
|
|
- //selectList.push(JSON.parse(JSON.stringify(selectData.value[i])))
|
|
|
|
|
- fieldIds.push(selectData.value[i].id);
|
|
|
|
|
- //console.log(selectData.value[i].id)
|
|
|
|
|
- //console.log(selectData.value[i])
|
|
|
|
|
- //console.log(JSON.parse(JSON.stringify(selectData.value[i])))
|
|
|
|
|
- }
|
|
|
|
|
- //console.log(selectList)
|
|
|
|
|
- console.log(fieldIds);
|
|
|
|
|
- if (form.type=="1"||form.type=="2"){
|
|
|
|
|
- router.push({
|
|
|
|
|
- path:"/FileAnalysis",
|
|
|
|
|
- query:{
|
|
|
|
|
- fieldIds:JSON.stringify(fieldIds),
|
|
|
|
|
- funcId:form.type
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- return ;
|
|
|
|
|
- };
|
|
|
|
|
- analysisFile(JSON.stringify(fieldIds),form.type).then(res=>{
|
|
|
|
|
- console.log(res.data)
|
|
|
|
|
- if (res.status!=200){
|
|
|
|
|
- ElMessageBox.confirm("分析产生错误,请检查您的分析方法和字段选择是否合理", "错误", {
|
|
|
|
|
- type: "error",
|
|
|
|
|
- })
|
|
|
|
|
- .then(()=>{
|
|
|
|
|
-
|
|
|
|
|
- })
|
|
|
|
|
- .catch(() => {});
|
|
|
|
|
- }else{
|
|
|
|
|
- analysisData.length=0
|
|
|
|
|
- console.log(form.type);
|
|
|
|
|
- switch (form.type){
|
|
|
|
|
- case "1":
|
|
|
|
|
- break;
|
|
|
|
|
- case "2":
|
|
|
|
|
- break;
|
|
|
|
|
- case "3":
|
|
|
|
|
- analysisData.push({attribute:"最大值",value:res.data.frame_index.max});
|
|
|
|
|
- analysisData.push({attribute:"方差",value:res.data.frame_index.variance});
|
|
|
|
|
- analysisData.push({attribute:"平均值",value:res.data.frame_index.mean});
|
|
|
|
|
- analysisData.push({attribute:"标准方差",value:res.data.frame_index.stddev});
|
|
|
|
|
- console.log(analysisData)
|
|
|
|
|
- break;
|
|
|
|
|
- case "4":
|
|
|
|
|
- analysisData.push({attribute:"偏度",value:res.data[fieldIds[0]].skewness});
|
|
|
|
|
- analysisData.push({attribute:"峰度",value:res.data[fieldIds[0]].kurtosis});
|
|
|
|
|
- console.log(analysisData)
|
|
|
|
|
- break;
|
|
|
|
|
- case "5":
|
|
|
|
|
- analysisData.push({attribute:"皮尔森相关系数",value:res.data.Corr});
|
|
|
|
|
- console.log(analysisData)
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- resultVisible.value=true;
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- };
|
|
|
|
|
let resultVisible= ref(false);
|
|
let resultVisible= ref(false);
|
|
|
let featureTip=ref(0);
|
|
let featureTip=ref(0);
|
|
|
let labelTip = ref(0);
|
|
let labelTip = ref(0);
|
|
|
|
|
|
|
|
- const selectModelTypeChange=(selectValue)=>{
|
|
|
|
|
- if(selectValue==="8")featureTip.value=2;
|
|
|
|
|
- else featureTip.value=1;
|
|
|
|
|
- }
|
|
|
|
|
- // const selectLabelChange=(selectValue)=>{
|
|
|
|
|
- // if(selectValue === "SUPERVISED_LEARNING") labelTip.value=1;
|
|
|
|
|
- // else labelTip.value=2;
|
|
|
|
|
- // }
|
|
|
|
|
const configCreate = ref(false);
|
|
const configCreate = ref(false);
|
|
|
const createConfig =() => {
|
|
const createConfig =() => {
|
|
|
if (selectData.value.length<=1){
|
|
if (selectData.value.length<=1){
|
|
|
ElMessage.warning("至少选择两个字段!");
|
|
ElMessage.warning("至少选择两个字段!");
|
|
|
return ;
|
|
return ;
|
|
|
}
|
|
}
|
|
|
- const fieldTable = ref(null)
|
|
|
|
|
configCreate.value = true;
|
|
configCreate.value = true;
|
|
|
};
|
|
};
|
|
|
const saveConfig=()=>{
|
|
const saveConfig=()=>{
|
|
|
- const route=useRoute()
|
|
|
|
|
const payload={
|
|
const payload={
|
|
|
fileInfoId:selectData.value[0].fileInfoId,
|
|
fileInfoId:selectData.value[0].fileInfoId,
|
|
|
userId:1,
|
|
userId:1,
|
|
@@ -447,23 +264,17 @@ export default {
|
|
|
configCreate,
|
|
configCreate,
|
|
|
createConfig,
|
|
createConfig,
|
|
|
saveConfig,
|
|
saveConfig,
|
|
|
- getFeature,
|
|
|
|
|
selectData,
|
|
selectData,
|
|
|
analysisData,
|
|
analysisData,
|
|
|
featureTip,
|
|
featureTip,
|
|
|
labelTip,
|
|
labelTip,
|
|
|
methodMsg,
|
|
methodMsg,
|
|
|
- selectModelTypeChange,
|
|
|
|
|
getData,
|
|
getData,
|
|
|
- //selectLabelChange,
|
|
|
|
|
createAnalysisConfig,
|
|
createAnalysisConfig,
|
|
|
handleSelectChange,
|
|
handleSelectChange,
|
|
|
handleSearch,
|
|
handleSearch,
|
|
|
handlePageChange,
|
|
handlePageChange,
|
|
|
- handleDelete,
|
|
|
|
|
handleAnalysis,
|
|
handleAnalysis,
|
|
|
- startAnalysis,
|
|
|
|
|
- changeMethodMsg,
|
|
|
|
|
handleFileSelect,
|
|
handleFileSelect,
|
|
|
};
|
|
};
|
|
|
},
|
|
},
|