案例:990萬次騎行:紐約自行車共享系統分析


案例:990萬次騎行:紐約自行車共享系統
__from 《像Excel一樣使用Python進行數據分析》
 
 

System Data

 

Where do Citi Bikers ride? When do they ride? How far do they go? Which stations are most popular? What days of the week are most rides taken on? We've heard all of these questions and more from you, and we're happy to provide the data to help you discover the answers to these questions and more. We invite developers, engineers, statisticians, artists, academics and other interested members of the public to use the data we provide for analysis, development, visualization and whatever else moves you.

 

 

Citi Bike是紐約市在2013年5月27日啟動的一項自行車共享計划,由“花旗銀行”Citi Bank贊助並取名為“花旗單車”(Citi Bike)。
在曼哈頓,布魯克林,皇后區和澤西市有8000輛自行車和500個車站。為紐約的居民和游客提供一種方便快捷,並且省錢的出門方式。
 加入----------解鎖---------騎行--------歸還
 
人們隨處都能接到Citi Bike,並且在目的地歸還。
使用Citi Bike的方法很簡單,購買會員資格,然后在附件查找可以使用的Citi Bike,使用會員key解鎖,在有效時間內(30-45minutes)歸還並鎖定Citi Bike。
由於每個Citi Bike的租賃站點都有GPS位置信息,因此可以記錄到用戶租賃和騎行過程中的數據。
Citi Bike官網提供了用戶每一次騎行的數據,包括租賃開始及結束的位置及時間,整個騎行過程的時間,自行車ID,以及用戶的性別和出生日期等數據。
我們將使用python對Citi Bike2015年的數據進行分析,以了解紐約自行車共享計划的情況。並回答諸如誰在使用Citi Bike?他們什么時間開始騎行?每次騎行的時間和距離,以及哪些騎行路線最受歡迎等問題。
 
 首先我們將需要使用的庫文件導入到python中,這里包括pandas,numpy,matplotlib中用於數據可視化的pyplot,datetime。
后面根據不同的分析方向我們還會陸續導入其他的庫文件。
  1. import pandas as pd
  2. import numpy as np
  3. import time,datetime
  4. import matplotlib.pyplot as plt
  5.  
  6. #讀取Citi Bike的數據並創建數據表
  7. cb1=pd.DataFrame(pd.read_csv('201501-citibike-tripdata.csv'))
查看cb1表的維度
  1. cb1.shape #查看cb1表的維度
  2. (285552,15)
Citi Bike的數據是按月存儲的,因此我們需要逐月讀取並將各個月份的數據進行拼接。
  1. #對導入的數據表進行拼接,匯總后的數據表名為cb
  2. cb=cb1.append(cb2,ignore_index=False)
  3. #查看數據表維度
  4. cb.shape
  5. (9937969, 15)
2015年Citi Bike數據共包含993萬行,15列數據。其中每一行數據都代表一次“Citi Bike”的租借和騎行記錄。
                                ____以下與正文無關,關於pd.DataFrame.append()
                            
 
 
 
 我們首先對2015年Citi Bike的數據中的幾個關鍵指標進行統計,在一年中共有497個租賃點,也就是車站,8477輛自行車被使用。
自行車的使用次數更是高達993萬次,平均算下來每輛自行車每天被租借3.21次。
可見人們對Citi Bike的熱情。
而每次的騎行時間平均為16.13分鍾。
 以下為每個關鍵指標的統計代碼和結果。
 
  1. #唯一租賃點數量計數
  2. len(cb['start station name'].unique())
  3. 497
  4. #唯一自行車ID計數
  5. len(cb['bikeid'].unique())
  6. 8477
  7. #每輛自行車租借頻率
  8. cb['bikeid'].count()/len(cb['bikeid'].unique())
  9. 1172.3450513153239
  10. #每輛自行車每日租借頻率
  11. cb['bikeid'].count()/len(cb['bikeid'].unique())/365
  12. 3.21190425-1789696
  13.  
  14. #每次租借平均時長(分鍾)
  15. cb['tripduration'].sum()/cb['bikeid'].count()/60
  16. 16.134794237132358
 
 2015年的Citi Bike的使用量整體趨勢由低到高,2月Citi Bike的使用量最低,然后使用量逐月增長,直到9月出現使用量最高值。11月使用量開始下降。這可能是由於季節和氣溫因素導致的。
