还是有点懒,本应早点写第二集。按类型去分析数据并没有得到规律性的东西。我们再来看看元数据。
Dates是案件发生的时间,案件是否具有时间规律,随着时间在增长或者减少呢?
基于这个思路,创建以时间为index的DataFrame,其中index选用数据中的\’Dates\’列作为index,为方便按时间操作,将\’Dates\’列转换为DatetimeIndex类型。
按年月日格式化时间key,按key进行分类,我们得到每日发生的案件统计走势图。
# -*- coding: utf-8 -*-
__author__ = \'longtaiye\'
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#读取数据
df = pd.read_csv(\'/Users/longtaiye/Documents/ml-learn/train.csv\')
#设置pandas打印格式
pd.set_option(\'display.width\', 300)
#以日期为index创建新的DataFrame
dateDF = pd.DataFrame(np.asarray(df), index=pd.to_datetime(df[\'Dates\']), columns=df.columns)
#按年月日统计案件发生规律
key1 = lambda x:x.strftime(\"%Y-%m-%d\")
dateDF[\'Category\'].groupby(key1).count().plot(figsize=(26, 10))
plt.show()
依照相同的方法可以得到时走势、日走势、月走势、年走势图,从图上看并没有什么规律性。
时走势图
日走势图
月走势图
年走势图
上面的分析表明,单纯的时间趋势并不存在,那么在限定其它因素情况下的时间走势关系是否存在呢?
我们先从警区入手。按警区划分案件,然后统计每个警区的案件走势。
# -*- coding: utf-8 -*-
__author__ = \'longtaiye\'
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv(\'/Users/longtaiye/Documents/ml-learn/train.csv\')
pd.set_option(\'display.width\', 300)
dateDF = pd.DataFrame(np.asarray(df), index=pd.to_datetime(df[\'Dates\']), columns=df.columns)
#按警区划分
groups = dateDF.groupby(\'PdDistrict\')
ii = 1
key = lambda x:x.strftime(\"%Y\")
plt.figure(figsize=(20, 12))
for name, group in groups:
subplot = plt.subplot(4, 4, ii)
subplot.plot(group.groupby(key).count())
plt.title(name)
ii+=1
plt.show()
按警区按年的案件走势
按星期几按年的案件走势
这两张图也并没有太多的规律,但下面这张图让我们看到了一丝希望。如BAD CHECK类型但案件时逐年降低的。
按类型按年的案件走势