Skip to content

Commit

Permalink
Merge branch 'master' into csv
Browse files Browse the repository at this point in the history
  • Loading branch information
szarnyasg committed Jun 19, 2018
2 parents 470e7af + 7692d21 commit be7e231
Show file tree
Hide file tree
Showing 33 changed files with 1,126 additions and 21 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Expand Up @@ -2,6 +2,7 @@
.classpath

bin/
lib/
target/
tmp/
.settings/
Expand Down Expand Up @@ -30,3 +31,5 @@ replay_*.log
test-output
.idea/
out/
.Rproj.user
*.tsv
4 changes: 0 additions & 4 deletions README.md
Expand Up @@ -6,10 +6,6 @@

Java 8

## Use the library

For examples, please consult the test classes and visit [Model Analyzer Examples](https://github.com/ZsoltKovari/model-analyzer-examples).

## License

This project is distributed under the Eclipse Public License 1.0. The project was supported by the MONDO EU FP7 project (EU ICT-611125) and is currently developed by the MTA-BME Lendület Research Group on Cyber-Physical Systems.
23 changes: 23 additions & 0 deletions analyzer/README.md
@@ -0,0 +1,23 @@
# Standalone application for CLI execution

Build the project, and move the files to the root of the repository.

```bash
cd $(git rev-parse --show-toplevel) && \
rm -rf lib/ bin/ && \
./gradlew clean build installDist -x test && \
cp -R analyzer/build/install/analyzer/. analyzer && \
cd analyzer
```

Ensure that the JVM will have sufficient memory by using:

```bash
export JAVA_OPTS="-Xms4G -Xmx12G"
```

Run the analyzer with:

```bash
bin/analyzer panama/panama
```
2 changes: 2 additions & 0 deletions csv-example/build.gradle → analyzer/build.gradle
@@ -1,3 +1,5 @@
apply plugin: 'application'
mainClassName = 'analyzer.Main'

dependencies {
compile project(':hu.bme.mit.mba.modeladapters.csv')
Expand Down
3 changes: 3 additions & 0 deletions analyzer/edges.csv
@@ -0,0 +1,3 @@
0 intermediary_of 1
1 officer_of 2
2 registered_address 3
File renamed without changes.
1 change: 1 addition & 0 deletions analyzer/panama/.gitignore
@@ -0,0 +1 @@
*.csv
54 changes: 54 additions & 0 deletions analyzer/src/main/java/analyzer/Analyzer.java
@@ -0,0 +1,54 @@
package analyzer;

import hu.bme.mit.mba.modelmetrics.AbstractModelMetric;
import hu.bme.mit.mba.modelmetrics.ModelMetric;
import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.constraint.NotNull;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvMapWriter;
import org.supercsv.io.ICsvMapWriter;
import org.supercsv.prefs.CsvPreference;

import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public class Analyzer {

public static final CellProcessor[] processors = new CellProcessor[]{
new NotNull(),
new Optional(),
new Optional(),
new NotNull()
};

public static void showResult(ModelMetric metric) {
System.out.println(String.format("Data of %s : %s", metric.getName(), metric.getData().toString()));
}

public static void writeToTsv(List<AbstractModelMetric> metrics, String[] header, String filename) throws IOException {
ICsvMapWriter mapWriter = null;

try {
mapWriter = new CsvMapWriter(new FileWriter(filename), CsvPreference.TAB_PREFERENCE);

// write the header
mapWriter.writeHeader(header);

for (AbstractModelMetric metric : metrics) {
List<Map<String, Object>> mapList = metric.getTsvMaps(header);
for (Map<String, Object> map : mapList) {
mapWriter.write(map, header, processors);
}
}

} finally {
if (mapWriter != null) {
mapWriter.close();
}
}

}

}
116 changes: 116 additions & 0 deletions analyzer/src/main/java/analyzer/Main.java
@@ -0,0 +1,116 @@
package analyzer;

import hu.bme.mit.mba.modeladapters.csv.CsvModelAdapter;
import hu.bme.mit.mba.modelmetrics.AbstractModelMetric;
import hu.bme.mit.mba.modelmetrics.impl.simple.Density;
import hu.bme.mit.mba.modelmetrics.impl.simple.NumberOfEdges;
import hu.bme.mit.mba.modelmetrics.impl.simple.NumberOfNodes;
import hu.bme.mit.mba.modelmetrics.impl.typed.DimensionActivity;
import hu.bme.mit.mba.modelmetrics.impl.typed.DimensionalClusteringCoefficient;
import hu.bme.mit.mba.modelmetrics.impl.typed.DimensionalDegree;
import hu.bme.mit.mba.modelmetrics.impl.typed.DimensionalDegreeEntropy;
import hu.bme.mit.mba.modelmetrics.impl.typed.EdgeDimensionConnectivity;
import hu.bme.mit.mba.modelmetrics.impl.typed.EdgeOverlap;
import hu.bme.mit.mba.modelmetrics.impl.typed.MultiplexParticipationCoefficient;
import hu.bme.mit.mba.modelmetrics.impl.typed.NodeActivity;
import hu.bme.mit.mba.modelmetrics.impl.typed.NumberOfTypedEdges;
import hu.bme.mit.mba.modelmetrics.impl.typed.PairwiseMultiplexity;
import org.supercsv.cellprocessor.constraint.NotNull;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class Main {

public static void main(String[] args) throws IOException {
final String graph = args[0];
final String metrics = graph + ".tsv";
final String nodes = graph + "-nodes.csv";
final String edges = graph + "-edges.csv";

final String[] header = new String[]{"Category", "Instance", "Index", "Value"};
List<AbstractModelMetric> modelMetrics = new ArrayList<>();

// the adapter represents a bridge between model and metrics
CsvModelAdapter adapter = new CsvModelAdapter(new NotNull());

// adapter must be initialized, this will create an index which is necessary during the evaluation
adapter.init(nodes, edges);
System.out.println("initialized");

// calculate metrics
// System.out.println("degree");
// Degrees dd = new Degrees();
// dd.evaluate(adapter);
// modelMetrics.add(dd);

System.out.println("density");
Density d = new Density();
d.evaluate(adapter);
modelMetrics.add(d);

System.out.println("dimension activity");
DimensionActivity dimensionActivity = new DimensionActivity();
dimensionActivity.evaluate(adapter);
modelMetrics.add(dimensionActivity);

System.out.println("dimensional degree");
DimensionalDegree dimensionalDegree = new DimensionalDegree();
dimensionalDegree.evaluate(adapter);
modelMetrics.add(dimensionalDegree);

System.out.println("dimensional clustering coefficient");
DimensionalClusteringCoefficient dcc = new DimensionalClusteringCoefficient();
dcc.evaluate(adapter);
modelMetrics.add(dcc);

System.out.println("dimensional degree entropy");
DimensionalDegreeEntropy dde = new DimensionalDegreeEntropy();
dde.evaluate(adapter);
modelMetrics.add(dde);

System.out.println("edge dimension connectivity");
EdgeDimensionConnectivity edgeDimensionConnectivity = new EdgeDimensionConnectivity();
edgeDimensionConnectivity.evaluate(adapter);
modelMetrics.add(edgeDimensionConnectivity);

System.out.println("edge overlap");
EdgeOverlap eo = new EdgeOverlap();
eo.evaluate(adapter);
modelMetrics.add(eo);

MultiplexParticipationCoefficient mpc = new MultiplexParticipationCoefficient();
System.out.println("mpc");
mpc.evaluate(adapter);
modelMetrics.add(mpc);

System.out.println("node activity");
NodeActivity nodeActivity = new NodeActivity();
nodeActivity.evaluate(adapter);
modelMetrics.add(nodeActivity);

System.out.println("number of edges");
NumberOfEdges numberOfEdges = new NumberOfEdges();
numberOfEdges.evaluate(adapter);
modelMetrics.add(numberOfEdges);

System.out.println("number of nodes");
NumberOfNodes numberOfNodes = new NumberOfNodes();
numberOfNodes.evaluate(adapter);
modelMetrics.add(numberOfNodes);

System.out.println("number of typed edges");
NumberOfTypedEdges numberOfTypedEdges = new NumberOfTypedEdges();
numberOfEdges.evaluate(adapter);
modelMetrics.add(numberOfTypedEdges);

System.out.println("pairwise multiplexity");
PairwiseMultiplexity pm = new PairwiseMultiplexity();
pm.evaluate(adapter);
modelMetrics.add(pm);

Analyzer.writeToTsv(modelMetrics, header, metrics);
}

}
142 changes: 142 additions & 0 deletions analyzer/src/test/java/analyzer/CsvTest.java
@@ -0,0 +1,142 @@
package analyzer;

import hu.bme.mit.mba.modeladapters.csv.CsvModelAdapter;
import hu.bme.mit.mba.modelmetrics.AbstractModelMetric;
import hu.bme.mit.mba.modelmetrics.ModelMetric;
import hu.bme.mit.mba.modelmetrics.impl.simple.Degrees;
import hu.bme.mit.mba.modelmetrics.impl.simple.Density;
import hu.bme.mit.mba.modelmetrics.impl.simple.NumberOfEdges;
import hu.bme.mit.mba.modelmetrics.impl.simple.NumberOfNodes;
import hu.bme.mit.mba.modelmetrics.impl.typed.*;
import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.constraint.NotNull;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvMapWriter;
import org.supercsv.io.ICsvMapWriter;
import org.supercsv.prefs.CsvPreference;
import org.testng.annotations.Test;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class CsvTest {

@Test
public void test() throws IOException {
final String filename = "modelmetrics.tsv";
final String[] header = new String[]{"Category", "Instance", "Index", "Value"};
final List<AbstractModelMetric> modelMetrics = new ArrayList<>();

// the adapter represents a bridge between model and metrics
CsvModelAdapter adapter = new CsvModelAdapter(new NotNull());

// adapter must be initialized, this will create an index which is necessary during the evaluation
adapter.init("nodes.csv", "edges.csv");
System.out.println("initialized");

// calculate metrics
System.out.println("dd");
Degrees dd = new Degrees();
dd.evaluate(adapter);
modelMetrics.add(dd);
// showResult(dd);

System.out.println("pm");
PairwiseMultiplexity pm = new PairwiseMultiplexity();
pm.evaluate(adapter);
showResult(pm);
modelMetrics.add(pm);

MultiplexParticipationCoefficient mpc = new MultiplexParticipationCoefficient();
System.out.println("mpc");
mpc.evaluate(adapter);
modelMetrics.add(mpc);
showResult(mpc);

System.out.println("dimension activity");
DimensionActivity dimensionActivity = new DimensionActivity();
dimensionActivity.evaluate(adapter);
showResult(dimensionActivity);
modelMetrics.add(dimensionActivity);

EdgeDimensionConnectivity edgeDimensionConnectivity = new EdgeDimensionConnectivity();
edgeDimensionConnectivity.evaluate(adapter);
showResult(edgeDimensionConnectivity);
modelMetrics.add(edgeDimensionConnectivity);

Density d = new Density();
d.evaluate(adapter);
modelMetrics.add(d);

NumberOfNodes numberOfNodes = new NumberOfNodes();
numberOfNodes.evaluate(adapter);
modelMetrics.add(numberOfNodes);

NumberOfEdges numberOfEdges = new NumberOfEdges();
numberOfEdges.evaluate(adapter);
modelMetrics.add(numberOfEdges);

NodeActivity nodeActivity = new NodeActivity();
nodeActivity.evaluate(adapter);
modelMetrics.add(nodeActivity);

NumberOfTypedEdges numberOfTypedEdges = new NumberOfTypedEdges();
numberOfEdges.evaluate(adapter);
modelMetrics.add(numberOfTypedEdges);

DimensionalDegree dimensionalDegree = new DimensionalDegree();
dimensionalDegree.evaluate(adapter);
modelMetrics.add(dimensionalDegree);

writeToTsv(modelMetrics, header, filename);

}


private void showResult(ModelMetric metric) {
System.out.println(String.format("Data of %s : %s", metric.getName(), metric.getData().toString()));
}

private static CellProcessor[] getProcessors() {

final CellProcessor[] processors = new CellProcessor[]{
new NotNull(),
new Optional(),
new Optional(),
new NotNull()
};

return processors;
}

private void writeToTsv(List<AbstractModelMetric> metrics, String[] header, String filename) throws IOException {
ICsvMapWriter mapWriter = null;

try {
mapWriter = new CsvMapWriter(new FileWriter(filename),
CsvPreference.TAB_PREFERENCE);

final CellProcessor[] processors = getProcessors();

// write the header
mapWriter.writeHeader(header);

for (AbstractModelMetric metric : metrics) {
List<Map<String, Object>> mapList = metric.getTsvMaps(header);
for (Map<String, Object> map : mapList) {
mapWriter.write(map, header, processors);
}
}

} finally {
if (mapWriter != null) {
mapWriter.close();
}
}

}

}
1 change: 1 addition & 0 deletions build.gradle
Expand Up @@ -10,6 +10,7 @@ subprojects {

repositories {
jcenter()
maven { url "https://docs.inf.mit.bme.hu/graph-analyzer" }
}

test {
Expand Down
3 changes: 0 additions & 3 deletions csv-example/edges.csv

This file was deleted.

0 comments on commit be7e231

Please sign in to comment.