Exploration API
About the Exploration API
The Exploration API allows for the request of statistical metrics of SymetryML projects using univariate, bivariate, Hypothesis Testing (ztest, test, ftest, ANOVA) as well as Information Gain analyses. The body of the request contains a ExploreContext which in turn is a list of MLContext, one for each feature for which exploration data is needed.
MLContext Parameters for Peer Exploration
If the project is part of a federation it might be possible to ask that the exploration result is fetched from a given node. This can be done by specifying which peer to use with the following extra parameters inside a MLContext. Please consult the About Federated Learning : Peer Exploration section for details.
fed_peer_uuid_for_explore
Peer ID to use for exploration results.
URL
POST /symetry/rest/{cid}/projects/{pid}/explore?metric={_metric_} [body=ExploreContext]
Query Parameters
async
Optional
If set to true then the exploration will be done asynchronously and the result will be fetched using the Job API.
HTTP Responses
200
OK
Success.
400
BAD REQUEST
Unknown SymetryML project. {"statusCode":"BAD_REQUEST","statusString":" Cannot Find SYMETRYML id[r2] for Customer id [c1]","values":{}}
HTTP Response Entity
The response is a KSVDMap entity. This structure is an array of map<key,value>
, where keys are string and values are an Institute of Electrical and Electronics Engineers (IEEE) 64-bit double floating-point number. One such map is added to the response for each MLContext in the ExploreContext request body. The keys in each map depend on the metric query parameter. For more information, see the section ExploreContext.
{"statusCode":"OK","statusString":"OK","values":{"KSVDMap":{"values":[{"count":150.0,"mean":5.843333333333334,"variance":0.6811222222222204,"skewness":0.31808651443435426,"stddev":0.8253012917851398}]}}}
A project info entity is also returned to reflect the state of the project that might have changed.
List of "Metric" Query Parameters
Depending on the metric query parameter, different information is returned in the KSVDMap JSON response entity. The KSVDMap JSON entity is an array of map<key, value>, where key is a string and value is an IEEE 64-bit double floating-point number. The following table enumerates the keys that the response will contain for all valid metric query parameters.
uni
Returns all univariate metrics for the attribute listed in each MLContext in the ExploreContext. If an MLContext has more than one attribute, only the first one is used.
- count = count of the attribute.
- Mean = mean of the attribute.
- variance = variance of the attribute.
- stddev = standard deviation of the attribute.
- skewness = skewness of the attribute. - stderr = the standard deviation divided by the square root of the count for this feature. - meanMarginErrorC95 = Mean standard error 95% confidence level.
uni (with histogram)
For project with histogram enabled, additional information is returned. Please consult this section to learn how to enable histogram for a project.
- min = minimum value for this feature.
- max = maximum value for this feature.
- median = median value for this feature.
bi
Returns all bivariate metrics for the two attributes listed in each MLContext in the ExploreContext. Each MLContext should contain at least two attribute indexes. If there are more than two, only the first two are used.
- covar = covariance between the two attributes.
- linCorr = linear correlation between the two attributes.
- condMean = conditional mean
- condCount = conditional count
- condVariance = conditional variance
ztest
Returns the z-test metrics using all of the MLContext in the ExploreContext request body.
- zn1 = count between attribute and target 1.
- zn2 = count between attribute and target 2.
- zm1 = mean between attribute and target 1.
- zm2 = mean between attribute and target 2.
- zs1 = variance between attribute and target 1.
- zs2 = variance between attribute and target 2.
- z = z test value.
- zp = z test value probability.
ztestp
Returns the z-test-proportion metrics using all of the MLContext in the ExploreContext request body.
- z = z test value.
- zp = z test value probability.
ztestmu
Returns the z-test - against a known mean - metrics using all of the MLContext in the ExploreContext request body.
- z = z test value.
- zp = z test value probability.
ftest
Returns the f-test metrics using all of the MLContext in the ExploreContext request body.
- fn1 = count between attribute and target 1.
- fn2 = count between attribute and target 2.
- fm1 = mean between attribute and target 1.
- fm2 = mean between attribute and target 2.
- fs1 = variance between attribute and target 1.
- fs2 = variance between attribute and target 2.
- fdf1 = degree of freedom between attribute and target 1.
- fdf2 = degree of freedom between attribute and target 2.
- f = F test value.
- fp = F test value probability.
ftestmu
Returns the f-test - against a known variance - metrics using all of the MLContext in the ExploreContext request body.
- f = F test value.
- fp = F test value probability.
ttest
Returns the t-test metrics using all of the MLContext in the ExploreContext request body.
- tn1 = count between attribute and target 1.
- tn2 = count between attribute and target 2.
- tm1 = mean between attribute and target 1.
- tm2 = mean between attribute and target 2.
- ts1 = variance between attribute and target 1.
- ts2 = variance between attribute and target 2.
- t = t test value.
- tdf = t test value degree of freedom.
- tp = t test value probability.
- tu = t test value for unequal variance.
- tdfu = t test value degree of freedom for unequal variance.
- tpu = t test value probability for unequal variance.
ttestmu
Returns the T-test - against a known mean - metrics using all of the MLContext in the ExploreContext request body.
- t = T test value.
- tp = T test value probability.
anova
Returns the ANOVA metrics using all of the MLContext in the ExploreContext request body.
- SSb = sum square between groups.
- SSw = sum square within groups.
- Dfb = degree of freedom between groups.
- Dfw = degree of freedom within groups.
- MSb = mean square between groups.
- MSw = mean square within groups.
- F = F value from F distribution.
- Ssgamma = total sum of square.
- Dfgamma* = total degree of freedom.
- P = probability of F.
chi2
Returns chi-square information using all of the MLContext in the ExploreContext request body.
- chiStat = chi-square value.
- df = degree of freedom.
- pval = probability.
- coef = contingency coefficient. Additionally, for all the pair wise values the observed count will be returned as a value using the following format for the key. Example: obs$1:4
gain
Returns information gain for a given attribute –input - given another attributes – target.
Note ztestmu, ttestmu, and ftestsima require the following parameters to be set in MLContext.extraParameters
respectively: sml_explore_ztest_known_mu, sml_explore_ttest_known_mu, and sml_explore_ftest_known_sigma.
Various Hypothesis Test
Its possible to perform variations on ztest, ftest, ttest, anova, and chi-squared test. Depending on which test needs to be performed the MLContext must be populated differently.
Hypothesis Test
MLContext Content
Z test Compare means of 2 continuous features.
inputAttributes
: contains 2 continuous attributes ids
Z test Compare mean of 1 continuous feature against a known mean
* inputAttributes
: contains 1 continuous attribute id * extraParameters
: contains one key sml_explore_ztest_known_mu
with known mean
Z test Compare means of a continuous feature conditioned on 2 binary features
inputAttributes
: contains 3 attribute id, first one is continuous followed by 2 binary ids
Z test proportion Compare two proportions originated from two binary features
inputAttributes
: contains 2 binary attribute id
F test Compare variance of 2 continuous features.
inputAttributes
: contains 2 continuous attributes id
F test Compare variance of continuous feature against a known variance
* inputAttributes
: contains 1 continuous attribute id * extraParameters
: contains one key sml_explore_ftest_known_sigma
with known variance / sigma
F test Compare variances of a continuous feature conditioned on 2 binary features
inputAttributes
: contains 3 attribute id, first one is continuous followed by 2 binary ids
T test Compare means of 2 continuous features.
inputAttributes
: contains 2 continuous attributes id
T test Compare mean of 1 continuous feature against a known mean
* inputAttributes
: contains 1 continuous attribute id * extraParameters
: contains one key sml_explore_ttest_known_mu
with known mean
T test Compare means of a continuous feature conditioned on 2 binary features
inputAttributes
: contains 3 attribute id, first one is continuous followed by 2 binary ids
Anova Compare means of 2 or more continuous features
inputAttributes
: contains 2 or more continuous attribute id
Anova Compare means of a continuous feature conditioned on 2 or more binary features
* inputAttributes
: contains 1 continuous attribute id * targets
: contains 1 or more binary attribute id
Chi square Determine the association between binary features.
*inputAttributes
: contains 2 or more binary attribute ids * targets
: contains 2 or more binary attribute ids see Chi Square for example.
Chi square Determine the association between binary features based on category names
inputAttributes
: list of category name See Chi Square for example.
Sample Request/Response Bivariate Statistics
Request:
POST url="http://charm:8080/symetry/rest/c1/projects/irisTest/explore?metric=bi"
Body:
{"values":[{"targets":[],"inputAttributes":["0","3"],"extraParameters":{}}]}
Response:
{"statusCode":"OK","statusString":"OK","values":{"smlInfo":{"pid":"r1","isDirty":true,"modelsList":[],"modelTypeList":[],"attributeNames":["sepal_length","sepal_width","petal_length","petal_width","sepal_lengt_b1","sepal_lengt_b2","sepal_width_b1","sepal_width_b2","petal_length_b1","petal_length_b2","petal_width_b1","petal_width_b2","Iris_setosa","Iris_versicolor","Iris_virginica"],"attributeIndexes":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],"attributeTypes":["C","C","C","C","B","B","B","B","B","B","B","B","B","B","B"],"modelAssessments":{},"modelPredictions":{},"hash":-1,"categorySeparator":"$","type":"cpu","creationDate":1488220762857,"lastModificationDate":1488220780484,"loaded":true,"persisted":true},"KSVDMap":{"values":[{"linCorr":0.8180000000000001,"condVariance":30.9294,"covar":0.5135000000000001,"condCount":179.8,"condMean":6.2717}]}}}
Sample Request/Response chi2 Example 1
Request:
POST url="http://charm:8080/symetry/rest/c1/projects/irisTest/explore?metric=chi2"
Body:
{"values":[{"targets":["12","13","14"],"inputAttributes":["10","11"],"inputAttributeNames":[],"extraParameters":{}}]}
Response:
{"statusCode":"OK","statusString":"OK","values":{"smlInfo":{"pid":"irisP","isDirty":true,"modelsList":[],"modelTypeList":[],"dsList":["Iris_rtlm.csv"],"attributeNames":["sepal_length","sepal_width","petal_length","petal_width","sepal_lengt_b1","sepal_lengt_b2","sepal_width_b1","sepal_width_b2","petal_length_b1","petal_length_b2","petal_width_b1","petal_width_b2","Iris_setosa","Iris_versicolor","Iris_virginica"],"attributeIndexes":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],"attributeTypes":["C","C","C","C","B","B","B","B","B","B","B","B","B","B","B"],"modelAssessments":{},"modelPredictions":{},"params":{},"hash":-1,"categorySeparator":"$","type":"cpu","creationDate":1588623147023,"lastModificationDate":1588623148044,"loaded":true,"persisted":true,"histogramEnabled":true},"KSVDMap":{"values":[{"df":2.0,"obs$11:12":0.0,"coef":0.8409000000000001,"pval":0.0,"chiStat":150.0,"obs$10:14":0.0,"obs$10:13":0.0,"obs$10:12":50.0,"obs$11:13":50.0,"obs$11:14":50.0}]}}}
Sample Request/Response chi2 Example 2
Request:
POST url="http://charm:8080/symetry/rest/c1/projects/dice/explore?metric=chi2"
Body:
{"values":[{"targets":[],"inputAttributes":["d1","d2","d3","d4","d5"],"inputAttributeNames":[],"extraParameters":{}}]}
Response:
{"statusCode":"OK","statusString":"OK","values":{"smlInfo":{"pid":"dicep","isDirty":true,"modelsList":[],"modelTypeList":[],"dsList":["dice5.csv"],"attributeNames":["d1$1","d1$5","d1$6","d1$3","d1$4","d1$2","d2$3","d2$2","d2$5","d2$6","d2$4","d2$1","d3$2","d3$1","d3$6","d3$4","d3$3","d3$5","d4$5","d4$2","d4$3","d4$6","d4$4","d4$1","d5$1","d5$2","d5$3","d5$4","d5$6","d5$5"],"attributeIndexes":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"attributeTypes":["B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B","B"],"modelAssessments":{},"modelPredictions":{},"params":{},"hash":-1,"categorySeparator":"$","type":"cpu","creationDate":1589219373647,"lastModificationDate":1589219374612,"loaded":true,"persisted":true,"histogramEnabled":false},"KSVDMap":{"values":[{"obs$d1:4":174.0,"obs$d2:3":180.0,"obs$d3:2":179.0,"obs$d4:2":155.0,"obs$d5:1":169.0,"obs$d1:3":156.0,"obs$d2:2":162.0,"obs$d3:1":175.0,"obs$d4:3":179.0,"obs$d5:2":172.0,"obs$d1:2":161.0,"obs$d2:1":145.0,"obs$d4:4":196.0,"obs$d5:3":164.0,"df":20.0,"obs$d1:1":182.0,"obs$d4:5":166.0,"obs$d5:4":177.0,"obs$d3:6":155.0,"obs$d2:6":178.0,"obs$d3:5":174.0,"pval":0.20470000000000002,"obs$d1:6":149.0,"obs$d2:5":141.0,"obs$d3:4":168.0,"obs$d1:5":178.0,"obs$d2:4":194.0,"obs$d3:3":149.0,"obs$d4:1":158.0,"obs$d4:6":146.0,"obs$d5:5":156.0,"obs$d5:6":162.0,"coef":0.0334,"chiStat":24.9148}]}}}
VIF Exploration
This rest endpoint return the variance inflation factor for a list of features. This API function is asynchronous. If it succeeds, it returns a 202 response, along with a Location header that specifies the job URL. For more information about SymetryML asynchronous job please refer the section on Symetry Job.
URL
POST /symetry/rest/{cid}/projects/{pid}/vif [body=ExploreContext]
HTTP Responses
202
OK
Job accepted.
400
BAD REQUEST
Unknown SymetryML project. {"statusCode":"BAD_REQUEST","statusString":" + Cannot Find SYMETRYML id[r2] for Customer id [c1]","values":{}}
HTTP Response Entity
The response is a KSVSMap, the key are the input index as specified in the MLContext body and the value is the variance inflation factor for that index.
Sample Request/Response
Request:
POST url="http://charm:8080/symetry/rest/c1/projects/irisTest/vif"
Body:
{"values":[{"targets":[],"inputAttributes":["2","4"]}]}
Response Header:
Location: http://charm:8080/symetry/rest/c1/jobs/4
Response:
{"statusCode":"ACCEPTED","statusString":"Job Created","values":{}}
Job Request:
GET url="http://charm:8080/symetry/rest/c1/jobs/4
Job Response:
KSVSMap
PCA Exploration
This REST endpoint allows for the request of the principal component analysis (PCA) of a set of attributes.
This API function is asynchronous. If it succeeds, it returns a 202 response, along with a Location header that specifies the job URL. For more information about SymetryML asynchronous job please refer the section on Symetry Job.
URL
POST /symetry/rest/{cid}/projects/{pid}/explorepca?explainedCovariance [body=ExploreContext]
Query Parameters
explainedCovariance
Optional
This parameter controls how many Eigen vectors/values will be returned in term of explained covariance. Default is 1 which correspond to 100% of explained covariance. Note that in order to avoid sending too much large response body, the maximum number of Eigen values/vectors that will be returned is 100.
Request Body
The request body is gonna be a MLContext that contains information about the inputs to use. It can also contains the following extra parameter pcaNumDimension
to specify a maximum number of dimension to return. The default value is 100.
HTTP Responses
200
OK
Success.
400
BAD REQUEST
Unknown SymetryML project. {"statusCode":"BAD_REQUEST","statusString":" + Cannot Find SYMETRYML id[r2] for Customer id [c1]","values":{}}
HTTP Response Entity
The response contains three keys:
pcaVectors
pcaValues
pcaSumValues
The value for the pcaVectors and pcaValues keys is a Matrix stored in a DataFrame JSON data structure. The pcaSumValues key consists of a number that is the sum of all the Eigen values. See DataFrame for information on the DataFrame JSON structure.
Sample Request/Response
Request:
POST url="http://charm:8080/symetry/rest/c1/projects/irisTest/explorepca"
Body:
{"values":[{"targets":[],"inputAttributes":["2","4"]}]}
Response Header:
Location: http://charm:8080/symetry/rest/c1/jobs/4
Response:
{"statusCode":"ACCEPTED","statusString":"Job Created","values":{}}
Job Request:
GET url="http://charm:8080/symetry/rest/c1/jobs/4
Job Response:
{pcaVectors, pcaValues, pcaSumValues}
SVD Exploration
This REST endpoint allows to get the singular values decomposition (SVD) of a set of attributes.
This API function is asynchronous. If it succeeds, it returns a 202 response, along with a Location header that specifies the job URL. For more information about SymetryML asynchronous job please refer the section Symetry Job.
The request body needs to contains the list of input attributes id to be used while computing the singular value decomposition. Refer to section ExploreContext for details.
URL
POST /symetry/rest/{cid}/projects/{pid}/exploresvd [body=ExploreContext]
HTTP Responses
200
OK
Success.
400
BAD REQUEST
Unknown SymetryML project. {"statusCode":"BAD_REQUEST","statusString":" + Cannot Find SYMETRYML id[r2] for Customer id [c1]","values":{}}
HTTP Response Entity
A map<String, String> map containing singular values along their attributes names. Each key/value pair in the result map contains: key = a SVD computed number, that is a singular value value = The name of the attribute
Sample Request/Response
Request:
POST url="http://charm:8080/symetry/rest/c1/projects/irisTest/exploresvd"
Body:
{"values":[{"targets":[],"inputAttributes":["2","4", "3", "5"]}]}
Response Header:
Location: http://charm:8080/symetry/rest/c1/jobs/4
Response:
{"statusCode":"ACCEPTED","statusString":"Job Created","values":{}}
Job Request:
GET url="http://charm:8080/symetry/rest/c1/jobs/4
Job Response:
KSVSMAP{}
SVD Features Selection
This REST endpoint allows to use singular value decomposition to perform feature selection. This endpoint will return a subset of attributes that are not singular based on the SVD algorithms. The SVD algorithms might be used multiple time internally to eventually reach the solution.
This API function is asynchronous. If it succeeds, it returns a 202 response, along with a Location header that specifies the job URL. For more information about SymetryML asynchronous job please refer the section Symetry Job.
The request body needs to contains the list of input attributes id to be used while computing the singular value decomposition. Refer to section ExploreContext for details.
URL
POST /symetry/rest/{cid}/projects/{pid}/exploresvdfs [body=ExploreContext]
HTTP Responses
200
OK
Success.
400
BAD REQUEST
Unknown SymetryML project. {"statusCode":"BAD_REQUEST","statusString":" + Cannot Find SYMETRYML id[r2] for Customer id [c1]","values":{}}
HTTP Response Entity
A map<String, String> map containing singular values along their attributes names. Each key/value pair in the result map contains: key = a SVD computed number, that is a singular value value = The name of the attribute
Density Estimates
This method returns the density estimate / histogram for any continuous
or binary
attributes in your SymetryML project. Histogram building must have been enabled - for the wanted symetry project - before invoking this rest endpoint. Histogram building for a project can be enabled by 2 means:
When creating the project with the
enableHistogram
query parameter. See Create Project endpoint.Explicitly invoking the Enable Histogram rest endpoint on any given project.
URL
POST /symetry/rest/{cid}/projects/{pid}/densityEstimate [body=ExploreContext]
MLContext Parameters for Density Estimates
For each features / attributes for which histogram are requested a MLContext is needed inside the ExplorationContext. The following tables describes the extra parameters can be used:
hist_bins
Required
Number of bins in the histogram
hist_max
Optional
Minimum value of the histogram on the x axis
hist_min
Optional
Maximum value of the histogram on the x axis
HTTP Responses
200
OK
Success.
400
BAD REQUEST
Unknown SymetryML project. {"statusCode":"BAD_REQUEST","statusString":" + Cannot Find SYMETRYML id[r2] for Customer id [c1]","values":{}}
HTTP Response Entity
see sample response below
Sample Request/Response
Request:
POST url="http://charm:8080/symetry/rest/c1/projects/irisTest/densityEstimate"
Body:
{"values":[{"inputAttributeNames":["sepal_length"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"20"}},{"inputAttributeNames":["sepal_width"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"20"}},{"inputAttributeNames":["petal_length"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"20"}},{"inputAttributeNames":["petal_width"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"20"}},{"inputAttributeNames":["sepal_lengt_b1"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"2"}},{"inputAttributeNames":["sepal_lengt_b2"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"2"}},{"inputAttributeNames":["sepal_width_b1"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"2"}},{"inputAttributeNames":["sepal_width_b2"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"2"}},{"inputAttributeNames":["petal_length_b1"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"2"}},{"inputAttributeNames":["petal_length_b2"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"2"}},{"inputAttributeNames":["petal_width_b1"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"2"}},{"inputAttributeNames":["petal_width_b2"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"2"}},{"inputAttributeNames":["Iris_setosa"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"2"}},{"inputAttributeNames":["Iris_versicolor"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"2"}},{"inputAttributeNames":["Iris_virginica"],"inputAttributes":[],"targets":[],"extraParameters":{"hist_bins":"2"}}]}
Response:
{"statusCode":"OK","statusString":"OK","values":{"densityList":{"values":[{"attrName":"sepal_length","min":4.3,"max":7.9,"width":0.18000000000000002,"histogram":[4.0,5.0,7.0,16.0,9.0,5.0,13.0,14.0,10.0,6.0,10.0,16.0,7.0,11.0,5.0,1.0,4.0,1.0,5.0,1.0]},{"attrName":"sepal_width","min":2.0,"max":4.4,"width":0.12000000000000002,"histogram":[1.0,3.0,4.0,3.0,8.0,14.0,14.0,10.0,26.0,12.0,19.0,12.0,6.0,3.0,9.0,2.0,1.0,1.0,1.0,1.0]},{"attrName":"petal_length","min":1.0,"max":6.9,"width":0.29500000000000004,"histogram":[4.0,33.0,11.0,2.0,0.0,0.0,1.0,2.0,3.0,5.0,12.0,14.0,12.0,17.0,6.0,12.0,7.0,4.0,2.0,3.0]},{"attrName":"petal_width","min":0.1,"max":2.5,"width":0.12,"histogram":[34.0,7.0,7.0,1.0,1.0,0.0,0.0,7.0,3.0,5.0,21.0,12.0,4.0,2.0,17.0,6.0,6.0,3.0,8.0,6.0]},{"attrName":"sepal_lengt_b1","min":0.0,"max":1.0,"width":0.5,"histogram":[67.0,83.0]},{"attrName":"sepal_lengt_b2","min":0.0,"max":1.0,"width":0.5,"histogram":[83.0,67.0]},{"attrName":"sepal_width_b1","min":0.0,"max":1.0,"width":0.5,"histogram":[93.0,57.0]},{"attrName":"sepal_width_b2","min":0.0,"max":1.0,"width":0.5,"histogram":[57.0,93.0]},{"attrName":"petal_length_b1","min":0.0,"max":1.0,"width":0.5,"histogram":[89.0,61.0]},{"attrName":"petal_length_b2","min":0.0,"max":1.0,"width":0.5,"histogram":[61.0,89.0]},{"attrName":"petal_width_b1","min":0.0,"max":1.0,"width":0.5,"histogram":[100.0,50.0]},{"attrName":"petal_width_b2","min":0.0,"max":1.0,"width":0.5,"histogram":[50.0,100.0]},{"attrName":"Iris_setosa","min":0.0,"max":1.0,"width":0.5,"histogram":[100.0,50.0]},{"attrName":"Iris_versicolor","min":0.0,"max":1.0,"width":0.5,"histogram":[100.0,50.0]},{"attrName":"Iris_virginica","min":0.0,"max":1.0,"width":0.5,"histogram":[100.0,50.0]}]}}}
Last updated