本文灵感来源于Kaggle比赛-旧金山犯罪预测。小编感觉在犯罪打击上面,数据可视化能够很好的做到犯罪打击,给公安机关提供良好的分析依据和可视化的预警效果。因为犯罪数据基本上不公开,我们本文用到的是Kaggle比赛里面提供的旧金山2015年犯罪的开源数据。
话不多说,直接上干货!
本文使用的是jupyter Notebook。大家可以下载Anaconda,里面自带jupyter Notebook,以后做数据分析常用这个工具。
#下面导入我们常用的python数据分析库
import pandas as pd
import numpy as np
import os
#打开指定路径的文件夹,并读取csv文件train.csv
os.chdir("/Users/Administrator/Desktop/比赛素材/旧金山犯罪分类预测")
data=pd.read_csv("train.csv")
我们直接查看前5行的信息,这个时候你会发现全是英文的,这可以对我们之后分析有一点影响,我们直接强行改成中文。
#强行修改列名改成中文
data.columns=["日期","犯罪类型","犯罪描述","星期","所属街区","处理结果","犯罪地址","经度","纬度"]
#查看一下改完之后的样子
data.head()
#效果如下
从表格中我们看出,犯罪类型特别的多,接下来我们可视化一下数据,看一下各种犯罪类型的分布情况。
这里我们可以看出犯罪率最高的几种和犯罪率最低的几种分别是哪些类型。但是这些数据我们只是看到了哪些犯罪的类型多,好做出一些措施,但是不能为政府和公安机关等部门做出很好的预警效果。接下来打算利用热力地图的方式来做犯罪预警。
下面我们利用DRUNKENNESS酒醉犯罪类型来做预警展示。
#筛选犯罪类型中的所有酒醉的犯罪类型
temp=data.loc[data["犯罪类型"]=="DRUNKENNESS"]
temp.head()
#效果如下
现在都变成了DRUNKENNESS的犯罪类型了。接下来我们对DRUNKENNESS犯罪类型做一些深度的挖掘分析。
#看一下是什么原因造成的酒醉犯罪
temp["犯罪描述"].value_counts()
#结果如下
UNDER INFLUENCE OF ALCOHOL IN A PUBLIC PLACE 4280
Name: 犯罪描述, dtype: int64
我们不难发现全是一种描述,但是我们需要可视化来看一下数据分布。
data2=list(temp["犯罪描述"])
plt.figure(figsize=(7,5))
plt.hist(data2,bins=15,color="purple")
plt.xlabel("Description of crime",fontsize=15)
plt.ylabel("Number of times",fontsize=15)
plt.title("Distribution",fontsize=18)
plt.show()
这样很明显看到,犯罪描述全是“UNDER INFLUENCE OF ALCOHOL IN A PUBLIC PLACE”。
下面我们再看一下其他因素。
#看一下“星期”和犯罪分布关系
temp["星期"].value_counts()
#结果如下
Saturday 833
Sunday 813
Friday 622
Wednesday 542
Monday 513
Thursday 496
Tuesday 461
Name: 星期, dtype: int64
text=list(temp["星期"])
plt.figure(figsize=(7,5))
plt.hist(text,bins=15,color="purple")
plt.xlabel("Time",fontsize=15)
plt.ylabel("Number of times",fontsize=15)
plt.title("Distribution",fontsize=18)
plt.show()
temp["所属街区"].value_counts()
#结果如下
SOUTHERN 959
MISSION 782
CENTRAL 517
TENDERLOIN 439
PARK 374
NORTHERN 368
TARAVAL 259
BAYVIEW 243
INGLESIDE 190
RICHMOND 149
Name: 所属街区, dtype: int64
data3=list(temp["所属街区"])
plt.figure(figsize=(12,5))
plt.hist(data3,bins=15,color="purple")
plt.xlabel("Time",fontsize=15)
plt.ylabel("Number of times",fontsize=15)
plt.title("Distribution",fontsize=18)
plt.show()
接下来我们需要把这些数据用热力图的方式呈现地图上,我们就需要把这些地点的经纬度给单独提出来。
#选取酒醉犯罪的经度和纬度
col=["经度","纬度"]
temp=pd.DataFrame(temp,columns=col)
temp.head()
#效果如下
接下来就是将这些经纬度保存成csv格式的文件,并且是encoding="utf-8"格式文件。
temp.to_csv("/Users/Administrator/Desktop/比赛素材/酒醉犯罪new.csv",encoding="utf-8")
到这里已经成功了一半,接下来最重要的就是Heatmap的地图展示了。这边尝试了百度地图开放平台接口(2月份刚刚下架了),只能尝试高德的了,但是发现一个重要的问题(高德地图没有国外的地图,只有国内的),腾讯地图也不行,无奈只能用谷歌地图了。具体谷歌地图怎么用就展示不给大家展示了,最后给大家简单看一下效果。
以上是从这里是热力图的部分截图,这样能清晰的看出哪些街道的哪些区域的酒醉犯罪率更高了,这样能够给各个部门做出很好的可视化预警的效果。好了就先给大家分享到这里。