日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爱彼迎的数据分析与建模

發布時間:2024/5/14 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爱彼迎的数据分析与建模 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Airbnb是AirBed and Breakfast(“Air-b-n-b”)的縮寫,愛彼迎是一家聯系旅游人士和家有空房出租的房主的服務型網站,它可以為用戶提供多樣的住宿信息。我們現在對數據進行分析。

一,對數據處理

1.因為price里面的數據有’$‘和’,’,我們要替換成空格,便于我們之后的運算

calendar['price'] = calendar['price'].str.replace(r"[$,]","").astype(np.float32) calendar.head()

并且轉換浮點類型。

同理,對adjusted_price進行相同操作,再對date進行時間序列轉換,得到結果。

如圖所示,我們發現類型還是object,再修改一下。

完成了,現在是datetime類型。

2.用時間序列我們可以很輕松地返回商品的相關時間

calendar['weekday']=calendar['date'].dt.weekday calendar['month']=calendar['date'].dt.month calendar['year']=calendar['date'].dt.year calendar['year']

會返回商品交易的年份,非常方便。做出柱狀圖我們可以看到商品月份的波動。

可以看出,3到8月份房屋價格遞增,8月份達到峰值。

二,對listing_detail進行分析
listing_detail數據比較多。足足有106列

元素比較多,這里有個小技巧
我們可以用
listings_detaile.columns.values.tolist()
對每一列的元素進行查看

1.我們要對這一列的數據價格進行同樣的處理,去掉不必要的符號便于運算

2.然后要求出最低消費,便于我們后邊模型的建立

listings_detailed['minimum_cost']=(listings_detailed['cleaning_fee']+listings_detailed['price'])*listings_detailed['minimum_nights']

最低消費是費用加消費乘以最低天數。

3.要添加一個新字段。包含設施的數量,設施的數量與價格有直接關系

我們可以看到,設施用一個大括號括起來,我們可以用切片提取里面的數值,再用split分割逗號。

listings_detailed['accommodates_type']=pd.cut(listings_detailed['accommodates'],bins=[1,2,3,5,100],include_lowest=True,right=False,labels=['Single','Couple','Family','Group'])

4.再把剩余需要的數據提取,整合到新的df里邊

listings_detailed['neighbourhood_group_cleansed'].head() listings_detailed['review_scores_rating'].head() listings_detailed_df=listings_detailed[['id','host_id','listing_url','room_type','neighbourhood_group_cleansed','price','cleaning_fee','amenities','n_amenities','accommodates','accommodates_type','minimum_nights','minimum_cost']] listings_detailed_df.head()

得到一個新df,用來方便之后的運算

.二,對房間類型和社區類型進行初步分析

用餅圖和柱狀圖對房間類型進行分析

room_type_counts=listings_detailed_df['room_type'].value_counts() fig,axes = plt.subplots(1,2,figsize=(10,5)) axes[0].pie(room_type_counts.values,autopct='%.2f%%',labels=room_type_counts.index) sns.barplot(room_type_counts.index,room_type_counts.values) plt.tight_layout()

我們能看出entrie home即是整套房間,占比最高

然后對社區類型進行分析

neighbourhood_counts = listings_detailed_df['neighbourhood_group_cleansed'].value_counts() sns.barplot(y=neighbourhood_counts.index,x=neighbourhood_counts.values,orient='h')

可以看出社區類型排名,都是一些比較專業的名,薩拉曼卡什么的。

三,對房東進行相關分析

host_number=listings_detailed_df.groupby('host_id').size().sort_values(ascending=False) sns.distplot(host_number[host_number<10])


可以看出,擁有一套房的房東數量居多。把擁有的房屋數量劃分下等級得出下圖,

四,評論數量與時間分析
讀取reviews文件的時候可以直接把date的類型進行轉換

reviews=pd.read_csv('./reviews_detailed.csv',parse_dates=['date'])

對時間序列進行相關處理

reviews['year']=reviews['date'].dt.year reviews['month']=reviews['date'].dt.month

查看下年份的分布情況:

reviews.groupby('year').size()


可以看的出,評論的數量在每年遞增,知道2018年到頂峰,2019年有所下降。

說明用戶的活躍度也越來越高。
我們再按照月份來分:

n_reviews_months=reviews.groupby('month').size() sns.barplot(n_reviews_months.index,n_reviews_months.values)

得到

可以看出,4到7月用戶的活躍度最高。

再做一個折線圖,把歷年評論數量整合在一起。
把歷年評論數整合在一個表格

year_month_reviews=reviews.groupby(['year','month']).size().unstack('month').fillna(0)


然后把2016到2019的代碼整合到一張圖

fig,ax=plt.subplots(figsize=(10,5)) for index in year_month_reviews.index:series = year_month_reviews.loc[index]sns.lineplot(x=series.index,y=series.values,ax=ax)ax.legend(labels=year_month_reviews.index) ax.grid() ax.set_xticks(list(range(1,13)))


我們可以很方便地從圖中看出各年評論的數量趨勢

五,預測房間價格
首先我們可以看下影響房間價格的因素

'host_is_superhost',#超級房東,在愛彼迎混的比較久,價格可能會稍高 'host_identity_verified',#房東是否經過認證 'neighbourhood_group_cleansed',#社區 'latitude',#經度 'longitude',#緯度 'property_type',#公寓類型 'room_type',#房間類型 'accommodates',#可容納人數 'bathrooms',#浴室數 'bedrooms',#臥室數 'cleaning_fee',#小費 'minimum_nights',#最少居住晚 'maximum_nights',#最多居住夜晚數 'availability_90',#在90天內有多少天是可用的 'number_of_reviews',#評論數量 'review_scores_rating',#評分 'is_business_travel_ready',#是否做好商務,旅游服務 'n_amenities',#設施數 'price'#價格

清理完異常值后,分割特征值和目標值

from sklearn.preprocessing import StandardScaler #分割特征值和目標值 features = ml_listing.drop(columns=['price']) targets=ml_listing['price'] features.head()

處理完成后,進行one-hot編碼和標準化

#對特征值進行處理 #針對離散型數據進行one-hot編碼 disperse_columns = ['host_is_superhost','host_identity_verified','neighbourhood_group_cleansed','property_type','room_type','is_business_travel_ready' ] disperse_features = features[disperse_columns] disperse_features = pd.get_dummies(disperse_features)# 對連續性數據進行標準化(因為特征值之間相差并不是很大,所以標準化的可能對預測結果影響不是很大) continuouse_features = features.drop(columns=disperse_columns) scaler = StandardScaler() continuouse_features = scaler.fit_transform(continuouse_features) continuouse_features

對處理后的特征值進行組合

#對處理后的特征進行組合 feature_array = np.hstack([disperse_features,continuouse_features]) feature_array

導入模型,進行預測

from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.ensemble import RandomForestRegressor from sklearn.metrics import mean_absolute_error,r2_scoreX_train,X_test,y_train,y_test = train_test_split(feature_array,targets,test_size=0.25) regressor = RandomForestRegressor() regressor.fit(X_train,y_train) y_predict = regressor.predict(X_test)print("平均誤差:",mean_absolute_error(y_test,y_predict)) print("R2評分:",r2_score(y_test,y_predict))

預測結果

R2評分越接近1,結果越準確。

六,評論數量預測
評論數量分析用到reviews數據集

ym_reviews=reviews.groupby(['year','month']).size().reset_index().rename(columns={0:"count"}) features = ym_reviews[['year','month']] targets = ym_reviews['count']# X_train,X_test,y_train,y_test = train_test_split(features,targets,test_size=0.25) # regressor = RandomForestRegressor(n_estimators=100) # regressor.fit(X_train,y_train)# y_predict = regressor.predict(X_test)# print("平均誤差:",mean_absolute_error(y_test,y_predict)) # print("R2評分:",r2_score(y_test,y_predict))

可以得出平均誤差與R2值

R2值很接近1,證明這個模型很很合適。
代入2019年10到12月的值

regressor = RandomForestRegressor(n_estimators=100) regressor.fit(features,targets)y_predict = regressor.predict([[2019,10],[2019,11],[2019,12] ])y_predict

得到的就是預測值,分別是array([18252.94, 18020.23, 17785.06])

再把新的值代入可視化

predict_reviews = pd.DataFrame([[2019,10+index,x] for index,x in enumerate(y_predict)],columns=['year','month','count']) final_reviews = pd.concat([ym_reviews,predict_reviews]).reset_index() years = final_reviews['year'].unique()fig,ax = plt.subplots(figsize=(10,5)) for year in years:df = final_reviews[final_reviews['year']==year]sns.lineplot(x="month",y='count',data=df)ax.legend(labels=year_month_reviews.index) ax.grid() _ = ax.set_xticks(list(range(1,13)))

得到

至此,愛彼迎的數據分析算是完成了

總結

以上是生活随笔為你收集整理的爱彼迎的数据分析与建模的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。