Skip to content
Snippets Groups Projects
Commit 83a852e3 authored by stevereis's avatar stevereis
Browse files

Add ROC and confusion matrix converter

parent 03e0c59d
No related branches found
No related tags found
No related merge requests found
......@@ -9,14 +9,19 @@ import {
GroupResult,
GroupsResult,
} from 'src/engine/models/result/groups-result.model';
import { HeatMapResult } from 'src/engine/models/result/heat-map-result.model';
import { LineChartResult } from 'src/engine/models/result/line-chart-result.model';
import { RawResult } from 'src/engine/models/result/raw-result.model';
import { Variable } from 'src/engine/models/variable.model';
import { Entity } from './interfaces/entity.interface';
import { ExperimentData } from './interfaces/experiment/experiment.interface';
import { ResultChartExperiment } from './interfaces/experiment/result-chart-experiment.interface';
import { ResultExperiment } from './interfaces/experiment/result-experiment.interface';
import { Hierarchy } from './interfaces/hierarchy.interface';
import { VariableEntity } from './interfaces/variable-entity.interface';
import {
dataROCToLineResult,
dataToHeatmap,
descriptiveModelToTables,
descriptiveSingleToTables,
transformToAlgorithms,
......@@ -187,6 +192,8 @@ export const dataToResult = (
switch (result.type.toLowerCase()) {
case 'application/json':
return dataJSONtoResult(result, algo);
case 'application/vnd.highcharts+json':
return dataHighchartToResult(result as ResultChartExperiment, algo);
default:
return dataToRaw(result);
}
......@@ -203,3 +210,17 @@ export const dataJSONtoResult = (
return [];
}
};
export const dataHighchartToResult = (
result: ResultChartExperiment,
algo: string,
): Array<typeof ResultUnion> => {
switch (result.data.chart.type) {
case 'heatmap':
return [dataToHeatmap.evaluate(result) as HeatMapResult];
case 'area':
return [dataROCToLineResult.evaluate(result) as LineChartResult];
default:
return dataToRaw(result);
}
};
export interface ResultChartExperiment {
data: {
chart: {
type: string;
};
series: unknown;
};
type: string;
}
......@@ -141,3 +141,57 @@ export const descriptiveSingleToTables = jsonata(`
]
)
`);
export const dataROCToLineResult = jsonata(`
({
"name": data.title.text,
"xAxis": {
"label": data.xAxis.title.text
},
"yAxis": {
"label": data.yAxis.title.text
},
"lines": [
{
"label": "ROC curve",
"x": data.series.data.$[0],
"y": data.series.data.$[1],
"type": 0
}
]
})
`);
export const dataToHeatmap = jsonata(`
(
{
"name": data.title.text,
"xAxis": {
"categories": data.xAxis.categories,
"label": data.xAxis.label
},
"yAxis": {
"categories": data.yAxis.categories,
"label": data.yAxis.label
},
"matrix": $toMat(data.series.data)
}
)
`);
dataToHeatmap.registerFunction(
'toMat',
(a) => {
const matrix = [];
a.forEach(
(elem: { y: number | number; x: number | number; value: number }) => {
matrix[elem.y] = matrix[elem.y] ?? [];
matrix[elem.y][elem.x] = elem.value;
},
);
return matrix;
},
'<a<o>:a<a<n>>',
);
......@@ -19,10 +19,6 @@ export const ResultUnion = createUnionType({
return TableResult;
}
if (value.rawdata) {
return RawResult;
}
if (value.groups) {
return GroupsResult;
}
......@@ -31,10 +27,10 @@ export const ResultUnion = createUnionType({
return HeatMapResult;
}
if (value.x) {
if (value.lines) {
return LineChartResult;
}
return null;
return RawResult;
},
});
......@@ -7,6 +7,6 @@ import { Result } from './common/result.model';
@ObjectType()
export class RawResult extends Result {
@Field(() => GraphQLJSON)
rawdata: unknown;
@Field(() => GraphQLJSON, { nullable: true, defaultValue: '' })
rawdata?: unknown;
}
......@@ -72,7 +72,7 @@ type TableResult {
}
type RawResult {
rawdata: JSON!
rawdata: JSON
}
"""
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment