Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Random forest eigen values #37

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
49 changes: 43 additions & 6 deletions 3.train_ebimage/1.random_forest/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ Using [Sklearn Random Forest Classifier](https://scikit-learn.org/stable/modules

### Parameters

- n_estimators=1000 **(differ from default)**
- n_estimators=100
- criterion=’gini’
- max_depth=15 **(differ from default)**
- max_depth=None
- min_samples_split=2
- min_samples_leaf=1
- min_weight_fraction_leaf=0.0
Expand All @@ -33,18 +33,55 @@ Using [Sklearn Random Forest Classifier](https://scikit-learn.org/stable/modules
We run a script to determine model performance and model stability.
Every time the script is run another results in added to the list.
These results show what the performance is (the mean) and how stable it get there (the variance).
This can be used to compare different models with each other and conclude if they have different stability.
This can be used to compare different models with each other and conclude if they have different stability.
All parameters are set to the default parameters.
The mean focus is to find out if there is a significant classification possible using the current features.

### Results
### Results Ebimage

The balanced f1-score on the validation set is [0.328 ± 0.00286 with 8 model initializations](results/all_scores.csv).
The balanced f1-score on the validation set is [0.3449 ± 0.00594 with 21 model initializations](results_ebimage/all_scores.csv).
This is very low, but what is interesting is the [confusion matrix](results/0/confusion_matrix.png) (shown is one example initialization).
The predictions are dominated by 3 classes: dopaminereceptor, EGFR, ROCK.
When looking at the [most common classes](../2.process-data/results/target_counts.tsv) we find the same 3 classes.
When we look at the next 3 most common classes most common class (adrenoceptor, DNA_intercalation, AMPA) we see very few predictions. Almost all of these images are labeled as one of the 3 dominated classes.
There are a few classes (e.q. Ca2, Cdc25, eNos, rac1) are well predicted and seems to be easy cases.

![confusion matrix](results_ebimage/0/confusion_matrix.png)
Confusion matrix 0 of Ebimage

### results Eigen values

The balanced f1-score on the validation set is [0.128 ± 0.0111 with 5 model initializations](results_eigenvalue/all_scores.csv).
Comparing the results to those of Ebimage we see an overall worst result.
Comparing the diagonal of the two confusion matrices we see eigen value score lower by all but AMPA and CDK.

![confusion matrix](results_eigenvalue/0/confusion_matrix.png)
Confusion matrix 0 of eigen values

### results Eigen values with ebimage

The balanced f1-score on the validation set is [0.253 ± 0.0114 with 3 model initializations](results_ebimage+eigenvalue/all_scores.csv).
Comparing the results to those of Ebimage we see an overall worst result.
But higher as the eigen values.
Mostlikely this has to with with the 1967 features of the eigen values with [no significant difference](../2.process-data/scripts/html/2.1.analysing-eigen-values.html).
If the a random tree uses these to split the data it will decrease the result.
Give the higher number of useless (~1970) to usefull features (~60) features and the high number of tree (100) the change of this happening can be significant.

![confusion matrix](results_ebimage+eigenvalue/0/confusion_matrix.png)
Confusion matrix 0 of eigen values

### results selected Eigen values with ebimage

For this experiment we only take the [significant eigen values](../2.process-data/scripts/html/2.1.analysing-eigen-values.html) with ebimage features.
The balanced f1-score on the validation set is [0.336 ± 0.0071 with 21 model initializations](results_ebimage+selected_eigenvalue/all_scores.csv).
Applying a student-t on the results of ebimage and these we get a p-value of 3.111e-13.
Meaning ebimage without the extra eigen values score significant better.
Comparing the best confusion matrix of the ebimage and selected eigen values + ebimage,
we see strong correlation with some only Ca2 as noteworthy better with eigen values + ebimage.

![confusion matrix](results_ebimage+selected_eigenvalue/3/confusion_matrix.png)
Confusion matrix 3 of eigen values

### Future Steps

- [ ] Balance training data. The model seems to favor classes that are very dominate.
- [ ] Parameter optimization. Try different parameters to find best solution
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# %% Initialization
import os
import sys
from pathlib import Path

import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier

basefolder_loc = Path(__file__).parents[2]
sys.path.append(str(basefolder_loc))

from utils import create_metrics

data_dir = os.path.join(basefolder_loc, "2.process-data", "data")


def load_data(file_names=["train_processed.tsv.gz", "train_eigen_values.tsv.gz"]):
name_target = "targets"
datas = []
for file_name in file_names:
file_loc = os.path.join(data_dir, file_name)
data = pd.read_csv(file_loc, sep="\t")
data= data.rename(columns={"cell_code": "cell_codes", "target": "targets"})
datas.append(data)

data_combined = datas[0]
for data in datas[1:]:
data_combined = pd.merge(data_combined, data)
X = np.array(data_combined.drop(columns=["cell_id", "plate", "well", "cell_codes", name_target]))
Y = np.array(data_combined[name_target])
return X, Y


# %% Loading model

X, Y = load_data(["train_processed.tsv.gz", "train_eigen_values.tsv.gz"])

# %% Training model
RFclf = RandomForestClassifier(n_estimators=100)
RFclf.fit(X, Y)

# %% Validation of model
valX, valY = load_data(["test_processed.tsv.gz", "test_eigen_values.tsv.gz"])
prediction = RFclf.predict(valX)

create_metrics(
prediction,
valY,
os.path.join(os.path.join(os.path.dirname(__file__)), "results_ebimage+eigenvalue"),
)
39 changes: 39 additions & 0 deletions 3.train_ebimage/1.random_forest/random-forest-eigenvalues.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# %% Initialization
import os
import sys
from pathlib import Path

import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier

basefolder_loc = Path(__file__).parents[2]
sys.path.append(str(basefolder_loc))

from utils import create_metrics

data_dir = os.path.join(basefolder_loc, "2.process-data", "data")


def load_data(file_name="train_eigen_values.tsv.gz"):
file_loc = os.path.join(data_dir, file_name)
data = pd.read_csv(file_loc, sep="\t")
X = np.array(data.drop(columns=["cell_codes", "targets"]))
Y = np.array(data.targets)
return X, Y


# %% Training model
RFclf = RandomForestClassifier(n_estimators=100)
X, Y = load_data("train_eigen_values.tsv.gz")
RFclf.fit(X, Y)

# %% Validation of model
valX, valY = load_data("test_eigen_values.tsv.gz")
prediction = RFclf.predict(valX)

create_metrics(
prediction,
valY,
os.path.join(os.path.join(os.path.dirname(__file__)), "results_eigenvalue"),
)
3 changes: 3 additions & 0 deletions 3.train_ebimage/1.random_forest/random-forest-pipeline.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@
set -e

python ./3.train_ebimage/1.random_forest/random-forest.py
python ./3.train_ebimage/1.random_forest/random-forest-eigenvalues.py
python ./3.train_ebimage/1.random_forest/random-forest-eigenvalues+ebimages.py
python ./3.train_ebimage/1.random_forest/random-forest-selected-eigenvalues+ebimages.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# %% Initialization
import os
import sys
from pathlib import Path

import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier

basefolder_loc = Path(__file__).parents[2]
sys.path.append(str(basefolder_loc))

from utils import create_metrics

data_dir = os.path.join(basefolder_loc, "2.process-data", "data")


def load_data(file_names=["train_processed.tsv.gz", "train_eigen_values.tsv.gz"]):
name_target = "targets"
datas = []
selected_values = ["eigen_value_"+str(i).zfill(4) for i in [0,1,4,5,8,10,12,20,22,24,25,31,32,33,34,40,41,42,43,52,53,54,56,73,74,75,76,79,80,119,120,192,295]]
selected_values = selected_values + ["cell_codes", "targets"]
for file_name in file_names:
file_loc = os.path.join(data_dir, file_name)
data = pd.read_csv(file_loc, sep="\t")
data= data.rename(columns={"cell_code": "cell_codes", "target": "targets"})
if file_name.endswith("_eigen_values.tsv.gz"):
data = data[selected_values]
datas.append(data)

data_combined = datas[0]
for data in datas[1:]:
data_combined = pd.merge(data_combined, data)
X = np.array(data_combined.drop(columns=["cell_id", "plate", "well", "cell_codes", name_target]))
Y = np.array(data_combined[name_target])
return X, Y


# %% Loading model

X, Y = load_data(["train_processed.tsv.gz", "train_eigen_values.tsv.gz"])

# %% Training model
RFclf = RandomForestClassifier(n_estimators=100)
RFclf.fit(X, Y)

# %% Validation of model
valX, valY = load_data(["test_processed.tsv.gz", "test_eigen_values.tsv.gz"])
prediction = RFclf.predict(valX)

create_metrics(
prediction,
valY,
os.path.join(os.path.join(os.path.dirname(__file__)), "results_ebimage+selected_eigenvalue"),
)
4 changes: 2 additions & 2 deletions 3.train_ebimage/1.random_forest/random-forest.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def load_data(file_name="train_processed.tsv.gz"):


# %% Training model
RFclf = RandomForestClassifier(n_estimators=1000, max_depth=15, random_state=None)
RFclf = RandomForestClassifier(n_estimators=100)
X, Y = load_data("train_processed.tsv.gz")
RFclf.fit(X, Y)

Expand All @@ -35,5 +35,5 @@ def load_data(file_name="train_processed.tsv.gz"):
prediction = RFclf.predict(valX)

create_metrics(
prediction, valY, os.path.join(os.path.join(os.path.dirname(__file__)), "results")
prediction, valY, os.path.join(os.path.join(os.path.dirname(__file__)), "results_ebimage")
)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
16 changes: 0 additions & 16 deletions 3.train_ebimage/1.random_forest/results/6/confusion_matrix.csv

This file was deleted.

Binary file not shown.
16 changes: 0 additions & 16 deletions 3.train_ebimage/1.random_forest/results/7/confusion_matrix.csv

This file was deleted.

Binary file not shown.
9 changes: 0 additions & 9 deletions 3.train_ebimage/1.random_forest/results/all_scores.csv

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
AMPA,CDK,Ca2,Cdc25,DNAMetabolism,DNA_intercalation,EGFR,MEK,ROCK,TopoII,Tubulin,adrenoceptor,cMyc,cellcycle,dopaminereceptor,eNOS,rac1
32.0,29.0,2.0,0.0,12.0,29.0,30.0,19.0,31.0,9.0,14.0,23.0,3.0,23.0,34.0,1.0,0.0
23.0,24.0,4.0,0.0,9.0,29.0,32.0,21.0,28.0,6.0,10.0,29.0,5.0,11.0,33.0,0.0,0.0
9.0,2.0,94.0,17.0,15.0,3.0,5.0,7.0,6.0,28.0,41.0,2.0,1.0,4.0,2.0,12.0,0.0
0.0,0.0,3.0,26.0,0.0,3.0,2.0,3.0,0.0,5.0,6.0,0.0,0.0,0.0,1.0,1.0,0.0
0.0,0.0,6.0,1.0,82.0,1.0,2.0,0.0,2.0,25.0,5.0,2.0,0.0,0.0,0.0,18.0,0.0
18.0,28.0,0.0,1.0,12.0,28.0,29.0,12.0,30.0,6.0,6.0,22.0,5.0,10.0,33.0,0.0,0.0
85.0,82.0,5.0,0.0,34.0,98.0,124.0,52.0,116.0,34.0,38.0,96.0,37.0,55.0,125.0,2.0,0.0
3.0,2.0,2.0,0.0,0.0,2.0,4.0,15.0,1.0,1.0,1.0,4.0,3.0,5.0,4.0,0.0,0.0
89.0,65.0,4.0,2.0,30.0,67.0,125.0,43.0,131.0,19.0,29.0,94.0,29.0,58.0,117.0,0.0,0.0
9.0,12.0,35.0,2.0,45.0,12.0,10.0,19.0,4.0,156.0,25.0,11.0,2.0,11.0,15.0,28.0,2.0
5.0,6.0,50.0,19.0,7.0,4.0,6.0,9.0,4.0,20.0,115.0,6.0,2.0,1.0,9.0,11.0,2.0
18.0,19.0,1.0,0.0,3.0,21.0,37.0,7.0,29.0,5.0,7.0,21.0,7.0,17.0,16.0,0.0,0.0
0.0,1.0,0.0,0.0,0.0,0.0,1.0,1.0,1.0,3.0,1.0,1.0,2.0,0.0,0.0,0.0,0.0
90.0,93.0,8.0,1.0,32.0,86.0,98.0,44.0,110.0,31.0,25.0,72.0,32.0,46.0,122.0,3.0,0.0
1.0,1.0,2.0,0.0,10.0,0.0,2.0,0.0,0.0,8.0,1.0,1.0,0.0,1.0,2.0,47.0,0.0
0.0,1.0,1.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,2.0,1.0,0.0,1.0,0.0,2.0,86.0
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
AMPA,CDK,Ca2,Cdc25,DNAMetabolism,DNA_intercalation,EGFR,MEK,ROCK,TopoII,Tubulin,adrenoceptor,cMyc,cellcycle,dopaminereceptor,eNOS,rac1
2.0,0.0,0.0,0.0,0.0,1.0,2.0,0.0,0.0,0.0,0.0,2.0,0.0,2.0,0.0,0.0,0.0
5.0,3.0,0.0,0.0,1.0,2.0,6.0,9.0,5.0,1.0,0.0,6.0,0.0,6.0,8.0,0.0,0.0
11.0,6.0,99.0,15.0,15.0,5.0,9.0,11.0,5.0,22.0,28.0,3.0,4.0,4.0,8.0,12.0,0.0
0.0,0.0,3.0,26.0,0.0,3.0,1.0,1.0,0.0,3.0,5.0,0.0,0.0,0.0,0.0,2.0,0.0
0.0,0.0,0.0,0.0,84.0,0.0,0.0,0.0,0.0,14.0,1.0,0.0,0.0,0.0,0.0,9.0,0.0
4.0,1.0,0.0,0.0,1.0,8.0,0.0,3.0,0.0,0.0,0.0,4.0,2.0,2.0,4.0,1.0,0.0
128.0,99.0,6.0,1.0,42.0,115.0,155.0,71.0,130.0,33.0,36.0,90.0,49.0,73.0,162.0,0.0,0.0
0.0,1.0,0.0,0.0,0.0,0.0,2.0,13.0,0.0,0.0,0.0,0.0,2.0,0.0,1.0,0.0,0.0
86.0,82.0,0.0,2.0,28.0,91.0,142.0,25.0,165.0,27.0,31.0,112.0,31.0,51.0,103.0,0.0,0.0
12.0,13.0,49.0,3.0,50.0,13.0,8.0,23.0,9.0,180.0,31.0,17.0,1.0,12.0,14.0,35.0,2.0
4.0,4.0,44.0,21.0,3.0,8.0,6.0,13.0,6.0,20.0,132.0,5.0,3.0,3.0,4.0,9.0,0.0
1.0,1.0,0.0,0.0,1.0,1.0,1.0,1.0,4.0,0.0,1.0,1.0,0.0,1.0,2.0,0.0,0.0
128.0,153.0,11.0,1.0,58.0,136.0,172.0,81.0,169.0,46.0,57.0,143.0,36.0,84.0,204.0,0.0,0.0
1.0,1.0,5.0,0.0,8.0,0.0,3.0,1.0,0.0,9.0,1.0,2.0,0.0,3.0,2.0,54.0,0.0
0.0,1.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,3.0,0.0,0.0,2.0,1.0,3.0,88.0
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
AMPA,CDK,Ca2,Cdc25,DNAMetabolism,DNA_intercalation,EGFR,MEK,ROCK,TopoII,Tubulin,adrenoceptor,cMyc,cellcycle,dopaminereceptor,eNOS,rac1
24.0,26.0,3.0,0.0,7.0,25.0,36.0,16.0,28.0,11.0,7.0,23.0,11.0,13.0,45.0,0.0,0.0
17.0,25.0,4.0,0.0,11.0,12.0,30.0,18.0,22.0,5.0,8.0,21.0,9.0,14.0,34.0,0.0,0.0
7.0,6.0,89.0,16.0,7.0,7.0,8.0,12.0,5.0,35.0,39.0,4.0,3.0,2.0,2.0,15.0,1.0
0.0,0.0,4.0,26.0,0.0,2.0,2.0,1.0,0.0,3.0,6.0,0.0,0.0,0.0,0.0,1.0,0.0
0.0,0.0,7.0,0.0,89.0,5.0,0.0,3.0,1.0,32.0,4.0,1.0,1.0,0.0,2.0,18.0,0.0
25.0,22.0,1.0,1.0,7.0,17.0,33.0,16.0,28.0,11.0,8.0,17.0,9.0,13.0,26.0,1.0,0.0
113.0,92.0,3.0,1.0,38.0,97.0,128.0,58.0,146.0,30.0,34.0,108.0,25.0,73.0,128.0,2.0,0.0
4.0,6.0,2.0,0.0,0.0,5.0,6.0,10.0,3.0,3.0,2.0,6.0,1.0,3.0,7.0,0.0,0.0
80.0,70.0,3.0,2.0,35.0,101.0,119.0,35.0,103.0,27.0,39.0,91.0,32.0,46.0,99.0,0.0,0.0
10.0,12.0,36.0,3.0,52.0,10.0,8.0,22.0,10.0,145.0,24.0,8.0,0.0,7.0,12.0,34.0,1.0
8.0,6.0,54.0,19.0,5.0,5.0,8.0,4.0,4.0,22.0,121.0,4.0,4.0,4.0,8.0,8.0,0.0
16.0,16.0,2.0,0.0,5.0,17.0,23.0,10.0,27.0,6.0,4.0,13.0,5.0,5.0,26.0,0.0,0.0
0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0
1.0,1.0,0.0,0.0,0.0,2.0,0.0,0.0,2.0,2.0,0.0,3.0,0.0,0.0,1.0,0.0,0.0
76.0,83.0,6.0,1.0,29.0,78.0,104.0,47.0,113.0,17.0,27.0,84.0,28.0,58.0,121.0,1.0,0.0
1.0,0.0,3.0,0.0,6.0,0.0,2.0,0.0,1.0,7.0,1.0,2.0,0.0,3.0,2.0,43.0,1.0
0.0,0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,0.0,2.0,0.0,0.0,1.0,0.0,2.0,87.0
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
score
0.2567993590757155
0.2567433089812998
0.24686237535290398
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
AMPA,CDK,Ca2,Cdc25,DNAMetabolism,DNA_intercalation,EGFR,MEK,ROCK,TopoII,Tubulin,adrenoceptor,cMyc,cellcycle,dopaminereceptor,eNOS,rac1
8.0,7.0,0.0,0.0,2.0,3.0,10.0,1.0,4.0,1.0,1.0,7.0,3.0,6.0,4.0,0.0,0.0
9.0,23.0,3.0,0.0,6.0,19.0,24.0,10.0,13.0,0.0,2.0,17.0,1.0,6.0,20.0,0.0,0.0
8.0,3.0,123.0,12.0,7.0,9.0,8.0,11.0,5.0,19.0,22.0,4.0,2.0,4.0,5.0,9.0,1.0
0.0,0.0,3.0,39.0,0.0,2.0,1.0,1.0,0.0,4.0,5.0,0.0,0.0,0.0,0.0,2.0,0.0
0.0,0.0,1.0,0.0,107.0,1.0,0.0,0.0,0.0,9.0,0.0,0.0,0.0,0.0,0.0,4.0,0.0
19.0,20.0,0.0,0.0,5.0,35.0,30.0,4.0,14.0,10.0,4.0,19.0,5.0,16.0,20.0,0.0,0.0
105.0,57.0,2.0,1.0,36.0,100.0,145.0,37.0,111.0,32.0,30.0,84.0,33.0,63.0,119.0,0.0,0.0
17.0,38.0,7.0,0.0,6.0,18.0,18.0,103.0,15.0,3.0,8.0,19.0,8.0,11.0,32.0,1.0,0.0
88.0,82.0,0.0,1.0,36.0,83.0,126.0,20.0,197.0,21.0,41.0,102.0,40.0,53.0,96.0,0.0,0.0
8.0,6.0,20.0,3.0,39.0,10.0,7.0,5.0,5.0,186.0,18.0,7.0,1.0,7.0,8.0,18.0,1.0
1.0,4.0,44.0,10.0,2.0,3.0,2.0,8.0,1.0,16.0,145.0,4.0,3.0,2.0,4.0,6.0,1.0
8.0,7.0,0.0,0.0,3.0,4.0,7.0,2.0,5.0,2.0,0.0,6.0,0.0,7.0,10.0,0.0,0.0
110.0,116.0,8.0,1.0,39.0,95.0,127.0,49.0,122.0,41.0,43.0,116.0,31.0,66.0,190.0,0.0,0.0
1.0,2.0,6.0,2.0,4.0,1.0,2.0,1.0,1.0,12.0,5.0,0.0,1.0,2.0,5.0,85.0,0.0
0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,87.0
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
AMPA,CDK,Ca2,Cdc25,DNAMetabolism,DNA_intercalation,EGFR,MEK,ROCK,TopoII,Tubulin,adrenoceptor,cMyc,cellcycle,dopaminereceptor,eNOS,rac1
5.0,6.0,0.0,0.0,2.0,8.0,6.0,3.0,5.0,2.0,1.0,4.0,3.0,8.0,8.0,0.0,0.0
10.0,17.0,0.0,0.0,4.0,12.0,17.0,11.0,12.0,5.0,7.0,15.0,1.0,7.0,22.0,0.0,0.0
8.0,4.0,128.0,12.0,7.0,8.0,10.0,11.0,4.0,20.0,22.0,3.0,2.0,4.0,7.0,12.0,1.0
0.0,0.0,2.0,39.0,0.0,3.0,1.0,1.0,0.0,3.0,5.0,0.0,0.0,0.0,0.0,2.0,0.0
0.0,0.0,0.0,0.0,107.0,1.0,0.0,0.0,0.0,10.0,0.0,1.0,0.0,0.0,0.0,3.0,0.0
19.0,22.0,0.0,0.0,5.0,37.0,23.0,5.0,10.0,7.0,5.0,16.0,7.0,13.0,22.0,0.0,0.0
101.0,62.0,4.0,1.0,36.0,90.0,135.0,39.0,111.0,32.0,30.0,89.0,40.0,73.0,112.0,0.0,0.0
18.0,34.0,7.0,0.0,5.0,18.0,17.0,106.0,14.0,6.0,7.0,23.0,7.0,12.0,28.0,0.0,0.0
98.0,83.0,0.0,1.0,36.0,79.0,140.0,20.0,201.0,18.0,42.0,95.0,32.0,52.0,105.0,0.0,0.0
8.0,5.0,20.0,3.0,40.0,9.0,5.0,6.0,6.0,187.0,20.0,8.0,1.0,2.0,7.0,17.0,0.0
1.0,4.0,43.0,10.0,2.0,3.0,1.0,6.0,2.0,14.0,144.0,3.0,3.0,4.0,3.0,7.0,0.0
7.0,5.0,1.0,0.0,1.0,8.0,7.0,0.0,4.0,3.0,1.0,7.0,1.0,7.0,9.0,0.0,0.0
105.0,121.0,8.0,1.0,42.0,107.0,143.0,43.0,123.0,36.0,35.0,121.0,30.0,59.0,185.0,0.0,0.0
2.0,2.0,4.0,2.0,5.0,0.0,2.0,1.0,1.0,13.0,5.0,0.0,1.0,2.0,5.0,84.0,1.0
0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,88.0
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading