Tuesday, April 11, 2017

台北市住宅竊盜件數統計資料分析篇

台北市住宅竊盜件數統計資料分析篇

台北市住宅竊盜點位資訊

104年01月-106年02月

資料來源:臺北市政府警察局刑事警察大隊

資料最後更新時間:2017-03-13 19:56:55

資料連結

1. 資料擷取與匯入

In [1]:
# 首先先將資料(.csv檔)讀入
#
import pandas as pd
df = pd.read_csv("台北市10401-10602住宅竊盜點位資訊.csv", encoding='big5')
print('筆數', df.count())
df[:10]
筆數 編號      1293
案類      1293
發生日期    1293
發生時段    1293
發生地點    1293
dtype: int64
Out[1]:
編號 案類 發生日期 發生時段 發生地點
0 1 住宅竊盜 970609 01~03 台北市信義區松隆里松山路615巷1 ~ 30號
1 2 住宅竊盜 991013 22~24 台北市內湖區成功路4段331 ~ 360號
2 3 住宅竊盜 991024 13~15 台北市南港區東新里興南街52巷1 ~ 30號
3 4 住宅竊盜 1010601 07~09 台北市大安區誠安里忠孝東路3段251巷10弄1 ~ 30號
4 5 住宅竊盜 1010606 10~12 台北市中山區通北街65巷2弄1 ~ 30號
5 6 住宅竊盜 1010728 22~24 台北市萬華區萬大路486巷37弄61 ~ 90號
6 7 住宅竊盜 1020101 19~21 台北市大同區雙連里萬全街103巷
7 8 住宅竊盜 1020108 07~09 台北市中山區吉林路200巷23之1 ~ 30號
8 9 住宅竊盜 1021201 10~12 台北市大安區黎孝里和平東路3段308巷1弄1 ~ 30號
9 10 住宅竊盜 1030102 10~12 台北市文山區景美里育英街1 ~ 30號

2. 資料預處理

In [2]:
# 資料清理
# 由檔案結構可知,「案類」欄的資料都是"住宅竊盜",所以可以刪除之。
# 
del df['案類']
df[:10]
Out[2]:
編號 發生日期 發生時段 發生地點
0 1 970609 01~03 台北市信義區松隆里松山路615巷1 ~ 30號
1 2 991013 22~24 台北市內湖區成功路4段331 ~ 360號
2 3 991024 13~15 台北市南港區東新里興南街52巷1 ~ 30號
3 4 1010601 07~09 台北市大安區誠安里忠孝東路3段251巷10弄1 ~ 30號
4 5 1010606 10~12 台北市中山區通北街65巷2弄1 ~ 30號
5 6 1010728 22~24 台北市萬華區萬大路486巷37弄61 ~ 90號
6 7 1020101 19~21 台北市大同區雙連里萬全街103巷
7 8 1020108 07~09 台北市中山區吉林路200巷23之1 ~ 30號
8 9 1021201 10~12 台北市大安區黎孝里和平東路3段308巷1弄1 ~ 30號
9 10 1030102 10~12 台北市文山區景美里育英街1 ~ 30號


In [3]:
# 我們可以利用'發生地點'產生'發生地點行政區',藉此以行政區為基準做出統計資料。
# 以 df['發生地點']中字串之第4~6個字,作為 df['發生地點行政區']之內容。
#
for i in range(len(df)):
    # df[i:i+1]['發生地點行政區'] = df['發生地點'][i][3:6]
    df.loc[i,'發生地點行政區'] = df['發生地點'][i][3:6]
