数据来源为kaggle:https://www.kaggle.com/jameslko/gun-violence-data
主要分析13-18年美国枪支暴力事件的特征,以及使用时间序列预测下一年枪支暴力事件发生数量。
主要用到以下数据包
Basemap是python中一个利用地图的库
plotly是开挂的作图神器,可以供js, python, R, DB等使用
Seaborn是基于matplotlib的python数据可视化库,提供更高层次的API封装,使用起来更加方便快捷。
Fbprophet :facebook开源的时间序列预测框架prophet,目前支持R语言和python语言。托管在github上:https://github.com/facebookincubator/prophet。
wordcloud 生成词云
nltk.corpus 自带词袋中的停用词表去英文停用词
导入数据包
#数据基础操作
import pandas as pd # package for high-performance, easy-to-use data structures and data analysis
import numpy as np # fundamental package for scientific computing with Python
#画图
import matplotlib
import matplotlib.pyplot as plt # for plotting
import seaborn as sns # for making plots with seaborn
color = sns.color_palette()
from plotly.offline import init_notebook_mode, iplot,plot
init_notebook_mode(connected=True)
import plotly.graph_objs as go
import squarify
from numpy import array
from matplotlib import cm
'''
数据处理包
'''
from sklearn import preprocessing
import warnings
warnings.filterwarnings("ignore")
from nltk.corpus import stopwords
from textblob import TextBlob
import datetime as dt
import warnings
import string
import time
stop_words = list(set(stopwords.words('english')))
warnings.filterwarnings('ignore')
punctuation = string.punctuation
查看数据
df=pd.read_csv('gun-violence-data_01-2013_03-2018.csv',parse_dates = ['date'])
df.head()
数据集维度
#数据集维度
df.shape
#(239677, 29)
数据为空的数量
#数据为空的数量
df.isnull().sum()
可以看出某些特征中空值特别多,但我们后面又没有用到,所以就不管它了。
数据预处理
#增加特征
# Create some additional features
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['monthday'] = df['date'].dt.day
df['weekday'] = df['date'].dt.weekday
df['loss'] = df['n_killed'] + df['n_injured']
try :
df.drop(['incident_id', 'incident_url', 'source_url', 'incident_url_fields_missing', 'sources','participant_name'], axis=1, inplace=True)
#去掉2013年数据
df=df.loc[df['date'].dt.year!=2013]
except :
print('process finish')
df.head()