沙坡村职业技术学院大数据课程芝加哥犯罪记录与天气分析

初学者,代码较乱,还请见谅。所有数据均来自网络上已发布。

芝加哥犯罪数据与天气数据分析

提交方式:Jupyter notebook .ipynb文件 或.py文件 或 Word/PDF报告 QQ/微信/邮箱: lixiang@xjtu.edu.cn 命名规则: 

分析2001-2014年间芝加哥天气与犯罪数据,提示:

1. 分析天气与犯罪数据各自的统计信息

2. 针对天气与犯罪数据分别画出随时间波动的曲线图 (以年、月、日或每小时为度量)

3. 分析犯罪与天气数据的相关性 (不同温度下的犯罪数量、不同湿度下的犯罪信息等)

4. 分析形式不限,数据挖掘角度不限,信息提取方式不限

5. 给出程序代码及相应输出值、结果图,配有简单描

一.最终结果图:

下面是结果图的展示:

      其次是犯人的家庭情况与是否被捕的情况,可以看出:伤人犯与杀人犯都有大部分未逮捕, 由此可见该市公共管理与治安非常不到位,但是杀人犯被逮捕的比率远大于伤人犯。其次, 犯人大部分都没有家庭。

 此题我们统计了温度等天气情况在 2013 年随事件的变化:

  以下是各种犯人在 2001-2014 年之 间数量的变化情况,在 2014 年处我们发现有很大的突变,推测有可能是数据并没有统计到 2014 年末尾,但是从前几年的数据来看,可以发现在 04 年犯罪数量有较为明显的下降,可 以推测有可能是城市治安能力有所提升。

在本题我只统计了 2013 年的杀人案件的相关情况(由于伤人案件 assault 数据太多了,电脑 算不了了,代码也没有优化),在下面第一个画布中,图一是有关于温度的,可以看出,在 20-30 华氏度(-6.7-负 1.1 摄氏度)与 70-80 华氏度(21-27 摄氏度)两种情况下,以及湿 度未 80%情况下,杀人案件发生较多,可多加防范。 

 在画布 2 中显示的是在特殊天气(雨雪,冰雹等)情况下,平均每天发生案件数量,明显看 出,在特殊天气下,发生杀人案件概率较大,治安部门应多加防范。

二.代码

#-*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

wt = pd.read_csv(r'C:\Users\15645\Desktop\西交\python\芝加哥数据\weather.csv')#weather天气
md = pd.read_csv(r'C:\Users\15645\Desktop\西交\python\芝加哥数据\murder.csv')#谋杀案件
aut =pd.read_csv(r'C:\Users\15645\Desktop\西交\python\芝加哥数据\assault.csv')#伤人案件

pd.set_option('display.max_columns', 100)#显示最大列数
pd.set_option('display.width', 500) # 设置打印宽度(**重要**)


wt.rename(columns={'Unnamed: 0':'Time'},inplace=True)
wt['Time'] = pd.to_datetime(wt['Time'])
# print(wt.info())
# print("\n")
# print(md.head())
# print("\n")
# print(aut.head())
# print("\n")

#第二题,查看2013年内从年初到年尾各种天气数据随到年初的时间变化曲线
wt2013 = wt[wt['Time'].dt.year==2013]#dt是pandas一个库
# 将数据提取出作为坐标,将数值转化为int型,datetime类型转化为string类型
day = wt2013

Temp = day['Mean TemperatureF']
Dew = day['MeanDew PointF']
Vis = day[' Mean VisibilityMiles']
cloud = day[' CloudCover']
# date = np.array(day['Time'].astype(str))
fig11 = plt.figure()
pic1 = fig11.add_subplot()
pic1.plot(range(1,366), Temp, label ='温度')
pic1.plot(range(1,366), Dew,'r', label ='露点')
pic1.plot(range(1,366), Vis,'g', label ='能见度')
pic1.plot(range(1,366), cloud,'y' , label ='云量')
pic1.set_title('各种天气数据在2013.1.1-2013.12.31之间的变化情况')
pic1.set_xlabel('1.1-12.30')
pic1.grid()
pic1.legend()

#print(wt.duplicated().sum())
# a = (wt['Mean TemperatureF']-wt['Mean TemperatureF'].mean())/wt['Mean TemperatureF'].std()
#print(wt[a.abs()>3].index)
print("\n")

#第一题
#案件的大概情况,比如犯人的自身情况,以及各种案件在芝加哥的位置分布
fig0 = plt.figure()#画布1

data1 = aut[aut['Arrest']==True].shape[0]/aut.shape[0]
ax3 = fig0.add_subplot(221)
ax3.pie(x=[1-data1,data1],labels=[ 'No', 'Yes'], autopct='%.2f%%',explode=(0, 0.1))
ax3.set_title('伤人犯是否被逮捕')
data2 = aut[aut['Domestic']==True].shape[0]/aut.shape[0]
ax4 = fig0.add_subplot(222)
ax4.pie(x=[data2,1-data2],labels=['Yes', 'No'], autopct='%.2f%%',explode=(0.1, 0))
ax4.set_title('伤人犯是否有家庭')

