罗兰在MATLAB的艺术

把想法变成MATLAB

请注意

罗兰在MATLAB的艺术已经存档,不会被更新。

与预测治安打击犯罪

今天的嘉宾博客古原,又回来了。

最近,我注意到有一个名为Kaggle竞争旧金山犯罪分类这要求你预测犯罪发生在三藩市的类别从1/1/2003 5/13/2015 theSFPD犯罪事件报告系统。竞争的目标是预测犯罪发生的一类基于时间和地点。

这让我想起了电影少数派报告中一个特殊的单位警察逮捕人在犯罪之前,但这是科幻。一个更现实的方法是阻止犯罪通过分析过去的数据来预测何时何地犯罪发生和部署执法资源这样的热点。这种方法被称为预测警务

让我们看看发出数据,看看我们能从中吸取教训。这与竞争的目标,但Kaggle是“也鼓励你去探索数据集视觉”。所以为什么不呢?

内容

发出后犯罪事件报告数据

首先需要从Kaggle网站,下载压缩数据文件并将其解压缩到当前文件夹。让我们加载数据看看属性。

T = readtable (“train.csv”,“格式”,' % D % C % % % C % % q % f % f ');%从csv数据加载周= {“星期天”,“周一”,“星期二”,“星期三”,%定义顺序“星期四”,“星期五”,“星期六”};t (4) = reordercats (t .(4)、周);%重新排序类别t(6) =分类(t . (6));%转换为分类T.Properties.VariableNames%显示变量名
ans = 1到5列“日期”“类别”“多”“DayOfWeek”“PdDistrict”列6到9“分辨率”“地址”“X”“Y”

还让我们添加一个新列指定日期具体每周internvals进行时间序列分析。

