Skip to content

Commit

Permalink
1. make k argument available to change for tapkee/words demo. 2.littl…
Browse files Browse the repository at this point in the history
…e fixes
  • Loading branch information
Zhengyang Liu committed Aug 5, 2013
1 parent c155c7f commit 9509e80
Show file tree
Hide file tree
Showing 8 changed files with 152 additions and 65 deletions.
2 changes: 1 addition & 1 deletion common/data.py
Expand Up @@ -14,4 +14,4 @@ def serve(request, archive_name, file_name):
content = z.read(file_name)
return HttpResponse(content,mimetype="image/png")
except:
return json.dumps({'status': 'exception'})
return HttpResponse(json.dumps({'status': 'exception'}))
2 changes: 1 addition & 1 deletion data
Submodule data updated 2 files
+500 −0 tapkee/mml.txt
+677 −0 tapkee/words.dat
10 changes: 10 additions & 0 deletions demo/__init__.py
@@ -1,3 +1,13 @@
from Ai import Ai
ai = Ai()
ai.load_classifier()

filename = "data/tapkee/words.dat"
words = []
with open(filename) as f:
words.extend([str.rstrip() for str in f.readlines()])

filename = "data/tapkee/mml.txt"
strings = []
with open(filename) as f:
strings = [s.rstrip() for s in f.readlines()]
61 changes: 61 additions & 0 deletions demo/tapkee.py
Expand Up @@ -2,6 +2,7 @@
from django.template import RequestContext
from django.shortcuts import render_to_response

import difflib
import demo
import modshogun as sg
import numpy as np
Expand All @@ -19,6 +20,13 @@ def entrance(request):
'promoters_embedding',
'faces_embedding'],
},
{
'argument_type': 'decimal',
'argument_name': 'k',
'argument_label': 'k',
'argument_default': '20'

},
{
'argument_type': 'button-group',
'argument_items': [{'button_name': 'show'},
Expand All @@ -38,3 +46,56 @@ def entrance(request):
return render_to_response("tapkee/index.html",
properties,
context_instance = RequestContext(request))

def words(request):
try:
k = int(request.POST['k'])
except:
return HttpResponse(json.dumps({"status": "illegal k"}))

N = len(demo.words)
if k<5 or k>N:
raise ValueError("illegal k")

converter = sg.KernelLocallyLinearEmbedding()
converter.set_k(k)
converter.set_target_dim(2)
converter.parallel.set_num_threads(1)


dist_matrix = np.zeros([N,N])
for i in xrange(N):
for j in xrange(i,N):
s = difflib.SequenceMatcher(None,demo.words[i],demo.words[j])
dist_matrix[i,j] = s.ratio()
dist_matrix = 0.5*(dist_matrix+dist_matrix.T)
word_kernel = sg.CustomKernel(dist_matrix)

embedding = converter.embed_kernel(word_kernel).get_feature_matrix()

data = {}

data['data'] = [{'string':demo.words[i],
'cx':embedding[0,i],
'cy':embedding[1,i]} for i in xrange(N)]

return HttpResponse(json.dumps(data))


def promoters(request):
features = sg.StringCharFeatures(demo.strings,sg.DNA)
kernel = sg.WeightedDegreeStringKernel(10)
distance = sg.KernelDistance(1.0,kernel)
distance.init(features,features)
converter = sg.MultidimensionalScaling()
converter.set_target_dim(2)
embedding = converter.embed_distance(distance).get_feature_matrix()

data = {}
N = len(demo.strings)
data['data'] = [{'string':demo.strings[i][:20],
'gc': float(demo.strings[i].count('G')+demo.strings[i].count('C'))/len(demo.strings[i]),
'cx':embedding[0,i],
'cy':embedding[1,i]} for i in xrange(N)]
return HttpResponse(json.dumps(data))

2 changes: 2 additions & 0 deletions shogun_demo/urls.py
Expand Up @@ -31,6 +31,8 @@
url(r'^ocr/entrance', 'demo.ocr.entrance'),
url(r'^ocr/recognize', 'demo.ocr.recognize'),
url(r'^tapkee/entrance', 'demo.tapkee.entrance'),
url(r'^tapkee/words.json', 'demo.tapkee.words'),
url(r'^tapkee/promoters.json', 'demo.tapkee.promoters'),
url(r'^toy_data/generator/generate', 'toy_data.generator.generate'),
url(r'^toy_data/importer/dump', 'toy_data.importer.dump'),
url(r'^data/(\w+)/(.+)', 'common.data.serve'),
Expand Down
1 change: 0 additions & 1 deletion static/data/tapkee/promoters.json

This file was deleted.

1 change: 0 additions & 1 deletion static/data/tapkee/words.json

This file was deleted.

138 changes: 77 additions & 61 deletions templates/tapkee/index.html
Expand Up @@ -13,20 +13,36 @@
MIT_CBCL_faces_embedding_action();
break;
case "words_embedding":
words_embedding_action();
json_query('words.json', words_embedding_action);
break;
case "MNIST_digits_embedding":
MNIST_digits_embedding_action();
break;
case "promoters_embedding":
promoters_embedding_action();
json_query('promoters.json', promoters_embedding_action);
break;
case 'faces_embedding':
faces_embedding_action();
break;
}
};

