香港酒店数据分析

数据读取
import pandas as pd
import numpy as np

# 读取保存的预得理好的数据
df = pd.read_excel('./酒店数据1.xlsx')
# print(df.head())

# 查看“评分”的格式
print(df['评分'].dtypes)

# 并分别进行升序和降序排序.对酒店按照价格进行排名,计算“油尖旺”地区的均价
print("对评分进行升序排序")
print(df.sort_values(by='评分', ascending=True))
print("对评分进行降序排序")
print(df.sort_values(by='评分', ascending=False))
print("对价格进行降序")
print(df.sort_values(by='价格', ascending=False)['名字'])
print("计算油尖旺地区均价")
print(df[df['地区'] == '油尖旺']['价格'].mean())

# 描述性统计
print(df.describe())

# 所有价格的均值方差,最大最小值,中值
print(df['价格'].var())
print(df['价格'].max())
print(df['价格'].min())
print(df['价格'].median())

# 评分和价格之间的的相关系数,协方差
print(df[['评分', '价格']].corr())
print(df[['评分', '价格']].cov())

# 评分降序排序,评分相同时按价格升序排序
print("评分降序排序,评分相同时按价格升序排序")
print(df.sort_values(by=['评分', '价格'], ascending=(False, True)))

# 评分小于3分的酒店数量和占比
per = str(round((len(df[df['评分']<3])/len(df)) * 100,2))+ '%'
print(per)

# 酒店评分大于等于4分的酒店的价格均值
print("酒店评分大于等于4分的酒店的价格均值")
print(df[df['评分'] >= 4]['价格'].mean())
# 计算出每个地区的酒店占总酒店数量的比例
per = round((df['地区'].value_counts()/len(df)) * 100,2)
print(per.astype(str) + '%')
# 找出酒店评分人数排名前20的酒店,并计算他们的价格均值
print(df.sort_values(by='评分人数', ascending=False)[:20]['名字'])
print((df.sort_values(by='评分人数', ascending=False)[:20]['价格']).mean())
# 酒店分布的类型数量和地区数量
print("酒店分布的类型数量和地区数量")
print(len(df['类型'].unique()))
print(len(df['地区'].unique()))
# 统计各个类型和地区包含的酒店数量。
print(df['类型'].value_counts())
print(df['地区'].value_counts())

数据分析

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

# 解决中文问题
plt.rcParams['font.sans-serif'] = 'SimHei'
# 读取保存的预得理好的数据
df = pd.read_excel('./酒店数据1.xlsx')
# print(df.head())

# 查看“评分”的格式
print(df['评分'].dtypes)

# 并分别进行升序和降序排序.对酒店按照价格进行排名,计算“油尖旺”地区的均价
print(df.sort_values(by='评分', ascending=True))
print(df.sort_values(by='评分', ascending=False))
print(df.sort_values(by='价格', ascending=False)['名字'])
print(df[df['地区'] == '油尖旺']['价格'].mean())

# 描述性统计
print(df.describe())

# 所有价格的均值方差,最大最小值,中值
print(df['价格'].var())
print(df['价格'].max())
print(df['价格'].min())
print(df['价格'].median())

# 评分和价格之间的的相关系数,协方差
print(df[['评分', '价格']].corr())
print(df[['评分', '价格']].cov)

# 评分降序排序,评分相同时按价格升序排序
print(df.sort_values(by=['评分', '价格'], ascending=(False, True)))

# 评分小于3分的酒店数量和占比
print(len(df[df['评分'] < 3]))
print(len(df[df['评分'] < 3]) / len(df))

# 酒店评分大于等于4分的酒店的价格均值
print(df[df['评分'] >= 4]['价格'].mean())
# 计算出每个地区的酒店占总酒店数量的比例
print(df['地区'].value_counts() / len(df))
# 找出酒店评分人数排名前20的酒店,并计算他们的价格均值
print(df.sort_values(by='评分人数', ascending=False)[:20]['名字'])
print((df.sort_values(by='评分人数', ascending=False)[:20]['价格']).mean())
# 酒店分布的类型数量和地区数量
print(len(df['类型'].unique()))
print(len(df['地区'].unique()))
# 统计各个类型和地区包含的酒店数量。
print(df['类型'].value_counts())
print(df['地区'].value_counts())
绘制出每个地区酒店数量的柱状图
import pandas as pd
import matplotlib.pyplot as plt

# 解决中文问题
plt.rcParams['font.sans-serif'] = 'SimHei'
# 读取预处理后的数据
df = pd.read_excel('酒店数据1.xlsx')
# 绘制出每个地区酒店数量的柱状图,柱状颜色为红色.
data = df['地区'].value_counts()
# print(data)
x = data.index
y = data.values

