香港酒店数据分析

香港酒店数据分析

数据预处理

import pandas as pd
import numpy as np


#读取excel
df=pd.read_excel('./香港酒店数据.xlsx')
print(df.head())


# 重新设置数据的索引
#从1开始索引
df.index = range(1, len(df) + 1)
# print(df.head())

# 重新设置列的名称
df = df.rename(columns={'字段1': '名字', '字段2': '类型', '字段3': '城市', '字段4': '地区',
                        '字段5': '地点', '字段6': '评分', '字段7': '评分人数', '字段8': '价格'})
print(df.head())

#能够查找出所有类型为“休闲度假”并且在湾仔地区的酒店.查找出所有地址在观塘或者油尖旺,评分大于4的酒店
print(df[(df['类型']=='休闲度假')&(df['地区']=='港仔')])
print(df[(df['地区']=='观塘')|(df['地区']=='油尖旺')&(df['评分']>4)])


#能够对数据的缺失值进行处理,找出缺失值数据用“其他”填充类型和地区,用评分均值填充评分缺失值,删除价格和评分人数的缺失值。
#查找评分缺失值的数据
print(df[df['类型'].isnull()])
print(df[df['地区'].isnull()])
#填充缺失值(其他)
df['类型'].fillna('其他', inplace=True)
df['地区'].fillna('其他', inplace=True)
print('*'*50)

#查找缺失值评分
print(df[df['评分'].isnull()])
#填充缺失值(平均分)
df['评分'].fillna(np.mean(df['评分']),inplace=True)
print(df[df['评分'].isnull()])

#查找价格和评分人数的缺失值
print(df[df['价格'].isnull()])
print(df[df['评分人数'].isnull()])
#删除价格和评分人数的缺失值的行
df=df.dropna()
#去掉缺失值后重新排列
df.index = range(1, len(df) + 1)
print(len(df))

#dataframe存入excel
df.to_excel('./酒店数据1.xlsx')

数据分析

import pandas as pd
import numpy as np
#读取保存的预处理好的数据,查看“评分”的格式,并分别进行升序和降序排序.对酒店按照价格进行排名,计算“油尖旺”地区的均价。
df=pd.read_excel('./酒店数据1.xlsx')
print(df.head())
#查看评分的格式
print(df['评分'].dtype)
#并分别进行升序和降序排序.
#升序
print(df.sort_values(by='评分',ascending=True)[:10])
#降序
print(df.sort_values(by='评分',ascending=False)[:10])
#对酒店按照价格进行排名
print(df.sort_values(by='价格',ascending=True)[:10])
print('*'*50)
#计算“油尖旺”地区的均价
print(df[df['地区']=='油尖旺']['价格'].mean())


#对酒店数据进行描述性统计,并求所有价格的均值方差,最大最小值,中值。计算评分和价格之间的的相关系数,协方差。
#对酒店数据进行描述性统计
print(df.describe())
print('*'*60)
#均值
print(df['价格'].mean())
#方差
print(df['价格'].var())
#最值
print(df['价格'].max())
print(df['价格'].min())
#中值
print(df['价格'].median())
#相关系数
print(df[['评分','价格']].corr())
#协方差
print(df[['评分','价格']].cov())
print('*'*60)

#按照评分降序排序,评分相同时按价格升序排序。计算出,评分小于3分的酒店数量和占比。
print(df.sort_values(by=['评分','价格'],ascending=[False,True]))
print('&'*60)
df1 = df[df['评分'] < 3]
print(len(df1))
print(len(df1) / len(df))


#统计出酒店评分大于等于4分的酒店的价格均值。
print(df[df['评分'] >= 4]['价格'].mean())
#计算出每个地区的酒店占总酒店数量的比例。
print(df['地区'].value_counts())
print(df['地区'].value_counts()/len(df))


#找出酒店评分人数排名前20的酒店,并计算他们的价格均值。
print(df.sort_values(by='评分人数', ascending=False)[:20]['价格'].mean())
#查看酒店分布的类型数量和地区数量
print(df['类型'].unique())
print(len(df['类型'].unique()))
print(df['地区'].unique())
print(len(df['地区'].unique()))
# 统计各个类型和地区包含的酒店数量
print(df['类型'].value_counts())
print(df['地区'].value_counts())

各个地区酒店数量的柱状图

#绘制出每个地区酒店数量的柱状图,柱状颜色为红色.
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#解决中文问题
plt.rcParams['font.sans-serif']='SimHei'
df=pd.read_excel('./酒店数据1.xlsx')
print(df[:5])
#设置画布的宽和高
plt.figure(figsize=(10,6))

data=df['地区'].value_counts()
print(data)
x=data.index
y=data.values
print(x)
print(y)
plt.title('每个地区酒店数量',fontsize=20)
plt.xlabel('地区',fontsize=16)#x意思
plt.ylabel('数量',fontsize=16)#y意思
plt.bar(x,y,color='r',label='数量')
#坐标轴的字体
plt.tick_params(labelsize=12)
#调整x轴竖着显示
plt.xticks(rotation=90)
#显示每个轴的数字
for a,b in zip(x,y):
    plt.text(a,b,b,ha='center',va='bottom',fontsize=10)
