Skip to content

Commit 7d5c98e

Browse files
committed
Add Chicago robbery clusters
1 parent daf4362 commit 7d5c98e

File tree

4 files changed

+80
-2
lines changed

4 files changed

+80
-2
lines changed

Diff for: clustering/robbery.php

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpmlExamples;
6+
7+
use Phpml\Clustering\KMeans;
8+
9+
require 'vendor/autoload.php';
10+
11+
$lines = file(__DIR__.'/../data/crimes-robbery.csv');
12+
foreach ($lines as &$line) {
13+
$row = explode(';', $line);
14+
$line = [(float) $row[0], (float) $row[1]];
15+
}
16+
17+
$clusterer = new KMeans(14);
18+
$clusters = $clusterer->cluster($lines);
19+
20+
$lines = [];
21+
foreach ($clusters as $key => $cluster) {
22+
foreach ($cluster as $sample) {
23+
$lines[] = sprintf('%s;%s;%s', $key, $sample[0], $sample[1]);
24+
}
25+
}
26+
27+
file_put_contents(__DIR__ . '/../data/crimes-robbery-clusters.csv', implode(PHP_EOL, $lines));

Diff for: preparation/crimes.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
$lines = [];
77
$index = 0;
8-
$filter = ['ARSON'];
8+
$filter = ['ROBBERY'];
99
while (($row = fgetcsv($handle)) !== false) {
1010
if(!in_array($row[6], $filter)) {
1111
continue;
@@ -23,5 +23,5 @@
2323
}
2424
fclose($handle);
2525

26-
file_put_contents(__DIR__ . '/../data/crimes-arson.csv', implode(PHP_EOL, $lines));
26+
file_put_contents(__DIR__ . '/../data/crimes-robbery.csv', implode(PHP_EOL, $lines));
2727

Diff for: visualization/robbery.py

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import csv
2+
import random
3+
from staticmap import StaticMap, CircleMarker
4+
5+
m = StaticMap(1000, 900, url_template='http://a.tile.stamen.com/toner/{z}/{x}/{y}.png')
6+
7+
8+
with open('data/crimes-robbery.csv') as csvfile:
9+
reader = csv.reader(csvfile, delimiter=';')
10+
for row in reader:
11+
marker = CircleMarker((float(row[1]), float(row[0])), (232, 152, 16, 180), 6)
12+
m.add_marker(marker)
13+
14+
image = m.render(center=[-87.684871189, 41.8348221989])
15+
image.save('robbery.png')

Diff for: visualization/robberyClusters.py

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import csv
2+
import random
3+
from staticmap import StaticMap, CircleMarker
4+
5+
m = StaticMap(1000, 900, url_template='http://a.tile.stamen.com/toner/{z}/{x}/{y}.png')
6+
7+
def cluster_to_color(cluster):
8+
alpha = 180
9+
return {
10+
'0': (246, 81, 29,alpha),
11+
'1': (255, 180, 0,alpha),
12+
'2': (0, 166, 237,alpha),
13+
'3': (127, 184, 0,alpha),
14+
'4': (67, 188, 20, alpha),
15+
'5': (102, 46, 155, alpha),
16+
'6': (175, 127, 242, alpha),
17+
'7': (146, 181, 29, alpha),
18+
'8': (155, 100, 0, alpha),
19+
'9': (100, 106, 237, alpha),
20+
'10': (27, 84, 0, alpha),
21+
'11': (167, 228, 20, alpha),
22+
'12': (202, 146, 155, alpha),
23+
'13': (75, 187, 42, alpha)
24+
}[cluster]
25+
26+
with open('data/crimes-robbery-clusters.csv') as csvfile:
27+
reader = csv.reader(csvfile, delimiter=';')
28+
for row in reader:
29+
if row[0] == 'C':
30+
marker = CircleMarker((float(row[2]), float(row[1])), (0,0,0), 15)
31+
else:
32+
marker = CircleMarker((float(row[2]), float(row[1])), cluster_to_color(row[0]), 6)
33+
m.add_marker(marker)
34+
35+
image = m.render(center=[-87.684871189, 41.8348221989])
36+
image.save('robbery-clusters.png')

0 commit comments

Comments
 (0)