df[:10]
Out[3]:
編號 發生日期 發生時段 發生地點 發生地點行政區
0 1 970609 01~03 台北市信義區松隆里松山路615巷1 ~ 30號 信義區
1 2 991013 22~24 台北市內湖區成功路4段331 ~ 360號 內湖區
2 3 991024 13~15 台北市南港區東新里興南街52巷1 ~ 30號 南港區
3 4 1010601 07~09 台北市大安區誠安里忠孝東路3段251巷10弄1 ~ 30號 大安區
4 5 1010606 10~12 台北市中山區通北街65巷2弄1 ~ 30號 中山區
5 6 1010728 22~24 台北市萬華區萬大路486巷37弄61 ~ 90號 萬華區
6 7 1020101 19~21 台北市大同區雙連里萬全街103巷 大同區
7 8 1020108 07~09 台北市中山區吉林路200巷23之1 ~ 30號 中山區
8 9 1021201 10~12 台北市大安區黎孝里和平東路3段308巷1弄1 ~ 30號 大安區
9 10 1030102 10~12 台北市文山區景美里育英街1 ~ 30號 文山區
In [4]:
# 去除 '發生地點' 欄位    
del df['發生地點']
df[:10]
Out[4]:
編號 發生日期 發生時段 發生地點行政區
0 1 970609 01~03 信義區
1 2 991013 22~24 內湖區
2 3 991024 13~15 南港區
3 4 1010601 07~09 大安區
4 5 1010606 10~12 中山區
5 6 1010728 22~24 萬華區
6 7 1020101 19~21 大同區
7 8 1020108 07~09 中山區
8 9 1021201 10~12 大安區
9 10 1030102 10~12 文山區

3. 聚合函數、樞紐分析圖

聚合函數

A. 得出在每個行政區、在 101年06月06日 ~ 106年2月27日之間,每日發生的住宅竊盜件數

In [5]:
# 聚合函數
# A. 得出在每個行政區、在 101年06月06日 ~ 106年2月27日之間,每日發生的住宅竊盜件數
#
df2 = df.groupby(['發生地點行政區','發生日期']).count()
del df2['發生時段']
df2 = df2.rename(columns = {'編號':'件數'})
df2[:15]
Out[5]:
件數
發生地點行政區 發生日期
中山區 1010606 1
1020108 1
1040101 1
1040102 1
1040105 1
1040109 1
1040121 2
1040127 2
1040204 1
1040206 1
1040213 2
1040215 1
1040328 1
1040330 1
1040401 1
In [6]:
# 長條圖
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')
plt.rcParams['font.family'] = 'SimHei'

df2.plot(kind='bar', title='在每個行政區、在 97年06月09日 ~ 106年2月27日之間,每日發生的住宅竊盜件數', figsize=(400,10))
Out[6]:
<matplotlib.axes._subplots.AxesSubplot at 0x1149710b8>
In [7]:
# 聚合函數
# B. 得出在 97年06月09日 ~ 106年2月27日之間,不同時段發生的住宅竊盜件數
#    df_ti (time inmterval)
#
df_ti = df.groupby('發生時段').count()
del df_ti['發生日期'],df_ti['發生地點行政區']
df_ti = df_ti.rename(columns = {'編號':'件數'})
df_ti['比率'] = round(df_ti['件數']/df_ti['件數'].sum()*100, 2)
df_ti
Out[7]:
件數 比率
發生時段
01~03 123 9.51
04~06 98 7.58
07~09 166 12.84
10~12 222 17.17
13~15 179 13.84
16~18 160 12.37
19~21 176 13.61
22~24 169 13.07
In [8]:
# 長條圖
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')
plt.rcParams['font.family'] = 'SimHei'

df_ti.sort_values(by='件數', ascending=False).plot(kind='bar', title='台北市 97年06月09日 ~ 106年2月27日之間,不同時段發生的住宅竊盜件數', figsize=(10,5), fontsize=19)
Out[8]:
<matplotlib.axes._subplots.AxesSubplot at 0x116ff6da0>
In [9]:
# C. 樞紐分析表
#
df_pt = df.pivot_table(values='編號',index='發生日期', columns='發生地點行政區', aggfunc='count',fill_value='0')
print('台北市 97年06月09日 ~ 106年2月27日之間,各行政區發生的住宅竊盜件數')
df_pt[:10]
台北市 97年06月09日 ~ 106年2月27日之間,各行政區發生的住宅竊盜件數
Out[9]:
發生地點行政區 中山區 中正區 信義區 內湖區 北投區 南港區 士林區 大同區 大安區 文山區 松山區 萬華區
發生日期
970609 0 0 1 0 0 0 0 0 0 0 0 0
991013 0 0 0 1 0 0 0 0 0 0 0 0
991024 0 0 0 0 0 1 0 0 0 0 0 0
1010601 0 0 0 0 0 0 0 0 1 0 0 0
1010606 1 0 0 0 0 0 0 0 0 0 0 0
1010728 0 0 0 0 0 0 0 0 0 0 0 1
1020101 0 0 0 0 0 0 0 1 0 0 0 0
1020108 1 0 0 0 0 0 0 0 0 0 0 0
1021201 0 0 0 0 0 0 0 0 1 0 0 0
1030102 0 0 0 0 0 0 0 0 0 1 0 0
In [43]:
# D. 樞紐分析表 2
#
df_pt2 = df.pivot_table(values='編號',index='發生時段', columns='發生地點行政區', aggfunc='count',fill_value='0')
print('台北市 97年06月09日 ~ 106年2月27日之間,各行政區相對於發生時段的住宅竊盜件數')
df_pt2.head()
台北市 97年06月09日 ~ 106年2月27日之間,各行政區相對於發生時段的住宅竊盜件數
Out[43]:
發生地點行政區 中山區 中正區 信義區 內湖區 北投區 南港區 士林區 大同區 大安區 文山區 松山區 萬華區
發生時段
01~03 22 11 7 8 14 3 16 7 8 9 6 12
04~06 14 7 10 14 12 3 6 6 5 7 3 11
07~09 24 13 8 18 10 10 14 9 16 11 16 17
10~12 22 17 10 21 24 10 19 8 27 16 28 20
13~15 17 9 15 21 23 5 22 12 17 13 10 15
In [46]:
df_pt2.plot(kind='area', title='台北市 97年06月09日 ~ 106年2月27日之間,各行政區相對於發生時段的住宅竊盜件數 (堆疊面積圖)', figsize=(15,10), fontsize=17)
Out[46]:
<matplotlib.axes._subplots.AxesSubplot at 0x138f212e8>

4. 資料分析⽅法

In [10]:
# A. 統計分析
# 各行政區住宅竊盜件數總和及統計
#
df3 = df.groupby('發生地點行政區').count()
del df3['發生日期'],df3['發生時段']
df3 = df3.rename(columns = {'編號':'件數'})
df3 = df3.sort_values('件數', ascending=False)
df3['比率'] = round(df3['件數']/df3['件數'].sum()*100, 2)
df3
Out[10]:
件數 比率
發生地點行政區
中山區 177 13.69
士林區 140 10.83
內湖區 130 10.05
北投區 129 9.98
萬華區 124 9.59
大安區 113 8.74
中正區 96 7.42
松山區 96 7.42
文山區 92 7.12
信義區 82 6.34
大同區 59 4.56
南港區 55 4.25
In [11]:
# 平均、最大、最小
#
print('最多件數', df3['件數'].max())
print('最少件數', df3['件數'].min())
print('平均件數', df3['件數'].mean())
最多件數 177
最少件數 55
平均件數 107.75
In [12]:
df3.plot(kind='bar', title='台北市住宅竊盜件數長條圖 (97年06月09日 ~ 106年2月27日)', fontsize=15, figsize=(15,5))
Out[12]:
<matplotlib.axes._subplots.AxesSubplot at 0x117881a90>
In [13]:
df3['件數'].plot(kind='pie', title='台北市住宅竊盜件數圓餅圖 (97年06月09日 ~ 106年2月27日)', autopct='%1.1f%%', startangle=270, fontsize=14, figsize=(10,10))
Out[13]:
<matplotlib.axes._subplots.AxesSubplot at 0x116f90f60>
In [14]:
# B. 時間序列分析
# df_ts (time series)
df_ts = df.groupby('發生日期').count()
del df_ts['發生時段'],df_ts['發生地點行政區']
df_ts = df_ts.rename(columns = {'編號':'件數'})
df_ts[:10]
Out[14]:
件數
發生日期
970609 1
991013 1
991024 1
1010601 1
1010606 1
1010728 1
1020101 1
1020108 1
1021201 1
1030102 1
In [15]:
df_ts['發生日期'] = df_ts.index + 19110000 # 轉換民國年為西元年
df_ts[:10]
Out[15]:
件數 發生日期
發生日期
970609 1 20080609
991013 1 20101013
991024 1 20101024
1010601 1 20120601
1010606 1 20120606
1010728 1 20120728
1020101 1 20130101
1020108 1 20130108
1021201 1 20131201
1030102 1 20140102
In [16]:
df_ts = df_ts.set_index(df_ts['發生日期'], drop=True)
del df_ts['發生日期']
df_ts[:10]
Out[16]:
件數
發生日期
20080609 1
20101013 1
20101024 1
20120601 1
20120606 1
20120728 1
20130101 1
20130108 1
20131201 1
20140102 1
In [17]:
df_ts.index = pd.to_datetime(df_ts.index, format='%Y%m%d')
In [18]:
type(df_ts.index)
Out[18]:
pandas.tseries.index.DatetimeIndex
In [19]:
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')
plt.rcParams['font.family'] = 'SimHei'

