![JAR search and dependency download from the Maven repository](/logo.png)
com.datastax.data.exploration.service.chart.impl.ScatterServiceImpl Maven / Gradle / Ivy
The newest version!
package com.datastax.data.exploration.service.chart.impl;
import com.alibaba.fastjson.JSONObject;
import com.datastax.data.exploration.biz.datatable.DataTable;
import com.datastax.data.exploration.biz.datatable.DataType;
import com.datastax.data.exploration.common.DataOperator;
import com.datastax.data.exploration.common.DataTypeHandler;
import com.datastax.data.exploration.common.File2DataTable;
import com.datastax.data.exploration.dto.dataChart.scatter.ScatterChartValue;
import com.datastax.data.exploration.service.chart.ScatterService;
import com.datastax.data.exploration.util.CommonUtil;
import com.datastax.data.exploration.util.Consts;
import org.javatuples.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import static com.datastax.data.exploration.util.CommonUtil.columnIndex;
import static com.datastax.data.exploration.util.CommonUtil.getFormat;
/**
* 散点图
* @author songfu 2017/12/16
*/
@Service("scatterService")
public class ScatterServiceImpl implements ScatterService {
private static final Logger logger = LoggerFactory.getLogger(ScatterServiceImpl.class);
private static final String labelPreffix = "vector-";
/**
* 获取散点图初始化数据
* @param id 数据集id
* @return 返回的是散点初始化数据
*/
@Override
public JSONObject scatterInit(String id) {
List axisX = DataTypeHandler.noText(File2DataTable.tableSchema(id));
if (axisX.size() == 0) {
axisX.add(Consts.NONE);
}
JSONObject json = new JSONObject();
json.put("axisX",axisX);
json.put("axisY",axisX);
json.put("color",axisX);
return json;
}
/**
* 获取散点图展示的数据
* @param id 数据集id
* @param axisX 散点图x轴
* @param axisY 散点图y轴
* @param color 散点图color维度
* @return 返回的是散点图展示的数据
*/
@Override
public JSONObject scatterSelect(String id, String axisX, String axisY, String color) {
DataTable table = File2DataTable.exactTable(id);
String[] type = {typeAndformat(table,axisX).getValue0()
,typeAndformat(table,axisY).getValue0()
,typeAndformat(table,color).getValue0()};
String[] format = {typeAndformat(table,axisX).getValue1()
,typeAndformat(table,axisY).getValue1()
,typeAndformat(table,color).getValue1()};
JSONObject json = new JSONObject();
json.put("data",table.getRows().dataDimen3(axisX,axisY,color));
json.put("type",type);
json.put("format",format);
return json;
}
private Pair typeAndformat(DataTable table,String column) {
DataType dataType = table.getColumns().getColumn(column).getType();
return new Pair<>(dataType.getName(),getFormat(dataType));
}
/**
* 获取数据集中用于离群点散点图的属性列
* @param id 数据集id
* @return 符合条件的属性列
*/
@Override
public List getOutlierInitColumns(String id) {
return DataTypeHandler.getNumericType(File2DataTable.tableSchema(id));
}
/*
*/
/**
* 通过k邻近距离检测离群点
* @param id 数据集id
* @param axisX x轴属性列
* @param axisY y轴属性列
* @param k 确定某对象与其第k个邻近对象的距离
* @param n 离群点数量
* @param distanceType 距离度量方法
* @return 带有离群点标志的数据
*//*
@Override
public ScatterChartValue distanceOutlier(String id, String axisX, String axisY, int k, int n, String distanceType) {
OutlierObject[] outlierObjects = data2OutlierObjects(id, axisX, axisY);
if(k > outlierObjects.length) {
k = outlierObjects.length;
}
if(n > outlierObjects.length) {
n = outlierObjects.length;
}
if(outlierObjects.length != 0) {
OutlierDetection.distanceOutlier(outlierObjects, k, n, distanceType);
}
return outlierObject2ScatterChartValue(id, axisX, axisY, outlierObjects, 0);
}
*/
/**
* 通过比例检测离群点
* @param id 数据集id
* @param axisX x轴的属性列
* @param axisY y轴的属性列
* @param distance 距离
* @param proportion 比例
* @param distanceType 距离度量方法
* @return 带有离群点标志的数据
*//*
@Override
public ScatterChartValue densitiesOutlier(String id, String axisX, String axisY, double distance, double proportion, String distanceType) {
OutlierObject[] outlierObjects = data2OutlierObjects(id, axisX, axisY);
if(outlierObjects.length != 0) {
OutlierDetection.densitiesOutlier(outlierObjects, distance, proportion, distanceType, outlierObjects.length);
}
return outlierObject2ScatterChartValue(id, axisX, axisY, outlierObjects, 0);
}
*/
/**
* 通过局部离群因子(LOF)检测离群点
* @param id 数据里id
* @param axisX x轴的属性列
* @param axisY y轴的属性列
* @param lower k下限
* @param upper k上限
* @param distanceType 距离度量方法
* @return 带有离群点标志的数据
*//*
@Override
public ScatterChartValue LOFOutlier(String id, String axisX, String axisY, int lower, int upper, String distanceType) {
OutlierObject[] outlierObjects = data2OutlierObjects(id, axisX, axisY);
if(lower > outlierObjects.length) {
lower = outlierObjects.length;
upper = outlierObjects.length;
}
if(upper > outlierObjects.length) {
upper = outlierObjects.length;
}
if(outlierObjects.length != 0) {
OutlierDetection.LOFOutlier(outlierObjects, lower, upper, distanceType);
}
return outlierObject2ScatterChartValue(id, axisX, axisY, outlierObjects, 1);
}
private OutlierObject[] data2OutlierObjects(String id, String axisX, String axisY) {
List data = DataOperator.readExactData(id);
String[] columns = DataOperator.readHeaders(id);
int[] positions = CommonUtil.columnIndex(columns, new String[]{axisX, axisY});
if(positions[0] == -1 || positions[1] == -1) {
logger.info("离群点散点图的x轴的属性列或者y轴的属性列不存在");
return new OutlierObject[]{};
}
OutlierObject[] outlierObjects = new OutlierObject[data.size()];
for(int i=0; i list = new ArrayList<>(outlierObjects.length);
for(OutlierObject outlierObject : outlierObjects) {
Object[] objs = new Object[outlierObject.vector().length + 1];
for(int i=0; i types = DataOperator.readType(id);
return new ScatterChartValue(list, new String[]{}, new String[]{types.get(axisX), types.get(axisY)});
}
*/
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy