From ea70146277bde42117b8271a6257f5f24e4a5014 Mon Sep 17 00:00:00 2001 From: foulwall Date: Mon, 8 Jul 2013 22:28:22 +0800 Subject: [PATCH] 1. add a data loader. 2. change the json structure, add a colomn for label value 3. fix the legend digit. 4. add auto-scale to the axis 5. remove the shogun-demo submodule --- .gitmodules | 4 - common/fetch_data.py | 12 +-- data | 1 - data/australian.libsvm.h5 | Bin 0 -> 93616 bytes demo/classification_binary.py | 14 ++-- demo/classification_perceptron.py | 5 +- demo/clustering.py | 45 +++++------ demo/gp.py | 24 ++++-- demo/kernel_matrix.py | 19 ++--- demo/svr.py | 13 +++- shogun_demo/settings.py | 4 + shogun_demo/urls.py | 3 +- static/js/editors/textfield.js | 30 -------- templates/button.js | 11 +-- templates/classification/binary.html | 10 ++- templates/clustering/index.html | 20 ++--- templates/coordinate_2dims.js | 64 +++++++++------- templates/default.html | 2 +- templates/gp/index.html | 86 ++++++--------------- templates/heatmap.js | 2 +- templates/kernel_matrix/index.html | 29 ++++--- templates/mouse_click.js | 15 ++-- templates/svr/index.html | 13 ++-- templates/toy_data_generator_form.html | 100 ++++++++++++++++++++++++- toy_data/generator.py | 5 +- toy_data/importer.py | 30 ++++++++ 26 files changed, 321 insertions(+), 240 deletions(-) delete mode 100644 .gitmodules delete mode 160000 data create mode 100644 data/australian.libsvm.h5 delete mode 100644 static/js/editors/textfield.js create mode 100644 toy_data/importer.py diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index beb20f7..0000000 --- a/.gitmodules +++ /dev/null @@ -1,4 +0,0 @@ -[submodule "data"] - path = data - url = git@github.com:shogun-toolbox/shogun-data.git - ignore = dirty diff --git a/common/fetch_data.py b/common/fetch_data.py index 23cda14..e4d121c 100644 --- a/common/fetch_data.py +++ b/common/fetch_data.py @@ -3,16 +3,16 @@ import json def get_binary_features(request): try: - class_a_point_set_raw = json.loads(request.POST['mouse_left_click_point_set']) - class_b_point_set_raw = json.loads(request.POST['mouse_right_click_point_set']) + point_set_raw = json.loads(request.POST['point_set']) except: raise ValueError("cannot read click pts") class_a_point_set = [] class_b_point_set = [] - for point in class_a_point_set_raw: - class_a_point_set.append([point['x'], point['y']]) - for point in class_b_point_set_raw: - class_b_point_set.append([point['x'], point['y']]) + for point in point_set_raw: + if point['label'] == 1: + class_a_point_set.append([point['x'], point['y']]) + else: + class_b_point_set.append([point['x'], point['y']]) class_a = np.transpose(np.array(class_a_point_set, dtype=float)) class_b = np.transpose(np.array(class_b_point_set, dtype=float)) diff --git a/data b/data deleted file mode 160000 index 0f47c81..0000000 --- a/data +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0f47c817b93664da5845c0dcdb708ffcbdfbf593 diff --git a/data/australian.libsvm.h5 b/data/australian.libsvm.h5 new file mode 100644 index 0000000000000000000000000000000000000000..c6fe1a054cddc60a608c950cffee327d111b6c54 GIT binary patch literal 93616 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 R^LuW3H!9+c=WzV<{{cG_Th9Oh literal 0 HcmV?d00001 diff --git a/demo/classification_binary.py b/demo/classification_binary.py index 3c98854..6e344fe 100644 --- a/demo/classification_binary.py +++ b/demo/classification_binary.py @@ -52,7 +52,10 @@ def entrance(request): 'panel_name': 'arguments', 'panel_label': 'Arguments', 'panel_property': arguments - }]} + }, + { + 'panel_name': 'toy_data', + 'panel_label': 'Toy Data'}]} return render_to_response("classification/binary.html", properties, context_instance = RequestContext(request)) @@ -69,8 +72,9 @@ def classify(request): return HttpResponse(json.dumps({"status": e.message})) try: + domain = json.loads(request.POST['axis_domain']) C = float(request.POST["C"]) - x, y, z = classify_svm(sg.LibSVM, features, labels, kernel, C=C) + x, y, z = classify_svm(sg.LibSVM, features, labels, kernel, domain, C=C) except Exception as e: import traceback return HttpResponse(json.dumps({"status": repr(traceback.format_exc())})) @@ -79,13 +83,13 @@ def classify(request): 'domain': [np.min(z), np.max(z)], 'z': z.tolist() })) -def classify_svm(classifier, features, labels, kernel, C=1): +def classify_svm(classifier, features, labels, kernel, domain, C=1): svm = classifier(C, kernel, labels) svm.train(features) size = 100 - x1 = np.linspace(0, 1, size) - y1 = np.linspace(0, 1, size) + x1 = np.linspace(domain['horizontal'][0], domain['horizontal'][1], size) + y1 = np.linspace(domain['vertical'][0], domain['vertical'][1], size) x, y = np.meshgrid(x1, y1) test = sg.RealFeatures(np.array((np.ravel(x), np.ravel(y)))) diff --git a/demo/classification_perceptron.py b/demo/classification_perceptron.py index efb6b85..3cd8f32 100644 --- a/demo/classification_perceptron.py +++ b/demo/classification_perceptron.py @@ -41,7 +41,10 @@ def entrance(request): 'panel_name': 'arguments', 'panel_label': 'Arguments', 'panel_property': arguments - }]} + }, + { + 'panel_name': 'toy_data', + 'panel_label': 'Toy Data'}]} return render_to_response("classification/binary.html", properties, context_instance = RequestContext(request)) diff --git a/demo/clustering.py b/demo/clustering.py index 6933b8c..9d87706 100644 --- a/demo/clustering.py +++ b/demo/clustering.py @@ -28,6 +28,7 @@ def entrance(request): }] properties = { 'title': 'Clustering', 'template': {'type': 'coordinate-2dims', + 'feature': 'binary', 'coordinate_range': {'horizontal': [0, 1], 'vertical': [0, 0.8]}, 'coordinate_system': {'horizontal_axis': {'position': 'bottom', @@ -42,7 +43,10 @@ def entrance(request): 'panel_name': 'arguments', 'panel_label': 'Arguments', 'panel_property': arguments - }]} + }, + { + 'panel_name': 'toy_data', + 'panel_label': 'toy data'}]} return render_to_response("clustering/index.html", properties, context_instance=RequestContext(request)) def cluster(request): @@ -52,40 +56,37 @@ def cluster(request): centers = kmeans.get_cluster_centers() radi = kmeans.get_radiuses() result = {'circle': []} - for i in xrange(arguments[3]): # arguments[3] is k + for i in xrange(arguments[2]): # arguments[3] is k result['circle'].append({'x': centers[0,i], 'y': centers[1,i], 'r': radi[i]}) return HttpResponse(json.dumps(result)) except: + import traceback + print traceback.format_exc() return HttpResponseNotFound() def _read_data(request): k = int(request.POST['number_of_clusters']) if k > 500: raise TypeError - positive = json.loads(request.POST['mouse_left_click_point_set']) - negative = json.loads(request.POST['mouse_right_click_point_set']) + point_set = json.loads(request.POST['point_set']) distance_name = request.POST['distance'] - - if len(positive) == 0 and len(negative) == 0: + + if len(point_set) == 0: raise TypeError - return (positive, negative, distance_name, k) + return (point_set, distance_name, k) -def _train_clustering(positive, negative, distance_name, k): - labels = np.array([1]*len(positive) + [-1]*len(negative), dtype=np.float64) - num_pos = len(positive) - num_neg = len(negative) - features = np.zeros((2, num_pos+num_neg)) - - for i in xrange(num_pos): - features[0, i] = positive[i]['x'] - features[1, i] = positive[i]['y'] - - for i in xrange(num_neg): - features[0, i+num_pos] = negative[i]['x'] - features[1, i+num_pos] = negative[i]['y'] - +def _train_clustering(point_set, distance_name, k): + labels = np.array([0]*len(point_set)) + features = np.zeros((2, len(point_set))) + + print labels + for i in xrange(len(point_set)): + features[0, i] = point_set[i]['x'] + features[1, i] = point_set[i]['y'] + labels[i] = point_set[i]['label'] + lab = sg.BinaryLabels(labels) train = sg.RealFeatures(features) @@ -96,7 +97,7 @@ def _train_clustering(positive, negative, distance_name, k): elif distance_name == "JensenMetric": distance = sg.JensenMetric(train, train) else: - raise TypeError + raise TypeError kmeans = sg.KMeans(k, distance) kmeans.train() diff --git a/demo/gp.py b/demo/gp.py index a6c9b16..264e122 100644 --- a/demo/gp.py +++ b/demo/gp.py @@ -27,14 +27,21 @@ def entrance(request): 'argument_label': 'Kernel Width', 'argument_name': 'sigma', 'argument_default': '2.0'}, + { + 'argument_type': 'decimal', + 'argument_label': 'Noise Level', + 'argument_name': 'noise_level', + 'argument_default': '0.1'}, { 'argument_type': 'button-group', - 'argument_items': [{'button_name': 'TrainGP'}, - {'button_name': 'Clear'}] + 'argument_items': [{'button_name': 'TrainGP', + 'button_type': 'json_up_down_load'}, + {'button_name': 'clear'}] } ] properties = { 'title': 'Gaussian Process Regression Demo', 'template': {'type': 'coordinate-2dims', + 'mouse_click_enabled': 'left', 'coordinate_system': {'horizontal_axis': {'range': [-5, 5]}, 'vertical_axis': {'range': [-5, 5]}}}, 'panels': [ @@ -44,7 +51,7 @@ def entrance(request): 'panel_property': arguments }, { - 'panel_name': 'toy_data_generator', + 'panel_name': 'toy_data', 'panel_label': 'Toy Data' }]} return render_to_response("gp/index.html", properties, context_instance = RequestContext(request)) @@ -62,11 +69,12 @@ def train(request): def _read_toy_data(request): y_set = [] x_set = [] - toy_data = json.loads(request.POST['mouse_left_click_point_set']) + toy_data = json.loads(request.POST['point_set']) for pt in toy_data: y_set.append(float(pt["y"])) x_set.append(float(pt["x"])) noise_level = float(request.POST['noise_level']) + domain = json.loads(request.POST['axis_domain']) labels = np.array(y_set, dtype = np.float64) num = len(x_set) @@ -78,9 +86,9 @@ def _read_toy_data(request): feat_train = sg.RealFeatures(examples) labels = sg.RegressionLabels(labels) kernel = get_kernel(request, feat_train) - return (feat_train, labels, noise_level, kernel) + return (feat_train, labels, noise_level, kernel, domain) -def _process(feat_train, labels, noise_level, kernel): +def _process(feat_train, labels, noise_level, kernel, domain): n_dimensions = 1 likelihood = sg.GaussianLikelihood() @@ -95,7 +103,9 @@ def _process(feat_train, labels, noise_level, kernel): inf = sg.ExactInferenceMethod(SECF, feat_train, zmean, labels, likelihood) # location of unispaced predictions - x_test = np.array([np.linspace(-5, 5, feat_train.get_num_vectors())]) + x_test = np.array([np.linspace(domain['horizontal'][0], + domain['horizontal'][1], + feat_train.get_num_vectors())]) feat_test = sg.RealFeatures(x_test) gp = sg.GaussianProcessRegression(inf) diff --git a/demo/kernel_matrix.py b/demo/kernel_matrix.py index e4aac90..c55ec23 100644 --- a/demo/kernel_matrix.py +++ b/demo/kernel_matrix.py @@ -4,7 +4,7 @@ import modshogun as sg import numpy as np -import scipy as sp +import scipy as spxx import json def entrance(request): @@ -34,10 +34,8 @@ def entrance(request): 'template': {'type': 'coordinate-2dims', 'mouse_click_enabled': 'left', 'heatmap': { 'contour': True }, - 'coordinate_system': {'horizontal_axis': {'range':[-5.0, 5.0], - 'position': 'bottom'}, - 'vertical_axis': {'range':[-4.0, 4.0], - 'position': 'left'}}}, + 'coordinate_system': {'horizontal_axis': {'range':[-5.0, 5.0]}, + 'vertical_axis': {'range':[-4.0, 4.0]}}}, 'panels': [ { 'panel_name': 'arguments', @@ -45,10 +43,9 @@ def entrance(request): 'panel_property': arguments }, { - 'panel_name': 'toy_data_generator', + 'panel_name': 'toy_data', 'panel_label': 'Toy Data' - }, - ] + }]} return render_to_response("kernel_matrix/index.html", properties, context_instance = RequestContext(request)) @@ -59,8 +56,6 @@ def generate(request): arguments = _read_toy_data(request) result = _process(*arguments) except: - import traceback - print traceback.format_exc() raise Http404 return HttpResponse(json.dumps({'status': 'ok', @@ -70,7 +65,7 @@ def generate(request): def _read_toy_data(request): y_set = [] x_set = [] - data = json.loads(request.POST['mouse_left_click_point_set']) + data = json.loads(request.POST['point_set']) for pt in data: y_set.append(float(pt["y"])) x_set.append(float(pt["x"])) @@ -90,7 +85,7 @@ def _process(x1_set, x2_set, kernel_width, kernel_name, degree): feat_train = sg.RealFeatures(examples) # construct covariance function - if kernel_name == "LinearKernel": + if kernelname == "LinearKernel": kernel = sg.LinearKernel(feat_train, feat_train) elif kernel_name == "PolynomialKernel": kernel = sg.PolyKernel(feat_train, feat_train, degree, True) diff --git a/demo/svr.py b/demo/svr.py index f809299..e29b2bc 100644 --- a/demo/svr.py +++ b/demo/svr.py @@ -58,6 +58,10 @@ def entrance(request): 'panel_name': 'arguments', 'panel_label': 'Arguments', 'panel_property': arguments + }, + { + 'panel_name': 'toy_data', + 'panel_label': 'toy data', }]} return render_to_response("svr/index.html", properties, context_instance=RequestContext(request)) @@ -65,11 +69,12 @@ def point(request): try: arguments=_read_data(request) svm=_train_svr(*arguments) - x=np.linspace(0, 1, 100) + domain = json.loads(request.POST['axis_domain']) + x=np.linspace(domain['horizontal'][0], domain['horizontal'][1], 100) y=np.array(svm.apply(sg.RealFeatures(np.array([x]))).get_labels(), dtype=np.float64) line_dot = [] for i in xrange(len(x)): - line_dot.append({'x_value' : x[i], 'y_value' : y[i]}) + line_dot.append({'x' : x[i], 'y' : y[i]}) return HttpResponse(json.dumps(line_dot)) except: raise Http404 @@ -77,7 +82,7 @@ def point(request): def _read_data(request): labels = [] features = [] - data = json.loads(request.POST['mouse_left_click_point_set']) + data = json.loads(request.POST['point_set']) cost = float(request.POST['C']) tubeeps = float(request.POST['tube']) kernel_name = request.POST['kernel'] @@ -92,7 +97,7 @@ def _read_data(request): for i in xrange(num): examples[0,i] = features[i] - + lab = sg.RegressionLabels(labels) train = sg.RealFeatures(examples) kernel = get_kernel(request, train) diff --git a/shogun_demo/settings.py b/shogun_demo/settings.py index ad243d6..2b967d3 100644 --- a/shogun_demo/settings.py +++ b/shogun_demo/settings.py @@ -157,3 +157,7 @@ }, } } + +TEMPLATE_CONTEXT_PROCESSORS = ( + 'toy_data.importer.files', +) diff --git a/shogun_demo/urls.py b/shogun_demo/urls.py index b453faf..97448c9 100644 --- a/shogun_demo/urls.py +++ b/shogun_demo/urls.py @@ -25,10 +25,11 @@ url(r'^gp/entrance', 'demo.gp.entrance'), url(r'^gp/create_toy_data', 'demo.gp.create_toy_data'), url(r'^gp/load_toy_data', 'demo.gp.load_toy_data'), - url(r'^gp/train', 'demo.gp.train'), + url(r'^gp/TrainGP', 'demo.gp.train'), url(r'^kernel_matrix/entrance', 'demo.kernel_matrix.entrance'), url(r'^kernel_matrix/generate', 'demo.kernel_matrix.generate'), url(r'^toy_data/generator/generate', 'toy_data.generator.generate'), + url(r'^toy_data/importer/dump', 'toy_data.importer.dump'), # url(r'^shogun_demo/', include('shogun_demo.foo.urls')), diff --git a/static/js/editors/textfield.js b/static/js/editors/textfield.js deleted file mode 100644 index 70af62b..0000000 --- a/static/js/editors/textfield.js +++ /dev/null @@ -1,30 +0,0 @@ -/*tinyMCE.init({ -mode : "textareas", -theme : "simple" -});*/ - -tinyMCE.init({ - mode : "textareas", - theme : "advanced", - //content_css : "/appmedia/blog/style.css", - theme_advanced_toolbar_location : "top", - theme_advanced_toolbar_align : "left", - theme_advanced_buttons1 : "fullscreen,separator,preview,separator,bold,italic,underline,strikethrough,separator,bullist,numlist,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,separator,image,cleanup,help,separator,code", - theme_advanced_buttons2 : "", - theme_advanced_buttons3 : "", - theme_advanced_link_targets : "", - auto_cleanup_word : true, - plugins : "table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,zoom,flash,searchreplace,print,contextmenu,fullscreen", - plugin_insertdate_dateFormat : "%m/%d/%Y", - plugin_insertdate_timeFormat : "%H:%M:%S", - extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style],iframe[src|width|height|name|align]", - fullscreen_settings : { - theme_advanced_path_location : "top", - theme_advanced_buttons1 : "fullscreen,separator,preview,separator,cut,copy,paste,separator,undo,redo,separator,search,replace,separator,code,separator,cleanup,separator,bold,italic,underline,strikethrough,separator,forecolor,backcolor,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,help,code", - theme_advanced_buttons2 : "removeformat,styleselect,formatselect,fontselect,fontsizeselect,separator,bullist,numlist,outdent,indent,separator,link,unlink,anchor", - theme_advanced_buttons3 : "sub,sup,separator,image,insertdate,inserttime,separator,tablecontrols,separator,hr,advhr,visualaid,separator,charmap,emotions,iespell,flash,separator,print,code" - }, - width : "550", - height : "400", - verify_html : false -}); diff --git a/templates/button.js b/templates/button.js index 73b09b4..1449518 100644 --- a/templates/button.js +++ b/templates/button.js @@ -6,14 +6,11 @@ {% if button.button_type == 'json_up_down_load' %} function {{ button.button_name }}_action() { - request_data = { + var request_data = { csrfmiddlewaretoken: '{{ csrf_token }}', - {% if template.mouse_click_enabled == 'both' or template.mouse_click_enabled == 'left' %} - mouse_left_click_point_set: JSON.stringify(mouse_left_click_point_set), - {% if template.mouse_click_enabled == 'both' %} - mouse_right_click_point_set: JSON.stringify(mouse_right_click_point_set), - {% endif %} - {% endif %} + point_set: JSON.stringify(point_set), + axis_domain: JSON.stringify({'horizontal': x.domain(), + 'vertical': y.domain()}), {% for panel in panels %} {% if panel.panel_name == 'arguments' %} {% for argument in panel.panel_property %} diff --git a/templates/classification/binary.html b/templates/classification/binary.html index 5c9f94e..e3d843b 100644 --- a/templates/classification/binary.html +++ b/templates/classification/binary.html @@ -13,8 +13,8 @@ var z = data['z']; var domain = data['domain']; - var minimum = domain[0]; - var maximum = domain[1]; + var minimum = Math.floor(domain[0]); + var maximum = Math.ceil(domain[1]); var result = getContour(z, minimum, maximum, domain); var contour = result['contour']; @@ -50,11 +50,13 @@ }); svg.selectAll(".grid .tick.major line") .style("stroke", "grey"); + $('#legend').html("" + Math.floor(domain[0]) + "" + Math.ceil(domain[1]) + "") ; + } function clear_action() { - mouse_left_click_point_set = []; - mouse_right_click_point_set = []; + point_set = []; + point_set = []; svg.selectAll("circle").remove(); svg.selectAll(".heatmap").remove(); svg.selectAll(".grid .tick.major line") diff --git a/templates/clustering/index.html b/templates/clustering/index.html index a1a5354..efeaaa7 100644 --- a/templates/clustering/index.html +++ b/templates/clustering/index.html @@ -9,8 +9,8 @@ .duration(1000) .attr("r", function(d) {return x(0); }) .remove(); - mouse_left_click_point_set = []; - mouse_right_click_point_set = []; + point_set = []; + reset_axis(); } function cluster(data){ svg.selectAll(".line").remove(); @@ -33,17 +33,17 @@ circle.append("line") .attr("class","line") - .attr("x1", function(d) {return x(d.x+0.02);}) - .attr("y1", function(d) {return y(d.y+0.02);}) - .attr("x2", function(d) {return x(d.x-0.02);}) - .attr("y2", function(d) {return y(d.y-0.02);}) + .attr("x1", function(d) {return x(d.x)+5;}) + .attr("y1", function(d) {return y(d.y)+5;}) + .attr("x2", function(d) {return x(d.x)-5;}) + .attr("y2", function(d) {return y(d.y)-5;}) .style("stroke", "gray"); circle.append("line") .attr("class","line") - .attr("x1", function(d) {return x(d.x-0.02);}) - .attr("y1", function(d) {return y(d.y+0.02);}) - .attr("x2", function(d) {return x(d.x+0.02);}) - .attr("y2", function(d) {return y(d.y-0.02);}) + .attr("x1", function(d) {return x(d.x)-5;}) + .attr("y1", function(d) {return y(d.y)+5;}) + .attr("x2", function(d) {return x(d.x)+5;}) + .attr("y2", function(d) {return y(d.y)-5;}) .style("stroke", "gray"); $("#cluster").attr('disabled', false); } diff --git a/templates/coordinate_2dims.js b/templates/coordinate_2dims.js index c019225..3586d1c 100644 --- a/templates/coordinate_2dims.js +++ b/templates/coordinate_2dims.js @@ -4,7 +4,11 @@ var height = 610 - margin.top - margin.bottom; var x = d3.scale.linear().range( [0, width] ); var y = d3.scale.linear().range( [height, 0] ); - +var horizontal_max=1, horizontal_min=0; +var vertical_max=1, vertical_min=0; +var color = d3.scale.linear() + .domain([0,1]) + .range(["blue","red"]); {% if template.coordinate_system.horizontal_axis.range %} x.domain({{ template.coordinate_system.horizontal_axis.range }}).nice(); @@ -14,18 +18,14 @@ x.domain([0, 1]); {% if template.coordinate_system.vertical_axis.range %} y.domain({{ template.coordinate_system.vertical_axis.range }}).nice(); {% else %} -y.domain([0,0.8]); +y.domain([0, 1]); {% endif %} var xAxis = d3.svg.axis().scale(x).orient("bottom"); var yAxis = d3.svg.axis().scale(y).orient("left"); -function make_x_axis(){ - return d3.svg.axis().scale(x).orient("bottom").ticks(10); -} -function make_y_axis(){ - return d3.svg.axis().scale(y).orient("left").ticks(8); -} +var xGrid = d3.svg.axis().scale(x).orient("bottom"); +var yGrid = d3.svg.axis().scale(y).orient("left"); var canvas_div = d3.select(".span9").append("svg") .attr("width", width + margin.left + margin.right) @@ -36,28 +36,24 @@ var svg = canvas_div.append("g") svg.append("g") .attr("class", "grid") + .attr("id", "x_grid") .attr("transform", "translate(0, " + height + ")") - .call(make_x_axis() + .call(xGrid .tickSize(-height, 0, 0) .tickFormat("") ); svg.append("g") .attr("class", "grid") - .call(make_y_axis() + .attr("id", "y_grid") + .call(yGrid .tickSize(-width, 0, 0) .tickFormat("") ); svg.append("g") .attr("class", "axis") -{% if template.coordinate_system.horizontal_axis.position == 'bottom' %} + .attr("id", "x_axis") .attr("transform", "translate(0," + height + ")") -{% elif template.coordinate_system.horizontal_axis.position == 'top' %} - .attr("transform", "translate(0," + 0 + ")") -{% else %} - .attr("transform", "translate(0," + height/2 + ")") -{% endif %} - .call(xAxis) .append("text") .attr("class", "label") @@ -68,12 +64,7 @@ svg.append("g") svg.append("g") .attr("class", "axis") -{% if template.coordinate_system.vertical_axis.position == 'left' %} -{% elif template.coordinate_system.vertical_axis.position == 'right' %} - .attr("transform", "translate(" + width + ")") -{% else %} - .attr("transform", "translate(" + width/2 + ")") -{% endif %} + .attr("id", "y_axis") .call(yAxis) .append("text") .attr("class", "label") @@ -83,10 +74,31 @@ svg.append("g") .style("text-anchor", "end") .text("{{ template.coordinate_system.vertical_axis.label }}"); +function reset_axis(){ + horizontal_max = vertical_max = 1; + horizontal_min = vertical_min = 0; + x.domain([horizontal_min, horizontal_max]); + y.domain([vertical_min, vertical_max]); + var t = svg.transition().duration(750); + t.select("#x_axis").call(xAxis); + t.select("#y_axis").call(yAxis); + t.select("#x_grid").call(xGrid); + t.select("#y_grid").call(yGrid); +} + +var area_end = d3.svg.area() + .x(function(d) { return x(d.x);}) + .y0(function(d) { return y(d.range_lower);}) + .y1(function(d) { return y(d.range_upper);}); +var end = d3.svg.line() + .x(function (d) { return x(d.x); }) + .y(function (d) { return y(d.y); }) + .interpolate('basis'); +var start = d3.svg.line() + .x(function (d) {return x(d.x); }) + .y(function (d) {return y(0); }) + .interpolate('basis'); {% if template.heatmap %} -var color = d3.scale.linear() - .domain([0,1]) - .range(["blue","red"]); var heatmap_legend = document.createElement("div"); $('.span9').append(heatmap_legend); heatmap_legend.id = "legend"; diff --git a/templates/default.html b/templates/default.html index dd1c815..e860ec4 100644 --- a/templates/default.html +++ b/templates/default.html @@ -26,7 +26,7 @@
{% for panel in panels %}
- {% if panel.panel_name == 'toy_data_generator' %} + {% if panel.panel_name == 'toy_data' %} {% include "toy_data_generator_form.html" %} {% elif panel.panel_name == 'arguments' %} {% include "arguments_form.html" %} diff --git a/templates/gp/index.html b/templates/gp/index.html index a85e48b..b0e33eb 100644 --- a/templates/gp/index.html +++ b/templates/gp/index.html @@ -1,79 +1,37 @@ {% extends "default.html" %} {% block javascript %} {% endblock %} diff --git a/templates/heatmap.js b/templates/heatmap.js index c5ecd1f..7fc9f38 100644 --- a/templates/heatmap.js +++ b/templates/heatmap.js @@ -14,7 +14,7 @@ function getContour(z, minimum, maximum, dom) { var zs = d3.range(minimum, maximum, 0.1); var x = d3.scale.linear().range([0, width]).domain([1, z.length-2]); var y = d3.scale.linear().range([height, 0]).domain([1, z[0].length-2]); - var colour_scale = d3.scale.linear().domain(dom).range(["white, white"]); + var colour_scale = d3.scale.linear().domain(dom).range(["blue", "red"]); c.contour(z, 0, xs.length-1, 0, ys.length-1, xs, ys, zs.length, zs); diff --git a/templates/kernel_matrix/index.html b/templates/kernel_matrix/index.html index 4b7a5a6..0c0c679 100644 --- a/templates/kernel_matrix/index.html +++ b/templates/kernel_matrix/index.html @@ -22,26 +22,22 @@ var minimum = domain[0]; var maximum = domain[1]; - var result = getContour(z, minimum, maximum, domain); - var contour = result['contour']; - var x_scale = result['x_scale']; - var y_scale = result['y_scale']; - var color_scale = result['color_scale']; - svg.selectAll(".heatmap").remove(); - + + var dx = z[0].length; + var dy = z.length; + var index = 0; + svg.selectAll(".heatmap") - .data(contour.contourList()) + .data(z) .enter() - .append("path") - .style("fill", function(d) {return color_scale(d.level); }) - .style("stroke", "black") - .style("stroke-width", "1") + .append("rect") + .style("fill", function(d) {return color(z); }) .attr("class", "heatmap") - .attr("d", d3.svg.line() - .x(function(d){ return x_scale(d.x); }) - .y(function(d){ return y_scale(d.y); }) - ); + .attr("x", index % dx) + .attr("y", index ++ / dx) + .attr("width",1 ) + .attr("height",1 ); svg.selectAll(".grid") .each(function(d, i) { this.parentNode.appendChild(this); @@ -56,6 +52,7 @@ }); svg.selectAll(".grid .tick.major line") .style("stroke", "grey"); + $('#legend').html("" + Math.round({{ domain[0] }}) + "" + Math.round({{ domain[1] }}) + "") ; } {% endblock %} diff --git a/templates/mouse_click.js b/templates/mouse_click.js index b379d51..840800f 100644 --- a/templates/mouse_click.js +++ b/templates/mouse_click.js @@ -18,7 +18,7 @@ function mouse_move() { (d3.mouse(this)[1]-margin.top) + ")"); } {% if template.mouse_click_enabled == 'left' or template.mouse_click_enabled == 'both' %} -var mouse_left_click_point_set=[]; +var point_set=[]; function mouse_left_click(event) { if (d3.mouse(this)[0]-margin.left < 0 || d3.mouse(this)[1]-margin.top > height) return; @@ -30,17 +30,18 @@ function mouse_left_click(event) { point[1]-=margin.top; svg.append("circle") .attr("class", "dot") - .attr("r", 2.5) + .attr("r", 1.5) {%if template.mouse_click_enabled == 'both' %} .style("fill", "red") {% endif %} .attr("cx", point[0]) .attr("cy", point[1]); - mouse_left_click_point_set.push( {"x": x.invert(point[0]).toFixed(3),"y": y.invert(point[1]).toFixed(3)}); + point_set.push( {"x": x.invert(point[0]).toFixed(3), + "y": y.invert(point[1]).toFixed(3), + "label": +1}); } {% endif %} {% if template.mouse_click_enabled == 'both' %} -var mouse_right_click_point_set=[]; function mouse_right_click() { if (d3.mouse(this)[0]-margin.left < 0 || d3.mouse(this)[1]-margin.top > height) @@ -50,11 +51,13 @@ function mouse_right_click() point[1]-=margin.top; svg.append("circle") .attr("class", "dot") - .attr("r", 2.5) + .attr("r", 1.5) .attr("cx", point[0]) .attr("cy", point[1]) .style("fill", "blue"); - mouse_right_click_point_set.push( {"x": x.invert(point[0]).toFixed(3),"y": y.invert(point[1]).toFixed(3)}); + point_set.push( {"x": x.invert(point[0]).toFixed(3), + "y": y.invert(point[1]).toFixed(3), + "label": -1}); } d3.select("svg").node().oncontextmenu = function(){return false;}; //disable right click menu {% endif %} diff --git a/templates/svr/index.html b/templates/svr/index.html index 86b2165..d5b0fe5 100644 --- a/templates/svr/index.html +++ b/templates/svr/index.html @@ -6,22 +6,23 @@ svg.selectAll(".line") .remove(); svg.selectAll(".dot").remove(); - mouse_left_click_point_set = []; + point_set = []; + reset_axis(); } var line = d3.svg.line() - .x(function (d) { return x(d.x_value); }) - .y(function (d) { return y(d.y_value); }) + .x(function (d) { return x(d.x); }) + .y(function (d) { return y(d.y); }) .interpolate('basis'); var start = d3.svg.line() - .x(function (d) {return x(d.x_value); }) + .x(function (d) {return x(d.x); }) .y(function (d) {return y(0); }) .interpolate('basis'); function regress(data){ var json = $.parseJSON(data); json.forEach(function(d) { - d.x_value = +d.x_value; - d.y_value = +d.y_value; + d.x = +d.x; + d.y = +d.y; }); if (svg.selectAll(".line")[0].length == 0) curve = svg.append("path") diff --git a/templates/toy_data_generator_form.html b/templates/toy_data_generator_form.html index f3ce574..c22f0ef 100644 --- a/templates/toy_data_generator_form.html +++ b/templates/toy_data_generator_form.html @@ -1,5 +1,6 @@
+ Generator
@@ -9,6 +10,22 @@
+
+
+ Importer + + + + + + + +
+
diff --git a/toy_data/generator.py b/toy_data/generator.py index 028abd4..f4a229e 100644 --- a/toy_data/generator.py +++ b/toy_data/generator.py @@ -27,6 +27,7 @@ def generate(request): toy_data = [] for i in xrange(len(x)): - toy_data.append( { 'x': x[i], 'y': y[i]}) - + toy_data.append( { 'x': x[i], + 'y': y[i], + 'label': '1'}) return HttpResponse(json.dumps(toy_data)) diff --git a/toy_data/importer.py b/toy_data/importer.py new file mode 100644 index 0000000..7c7ab89 --- /dev/null +++ b/toy_data/importer.py @@ -0,0 +1,30 @@ +from django.http import HttpResponse, Http404 +from django.conf import settings +import h5py, json + +TOY_DATA_DIR = 'data/' +TOY_DATA_SET = { + 'australian': 'australian.libsvm.h5', +} + +def files(request): + return {'data_sets': TOY_DATA_SET.keys} + +def dump(request): + try: + data_set = request.POST['data_set'] + feature1 = int(request.POST['feature1']) + feature2 = int(request.POST['feature2']) + f = h5py.File(TOY_DATA_DIR + + TOY_DATA_SET[data_set], 'r') + features = f["/data/data"] + label = f["/data/label"] + except: + raise Http404 + + toy_data = [] + for i in xrange(len(features[0])): + toy_data.append( {'x': features[feature1][i], + 'y': features[feature2][i], + 'label': label[i][0]}) + return HttpResponse(json.dumps(toy_data))