背景
本次主要对Airbnb在北京地区2020年10月的部分数据,由于数据内容较少,本次仅进行的数据探索,点击可下载数据。
数据共计16列,2万7千余条。其中字段包括房源ID,房源姓名,房主ID,房主姓名,社区组,区域,纬度,经度,房间类型,价格,最低入住时常,最近一条评论,月评论占比,可出租房数量,可出租天数。
数据清洗
导入常用库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.font_manager import FontProperties
from pylab import *
plt.rcParams['font.family']=['Heiti TC']
font = FontProperties(fname = '/System/Library/Fonts/STHeiti\ Medium.ttc')
%matplotlib inline
# 设置数据路径
path = '/Users/valkyrja/Documents/dataanalysis/taobao/aibiying.csv'
data_1 = pd.read_csv(path)
data_1.info()
经过查看社区组全部为空,考虑进行删除。
id, host_id类型转化为字符串。
last_reviews 转换为时间类型
data_1.isnull().sum()
# 存在缺失值,房主姓名和社区组的列进行删除操作
# 进行删除列
data_1.drop('host_name', axis = 1, inplace = True)
data_1.drop('neighbourhood_group', axis = 1, inplace = True)
# 查看列名称
data_1.columns
# 仅需要这5列
col = [
'price',
'minimum_nights',
'number_of_reviews',
'calculated_host_listings_count',
'availability_365']
# 观察价格、最低入住时常、评论数、可出租数、可出租天数
data_1[col].describe()
可能的异常数据
- 价格的最小值为0元
- 可预定为0天
- 最低预定时常为1000天
- 最高价格为9万元
# 查看异常数据,居然有测试数据
data_1[data_1['price'] == 0]
# 发现还有异常价格的数据,还是测试数据
data_1[data_1['price'] == 1]
# 对以上异常数据进行删除操作
data_1.drop(data_1[data_1['price'] < 5].index, inplace = True)
# 可预定为0天的数据也进行删除操作
data_1.drop(data_1[data_1['availability_365'] == 0].index, inplace = True)
# 获取地区,准备获取中文区域
data_1['neighbourhood'].unique()
# 生成中文的区名称
data_1['district'] = data_1['neighbourhood'].str.split('/',expand = True)[0]
数据清洗基本结束。
数据探索
简单按区观察平均价格,累计房源量,最低入住时常和评论数的关系。
# 按区分组进行统计
group_data = data_1.groupby(by = ['district'], as_index = False).agg({'id':'count', 'host_id':'count', 'price':'mean'\
, 'minimum_nights':'mean', 'number_of_reviews':'count'})
d_id = group_data[['district', 'id']].sort_values(by = ['id'], ascending = False) # 统计各区的房源数量
d_p = group_data[['district', 'price']].sort_values(by = ['price'], ascending = False) # 统计各区平均房价
d_n_v = group_data[['district', 'number_of_reviews']].sort_values(by = ['number_of_reviews'], ascending = False) # 统计各区的房源的评论数量
# 各区房源数量
plt.figure(figsize = (12, 4))
plt.title('各区房源数量')
plt.plot(d_id['district'], d_id['id'])
plt.xticks(rotation = 45)
朝阳区房源数量最多,其次是东城。但延庆、怀柔、密云的房源要比市区的房源数数量高,这里持怀疑态度,需要后期进行深入分析。
# 各区平均房价
plt.figure(figsize = (12, 4))
plt.title('各区平均房价')
plt.plot(d_p['district'], d_p['price'])
plt.xticks(rotation = 45)
plt.show()
较远的区域,平均房价较高,不太符合常理,思考可能是存在房价的异常值。后期进一步探索。
# 各区房源评论数量
plt.figure(figsize = (12, 4))
plt.title('各区房源评论数')
plt.plot(d_n_v['district'], d_n_v['number_of_reviews'])
plt.xticks(rotation = 45)
plt.show()
仍然是朝阳和东城的评论时稳居榜首,房最多,而且评论数最多。
总结
- 由于时间问题,本次仅对数据进行初步的探索观察。
- 发现在数据中存在这一些内部测试房源,思考是否后天工作人员应该更加谨慎处理数据,不对外露出展示。
- 根据展示结果,朝阳区的房源、评论量位居榜首,需要进一步观察朝阳区的评论内容,是否有可以得出房源位置、出行交通等有利于消费者之处,以便于后期进行特殊活动推广。
- 郊区的平均房价较高,需要深入探索,到底是因为异常值还是数量等问题。