data3 = md[md['Arrest']==True].shape[0]/md.shape[0]
ax5 = fig0.add_subplot(223)
ax5.pie(x=[1-data3,data3],labels=[ 'No', 'Yes'], autopct='%.2f%%',explode=(0, 0.1))
ax5.set_title('杀人犯是否被逮捕')
data4 = md[md['Domestic']==True].shape[0]/md.shape[0]
ax6 = fig0.add_subplot(224)
ax6.pie(x=[data4,1-data4],labels=['Yes', 'No'], autopct='%.2f%%',explode=(0.1, 0))
ax6.set_title('杀人犯是否有家庭')

fig = plt.figure(figsize=(5, 8.5))#画布2
ax1=fig.add_subplot(211)
ax2 = fig.add_subplot(212)
ax1.scatter(aut['Longitude'], aut['Latitude'], s = 1, c = 'r', alpha=0.7 )
ax2.scatter(md['Longitude'], md['Latitude'], s = 2, alpha=0.7)
ax1.set_title('伤人案件分布')
ax2.set_title('杀人案件分布')

list1=[]
for i in range(2001,2015):
    num = md[md['Year'] == i].shape[0]
    list1.append(num)
fig1 = plt.figure(figsize=(6,9))
ax7 = fig1.add_subplot(211)
x1 = range(2001,2015)
ax7.bar(x=x1, height=list1, color='orchid')#柱状图
ax7.set_title('01-14年杀人犯数量')
ax7.set_ylabel('数量/个')
ax7.set_xlabel('年份')

#第二题,案件数量随时间变化情况
list2 = []
for i in range(2001, 2015):
    num1 = aut[aut['Year'] == i].shape[0]
    list2.append(num1)
ax8 = fig1.add_subplot(212)
ax8.bar(x=x1, height=list2,color='teal')  # 柱状图
ax8.set_title('01-14年伤人犯数量')
ax8.set_ylabel('数量/个')
ax8.set_xlabel('年份')


# print(wt.shape)
time = wt[wt.iloc[:,-2].notnull()==True]['Time']
# print(time)
# print('\n')

#第三题,只画出了温度与湿度对杀人案件数量的影响分布
md2013 = md[md['Year']==2013]
md2013 = md2013.sort_values('Updated On')
# print(md2013.head())
# print(wt2013.head())
# print('\n')
md2013['Updated On'] = pd.to_datetime(md2013['Updated On'])
# print(md2013['Updated On'].dt.day.values[0])
md2013['温度']=0
md2013['平均湿度']=0
md2013['事件']='a'

for k in range(0,wt2013.shape[0]):
    if wt2013['Events'].values[k] is np.nan:
        wt2013['Events'].values[k]=0

for i in range(0,md2013.shape[0]):
    mdday = md2013['Updated On'].dt.day.values[i]
    mdmonth = md2013['Updated On'].dt.month.values[i]
    for j in range(0,wt2013.shape[0]):
        wtday = wt2013['Time'].dt.day.values[j]
        wtmonth = wt2013['Time'].dt.month.values[j]
        if mdday==wtday and mdmonth==wtmonth:
            md2013['温度'].values[i] = wt2013['Mean TemperatureF'].values[j]
            md2013['平均湿度'].values[i] = wt2013[' Mean Humidity'].values[j]
            md2013['事件'].values[i] = wt2013['Events'].values[j]
            break

# print(md2013['平均湿度'].max())
# print(md2013['平均湿度'].min())
list=[0]
list1=[0]
for i in range(1,10):
    list.append(md2013[md2013['温度']<=10*i].shape[0])

for i in range(4,11):
    list1.append(md2013[md2013['平均湿度']<=10*i].shape[0])

m = np.array(list)
mm = m[1:]-m[:-1]
a = np.linspace(10,90,9)

m1 = np.array(list1)
mm1 = m1[1:]-m1[:-1]
a1 = np.linspace(40,100,7)
# print(mm1)

event = md2013[md2013['事件']!=0].shape[0]#在特殊天气作案的总人数
evday = wt2013[wt2013['Events']!=0].shape[0]#特殊天气天数
Noevent = md2013.shape[0]-event
Noevday = wt2013.shape[0]-evday
Yp1 = event/evday
Np1 = Noevent/Noevday
# print(evday)
# print(event)

fig12 = plt.figure(figsize=(5.5,8.5))
pic2 = fig12.add_subplot(211)
pic2.bar(x=a, height=mm, width=5, color='r',edgecolor='b')
pic2.set_title('2013年不同温度下杀人案件数量')
pic2.set_xlabel('华氏度/F')
pic2.set_ylabel('数量/个')
pic3 = fig12.add_subplot(212)
pic3.bar(x=a1,height=mm1,width=5,color='g',edgecolor='k')
pic3.set_title('2013年不同湿度下杀人案件数量')
pic3.set_xlabel('湿度')
pic3.set_ylabel('数量/个')

fig13 = plt.figure()
pic4 =fig13.add_subplot()
pic4.bar(x=['正常天气','特殊天气'],height=[Np1,Yp1],width=0.5,color=['teal','r'])
pic4.set_title('2013年在是否是特殊天气(下雨,雪)的情况下,平均每天发生杀人案件的数量')

# print(md2013.head())
plt.show()#显示

三.数据文件:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值