我們下面按季度對騎行數據進行匯總並進行對比。
 
以下是按月匯總騎行數據並匯總折線圖的代碼。
  1. #對starttime設置日期格式
  2. cb['starttime']=pd.to_datetime(cb['starttime'])
  3.  
  4. #將starttime設置為數據表索引
  5. cb=cb.set_index('starttime')
  6.  
  7. #按月對騎行數據進行計數
  8. cb_month=cb.resample('M',how=len)
  9.  
  10. #提取匯總后的bikeid字段
  11. group_cb_month=cb_month['bikeid']
  12.  
  13. #匯總按月匯總的騎行次數折線圖
  14. plt.rc('font',family='STXihei',size=15)
  15. a=np.array(group_cb_month,'g8',group_cb_month,'g-',color='#39A2E1',
  16. linewidth=3,markeredgewidth=3,markeredgecolor='#39A2E1',alpha=0.8)
  17. plt.xlabel('月份')
  18. plt.ylabel('租賃騎行次數')
  19. plt.title('2015年Citi Bike每月騎行次數')
  20. plt.grid(color='#95a5a6',linestyle='--',linewidth=1,axis='y',alpha=0.4)
  21. plt.xticks(a,('1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'))
  22. plt.show()
  23.  
 
 
 
 從2015年四個季度的數據來看,用戶對Citi Bike的使用瘦季節因素的影響,第一季度氣溫最低,Citi Bike的使用量也比較低。第二季度第三季度為夏秋交替,使用量最高。
  1. #按季度對騎行數據進行計數
  2. cb_quarterly=cb.resample('Q',how=len)
  3. #提取按季度匯總后的bikeid字段
  4. group_cb_quarterly=cb_quarterly['bikeid']
  5. #繪制按季度匯總的騎行次數柱狀圖
  6. plt.rc('font',family='STXihei',size=15)
  7. a=np.array([1,2,3,4])
  8. plt.bar([1,2,3,4],group_cb_quarterly,color='#39A2E1',alpha=0.8,align='center',
  9. edgecolor='white')
  10. plt.xlabel('季度')
  11. plt.ylabel('租賃騎行次數')
  12. plt.title('2015年Citi Bike每季度騎行次數')
  13. plt.legend(['次數'],loc='upper right')
  14. plt.grid(color='#95a5a6',linestyle='--',linewidth=1,axis='y',alpha=0.4)
  15. plt.xticks(a,('一季度','二季度','三季度','四季度'))
  16. plt.show
 
 
 我們很好奇993萬次騎行這個龐大的數據后面是哪些人在使用Citi Bike。
用於獲得的數據中只有用戶性別,出生日期和會員類別的數據,因此我們僅從這三個維度對Citi Bike的用戶進行簡單的描述。
 
 2015年使用Citi Bike服務的用戶中,66%為男性用戶,女性用戶的占比為20%,另外還有13%的用戶性別未知。這讓我想起了北京自重25公斤的共享單車。
 以下是計算用戶性別占比和繪制餅圖的代碼。
  1. #按用戶性別進行匯總並計算不同性別的占比
  2. user_gender=cb.groupby('gender')['bikeid'].agg(len)/cb['bikeid'].count()*100
  3. #匯總用戶性別占比餅圖
  4. plt.rc('font',family='STXihei',size=15)
  5. colors=['#052B6C','#39A2E1','#EA1F29']
  6. name=['未知','男性','女性']
  7. plt.pie(user_gender,labels=name,colors=colors,explode=(0,0,0),startangle=60,autopct='%1.1f%%')
  8. plt.title('Citi Bike用戶性別占比')
  9. plt.legend(['未知','男性','女性'],loc='upper left')
  10. plt.show()
 
 
 我們將Citi Bike的用戶年齡分為四組,0-18歲為少年組,18-30歲為青年組,30-50歲為中年組,50歲以上為老年組。
其中少年組的租借和騎行次數最少,中年組的租借和騎行次數最高,其次為青年組。50歲以上的老年組也有相當數量的記錄。
 
 以下是對用戶年齡分組和匯總柱狀圖的代碼,用戶年齡由出生日期和當前年份計算得出,其中包含部分極端值。
  1. #查看出生日期的范圍
  2. cb['birth year'].min(),cb['birth year'].max()
  3. (1885.0,1999.0)
