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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【数据分析实战】基于python对Airbnb房源进行数据分析

發布時間:2024/5/14 python 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据分析实战】基于python对Airbnb房源进行数据分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


文章目錄

  • 📚引言
  • 📖數據加載以及基本觀察
    • 📃缺失值觀察及處理
      • 🔖缺失值觀察以及可視化
      • 🔖缺失值處理
    • 📃異常值觀察及處理
  • 📖數據探索
    • 💡哪個區域的房源最受歡迎?
    • 💡哪種房型最受歡迎?它們的價格怎么樣?
    • 💡最受歡迎的房源和最不受歡迎的房源有什么特征?
  • 📍總結與展望

📚引言

🙋?♂?作者簡介:生魚同學,大數據科學與技術專業碩士在讀👨?🎓,曾獲得華為杯數學建模國家二等獎🏆,MathorCup 數學建模競賽國家二等獎🏅,亞太數學建模國家二等獎🏅。

??研究方向:復雜網絡科學

🏆興趣方向:利用python進行數據分析與機器學習,數學建模競賽經驗交流,網絡爬蟲等。

自2008年以來,客人和房東利用Airbnb擴大了旅行的可能性,并提出了一種更獨特、個性化的體驗世界的方式。

通過Airbnb提供的數百萬個房源的數據分析是該公司的一個關鍵因素。這些數以百萬計的房源產生了大量的數據其可以被分析并用于安全、商業決策、了解客戶和供應商(房東)在平臺上的行為和表現、指導營銷舉措、實施創新的附加服務等等。

基于上述背景和數據,我們本次主要解決下面幾個問題:

  • 哪個區域的房源最受歡迎?
  • 哪種房型最受歡迎?它們的價格怎么樣?
  • 最受歡迎的房源和最不受歡迎的房源有什么特征?

本項目中的數據來源于Kaggle開放數據New York City Airbnb Open Data鏈接如下:
Kaggle-New York City Airbnb Open Data
需要的小伙伴可以自行下載獲取。

📖數據加載以及基本觀察

在進行數據加載之前,我們首先對數據的各個列進行解釋,具體情況如下表所示:

列名表達含義
id掛牌編號
name掛牌名字
host_id主人編號
host_name主人名字
neighbourhood_group房屋所在區域
neighbourhood房屋具體地區
latitude經緯度
longitude經緯度
room_type房間類型
price價格
minimum_nights最少的預定夜數
number_of_reviews評論數
last_review最新評論
reviews_per_month每月評論數
calculated_host_listings_count主人擁有房屋的數量
availability_365可供預訂的天數

在開始編碼之前,請先確保你已經安裝了對應的包,本文所用的包如下:

import pandas as pd import missingno as msno import seaborn as sns

在這一步中,我們將加載數據并且調用pandas中的基本函數對數據進行初步的觀察。加載數據代碼如下:

data = pd.read_csv('AB_NYC_2019.csv') data.head()

結果如下:

在加載數據過后,我們需要對數據進行初步的認識與觀察,這里我們調用**info()describe()**函數來對數據進行初步的觀察。代碼和結果如下:

data.info()

結果如下:

注意:在這一步中,我們觀察到圖中紅圈標記的數據存在一定的缺失情況,這在后續的操作中需要進行處理。

接著,我們調用**describe()**進行數據的進一步觀察,代碼如下:

data.describe()

結果如下:

注意:在這里,我們已經發現了一個異常,這里的minimum_nights表示的是最短租賃時長。然而,它的最大值已經超過了365,我們后續需要留意。

📃缺失值觀察及處理

🔖缺失值觀察以及可視化

在發現缺失值后,我們需要對缺失值進行有針對性的觀察和處理,我們首先對其進行提取以及可視化的操作。首先提取所有缺失的列以及它們缺失的個數情況,代碼如下:

missing_data = data.isnull().sum() missing_data = missing_data[missing_data > 0] missing_data

結果如下:

可以看到,在名字以及主人名字方面存在一定的缺失,關于評論的缺失情況比較明顯且多,我們后面會進行有針對性地處理。

接下來我們對其進行可視化,在這里我們會使用缺失值可視化庫以及柱狀圖來進行可視化,代碼如下:

# 對數據進行采樣 sample_data = data.sample(1000) # 可視化 msno.bar(sample_data)

結果如下:

另外,我們也可以用柱狀圖來進行可視化,代碼如下:

missing_data.plot.bar()

結果如下:

🔖缺失值處理

在處理缺失值之前,我們首先要進行分析。