t = datetime (“2003-1-5”天)+ (0:7:4515);%每周日期间隔周= NaT(大小(T.Dates));%空的datetime数组i = 1:长度(t) - 1%每周循环间隔周(T。日期> = t (i) & t。日期< t (i + 1) =(我);%可以追溯到每周间隔结束T。周=周;%增加每周的间隔

现在让我们来看看什么是包含在“类别”。有38类犯罪和界定事件,比如纵火,攻击,空头支票,但哪一个我们应该关注吗?

T。类别= mergecats (T.Category, {“侵权”,海藻糖酶的});%合并错误地分类选项卡=汇总(T.Category);%汇总类别[计数,idx] =排序(cell2mat(选项卡(:,2)),“下”);%按类别排序%的新人物栏(计数)%绘制条形图甘氨胆酸ax =;%得到当前的斧柄斧子。XTick = 1:大小(选项卡,1);%使用类别作为蜱虫斧子。XTickLabel =选项卡(idx, 1);%将蜱虫标签斧子。XTickLabelRotation = -90;%旋转文本垂直

破窗理论

这个理论,接受了纽约警察局长(当时纽约警察局局长)威廉•布拉顿在1990年代,说留下破碎的窗户未修理的带来更多的破坏和更大的社会障碍在附近,因为它表明没有人关心。到纽约警察局pointhe专注于解决严重的犯罪。然而,理论表明,打击轻微犯罪减少可能导致更严重的。而纽约看到了犯罪率的下降在布拉顿,这个理论也并非没有批评,因为它导致了争议停止和快乐练习。

也许对我们的探索这一理论提供了一个起点。发出的数据显示相关性破坏这样的轻微犯罪和其他更严重的犯罪?让我们先从二元直方图histogram2阴谋破坏事件的位置。检查sfcrime_load_map.m看看你检索栅格地图网络地图服务

sfcrime_load_map%从WMS加载地图破坏= T (T。类别= =“破坏”,1 3:5 8:10分);% T按类别子集nbins = 100;%的箱子数量lim.lon xbinedges = linspace (lim.lon (1), (2), nbins);% x本边缘lim.lat ybinedges = linspace (lim.lat (1), (2), nbins);% y本边缘地图= flipud(一个);%翻转图像%的新人物colormap很酷的%设置colormaphistogram2(破坏。X vandalism.Y%绘制3 d二元xbinedges ybinedges,%直方图“FaceColor”,“平”,“FaceAlpha”,0.5,“EdgeAlpha”,0.5)%不覆盖图像(lim.lon lim.lat,地图)%添加地图持有%恢复默认甘氨胆酸ax =;%得到当前的斧柄斧子。这一= [0 100];%颜色轴缩放标题({“旧金山犯罪地图”;%添加标题的破坏:2003年1月- 2015年5月})zlabel (“警方报告数”)%添加轴标签文本(-122.52,37.82,300年,“金门大桥”)%注释具有里程碑意义的文本(-122.4,37.82,200年,“海湾大桥”)%注释具有里程碑意义的

你可以看到,这些事件都高度集中在几个热点高品红酒吧所示。有一个特别高的酒吧,棍子在休息。在哪里?我们可以画出高破坏事件的前50名的位置最高的点标记为“1”。检查sfcrime_draw_locs.m看到的细节。

%的新人物usamap (lim。lat, lim.lon);%设置地图坐标geoshow(右)%显示地图sfcrime_draw_locs(破坏、lim.lat lim.lon nbins, 50岁,“米”)%画前50名的位置标题({的破坏:2013年1月- 2015年5月;的前50名的位置})%添加标题

犯罪热点图

如果我们其他类别的犯罪过程具有相同的网格,我们可以创建一个矩阵的犯罪地点,我们可以画出它作为一个热图显示亮度图像比较容易。

明亮的横条纹显示位置不同类型的犯罪。有一个特别明亮的条纹和攻击,药物/毒品,盗窃/盗窃,犯罪,其他犯罪,和认股权证。抢劫、可疑OCC,破坏也出现在一个比较浅的阴影。

如果你看看盗窃/盗窃,它并不一定形式行条纹到处都是光明的。如果你要偷,它可能是值得的去的地方你会发现高价值目标。

猫=类别(T.Category);%提取类别rawCounts = 0 ((nbins-1) ^ 2、长度(猫));%建立一个累加器i = 1:长度(猫)%循环类别data = T (T。猫类= = {},9);% T按类别子集(N, ~, ~) = histcounts2(数据。X data.Y%得到二元直方图xbinedges ybinedges);%本计数rawCounts (:, i) = N (:);%增加蓄电池结束%作为一个向量%的新人物显示亮度图像(rawCounts)%的阴谋矩阵作为图像甘氨胆酸ax =;%得到当前的斧柄斧子。这一= [0 200];%颜色轴缩放斧子。XTick = 1:长度(猫);%使用类别作为蜱虫斧子。XTickLabel =猫;%将蜱虫标签斧子。XTickLabelRotation = -90;%旋转文本垂直ylabel (“位置”)%添加轴标签标题(“科幻犯罪热点图的位置”)%添加标题colorbar%添加colorbar

主成分分析

我们可以使用主成分分析uisng主成分分析为了更好地了解不同类别之间的关系和可视化结果biplot。我们需要使用加权主成分分析来解决大规模差异类别。我们还需要隐藏某些类别作为输出太凌乱如果我们试图显示所有38人。

w = 1。/ var (rawCounts);%反变量方差[wcoeff,分数,潜伏,tsquared解释]=%加权主成分分析与wpca (rawCounts“VariableWeights”,w);coefforth =诊断接头(sqrt (w)) * wcoeff;% wcoeff转向正交标签=猫;%的类别标签标签([4、9、10、12、13、15、18、20、21、23、25、27日28日31日32])= {};%下降一些标签,以避免混乱%的新人物biplot (coefforth (:, 1:2),“分数”分数(:1:2),% 2 d biplot与前两个比较“VarLabels”,标签包含(sprintf ()“组件1 (% .2f % %)”(1)解释说,))%添加方差解释x轴标签ylabel (sprintf (“组件2 (% .2f % %)”解释说,(2)))%添加方差解释y轴标签轴([-0.1 0.6 -0.3 0.4]);%定义轴的限制标题({主成分分析的;%添加标题sprintf (方差解释说% .2f % % '总和(解释(1:2)))})htext = findobj (gca,“字符串”,“车辆盗窃”);%找到文本对象htext。HorizontalAlignment =“对”;文本对齐方式变化百分比htext = findobj (gca),“字符串”,“攻击”);%找到文本对象htext。位置= (0.2235 - 0.0909 0);%移动标签位置htext = findobj (gca),“字符串”,“抢劫”);%找到文本对象htext。位置= (0.2148 - 0.1268 0);%移动标签位置htext = findobj (gca),“字符串”,“纵火”);%找到文本对象htext。HorizontalAlignment =“对”;文本对齐方式变化百分比htext = findobj (gca),“字符串”,“敲诈勒索”);%找到文本对象htext。HorizontalAlignment =“对”;文本对齐方式变化百分比

攻击、抢劫和车辆盗窃

的上半身biplot似乎比下半部分显示不那么复杂的犯罪,破坏更密切相关的纵火,可疑OCC,也是有关盗窃罪/盗窃但盗窃罪/盗窃本身是空头支票,敲诈勒索,诈骗和性犯罪强行。

您还可以看到攻击、抢劫和汽车盗窃也很密切相关。其中,攻击事件的最大计数。也许这就是我们需要关注的犯罪。让我们检查这些罪行的前50名的位置。如你所愿,你看到好的重叠的位置。

攻击= T (T。类别= =“攻击”,1 3:5 8:10分);% T按类别子集车辆= T (T。类别= =“车辆盗窃”,1 3:5 8:10分);% T按类别子集抢劫= T (T。类别= =“抢劫”,1 3:5 8:10分);% T按类别子集%的新人物usamap (lim。lat, lim.lon);%设置地图坐标geoshow(右)%显示地图topN = 50;%得到前50名持有%不覆盖sfcrime_draw_locs(攻击、lim.lat lim.lon、nbins topN,“r”)%画出红色sfcrime_draw_locs(车辆、lim.lat lim.lon、nbins topN,‘g’)%画绿色的位置sfcrime_draw_locs(抢劫、lim.lat lim.lon、nbins topN,“b”)%画出蓝色持有%恢复默认标题({“攻击、抢劫和盗窃车辆”;%添加标题sprintf (“顶级% d位置”topN)})

侠盗猎车手

是否我们可以使用的数据预测,我们需要检查时间维度。我们可以利用每周的间隔列情节每周趋势。这是奇怪的。车辆盗窃突然下降了2006年!是时候,以便深入了解更多情况。

%的新人物(G, t) = findgroups (assault.Week);%组织每周一次的间隔每周= splitapply (@numel,攻击。上周,G);%得到每周数情节(t,每周)%的阴谋每周数持有%不覆盖(G, t) = findgroups (vehicle.Week);%组织每周一次的间隔每周= splitapply (@numel、车辆。上周,G);%得到每周数情节(t,每周)%的阴谋每周数(G, t) = findgroups (robbery.Week);%组织每周一次的间隔每周= splitapply (@numel、抢劫。上周,G);%得到每周数情节(t,每周)%的阴谋每周数持有%恢复默认标题(“攻击、抢劫、盗窃车辆每周”)%添加标题ylabel (“报告发病率的统计”)%添加轴标签传奇(“攻击”,“车辆盗窃”,“抢劫”)%添加传奇

尤里卡!

查看描述,您注意到车辆也报道事件中恢复过来。出于某种原因,恢复车辆的事故,自2006年以来下降了。这样一个突然的变化通常是由报告标准的变化引起的,但是看起来一半的偷来的车经常被recoveverd最终在过去的好时光?他们仍然恢复但没有报告,或者他们不再恢复?波士顿环球报》的这篇文章10辆最频繁的提到”被盗,所有都是在2007年之前,“和信用下降,新的防盗设备,说那些仍偷运往海外(不可能恢复)。

总之,这个时间序列分析表明有更多的不仅仅是时间和地点在犯罪。我们可以处理汽车盗窃报告通过省略数据的变化在2006年之前,但我们会再次重做热图和运行PCA。破窗理论或许不是有用的作为分析的基础。

isRecovered = strfind (vehicle.Descript,“恢复”);%在descrption找到“恢复”isRecovered = ~ cellfun (@ (x) isempty (x) isRecovered);%是恢复如果不是空的(G, t) = findgroups (vehicle.Week (~ isRecovered));%组织每周一次的间隔每周= splitapply (@numel vehicle.Week (~ isRecovered), G);%得到每周数情节(t,每周)%的阴谋每周数持有%不覆盖(G, t) = findgroups (vehicle.Week (isRecovered));%组织每周一次的间隔每周= splitapply (@numel vehicle.Week (isRecovered), G);%得到每周数情节(t,每周)%的阴谋每周数持有%恢复默认标题(车辆盗窃——每周的)%添加标题ylabel (“报告发病率的统计”)%添加轴标签传奇(“UNRECOVRED”,“恢复”)%添加传奇

另一种破碎的窗户

罗兰共享的《纽约时报》的一篇文章旧金山撕裂一些看到街头行为的恶化和我在一起。是打砸抢的起车辆盗窃的崛起从一位当地居民的角度在伦巴第街,曲折而闻名。文章说,受害者往往是游客和外地游客。盗窃或偷窃显然是在上升,这实际上主要来自相关盗窃。

盗窃= T (T。类别= =“盗窃/盗窃”,1 3:5 8:10分);% T按类别子集isAuto = strfind (larceny.Descript,“锁定”);%在descrption找到“锁定”isAuto = ~ cellfun (@ (x) isempty (x) isAuto);%是汽车如果不是空的%的新人物次要情节(1、2、1)% 1次要情节(G, t) = findgroups (larceny.Week (isAuto));%组织每周一次的间隔每周= splitapply (@numel larceny.Week (isAuto), G);%得到每周数情节(t,每周)%的阴谋每周数标题(“盗窃或偷窃,汽车”)%添加标题次要情节(1、2、2)%次要情节2(G, t) = findgroups (larceny.Week (~ isAuto));%组织每周一次的间隔每周= splitapply (@numel larceny.Week (~ isAuto), G);%得到每周数情节(t,每周)%的阴谋每周数标题(盗窃或偷窃,非自动的)%添加标题ylim (500 [0])%调整轴规模持有%恢复默认

当你地图前100名汽车盗窃的位置/盗窃,伦巴第街没有入选,但分布确实看起来不同于车辆盗窃。你看到几个地点附近的著名旅游景点像渔人码头和躯体,以科技公司的浓度。似乎他们追求游客和商务游客不熟悉的地形。现在我们发现影响因素类型的犯罪!

%的新人物usamap (lim。lat, lim.lon);%设置地图坐标geoshow(右)%显示地图topN = 100;%得到最高100持有%不覆盖sfcrime_draw_locs(盗窃(isAuto:), lim.lat, lim.lon,%画出红色nbins topN,“r”)sfcrime_draw_locs(车辆、lim.lat、lim.lon nbins, topN,“b”)%画出蓝色plotm (37.802139, -122.41874,“+ g”)%添加地标plotm (37.808119, -122.41790,“+ g”)%添加地标plotm (37.7808297, -122.4301075,“+ g”)%添加地标plotm (37.7842048, -122.3969652,“+ g”)%添加地标plotm (37.7786559, -122.5106296,“+ g”)%添加地标plotm (37.8038433, -122.4418518,“+ g”)%添加地标持有%恢复默认标题({“盗窃/盗窃-汽车与汽车盗窃”;%添加标题sprintf (“顶级% d位置”topN)}) textm (37.802139, -122.41574,“朗伯德街”,%注释具有里程碑意义的“颜色”,‘g’)textm (37.8141187, -122.43450,渔夫”年代码头,%注释具有里程碑意义的“颜色”,‘g’)textm (37.7808297, -122.4651075,“日本小镇”,%注释具有里程碑意义的“颜色”,‘g’)textm (37.7842048, -122.3949652,“躯体”,%注释具有里程碑意义的“颜色”,‘g’)textm (37.7786559, -122.5086296,“海水浴场”,%注释具有里程碑意义的“颜色”,‘g’)textm (37.8088629, -122.4628518,“滨区”,%注释具有里程碑意义的“颜色”,‘g’)textm (37.715564, -122.475662,%添加注{“红:盗窃罪/盗窃汽车”,蓝色:车辆盗窃的},“写成BackgroundColor”,' w ')

总结

我们看着破窗理论作为起点的探索,但发出数据没有提供很容易被犯罪之间的关联,你会基于这个理论,和时间序列分析表明有更多的不仅仅是时间和地点影响犯罪。当我们专注于特定类型的犯罪正在下降或上升,与外部数据源和交叉引用的那些,我们学到了很多。这指向一个潜力丰富与数据从其他来源如人口统计数据集,提高预测能力,但它也创造了进退两难的人权侵犯如果不认真完成。英国交通警察有创造性的和做了一个有趣的实验“看的眼睛”海报,以阻止自行车盗窃。这是一个很好的创造性的见解从做这种类型的分析。

顺便说一下,我忍不住玩相机在MATLAB图形对象。这是一个有趣的立交桥旧金山犯罪现场的动画!看看sfcrime_flyover.m为更多的细节。

希望你现在看到如何打击犯罪数据。下载这篇文章在标准MATLAB脚本(点击下面的“get MATLAB code_”),把它作为探索的起点,甚至加入Kaggle竞争。如果你发现什么有趣的东西,请让我们知道!

发表与MATLAB®R2016a


  • 打印

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그인하거나계정을새로만드십시오。