df_ts.plot(kind='line', figsize=(15,5), fontsize=17)
Out[19]:
<matplotlib.axes._subplots.AxesSubplot at 0x11871c828>
In [20]:
# 以年計算
df_ts2 = df_ts.groupby(df_ts.index.year).count()
df_ts2
Out[20]:
件數
2008 1
2010 2
2012 3
2013 3
2014 3
2015 287
2016 306
2017 33
In [21]:
df_ts2.plot(kind='line', figsize=(15,5), fontsize=17)
Out[21]:
<matplotlib.axes._subplots.AxesSubplot at 0x11860a780>
In [22]:
# 以季區分
df_ts_Q = df_ts.resample('Q-DEC').count()
df_ts_Q[df_ts_Q.index.year > 2014]
Out[22]:
件數
發生日期
2015-03-31 73
2015-06-30 64
2015-09-30 77
2015-12-31 73
2016-03-31 82
2016-06-30 75
2016-09-30 74
2016-12-31 75
2017-03-31 33
In [23]:
df_ts_Q[df_ts_Q.index.year > 2014].plot(kind='line', figsize=(15,5), fontsize=17)
Out[23]:
<matplotlib.axes._subplots.AxesSubplot at 0x118572240>
In [24]:
# 以月區分
df_ts_M = df_ts.resample('M').count()
df_ts_M[df_ts_M.index.year > 2014][:10]
Out[24]:
件數
發生日期
2015-01-31 26
2015-02-28 25
2015-03-31 22
2015-04-30 23
2015-05-31 22
2015-06-30 19
2015-07-31 25
2015-08-31 26
2015-09-30 26
2015-10-31 21
In [25]:
df_ts_M[df_ts_M.index.year > 2014].plot(kind='line', figsize=(20,5), fontsize=17)
Out[25]:
<matplotlib.axes._subplots.AxesSubplot at 0x116f60da0>

5. 視覺化

In [26]:
# A. 以行政區區分的住宅竊盜件數之視覺化 折線圖
# 
df_pt1 = df_pt                                                # 使用樞紐分析表為資料來源
df_pt1['發生日期'] = df_pt1.index + 19110000                   # 轉換民國年為西元年
df_pt1 = df_pt1.set_index(df_pt1['發生日期'], drop=True)       # 改 index 為 西元年
del df_pt1['發生日期']                                         # 刪除原民國年欄位
df_pt1.index = pd.to_datetime(df_pt1.index, format='%Y%m%d')  # 將 index 改為 datatime type
df_pt1[:10]
Out[26]:
發生地點行政區 中山區 中正區 信義區 內湖區 北投區 南港區 士林區 大同區 大安區 文山區 松山區 萬華區
發生日期
2008-06-09 0 0 1 0 0 0 0 0 0 0 0 0
2010-10-13 0 0 0 1 0 0 0 0 0 0 0 0
2010-10-24 0 0 0 0 0 1 0 0 0 0 0 0
2012-06-01 0 0 0 0 0 0 0 0 1 0 0 0
2012-06-06 1 0 0 0 0 0 0 0 0 0 0 0
2012-07-28 0 0 0 0 0 0 0 0 0 0 0 1
2013-01-01 0 0 0 0 0 0 0 1 0 0 0 0
2013-01-08 1 0 0 0 0 0 0 0 0 0 0 0
2013-12-01 0 0 0 0 0 0 0 0 1 0 0 0
2014-01-02 0 0 0 0 0 0 0 0 0 1 0 0
In [27]:
t = df_pt1.apply(pd.to_numeric, errors='ignore')    # 將 values 轉成數值型態,以便繪圖。
In [28]:
t[t.index.year > 2014].plot(kind='line',title='台北市住宅竊盜件數(依行政區) 104年01月-106年02月 折線圖', subplots=True, figsize=(15,20), fontsize=17)
Out[28]:
array([<matplotlib.axes._subplots.AxesSubplot object at 0x119467ba8>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x119254208>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x1191d5c18>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x1190f7358>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x119099908>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x1190997f0>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x12316a320>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x1231aec18>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x123215c18>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x12326f9e8>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x1232d6b00>,
       <matplotlib.axes._subplots.AxesSubplot object at 0x1233307b8>], dtype=object)