這里1885年很怪異,按照這個出生日期,2016年時用戶的年齡已經達到了131歲。我們不知道其中的具體原因,但由於Citi Bike整體的數據較為規范不需要清洗,因此我們選擇保留這個值。
  1. #使用2015年與用戶出生日期計算年齡
  2. cb['age']=2015-cb['birth year']
  3. #用戶最小年齡17歲,最大年齡131歲
  4. cb['age'].min(),cb['age'].max()
  5. (17.0,131.0)
  6. #對用戶年齡進行分組
  7. bins=[0,18,30,50,131]
  8. group_age=['少年','青年','中年','老年']
  9. cb['group_age']=pd.cut(cb['age'],bins,labels=group_age)
  10. #按年齡分組對數據進行匯總
  11. user_age=cb.groupby('group_age')['group_age'].agg(len)
  12. #生成用戶年齡分布柱狀圖
  13. plt.rc('font',family='STXihei',size=15)
  14. a=np.array([1,2,3,4])
  15. plt.bar([1,2,3,4],user_age,color='#052B6C',alpha=0.8,align='center',edgecolor='white')
  16. plt.xlabel('年齡分組')
  17. plt.ylabel('租賃次數')
  18. plt.title('Citi Bike用戶年齡分布')
  19. plt.legend(['次數'],loc='uppper right')
  20. plt.grid(color='#95a5a6',linestyle='--',linewidth=1,axis='y',alpha=0.4)
  21. plt.xticks(a,('少年','青年','中年','老年'))
  22. plt.show()
 
 Citi Bike對紐約本地居民,短期停留和游客提供了三種會員期限選擇,按Citi Bike官網的推薦,年度會員適合於本地居民,也是最划算的一種租賃方式。3天的會員適合於短期停留或居住的用戶,1天的會員適合於游客。因此我們也可以按不同的會員期限反向推斷用戶的身份。
 在2015年的數據表中,1天和3天的會員統稱為Customer,年度會員稱為Subscriber。從下面的占比數據中可以看出,絕大部分Citi Bike的用戶為年度會員,占比高達86%。反向推測絕大部分用戶為紐約本地常住居民。
 
 以下為計算用戶會員類別和匯總餅圖的代碼。
  1. #按用戶的會員類別進行匯總並計算占比
  2. user_type=cb.groupby('usertype')['bikeid'].agg(len)/cb['bikeid'].count()*100
  3. #匯總用戶會員類別餅圖
  4. plt.rc('font',family='STXihei',size=15)
  5. colors=['#EA1F29','#39A2E1']
  6. name=['Customer','Subscriber']
  7. plt.pie(user_type,labels=name,colors=colors,explode=(0,0),startangle=43,autopct='%1.1f%%')
  8. plt.legend(['Customer','Subscriber'],loc='upper left')
  9. plt.show()
 
 在993萬次騎行的數據背后,是否存在一些規律?我們選擇了5月(春季)的數據對用戶使用Citi Bike的行為進行了統計和分析,這里既包括使用Citi Bike的時間,也包括騎行速度,熱門租賃站點和騎行線路。
 Citi Bike的使用者大部分為城市居民,少部分為游客。在一天中商務7點-8點和下午的5點-6點是Citi Bike的使用高峰。這兩個時間正好是上下班的高峰時間。除此之外中午12點-下午4點也有較高的使用量。
 以下是24小時使用趨勢和繪制折線圖的代碼。
  1. #讀取5月數據並創建數據表
  2. cb5=pd.DataFrame(pd.read_csv('201505-citibike-tripdata.csv'))
  3. #對starttime字段進行分列
  4. time_split=pd.DataFrame((x.split('')for x in cb5.starttime),index=cb5.index,columns=['start_date','star_time'])
  5. #對分列后的表與原數據表進行拼接
  6. cb5=pd.merge(cb5,time_split,right_index=True,left_index=True)
  7. #更改star_time字段為日期格式
  8. cb5['star_time']=pd.to_datetime(cb5['star_time'])
  9. #設置star_time為表索引
  10. cb5=cb5.set_index('star_time')
  11. #按小時對數據進行匯總
  12. star_hour=cb5.resample('H',how=len)
  13. #提取按小時匯總的bikeid數據
  14. ride_hour=star_hour['bikeid']
  15. #繪制24小時折線圖
  16. plt.rc('font',family='STXihei',size=15)
  17. a=np.array([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23])
  18. plt.plot(ride_hour,'8',ride_hour,'g-',color='#052B6C',linewidth=3,markeredgewidth=3,markeredgecolor='#052B6C',alpha=0.8)
  19. plt.xlabel('24x小時')
  20. plt.ylabel('租賃次數')
  21. plt.title('Citi Bike用戶24小時租賃次數')
  22. plt.grid(color='#95a5a6',linestyle='--',linewidth=1,axis='y',alpha=0.4)
  23. plt.xticks(a,('0','','','','','5','','','','','10','','','','','15','','','','','20','','',''))
  24. plt.show()
 
 在騎行時間方面,按照不同的會員類別Citi Bike對時間有不同的限制,1天和3天會員每次騎行的限制時間為30分鍾,超過30分鍾每增加15分鍾收費4美金。年度會有每次騎行限制時間為45分鍾,超過10分鍾收費2.5美金,再次超出逐級收費。Citi Bike鼓勵用戶短途使用並且在接近限制時間時重新租賃新的自行車,避免產生超時費用,並且提高自行車的周轉率。