function json_query(url, success){
$.ajax(
{
url: url,
type: 'POST',
dataType: "text",
data: {'csrfmiddlewaretoken': '{{ csrf_token }}',
'k': document.arguments.k.value},
beforeSend: function(){$("#show").attr('disabled', true);},
success: success,
error: function(){alert("Error!");$("#show").attr('disabled', false);},
});
}



function MIT_CBCL_faces_embedding_action(){
d3.json("/static/data/tapkee/cbcl.json", function(json) {
var color = d3.scale.category10();
Expand Down Expand Up @@ -87,70 +103,70 @@
});
});
}
function words_embedding_action(){
d3.json("/static/data/tapkee/words.json", function(json) {
var color = d3.scale.category10();
var x_extent = d3.extent(json.data, function(d) { return d.cx });
var y_extent = d3.extent(json.data, function(d) { return d.cy });
x.domain(x_extent);
y.domain(y_extent);
var node = svg.selectAll(".dot")
.data(json.data)
.enter().append("svg:circle")
.attr("class", "dot")
.attr("cx", function(d) { return x(d.cx); })
.attr("cy", function(d) { return y(d.cy); })
.attr("r", function(d) { return 3 })
.style("stroke", "black")
.style("fill", function(d,i) { return color(0) });

$('.dot').tipsy({
gravity: 'w',
html: true,
title: function() {
var d = this.__data__;
string = d.string;
return string;
}
});
function words_embedding_action(json){
var json = $.parseJSON(json);
var color = d3.scale.category10();
var x_extent = d3.extent(json.data, function(d) { return d.cx });
var y_extent = d3.extent(json.data, function(d) { return d.cy });
x.domain(x_extent);
y.domain(y_extent);
var node = svg.selectAll(".dot")
.data(json.data)
.enter().append("svg:circle")
.attr("class", "dot")
.attr("cx", function(d) { return x(d.cx); })
.attr("cy", function(d) { return y(d.cy); })
.attr("r", function(d) { return 3 })
.style("stroke", "black")
.style("fill", function(d,i) { return color(0) });

$('.dot').tipsy({
gravity: 'w',
html: true,
title: function() {
var d = this.__data__;
string = d.string;
return string;
}
});
$("#show").attr('disabled', false);
}
function promoters_embedding_action(){
d3.json("/static/data/tapkee/promoters.json", function(json) {
var color = d3.scale.category10();
var letters = ['A', 'C', 'T', 'G'];

var x_extent = d3.extent(json.data, function(d) { return d.cx });
var y_extent = d3.extent(json.data, function(d) { return d.cy });
var gc_extent = d3.extent(json.data, function(d) { return d.gc });
x.domain(x_extent);
y.domain(y_extent);
var gc_scale = d3.scale.linear().range([0,1])
.domain(gc_extent);
var node = svg.selectAll("circle")
.data(json.data)
.enter().append("svg:circle")
.attr("class", "dot")
.attr("cx", function(d) { return x(d.cx) })
.attr("cy", function(d) { return y(d.cy) })
.attr("r", function(d) { return 5 })
.style("stroke", "black")
.style("fill", function(d,i) { return d3.hsl(200,0.5,gc_scale(d.gc)) });
function promoters_embedding_action(data){
var json = $.parseJSON(data);
var color = d3.scale.category10();
var letters = ['A', 'C', 'T', 'G'];
var x_extent = d3.extent(json.data, function(d) { return d.cx });
var y_extent = d3.extent(json.data, function(d) { return d.cy });
var gc_extent = d3.extent(json.data, function(d) { return d.gc });
x.domain(x_extent);
y.domain(y_extent);
var gc_scale = d3.scale.linear().range([0,1])
.domain(gc_extent);
var node = svg.selectAll("circle")
.data(json.data)
.enter().append("svg:circle")
.attr("class", "dot")
.attr("cx", function(d) { return x(d.cx) })
.attr("cy", function(d) { return y(d.cy) })
.attr("r", function(d) { return 5 })
.style("stroke", "black")
.style("fill", function(d,i) { return d3.hsl(200,0.5,gc_scale(d.gc)) });

$('.dot').tipsy({
gravity: 'w',
html: true,
title: function() {
var d = this.__data__;
string = d.string;
var text = string.substring(0,6) + " ... " + string.substring(string.length-6);
for (var i=0; i<4; i++) {
text = text.replace(new RegExp(letters[i],"g"),'<span style="color: ' + color(i) + ';">' + letters[i] + '</span>');
}
return text;
$('.dot').tipsy({
gravity: 'w',
html: true,
title: function() {
var d = this.__data__;
string = d.string;
var text = string.substring(0,6) + " ... " + string.substring(string.length-6);
for (var i=0; i<4; i++) {
text = text.replace(new RegExp(letters[i],"g"),'<span style="color: ' + color(i) + ';">' + letters[i] + '</span>');
}
});
return text;
}
});
$("#show").attr('disabled', false);
}
function faces_embedding_action(){
d3.json("/static/data/tapkee/faces.json", function(json) {
Expand Down

0 comments on commit 9509e80

Please sign in to comment.