From 8b0da6d25c9130c87455ffdbb26af5e75d44b5af Mon Sep 17 00:00:00 2001 From: schneefux Date: Sun, 21 May 2017 13:25:22 +0200 Subject: wip --- recommend/app.py | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 recommend/app.py (limited to 'recommend/app.py') 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/") +def assets(path): + return send_from_directory("assets", path) + +@app.route("/api/builds") +@app.route("/api/builds/") +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) -- cgit v1.3.1