我們對5月份用戶的騎行時間進行處理和分組,通過下面的圖表可以看出大部分用戶的使用時間為10-20分鍾。其次為30分鍾和5分鍾以內。超過30分鍾的使用次數較少。即使在86%的用戶為年度會員的情況下,使用時間在30-45分鍾的情況也比較少。由此推測大部分的騎行為短途。
 以下為騎行時間分組和繪制柱狀圖的代碼。
  1. #對騎行時間進行分組
  2. bins=[0,300,600,1200,1800,2700,2825827]
  3. #為每個分組命名
  4. group_tripduration=['5分鍾','10分鍾','20分鍾','30分鍾','45分鍾','更長時間']
  5. #在原數據表中增加時間分組字段
  6. cb5['group_tripduration']=pd.cut(cb5['tripduration'],bins,labels=group_tripduration)
  7. #按分組對數據進行匯總計數
  8. group_minute=cb5.groupby('group_tripduration')['group_tripduration'].agg(len)
  9. #匯總騎行時間分組柱狀圖
  10. plt.rc('font',family='STXihei',size=15)
  11. a=np.array([1,2,3,4,5,6])
  12. plt.bar([1,2,3,4,5,6],group_minute,color='#9F713F',alpha=0.8,align='center',edgecolor='white')
  13. plt.xlabel('時間分組')
  14. plt.ylabel('騎行次數')
  15. plt.title('Citi Bike騎行時間分布')
  16. plt.legend(['時間'],loc='upper right')
  17. plt.grid(color='#95a5a6',linestyle='--',linewidth=1,axis='y',alpha=0.4)
  18. plt.xticks(a,('5分鍾','10分鍾','20分鍾','30分鍾','45分鍾','更長時間'))
  19. plt.show()
 在Citi Bike的數據表中並沒有直接提供每次騎行的速度數據,但包含了每個開始和結束站點的經緯度坐標。我們通過這些坐標計算出兩個站點間的距離,並匹配到對應的騎行中。在經過與本次騎行所耗費的時間計算出這次騎行的平均速度。通過對5月的數據進行處理,用戶的平均騎行速度為6.3公里/小時。
以下是計算騎行速度的代碼。
  1. #導入庫文件
  2. from math import radians,cos,sin,asin,sqrt
  3. import numpy as np
  4. import pandas as pd
  5. #通過經緯度計算距離的函數
  6. def haversine(lon1,lat1,lon2,lat2):#經度1,j維度1,經度2,維度2,(十進制度數)
  7. '''
  8. Calculate the great circle distance between two points
  9. on the earth (specified in decimal degrees)
  10. '''
  11. #將十進制度數轉化為弧度
  12. lon1=map(radians,np.array(lon1))
  13. lat1=map(radians,np.array(lat1))
  14. lon2=map(radians,np.array(lon2))
  15. lat2=map(radians,np.array(lat2))
  16. lon1=np.array(list(lon1)).reshape(-1,1)
  17. lon2=np.array(list(lon2)).reshape(-1,1)
  18. lat1=np.array(list(lat1)).reshape(-1,1)
  19. lat2=np.array(list(lat2)).reshape(-1,1)
  20. #haversine公式
  21. dlon=lon2-lon1
  22. dlat=lat2-lat1
  23. a=np.sin(dlat/2)**2+np.cos(lat1)*np.cos(lat2)*np.sin(dlon/2)**2
  24. c=2*np.arcsin(np.sqrt(a))
  25. r=6371#地球平均半徑,單位為公里
  26. return c*r*1000
  27. #計算每次騎行的米數並增加騎行距離字段
  28. cb5['meter']=haversine(cb['start station longitude'],cb5['start station latitude'],cb5['end station longitude'],cb5['end station latitude'])
  29. #將原數據表中的騎行時間由秒轉化為小時
  30. cb5['duration_hour']=cb5['tripduration']/3600
  31. #將米轉化為公里並與小時計算出速度
  32. cb5['spend']=cb5['meter']/1000/cb5['duration_hour']
  33. #現在我們有了每次騎行的速度,還需要計算出用戶平均的騎行速度。
  34. #將每次騎行的米數求和並轉化為公里
  35. km=cb5['meter'].sum()/1000
  36. #將每次騎行的秒數求和並轉化為小時
  37. hour=cb5['tripduration'].sum()/3600
  38. #計算平均速度
  39. speed=km/hour
  40. #平均速度為6.31公里/小時
  41. speed
  42. 6.3101247093495
 
 在990萬次騎行中,第一季度用戶對Citi Bike的使用量最低,第三季度使用量最高。有明顯的季度因素。下面我們導入紐約市2015年的氣象數據,來看下天氣的因素與Citi Bike間是否存在關聯,並試着用天氣的變化來預測Citi Bike的使用量。
 繪制每日最高氣溫與Citi Bike使用量的散點圖,從圖中可以發現Citi Bike的使用量與日最高氣溫間呈正相關,隨着日最高氣溫的增長Citi Bike的使用量也在逐漸增長。接下來我們通過回歸分析發現最高氣溫與Citi Bike間的R的平方值為0.6,兩者存在正向關聯。
換句話說日最高氣溫可以解釋Citi Bike租賃和騎行數量60%的變化原因。因此,我們通過這種關聯分布對不同氣溫下的Citi Bike的租賃數量進行了預測。
 
以下是繪制散點圖和進行回歸分析的代碼。
  1. #讀取2015年紐約市的氣象數據
  2. weather=pd.DataFrame(pd.read_csv('823248'))
  3. #提取每日最高氣溫數據
  4. group_weather_day=weather['TMAX']
  5. #對2015年騎行時間按天匯總計算
  6. cb_day=cb.resample('D',how=len)
  7. #提取每日騎行數據量
  8. group_cb_day=cb_day['bikeid']
  9. #對每日最高氣溫和騎行量數據進行標准化處理
  10. from sklearn import preprocessing
  11. scaler=preprocessing.StandardScaler().fit(group_weather_day)
  12. X_Standard=scaler.transform(group_weather_day)
  13. scaler=preprocessing.StandardScaler().fit(group_cb_day)
  14. Y_Standard=sacler.transform(group_cb_day)
  15. #繪制最高氣溫和騎行數據散點圖
  16. plt.rc('font',family='STXihei',size=15)
  17. plt.scatter(X_Standard,Y_Standard,60,color='#052B6C',marker='+',alpha=0.8,linewidth=1.5)
  18. plt.xlabel('日最高氣溫')
  19. plt.ylabel('Citi Bike租賃次數')
  20. plt.title('最高氣溫與Citi Bike之間的關系')
  21. plt.grid(color='#95a5a6',linestyle='--',linewidth=1,axis='both',alpha=0.4)
  22. plt.show()
  23. #設置每日最高氣溫為自變量X
  24. X=np.array(weather[['TMAX']])
  25. #設置每日騎行數量為因變量Y
  26. Y=np.array(cb-day[['bikeid']])
  27.  
  28. #導入線性回歸庫
  29. from sklearn import linear_model
  30. clf=linear_model.LinearRegression()
  31. clf.fit(X,Y)
  32.  
  33. #計算相關度
  34. clf.score(X,Y)
  35. 0.60841860048565455
  36.  
  37. #斜率
  38. clf.coef_
  39. array([[536.64465091]])
  40.  
  41. #截距
  42. clf.intercept
  43. array([-7282.61437278])
  44.  
  45. #分布對19,39和97華氏度的Citi Bike租賃量進行預測
  46. clf.predict(19)
  47. array([[2913.63399443]])
  48. clf.predict(39)
  49. array([[13646.52701255]])
  50. clf.predict(97)
  51. array([[44771.9167651]])
 通過前面的計算我們已經知道了每次騎行用戶的年齡和騎行速度信息,那么這兩者之間是否存在關聯呢?
