iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
自我挑戰組

商業數據分析應用系列 第 7

[Day7] Groupby()的應用

  • 分享至 

  • xImage
  •  

Q1.由昨天的結果可看出租借時間大多在一小時內。進一步了解租借起站最多的是哪幾站?

使用groupby()搭配count()來計算筆數。

a=df1[mask & mask_1].groupby('start_station_name').count()
a=a.sort_values('start_station_id',ascending=False)
a.head()

##
                              ride_id  ...  day_of_the_week
start_station_name                     ...                 
Canal St & Adams St              7752  ...             7752
Clinton St & Madison St          6712  ...             6712
Clinton St & Washington Blvd     5876  ...             5876
Kingsbury St & Kinzie St         4575  ...             4575
Columbus Dr & Randolph St        4309  ...             4309

[5 rows x 14 columns]

可以看到 Canal St & Adams St 是三個月租借次數最多的站,放在 Google Map 上搜尋,才了解原來附近有一個Chicago Union Station,是交通的樞紐。而另外四個站點: Clinton St & Madison St 位於第一名的下一站,附近有學校;Clinton St & Washington Blvd 附近也有一個車站;Kingsbury St & Kinzie St附近有 Kinzie Street Bridge;Columbus Dr & Randolph St 附近有 Millennium Park 等景點。

(總而言之是在熱區就是了/images/emoticon/emoticon37.gif)

因為這樣,我也很好奇後五筆分別是哪些站點,用df.tail()來看看~

a.tail()

##
                        ride_id  rideable_type  ...  ride_length  day_of_the_week
start_station_name                              ...                              
Kostner Ave & Lake St         1              1  ...            1                1
May St & 69th St              1              1  ...            1                1
Cicero Ave & Lake St          1              1  ...            1                1
Carpenter St & 63rd St        1              1  ...            1                1
Bennett Ave & 79th St         1              1  ...            1                1

[5 rows x 14 columns]

放到地圖上觀察,發現有一站是在地鐵站與站之間,共同點則是離市區有一段距離。


Q2. 昨天找出了租借少於1分鐘的筆數,發現沒有重複資料。進一步來看同一天、同一組ID是否有再租借的紀錄。

mask=df1[df1['ride_length']<'00:01:00']
mask['ride_id'].nunique()

##
ride_id               7555
rideable_type            1
started_at            5318
ended_at              5320
start_station_name     462
start_station_id       462
end_station_name       463
end_station_id         463
start_lat              402
start_lng              381
end_lat                402
end_lng                381
member_casual            2
ride_length             60
day_of_the_week          7
dtype: int64

原本想照下面這樣寫,結果發現出現錯誤訊息,查詢後發現是應該是我寫的不清楚導致無法比對。
不過順便可以來介紹一下strftime()這個函數,他可以datetime的資料轉換為字串日期形式,詳請可參考Python官方文件

mask_5=(df1['ride_length']>='00:01:00')

df1[mask_5]

for i in range(len(df1[mask]['ride_id'])):
    if (df1[mask_5]['ride_id']==df1[mask]['ride_id']) & (df1[mask_5]['started_at'][i].strftime('%Y-%m-%d')==df1[mask]['started_at'][i].strftime('%Y-%m-%d')):
        print(df1[mask]['ride_id'])
        print(df1[mask['member_casual']])

ValueError: Can only compare identically-labeled Series objects

稍微改了一下程式但還是跑不出來(懷疑自己又陷入了無限迴圈?但是自己測試的小程式明明可以跑的/images/emoticon/emoticon06.gif)

for i in df1[mask]['ride_id']:
    for j in df1[mask_5]['ride_id']:
        if i == j:
            print('進行中')
            print(i)

發表文章的幾分鐘後結果就出來了,如下:

進行中
3.61E+15

居然...只有一筆!! 那可能真的是操作錯誤,或突然不想騎了(?)...XDD


重複/不重複使用者

大概分析完租借長度後,接著要進入與使用者(會員/非會員)有關的部分,也是本次很重點的一個環節。此階段目標大該如下所列,大部分會留到明天來挑戰解答。:)

  • 用新的DataFrame 來計算不重複使用者數量
  • 這些不重複使用者多是會員還是非會員?
  • 重複使用者的會員/非會員比例
  • 轉換率:找出原本非會員但後來變成會員的ID (ride_id Count >1)
    延伸討論:非會員轉會員在三個月內的使用頻率如何?

明天見!


上一篇
[Day6] 遮罩(mask)的運用
下一篇
[Day8] 利用duplicated和drop_duplicates篩選資料
系列文
商業數據分析應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言