iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0
自我挑戰組

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

[Day6] 遮罩(mask)的運用

  • 分享至 

  • xImage
  •  

昨天的程式跑了快一個小時,發現一直都沒結束,才赫然發現原來寫錯了,變成無限循環(好天兵xd)。
既然發現了問題,當然是寫出來才能睡覺囉!

被資工系的家人訓了一頓,說沒有人拿正式資料來跑寫的邏輯是否正確的XD
想一想這筆資料高達42萬多筆,真的不該在還是個初學者階段就那麼大膽(哈)

用了一個測試的小資料來驗證寫法,結果成功了/images/emoticon/emoticon37.gif

Test=[['ID','Name','Gender','content'],['1','Mary','Female','###'],['2','Jason','Male','forty'],['3','Sandy','Female','fifty'],['4','William','Male','##']]
df=pd.DataFrame(Test[1:5],columns=Test[0])

df1=df.drop(df[df['content'].str.contains('#')==True].index)

原本的df長這樣

  ID     Name  Gender content
0  1     Mary  Female     ###
1  2    Jason    Male   forty
2  3    Sandy  Female   fifty
3  4  William    Male      ##

執行最後一句話,存入df1中變這樣

  ID   Name  Gender content
1  2  Jason    Male   forty
2  3  Sandy  Female   fifty

可以先安心睡覺了~起床再繼續努力分析! ^^
2022/09/08 01:53 AM


ride_length 租借時間

df1=data.drop(data[data['ride_length'].str.contains('#')==True].index)

df1=df1.sort_values('ride_length',ascending=False) #降冪排序
df1.head() #前五筆
df1.tail() #後五筆

##
                 ride_id rideable_type  ... ride_length day_of_the_week
1354    2D4EA0D9064662D6   docked_bike  ...    23:56:49               3
353057  651C959936BA3227   docked_bike  ...    23:56:45               4
226720  EB83072244DF5183   docked_bike  ...    23:55:55               4
107043  8994CCC830A3DDF1   docked_bike  ...    23:54:37               5
341354  B6DE81A51970FF21   docked_bike  ...    23:54:27               7

[5 rows x 15 columns]

前五筆資料可知道最長的租借時間為將近一天
發現整理過後的後五筆資料秒數皆是00:00:00,就開始在括號內加入數字。
結果加到100筆左右時才終於出現00:00:01 (還是超級短啊!)

一開始我設定2分鐘來當作一個基準,超過2分鐘的記作有效資料,並以'ride_length'這欄的長短區分為短/中/長時間租借。
此階段目標有兩個:

  • 計算秒數少於00:02:00的筆數,並觀察這些ID是否有在同一天再租借一次(操作錯誤之類的)。
  • 計算短/中/長時間租借的比例,並觀察租借時間與租借還地點的關係。

排除無效資料

使用遮罩來篩選少於00:02:00的資料,觀察後發現在00:01:00左有開始有租借還點不同的情況,可能站點真的蠻近的吧/images/emoticon/emoticon37.gif既然有這個狀況,那就稍微改一下設定為少於00:01:00設定為無效資料。

mask=df1[df1['ride_length']<'00:02:00'] #共12112筆
mask=df1[df1['ride_length']<'00:01:00'] #共7555筆

使用不重複ID資料來試算重複ID有多少筆,藉以初步推斷是不是操作錯誤的情況蠻多的(但日期可能也要考慮,明天來細算,截稿時間又要到了XD)

mask['ride_id'].nunique()
Out[29]: 7555

結果也是7555筆!/images/emoticon/emoticon06.gif

短/中/長時間租借分組(使用遮罩)

短租(00:01:00~01:00:00)

mask=(df1['ride_length']>='00:01:00')
df1[mask] 
mask_1=(df1['ride_length']<='01:00:00') #短租條件一
df1[mask & mask_1] #短租 411769

中租(01:01:00~12:00:00)

mask_2=(df1['ride_length']>'01:00:00') #中租條件一
mask_3=(df1['ride_length']<='12:00:00') #中租條件二
df1[mask_2 & mask_3] #中租 #7036

df1[(df1['ride_length']>'01:00:00') & (df1['ride_length']<='12:00:00')] #另一種寫法

長租(12:01:00~24:00:00)

mask_4=(df1['ride_length']>'12:00:00') #長租條件
df1[mask_4] #長租 #410

可以發現比例最多的大多落在1個小時內,約占了98%。所以明天可以針對這些1小時內的資料在作細分,而也會用其他組來觀察使用者、地點等關聯。


明天見!中秋連假也要繼續努力更新><!


上一篇
[Day5] 資料清理
下一篇
[Day7] Groupby()的應用
系列文
商業數據分析應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言