主要缺失的值有上述四列,我們對其的分析以及處理方案如下:

  • name :房屋名稱,無關緊要的列,準備刪除。
  • host_name :主人姓名,無關緊要的列,準備刪除。
  • last_review :最新的評論,如果該房屋不存在評論,那么這列一定為0,所以準備將其刪除,保留下面的每月評論。
  • reviews_per_month:保留,對缺失值填充0。

上述操作的代碼如下:

# 刪除了['id','host_name','last_review']三列 data.drop(['id','host_name','last_review'], axis=1, inplace=True) # 用0填充'reviews_per_month'為Nan的數據 data.fillna({'reviews_per_month':0}, inplace=True)

📃異常值觀察及處理

在上面的分析中,我們觀察到了minimum_nights的異常情況,在這里我們使用箱線圖對其進行可視化觀察,代碼如下:

data['minimum_nights'].plot.box()

結果如下:

我們可以觀察到,紅色標記的部分即是可能的異常值,我們對其進行處理。代碼如下:

# 將該列大于365的數據改為365 data.loc[data['minimum_nights'] > 365, 'minimum_nights'] = 365

📖數據探索

在本節中,我們將從數據出發進行合理的探索,得出一些結論。

💡哪個區域的房源最受歡迎?

在這個問題的探索中,我們將從兩個角度考慮問題,即評論越多證明房屋的歡迎程度越高,與此同時可用天數越少證明房屋越火爆。我們首先來看看數據中有幾個不同的地區,代碼如下:

# 探究有幾個不同的地區 data.neighbourhood_group.unique()

結果如下;


然后我們分別對針對評論數以及年度可用天數進行分組組成新的數據,代碼如下:

# 根據評價對區域房源進行分析 # 評論越多越受歡迎 neighbourhood_group_reviews = data['number_of_reviews'].groupby(data['neighbourhood_group']) neighbourhood_group_reviews_data = pd.DataFrame(neighbourhood_group_reviews.sum().sort_values(ascending = False)) neighbourhood_group_reviews_data# 根據可用天數對區域房源進行分析 # 可用天數越小越受歡迎 neighbourhood_group_availability_365 = data['availability_365'].groupby(data['neighbourhood_group']) neighbourhood_group_availability_365_data = pd.DataFrame(neighbourhood_group_availability_365.mean().sort_values()) neighbourhood_group_availability_365_data

兩個數據所組成的新表如下:



我們可以看到,不論是從年度可用天數還是評論數目來說,Brooklyn的房屋都是最受歡迎的,接下來我們利用可視化來進行更直觀的觀察,代碼如下:

sns.barplot(x="neighbourhood_group", y="number_of_reviews", data=popular_neighbourhood_group_data, palette="RdYlBu") sns.barplot(x="neighbourhood_group", y="availability_365", data=popular_neighbourhood_group_data, palette="RdYlBu")

結果如下:


這樣來看,結果就比較容易觀察到了。基于上述分析,我們得出以下結論:

  • Brooklyn不論是從年度可用天數還是評論數目來說,都能證明其是最受歡迎的地區。
  • Brooklyn的平均年度可用天數為100左右,而其房屋評論數目的總和達到了486574的最高評論數。
  • Manhattan緊隨其后,受歡迎程度與Brooklyn相近,但是其不如Brooklyn受歡迎。

💡哪種房型最受歡迎?它們的價格怎么樣?

在本節中,我們將要探索那種房子的類型最受歡迎,以及他們的價格特點。

首先,我們從全部地區的角度來觀察不同房型的受歡迎程度以及其平均的價格如何。我們將要建立房型與價格、評論數目、可用天數的表格并進行可視化,代碼如下:

# 建立房型與價格的表 price_room_type = data['price'].groupby(data['room_type']) price_room_type_data = pd.DataFrame(price_room_type.mean()) # 建立房型與評論數的表 reviews_room_type = data['number_of_reviews'].groupby(data['room_type']) reviews_room_type_data = pd.DataFrame(reviews_room_type.sum()) # 建立房型與可用天數的表 availability_365_room_type = data['availability_365'].groupby(data['room_type']) availability_365_room_type_data = pd.DataFrame(availability_365_room_type.mean()) # 將上述表合并 popular_type_value = pd.concat([availability_365_room_type_data,reviews_room_type_data,price_room_type_data], axis=1) popular_type_value['room_type'] = popular_type_value.index popular_type_value.reset_index(inplace=True,drop=True) popular_type_value

結果如下:

為了更直觀的進行分析,我們對其進行可視化。代碼如下:

