summaryrefslogtreecommitdiff
path: root/recommend/app.py
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2017-05-21 13:25:22 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2017-05-21 13:25:22 +0200
commit8b0da6d25c9130c87455ffdbb26af5e75d44b5af (patch)
tree8d847e20b57df34881c482c8eb21a4d5f88369f4 /recommend/app.py
parent5a0b7abcaac0d908da8cf9a51f16c94cc54fbd1e (diff)
downloadanalyzer-release/2.4.0.tar.gz
analyzer-release/2.4.0.zip
Diffstat (limited to 'recommend/app.py')
-rw-r--r--recommend/app.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/recommend/app.py b/recommend/app.py
new file mode 100644
index 0000000..11162da
--- /dev/null
+++ b/recommend/app.py
@@ -0,0 +1,78 @@
+#!/usr/bin/python3
+import csv
+import functools
+
+from flask import (
+ Flask,
+ render_template,
+ send_from_directory,
+ jsonify
+)
+
+app = Flask(__name__)
+
+# decision tree
+class Node(object):
+ def __init__(self, name="", count=0):
+ self.children = []
+ self.name = name
+ self.count = count
+
+ def child(self, name, count):
+ c = Node(name, count)
+ self.children.append(c)
+ return c
+
+ def get(self, name):
+ return [c for c in self.children if c.name == name][0]
+
+ def traverse(self, path):
+ cur = self
+ for child in path:
+ cur = cur.get(child)
+ return cur
+
+ def predict(self, *path):
+ par = self.traverse(list(path))
+ return [{
+ "name": p.name,
+ "probability": p.count/par.count
+ } for p in par.children]
+
+tree = Node()
+
+def load():
+ def deeper(depth=1, parent=tree, max=8):
+ for depth in range(max):
+ with open("data/" + str(depth + 2) + ".csv") as f:
+ fr = csv.reader(f, delimiter=",", quotechar="\"")
+ for row in fr:
+ path = row[:-2]
+ name = row[-2]
+ c = int(row[-1])
+ parn = parent.traverse(path)
+ parn.child(name, c)
+
+ deeper()
+ tree.count += sum(c.count for c in tree.children)
+
+@app.route("/")
+def index():
+ return render_template("index.html")
+
+@app.route("/assets/<path:path>")
+def assets(path):
+ return send_from_directory("assets", path)
+
+@app.route("/api/builds")
+@app.route("/api/builds/<path:path>")
+def api(path=None):
+ if path == None:
+ els = []
+ else:
+ els = path.split("/")
+ return jsonify(tree.predict(*els))
+
+if __name__ == "__main__":
+ load()
+ app.run(debug=True)