plt.legend()
plt.show()

每个价格等级酒店数量的柱状图

#绘制出每个价格等级酒店数量的柱状图。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#解决中文问题
plt.rcParams['font.sans-serif']='SimHei'
df=pd.read_excel('./酒店数据1.xlsx')
print(df[:5])
#设置画布的宽和高
plt.figure(figsize=(10,6))

df['价格等级']=pd.cut(df['价格'],[0,500,1000,1500,2000,2500,15000],labels=['F','E','D','C','B','A'])
print(df)
data=df['价格等级'].value_counts()
print(data)

x=data.index#(数值)
y=data.values#(标签)
print(x)
print(y)
plt.title('每个价格等级酒店数量',fontsize=20)
plt.xlabel('价格等级',fontsize=16)#x意思
plt.ylabel('数量',fontsize=16)#y意思
plt.bar(x,y,color='r',label='数量')
#坐标轴的字体大小
#plt.tick_params(labelsize=12)
#调整x轴竖着显示
#plt.xticks(rotation=0)
#显示每个轴的数字
for a,b in zip(x,y):
    plt.text(a,b,b,ha='center',va='bottom',fontsize=10)#(x轴的位置,y轴的位置,显示的内容,标在底部,字体大小)
plt.legend()#图例
plt.show()#打印图表

每个价格等级占比的饼图

#绘制出各个价格等级占比的饼图。
import matplotlib.pyplot as plt
import numpy as np
#解决中文问题
import pandas as pd
plt.rcParams['font.sans-serif']='SimHei'
df=pd.read_excel('./酒店数据1.xlsx')
print(df[:5])#输出前五行
#设置画布的宽和高
plt.figure(figsize=(10,6))


df['价格等级']=pd.cut(df['价格'],[0,500,1000,1500,2000,2500,15000],labels=['F','E','D','C','B','A'])
print(df)
data=df['价格等级'].value_counts()
print(data)#统计每图一个价格等级的数量
print('*'*60)


label=data.index#索引前面的标签
#print(data)
plt.title('各个价格等级占比')
plt.pie(data,labels=label,autopct='%.2f%%')#数据,标签,显示两位小数
plt.legend()#显示图例
plt.show()#打印照片

酒店评分的直立方图

#绘制出酒店评分的直方图。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#解决中文问题
plt.rcParams['font.sans-serif']='SimHei'
df=pd.read_excel('./酒店数据1.xlsx')
print(df[:5])
#设置画布的宽和高
plt.figure(figsize=(10,6))

data=df['评分']
#加个边框  bins:柱子数量  edgecolor:柱子加边框  alpha:透明度
plt.hist(data,bins=20,edgecolor='k',alpha=0.5)
plt.title('酒店评分')
plt.show()

每个热门酒店评分均值的柱状图

#绘制出每个热门等级酒店评分均值的柱状图。(按照评分均值从小到大排序。)
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#解决中文问题
plt.rcParams['font.sans-serif']='SimHei'
df=pd.read_excel('./酒店数据1.xlsx')
print(df[:5])
#设置画布的宽和高
plt.figure(figsize=(10,6))

df['热门等级']=pd.cut(df['评分人数'],[0,500,1000,2000,3000,5000,10000,50000],labels=['人迹罕至','人烟稀少','鲜为人知','崭露头角','较为火热','红极一时','人尽皆知'])
a= df[df['热门等级'] == '崭露头角']['评分'].mean()
b= df[df['热门等级'] == '较为火热']['评分'].mean()
c= df[df['热门等级'] == '红极一时']['评分'].mean()
d= df[df['热门等级'] == '人尽皆知']['评分'].mean()
data=['崭露头角','较为火热','红极一时','人尽皆知']
x = data
y = [a,b, c,d]

plt.title('各个热门等级酒店评分均值', fontsize=20)
plt.xlabel('价格等级', fontsize=16)
plt.ylabel('评分均值', fontsize=16)

plt.bar(x, y, color='r', label='评分均值')#图例
# x坐标轴的字体
plt.tick_params(labelsize=10)
for a, b in zip(x, y):
    # 第一个参数:x轴的位置,第二个参数y轴的位置,第三个参数就是显示的值
    plt.text(a, b + 0.2, b, ha='center', va='bottom', fontsize=10)
plt.legend()#输出图例
plt.show()#输出图表

根据评分和价格信息绘制散点图

# 根据评分和价格信息,绘制散点图。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#解决中文问题
plt.rcParams['font.sans-serif']='SimHei'
df=pd.read_excel('./酒店数据1.xlsx')
print(df[:5])

x=df['评分']
y=df['价格']#数值
#设置画布的宽和高
plt.figure(figsize=(10,8))
plt.scatter(x,y,color='c')
plt.title('评分和价格')
plt.xlabel('评分')
plt.ylabel('价格')
plt.show()

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值