sns.barplot(x="room_type", y="availability_365", data=popular_type_value, palette="RdYlBu") sns.barplot(x="room_type", y="number_of_reviews", data=popular_type_value, palette="RdYlBu") sns.barplot(x="room_type", y="price", data=popular_type_value, palette="RdYlBu")

結果如下:




可以看出,Entire home/apt在所有的房屋類型中,所有的方面來說都是最火爆的。

接下來,我們將從不同的地區分別建立透視表進行進一步的分析與探索。

我們分別構建評論數目,地區,房間類型的透視表、年度可用天數與房間類型,地區的聯系表、價格與房間類型,地區的聯系表。

具體代碼如下:

# 構建評論數目,地區,房間類型的透視表 sum_reviews_pivot = data.pivot_table('number_of_reviews', index='neighbourhood_group', columns='room_type', aggfunc='sum')

結果如下:

然后我們對其進行可視化,代碼如下:

sum_reviews_pivot.plot.bar()

結果如下:

我們同樣將其與年度可用天數,和價格構建透視表,然后進行可視化,代碼和結果如下:

# 構建年度可用天數與房間類型,地區的聯系表 mean_availability_365_pivot = data.pivot_table('availability_365', index='neighbourhood_group', columns='room_type', aggfunc='mean') mean_availability_365_pivot.plot.bar()# 構建價格與房間類型,地區的聯系表 mean_price_pivot = data.pivot_table('price', index='neighbourhood_group', columns='room_type', aggfunc='mean') mean_price_pivot.plot.bar()

結果如下:



根據上述分析,我們可以得出以下結論:

  • 在所有的地區總體來看,Entire home/apt都是最受歡迎的房型,但是其平均價格也是最貴的,在211左右。
  • 在Brooklyn和Manhattan這兩個地區,Entire home/apt都是最受歡迎的房型,但是在其他地區情況略有不同。
  • 從價格來看,Manhattan的Entire home/apt是最貴的,均價在249左右。而Brooklyn相對便宜,在178左右。

💡最受歡迎的房源和最不受歡迎的房源有什么特征?

為了解決本節的問題,我們首先要把最受歡迎的房子和最不受歡迎的房子提取出來并且利用**describe()**查看我們所關心的信息,代碼如下:

top_10 = data.sort_values(by='number_of_reviews', ascending=False).head(10)

結果如下:

通過**describe()**進行初步觀察的結果如下:

我們發現,價格數據以及最短居住時間的數據仿佛和平均值有一定的差異,我們從完整的數據取出其值并進一步對照觀察。

我們先來看全局的價格平均值與最歡迎的平均值的對比,代碼和結果如下:

# 全局數據各房型價格的平均值 data['price'].groupby(data['room_type']).mean() # 最受歡迎的數據各房型價格的平均值 top_10['price'].groupby(top_10['room_type']).mean()

全局數據各房型價格平均值如下,結果如下:

最受歡迎的10個房型價格平均值如下:

我們發現最受歡迎的10個房型價格比平均值偏低。

進一步的,我們對照其最小居住時長。代碼和結果如下:

data['minimum_nights'].groupby(data['room_type']).mean() top_10['minimum_nights'].groupby(top_10['room_type']).mean()

全局數據各房型價格平均值如下,結果如下:

最受歡迎的10個房型價格平均值如下:

我們發現最受歡迎的10個房型最小居住時長比平均值偏低。

類似的,我們在最不受歡迎的十個房間中也發現了相反的情況,由于篇幅限制本文不再展示過程,感興趣的朋友可以自己試試看。

基于上述數據,我們得出結論:

  • 最受歡迎的房間,通常價格比平均價格低并且其最短居住時間會很小。
  • 上述情況存在一定的可解釋性,即大部分的游客或者居住者都是旅行者,其更容易接受價格實惠允許短時間居住的房間。
  • 最不受歡迎的房子,通常價格比平均價格高很多,并且其最短居住時間過長。
  • 基于上述內容,房子持有者可以通過下調房間價格至平均值下或者進一步減小居住時長來提高房子的居住率。

📍總結與展望

在本文中,我們基于Airbnb房源進行了數據分析,并從多種角度對其展開了探索性的工作。這對于養成數據分析習慣有很大的幫助,在實際工作或者學習中還需要不斷練習。

感興趣的朋友們可以自己按照上述步驟進行操作,或在評論區與我討論。

需要源碼的朋友可以私信我進行索取,我們下次再見。

總結

以上是生活随笔為你收集整理的【数据分析实战】基于python对Airbnb房源进行数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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