In [29]:
# B. 台北市住宅竊盜件數(依行政區)之視覺化 104年01月-106年02月(以月來分) 長條圖
#
t_M = t[t.index.year > 2014].resample('M').sum()
t_M[:10]
Out[29]:
發生地點行政區 中山區 中正區 信義區 內湖區 北投區 南港區 士林區 大同區 大安區 文山區 松山區 萬華區
發生日期
2015-01-31 8.0 3.0 7.0 4.0 1.0 4.0 3.0 2.0 5.0 6.0 6.0 10.0
2015-02-28 5.0 5.0 6.0 6.0 9.0 1.0 4.0 1.0 4.0 3.0 2.0 6.0
2015-03-31 2.0 2.0 1.0 4.0 6.0 1.0 4.0 1.0 4.0 5.0 4.0 8.0
2015-04-30 10.0 1.0 0.0 13.0 5.0 1.0 3.0 2.0 0.0 5.0 3.0 8.0
2015-05-31 5.0 3.0 3.0 5.0 5.0 0.0 4.0 3.0 2.0 5.0 4.0 1.0
2015-06-30 12.0 2.0 2.0 1.0 3.0 1.0 5.0 0.0 3.0 5.0 3.0 1.0
2015-07-31 9.0 3.0 4.0 2.0 3.0 0.0 3.0 2.0 1.0 2.0 11.0 9.0
2015-08-31 7.0 4.0 6.0 3.0 6.0 2.0 8.0 4.0 5.0 5.0 2.0 4.0
2015-09-30 11.0 5.0 3.0 2.0 7.0 2.0 4.0 3.0 5.0 1.0 5.0 5.0
2015-10-31 7.0 12.0 6.0 3.0 2.0 1.0 5.0 3.0 1.0 2.0 5.0 8.0
In [30]:
t_M.plot(kind='bar',title='台北市住宅竊盜件數(依行政區) 104年01月-106年02月 長條圖',stacked=True, figsize=(20,8), fontsize=17)
Out[30]:
<matplotlib.axes._subplots.AxesSubplot at 0x123c82da0>

6. 基礎機器學習 Machine Learning - 決策分類樹

In [31]:
# use df as data source
df.head()
Out[31]:
編號 發生日期 發生時段 發生地點行政區
0 1 970609 01~03 信義區
1 2 991013 22~24 內湖區
2 3 991024 13~15 南港區
3 4 1010601 07~09 大安區
4 5 1010606 10~12 中山區
In [32]:
# transformation of '發生時段'
# 將'發生時段'轉換成數字,作為一項特徵。
# 
time_to_code = {'01~03':1,'04~06':2,'07~09':3,'10~12':4,'13~15':5,'16~18':6,'19~21':7,'22~24':8}
df_time = df
df_time['time_code'] = df_time['發生時段'].map(time_to_code)
df_time.head()
Out[32]:
編號 發生日期 發生時段 發生地點行政區 time_code
0 1 970609 01~03 信義區 1
1 2 991013 22~24 內湖區 8
2 3 991024 13~15 南港區 5
3 4 1010601 07~09 大安區 3
4 5 1010606 10~12 中山區 4
In [33]:
# 從'發生日期'轉成 weekday,並以數字表示,作為一項特徵。
# 增加一欄 weekday 欄位,表示該日為星期幾。
df_time1 = df_time
df_time1['發生日期'] = df_time1['發生日期'] + 19110000            # 轉換民國年為西元年
df_time1 = df_time1.set_index(df_time1['發生日期'], drop=True)   # 改 index 為 西元年
del df_time1['發生日期']                                         # 刪除原民國年欄位
df_time1.index= pd.to_datetime(df_time1.index, format='%Y%m%d') # 將 index 改為 datatime type
df_time1['weekday'] = df_time1.index.weekday                    # 新增 weekday 欄位,表示該日為星期幾。
df_time1.head()
Out[33]:
編號 發生時段 發生地點行政區 time_code weekday
發生日期
2008-06-09 1 01~03 信義區 1 0
2010-10-13 2 22~24 內湖區 8 2
2010-10-24 3 13~15 南港區 5 6
2012-06-01 4 07~09 大安區 3 4
2012-06-06 5 10~12 中山區 4 2

