Skip to content

Commit

Permalink
Functionality done.
Browse files Browse the repository at this point in the history
  • Loading branch information
Zachary Hanif committed Nov 23, 2019
1 parent c93f244 commit 369d3e4
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 14 deletions.
12 changes: 12 additions & 0 deletions data/sample_two.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
query_number,metric_type,score
1, NDCG, 0.078
2, MAP, 1
3, MAP, 2
4, MAP, 3
5, MAP, 4
6, MAP, 5
7, MAP, 6
8, MAP, 7
9, MAP, 8
10, MAP, 9
11, MAP, 10.0
80 changes: 66 additions & 14 deletions src/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
import io
import ujson
import collections
from itertools import combinations
from scipy.stats import ttest_ind
from scipy.stats import f_oneway
import numpy as np

app = Flask(__name__)

Expand All @@ -29,6 +33,7 @@ def upload():
if file.filename == '':
flash('No selected file')
return redirect(request.url)

if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file_contents = file.read()
Expand All @@ -37,13 +42,12 @@ def upload():

r.sadd("experiments", filename)
r.set(filename, data)
print(df)
print(df['score'].describe())
# Average, median, STD, MAD
print(filename)

# Average, median, STD, MAD
r.set(filename+"_statistics", df['score'].describe().to_json())

return redirect(url_for('upload', filename=filename))

return '''
<!doctype html>
<title>Upload new File</title>
Expand All @@ -54,33 +58,81 @@ def upload():
</form>
'''

def one_way_anova():
t, p = f_oneway(*data.values())
return p

def t_test():
for list1, list2 in combinations(data.keys(), 2):
t, p = ttest_ind(data[list1], data[list2])
print(list1, list2, p)

def histogram_intersection(a, b):
v = np.minimum(a, b).sum().round(decimals=1)
return v

@app.route('/compare/<experiment_one>/<experiment_two>')
def compare(experiment_one, experiment_two):
exp_one_stats = r.get(experiment_one+'_statistics').decode('utf-8')
exp_two_stats = r.get(experiment_two+'_statistics').decode('utf-8')

exp_one_data = r.get(experiment_one).decode('ascii')
exp_two_data = r.get(experiment_two).decode('ascii')

df_data_1 = pd.read_csv(io.StringIO(exp_one_data), delimiter=',', header='infer')
df_data_2 = pd.read_csv(io.StringIO(exp_two_data), delimiter=',', header='infer')

df_data_2 = df_data_2.rename(columns={"query_number": "query_number_q2", "metric_type": "metric_type_q2", "score": "score_q2"})

df_stats_1 = pd.read_json(exp_one_stats, typ='series')
df_stats_2 = pd.read_json(exp_two_stats, typ='series')

@app.route('/compare/<path:experiment_one>/<path:experiment_two>')
def compare():
# Calculate P-Value between query results
# Return sorted array based on score

return 'This is the compare function for two experiments.'
merged_stats = pd.concat([df_stats_1, df_stats_2], axis=1, sort=False)
merged_stats['absolute_difference'] = merged_stats[0] - merged_stats[1]
print(merged_stats)

merged_data = pd.concat([df_data_1, df_data_2], axis=1, sort=False)
merged_data['absolute_difference'] = merged_data['score'] - merged_data['score_q2']
print(merged_data)

# Correlation, covariance
stats_corr = merged_stats.corr(method=histogram_intersection)
stats_cov = merged_stats.cov()

@app.route('/experiment')
def experiment():
data_corr = merged_data.corr(method=histogram_intersection)
data_cov = merged_data.cov()

return 'This is the view of an experiment'
aggregator = {}
aggregator["merged_stats"] = merged_stats.to_dict()
aggregator["merged_data"] = merged_data.to_dict()
aggregator["stats_corr"] = stats_corr.to_dict()
aggregator["stats_cov"] = stats_cov.to_dict()
aggregator["data_corr"] = data_corr.to_dict()
aggregator["data_cov"] = data_cov.to_dict()
return ujson.dumps(aggregator)

@app.route('/experiment/<experiment_id>')
def experiment(experiment_id):
return r.get(experiment_id+'_statistics').decode('utf-8')

@app.route('/hello')

@app.route('/')
def hello():
return 'Hello!'

def experiment_list():
experiments = [element.decode("utf-8") for element in r.smembers("experiments")]
return experiments

@app.route('/experiments')
def experiments():
experiment_holder = collections.defaultdict(list)
for element in r.smembers("experiments"):
experiment_holder["experiments"].append(str(element.decode("utf-8")))
return_json = ujson.dumps(experiment_holder)
return experiment_holder

return return_json

if __name__ == '__main__':

Expand Down

0 comments on commit 369d3e4

Please sign in to comment.