python实验课程设计题目:酒店数据指标分析(若有问题恳请提出)

第一步.数据预处理

import pandas as pd
import numpy as np
df = pd.read_excel('./香港酒店数据.xlsx')
print(df.head())
df = df.drop('Unnamed: 0',axis=1)
df=df[1:]
df.index=range(0,len(df))
print(df.head())
#重新设置数据的索引,重新设置列名称为'名字','类型','城市','地区','地点','评分','评分人数','价格'
df.columns=['名字','类型','城市','地区','地点','评分','评分人数','价格']
#查找出所有类型为“休闲度假”并且在湾仔地区的酒店
print(df[(df['类型']=='休闲度假')&(df['地区']=='湾仔')])
#查找出所有地址在观塘或者油尖旺,评分大于4的酒店
df['评分']=df['评分'].astype(np.float64)
print(df[((df['地区']=='湾仔')|(df['地区']=='观塘')) & (df['评分']>4)])
#找出缺失值数据用“其他”填充类型和地区
df['地区']=df['地区'].fillna('其他')
df['类型']=df['类型'].fillna('其他')
#用评分均值填充评分缺失值
df['评分'].fillna(np.mean(df['评分']),inplace=True)
#删除价格和评分人数的缺失值
df=df.dropna()
#保存到处理好的数据到“酒店数据1.xlsx中
df.to_excel('./酒店数据1.xlsx')

第二步.数据分析

import pandas as pd
import numpy as np
df = pd.read_excel('./酒店数据1.xlsx')
print(df['评分'].dtype)
print(df.sort_values(by='评分')[:-1])
print(df.sort_values(by='评分',ascending=False)[:-1])
print(df['评分'].mean())

'''4.286394590153922'''
print(df.describe())
'''    Unnamed: 0          评分          评分人数            价格
count  397.000000  397.000000    397.000000    397.000000
mean   200.654912    4.286395   2511.929471    681.659950
std    118.315211    0.483998   4566.627028    906.282671
min      0.000000    1.500000      1.000000     67.000000
25%     99.000000    4.200000     96.000000    247.000000
50%    198.000000    4.400000    869.000000    418.000000
75%    300.000000    4.600000   3283.000000    766.000000
max    419.000000    4.900000  45463.000000  12926.000000
'''
print(df['价格'].mean())
print(df['价格'].median())
print(df['价格'].var())
print(df['价格'].max())
print(df['价格'].min())
#相关系数
print(df[['价格','评分']].corr())
#协方差
print(df[['价格','评分']].cov())
#评分相同时按价格升序排序
print(df.sort_values(by=['评分','价格'],ascending=[False,True])[:-1])
#评分小于3分的酒店数量和占比
print(len(df[df['评分']<3]))
print((len(df[df['评分']<3])/len(df)))
#酒店评分大于等于4分的酒店的价格均值
print(df[df['评分']>=4]['价格'].mean())
#计算出,评分小于3分的酒店数量和占比
per = str(round((len(df[df['评分']<3])/len(df)) * 100,2))+ '%'
print(per)
#找出酒店评分人数排名前20的酒店
print(df.sort_values(by='评分人数')[:20]['价格'].mean())
#酒店分布的类型数量和地区数量
print(df['类型'].unique())
print(df['地区'].unique())
#计算出每个地区的酒店占总酒店数量的比例
per = round((df['地区'].value_counts()/len(df)) * 100,2)
print(per.astype(str) + '%')

第三步.画图(图形报表)

        1.各个价格等级占比的饼图

import pandas as pd
import matplotlib.pyplot as plt
# 解决中文乱码问题
plt.rcParams['font.sans-serif']='SimHei'
# 解决负号无法显示问题
plt.rcParams['axes.unicode_minus']=False
df = pd.read_excel('酒店数据1.xlsx')
df['价格等级'] = pd.cut(df['价格'],[0,200,500,1000,3000,100000],labels=['一星级','二星级','三星级','四星级','五星级'])
data = df['价格等级'].value_counts()
print(data)
x = data.values
y = x/sum(x)
print(x)
print(y)
plt.figure(figsize=(15,10))
plt.pie(y,labels=data.index,autopct='%.1f %%')
plt.title('各个价格等级占比')
#显示图例
plt.legend()
plt.show()

        2.酒店评分的直方图

import pandas as pd
import matplotlib.pyplot as plt

# 解决中文乱码问题
plt.rcParams['font.sans-serif']='SimHei'
# 解决负号无法显示问题
plt.rcParams['axes.unicode_minus']=False
df = pd.read_excel('酒店数据1.xlsx')
plt.figure(figsize=(10,6))
plt.hist(df['评分'],bins=10,edgecolor='k')
plt.title('酒店评分')
plt.xlabel('分数')
plt.ylabel('酒店数量')
plt.show()

        3.每个地区酒店数量的柱状图

# 解决负号无法显示问题
plt.rcParams['axes.unicode_minus']=False
df = pd.read_excel('酒店数据1.xlsx')
data = df['地区'].value_counts()
print(data)
x = data.index
y = data.values
plt.figure(figsize=(10,6))
plt.bar(x,y,color='r',width=0.8)
plt.title('每个地区酒店数量分布',fontsize=20)
plt.xlabel('地区',fontsize=16)
plt.ylabel('酒店数量',fontsize=16)
#调整x轴竖着显示
plt.xticks(rotation=90)
#显示每个轴的数字
for a,b in zip(x,y):
    #第一参数x轴的位置,第二个参数就是y轴的位置,第三个参数显示的文本内容
    plt.text(a,b,b,ha='center',va='bottom',fontsize=10)
plt.show()

        4.价格等级酒店数量的柱状图

import pandas as pd
import matplotlib.pyplot as plt

# 解决中文乱码问题
plt.rcParams['font.sans-serif']='SimHei'
# 解决负号无法显示问题
plt.rcParams['axes.unicode_minus']=False
df = pd.read_excel('酒店数据1.xlsx')
df['热门等级'] = pd.cut(df['价格'],[0,300,600,1000,3000,20000],labels=['特惠','廉价','标准','昂贵','豪华'])
print(df.head())
group = df['评分'].groupby(df['热门等级']).sum().sort_values()
print(group)
x = group.index
y = group.values
plt.bar(x,y,width=0.5)
for a,b in zip(x,y):
    plt.text(a,b,round(b,2),ha='center',va='bottom')
plt.show()

        5.每个热门等级酒店评分均值的柱状图

import pandas as pd
import matplotlib.pyplot as plt

# 解决中文乱码问题
plt.rcParams['font.sans-serif']='SimHei'
# 解决负号无法显示问题
plt.rcParams['axes.unicode_minus']=False
df = pd.read_excel('酒店数据1.xlsx')
df['热门等级'] = pd.cut(df['价格'],[0,300,600,1000,3000,20000],labels=['特惠','廉价','标准','昂贵','豪华'])
print(df.head())
group = df['评分'].groupby(df['热门等级']).mean().sort_values()
print(group)
x = group.index
y = group.values
plt.bar(x,y,width=0.5)
for a,b in zip(x,y):
    plt.text(a,b,round(b,2),ha='center',va='bottom')
plt.show()

        6.评分价格散点图

import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'
# 解决负号无法显示问题
plt.rcParams['axes.unicode_minus']=False
df = pd.read_excel('酒店数据1.xlsx')
x = df['价格']
y = df['评分']
plt.figure(figsize=(10,8))
plt.scatter(x, y, color='b')
plt.title('酒店价格与评分')
plt.xlabel('价格')
plt.ylabel('评分')
plt.show()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值