我不是精日,但我比较期待去日本这个国家旅游,那里空气比较好,人都很有礼貌,街道又干净,日系产品也不错,说到去旅游很多人都开始做攻略,旅游路线,住宿宾馆都是重点关注的对象,选择正确了可以玩的省时省力,最主要还省钱。
据Japan-Guide.com报道,在日本停留一晚只需2.5至5,000日元。 让我们看一下,当您在此分析中入住宿舍时,如何选择最佳酒店。
数据库来自:
HostelWorld.com是最大的在线旅馆预订平台。
他们的服务适合寻求社交旅行体验的年轻和独立旅行者,其专注于旅馆,拥有超过16,000个旅馆和全球约20,000种其他形式的预算住宿,与其他旅行社不同。自2005年以来,它一直在管理客户生成的审查数据库,包括超过1000万次的住宿后审查。
今天我们要利用数据分析解决的问题是日本酒店的状况和性价比最高的酒店特征是什么?
先把数据属性列出来看看都有哪些特征用来分析:
数据特征 | 说明 |
hostel.name | 酒店名称 |
City | 所在城市 |
Price.from | 住宿一晚所需最低价格 |
Distance | 距离市中心距离 |
Summary.score | 综合打分 |
Rating.band | 酒店等级,如very good,Superb |
atmosphere | 空气质量打分 |
clearnliness | 洁净程度打分 |
facilities | 舒适度打分 |
Location.y | 地理位置打分 |
Security | 安全性打分 |
Staff | 服务人员打分 |
Valueformoney | 性价比打分 |
Lon | 经度 |
Lat | 纬度 |
数据概览:
日本还真是个爱用分数来评价事物的民族,之前日本的动画游戏,都爱给人物设定各种属性值。
一 :基础数据处理开始:
1.数据中有些字段是残缺不全的,这里就不做填充了,直接给0分,因为万一是家很差的旅馆,用平均值填充不是便宜它了。
2. Distance字段的值是XXX km from city centre,需要把XXX保留,剩下的字符去掉
3.ID字段还有Hotel name字段我们是不需要的,经纬度我想也不是必要的。
path = 'Hostel.csv' hostel_data = pd.read_csv(path) #将所有数据的NaN值都变为0 hostel_data = hostel_data.replace(np.nan,0) #去除distance中多余字段并保存为 hostel_data.Distance = hostel_data.Distance.replace(to_replace=r"km from city centre",value="",regex=True).astype(float)
#汇总统计数据字段 stat_all = ["City","price.from","Distance","summary.score","rating.band","atmosphere","cleanliness","facilities","location.y","security","staff","valueformoney"] train_data = ["City","price.from","Distance","summary.score","rating.band","atmosphere","cleanliness","facilities","location.y","security","staff"] train_y = ["valueformoney"]
hostel_stat_all = hostel_data[stat_all] hostel_train_data = hostel_data[train_data] hostel_train_y = hostel_data[train_y] print (hostel_train_data.head(5)) |
简单处理后数据变成了这样,看着好像好了很多。
基础数据分析开始
先看看日本的旅馆分布情况,可以看到东京的旅馆最多而广岛的最少,广岛觉得还是很有名气的,广岛之恋很多人都听过,二战时的事情也是很有名。
def getCityHotelCount(): data = hostel_train_data.groupby(hostel_train_data.City).size().sort_values(ascending=False).reset_index().rename(columns={0:'Counts'}) ax = data.plot.bar(x='City',y='Counts') ax.set_xlabel('City') ax.set_ylabel('Counts') plt.show()
print (data) |
那么我们再增加一项看看各个城市酒店的口碑分布情况,是不是广岛的酒店口碑差导致的旅游酒店少,这里"Superb", "Fabulous", "Very Good", "Good", "Rating"是酒店等级从高到低排列的,至于性价比先不考虑,还是采用之前对比值,东京有127家酒店,SuperB的有66家,不足一半,而广岛14家酒店有11家是SuperB,看来广岛的豪华酒店更多些,在广岛是不是因为价格便宜才会都去建设豪华酒店呢?
这里我们先将每个城市酒店的价格区间列出来对比一下,这里我先将东京的SuperB等级酒店的价格列出来,可以看到价格非常的分散,但大多数都是2000~2500起价。
再将广岛的列出来,你会发现广岛的酒店最低起价在2000元~3000元区间,明显东京的豪华酒店更有底气起价贵些。
看来去广岛旅游也不错,价格都是比较接近的,我猜测酒店距离市中心越近越贵,这个是常识么,尤其是东京那种寸土寸金的地方,但接近市中心的酒店好评率是否也同样不错呢?我们一探究竟,这里将价格,距离,好评度都放到同一坐标下,这里价格作为其中的坐标点,点越大代表价格越贵,横坐标为好评度,纵坐标为距离市中心的距离,可以看到实际上距离市中心越远,好评度反而越高,好评度最高的是那家距离市中心最远的那家,所以去东京旅游还是不要住的太近为好,价格上看最贵(圆面积最大)的那家,距离市中心不近,而且好评度一般。
#距离与价格散点图 def getDistanceAndPrice(): tokyo_data = hostel_data[hostel_data['City']=='Tokyo'] colors = np.random.randint(50) tokyo_data['price.from'] = tokyo_data['price.from'].astype(float).map(lambda x:x / 100) tokyo_data['summary.score'] = tokyo_data['summary.score'].astype(float).map(lambda x:x * 10) tokyo_data['location.y'] = tokyo_data['location.y'].astype(float).map(lambda x:x * 10) ax = tokyo_data.plot.scatter(x='summary.score',y='location.y',c='rgb',alpha=0.5,s = tokyo_data['price.from']) ax.set_xlabel('Summary.score') ax.set_ylabel('Distance') ax.set_title('Distance&Price scatter') plt.show() |
现在开始解密到底哪项打分对最终好评度影响最大。
这里先看看我们准备的评选因素,下表中用户的打分情况影响到了最终summary.score的分数。
atmosphere | 空气质量打分 |
clearnliness | 洁净程度打分 |
facilities | 舒适度打分 |
Location.y | 地理位置打分 |
Security | 安全性打分 |
Staff | 服务人员打分 |
Valueformoney | 性价比打分 |
这里我们用线性回归的方式,也就是Y = Wx + b来看看每项的权重比例,首先要保证我们模型预测的准确性:
def LR(): x = hostel_data[train_score_data] y = hostel_data[train_y] x_train, x_test, y_train, y_test = train_test_split(x,y, random_state=101, test_size=0.30) lr = LinearRegression() lr.fit(x_train,y_train) lr_y_pred = lr.predict(x_test) print ('LinearRegress is',lr.score(x_test,y_test)) |
这个结果最终打印结果是:LinearRegress is 0.9935054265318065,是很不错的结果了,这样我们就可以将其各个项的权重列出。
fvalue,pvalue = f_regression(x_train,y_train) for i,value in enumerate(fvalue): print (train_score_data[i] + " score :"+ str(int(value))) |
这里value值越高代表与最终好评度结果关联越强,这里可以看到Valueformoney得分最高,代表好评度里关于性价比的打分最重要,排在第二位的是便利程度,第三位是服务态度,而得分最少的空气质量,这个也可以理解毕竟日本全境空气都不错。
这里可以看到去日本旅游住宿时还是考虑性价比的,而且距离中心较远的酒店好评度比较高,别去追求豪华酒店,那里的客户打分并不是很高。