From 87096937a059b404ff4301728fb292b42971316e Mon Sep 17 00:00:00 2001 From: vedant9999 <53965672+vedant9999@users.noreply.github.com> Date: Thu, 1 Oct 2020 00:52:52 +0530 Subject: [PATCH 1/2] Updated Added following points: 1.Added bar plots to know relations between that column and crime count 2.Added some functions to get more idea about data 3.Dropped na values 4.Added comments Thanking you --- predicting_crime.py | 108 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 105 insertions(+), 3 deletions(-) diff --git a/predicting_crime.py b/predicting_crime.py index 4132bf8..0f96f03 100644 --- a/predicting_crime.py +++ b/predicting_crime.py @@ -1,6 +1,8 @@ - #--------------------------------------------------# + + + #1) IMPORT LIBRARIES #Computation and Structuring: @@ -23,7 +25,100 @@ #2) DATA IMPORT AND PRE-PROCESSING #import full data set -df = pd.read_csv('MCI_2014_to_2017.csv',sep=',') +# data=pd.read_csv("D:\\dataset\\Crime\\Merged_data_crime.csv") + +df = pd.read_csv('D:\\ved\\dataset\\Crime\\Merged_data_crime.csv') + + +# Lets understand how's our data +# columns and datatypes +print(df.dtypes) + +# to get more idea about na values +print(df.isna().sum()) + +# once we get idea about na values we can drop it.it would give results +df = df.dropna(axis=0) + + + +# to know min,max,mean about columns + +print(df.describe()) + + + +# This is bar plot which tells about how occurrencehour is related to crime +# on x axis--> grouped hours +# on Y-axis-->crime count + +hour_freq=pd.DataFrame(df.groupby(['occurrencehour']).size()) +count_column = list(hour_freq.iloc[:, 0]) +second_column=[str(i-2)+"-"+str(i) for i in range(2,24,3)] +count_frq=[] +for i in range(0,22,3): + temp=count_column[i]+count_column[i+1]+count_column[i+2] + count_frq.append(temp) + + + + +import matplotlib.pyplot as plt +fig = plt.figure() +ax = fig.add_axes([1,1,1,1]) +day_time = second_column +commied_crime = count_frq +ax.bar(day_time,commied_crime) +plt.show() + + + + +# This is bar plot which tells about how occurrencemonth is related to crime +# on x axis--> months +# on Y-axis-->crime count + +month_freq=pd.DataFrame(df.groupby(['occurrencemonth']).size()) +month_count = list(month_freq.iloc[:, 0]) +mon_second_column=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sept","Oct","Nov","Dec"] + + + +import matplotlib.pyplot as plt +fig = plt.figure() +ax = fig.add_axes([1,1,1,1]) +# day_time = second_column +# commied_crime = count_frq +ax.bar(mon_second_column,month_count) +plt.show() + + +# This is bar plot which tells about how occurrenceyear is related to crime +# on x axis--> year +# on Y-axis-->crime count + +# we can use linear regression to predict crime count in current year + +year_freq=pd.DataFrame(df.groupby(['occurrenceyear']).size()) +year_count = list(year_freq.iloc[:, 0]) +year_second_column=[str(i) for i in range(2000,2020)] + + + +import matplotlib.pyplot as plt +fig = plt.figure() +ax = fig.add_axes([2,2,2,2]) +# day_time = second_column +# commied_crime = count_frq +ax.bar(year_second_column,year_count) +# ax.bar(year_count,year_second_column) +plt.show() + + + + + + #list of relevant columns for model col_list = ['occurrenceyear', 'occurrencemonth','occurrenceday','occurrencedayofyear','occurrencedayofweek','occurrencehour','MCI', 'Division', 'Hood_ID','premisetype'] @@ -98,7 +193,7 @@ #set X and Y: X = df2.drop(['MCI'],axis=1).values #sets x and converts to an array -print(X.head()) +# print(X.head()) y = df2['MCI'].values #sets y and converts to an array @@ -161,3 +256,10 @@ print(accuracy_score(y_test_OH, y_pred_OH)) #modest improvement to 0.648 print(confusion_matrix(y_test_OH, y_pred_OH)) print(classification_report(y_test_OH,y_pred_OH, target_names=definition_list_MCI)) + + + +# We have Homicides dataset too ,so we can take that dataset also. +# we can take mode of all model result ,It probably give the better accuracy . +# In short it would be great if we calculate results by considering all models. +# Thanking you From 4aa721796f8a2bcb7bdb2a5d62aa43d8302c4ab2 Mon Sep 17 00:00:00 2001 From: vedant9999 <53965672+vedant9999@users.noreply.github.com> Date: Thu, 1 Oct 2020 01:08:42 +0530 Subject: [PATCH 2/2] Graph files added Graph files added --- Data_Visualization_crime_hour_graph.png | Bin 0 -> 6530 bytes Data_Visualization_crime_month_graph.png | Bin 0 -> 7083 bytes Data_Visualization_crime_year_graph.png | Bin 0 -> 10124 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Data_Visualization_crime_hour_graph.png create mode 100644 Data_Visualization_crime_month_graph.png create mode 100644 Data_Visualization_crime_year_graph.png diff --git a/Data_Visualization_crime_hour_graph.png b/Data_Visualization_crime_hour_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..1ffc16b5bc523682e1598255d44c60e9e378ce7a GIT binary patch literal 6530 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 D{whex literal 0 HcmV?d00001 diff --git a/Data_Visualization_crime_month_graph.png b/Data_Visualization_crime_month_graph.png new file mode 100644 index 0000000000000000000000000000000000000000..c97659e135404d87a9e4801df8e91096fddea37c GIT binary patch literal 7083 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