Gini

In [34]:
from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier(criterion='gini', max_depth=5)
tree.fit(df_time1[['weekday','time_code']], df_time1[['發生地點行政區']])
Out[34]:
DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=5,
            max_features=None, max_leaf_nodes=None,
            min_impurity_split=1e-07, min_samples_leaf=1,
            min_samples_split=2, min_weight_fraction_leaf=0.0,
            presort=False, random_state=None, splitter='best')
In [35]:
from sklearn.tree import export_graphviz
export_graphviz(tree, out_file="tree.dot", feature_names=['發生日期','time_code'],
                class_names=['中山區','中正區','信義區','內湖區','北投區','南港區','士林區','大同區','大安區','文山區','松山區','萬華區'],)
In [36]:
!dot -Tpng tree.dot -o tree.png
In [37]:
import matplotlib.image as mpimg
import matplotlib.pyplot as plt

%matplotlib inline
img = mpimg.imread('tree.png')
fig = plt.figure(figsize=(20,20))
plt.imshow(img)
Out[37]:
<matplotlib.image.AxesImage at 0x12d25fc88>
In [38]:
tree.feature_importances_.tolist()
df_tree = pd.DataFrame({'feature':['weekday','time_code'],'feature_importance':tree.feature_importances_.tolist()})
df_tree = df_tree.sort_values(by=['feature_importance'],ascending=False).reset_index(drop=True)
df_tree.head()
Out[38]:
feature feature_importance
0 weekday 0.504845
1 time_code 0.495155
In [39]:
def autolabel(rects):
    # attach some text labels
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x()+rect.get_width()/2., 1.02*height, '%f'%float(height),
                ha='center', va='bottom')
In [40]:
import matplotlib
import matplotlib.pyplot as plt
plt.style.use('ggplot')

fig = plt.figure(figsize=(8,4))


#中文字體 font = matplotlib.font_manager.FontProperties(fname='wt011.ttf')
plt.rcParams['font.family']='SimHei'

gini = plt.bar(df_tree.index,df_tree['feature_importance'],align='center')
plt.xlabel('Feature') #X軸名稱
plt.ylabel('Feature Importance') #Y軸名稱
plt.xticks(df_tree.index, df_tree['feature']) #X軸項目名稱

autolabel(gini)
#for i in range(len(df.index)):
#    plt.annotate(round(df['gini_importance'][i],3),xy=(df.index[i],df['gini_importance'][i]),
#             xytext=(df.index[i],df['gini_importance'][i]))

plt.show()

K-means Clustering

In [41]:
from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use('ggplot')

df_time1.time_code = df_time1.time_code.astype(float) #traform into float type
df_time1.weekday = df_time1.weekday.astype(float)     #traform into float type
X = df_time1[['time_code','weekday']].values          #tranform DataFrame to ndarray Matrix 

km = KMeans(n_clusters=4)
y_pred = km.fit_predict(X)
plt.figure(figsize=(10, 6))
plt.xlabel('Time code')
plt.ylabel('Weekday')
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.show()
In [42]:
# df_time1.to_csv('df_time1.csv')       # save data to 'df_time1.csv' for further research.

No comments:

Post a Comment