plt.figure(figsize=(10, 6))
plt.title('各个地区酒店数量', fontsize=20)
plt.xlabel('地区',fontsize=16)
plt.ylabel('数量',fontsize=16)
for a, b in zip(x,y):
    # 第一个参数:x轴的位置,第一个参数:y轴的位置,第三个参数:显示的内容
    plt.text(a, b+0.2, b, ha='center',va='bottom',fontsize=12)

plt.bar(x,y,color='r',label='数量')

# x坐标轴的字体
plt.tick_params(labelsize=10)
# 调整x轴竖着显示
plt.xticks(rotation=90)
plt.legend()
plt.show()
绘制出每个价格等级酒店数量的柱状图
import pandas as pd
import matplotlib.pyplot as plt

# 解决中文问题
plt.rcParams['font.sans-serif'] = 'SimHei'
# 读取预处理后的数据
df = pd.read_excel('酒店数据1.xlsx')
# 绘制出每个价格等级酒店数量的柱状图。

# 先打印出最大和最小价格,明确划分区间
# print(df['价格'].max())
# print(df['价格'].min())
df['价格等级'] = pd.cut(df['价格'], [0, 250, 500, 1000, 5000, 15000], labels=['经济', '实惠', '中档', '高档', '奢华'])
print(df)
data = df['价格等级'].value_counts()

value = data.values
label = data.index
# print(value)
# print(label)value

plt.figure(figsize=(10, 6))
plt.title('每个价格等级酒店数量', fontsize=20)
plt.xlabel('价格等级', fontsize=16)
plt.ylabel('数量', fontsize=16)

plt.bar(label, value, color='c', label='数量')

for a, b in zip(label, value):
    # 第一个参数:x轴的位置,第二个参数y轴的位置,第三个参数就是显示的值
    plt.text(a, b, b, ha='center', va='bottom', fontsize=10)

# x坐标轴的字体
plt.tick_params(labelsize=10)
# 给图像上加上图例
plt.legend()
plt.show()
绘制出各个价格等级占比的饼图 
# 绘制出各个价格等级占比的饼图。
import pandas as pd
import matplotlib.pyplot as plt

# 解决中文问题
plt.rcParams['font.sans-serif'] = 'SimHei'
# 读取预处理后的数据
df = pd.read_excel('酒店数据1.xlsx')

df['价格等级'] = pd.cut(df['价格'], [0, 250, 500, 1000, 5000, 15000], labels=['经济', '实惠', '中档', '高档', '奢华'])
# print(df)
data = df['价格等级'].value_counts()

value = data.values
label = data.index

plt.figure(figsize=(10, 6))
plt.title('价格等级占比')
plt.pie(value, labels=label, autopct='%.2f%%')

plt.show()
绘制出酒店评分的直方图
import pandas as pd
import matplotlib.pyplot as plt

# 解决中文问题
plt.rcParams['font.sans-serif'] = 'SimHei'
# 读取预处理后的数据
df = pd.read_excel('酒店数据1.xlsx')

# 绘制出酒店评分的直方图。
data = df['评分']
plt.hist(data, bins=8, edgecolor='k', alpha=0.5)
plt.title('酒店评分')
plt.show()
绘制出每个热门等级酒店评分均值的柱状图。(按照评分均值从小到大排序。)
import pandas as pd
import matplotlib.pyplot as plt

# 解决中文问题
plt.rcParams['font.sans-serif'] = 'SimHei'
# 读取预处理后的数据
df = pd.read_excel('酒店数据1.xlsx')

# 绘制出每个热门等级酒店评分均值的柱状图。(按照评分均值从小到大排序。)
df['价格等级'] = pd.cut(df['价格'], [0, 250, 500, 1000, 5000, 15000], labels=['经济', '实惠', '中档', '高档', '奢华'])
data = df['评分'].groupby(df['价格等级']).mean().sort_values()

value = data.values
label = data.index

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

plt.bar(label, value, color='b', label='数量')
for a, b in zip(label, value):
    plt.text(a, b, round(b,2), ha='center', va='bottom', fontsize=10)
plt.legend()
plt.show()
根据评分和价格信息,绘制散点图
import pandas as pd
import matplotlib.pyplot as plt

# 解决中文问题
plt.rcParams['font.sans-serif'] = 'SimHei'
# 读取预处理后的数据
df = pd.read_excel('酒店数据1.xlsx')

# 根据评分和价格信息,绘制散点图。
x = df['评分']
y = df['价格']
plt.figure(figsize=(10, 6))
plt.scatter(x, y, color='c')
plt.title('酒店评分与价格')
plt.xlabel('评分')
plt.ylabel('价格')
plt.show()

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值