Commit 9f9ec792e0621aa1ca01b242f0ed32527ad15d5b
1 parent
bf11cf83
Exists in
master
and in
2 other branches
improved tag cloud collision system as well as calculation code
Showing
8 changed files
with
37 additions
and
40 deletions
Show diff stats
analytics/static/.sass-cache/01cecb7b42e56765f6ed49ed3c70281ebdc742c7/general.sassc
No preview for this file type
analytics/static/analytics/general.css
| @@ -47,8 +47,7 @@ | @@ -47,8 +47,7 @@ | ||
| 47 | color: #ffffff; } | 47 | color: #ffffff; } |
| 48 | 48 | ||
| 49 | .tag-name { | 49 | .tag-name { |
| 50 | - color: #ffffff; | ||
| 51 | - font-size: 10px; } | 50 | + color: #ffffff; } |
| 52 | 51 | ||
| 53 | #left-data-selector { | 52 | #left-data-selector { |
| 54 | background: linear-gradient(#0e8999, #6bf0ce); | 53 | background: linear-gradient(#0e8999, #6bf0ce); |
analytics/static/analytics/general.css.map
| 1 | { | 1 | { |
| 2 | "version": 3, | 2 | "version": 3, |
| 3 | -"mappings": "AAEA,YAAY;EACR,MAAM,EAAE,iBAAiB;EACzB,aAAa,EAAE,IAAI;EACnB,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,IAAI;EACd,KAAK,EAAE,IAAI;EACX,gBAAgB,EAAE,OAAO;;AAE7B,sBAAsB;EAClB,MAAM,EAAE,GAAG;EACX,OAAO,EAAE,KAAK;EACd,yBAAE;IACE,KAAK,EAdC,OAAO;EAgBjB,yBAAE;IACE,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,GAAG;IACV,aAAa,EAAE,GAAG;IAElB,4BAAE;MACE,YAAY,EAAE,EAAE;MAChB,KAAK,EAAE,GAAG;MACV,KAAK,EAAE,KAAK;MACZ,SAAS,EAAE,IAAI;MACf,gBAAgB,EAAE,OAAO;MACzB,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,MAAM;MAClB,aAAa,EAAE,IAAI;MACnB,MAAM,EAAE,IAAI;IAGhB,qCAAW;MACP,gBAAgB,EAAE,OAAO;MACzB,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,MAAM;MAClB,aAAa,EAAE,IAAI;;AAM/B,sBAAsB;EAClB,UAAU,EAAE,2CAA2C;EACvD,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,GAAG;EAChB,UAAU,EAAE,IAAI;EAEhB,yBAAE;IACE,WAAW,EAAE,EAAE;;AAGvB,UAAU;EACN,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,OAAO;;AAKlB,SAAS;EACL,KAAK,EAAE,OAAO;EACd,SAAS,EAAE,IAAI;;AAGnB,mBAAmB;EACf,UAAU,EAAE,iCAAmC;EAC/C,UAAU,EAAE,EAAE;EACd,WAAW,EAAE,EAAE;EACf,cAAc,EAAE,EAAE;;AAEtB,MAAM;EACF,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,IAAI;EACX,SAAE;IACE,KAAK,EA9EC,OAAO;;AAgFrB,SAAS;EACL,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,KAAK;EACZ,YAAY,EAAE,GAAG;EACjB,gBAAgB,EAAE,OAAO;EACzB,UAAU,EAAE,GAAG;EACf,aAAa,EAAE,iBAAiB;EAChC,WAAC;IACG,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;;AAInB,qBAAO;EACH,UAAU,EAAE,MAAM;;AAE1B,aAAa;EACT,UAAU,EAAE,iCAAkC;EAC9C,KAAK,EAAE,KAAK;EACZ,aAAa,EAAE,IAAI;EACnB,OAAO,EAAE,GAAG;;AAEhB,mBAAmB;EACf,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,GAAG;EACV,WAAW,EAAE,EAAE;EACf,UAAU,EAAE,EAAE;EACd,QAAQ,EAAE,QAAQ;EAClB,YAAY,EAAE,CAAC;EACf,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,iBAAiB;EACzB,UAAU,EAAE,sDAAsD;EAElE,sBAAE;IACE,YAAY,EAAE,EAAE;;AAExB,qDAAqD;EACjD,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,CAAC;EACR,QAAQ,EAAE,QAAQ;EAClB,cAAc,EAAE,IAAI;;AAGxB,0BAA0B;EACtB,YAAY,EAAE,IAAI;EAClB,WAAW,EAAE,IAAI;EACjB,YAAY,EAAE,sBAAsB;EACpC,mBAAmB,EAAE,OAAO;;AAEhC,yBAAyB;EACrB,gBAAgB,EAAE,OAAO", | 3 | +"mappings": "AAEA,YAAY;EACR,MAAM,EAAE,iBAAiB;EACzB,aAAa,EAAE,IAAI;EACnB,OAAO,EAAE,IAAI;EACb,QAAQ,EAAE,IAAI;EACd,KAAK,EAAE,IAAI;EACX,gBAAgB,EAAE,OAAO;;AAE7B,sBAAsB;EAClB,MAAM,EAAE,GAAG;EACX,OAAO,EAAE,KAAK;EACd,yBAAE;IACE,KAAK,EAdC,OAAO;EAgBjB,yBAAE;IACE,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,WAAW;IACpB,KAAK,EAAE,GAAG;IACV,aAAa,EAAE,GAAG;IAElB,4BAAE;MACE,YAAY,EAAE,EAAE;MAChB,KAAK,EAAE,GAAG;MACV,KAAK,EAAE,KAAK;MACZ,SAAS,EAAE,IAAI;MACf,gBAAgB,EAAE,OAAO;MACzB,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,MAAM;MAClB,aAAa,EAAE,IAAI;MACnB,MAAM,EAAE,IAAI;IAGhB,qCAAW;MACP,gBAAgB,EAAE,OAAO;MACzB,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,MAAM;MAClB,aAAa,EAAE,IAAI;;AAM/B,sBAAsB;EAClB,UAAU,EAAE,2CAA2C;EACvD,MAAM,EAAE,IAAI;EACZ,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,GAAG;EAChB,UAAU,EAAE,IAAI;EAEhB,yBAAE;IACE,WAAW,EAAE,EAAE;;AAGvB,UAAU;EACN,aAAa,EAAE,IAAI;EACnB,KAAK,EAAE,OAAO;;AAKlB,SAAS;EACL,KAAK,EAAE,OAAO;;AAGlB,mBAAmB;EACf,UAAU,EAAE,iCAAmC;EAC/C,UAAU,EAAE,EAAE;EACd,WAAW,EAAE,EAAE;EACf,cAAc,EAAE,EAAE;;AAEtB,MAAM;EACF,KAAK,EAAE,GAAG;EACV,KAAK,EAAE,IAAI;EACX,SAAE;IACE,KAAK,EA7EC,OAAO;;AA+ErB,SAAS;EACL,KAAK,EAAE,GAAG;EACV,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,KAAK;EACZ,YAAY,EAAE,GAAG;EACjB,gBAAgB,EAAE,OAAO;EACzB,UAAU,EAAE,GAAG;EACf,aAAa,EAAE,iBAAiB;EAChC,WAAC;IACG,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;;AAInB,qBAAO;EACH,UAAU,EAAE,MAAM;;AAE1B,aAAa;EACT,UAAU,EAAE,iCAAkC;EAC9C,KAAK,EAAE,KAAK;EACZ,aAAa,EAAE,IAAI;EACnB,OAAO,EAAE,GAAG;;AAEhB,mBAAmB;EACf,gBAAgB,EAAE,OAAO;EACzB,KAAK,EAAE,GAAG;EACV,WAAW,EAAE,EAAE;EACf,UAAU,EAAE,EAAE;EACd,QAAQ,EAAE,QAAQ;EAClB,YAAY,EAAE,CAAC;EACf,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,iBAAiB;EACzB,UAAU,EAAE,sDAAsD;EAElE,sBAAE;IACE,YAAY,EAAE,EAAE;;AAExB,qDAAqD;EACjD,MAAM,EAAE,IAAI;EACZ,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,iBAAiB;EACzB,OAAO,EAAE,GAAG;EACZ,MAAM,EAAE,CAAC;EACT,KAAK,EAAE,CAAC;EACR,QAAQ,EAAE,QAAQ;EAClB,cAAc,EAAE,IAAI;;AAGxB,0BAA0B;EACtB,YAAY,EAAE,IAAI;EAClB,WAAW,EAAE,IAAI;EACjB,YAAY,EAAE,sBAAsB;EACpC,mBAAmB,EAAE,OAAO;;AAEhC,yBAAyB;EACrB,gBAAgB,EAAE,OAAO", |
| 4 | "sources": ["general.sass"], | 4 | "sources": ["general.sass"], |
| 5 | "names": [], | 5 | "names": [], |
| 6 | "file": "general.css" | 6 | "file": "general.css" |
analytics/static/analytics/general.sass
analytics/static/analytics/js/behavior.js
| 1 | 1 | ||
| 2 | + | ||
| 3 | + | ||
| 2 | $(document).ready(function(){ | 4 | $(document).ready(function(){ |
| 3 | selectors_options.init(); | 5 | selectors_options.init(); |
| 4 | 6 | ||
| @@ -6,12 +8,14 @@ $(document).ready(function(){ | @@ -6,12 +8,14 @@ $(document).ready(function(){ | ||
| 6 | 8 | ||
| 7 | $('#month_selector').change(function(){ | 9 | $('#month_selector').change(function(){ |
| 8 | $.get('/analytics/amount_active_users_per_day', {month: $(this).val() }).done(function(data){ | 10 | $.get('/analytics/amount_active_users_per_day', {month: $(this).val() }).done(function(data){ |
| 9 | - console.log(data); | ||
| 10 | charts.month_heatmap(data); | 11 | charts.month_heatmap(data); |
| 11 | 12 | ||
| 12 | }); | 13 | }); |
| 13 | }); | 14 | }); |
| 14 | 15 | ||
| 16 | + | ||
| 17 | + $('#datetimepicker1').datetimepicker(); | ||
| 18 | + | ||
| 15 | 19 | ||
| 16 | }); | 20 | }); |
| 17 | 21 |
analytics/static/analytics/js/charts.js
| @@ -348,27 +348,7 @@ var charts = { | @@ -348,27 +348,7 @@ var charts = { | ||
| 348 | var width = 800; | 348 | var width = 800; |
| 349 | var height = 300; | 349 | var height = 300; |
| 350 | 350 | ||
| 351 | - function min(){ | ||
| 352 | - minimum = 100000000000; | ||
| 353 | - for(var i = 0; i < dataset.length; i++){ | ||
| 354 | - if (dataset[i]['count'] < min){ | ||
| 355 | - minimum = dataset[i]['count']; | ||
| 356 | - } | ||
| 357 | - } | ||
| 358 | - | ||
| 359 | - return minimum | ||
| 360 | - } | ||
| 361 | - | ||
| 362 | - function max(){ | ||
| 363 | - maximum = 0; | ||
| 364 | - for(var i = 0; i < dataset.length; i++){ | ||
| 365 | - if (dataset[i]['count'] > max){ | ||
| 366 | - maximum = dataset[i]['count']; | ||
| 367 | - } | ||
| 368 | - } | ||
| 369 | - | ||
| 370 | - return maximum | ||
| 371 | - } | 351 | + |
| 372 | 352 | ||
| 373 | 353 | ||
| 374 | var container_div = d3.select("#most-used-tags-body"); | 354 | var container_div = d3.select("#most-used-tags-body"); |
| @@ -378,8 +358,8 @@ var charts = { | @@ -378,8 +358,8 @@ var charts = { | ||
| 378 | .style("background","#ddf8e7") | 358 | .style("background","#ddf8e7") |
| 379 | .append('g') | 359 | .append('g') |
| 380 | .attr("transform", "translate(0,0)") | 360 | .attr("transform", "translate(0,0)") |
| 381 | - .style("width", width) | ||
| 382 | - .attr("height", height); | 361 | + .attr("width", "100%") |
| 362 | + .attr("height", height - 60); | ||
| 383 | 363 | ||
| 384 | 364 | ||
| 385 | var color = d3.scaleLinear() | 365 | var color = d3.scaleLinear() |
| @@ -392,7 +372,8 @@ var charts = { | @@ -392,7 +372,8 @@ var charts = { | ||
| 392 | return Math.floor(Math.random() * (max - min)) + min; | 372 | return Math.floor(Math.random() * (max - min)) + min; |
| 393 | } | 373 | } |
| 394 | 374 | ||
| 395 | - var xScale = d3.scaleSqrt().domain([min(), max()]).range([10,80]); | 375 | + var xScale = d3.scaleSqrt().domain([d3.min(dataset, function(d){ return d['count']}), |
| 376 | + d3.max(dataset, function(d){ return d.count; })]).range([100,200]); | ||
| 396 | var tag_cloud = svg.selectAll('.tag-cloud-div') | 377 | var tag_cloud = svg.selectAll('.tag-cloud-div') |
| 397 | .data(dataset) | 378 | .data(dataset) |
| 398 | .enter() | 379 | .enter() |
| @@ -420,23 +401,29 @@ var charts = { | @@ -420,23 +401,29 @@ var charts = { | ||
| 420 | .text(function(d){ | 401 | .text(function(d){ |
| 421 | return d['name']; | 402 | return d['name']; |
| 422 | }) | 403 | }) |
| 404 | + .attr("text-anchor", "middle") | ||
| 423 | .attr("x", function(d){ | 405 | .attr("x", function(d){ |
| 424 | - return xScale(d['count'])*0.2; | 406 | + return xScale(d['count'])*1.2/2; |
| 425 | }) | 407 | }) |
| 426 | .attr("y", function(d){ | 408 | .attr("y", function(d){ |
| 427 | - return xScale(d["count"])*0.2; | 409 | + return xScale(d["count"])*0.4/2; |
| 428 | }) | 410 | }) |
| 429 | .attr("class", "tag-name") | 411 | .attr("class", "tag-name") |
| 430 | - .attr("fill", "#ffffff"); | 412 | + .attr("fill", "#ffffff") |
| 413 | + .style("font-size", function(d){ | ||
| 414 | + return xScale(d["count"])*0.1 + "px"; | ||
| 415 | + }); | ||
| 431 | 416 | ||
| 432 | 417 | ||
| 433 | var simulation = d3.forceSimulation() | 418 | var simulation = d3.forceSimulation() |
| 434 | .force("x", d3.forceX(width/2).strength(0.05)) | 419 | .force("x", d3.forceX(width/2).strength(0.05)) |
| 435 | .force("y", d3.forceY(height/2).strength(0.05)) | 420 | .force("y", d3.forceY(height/2).strength(0.05)) |
| 436 | - .force("collide", d3.forceCollide(function(d){ | ||
| 437 | - return xScale(d['count'])*0.4; | ||
| 438 | - })); | ||
| 439 | - | 421 | + .force("charge", d3.forceManyBody().strength(-120).distanceMax(300) |
| 422 | + .distanceMin(0)); | ||
| 423 | + /* | ||
| 424 | + .force("collide", d3.forceCollide(function(d){ | ||
| 425 | + return xScale(d['count'])*0.3; | ||
| 426 | + }))*/ | ||
| 440 | //simulation | 427 | //simulation |
| 441 | simulation.nodes(dataset) | 428 | simulation.nodes(dataset) |
| 442 | .on('tick', ticked); //so all data points are attached to it | 429 | .on('tick', ticked); //so all data points are attached to it |
analytics/templates/analytics/general.html
| @@ -7,6 +7,7 @@ | @@ -7,6 +7,7 @@ | ||
| 7 | {% endblock style %} | 7 | {% endblock style %} |
| 8 | 8 | ||
| 9 | {% block javascript %} | 9 | {% block javascript %} |
| 10 | + | ||
| 10 | <script type="text/javascript" src="{% static "analytics/js/charts.js" %}"></script> | 11 | <script type="text/javascript" src="{% static "analytics/js/charts.js" %}"></script> |
| 11 | <script type="text/javascript" src=" {% static "analytics/js/behavior.js" %} "></script> | 12 | <script type="text/javascript" src=" {% static "analytics/js/behavior.js" %} "></script> |
| 12 | {% endblock javascript %} | 13 | {% endblock javascript %} |
| @@ -102,9 +103,19 @@ | @@ -102,9 +103,19 @@ | ||
| 102 | 103 | ||
| 103 | </select> | 104 | </select> |
| 104 | </div> | 105 | </div> |
| 106 | + | ||
| 105 | <div id="right-chart-body"> | 107 | <div id="right-chart-body"> |
| 106 | 108 | ||
| 107 | </div> | 109 | </div> |
| 110 | + | ||
| 111 | + <div class="form-group"> | ||
| 112 | + <div class='input-group date' id='datetimepicker1'> | ||
| 113 | + <input type='text' class="form-control" /> | ||
| 114 | + <span class="input-group-addon"> | ||
| 115 | + <span class="glyphicon glyphicon-calendar"></span> | ||
| 116 | + </span> | ||
| 117 | + </div> | ||
| 118 | + </div> | ||
| 108 | </div> | 119 | </div> |
| 109 | </section> | 120 | </section> |
| 110 | 121 |
analytics/views.py
| @@ -57,14 +57,13 @@ def most_used_tags(request): | @@ -57,14 +57,13 @@ def most_used_tags(request): | ||
| 57 | data[tag.name]['count'] = resources_count | 57 | data[tag.name]['count'] = resources_count |
| 58 | 58 | ||
| 59 | data = sorted(data.values(), key = lambda x: x['count'], reverse=True ) | 59 | data = sorted(data.values(), key = lambda x: x['count'], reverse=True ) |
| 60 | - data = data[:30] #get top 30 tags | 60 | + data = data[:15] #get top 30 tags |
| 61 | return JsonResponse(data, safe= False) | 61 | return JsonResponse(data, safe= False) |
| 62 | 62 | ||
| 63 | 63 | ||
| 64 | def most_active_users_in_a_month(request): | 64 | def most_active_users_in_a_month(request): |
| 65 | params = request.GET | 65 | params = request.GET |
| 66 | days = get_days_of_the_month(params['month']) | 66 | days = get_days_of_the_month(params['month']) |
| 67 | - print(days) | ||
| 68 | data = {} | 67 | data = {} |
| 69 | mappings = {_('January'): 1, _('February'): 2, _('March'): 3, _('April'): 4, _('May'): 5, _('June'): 6, _('July'): 7 | 68 | mappings = {_('January'): 1, _('February'): 2, _('March'): 3, _('April'): 4, _('May'): 5, _('June'): 6, _('July'): 7 |
| 70 | , _('August'): 8, _('September'): 9, _('October'): 10, _('November'): 11, _('December'): 12} | 69 | , _('August'): 8, _('September'): 9, _('October'): 10, _('November'): 11, _('December'): 12} |
| @@ -164,8 +163,6 @@ def get_days_of_the_month(month): | @@ -164,8 +163,6 @@ def get_days_of_the_month(month): | ||
| 164 | 163 | ||
| 165 | #get current year | 164 | #get current year |
| 166 | year = date.today().year | 165 | year = date.today().year |
| 167 | - print(year) | ||
| 168 | - print(month) | ||
| 169 | mappings = {_('January'): 1, _('February'): 2, _('March'): 3, _('April'): 4, _('May'): 5, _('June'): 6, _('July'): 7 | 166 | mappings = {_('January'): 1, _('February'): 2, _('March'): 3, _('April'): 4, _('May'): 5, _('June'): 6, _('July'): 7 |
| 170 | , _('August'): 8, _('September'): 9, _('October'): 10, _('November'): 11, _('December'): 12} | 167 | , _('August'): 8, _('September'): 9, _('October'): 10, _('November'): 11, _('December'): 12} |
| 171 | 168 |