Skip to content

Instantly share code, notes, and snippets.

@Fil
Last active December 30, 2016 09:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Fil/0e6a0b22eb3a192f2dfa3111a6128d9f to your computer and use it in GitHub Desktop.
Save Fil/0e6a0b22eb3a192f2dfa3111a6128d9f to your computer and use it in GitHub Desktop.
t-SNE site map [UNLISTED]
license: mit

Working on Visionscarto.net sitemap.

From tf/idf on articles keywords, compute a cosine similarity, feed that to t-SNE, k-means coloring, extraction of main term(s) per k-means center.

Original work by Philippe Rivière for Visionscarto.net. Comments and variants very welcome!

Forked from Fil's block: t-SNE with Levenshtein distances

<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v4.min.js"></script>
<style>
body {
margin: 0;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
font-family: monospace;
}
</style>
</head>
<body>
<script>
const width = 960,
height = 500,
margin = { top: 20, bottom: 20, left: 120, right: 120 },
scalepop = d3.scalePow().exponent(1/2.5).domain([1, 10000]).range([0, 15]),
scalepop2 = d3.scaleLog().domain([1, 1000]).range([0, 20]),
scalecountry = d3.scaleOrdinal(d3.merge([d3.schemeCategory10, d3.schemeCategory20c])),
centerx = d3.scaleLinear()
.range([margin.left, width - margin.right]),
centery = d3.scaleLinear()
.range([margin.top, height - margin.bottom]);
const voronoi = d3.voronoi();
let tfidf;
d3.json('plan.json', function (articles) {
const data = articles
.map((d, i) => {
return {
lon: Math.random(),
lat: Math.random(),
name: d['title'].replace(/&#\d+;/g, '’'),
props: d3.set(d3.merge([ [ "trad" + (d.trad || d.id) ], d.authors, d.tags ])).values(),
//props: d['title'].substring(0,1),
r: scalepop(+d['views']) + scalepop2(+d['pop']+1),
p: scalepop2(+d['popularity']),
color: scalecountry(''+d.authors)
};
})
.slice(0,400);
/*
const canvas = d3.select("body").append("canvas")
.attr("width", width)
.attr("height", height);
*/
const svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
const lines = svg.append('g');
const garticles = svg.append('g');
const gmeans = svg.append('g');
// pos is the array of positions that will be updated by the tsne worker
// start with the geographic coordinates as is (plate-carrée)
// random or [0,0] is fine too
let pos = data.map(d => [Math.random(), Math.random()]);
var K = 20,
centers = d3.range(K).map(i => [0,0]),
colorscale = d3.scaleOrdinal(d3.schemeCategory20c);
let links = [];
const forcetsne = d3.forceSimulation(
data.map(d => (d.x = width / 2, d.y = height / 2, d))
)
//.stop()
.alphaDecay(0.001)
.alpha(0.1)
.force('tsne', function (alpha) {
centerx.domain(d3.extent(pos.map(d => d[0])));
centery.domain(d3.extent(pos.map(d => d[1])));
data.forEach((d, i) => {
d.x += alpha * (centerx(pos[i][0]) - d.x);
d.y += alpha * (centery(pos[i][1]) - d.y);
});
})
.force('collide', d3.forceCollide().radius(d => 1 * (1.5 + d.r)))
.force('kmeans', function(){
// a central point to re-init empty groups
var m = [d3.mean(centers.map(d => d[0] || 0)),
d3.mean(centers.map(d => d[1] || 0))];
// the order is important: move the centers before re-making the groups
// so that the centers follow the general movement and keep "their"
// points, instead of having points pass through them
// 1. move K-centers towards the barycenter of their group
centers.forEach((c,i) => {
c[0] = d3.mean(pos.filter((d,j) => data[j].group == i).map(d => d[0])) || m[0];
c[1] = d3.mean(pos.filter((d,j) => data[j].group == i).map(d => d[1])) || m[1];
});
// 2. group each point according to its closest K-center
data.forEach((d,i) => {
d.group = d3.scan(centers.map(c => {
var dx = pos[i][0] - c[0],
dy = pos[i][1] - c[1];
return (dx*dx + dy*dy);
}));
});
}
)
.on('tick', function () {
// drawcanvas(canvas, data);
drawsvg(garticles, data);
drawlines(lines, links);
drawgmeans(gmeans, centers);
});
function drawcanvas(canvas, nodes) {
let context = canvas.node().getContext("2d");
context.clearRect(0, 0, width, width);
for (var i = 0, n = nodes.length; i < n; ++i) {
var node = nodes[i];
context.beginPath();
context.moveTo(node.x, node.y);
context.arc(node.x, node.y, node.r, 0, 2 * Math.PI);
context.lineWidth = 0.5;
context.fillStyle = colorscale(node.group);
context.fill();
}
}
function mainterms(i) {
if (!tfidf) return;
var articles = data.filter(d => d.group === i), v = null;
if (articles.length ===0) return '';
var tags = d3.merge(articles.map(d => d.props))
.filter(d => {
return !d.match(/^trad/) && !d.match(/^[A-Z]/);
});
var freq = {}, max = 0;
tags.forEach(d => {
freq[d] = (freq[d]||0) + tfidf[d];
if (freq[d] > max) {
v = d;
max = freq[d];
}
});
return v;
}
function drawgmeans(svg, centers){
const means = svg.selectAll('text')
.data(centers);
var enter = means.enter()
.append('text')
.attr('stroke', 'black')
.attr('text-anchor', 'middle');
means.exit().remove();
means.merge(enter)
.attr('x', d => centerx(d[0]))
.attr('y', d => centery(d[1]))
.text((d,i) => mainterms(i));
}
function drawlines(svg, links){
const lines = svg.selectAll('line')
.data(links, l => l.index);
var enter = lines.enter()
.append('line');
lines.exit().remove();
lines.merge(enter)
.attr('x1', d => d.target.x)
.attr('x2', d => d.source.x)
.attr('y1', d => d.target.y)
.attr('y2', d => d.source.y)
.attr('stroke', 'black');
}
function drawsvg(svg, nodes) {
const g = svg.selectAll('g.city')
.data(nodes);
var enter = g.enter().append('g').classed('city', true);
enter.append('circle')
.attr('r', d => d.r)
//.attr('fill', d => d.color)
.append('title')
.text(d => d.name);
enter
.filter(d => d.r > 7)
.append('text')
.attr('fill', 'white')
.style('font-size', d => d.r > 9 ? '12px' : '9px')
.attr('text-anchor', 'middle')
.attr('dominant-baseline', 'middle')
.attr('pointer-events', 'none')
.text(d => d.name.replace(/^(L([ea] |’)|À |Un )/, '').substring(0,d.r/4));
g.merge(enter)
.attr('fill', d => /*d.color ||*/ colorscale(d.group))
.attr('transform', d => `translate(${d.x},${d.y})`);
}
d3.queue()
.defer(d3.text, 'tsne.js')
.defer(d3.text, 'https://unpkg.com/d3-geo')
.defer(d3.text, 'worker.js')
.awaitAll(function (err, scripts) {
const worker = new Worker(
window.URL.createObjectURL(
new Blob(scripts, {
type: "text/javascript"
})
)
);
worker.postMessage({
maxIter: 10,
dim: 2,
perplexity: 100.0,
data: data
});
worker.onmessage = function (e) {
if (e.data.log) console.log.apply(this, e.data.log);
if (e.data.tfidf) tfidf = e.data.tfidf;
//if (isNaN(e.data.cost)) console.log('isNaN');
if (e.data.pos) {
pos = e.data.pos;
let sc = d3.max(pos.map(d => d[0]))
let diagram = voronoi(pos.map((d,i) => (d.index = i, d[0]/=sc, d[1]/=sc, d)));
links = urquhart(diagram, (a,b) =>
(a[0]-b[0])*(a[0]-b[0]) + (a[1]-b[1])*(a[1]-b[1])
)
.map(d => {
d.source = data[d.source.index];
d.target = data[d.target.index];
return d;
});
/*
forcetsne.force('links', forcelinks.links(links.map(d => {
d.source = data[d.source.index];
d.target = data[d.target.index];
return d;
})));
*/
}
if (e.data.done && e.data.done < 10000 && e.data.cost > 1e-2) {
worker.postMessage({
maxIter: e.data.done + 10,
});
}
//console.log('pos', pos);
};
});
});
function urquhart(diagram, distance) {
var urquhart = d3.map();
diagram.links()
.forEach(function (link) {
var v = d3.extent([link.source.index, link.target.index]);
urquhart.set(v, link);
});
urquhart._remove = [];
diagram.triangles()
.forEach(function (t) {
var l = 0,
length = 0,
i = -1,
v;
for (var j = 0; j < 3; j++) {
var a = t[j],
b = t[(j + 1) % 3];
v = d3.extent([a.index, b.index]);
if (!distance) {
length = (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
} else {
length = distance(a, b);
}
if (length >= l) {
l = length;
i = v;
}
}
urquhart._remove.push(i);
});
urquhart._remove.forEach(function (i) {
if (urquhart.has(i)) urquhart.remove(i);
});
return urquhart.values();
}
</script>
</body>
[
{
"id": 190,
"title": "Qui fabrique les armes, et qui les ach\u00e8te\u00a0?",
"url": "qui-fabrique-les-armes-et-qui-les-achete",
"date": "2015-11-18T18:48:16Z",
"rub": "7",
"trad": 190,
"pop": 63,
"views": "34282",
"authors": ["Philippe Rekacewicz"],
"affdate": "18 novembre 2015",
"tags": ["armement","conflits","guerre","russie","etats-unis","chine","france","europe","ressources pedagogiques"]
},
{
"id": 94,
"title": "Index du site",
"url": "sitemap",
"date": "2014-04-01T06:34:00Z",
"rub": "1",
"pop": 63,
"views": "17503",
"authors": [],
"affdate": "1er avril 2014",
"tags": []
},
{
"id": 9,
"title": "Mourir aux portes de l&#8217;Europe",
"url": "mourir-aux-portes-de-l-europe",
"date": "2014-04-27T22:17:50Z",
"rub": "3",
"trad": 9,
"pop": 9,
"views": "11272",
"authors": ["Philippe Rekacewicz"],
"affdate": "28 avril 2014",
"tags": ["migrations","asile","frontieres","mer mediterranee","mediterranee","mourir en mer"]
},
{
"id": 100,
"title": "Cartographies traverses, des espaces o\u00f9 l&#8217;on ne finit jamais d&#8217;arriver",
"url": "cartographies-traverses",
"date": "2015-02-27T10:40:16Z",
"rub": "3",
"trad": 100,
"pop": 18,
"views": "9562",
"authors": ["Sarah Mekdjian", "Anne-Laure Amilhat Szary"],
"affdate": "27 f\u00e9vrier 2015",
"tags": ["cartographie","cartographie sensible","cartographie participative","migrations","frontieres"]
},
{
"id": 125,
"title": "Terrorisme, insurrection ou r\u00e9sistance\u00a0: cartographier et nommer \u00ab\u00a0l&#8217;internationale djihadiste\u00a0\u00bb",
"url": "djihadisme-international",
"date": "2015-06-08T04:00:00Z",
"rub": "3",
"trad": 125,
"pop": 6,
"views": "8849",
"authors": ["Philippe Rekacewicz"],
"affdate": "8 juin 2015",
"tags": ["djihadisme","etat islamique","daesh","ei","is","isis","al-qaida","insurrection","resistance","terrorisme"]
},
{
"id": 83,
"title": "Les nouvelles couleurs de Port-au-Prince",
"url": "couleurs-de-port-au-prince",
"date": "2014-10-24T09:00:00Z",
"rub": "3",
"pop": 3,
"views": "8210",
"authors": ["Romain Cruse", "Pierre Morel"],
"affdate": "24 octobre 2014",
"tags": ["haiti","richesse","pauvrete","caraibes"]
},
{
"id": 240,
"title": "Voyager sans visa",
"url": "voyager-sans-visa",
"date": "2016-02-22T11:13:37Z",
"rub": "3",
"pop": 5,
"views": "8197",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "22 f\u00e9vrier 2016",
"tags": ["frontieres","migrations","voyage","tourisme","passeport","visas","utopie","geopolitique","passeport","nation","visas","libre circulation","murs","cartographie","visualisation","frontieres","migrations","geopolitique"]
},
{
"id": 107,
"title": "Viols en temps de guerre, le silence et l&#8217;impunit\u00e9",
"url": "viols-en-temps-de-guerre",
"date": "2015-08-04T08:02:09Z",
"rub": "3",
"pop": 9,
"views": "7648",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "4 ao\u00fbt 2015",
"tags": ["viols","culture du viol","droit des femmes","guerre","conventions internationales","conflits armes","femmes","filles"]
},
{
"id": 223,
"title": "Les cinquante cartes de Charles-Joseph Minard ",
"url": "charles-joseph-minard-cinquante-cartes",
"date": "2016-03-03T06:53:27Z",
"rub": "3",
"pop": 6,
"views": "6872",
"authors": ["Sandra Rendgen"],
"affdate": "3 mars 2016",
"tags": ["visualisation","cartographie","statistique","graphique","semiologie graphique","precurseurs","charles-joseph minard"]
},
{
"id": 46,
"title": "Le transport maritime et les rivages de la mer",
"url": "transport-maritime-rivages-de-la-mer",
"date": "2014-09-01T13:41:03Z",
"rub": "3",
"pop": 8,
"views": "6839",
"authors": ["Jean-Marie Miossec"],
"affdate": "1er septembre 2014",
"tags": ["transport","transport maritime","mer","oceans","europe","asie","conteneurs"]
},
{
"id": 98,
"title": "Bob Marley entre deux mondes",
"url": "bob-marley-entre-deux-mondes",
"date": "2015-02-05T23:22:20Z",
"rub": "3",
"pop": 15,
"views": "6514",
"authors": ["Romain Cruse", "Romain Philippon"],
"affdate": "6 f\u00e9vrier 2015",
"tags": ["musique","reggae","jamaique","caraibes"]
},
{
"id": 202,
"title": "Sahel\u00a0: la guerre des sables, par dessus les fronti\u00e8res",
"url": "sahel-la-guerre-des-sables",
"date": "2016-01-22T11:37:05Z",
"rub": "3",
"pop": 5,
"views": "6354",
"authors": ["Philippe Leymarie"],
"affdate": "22 janvier 2016",
"tags": ["sahel","mali","niger","guerres","conflits","afrique occidentale","france","armee","nigeria","boko haram"]
},
{
"id": 1,
"title": "\u00c0 propos de Visionscarto",
"url": "a-propos",
"date": "2014-04-01T08:50:28Z",
"rub": "1",
"pop": 4,
"views": "6259",
"authors": [],
"affdate": "1er avril 2014",
"tags": []
},
{
"id": 274,
"title": "Lieux de pouvoir \u00e0 Paris",
"url": "lieux-de-pouvoir-a-paris",
"date": "2016-04-23T18:44:40Z",
"rub": "7",
"pop": 3,
"views": "5665",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "23 avril 2016",
"tags": ["paris","france","territoire","oligarchie"]
},
{
"id": 78,
"title": "Accaparement de terres\u00a0: la Chine, l&#8217;Inde et les \u00c9tats-Unis aussi...",
"url": "accaparement-chine-inde-etats-unis",
"date": "2014-10-06T09:35:35Z",
"rub": "3",
"pop": 6,
"views": "5655",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "6 octobre 2014",
"tags": ["accaparement","agriculture","chine","inde","etats-unis","land grabbing"]
},
{
"id": 129,
"title": "Dans la r\u00e9gion de l&#8217;Evros, un mur inutile sur la fronti\u00e8re gr\u00e9co-turque",
"url": "evros-mur-inutile",
"date": "2015-06-25T06:09:40Z",
"rub": "3",
"pop": 21,
"views": "5492",
"authors": ["Cristina Del Biaggio", "Alberto Campi"],
"affdate": "25 juin 2015",
"tags": ["migrations","asile","migrants","refugies","grece","turquie","evros","murs","frontieres","barriere frontaliere"]
},
{
"id": 79,
"title": "G\u00e9ographie de l&#8217;enfance",
"url": "geographie-de-l-enfance",
"date": "2014-10-10T14:25:36Z",
"rub": "3",
"pop": 14,
"views": "5475",
"authors": ["Philippe Rekacewicz"],
"affdate": "10 octobre 2014",
"tags": ["enfance","travail","sante","inegalites","developpement","anamorphose","enfants","demographie","travail des enfants","prix nobel"]
},
{
"id": 161,
"title": "\u00ab\u00a0Dessine-moi une \u00eele\u00a0!\u00a0\u00bb",
"url": "dessine-moi-une-ile",
"date": "2015-10-02T18:50:46Z",
"rub": "3",
"pop": 10,
"views": "5475",
"authors": ["Fran\u00e7ois Arnal"],
"affdate": "2 octobre 2015",
"tags": ["imaginaire","geographie","representations","paysage","cartographie","carte mentale","insularite","ileite"]
},
{
"id": 148,
"title": "\u00c0 Ath\u00e8nes, (sur)vivre dans la terreur",
"url": "a-athenes-survivre",
"date": "2015-08-31T06:06:29Z",
"rub": "3",
"pop": 9,
"views": "5162",
"authors": ["Cristina Del Biaggio", "Alberto Campi"],
"affdate": "31 ao\u00fbt 2015",
"tags": ["migrations","asile","migrants","refugies","grece","segregation","racisme","extreme droite","athenes","petrou ralli"]
},
{
"id": 97,
"title": "No\u00ebl \u00e0 Bethl\u00e9em, au pied du mur",
"url": "noel-a-bethleem",
"date": "2014-12-24T07:18:58Z",
"rub": "3",
"pop": 29,
"views": "4668",
"authors": ["Elisabeth Vallet"],
"affdate": "24 d\u00e9cembre 2014",
"tags": ["murs","frontieres","palestine","israel","occupation","bethleem","barriere frontaliere"]
},
{
"id": 82,
"title": "Le Daghestan, l\u2019islam et les soviets",
"url": "le-daghestan-l-islam-et-les-soviets",
"date": "2014-10-28T09:35:59Z",
"rub": "3",
"pop": 22,
"views": "4650",
"authors": ["Fr\u00e9d\u00e9rique Longuet-Marx"],
"affdate": "28 octobre 2014",
"tags": ["daghestan","caucase","russie","caucase-nord","islam","documentaire","soufisme","salafisme"]
},
{
"id": 147,
"title": "L&#8217;arc des r\u00e9fugi\u00e9s en 2014",
"url": "l-arc-des-refugies-en-2014",
"date": "2015-07-11T10:16:18Z",
"rub": "7",
"trad": 147,
"pop": 3,
"views": "4556",
"authors": ["Philippe Rekacewicz"],
"affdate": "11 juillet 2015",
"tags": ["refugies","droits humains","discrimination","asile","guerre","conflits"]
},
{
"id": 276,
"title": "Le sol, ce bien commun o\u00f9 la vie prend\u00a0racine",
"url": "le-sol-ce-bien-commun",
"date": "2016-06-01T12:53:42Z",
"rub": "3",
"pop": 14,
"views": "4306",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "1er juin 2016",
"tags": ["sols","agriculture","degradations","pollutions"]
},
{
"id": 155,
"title": "Traverser la fronti\u00e8re et arriver en Bulgarie\u00a0: paroles de r\u00e9fugi\u00e9s",
"url": "refugies-bulgarie",
"date": "2015-09-21T09:49:28Z",
"rub": "3",
"pop": 7,
"views": "4087",
"authors": ["Stefania Summermatter"],
"affdate": "21 septembre 2015",
"tags": ["refugies","migrations","bulgarie","turquie","syrie","migrants","asile"]
},
{
"id": 195,
"title": "Irak\u00a0: apr\u00e8s les feux de la guerre, les cancers",
"url": "irak-apres-les-feux-de-la-guerre",
"date": "2015-12-05T16:04:39Z",
"rub": "3",
"pop": 3,
"views": "4042",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "5 d\u00e9cembre 2015",
"tags": ["irak","sante","cancer","natalite","guerre","armes","pollution"]
},
{
"id": 191,
"title": "Who is selling arms, and who buys them?",
"url": "who-is-selling-arms-and-who-buys",
"date": "2015-11-24T09:08:58Z",
"rub": "7",
"trad": 190,
"pop": 3,
"views": "3792",
"authors": ["Philippe Rekacewicz"],
"affdate": "24 November 2015",
"tags": ["armament","war","conflicts","russia","united states","france","china","russia"]
},
{
"id": 163,
"title": "\u2026 et l&#8217;Arctique deviendra un oc\u00e9an",
"url": "et-l-arctique-deviendra-un-ocean",
"date": "2015-10-11T15:47:57Z",
"rub": "3",
"pop": 5,
"views": "3640",
"authors": ["Miyase Christensen", "Anika E Nilsson", "Nina Wormbs\u2028"],
"affdate": "11 octobre 2015",
"tags": ["arctique","climat","mer","ocean arctique","anthropocene","giec","frontieres"]
},
{
"id": 87,
"title": "N\u00e8gres, Noirs... Du bon usage des mots en cartographie",
"url": "negres-noirs-du-bon-usage-des-mots",
"date": "2014-11-19T09:53:59Z",
"rub": "3",
"pop": 3,
"views": "3631",
"authors": ["Philippe Rekacewicz", "Peggy Pierrot"],
"affdate": "19 novembre 2014",
"tags": ["racisme","terminologie","histoire","negritude","cartographie","geographie","colonisation"]
},
{
"id": 40,
"title": "L&#8217;Europe \u00e0 l&#8217;assaut des terres agricoles mondiales",
"url": "accaparement-des-terres",
"date": "2014-08-06T13:02:01Z",
"rub": "3",
"pop": 3,
"views": "3590",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "6 ao\u00fbt 2014",
"tags": ["agriculture","faim","alimentation","terres","accaparement","land grabbing"]
},
{
"id": 22,
"title": "La M\u00e9diterran\u00e9e, plus loin que l&#8217;horizon",
"url": "la-mediterranee-plus-loin",
"date": "2014-05-06T13:28:15Z",
"rub": "3",
"pop": 13,
"views": "3581",
"authors": ["Philippe Rekacewicz"],
"affdate": "6 mai 2014",
"tags": ["espace mediterraneen","tourisme","migrations","geopolitique","maghreb","machrek","mediterranee","migrations","tourisme","concurrences geopolitiques"]
},
{
"id": 32,
"title": "Disneylandisation des horreurs de\u00a0la\u00a0guerre",
"url": "disneylandisation-guerre",
"date": "2014-05-13T07:23:53Z",
"rub": "3",
"pop": 5,
"views": "3532",
"authors": ["Patrick Naef"],
"affdate": "13 mai 2014",
"tags": ["guerre","conflits","images","lieux de memoire","tourisme"]
},
{
"id": 102,
"title": "\u00ab\u00a0Once Upon a Thirst\u00a0\u00bb ou l&#8217;ass\u00e8chement de l&#8217;Ouest am\u00e9ricain",
"url": "once-upon-a-thirst",
"date": "2015-03-09T08:38:40Z",
"rub": "3",
"pop": 4,
"views": "3488",
"authors": ["Marc-Andr\u00e9 Laferri\u00e8re"],
"affdate": "9 mars 2015",
"tags": ["eau","secheresse","californie","etats-unis","dust-bowl"]
},
{
"id": 160,
"title": "Tableau g\u00e9ophotographique du Brozoufland",
"url": "geographie-du-brozoufland",
"date": "2015-10-02T21:11:28Z",
"rub": "3",
"pop": 3,
"views": "3334",
"authors": ["Alberto Campi", "Ariane Bourbaki"],
"affdate": "2 octobre 2015",
"tags": ["asthenie","barriere","bunker","ligne blanche","losange","geographie","geophotographie","paysages"]
},
{
"id": 103,
"title": "Cartographie sensible, \u00e9motions et imaginaire ",
"url": "cartographie-sensible",
"date": "2011-09-19T20:15:00Z",
"rub": "3",
"pop": 8,
"views": "3287",
"authors": ["\u00c9lise Olmedo"],
"affdate": "19 septembre 2011",
"tags": ["organisation de l espace","habitat","marrakech","maroc","cartographie","cartographie sensible"]
},
{
"id": 259,
"title": "Les laiss\u00e9s-pour-compte des cartes d\u00e9mographiques",
"url": "laisses-pour-compte-cartes-demographiques",
"date": "2016-04-14T07:01:39Z",
"rub": "3",
"trad": 259,
"pop": 3,
"views": "3264",
"authors": ["Joshua Tauberer"],
"affdate": "14 avril 2016",
"tags": ["methodologie","cartographie","biais","elections","demographie","visualisation","population"]
},
{
"id": 162,
"title": "Conqu\u00eate coloniale et concentration de terres",
"url": "conquete-et-concentration",
"date": "2015-10-05T04:00:00Z",
"rub": "3",
"pop": 3,
"views": "3138",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "5 octobre 2015",
"tags": ["accaparement","terres","land grabbing","foncier","amerique latine","afrique","aquarelle","femmes"]
},
{
"id": 194,
"title": "\u00c0 Born\u00e9o, des drones cartographiques contre l\u2019accaparement des terres",
"url": "a-borneo-des-drones-cartographiques",
"date": "2015-12-01T14:31:49Z",
"rub": "3",
"pop": 7,
"views": "3127",
"authors": ["Patrick Meier", "Aude Vidal"],
"affdate": "1er d\u00e9cembre 2015",
"tags": ["borneo","indonesie","malaisie","drones","contre-cartographie","resistance","cartographie radicale","cartographie participative","accaparement","terres"]
},
{
"id": 169,
"title": "Prix des acc\u00e8s internet dans le monde",
"url": "prix-internet",
"date": "2015-12-01T09:05:00Z",
"rub": "7",
"trad": 198,
"pop": 8,
"views": "3120",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "1er d\u00e9cembre 2015",
"tags": ["internet","communication","informatique","inegalites","acces","tic"]
},
{
"id": 345,
"title": "Comment les codes postaux ont masqu\u00e9 la crise sanitaire de Flint",
"url": "flint-codes-postaux",
"date": "2016-11-15T17:08:21Z",
"rub": "3",
"trad": 345,
"pop": 7,
"views": "3113",
"authors": ["Richard Casey Sadler"],
"affdate": "15 novembre 2016",
"tags": ["methodologie","cartographie","biais","sante"]
},
{
"id": 113,
"title": "En Inde, des enfants veulent transformer les bidonvilles par la cartographie",
"url": "inde-cartographie-enfants",
"date": "2015-04-23T14:11:54Z",
"rub": "3",
"trad": 106,
"pop": 13,
"views": "3110",
"authors": ["Sam Sturgis"],
"affdate": "23 avril 2015",
"tags": ["cartographie participative","cartographie sensible","inde","bidonvilles","enfance"]
},
{
"id": 95,
"title": "Les derni\u00e8res colonies",
"url": "les-dernieres-colonies",
"date": "2014-12-01T07:36:40Z",
"rub": "3",
"pop": 3,
"views": "3101",
"authors": ["Philippe Rekacewicz", "Philippe Leymarie"],
"affdate": "1er d\u00e9cembre 2014",
"tags": ["decolonisation","colonisation","territoires","territoires non autonomes","pacifique","caraibe","paradis fiscaux"]
},
{
"id": 60,
"title": "Balkan Road",
"url": "balkan-road",
"date": "2014-09-16T16:23:35Z",
"rub": "3",
"trad": 60,
"pop": 5,
"views": "3067",
"authors": ["Cristina Del Biaggio", "Alberto Campi"],
"affdate": "16 septembre 2014",
"tags": ["migrations","asile","balkans","ex-yougoslavie","refugies","ex-yougoslavie","serbie","italie","trieste","tutin","obrenovac","bogovadja"]
},
{
"id": 99,
"title": "\u00c0 H\u00e9bron, la \u00ab\u00a0Freedom Machine\u00a0\u00bb",
"url": "a-hebron-la-freedom-machine",
"date": "2015-02-25T13:44:11Z",
"rub": "3",
"pop": 3,
"views": "3058",
"authors": ["Chlo\u00e9 Yvroux"],
"affdate": "25 f\u00e9vrier 2015",
"tags": ["hebron","palestine","israel","occupation","colonisation","resistance"]
},
{
"id": 166,
"title": "Les hackers de La Paz s\u2019organisent pour lib\u00e9rer internet",
"url": "hackers-de-bolivie",
"date": "2015-10-20T08:37:08Z",
"rub": "3",
"trad": 166,
"pop": 3,
"views": "3048",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "20 octobre 2015",
"tags": ["internet","bolivie","hackers","reseau","mesh","cccp"]
},
{
"id": 167,
"title": "Sur les rails, entre la Serbie et la Hongrie",
"url": "sur-les-rails",
"date": "2015-10-14T05:19:20Z",
"rub": "3",
"pop": 3,
"views": "3024",
"authors": ["Aron Rossman-Kiss"],
"affdate": "14 octobre 2015",
"tags": ["frontieres","hongrie","serbie","refugies","asile","migrations","mur"]
},
{
"id": 170,
"title": "Los hackers de La Paz se organizan para liberar internet",
"url": "los-hackers-de-la-paz-se-organizan",
"date": "2015-10-26T22:12:39Z",
"rub": "3",
"trad": 166,
"pop": 3,
"views": "3004",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "26 de octubre de 2015",
"tags": ["internet","bolivia","hackers","red","mesh","cccp"]
},
{
"id": 332,
"title": "Le grand march\u00e9 aux terres",
"url": "le-grand-marche-aux-terres",
"date": "2016-10-28T11:14:01Z",
"rub": "3",
"pop": 14,
"views": "2957",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "28 octobre 2016",
"tags": ["accaparements","foncier","agriculture","agroindustrie","resistance","terres"]
},
{
"id": 151,
"title": "En Suisse, pieds nus contre rangers",
"url": "en-suisse-pieds-nus-contre-rangers",
"date": "2015-09-07T13:47:02Z",
"rub": "3",
"pop": 3,
"views": "2950",
"authors": ["Cristina Del Biaggio"],
"affdate": "7 septembre 2015",
"tags": ["suisse","udc","extreme-droite","migrations","asile","refugies","marche","hongrie","solidarite","pieds nus","suisse"]
},
{
"id": 226,
"title": "L&#8217;Atlas d\u2019Alex Rad\u00f3, cartographe, l\u00e9niniste et ma\u00eetre-espion",
"url": "alex-rado-cartographe-et-espion",
"date": "2016-02-05T14:00:12Z",
"rub": "3",
"pop": 3,
"views": "2900",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "5 f\u00e9vrier 2016",
"tags": ["histoire","visualisation","atlas","precurseurs"]
},
{
"id": 91,
"title": "Cartographier le chol\u00e9ra",
"url": "cartographier-le-cholera",
"date": "2014-11-18T11:44:43Z",
"rub": "3",
"trad": 91,
"pop": 3,
"views": "2872",
"authors": ["Sonia Shah", "Dan McCarey"],
"affdate": "18 novembre 2014",
"tags": ["cartographie narrative","cholera","sante","epidemies","inegalites","histoire","haiti","geocodage"]
},
{
"id": 286,
"title": "Ode aux projections de d3.js",
"url": "ode-aux-projections-de-d3-js",
"date": "2016-06-06T07:25:18Z",
"rub": "3",
"pop": 3,
"views": "2850",
"authors": ["Ian Johnson"],
"affdate": "6 juin 2016",
"tags": ["projections","code","d3.js","exemples","methodologie","cartographie"]
},
{
"id": 343,
"title": "Visualiser les r\u00e9seaux\u2026 sans\u00a0paniquer",
"url": "visualiser-les-reseaux",
"date": "2016-11-28T12:18:42Z",
"rub": "3",
"pop": 62,
"views": "2850",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "28 novembre 2016",
"tags": ["internet","sante","migrations","representation","methodologie"]
},
{
"id": 75,
"title": "Patrick Geddes, le g\u00e9ographe anarchiste qui inventait la nation \u00e9cossaise",
"url": "patrick-geddes-geographe-anarchiste-ecossais",
"date": "2014-09-15T19:45:05Z",
"rub": "3",
"pop": 5,
"views": "2800",
"authors": ["Federico Ferretti"],
"affdate": "15 septembre 2014",
"tags": ["ecosse","invention geographique de la nation","nation","precurseurs","anarchisme","nationalisme","utopie","universalisme"]
},
{
"id": 105,
"title": "De l&#8217;Asie centrale \u00e0 la Syrie\u00a0: le djihad comme alternative au d\u00e9sespoir",
"url": "asie-centrale-syrie",
"date": "2015-03-23T08:32:59Z",
"rub": "3",
"pop": 3,
"views": "2749",
"authors": ["C\u00e9lia Mascr\u00e9"],
"affdate": "23 mars 2015",
"tags": ["asie centrale","ferghana","djihadisme","oei","organisation de l etat islamique"]
},
{
"id": 111,
"title": "Vol de terres en \u00c9thiopie",
"url": "vol-de-terres-en-ethiopie",
"date": "2015-06-19T05:57:56Z",
"rub": "3",
"pop": 7,
"views": "2732",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "19 juin 2015",
"tags": ["accaparement","terres","agriculture familiale","ethiopie","land grabbing","deplacement de populations"]
},
{
"id": 101,
"title": "L&#8217;\u00e9cole, lieu(x) de vie\u00a0: une exploration cartographique du quotidien scolaire",
"url": "ecole-lieux-de-vie",
"date": "2015-03-05T15:03:00Z",
"rub": "3",
"pop": 10,
"views": "2560",
"authors": ["Muriel Monnard"],
"affdate": "5 mars 2015",
"tags": ["cartographie participative","ecole","visualisation","representation","imaginaire","cartographie","cartographie sensible"]
},
{
"id": 282,
"title": "Les cartes magiques de\u00a0Jerry\u00a0Gretzinger",
"url": "cartes-magiques-de-jerry-gretzinger",
"date": "2016-05-21T09:53:46Z",
"rub": "3",
"pop": 6,
"views": "2553",
"authors": ["Philippe Rekacewicz"],
"affdate": "21 mai 2016",
"tags": ["cartographie sensible","imaginaire","cartographie emotionnelle","semiologie"]
},
{
"id": 284,
"title": "G\u00e9opolitique africaine alternative",
"url": "geopolitique-africaine-alternative",
"date": "2016-09-02T10:54:20Z",
"rub": "3",
"pop": 12,
"views": "2481",
"authors": ["Philippe Rekacewicz", "Achille Mbembe"],
"affdate": "2 septembre 2016",
"tags": ["afrique","frontieres","colonisation","colonialisme","vision","perception","geopolitique","methodologie"]
},
{
"id": 208,
"title": "Djihadisme, conflits et interventions \u00e9trang\u00e8res au Sahel ",
"url": "sahel-djihadisme-interventions-etrangeres",
"date": "2016-01-22T11:58:18Z",
"rub": "7",
"trad": 208,
"pop": 3,
"views": "2459",
"authors": ["Philippe Rekacewicz"],
"affdate": "22 janvier 2016",
"tags": ["djihadisme","conflits","guerre","sahel","afrique","maghreb","france","etats-unis","ressources pedagogiques"]
},
{
"id": 178,
"title": "Moyen-Orient\u00a0: g\u00e9ographie du chaos",
"url": "moyen-orient-geographie-du-chaos",
"date": "2015-11-03T00:00:40Z",
"rub": "7",
"trad": 178,
"pop": 5,
"views": "2456",
"authors": ["Philippe Rekacewicz"],
"affdate": "3 novembre 2015",
"tags": ["moyen-orient","proche-orient","syrie","irak","golfe","israel","palestine","yemen","afrique de l est","corne","conflits","guerre"]
},
{
"id": 347,
"title": "La ville de l&#8217;avenir sous le crayon des coll\u00e9giens",
"url": "la-ville-de-l-avenir",
"date": "2016-12-01T11:19:17Z",
"rub": "3",
"pop": 33,
"views": "2446",
"authors": ["Manon Boisseau, L\u00e9opold Marchand, Thomas Brault, Claire Kjerulf, Aela Guet, Agathe Pr\u00e9bet, Ama\u00eblle Kelfoun, Elsa Masson, \u00c9lise Cocault, Lisa Paimpar\u00e9"],
"affdate": "1er d\u00e9cembre 2016",
"tags": ["imaginaire","cartographie","narration","futurisme","utopies"]
},
{
"id": 66,
"title": "Les soci\u00e9t\u00e9s vieillissantes changent la face du monde",
"url": "societes-vieillissantes",
"date": "2014-09-09T14:01:17Z",
"rub": "3",
"pop": 3,
"views": "2391",
"authors": ["Richard Lefran\u00e7ois"],
"affdate": "9 septembre 2014",
"tags": ["demographie","vieillissement","vieux","population"]
},
{
"id": 6,
"title": "Contact",
"url": "contact",
"date": "2014-04-01T11:21:01Z",
"rub": "1",
"pop": 3,
"views": "2389",
"authors": [],
"affdate": "1er avril 2014",
"tags": []
},
{
"id": 11,
"title": "La guerre et le droit, inventaire cartographique",
"url": "la-guerre-et-le-droit",
"date": "2014-04-27T22:12:53Z",
"rub": "3",
"pop": 3,
"views": "2350",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "28 avril 2014",
"tags": ["guerre","conflits","diplomatie","accords internationaux","droit de la guerre","armements","armes","guerre","nations unies","justice"]
},
{
"id": 76,
"title": "Quel futur pour le trafic maritime\u00a0?",
"url": "futur-transport-maritime",
"date": "2014-10-02T09:49:18Z",
"rub": "3",
"pop": 11,
"views": "2347",
"authors": ["Philippe Rekacewicz"],
"affdate": "2 octobre 2014",
"tags": ["transport","transport maritime","arctique","piraterie maritime","eurasie","rapport piraterie maritime"]
},
{
"id": 142,
"title": "\u00c9tats-Unis\u00a0: le mythe du\u00a0melting-pot",
"url": "etats-unis-le-mythe-du-melting-pot",
"date": "2015-06-23T05:06:06Z",
"rub": "3",
"pop": 3,
"views": "2347",
"authors": ["Philippe Rekacewicz"],
"affdate": "23 juin 2015",
"tags": ["etats-unis","segregation","discrimination","population","demographie"]
},
{
"id": 128,
"title": "Crossing maps: spaces of never-ending arrival",
"url": "crossing-maps",
"date": "2015-05-29T09:41:37Z",
"rub": "3",
"trad": 100,
"pop": 16,
"views": "2319",
"authors": ["Sarah Mekdjian", "Anne-Laure Amilhat Szary"],
"affdate": "29 May 2015",
"tags": ["cartography","sensitive cartography","participatory cartography","migration","borders"]
},
{
"id": 90,
"title": "Pourquoi les Nations Unies \u00e9chouent en mati\u00e8re de sant\u00e9",
"url": "pourquoi-les-nations-unies",
"date": "2014-11-27T08:08:16Z",
"rub": "3",
"pop": 3,
"views": "2234",
"authors": ["Dominique Kerouedan", "Bruno Dujardin"],
"affdate": "27 novembre 2014",
"tags": ["developpement","sante","omd","onu","aide","aide au developpement","dette","sida","paludisme","demographie","enfance","enfants","medecins","mortalite","inegalites","mortalite infantile","odm","systeme de sante"]
},
{
"id": 165,
"title": "Partager l&#8217;Arctique\u00a0?",
"url": "partager-l-arctique",
"date": "2015-10-11T13:06:08Z",
"rub": "7",
"trad": 165,
"pop": 3,
"views": "2152",
"authors": ["Philippe Rekacewicz"],
"affdate": "11 octobre 2015",
"tags": ["arctique","frontieres","etats-unis","russie","danemark","norvege","danemark","transports","transport maritime","ressources naturelles","petrole","energie"]
},
{
"id": 146,
"title": "Dans le train pour Ath\u00e8nes\u00a0: s\u00e9gr\u00e9gation mode d&#8217;emploi",
"url": "dans-le-train-pour-athenes",
"date": "2015-07-16T10:53:30Z",
"rub": "3",
"pop": 3,
"views": "2145",
"authors": ["Cristina Del Biaggio", "Alberto Campi"],
"affdate": "16 juillet 2015",
"tags": ["migrations","asile","migrants","refugies","grece","segregation","discrimination","apartheid","train"]
},
{
"id": 131,
"title": "\u00c0 Kumkap\u0131, avant de passer la fronti\u00e8re",
"url": "a-kumkapi-avant-de-passer-la-frontiere",
"date": "2015-06-30T04:00:00Z",
"rub": "3",
"pop": 3,
"views": "2137",
"authors": ["Cristina Del Biaggio", "Alberto Campi"],
"affdate": "30 juin 2015",
"tags": ["migrations","asile","migrants","refugies","grece","turquie","istanbul","kumkapi"]
},
{
"id": 287,
"title": "Barri\u00e8res frontali\u00e8res et hotspots dans le Sud-Est de l&#8217;Europe",
"url": "barrieres-frontalieres-et-hotspots",
"date": "2016-06-21T16:40:53Z",
"rub": "3",
"pop": 6,
"views": "2093",
"authors": ["St\u00e9phane Rosi\u00e8re"],
"affdate": "21 juin 2016",
"tags": ["frontieres","murs","migrations","refugies","asile","balkans","politiques migratoires","barrieres frontalieres"]
},
{
"id": 257,
"title": "Sahara occidental\u00a0: un territoire, une multitude d&#8217;appellations",
"url": "sahara-occidental-un-territoire",
"date": "2016-03-19T11:52:29Z",
"rub": "7",
"pop": 3,
"views": "2029",
"authors": ["Philippe Rekacewicz"],
"affdate": "19 mars 2016",
"tags": ["sahara occidental","maroc","mauritanie","algerie","frontieres","conflits"]
},
{
"id": 74,
"title": "Dynamique d\u00e9mographique dans le Caucase-Nord",
"url": "dynamique-demographie-caucase-nord",
"date": "2014-10-20T07:31:51Z",
"rub": "3",
"pop": 3,
"views": "1998",
"authors": ["Alexander Panin"],
"affdate": "20 octobre 2014",
"tags": ["caucase","caucase-nord","russie","stavropol","demographie","population","cartographie"]
},
{
"id": 221,
"title": "Pour Schengen, un monde bienvenu, et un monde \u00ab\u00a0ind\u00e9sirable\u00a0\u00bb",
"url": "un-monde-indesirable",
"date": "2016-02-21T21:57:34Z",
"rub": "7",
"pop": 3,
"views": "1986",
"authors": ["Philippe Rekacewicz"],
"affdate": "21 f\u00e9vrier 2016",
"tags": ["europe","visas","frontieres","espace schengen","migrations","asile","refugies"]
},
{
"id": 84,
"title": "Ainsi meurt l&#8217;\u00e2me de Samarcande",
"url": "ainsi-meurt-l-ame-de-samarcande",
"date": "2014-10-22T07:21:20Z",
"rub": "3",
"pop": 3,
"views": "1955",
"authors": ["Alice Corbet"],
"affdate": "22 octobre 2014",
"tags": ["ouzbekistan","asie centrale","murs","tourisme","separation","samarcande"]
},
{
"id": 283,
"title": "La fabrication des fronti\u00e8res en Afrique",
"url": "fabrication-frontieres-afrique",
"date": "2016-06-07T06:45:11Z",
"rub": "7",
"pop": 6,
"views": "1946",
"authors": ["Philippe Rekacewicz"],
"affdate": "7 juin 2016",
"tags": ["afrique","frontieres","colonisation","colonialisme","vision","perception"]
},
{
"id": 270,
"title": "S\u00e9curit\u00e9 routi\u00e8re\u00a0: mourir sur la route en Europe en 2015",
"url": "securite-routiere-2015",
"date": "2016-04-11T13:30:34Z",
"rub": "3",
"pop": 3,
"views": "1933",
"authors": ["Philippe Rekacewicz"],
"affdate": "11 avril 2016",
"tags": ["securite routiere","mortalite","europe","causes de mortalite","accidents de la route","accidentologie"]
},
{
"id": 247,
"title": "Le Guyana convoit\u00e9 par ses voisins",
"url": "le-guyana-convoite-par-ses-voisins",
"date": "2016-03-07T09:15:55Z",
"rub": "3",
"pop": 3,
"views": "1898",
"authors": ["Luis Alejandro Avila G\u00f3mez"],
"affdate": "7 mars 2016",
"tags": ["frontieres","venezuela","guyana","droit de la mer","amerique du sud"]
},
{
"id": 2,
"title": "Pour nous suivre",
"url": "suivre",
"date": "2014-04-01T08:48:33Z",
"rub": "1",
"pop": 4,
"views": "1888",
"authors": [],
"affdate": "1er avril 2014",
"tags": []
},
{
"id": 272,
"title": "Who the U.S. industrial lobbies pressure on intellectual property",
"url": "who-the-u-s-industrial-lobbies",
"date": "2016-04-13T08:03:07Z",
"rub": "3",
"trad": 272,
"pop": 3,
"views": "1871",
"authors": ["Philippe Rivi\u00e8re", "Elizabeth Rajasingh"],
"affdate": "13 April 2016",
"tags": ["intellectual property","health","pharma","lobbying","patents","copyright","trade","united states"]
},
{
"id": 280,
"title": "La derni\u00e8re carte Nord-Sud",
"url": "la-derniere-carte-nord-sud",
"date": "2016-05-19T08:24:34Z",
"rub": "7",
"pop": 3,
"views": "1820",
"authors": ["Philippe Rekacewicz"],
"affdate": "19 mai 2016",
"tags": ["tiers-monde","pays en voie de developpement","pays developpes","developpement","inegalites","mondialisation","vision","perception","nord-sud","tiers-monde","pays en voie de developpement","pays developpes","developpement","inegalites","mondialisation","vision","perception","tiers-monde","pays en voie de developpement","pays developpes","developpement","inegalites","mondialisation","vision","perception","tiers-monde","pays en voie de developpement","pays developpes","developpement","inegalites","mondialisation","vision","perception"]
},
{
"id": 152,
"title": "Cartes minimalistes",
"url": "cartes-minimalistes",
"date": "2015-09-10T14:37:19Z",
"rub": "3",
"pop": 3,
"views": "1812",
"authors": ["Arthur Charpentier"],
"affdate": "10 septembre 2015",
"tags": ["r","programmation","donnees","minimalisme","tutoriel","methodologie"]
},
{
"id": 313,
"title": "Petite g\u00e9ographie des toilettes",
"url": "petite-geographie-des-toilettes",
"date": "2016-09-22T13:53:48Z",
"rub": "7",
"pop": 3,
"views": "1810",
"authors": ["Philippe Rekacewicz"],
"affdate": "22 septembre 2016",
"tags": ["assainissement","toilettes","sante","eau"]
},
{
"id": 200,
"title": "Aux Nations unies, qui vote avec qui\u00a0?",
"url": "nations-unies-qui-vote-avec-qui",
"date": "2015-12-31T17:29:48Z",
"rub": "3",
"pop": 3,
"views": "1745",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "31 d\u00e9cembre 2015",
"tags": ["nations unies","desarmement","armement nucleaire","visualisation","bertin","statistiques","donnees","methodologie"]
},
{
"id": 255,
"title": "High-frequency trading in the Jungle",
"url": "hft-in-the-jungle",
"date": "2016-03-17T08:07:59Z",
"rub": "3",
"pop": 8,
"views": "1710",
"authors": ["Alexandre Laumonier"],
"affdate": "17 March 2016",
"tags": ["finance","high-frequency trading","refugees","europe","radical geography","finance","trading a haute frequence","trading algorithmique","refugies","europe","asile","migrations","cartographie","cartographie radicale","cartographie critique"]
},
{
"id": 225,
"title": "L&#8217;expulsion des Roms en \u00cele-de-France",
"url": "expulsion-des-roms-en-ile-de-france",
"date": "2016-02-03T10:12:53Z",
"rub": "7",
"pop": 3,
"views": "1706",
"authors": ["Philippe Rekacewicz"],
"affdate": "3 f\u00e9vrier 2016",
"tags": ["roms","paris","ile-de-france","bidonvilles","urban matter","population"]
},
{
"id": 37,
"title": "\u00c0 Khayelitsha, l\u2019eau, l\u2019orage et les toilettes",
"url": "khayelitsha-eau-orage-toilettes",
"date": "2014-07-04T07:27:10Z",
"rub": "3",
"pop": 3,
"views": "1699",
"authors": ["Philippe Rivi\u00e8re", "Maxisole Feni", "Armand Hough"],
"affdate": "4 juillet 2014",
"tags": ["sante","eau","inondations","toilettes","afrique du sud"]
},
{
"id": 96,
"title": "Dans les mus\u00e9es de Vienne, la\u00a0mort\u00a0et\u00a0la\u00a0vie",
"url": "dans-les-musees-de-vienne",
"date": "2014-12-23T09:08:50Z",
"rub": "3",
"pop": 8,
"views": "1694",
"authors": ["Philippe Rekacewicz"],
"affdate": "23 d\u00e9cembre 2014",
"tags": ["musees","art","peinture","cartographie","vienne","autriche"]
},
{
"id": 16,
"title": "G\u00e9ographie des exportations d\u2019armes\u00a0: un air de guerre froide",
"url": "exportations-d-armes",
"date": "2014-04-27T22:14:00Z",
"rub": "7",
"pop": 3,
"views": "1682",
"authors": ["Philippe Rekacewicz"],
"affdate": "28 avril 2014",
"tags": ["armement","armes","exportation armes","commerce armes","geostrategie","etats-unis","russie","europe","chine","edm"]
},
{
"id": 271,
"title": "Traces dispers\u00e9es de la Route des Balkans",
"url": "balkans-traces-dispersees",
"date": "2016-04-13T07:28:06Z",
"rub": "3",
"pop": 9,
"views": "1678",
"authors": ["Aron Rossman-Kiss"],
"affdate": "13 avril 2016",
"tags": ["migrations","asile","balkans","circulation migratoire","hongrie","macedoine","serbie","memoire"]
},
{
"id": 196,
"title": "The demographic apocalypse will not happen",
"url": "demographic-apocalypse",
"date": "2015-12-11T12:01:26Z",
"rub": "7",
"pop": 3,
"views": "1667",
"authors": ["Philippe Rekacewicz"],
"affdate": "11 December 2015",
"tags": ["population","demography","united nations","population","demographie","nations-unies","transition demographique"]
},
{
"id": 57,
"title": "\u00c0 Calais, l&#8217;\u00c9tat ne peut dissoudre les\u00a0migrants",
"url": "a-calais-l-etat-ne-peut-dissoudre",
"date": "2014-09-03T06:24:21Z",
"rub": "3",
"pop": 3,
"views": "1644",
"authors": ["Cristina Del Biaggio"],
"affdate": "3 septembre 2014",
"tags": ["documentaire","migrations","asile","calais","politiques migratoires","jungle"]
},
{
"id": 256,
"title": "Implantation humaine",
"url": "implantation-humaine",
"date": "2016-03-20T14:12:16Z",
"rub": "7",
"trad": 256,
"pop": 3,
"views": "1631",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "20 mars 2016",
"tags": ["villes","routes","monde","population","basiques","methodologie"]
},
{
"id": 222,
"title": "Politique des visas\u00a0: comment la Suisse partage le monde",
"url": "la-suisse-partage-le-monde",
"date": "2016-02-21T21:57:21Z",
"rub": "7",
"pop": 3,
"views": "1620",
"authors": ["Philippe Rekacewicz"],
"affdate": "21 f\u00e9vrier 2016",
"tags": ["suisse","visas","frontieres","espace schengen"]
},
{
"id": 127,
"title": "Forensics Architecture\u00a0: documenter la violence d&#8217;\u00c9tat",
"url": "forensics-architecture-entretien-vacarme",
"date": "2015-06-01T06:02:13Z",
"rub": "3",
"pop": 3,
"views": "1611",
"authors": ["Eyal Weizman", "Christina Varvia", "Lorenzo Pezzani", "Philippe Mangeot", "Laure Vermeersch"],
"affdate": "1er juin 2015",
"tags": ["cartographie radicale","droits humains","migrants","palestine","images satellitaires","migrations","asile","al-araqib","bedouins","israel","secheresse","sahel","drones"]
},
{
"id": 31,
"title": "Otto Neurath et \u00ab\u00a0l&#8217;orchestration\u00a0\u00bb de la politique urbaine",
"url": "otto-neurath-orchestration-urbaine",
"date": "2014-05-28T12:56:01Z",
"rub": "3",
"trad": 29,
"pop": 6,
"views": "1604",
"authors": ["Sophie Hochh\u00e4usl"],
"affdate": "28 mai 2014",
"tags": ["isotype","visualisation","cartographie urbaine","architecture","urbanisme","utopie","precurseurs"]
},
{
"id": 288,
"title": "Fort McMurray et l&#8217;incendie de\u00a0589\u00a0000\u00a0hectares",
"url": "fort-mcmurray-et-l-incendie",
"date": "2016-07-02T20:38:18Z",
"rub": "3",
"pop": 3,
"views": "1593",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "2 juillet 2016",
"tags": ["canada","petrole","incendie","echelle","cartographie","foret"]
},
{
"id": 45,
"title": "\u00c0 quoi ressemblait la carte du tiers-monde en 1986\u00a0?",
"url": "la-carte-du-tiers-monde-en-1986",
"date": "2014-08-26T21:15:02Z",
"rub": "3",
"pop": 6,
"views": "1588",
"authors": ["Philippe Rekacewicz"],
"affdate": "26 ao\u00fbt 2014",
"tags": ["developpement","tiers-monde","cartographie","economie"]
},
{
"id": 34,
"title": "Jama\u00efque, voyages crois\u00e9s",
"url": "jamaique-voyages-croises",
"date": "2014-06-03T10:09:01Z",
"rub": "3",
"pop": 3,
"views": "1572",
"authors": ["Romain Cruse"],
"affdate": "3 juin 2014",
"tags": ["jamaique","recit","voyage","photographie"]
},
{
"id": 344,
"title": "Le village de Lakardowo r\u00e9siste en cartes contre une usine de d\u00e9chets",
"url": "lakarwodo-resiste-en-cartes",
"date": "2016-11-23T11:49:59Z",
"rub": "3",
"trad": 344,
"pop": 37,
"views": "1568",
"authors": ["Aude Vidal"],
"affdate": "23 novembre 2016",
"tags": ["sante","pollution","java","cartographie participative","eau","dechets toxiques"]
},
{
"id": 145,
"title": "Lois et homosexualit\u00e9",
"url": "lois-et-homosexualite",
"date": "2015-06-27T13:54:23Z",
"rub": "7",
"pop": 3,
"views": "1568",
"authors": ["Philippe Rekacewicz"],
"affdate": "27 juin 2015",
"tags": ["homosexualite","discrimination","inegalites","peine de mort","edm","droits humains","lgbt"]
},
{
"id": 3,
"title": "Comment contribuer",
"url": "comment-contribuer",
"date": "2014-04-01T09:21:08Z",
"rub": "1",
"pop": 3,
"views": "1560",
"authors": [],
"affdate": "1er avril 2014",
"tags": []
},
{
"id": 264,
"title": "La peine de mort dans le monde en avril 2016",
"url": "peine-de-mort-dans-le-monde-2016",
"date": "2016-04-09T16:50:15Z",
"rub": "7",
"pop": 3,
"views": "1556",
"authors": ["Philippe Rekacewicz"],
"affdate": "9 avril 2016",
"tags": ["droits humains","peine de mort"]
},
{
"id": 124,
"title": "Le Moyen-Orient au XIXe et au XXe si\u00e8cle",
"url": "le-moyen-orient-au-xixe-et-au-xxe",
"date": "2015-05-11T19:35:04Z",
"rub": "7",
"pop": 3,
"views": "1544",
"authors": ["Philippe Rekacewicz"],
"affdate": "11 mai 2015",
"tags": ["moyen-orient","golfe","syrie","irak","histoire","proche-orient","turquie","empire ottoman","egypte","sdn","societe des nations","arabie saoudite","colonisation","occupation","empire britannique","empire russe","iran","caucase"]
},
{
"id": 290,
"title": "L&#8217;or blanc de la gueule noire",
"url": "l-or-blanc-de-la-gueule-noire",
"date": "2016-08-29T09:53:15Z",
"rub": "3",
"pop": 3,
"views": "1519",
"authors": ["Philippe Rekacewicz"],
"affdate": "29 ao\u00fbt 2016",
"tags": ["ex-urss","mer caspienne","kara-bogaz","asie centrale","sovietisme","urss"]
},
{
"id": 4,
"title": "Sumoud, le combat et la vie d\u2019al-Araqib",
"url": "sumoud",
"date": "2014-04-27T23:12:29Z",
"rub": "3",
"pop": 3,
"views": "1486",
"authors": ["Marion Lecoquierre"],
"affdate": "28 avril 2014",
"tags": ["bedouins","al-araqib"]
},
{
"id": 203,
"title": "Bretagne zone hydrocarbure",
"url": "bretagne-zone-hydrocarbure",
"date": "2016-01-05T07:30:55Z",
"rub": "3",
"pop": 3,
"views": "1484",
"authors": ["Bruno Bergot"],
"affdate": "5 janvier 2016",
"tags": ["petrole","maree noire","cartographie narrative","bretagne","pollution","code","programmation"]
},
{
"id": 285,
"title": "Invisibilizados en los mapas demogr\u00e1ficos",
"url": "invisibilizados-en-los-mapas-demograficos",
"date": "2016-05-25T14:57:51Z",
"rub": "3",
"trad": 259,
"pop": 3,
"views": "1479",
"authors": ["Joshua Tauberer"],
"affdate": "25 de mayo de 2016",
"tags": []
},
{
"id": 278,
"title": "\u00c9volution du taux d&#8217;analphab\u00e9tisme 1970-2010",
"url": "evolution-du-taux-d-analphabetisme",
"date": "2016-05-19T06:57:27Z",
"rub": "7",
"pop": 3,
"views": "1444",
"authors": ["Philippe Rekacewicz"],
"affdate": "19 mai 2016",
"tags": ["demographie","population","analphabetisme","inegalites","education","ecole","demographie","population","analphabetisme","inegalites","education","ecole"]
},
{
"id": 281,
"title": "Revenu national brut compar\u00e9\u00a0: 2003 et 2023",
"url": "revenu-national-brut-2003-2023",
"date": "2016-05-19T08:22:09Z",
"rub": "7",
"pop": 3,
"views": "1443",
"authors": ["Philippe Rekacewicz"],
"affdate": "19 mai 2016",
"tags": ["tiers-monde","pays en voie de developpement","pays developpes","developpement","inegalites","mondialisation","anamorphose","cartogramme","pib","rnb","nord sud"]
},
{
"id": 150,
"title": "Afrique du Sud\u00a0: quand la carte fait son histoire",
"url": "afrique-du-sud-cartes-provinces",
"date": "2015-08-24T20:59:12Z",
"rub": "3",
"pop": 3,
"views": "1442",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "24 ao\u00fbt 2015",
"tags": ["toponymie","histoire","methodologie","afrique du sud"]
},
{
"id": 183,
"title": "Broadband prices in the world",
"url": "broadband-prices-in-the-world",
"date": "2015-12-01T09:00:00Z",
"rub": "7",
"trad": 198,
"pop": 3,
"views": "1442",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "1 December 2015",
"tags": ["internet","communication","computers","inequity","access","ict"]
},
{
"id": 175,
"title": "La Chine et l&#8217;Inde, nouvelles puissances maritimes",
"url": "chine-inde-puissances-maritimes",
"date": "2015-11-06T10:47:35Z",
"rub": "7",
"pop": 7,
"views": "1438",
"authors": ["Philippe Rekacewicz"],
"affdate": "6 novembre 2015",
"tags": ["chine","inde","asie","asie du sud est","pacifique","armement","etats-unis","japon","mer","oceans","geopolitique"]
},
{
"id": 28,
"title": "Une Ukraine multinationale",
"url": "ukraine-multinationale",
"date": "2014-05-07T16:59:50Z",
"rub": "3",
"pop": 3,
"views": "1436",
"authors": ["Philippe Rekacewicz"],
"affdate": "7 mai 2014",
"tags": ["ukraine","russie","langues","nationalites","minorites","ex-urss"]
},
{
"id": 305,
"title": "De Rome \u00e0 Gaziantep, des r\u00e9fugi\u00e9\u00b7es otages de l&#8217;Union europ\u00e9enne",
"url": "de-rome-a-gaziantep-des-refugie-es",
"date": "2016-09-26T06:12:34Z",
"rub": "3",
"pop": 3,
"views": "1425",
"authors": ["Sara Prestianni"],
"affdate": "26 septembre 2016",
"tags": ["refugies","asile","droit d asile","migrations","turquie","grece","italie"]
},
{
"id": 182,
"title": "Cartographier la guerre",
"url": "cartographier-la-guerre",
"date": "2015-11-05T08:13:27Z",
"rub": "7",
"trad": 182,
"pop": 3,
"views": "1415",
"authors": ["Philippe Rekacewicz"],
"affdate": "5 novembre 2015",
"tags": ["guerre","conflits","frontieres","russie","etats-unis","grandes puissances","armement","methodologie","ressources pedagogiques"]
},
{
"id": 109,
"title": "Jean Rouch au pays des g\u00e9nies et des esprits",
"url": "jean-rouch-petit-a-petit",
"date": "2015-09-24T08:36:19Z",
"rub": "3",
"pop": 10,
"views": "1394",
"authors": ["Philippe Rekacewicz"],
"affdate": "24 septembre 2015",
"tags": ["jean rouch","cinema","afrique","niger","documentaire","film","fleuve","fleuve niger"]
},
{
"id": 154,
"title": "G\u00e9ographie tr\u00e8s \u00ab\u00a0asym\u00e9trique\u00a0\u00bb des fabricants et exportateurs d&#8217;armes l\u00e9g\u00e8res, 2011-2015",
"url": "armes-legeres-exportateurs-fabricants",
"date": "2015-09-11T12:14:49Z",
"rub": "7",
"trad": 153,
"pop": 3,
"views": "1390",
"authors": ["Philippe Rekacewicz"],
"affdate": "11 septembre 2015",
"tags": ["armement","armes","armes legeres","guerre","conflits"]
},
{
"id": 168,
"title": "Des terres et des territoires",
"url": "des-terres-et-des-territoires",
"date": "2015-10-16T17:30:58Z",
"rub": "3",
"pop": 10,
"views": "1368",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "16 octobre 2015",
"tags": ["agricultures","mondialisation","exposition","webdoc"]
},
{
"id": 197,
"title": "Le Front national dans les \u00e9lections, 1973-2015",
"url": "le-front-national-elections",
"date": "2015-12-13T22:57:20Z",
"rub": "7",
"pop": 3,
"views": "1363",
"authors": ["Philippe Rekacewicz"],
"affdate": "13 d\u00e9cembre 2015",
"tags": ["extreme-droite","france","front national","fn","elections","politique","ressources pedagogiques"]
},
{
"id": 171,
"title": "Precio mundial de una conexi\u00f3n a internet",
"url": "precios-internet",
"date": "2015-12-01T09:00:00Z",
"rub": "7",
"trad": 198,
"pop": 3,
"views": "1322",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "1ro de diciembre de 2015",
"tags": []
},
{
"id": 210,
"title": "Un monde nucl\u00e9aris\u00e9",
"url": "un-monde-nuclearise",
"date": "2016-01-26T07:00:22Z",
"rub": "7",
"trad": 210,
"pop": 3,
"views": "1320",
"authors": ["Philippe Rekacewicz"],
"affdate": "26 janvier 2016",
"tags": ["nucleaire","armement","tnp","bombe atomique","centrale nucleaire","puissance nucleaire"]
},
{
"id": 314,
"title": "Grandes causes de mortalit\u00e9 dans le monde en 2010",
"url": "mortalite-dans-le-monde",
"date": "2016-09-22T13:52:12Z",
"rub": "7",
"pop": 3,
"views": "1298",
"authors": ["Philippe Rekacewicz"],
"affdate": "22 septembre 2016",
"tags": ["mortalite","demographie","sante"]
},
{
"id": 292,
"title": "La Caspienne est-elle une mer ou un lac\u00a0?",
"url": "caspienne-mer-ou-lac",
"date": "2016-08-30T07:49:34Z",
"rub": "3",
"pop": 15,
"views": "1295",
"authors": ["Philippe Rekacewicz"],
"affdate": "30 ao\u00fbt 2016",
"tags": ["mer caspienne","ex-urss","urss","frontieres","caucase","asie centrale"]
},
{
"id": 304,
"title": "Le tourisme dans le monde en 2011",
"url": "tourisme-en-2011",
"date": "2016-09-13T06:58:29Z",
"rub": "7",
"pop": 3,
"views": "1292",
"authors": ["Philippe Rekacewicz"],
"affdate": "13 septembre 2016",
"tags": ["tourisme","mondialisation"]
},
{
"id": 85,
"title": "Jeux du hasard \u00e0 Cap-Ha\u00eftien",
"url": "jeux-du-hasard-a-cap-haitien",
"date": "2014-11-21T10:31:32Z",
"rub": "3",
"pop": 3,
"views": "1292",
"authors": ["Romain Cruse", "Romain Philippon"],
"affdate": "21 novembre 2014",
"tags": ["haiti","caraibe","pauvrete","cap-haitien"]
},
{
"id": 212,
"title": "Nucl\u00e9aire\u00a0: apr\u00e8s Fukushima, l&#8217;\u00e8re du soup\u00e7on",
"url": "nucleaire-apres-fukushima-l-ere-du-soupcon",
"date": "2016-01-26T10:49:44Z",
"rub": "7",
"pop": 3,
"views": "1286",
"authors": ["Philippe Rekacewicz", "Nikolaus Gansterer"],
"affdate": "26 janvier 2016",
"tags": ["nucleaire","fukushima","nucleaire civil","centrale nucleaire","electricite nucleaire","energie","energie nucleaire"]
},
{
"id": 325,
"title": "Efforts de guerre, efforts de paix",
"url": "guerre-et-paix",
"date": "2016-10-06T08:44:42Z",
"rub": "7",
"pop": 3,
"views": "1283",
"authors": ["Philippe Rekacewicz"],
"affdate": "6 octobre 2016",
"tags": ["armement","armee","budgets militaires","paix","guerre","conflits","onu"]
},
{
"id": 47,
"title": "Suivi de colis",
"url": "suivi-de-colis",
"date": "2014-08-30T09:55:41Z",
"rub": "3",
"pop": 3,
"views": "1273",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "30 ao\u00fbt 2014",
"tags": ["geolocalisation","cartographie automatique","visualisation","methodologie","mondialisation","apple","foxconn","transport","brew","geocodage","geotools","geojson"]
},
{
"id": 218,
"title": "Le peuple rom en Europe",
"url": "le-peuple-rom-en-europe",
"date": "2016-01-29T13:59:35Z",
"rub": "7",
"pop": 3,
"views": "1263",
"authors": ["Philippe Rekacewicz"],
"affdate": "29 janvier 2016",
"tags": ["roms","europe","minorites","discrimination","union europeenne","ue","population"]
},
{
"id": 205,
"title": "La croissance chinoise menace d\u2019extinction les rhinoc\u00e9ros d\u2019Afrique",
"url": "croissance-chinoise-rhinoceros-afrique",
"date": "2016-01-15T13:57:16Z",
"rub": "3",
"pop": 3,
"views": "1248",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "15 janvier 2016",
"tags": ["rhinos","elephants","braconnage","biodiversite","chine","afrique","rhinoceros"]
},
{
"id": 153,
"title": "The very \u201casymmetric\u201d geography of small and light arms producers and exporters 2011-2015",
"url": "small-light-arms-producers-exporters",
"date": "2015-09-11T12:15:05Z",
"rub": "7",
"trad": 153,
"pop": 3,
"views": "1242",
"authors": ["Philippe Rekacewicz"],
"affdate": "11 September 2015",
"tags": ["armament","arms","light weapon","small arms","war","conflicts"]
},
{
"id": 42,
"title": "L&#8217;Europe, un continent \u00e0 g\u00e9ographie variable",
"url": "europe-geographie-variable",
"date": "2014-08-28T20:36:00Z",
"rub": "3",
"pop": 3,
"views": "1234",
"authors": ["Philippe Rekacewicz"],
"affdate": "28 ao\u00fbt 2014",
"tags": ["europe","frontieres","perception"]
},
{
"id": 289,
"title": "Touristes et migrants\u00a0: collision en gare de C\u00f4me",
"url": "touristes-et-migrants-collision-a-come",
"date": "2016-08-26T05:34:00Z",
"rub": "3",
"trad": 289,
"pop": 9,
"views": "1229",
"authors": ["Cristina Del Biaggio"],
"affdate": "26 ao\u00fbt 2016",
"tags": ["migrations","asile","italie","suisse","tourisme"]
},
{
"id": 177,
"title": "Le monde vu de P\u00e9kin",
"url": "le-monde-vu-de-pekin",
"date": "2016-11-25T11:37:15Z",
"rub": "7",
"pop": 39,
"views": "1227",
"authors": ["Philippe Rekacewicz"],
"affdate": "25 novembre 2016",
"tags": ["chine","pekin","perception","semiologie","vision","geopolitique","representation"]
},
{
"id": 180,
"title": "Middle East: geography of chaos",
"url": "middle-east-geography-of-chaos",
"date": "2015-11-03T00:02:34Z",
"rub": "7",
"trad": 178,
"pop": 3,
"views": "1225",
"authors": ["Philippe Rekacewicz"],
"affdate": "3 November 2015",
"tags": ["middle east","near east","syria","iraq","gulf","israel","palestine","yemen","east africa","horn","conflicts","war"]
},
{
"id": 213,
"title": "La s\u00e9curit\u00e9 alimentaire, pour qui\u00a0?",
"url": "securite-alimentaire-pour-qui",
"date": "2016-01-29T07:48:36Z",
"rub": "7",
"trad": 214,
"pop": 3,
"views": "1218",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "29 janvier 2016",
"tags": ["accaparements de terres","colonisation","multinationales","securite alimentaire","afrique","g7","malnutrition","agriculture","paysannerie","revoltes","alimentation"]
},
{
"id": 217,
"title": "Roms\u00a0: le peuple europ\u00e9en",
"url": "roms-le-peuple-europeen",
"date": "2016-01-29T13:59:18Z",
"rub": "3",
"pop": 3,
"views": "1213",
"authors": ["Philippe Rekacewicz"],
"affdate": "29 janvier 2016",
"tags": ["roms","europe","minorites","discrimination","union europeenne","ue","population"]
},
{
"id": 239,
"title": "From Cholera to Zika",
"url": "from-cholera-to-zika",
"date": "2016-02-23T20:28:52Z",
"rub": "3",
"pop": 9,
"views": "1199",
"authors": ["Sonia Shah"],
"affdate": "23 February 2016",
"tags": ["health","cholera","new york","haiti","sante","epidemie","haiti","new york","ebola","zika","cholera"]
},
{
"id": 86,
"title": "Balkan Road",
"url": "balkan-road-it",
"date": "2014-12-05T09:37:25Z",
"rub": "3",
"trad": 60,
"pop": 3,
"views": "1198",
"authors": ["Cristina Del Biaggio", "Alberto Campi"],
"affdate": "5 dicembre 2014",
"tags": ["migrazioni","asilo","balcani","ex-jugoslavia","rifugiati"]
},
{
"id": 106,
"title": "By making hand-drawn maps of their slums in India, kids are influencing urban planning",
"url": "indian-slums-children-drawing-maps",
"date": "2015-03-20T08:13:03Z",
"rub": "3",
"trad": 106,
"pop": 5,
"views": "1171",
"authors": ["Sam Sturgis"],
"affdate": "20 March 2015",
"tags": ["grassroots mapping","india","slums","children"]
},
{
"id": 159,
"title": "La guerre isra\u00e9lo-arabe de 1956\u00a0: l\u2019occupation du Sina\u00ef",
"url": "la-guerre-israelo-arabe-de-1956",
"date": "2015-09-23T09:20:37Z",
"rub": "7",
"pop": 5,
"views": "1161",
"authors": ["Philippe Rekacewicz"],
"affdate": "23 septembre 2015",
"tags": ["israel","sinai","guerre","occupation","colonisation","guerre de 1956","proche orient","moyen orient","egypte","transport maritime"]
},
{
"id": 27,
"title": "Vaincre une mer d\u00e9serte et ferm\u00e9e",
"url": "vaincre-une-mer-deserte-et-fermee",
"date": "2014-05-09T12:11:25Z",
"rub": "3",
"pop": 3,
"views": "1140",
"authors": ["Cristina Del Biaggio"],
"affdate": "9 mai 2014",
"tags": ["documentaires","migrants","mediterranee","recension","migrations","mediterranee","asile","libye","italie","documentaires"]
},
{
"id": 33,
"title": "Vue sur la Mer M\u00e9diterran\u00e9e, \u00e9criture assembl\u00e9e dans l&#8217;espace",
"url": "vue-sur-la-mer-mediterranee",
"date": "2014-05-15T08:00:08Z",
"rub": "3",
"pop": 3,
"views": "1139",
"authors": ["Philippe Rekacewicz"],
"affdate": "15 mai 2014",
"tags": ["cartographie","art","mediterranee","ceramique","representation","imaginaire"]
},
{
"id": 193,
"title": "The refugees crescent in 2014",
"url": "the-refugees-crescent-in-2014",
"date": "2015-11-24T10:49:08Z",
"rub": "7",
"trad": 147,
"pop": 3,
"views": "1090",
"authors": ["Philippe Rekacewicz"],
"affdate": "24 November 2015",
"tags": ["war","conflicts","borders","refugees","united nations","human rights","asylum","asylum seekers","peace"]
},
{
"id": 338,
"title": "Les d\u00e9buts de l&#8217;Islam en Asie du Sud-Est",
"url": "les-debuts-de-l-islam-en-asie-du-sud-est",
"date": "2016-10-19T11:06:40Z",
"rub": "7",
"pop": 3,
"views": "1088",
"authors": ["Philippe Rekacewicz"],
"affdate": "19 octobre 2016",
"tags": ["indonesie","religions","asie","asie du sud-est","indonesie","malaisie","conflits"]
},
{
"id": 248,
"title": "La Russie investit massivement dans le Caucase-Nord",
"url": "la-russie-investit-massivement",
"date": "2016-03-14T10:11:57Z",
"rub": "3",
"pop": 3,
"views": "1081",
"authors": ["Alexander Panin"],
"affdate": "14 mars 2016",
"tags": ["caucase","caucase-nord","russie","amenagement","amenagement du territoire"]
},
{
"id": 36,
"title": "Les chemins du trafic de corne de\u00a0rhinoc\u00e9ros",
"url": "trafic-corne-de-rhino",
"date": "2014-05-19T13:28:23Z",
"rub": "3",
"trad": 30,
"pop": 3,
"views": "1066",
"authors": [],
"affdate": "19 mai 2014",
"tags": ["vie sauvage","trafic","rhinoceros","criminalite","cartographie","visualisation"]
},
{
"id": 43,
"title": "Un si\u00e8cle de changements frontaliers en Europe",
"url": "un-siecle-de-frontieres",
"date": "2014-08-28T20:43:36Z",
"rub": "3",
"pop": 3,
"views": "1060",
"authors": ["Philippe Rekacewicz"],
"affdate": "28 ao\u00fbt 2014",
"tags": ["frontieres","europe","histoire","ex-urss","empires","nations"]
},
{
"id": 238,
"title": "\u00c0 la recherche du Rivage des Syrtes",
"url": "rivage-des-syrtes",
"date": "2012-11-30T09:32:00Z",
"rub": "3",
"pop": 33,
"views": "1046",
"authors": ["Philippe Arnaud"],
"affdate": "30 novembre 2012",
"tags": []
},
{
"id": 41,
"title": "L&#8217;Europe, le politicien et la carte",
"url": "le-politicien-et-la-carte",
"date": "2014-08-29T12:20:31Z",
"rub": "3",
"pop": 3,
"views": "1038",
"authors": ["Eudes Girard"],
"affdate": "29 ao\u00fbt 2014",
"tags": ["turquie","europe","cartographie","visualisation","perception","eurasie"]
},
{
"id": 48,
"title": "Transport maritime\u00a0: routes principales et routes alternatives",
"url": "transport-maritime-routes",
"date": "2014-08-30T22:28:29Z",
"rub": "7",
"pop": 3,
"views": "1032",
"authors": ["Philippe Rekacewicz"],
"affdate": "31 ao\u00fbt 2014",
"tags": ["transport","transport maritime","arctique","piraterie maritime","eurasie","rapport piraterie maritime"]
},
{
"id": 261,
"title": "Trois si\u00e8cles d&#8217;\u00e9volution de la population mondiale",
"url": "trois-siecles-d-evolution-de-la-population",
"date": "2016-05-18T08:37:44Z",
"rub": "7",
"pop": 3,
"views": "1022",
"authors": ["Philippe Rekacewicz"],
"affdate": "18 mai 2016",
"tags": ["demographie","population","anamorphose","cartogramme"]
},
{
"id": 156,
"title": "La guerre froide en Europe\u00a0: situation \u00e0 la fin des ann\u00e9es 1970",
"url": "la-guerre-froide-en-europe",
"date": "2015-09-23T08:08:43Z",
"rub": "7",
"pop": 6,
"views": "1019",
"authors": ["Philippe Rekacewicz"],
"affdate": "23 septembre 2015",
"tags": ["guerre froide","urss","ex-urss","otan","europe","monde communiste","histoire","monde occidental"]
},
{
"id": 184,
"title": "Mapping wars",
"url": "mapping-wars",
"date": "2015-11-11T19:46:20Z",
"rub": "7",
"trad": 182,
"pop": 3,
"views": "997",
"authors": ["Philippe Rekacewicz"],
"affdate": "11 November 2015",
"tags": ["war","conflicts","borders","russia","united states","power","armament"]
},
{
"id": 298,
"title": "Esp\u00e9rance de vie scolaire dans l\u2019enseignement formel du primaire au sup\u00e9rieur",
"url": "esperance-de-vie-scolaire",
"date": "2016-09-01T11:11:07Z",
"rub": "7",
"trad": 298,
"pop": 3,
"views": "976",
"authors": ["Philippe Rekacewicz"],
"affdate": "1er septembre 2016",
"tags": ["education","scolarisation","ecole","indicateur"]
},
{
"id": 215,
"title": "Roads kill map",
"url": "roads-kill-map",
"date": "2016-01-29T08:00:31Z",
"rub": "7",
"pop": 3,
"views": "973",
"authors": ["Dan McCarey"],
"affdate": "29 January 2016",
"tags": ["road safety","health","surgery","traffic","securite routiere","mortalite","europe","causes de mortalite","accidents de la route","accidentologie"]
},
{
"id": 123,
"title": "Les \u00ab\u00a0secondes guerres mondiales\u00a0\u00bb",
"url": "les-secondes-guerres-mondiales",
"date": "2015-05-10T08:21:37Z",
"rub": "3",
"pop": 3,
"views": "971",
"authors": ["Philippe Rekacewicz", "Dominique Vidal"],
"affdate": "10 mai 2015",
"tags": ["seconde guerre mondiale","sgm","histoire","nazisme","europe","union sovietique","urss"]
},
{
"id": 30,
"title": "Routes of rhino horn",
"url": "routes-of-rhino-horn",
"date": "2014-05-12T08:31:06Z",
"rub": "3",
"trad": 30,
"pop": 3,
"views": "968",
"authors": ["Fiona Mcleod"],
"affdate": "12 May 2014",
"tags": ["wildlife","trafficking routes","rhinoceros","crime","cartographie","visualisation"]
},
{
"id": 214,
"title": "We all go for food security, but who wins at the end?",
"url": "food-security-who-benefits",
"date": "2016-03-02T07:40:42Z",
"rub": "7",
"trad": 214,
"pop": 3,
"views": "959",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "2 March 2016",
"tags": ["food security","colonization","corporations","land grabbing","g7","agriculture","food","revolts","peasantry","africa"]
},
{
"id": 192,
"title": "Prisen \u00e5 betale for internettilgang i ulike deler av verden",
"url": "prisen-for-internettilgang",
"date": "2015-12-01T08:50:00Z",
"rub": "7",
"trad": 198,
"pop": 3,
"views": "949",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "1er d\u00e9cembre 2015",
"tags": ["internett","kommunikasjon","informatikk","ulikhet","tilgang","ikt"]
},
{
"id": 273,
"title": "Les pressions des lobbies industriels am\u00e9ricains sur la propri\u00e9t\u00e9 intellectuelle",
"url": "propriete-intellectuelle-lobbies",
"date": "2016-04-23T09:01:04Z",
"rub": "3",
"trad": 272,
"pop": 3,
"views": "944",
"authors": ["Philippe Rivi\u00e8re", "Elizabeth Rajasingh"],
"affdate": "23 avril 2016",
"tags": ["propriete intellectuelle","sante","pharmacie","lobbies","brevets","lobbies industriels","big pharma","commerce international","etats-unis"]
},
{
"id": 93,
"title": "Seconde guerre mondiale - L&#8217;Europe occup\u00e9e en 1942",
"url": "europe-occupee-1942",
"date": "2015-05-08T22:02:56Z",
"rub": "7",
"pop": 3,
"views": "942",
"authors": ["Philippe Rekacewicz"],
"affdate": "9 mai 2015",
"tags": ["seconde guerre mondiale","sgm","histoire","europe","nazis","nazisme","allemagne"]
},
{
"id": 216,
"title": "Les citoyens suisses dans le monde avec et sans visa",
"url": "citoyens-suisses-avec-et-sans-visa",
"date": "2016-02-21T21:57:13Z",
"rub": "7",
"pop": 3,
"views": "936",
"authors": ["Philippe Rekacewicz"],
"affdate": "21 f\u00e9vrier 2016",
"tags": ["suisse","visas","frontieres","espace schengen","etranger"]
},
{
"id": 199,
"title": "Chi fabbrica le armi e chi le acquista?",
"url": "chi-fabbrica-le-armi",
"date": "2016-01-17T21:12:09Z",
"rub": "7",
"trad": 190,
"pop": 3,
"views": "917",
"authors": ["Philippe Rekacewicz", "Cristina Del Biaggio"],
"affdate": "17 gennaio 2016",
"tags": ["armi","conflitti","guerra","russia","stati uniti d'america","cina","francia","europa"]
},
{
"id": 157,
"title": "La guerre isra\u00e9lo-arabe de 1967",
"url": "la-guerre-israelo-arabe-de-1967",
"date": "2015-09-23T12:47:18Z",
"rub": "7",
"pop": 7,
"views": "916",
"authors": ["Philippe Rekacewicz"],
"affdate": "23 septembre 2015",
"tags": ["israel","palestine","guerre","occupation","colonisation","guerre de 1967","proche-orient","moyen-orient"]
},
{
"id": 89,
"title": "La d\u00e9colonisation et les nouveaux territoires",
"url": "decolonisation-nouveaux-territoires",
"date": "2014-11-12T17:29:06Z",
"rub": "7",
"pop": 7,
"views": "905",
"authors": ["Philippe Rekacewicz"],
"affdate": "12 novembre 2014",
"tags": ["colonisation","imperialisme","decolonisation","independances","resistances","territoires"]
},
{
"id": 219,
"title": "Un Tsigane n\u2019est pas tous les Tsiganes",
"url": "un-tsigane-pas-tous-les-tsiganes",
"date": "2016-01-29T13:59:03Z",
"rub": "3",
"pop": 4,
"views": "903",
"authors": ["C\u00e9cile Kovacshazy"],
"affdate": "29 janvier 2016",
"tags": ["roms","europe","minorites","discrimination","union europeenne","ue","population"]
},
{
"id": 158,
"title": "La guerre isra\u00e9lo-arabe de 1973",
"url": "la-guerre-israelo-arabe-de-1973",
"date": "2015-09-23T12:47:24Z",
"rub": "7",
"pop": 3,
"views": "902",
"authors": ["Philippe Rekacewicz"],
"affdate": "23 septembre 2015",
"tags": ["israel","palestine","guerre","occupation","colonisation","guerre de 1973","proche orient","moyen orient","guerre du kippour","egypte"]
},
{
"id": 29,
"title": "Otto Neurath and the Politics of Orchestration",
"url": "neurath-politics-of-orchestration",
"date": "2014-05-28T12:56:37Z",
"rub": "3",
"trad": 29,
"pop": 3,
"views": "886",
"authors": ["Sophie Hochh\u00e4usl"],
"affdate": "28 May 2014",
"tags": ["isotype","visualisation","otto neurath","architecture","urbanism"]
},
{
"id": 56,
"title": "\u00c9volution du transport maritime entre 1950 et 2014",
"url": "evolution-transport-maritime",
"date": "2014-08-31T22:20:07Z",
"rub": "7",
"pop": 3,
"views": "886",
"authors": ["Philippe Rekacewicz"],
"affdate": "1er septembre 2014",
"tags": ["transport","transport maritime","visualisation","esquisse"]
},
{
"id": 206,
"title": "La projection Bottomley",
"url": "la-projection-bottomley",
"date": "2016-01-11T08:52:48Z",
"rub": "3",
"pop": 3,
"views": "885",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "11 janvier 2016",
"tags": ["projection","cartographie","code","programmation","d3.js"]
},
{
"id": 266,
"title": "\u00c9volution de l&#8217;esp\u00e9rance de vie \u00e0 la naissance entre 1990 et 2006",
"url": "esperance-de-vie-1990-2006",
"date": "2016-04-09T08:27:30Z",
"rub": "7",
"pop": 3,
"views": "883",
"authors": ["Philippe Rekacewicz"],
"affdate": "9 avril 2016",
"tags": ["demographie","sante","esperance de vie"]
},
{
"id": 342,
"title": "In\u00e9galit\u00e9s fonci\u00e8res en Am\u00e9rique du Sud et aux \u00c9tats-Unis",
"url": "inegalites-foncieres-en-amerique",
"date": "2016-11-02T15:01:35Z",
"rub": "3",
"pop": 7,
"views": "869",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "2 novembre 2016",
"tags": ["accaparements de terres","foncier","agriculture","agroindustrie","amerique du sud","etats-unis"]
},
{
"id": 35,
"title": "R\u012bga 2014, la f\u00eate de tout un peuple\u00a0?",
"url": "riga-2014",
"date": "2014-05-19T10:56:30Z",
"rub": "3",
"pop": 3,
"views": "843",
"authors": ["Nicolas Escach"],
"affdate": "19 mai 2014",
"tags": ["culture","r\u012bga","lettonie","russie","r\u012bga 2014"]
},
{
"id": 258,
"title": "Human Settlements",
"url": "human-settlements",
"date": "2016-04-26T05:41:13Z",
"rub": "7",
"trad": 256,
"pop": 3,
"views": "809",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "26 April 2016",
"tags": ["cities","roads","world","population","basics"]
},
{
"id": 143,
"title": "Structures agraires en Europe de l&#8217;Est",
"url": "structures-agraires-europe",
"date": "2015-06-23T19:45:36Z",
"rub": "7",
"pop": 3,
"views": "806",
"authors": ["Agn\u00e8s Stienne"],
"affdate": "23 juin 2015",
"tags": ["europe","agriculture","inegalites","foncier","slovenie","croatie","pologne","lituanie","lettonie","roumanie","allemagne","hongrie","estonie","bulgarie","republique tcheque","slovaquie","europe orientale"]
},
{
"id": 262,
"title": "Croissance et d\u00e9croissance de la population mondiale\u00a0: 2005-2010",
"url": "croissance-et-decroissance-de-la-population",
"date": "2016-05-18T08:37:22Z",
"rub": "7",
"pop": 3,
"views": "796",
"authors": ["Philippe Rekacewicz"],
"affdate": "18 mai 2016",
"tags": ["demographie","population","natalite","mortalite"]
},
{
"id": 267,
"title": "Esp\u00e9rance de vie en bonne sant\u00e9 en 2010",
"url": "esperance-de-vie-en-bonne-sante-2010",
"date": "2016-04-09T08:25:55Z",
"rub": "7",
"pop": 3,
"views": "790",
"authors": ["Philippe Rekacewicz"],
"affdate": "9 avril 2016",
"tags": ["demographie","sante","esperance de vie"]
},
{
"id": 186,
"title": "Giving peace a chance: international initiatives, ongoing and recently accomplished operations, 1990-2015",
"url": "giving-peace-a-chance",
"date": "2015-11-24T09:09:13Z",
"rub": "7",
"trad": 185,
"pop": 3,
"views": "788",
"authors": ["Philippe Rekacewicz"],
"affdate": "24 November 2015",
"tags": ["war","conflicts","borders","un","united nations","osce","eu","european union","peace"]
},
{
"id": 249,
"title": "Conflits et tensions politiques dans le Caucase en 2012",
"url": "conflits-et-tensions-politiques-2012",
"date": "2016-03-14T10:12:19Z",
"rub": "7",
"pop": 3,
"views": "781",
"authors": ["Philippe Rekacewicz", "Jean Radvanyi", "Manana Kurtubadze"],
"affdate": "14 mars 2016",
"tags": ["caucase","caucase-sud","caucase-nord","guerres","conflits","russie","energie"]
},
{
"id": 312,
"title": "Le syst\u00e8me Chine dans la mondialisation",
"url": "le-systeme-chine",
"date": "2016-11-25T11:37:10Z",
"rub": "7",
"pop": 39,
"views": "770",
"authors": ["Philippe Rekacewicz"],
"affdate": "25 novembre 2016",
"tags": ["chine","economie","mondialisation","systeme","analyse systemique","soft power"]
},
{
"id": 77,
"title": "La valise et son artiste partent en voyage...",
"url": "thomas-philibert-la-valise-et-son-artiste",
"date": "2014-10-01T18:34:56Z",
"rub": "3",
"pop": 5,
"views": "770",
"authors": ["Philippe Rekacewicz"],
"affdate": "1er octobre 2014",
"tags": ["art","graffiti","voyage","dessin","scandinavie","monde nordique","valise","thomas philibert"]
},
{
"id": 88,
"title": "Le Hold-up colonial",
"url": "le-hold-up-colonial",
"date": "2014-11-12T17:27:57Z",
"rub": "7",
"pop": 3,
"views": "765",
"authors": ["Philippe Rekacewicz"],
"affdate": "12 novembre 2014",
"tags": ["colonisation","imperialisme","decolonisation"]
},
{
"id": 224,
"title": "Trois Tsiganes ordinaires en Tch\u00e9quie et Slovaquie",
"url": "trois-tsiganes-ordinaires",
"date": "2016-01-29T13:58:49Z",
"rub": "3",
"pop": 3,
"views": "764",
"authors": ["C\u00e9cile Kovacshazy"],
"affdate": "29 janvier 2016",
"tags": ["roms","bd","bande dessinee","slovaquie","tchequie","tchecoslovaquie"]
},
{
"id": 253,
"title": "Croissance d\u00e9mographique dans le Caucase",
"url": "croissance-demographique-dans-le-caucase",
"date": "2016-03-14T10:13:40Z",
"rub": "7",
"pop": 3,
"views": "764",
"authors": ["Philippe Rekacewicz"],
"affdate": "14 mars 2016",
"tags": ["caucase","caucase-sud","caucase-nord","demographie","population","russie"]
},
{
"id": 137,
"title": "G\u00e9ographie de la pauvret\u00e9 aux \u00c9tats-Unis en 2013",
"url": "geographie-de-la-pauvrete-aux-etats-unis",
"date": "2015-06-22T06:44:51Z",
"rub": "7",
"pop": 3,
"views": "751",
"authors": ["Philippe Rekacewicz"],
"affdate": "22 juin 2015",
"tags": ["etats-unis","revenus","inegalites","pauvrete","richesse","riches","pauvres"]
},
{
"id": 346,
"title": "How ZIP codes nearly masked the lead problem in Flint",
"url": "zip-codes-flint",
"date": "2016-11-15T17:08:03Z",
"rub": "3",
"trad": 345,
"pop": 7,
"views": "748",
"authors": ["Richard Casey Sadler"],
"affdate": "15 November 2016",
"tags": ["methodology","cartography","bias","health"]
},
{
"id": 5,
"title": "La route de tous les p\u00e9rils",
"url": "la-route-de-tous-les-perils",
"date": "2014-05-09T09:22:00Z",
"rub": "3",
"pop": 3,
"views": "743",
"authors": ["madmeg"],
"affdate": "9 mai 2014",
"tags": ["art","dessin","manga","imaginaires"]
},
{
"id": 188,
"title": "Op\u00e9rations de maintien de la paix en 2015 et principaux contributeurs (2005-2015)",
"url": "operations-de-maintien-de-la-paix",
"date": "2015-11-12T10:31:27Z",
"rub": "7",
"trad": 188,
"pop": 3,
"views": "734",
"authors": ["Philippe Rekacewicz"],
"affdate": "12 novembre 2015",
"tags": ["guerre","conflits","frontieres","paix","nations unies","onu","ressources pedagogiques"]
},
{
"id": 20,
"title": "Logiciels",
"url": "logiciels",
"date": "2014-04-27T15:15:23Z",
"rub": "1",
"pop": 3,
"views": "723",
"authors": ["Philippe Rivi\u00e8re"],
"affdate": "27 avril 2014",
"tags": []
},
{
"id": 198,
"title": "Prezzi degli accessi ad internet nel mondo",
"url": "prezzi-degli-accessi-ad-internet",
"date": "2015-12-24T16:51:41Z",
"rub": "7",
"trad": 198,
"pop": 3,
"views": "721",
"authors": ["Philippe Rivi\u00e8re", "Cristina Del Biaggio"],
"affdate": "24 dicembre 2015",
"tags": ["internet","comunicazione","informatica","ineguaglianze","acesso","tic"]
},
{
"id": 252,
"title": "Conflits et tensions politiques dans le Caucase en 2009",
"url": "conflits-et-tensions-politiques-2009",
"date": "2016-03-14T10:12:39Z",
"rub": "7",
"pop": 3,
"views": "721",
"authors": ["Philippe Rekacewicz"],
"affdate": "14 mars 2016",
"tags": ["caucase","caucase-sud","caucase-nord","guerres","conflits","russie"]
},
{
"id": 211,
"title": "A nuclearized world",
"url": "a-nuclearized-world",
"date": "2016-01-26T07:00:29Z",
"rub": "7",
"trad": 210,
"pop": 3,
"views": "706",
"authors": ["Philippe Rekacewicz"],
"affdate": "26 January 2016",
"tags": ["nuclear","armament","ntp","atomic bomb","nuclear powerplant","nuclear states"]
},
{
"id": 21,
"title": "La Palestine, \u00c9tat observateur non-membre aupr\u00e8s de l&#8217;ONU",
"url": "la-palestine-etat-observateur-non",
"date": "2014-04-27T22:13:56Z",
"rub": "7",
"pop": 3,
"views": "701",
"authors": ["Philippe Rekacewicz"],
"affdate": "28 avril 2014",
"tags": ["palestine","nations unies","onu","israel","occupation","colonisation","kosovo","independance"]
},
{
"id": 323,
"title": "Le prix des armes et des arm\u00e9es",
"url": "armement-et-armees",
"date": "2016-10-06T08:45:28Z",
"rub": "7",
"pop": 3,
"views": "689",
"authors": ["Philippe Rekacewicz"],
"affdate": "6 octobre 2016",
"tags": ["armement","armee","budgets militaires","russie","etats-unis","otan","chine","inde"]
},
{
"id": 12,
"title": "\u00c9tats-Unis - Russie\u00a0: l&#8217;autre menace nucl\u00e9aire",
"url": "etats-unis-russie-l-autre-menace",
"date": "2014-04-27T22:14:15Z",
"rub": "7",
"pop": 3,
"views": "680",
"authors": ["Philippe Rekacewicz"],
"affdate": "28 avril 2014",
"tags": ["nucleaire militaire","armement non conventionnel","bombe atomique","geostrategie","etats-unis","russie","edm"]
},
{
"id": 58,
"title": "Enfants palestiniens tu\u00e9s par l&#8217;arm\u00e9e ou les colons alors qu&#8217;ils ne participaient pas aux hostilit\u00e9s, 2000-2014",
"url": "enfants-palestiniens-tues",
"date": "2014-09-03T16:14:21Z",
"rub": "7",
"pop": 3,
"views": "677",
"authors": ["Philippe Rekacewicz"],
"affdate": "3 septembre 2014",
"tags": ["enfance","enfants","massacre","occupation","colonisation","israel"]
},
{
"id": 327,
"title": "Investissez dans l&#8217;armement, c&#8217;est plus rentable",
"url": "spad-index",
"date": "2016-10-06T08:44:30Z",
"rub": "7",
"pop": 3,
"views": "663",
"authors": ["Philippe Rekacewicz"],
"affdate": "6 octobre 2016",
"tags": ["armement","armee","budgets militaires","bourse","indices financiers","speculation"]
}
]
// create main global object
var tsnejs = tsnejs || { REVISION: 'ALPHA' };
(function(global) {
"use strict";
// utility function
var assert = function(condition, message) {
if (!condition) { throw message || "Assertion failed"; }
}
// syntax sugar
var getopt = function(opt, field, defaultval) {
if(opt.hasOwnProperty(field)) {
return opt[field];
} else {
return defaultval;
}
}
// return 0 mean unit standard deviation random number
var return_v = false;
var v_val = 0.0;
var gaussRandom = function() {
if(return_v) {
return_v = false;
return v_val;
}
var u = 2*Math.random()-1;
var v = 2*Math.random()-1;
var r = u*u + v*v;
if(r == 0 || r > 1) return gaussRandom();
var c = Math.sqrt(-2*Math.log(r)/r);
v_val = v*c; // cache this for next function call for efficiency
return_v = true;
return u*c;
}
// return random normal number
var randn = function(mu, std){ return mu+gaussRandom()*std; }
// utilitity that creates contiguous vector of zeros of size n
var zeros = function(n) {
if(typeof(n)==='undefined' || isNaN(n)) { return []; }
if(typeof ArrayBuffer === 'undefined') {
// lacking browser support
var arr = new Array(n);
for(var i=0;i<n;i++) { arr[i]= 0; }
return arr;
} else {
return new Float64Array(n); // typed arrays are faster
}
}
// utility that returns 2d array filled with random numbers
// or with value s, if provided
var randn2d = function(n,d,s) {
var uses = typeof s !== 'undefined';
var x = [];
for(var i=0;i<n;i++) {
var xhere = [];
for(var j=0;j<d;j++) {
if(uses) {
xhere.push(s);
} else {
xhere.push(randn(0.0, 1e-4));
}
}
x.push(xhere);
}
return x;
}
// compute L2 distance between two vectors
var L2 = function(x1, x2) {
var D = x1.length;
var d = 0;
for(var i=0;i<D;i++) {
var x1i = x1[i];
var x2i = x2[i];
d += (x1i-x2i)*(x1i-x2i);
}
return d;
}
// compute pairwise distance in all vectors in X
var xtod = function(X) {
var N = X.length;
var dist = zeros(N * N); // allocate contiguous array
for(var i=0;i<N;i++) {
for(var j=i+1;j<N;j++) {
var d = L2(X[i], X[j]);
dist[i*N+j] = d;
dist[j*N+i] = d;
}
}
return dist;
}
// compute (p_{i|j} + p_{j|i})/(2n)
var d2p = function(D, perplexity, tol) {
var Nf = Math.sqrt(D.length); // this better be an integer
var N = Math.floor(Nf);
assert(N === Nf, "D should have square number of elements.");
var Htarget = Math.log(perplexity); // target entropy of distribution
var P = zeros(N * N); // temporary probability matrix
var prow = zeros(N); // a temporary storage compartment
for(var i=0;i<N;i++) {
var betamin = -Infinity;
var betamax = Infinity;
var beta = 1; // initial value of precision
var done = false;
var maxtries = 50;
// perform binary search to find a suitable precision beta
// so that the entropy of the distribution is appropriate
var num = 0;
while(!done) {
//debugger;
// compute entropy and kernel row with beta precision
var psum = 0.0;
for(var j=0;j<N;j++) {
var pj = Math.exp(- D[i*N+j] * beta);
if(i===j) { pj = 0; } // we dont care about diagonals
prow[j] = pj;
psum += pj;
}
// normalize p and compute entropy
var Hhere = 0.0;
for(var j=0;j<N;j++) {
if(psum == 0) {
var pj = 0;
} else {
var pj = prow[j] / psum;
}
prow[j] = pj;
if(pj > 1e-7) Hhere -= pj * Math.log(pj);
}
// adjust beta based on result
if(Hhere > Htarget) {
// entropy was too high (distribution too diffuse)
// so we need to increase the precision for more peaky distribution
betamin = beta; // move up the bounds
if(betamax === Infinity) { beta = beta * 2; }
else { beta = (beta + betamax) / 2; }
} else {
// converse case. make distrubtion less peaky
betamax = beta;
if(betamin === -Infinity) { beta = beta / 2; }
else { beta = (beta + betamin) / 2; }
}
// stopping conditions: too many tries or got a good precision
num++;
if(Math.abs(Hhere - Htarget) < tol) { done = true; }
if(num >= maxtries) { done = true; }
}
// console.log('data point ' + i + ' gets precision ' + beta + ' after ' + num + ' binary search steps.');
// copy over the final prow to P at row i
for(var j=0;j<N;j++) { P[i*N+j] = prow[j]; }
} // end loop over examples i
// symmetrize P and normalize it to sum to 1 over all ij
var Pout = zeros(N * N);
var N2 = N*2;
for(var i=0;i<N;i++) {
for(var j=0;j<N;j++) {
Pout[i*N+j] = Math.max((P[i*N+j] + P[j*N+i])/N2, 1e-100);
}
}
return Pout;
}
// helper function
function sign(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }
var tSNE = function(opt) {
var opt = opt || {};
this.perplexity = getopt(opt, "perplexity", 30); // effective number of nearest neighbors
this.dim = getopt(opt, "dim", 2); // by default 2-D tSNE
this.epsilon = getopt(opt, "epsilon", 10); // learning rate
this.iter = 0;
}
tSNE.prototype = {
// this function takes a set of high-dimensional points
// and creates matrix P from them using gaussian kernel
initDataRaw: function(X) {
var N = X.length;
var D = X[0].length;
assert(N > 0, " X is empty? You must have some data!");
assert(D > 0, " X[0] is empty? Where is the data?");
var dists = xtod(X); // convert X to distances using gaussian kernel
this.P = d2p(dists, this.perplexity, 1e-4); // attach to object
this.N = N; // back up the size of the dataset
this.initSolution(); // refresh this
},
// this function takes a given distance matrix and creates
// matrix P from them.
// D is assumed to be provided as a list of lists, and should be symmetric
initDataDist: function(D) {
var N = D.length;
assert(N > 0, " X is empty? You must have some data!");
// convert D to a (fast) typed array version
var dists = zeros(N * N); // allocate contiguous array
for(var i=0;i<N;i++) {
for(var j=i+1;j<N;j++) {
var d = D[i][j];
dists[i*N+j] = d;
dists[j*N+i] = d;
}
}
this.P = d2p(dists, this.perplexity, 1e-4);
this.N = N;
this.initSolution(); // refresh this
},
// (re)initializes the solution to random
initSolution: function() {
// generate random solution to t-SNE
this.Y = randn2d(this.N, this.dim); // the solution
this.gains = randn2d(this.N, this.dim, 1.0); // step gains to accelerate progress in unchanging directions
this.ystep = randn2d(this.N, this.dim, 0.0); // momentum accumulator
this.iter = 0;
},
// return pointer to current solution
getSolution: function() {
return this.Y;
},
// perform a single step of optimization to improve the embedding
step: function() {
this.iter += 1;
var N = this.N;
var cg = this.costGrad(this.Y); // evaluate gradient
var cost = cg.cost;
var grad = cg.grad;
// perform gradient step
var ymean = zeros(this.dim);
for(var i=0;i<N;i++) {
for(var d=0;d<this.dim;d++) {
var gid = grad[i][d];
var sid = this.ystep[i][d];
var gainid = this.gains[i][d];
// compute gain update
var newgain = sign(gid) === sign(sid) ? gainid * 0.8 : gainid + 0.2;
if(newgain < 0.01) newgain = 0.01; // clamp
this.gains[i][d] = newgain; // store for next turn
// compute momentum step direction
var momval = this.iter < 250 ? 0.5 : 0.8;
var newsid = momval * sid - this.epsilon * newgain * grad[i][d];
this.ystep[i][d] = newsid; // remember the step we took
// step!
this.Y[i][d] += newsid;
ymean[d] += this.Y[i][d]; // accumulate mean so that we can center later
}
}
// reproject Y to be zero mean
for(var i=0;i<N;i++) {
for(var d=0;d<this.dim;d++) {
this.Y[i][d] -= ymean[d]/N;
}
}
//if(this.iter%100===0) console.log('iter ' + this.iter + ', cost: ' + cost);
return cost; // return current cost
},
// for debugging: gradient check
debugGrad: function() {
var N = this.N;
var cg = this.costGrad(this.Y); // evaluate gradient
var cost = cg.cost;
var grad = cg.grad;
var e = 1e-5;
for(var i=0;i<N;i++) {
for(var d=0;d<this.dim;d++) {
var yold = this.Y[i][d];
this.Y[i][d] = yold + e;
var cg0 = this.costGrad(this.Y);
this.Y[i][d] = yold - e;
var cg1 = this.costGrad(this.Y);
var analytic = grad[i][d];
var numerical = (cg0.cost - cg1.cost) / ( 2 * e );
console.log(i + ',' + d + ': gradcheck analytic: ' + analytic + ' vs. numerical: ' + numerical);
this.Y[i][d] = yold;
}
}
},
// return cost and gradient, given an arrangement
costGrad: function(Y) {
var N = this.N;
var dim = this.dim; // dim of output space
var P = this.P;
var pmul = this.iter < 100 ? 4 : 1; // trick that helps with local optima
// compute current Q distribution, unnormalized first
var Qu = zeros(N * N);
var qsum = 0.0;
for(var i=0;i<N;i++) {
for(var j=i+1;j<N;j++) {
var dsum = 0.0;
for(var d=0;d<dim;d++) {
var dhere = Y[i][d] - Y[j][d];
dsum += dhere * dhere;
}
var qu = 1.0 / (1.0 + dsum); // Student t-distribution
Qu[i*N+j] = qu;
Qu[j*N+i] = qu;
qsum += 2 * qu;
}
}
// normalize Q distribution to sum to 1
var NN = N*N;
var Q = zeros(NN);
for(var q=0;q<NN;q++) { Q[q] = Math.max(Qu[q] / qsum, 1e-100); }
var cost = 0.0;
var grad = [];
for(var i=0;i<N;i++) {
var gsum = new Array(dim); // init grad for point i
for(var d=0;d<dim;d++) { gsum[d] = 0.0; }
for(var j=0;j<N;j++) {
cost += - P[i*N+j] * Math.log(Q[i*N+j]); // accumulate cost (the non-constant portion at least...)
var premult = 4 * (pmul * P[i*N+j] - Q[i*N+j]) * Qu[i*N+j];
for(var d=0;d<dim;d++) {
gsum[d] += premult * (Y[i][d] - Y[j][d]);
}
}
grad.push(gsum);
}
return {cost: cost, grad: grad};
}
}
global.tSNE = tSNE; // export tSNE class
})(tsnejs);
// export the library to window, or to module in nodejs
(function(lib) {
"use strict";
if (typeof module === "undefined" || typeof module.exports === "undefined") {
if (typeof window == "object")
window.tsnejs = lib; // in ordinary browser attach library to window
} else {
module.exports = lib; // in nodejs
}
})(tsnejs);
importScripts('https://d3js.org/d3.v4.min.js');
// in worker.onmessage add : `if (e.data.log) console.log.apply(this, e.data.log);`
console.log = function() {
self.postMessage({ log: [...arguments] });
}
function levenshtein(a, b) {
var t = [], u, i, j, m = a.length, n = b.length;
if (!m) { return n; }
if (!n) { return m; }
for (j = 0; j <= n; j++) { t[j] = j; }
for (i = 1; i <= m; i++) {
for (u = [i], j = 1; j <= n; j++) {
u[j] = a[i - 1] === b[j - 1] ? t[j - 1] : Math.min(t[j - 1], t[j], u[j - 1]) + 1;
} t = u;
} return u[n];
}
let iterations = 0,
model;
self.onmessage = function(e) {
const msg = e.data,
data = msg.data,
maxIter = msg.maxIter || 500,
perplexity = msg.perplexity || 30;
var z = 0;
let dists = msg.dist;
if (data && !dists){
let now = performance.now();
let tfidf = {};
d3.set(d3.merge(data.map(d => d.props)))
.values()
.map(d => {
let t = data.filter(e => e.props.indexOf(d) > -1).length;
if (t > 1) tfidf[d] = 1/t;
});
self.postMessage({"tfidf": tfidf});
let similarities = data.map(
a => data.map(
b => b.props.filter(e => a.props.indexOf(e) > -1)
.map(e => tfidf[e])
.reduce((a,b) => a+b, 0)
)
);
console.log("similarities", similarities);
dists = similarities.map(r => r.map(s => Math.exp(-2 * s)));
console.log('computed', data.length * data.length,'distances in', Math.round(performance.now()-now),'ms');
}
// console.log(dists);
// dists = null;
if (dists) {
model = new tsnejs.tSNE({
dim: msg.dim,
perplexity: perplexity,
});
model.initDataDist(dists);
}
let startpos = model.getSolution().map(d=>d.slice()),
pos;
while (iterations++ < maxIter) {
// every time you call this, solution gets better
model.step();
pos = model.getSolution();
//if (iterations%10 == 0) console.log("pos",pos);
// Y is an array of 2-D points that you can plot
self.postMessage({
iterations: iterations - 1,
pos: pos,
//log: [ 'step', iterations-1 ]
});
}
let cost = startpos
.map((d,i) => sqdist(d, pos[i]))
.reduce ((a,b) => a + b, 0) / pos.length / Math.max(...pos.map(d => Math.abs(d[0]) + Math.abs(d[1])));
self.postMessage({
done: iterations - 1,
cost: cost,
log: [ 'done', iterations - 1, cost ]
});
};
function sqdist (a,b) {
let d = [a[0] - b[0], a[1] - b[1]].map(Math.abs);
return Math.max(d[0], d[1]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment