如何使用Python對Citi Bike 990萬次的騎行數據分析
Citi Bike是紐約市在2013年5月27日啟動的一項自行車共享計劃,由“花旗銀行”(Citi Bank)贊助并取名為“花旗單車”(Citi Bike)。在曼哈頓,布魯克林,皇后區和澤西市有8,000輛自行車和500個車站。為紐約的居民和游客提供一種方便快捷,并且省錢的出行方式。

人們隨處都能借到Citi Bank,并在他們的目的地歸還。使用Citi Bank的方法很簡單,購買會員資格,然后在附近查找可以使用的Citi Bank,使用會員key解鎖,在有效時間內(30或45分鐘)歸還并鎖定Citi Bank。由于每個Citi Bank的租賃站點都有GPS位置信息,因此可以記錄到用戶租賃和騎行過程中的數據?!癈iti Bank”官網提供了用戶每一次騎行的數據,包括租賃開始及結束的位置及時間,整個騎行過程的時間,自行車ID,以及用戶的性別和出生日期等數據。我們將使用python對“Citi Bank”2015年的數據進行分析,以了解紐約自行車共享計劃的情況。并回答諸如誰在使用Citi Bike?他們什么時間開始騎行?每次騎行的時間和距離,以及哪些騎行線路最受歡迎等問題。
開始前的準備工作
首先我們將需要使用的庫文件導入到python中,這里包括numpy、pandas、datetime和用于數據可視化的pyplot,后面根據不同的分析方向我們還會陸續導入其他的庫文件。
import?numpy?as?npimport?pandas?as?pdimport?time,datetimeimport?matplotlib.pyplot?as?plt #讀取Citi?Bike的數據并創建數據表 cb1=pd.DataFrame(pd.read_csv('201501-citibike-tripdata.csv'))
Citi Bike的數據是按月存儲的,因此我們需要逐月讀取并將各個月份的數據進行拼接。
#對導入的數據表進行拼接,匯總后的數據表名為cbcb=cb1.append(cb2,ignore_index=False)#查看數據表維度cb.shape (9937969,?15)
2015年Citi Bike數據共包含993萬行,15列數據。其中每一行數據都代表一次“Citi Bank”的租借和騎行記錄。
驚人的990萬次騎行
我們首先對2015年“Citi Bank”的數據中的幾個關鍵指標進行統計,在一年***有497個租賃點,也就是車站,8477輛自行車被使用。自行車的使用次數更是高達993萬次,平均算下來每輛自行車每天被租借3.21次??梢娙藗儗Α癈iti Bank”的熱情。而每次的騎行時間平均為16.13分鐘。
以下為每個關鍵指標的統計代碼和結果。
#唯一租賃點數量計數len(cb['start?station?name'].unique())497#唯一自行車ID計數len(cb['bikeid'].unique())8477#騎行次數計數cb['starttime'].count()9937969#每輛自行車租借頻率cb['bikeid'].count()/len(cb['bikeid'].unique())1172.3450513153239#每輛自行車每日租借頻率cb['bikeid'].count()/len(cb['bikeid'].unique())/3653.2119042501789696#每次租借平均時長(分鐘)cb['tripduration'].sum()/cb['bikeid'].count()/6016.134794237132358
2015年的Citi Bike的使用量整體趨勢由低到高,2月Citi Bike的使用量最低,然后使用量逐月增長,直到9月出現使用量最高值。11月使用量開始下降。這可能是由于季節和氣溫因素導致的。我們下面按季度對騎行數據進行匯總并進行對比。
以下是按月匯總騎行數據并匯總折線圖的代碼。
#對starttime設置日期格式cb['starttime']=pd.to_datetime(cb['starttime'])#將starttime設置為數據表索引cb?=?cb.set_index('starttime')#按月對騎行數據進行計數cb_month=cb.resample('M',how=len)#提取匯總后的bikeid字段group_cb_month=cb_month['bikeid']#匯總按月匯總的騎行次數折線圖plt.rc('font',?family='STXihei',?size=15) a=np.array([1,2,3,4,5,6,7,8,9,10,11,12]) plt.plot(group_cb_month,'g8',group_cb_month,'g-',color='#39A2E1',linewidth=3,markeredgewidth=3,markeredgecolor='#39A2E1',alpha=0.8) plt.xlabel('月份') plt.ylabel('租賃騎行次數') plt.title('2015年Citi?Bike每月騎行次數') plt.grid(?color='#95a5a6',linestyle='--',?linewidth=1?,axis='y',alpha=0.4) plt.xticks(a,?('1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月')?) plt.show()
從2015年四個季度的數據來看,用戶對Citi Bike的使用受季節因素的影響,第一季度氣溫最低,Citi Bike的使用量也較低。第二季度第三季度為夏秋交替,使用量最高。
#按季度對騎行數據進行計數cb_quarterly=cb.resample('Q',how=len)#提取按季度匯總后的bikeid字段group_cb_quarterly=cb_quarterly['bikeid']#繪制按季度匯總的騎行次數柱狀圖plt.rc('font',?family='STXihei',?size=15)a=np.array([1,2,3,4]) plt.bar([1,2,3,4],group_cb_quarterly,color='#39A2E1',alpha=0.8,align='center',edgecolor='white') plt.xlabel('季度') plt.ylabel('租賃騎行次數') plt.title('2015年Citi?Bike每季度騎行次數') plt.legend(['次數'],?loc='upper?right') plt.grid(color='#95a5a6',linestyle='--',?linewidth=1,axis='y',alpha=0.4) plt.xticks(a,('一季度','二季度','三季度','四季度')) plt.show()
哪些人在使用Citi Bike ?
我們很好奇993萬次騎行這個龐大的數據后面是哪些人在使用Citi Bike。由于獲得的數據中只有用戶性別,出生日期和會員類別的數據,因此我們僅從這三個維度對Citi Bike的用戶進行簡單的描述。
66%的男性用戶使用Citi Bike
2015年使用Citi Bike服務的用戶中,66%為男性用戶,女性用戶的占比為20%,另外還有13%的用戶性別未知。這讓我想起了北京自重25公斤的共享單車。
以下是計算用戶性別占比和繪制餅圖的代碼。
#按用戶性別進行匯總并計算不同性別的占比 user_gender=cb.groupby('gender')['bikeid'].agg(len)/cb["bikeid"].count()*100#匯總用戶性別占比餅圖 plt.rc('font',?family='STXihei',?size=15) colors?=?["#052B6C","#39A2E1","#EA1F29"]name=['未知',?'男性',?'女性'] plt.pie(user_gender,labels=name,colors=colors,explode=(0,?0,?0),startangle=60,autopct='%1.1f%%') plt.title('Citi?Bike用戶性別占比') plt.legend(['未知',?'男性',?'女性'],?loc='upper?left') plt.show()
30~50歲用戶熱衷于騎行
我們將Citi Bike的用戶年齡分為四組,0~18歲為少年組,18~30歲為青年組,30~50歲為中年組,50歲以上為老年組。其中少年組的租借和騎行次數最少,中年組的租借和騎行次數最高,其次為青年組。50歲以上的老年組也有相當數量的記錄。
以下是對用戶年齡分組和匯總柱狀圖的代碼,用戶年齡由出生日期和當前年份計算得出,其中包含部分極端值。
#查看出生日期的范圍cb['birth?year'].min(),cb['birth?year'].max() (1885.0,?1999.0)
這里1885年很怪異,按照這個出生日期,2016年時用戶的年齡已經達到了131歲。我們不知道其中的具體原因,但由于Citi Bike整體的數據較為規范不需要清洗,因此我們選擇保留這個值。
#使用2015年與用戶出生日期計算年齡 cb['age']=2015-cb['birth?year'] #用戶最小年齡17歲,最大年齡131歲 cb['age'].min(),cb['age'].max() (17.0,?131.0) #對用戶年齡進行分組 bins?=?[0,?18,?30,?50,?131] group_age?=?['少年',?'青年',?'中年',?'老年']? cb['group_age']?=?pd.cut(cb['age'],?bins,?labels=group_age) #按年齡分組對數據進行匯總 user_age=cb.groupby('group_age')['group_age'].agg(len) #生成用戶年齡分布柱狀圖 plt.rc('font',?family='STXihei',?size=15) a=np.array([1,2,3,4]) plt.bar([1,2,3,4],user_age,color='#052B6C',alpha=0.8,align='center',edgecolor='white') plt.xlabel('年齡分組') plt.ylabel('租賃次數') plt.title('Citi?Bike用戶年齡分布') plt.legend(['次數'],?loc='upper?right') plt.grid(color='#95a5a6',linestyle='--',?linewidth=1,axis='y',alpha=0.4) plt.xticks(a,('少年','青年','中年','老年')) plt.show()
86%的用戶為年費會員
Ctii Bike對紐約本地居民,短期停留和游客提供了三種會員期限選擇,按Citi Bike官網的推薦,年度會員適合于本地居民,也是最劃算的一種租賃方式。3天的會員適合于短期停留或居住的用戶,1天的會員適合于游客。因此我們也可以按不同的會員期限反向推斷用戶的身份。
在2015年的數據表中,1天和3天的會員統稱為Customer,年度會有成為Subscriber。從下面的占比數據中可以看出,絕大部分Citi Bike的用戶為年度會員,占比高達86%。反向推測絕大部分用戶為紐約本地常住居民。
以下為計算用戶會員類別和匯總餅圖的代碼。
#按用戶的會員類別進行匯總并計算占比 user_type=cb.groupby('usertype')['bikeid'].agg(len)/cb["bikeid"].count()*100#匯總用戶會員類別餅圖 plt.rc('font',?family='STXihei',?size=15) colors?=?["#EA1F29","#39A2E1"]name=['Customer',?'Subscriber'] plt.pie(user_type,labels=name,colors=colors,explode=(0,0),startangle=43,autopct='%1.1f%%') plt.title('Citi?Bike用戶類別占比') plt.legend(['Customer',?'Subscriber'],?loc='upper?left') plt.show()
用戶的騎行時間及速度
在993萬次騎行的數據背后,是否存在一些規律?我們選擇了5月(春季)的數據對用戶使用Citi Bike的行為進行了統計和分析,這里既包括使用Citi Bike的時間,也包括騎行速度,熱門租賃站點和騎行線路。
每日早晚是使用高峰
Citi Bike的使用者大部分為城市居民,少部分為游客。在一天中的上午7點—8點和下午的5點~6點是Citi Bike的使用高峰。這兩個時間正好是上下班的高峰時間。除此之外中午12點~下午4點也有較高的使用量。
以下是24小時使用趨勢和繪制折線圖的代碼。
#讀取5月數據并創建數據表cb5=pd.DataFrame(pd.read_csv('201505-citibike-tripdata.csv'))#對starttime字段進行分列time_split?=?pd.DataFrame((x.split('?')?for?x?in?cb5.starttime),index=cb5.index,columns=['start_date','star_time'])#對分列后的表與原數據表進行拼接cb5=pd.merge(cb5,time_split,right_index=True,?left_index=True)#更改star_time字段為日期格式cb5['star_time']=pd.to_datetime(cb5['star_time'])#設置star_time為表索引cb5?=?cb5.set_index('star_time')#按小時對數據進行匯總star_hour=cb5.resample('H',how=len)#提取按小時匯總的bikeid數據ride_hour=star_hour["bikeid"]#繪制24小時折線圖plt.rc('font',?family='STXihei',?size=15) 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]) plt.plot(ride_hour,'8',ride_hour,'g-',color='#052B6C',linewidth=3,markeredgewidth=3,markeredgecolor='#052B6C',alpha=0.8) plt.xlabel('24小時') plt.ylabel('租賃次數') plt.title('Citi?Bike用戶24小時租賃次數') plt.grid(?color='#95a5a6',linestyle='--',?linewidth=1?,axis='y',alpha=0.4) plt.xticks(a,?('0','','','','','5','','','','','10','','','','','15','','','','','20','','','')?) plt.show()
騎行時間多在20分鐘以內
在騎行時間方面,按照不同的會員類別Citi Bike對時間有不同的限制,1天和3天會員每次騎行的限制時間為30分鐘,超過30分鐘每增加15分鐘收費4美金。年度會有每次騎行限制時間為45分鐘,超出10分鐘收費2.5美金,再次超出逐級收費。Citi Bike鼓勵用戶短途使用并且在接近限制時間時重新租賃新的自行車,避免產生超時費用,并且提高自行車的周轉率。
我們對5月份用戶的騎行時間進行處理和分組,通過下面的圖表可以看出大部分用戶的使用時間為10~20分鐘。其次為30分鐘和5分鐘以內。超過30分鐘的使用次數較少。即使在86%的用戶為年度會員的情況下,使用時間在30-45分鐘的情況也較少。由此推測大部分的騎行為短途。
以下為騎行時間分組和繪制柱狀圖的代碼。
#對騎行時間進行分組bins?=?[0,?300,?600,?1200,?1800,?2700,?2825827]#為每個分組命名group_tripduration?=?['5分鐘',?'10分鐘',?'20分鐘',?'30分鐘',?'45分鐘',?'更長時間']? #在原數據表中增加時間分組字段cb5['group_tripduration']?=?pd.cut(cb5['tripduration'],?bins,?labels=group_tripduration)#按分組對數據進行匯總計數group_minute=cb5.groupby('group_tripduration')['group_tripduration'].agg(len)#匯總騎行時間分組柱狀圖plt.rc('font',?family='STXihei',?size=15) a=np.array([1,2,3,4,5,6]) plt.bar([1,2,3,4,5,6],group_minute,color='#9F713F',alpha=0.8,align='center',edgecolor='white') plt.xlabel('時間分組') plt.ylabel('騎行次數') plt.title('Citi?Bike騎行時間分布') plt.legend(['時間'],?loc='upper?right') plt.grid(color='#95a5a6',linestyle='--',?linewidth=1,axis='y',alpha=0.4) plt.xticks(a,('5分鐘','10分鐘','20分鐘','30分鐘',?'45分鐘','更長時間')) plt.show()
平均騎行速度6.3公里/小時
在Citi Bike的數據表中并沒有直接提供每次騎行的速度數據,但包含了每個開始和結束站點的經緯度坐標。我們通過這些坐標計算出了兩個站點間的距離,并匹配到對應的騎行中。在經過與本次騎行所耗費的時間計算出這次騎行的平均速度。通過對5月的數據進行處理,用戶的平均騎行速度為6.3公里/小時。
以下是計算騎行速度的代碼。
#導入庫文件from?math?import?radians,?cos,?sin,?asin,?sqrt?? import?numpy?as?npimport?pandas?as?pd#通過經緯度計算距離的函數def?haversine(lon1,?lat1,?lon2,?lat2):?#?經度1,緯度1,經度2,緯度2?(十進制度數)?? ????"""? ????Calculate?the?great?circle?distance?between?two?points?? ????on?the?earth?(specified?in?decimal?degrees)? ????"""?? ????#?將十進制度數轉化為弧度?? ????lon1=?map(radians,?np.array(lon1))?? ????lat1=?map(radians,?np.array(lat1))????lon2=?map(radians,?np.array(lon2))????lat2=?map(radians,?np.array(lat2))????lon1?=?np.array(list(lon1)).reshape(-1,1)????lon2?=?np.array(list(lon2)).reshape(-1,1)????lat1?=?np.array(list(lat1)).reshape(-1,1)????lat2?=?np.array(list(lat2)).reshape(-1,1)????#?haversine公式?? ????dlon?=?lon2?-?lon1????dlat?=?lat2?-?lat1? ????a?=?np.sin(dlat/2)**2?+?np.cos(lat1)?*?np.cos(lat2)?*?np.sin(dlon/2)**2?? ????c?=?2?*?np.arcsin(np.sqrt(a))??? ????r?=?6371?#?地球平均半徑,單位為公里?? ????return?c?*?r?*?1000??#計算每次騎行的米數并增加騎行距離字段cb5["meter"]=haversine(cb5["start?station?longitude"],cb5["start?station?latitude"],cb5["end?station?longitude"],cb5["end?station?latitude"])#將原數據表中的騎行時間由秒轉化為小時cb5["duration_hour"]=cb5["tripduration"]/3600#將米轉化為公里并與小時計算出速度cb5["speed"]=cb5["meter"]/1000/cb5["duration_hour"] 現在我們有了每次騎行的速度,還需要計算出用戶平均的騎行速度。#將每次騎行的米數求和并轉化為公里km=cb5["meter"].sum()/1000#將每次騎行的秒數求和并轉化為小時hour=cb5["tripduration"].sum()/3600#計算平均速度speed=km/hour#平均速度為6.31公里/小時speed6.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的租賃數量進行了預測。
以下是繪制散點圖和進行回歸分析的代碼。
#讀取2015年紐約市的氣象數據weather=pd.DataFrame(pd.read_csv('823248.csv'))#提取每日最高氣溫數據group_weather_day=weather['TMAX']#對2015年騎行時間按天匯總計算cb_day=cb.resample('D',how=len)#提起每日騎行數量group_cb_day=cb_day['bikeid']#對每日最高氣溫和騎行量數據進行標準化處理from?sklearn?import?preprocessing scaler?=?preprocessing.StandardScaler().fit(group_weather_day) X_Standard=scaler.transform(group_weather_day) scaler?=?preprocessing.StandardScaler().fit(group_cb_day) Y_Standard=scaler.transform(group_cb_day)#繪制最高氣溫和騎行數據散點圖plt.rc('font',?family='STXihei',?size=15) plt.scatter(X_Standard,Y_Standard,60,color='#052B6C',marker='+',alpha=0.8,linewidth=1.5) plt.xlabel('日最高氣溫') plt.ylabel('Citi?Bike租賃次數') plt.title('最高氣溫與Citi?Bike之間的關系') plt.grid(color='#95a5a6',linestyle='--',?linewidth=1,axis='both',alpha=0.4) plt.show()#設置每日最高氣溫為自變量XX?=?np.array(weather[['TMAX']])#設置每日騎行數量為因變量YY?=?np.array(cb_day[['bikeid']])#導入線性回歸庫from?sklearn?import?linear_model clf?=?linear_model.LinearRegression() clf.fit?(X,Y)#計算相關度clf.score(X,Y)0.60841860048565455#斜率clf.coef_ array([[?536.64465091]])#截距clf.intercept_ array([-7282.61437278])
回歸方程:
#分布對19,39和97華氏度的Citi?Bike租賃量進行預測 clf.predict(19) array([[?2913.63399443]]) clf.predict(39) array([[?13646.52701255]]) clf.predict(97) array([[?44771.9167651]])
騎行速度與年齡是否存在關聯?
通過前面的計算我們已經知道了每次騎行用戶的年齡和騎行速度信息,那么這兩者之間是否存在關聯呢?換句話說是否隨著年齡的增長騎行速度會逐漸減慢呢?我們通過簡單的一元回歸來分析下兩者間的聯系。這里我們只使用2015年5月的數據進行分析。
#計算并增加年齡字段cb5['age']=2015-cb5['birth?year']#提取年齡和騎行速度字段age_speed=cb5[['speed','age']]#去除騎行速度為0的數據age_speed=age_speed.dropna()#年齡設置為自變量XX?=?np.array(age_speed[['age']])#速度設置為因變量YY?=?np.array(age_speed[['speed']])#導入線性回歸庫from?sklearn?import?linear_model#將數據導入模型clf?=?linear_model.LinearRegression() clf.fit?(X,Y)#斜率clf.coef_ array([[-0.02899706]])#截距clf.intercept_ array([?10.05513438])#R方clf.score(X,Y)0.011272777068773165
從R方來看年齡與騎行速度間并沒有關聯,騎行速度并不會隨著年齡的增長而增長。這里主要的原因我想有兩個。第一Citi Bike的使用場所主要在城市里,并且多為短途。第二使用者除了城市居民上下班通勤外,還有一部分的游客,他們的目的是欣賞沿途美麗的風景因此騎行速度也會較慢。
#20歲的騎行速度預測為9.4公里 clf.predict(20)array([[?9.47519327]]) #50歲的騎行速度預測為8.6公里 clf.predict(50)array([[?8.60528161]])
哪些騎行線路最受歡迎?
在Citi Bike的官網上有一個頻道叫Explore NYC ,里面提供了最熱門的騎行線路和沿途的著名景觀。我們對5月的數據進行統計,找出最受歡迎的騎行開始地點。以及受歡迎的騎行線路。
Top10受歡迎的租賃點
對5月騎行數據進行統計,找出前10個最受歡迎的騎行開始地點及經緯度數據。將經緯度數據輸入到plotly工具中,繪制出Citi Bike 2015年5月在紐約最受歡迎的前10個租賃地點。
以下是前10個最受歡迎租賃點的統計代碼及結果。
#使用數據透視找出前5個最受歡迎地點的經緯度數據 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為騎行開始地點,使用plotly工具描繪出一條用戶的騎行線路。上面的圖中是從Google街景中截圖的圖片,也是騎行線路開始的地點。下面是plotly工具顯示出的本次騎行開始和結束的位置。由于我們只有開始和結束兩個經緯度數據,因此顯示為一條直線。
借助Google地圖的騎行路線我們模擬出了用戶這兩點之間可能的騎行路線,這并非用戶的真實騎行路線。但可以幫助我們更加詳細的了解用戶使用Citi Bike的情況。
以下是通過數據透視獲得騎行位置和經緯度的代碼。
#獲得騎行開始和結束地點及經緯度數據 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)
小結
我們使用Python對紐約自行車共享系統Citi Bike 990萬次騎行數據的簡單分析,在驚嘆于用戶對自行車共享系統的熱愛和使用頻率的同時,也學習到很多用戶騎行的信息。通過本次分析可以得到以下結論,使用Citi Bike的用戶以紐約市的中年男性為主,在每天的早晨的8點和傍晚6點是Citi Bike的使用高峰。由于Citi Bike對超時單獨收取費用,用戶的騎行時間多數在20分鐘以內。用戶對Citi Bike的使用受季節和氣溫的影響,相關度達到0.6,夏秋兩季租賃量最大,冬季最低。用戶的年齡與騎行速度關聯并不緊密,平均騎行速度為6.3公里/小時。
本文節選自《從Excel到Python——數據分析進階指南》
內容簡介
本書通過Python與Excel的功能對比介紹如何使用Python通過函數式編程完成Excel中的數據處理及分析工作。
在Python中pandas庫用于數據處理,本書從1787頁的pandas官網文檔中總結出最常用的36個函數,通過這些函數介紹如何通過Python完成數據生成和導入、數據清洗、預處理,以及最常見的數據分類,數據篩選,分類匯總,透視等最常見的操作。
王彥平 (藍鯨),Google分析個人資格認證,專注于網站數據分析實踐及Google Analytics應用研究。創建“藍鯨的網站分析筆記”博客分享網站分析經驗與技巧,被Avinash Kaushia先生推薦為探索Google Analytics必讀的中文博客。同時王彥平還是艾瑞網專家,艾瑞商學院講師,Digital Analytics Association會員和互聯網著名開放式分類目錄(Open Directory Project)DMOZ網站的志愿編輯。
電子郵件:cliff1980@gmail.com
新浪微博:@藍鯨碎碎念
靈活優惠的購書
歡迎注冊成為異步社區(www.epubit.com.cn)用戶,即可享受下單購買圖書、下載隨書附贈的資源以及與作譯者互動。
特別優惠
購買本電子書的讀者專享異步社區優惠券。 使用方法:注冊成為社區用戶,在下單購書時輸入“57AWG”,然后點擊“使用優惠碼”,即可享受電子書8折優惠(本優惠券只可使用一次)。
本文轉載自異步社區
數據挖掘 Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。