換句話說,是否隨着年齡的增長騎行速度會逐漸減慢呢?
我們通過簡單的一元回歸來分析下兩者間的聯系。
這里我們只使用2015年5月的數據進行分析。
  1. #計算並增加年齡字段
  2. cb5['age']=2015-cb5['birth year']
  3. #提取年齡和騎行速度字段
  4. age_speed=cb5[['speed','age']]
  5. #去除騎行速度為0的數據
  6. age_speed=age_speed.dropna()
  7. #年齡設置為自變量X
  8. X=np.array(age_speed[['age']])
  9. #速度設置為因變量Y
  10. Y=np.array(age_speed[['speed']])
  11. #導入線性回歸庫
  12. from sklearn import linear_model
  13. #將數據導入模型
  14. clf=linear_model.LinearRegression()
  15. clf.fit(X,Y)
  16. #斜率
  17. clf.coef_
  18. array([[-0.02899706]])
  19. #截距
  20. clf.intercept_
  21. array([10.05513438])
  22. #R方
  23. clf.score(X,Y)
  24. 0.011272777068773165
從R方來看年齡與騎行速度間並沒有關聯,騎行速度並不會隨着年齡的增長而增長。
這里主要的原因我想有兩個。
第一Citi Bike的使用場所主要在城市里,並且多為短途。
第二是使用者除了城市居民上下班通勤外,還有一部分的游客,他們的目的是欣賞沿途美麗的風景因此騎行速度也會較慢。
  1. #20歲的騎行速度預測為9.4公里
  2. clf.predict(20)
  3. array([[9.47519327]])
  4. #50歲的騎行速度預測為8.6公里
  5. clf.predict(50)
  6. array([[8.60528161]])
 
 在Citi Bike的官網上有一個頻道叫Explore NYC,里,里面提供了最熱門的騎行線路和沿途的著名景觀。我們對5月的數據進行統計,找出最受歡迎的騎行開始地點。以及受歡迎的騎行線路。

 對5月騎行數據進行統計,找出前10個最受歡迎的騎行開始地點及經緯度數據。將經緯度數據輸入到plotly工具中,繪制出Citi Bike2015年5月在紐約最受歡迎的前10個租賃地點。
以下是前10個最受歡迎租賃點的統計代碼及結果。
  1. #使用數據透視找出前10個最受歡迎地點的經緯度數據
  2. start_station=pd.pivot_table(cb5,index=['start station name','start station latitude','start station longitude'],values=['bikeid'],aggfunc=[len],fill_value=0,margins=True).head(10)
 

 繼續前面的操作,在數據透視表的字段中增加結束地點和經緯度數據就可以看到一條完整的騎行線路數據,這里以1 Ave&E 15 St為騎行開始地點,使用pyplot工具描繪出一條用戶的騎行線路。
上面的圖中是從Google街景中截圖的圖片,也是騎行線路開始的地點。
下面是pyplot工具顯示出的本次騎行開始和結束的位置。
由於我們只有開始和結束兩個經緯度數據,因此顯示為一條直線。
借助Google地圖的騎行路線我們模擬出了用戶這兩點之間可能的騎行路線,這並非用戶的真是騎行路線。但可以幫助我們更加詳細的了解用戶使用Citi Bike的情況。
 
以下是通過數據透視獲得騎行位置和經緯度的代碼。
  1. #獲得騎行開始和結束地點及經緯度數據
  2. end_station=pd.pivot_table(cb5,index=['start station name','start station latitude','start station longitude','end station latitude','end station longitude','end station name'],values=['bikeid'],aggfunc=[len],fill_value=0,margins=True).head(10)
 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM