对kaggle中的hotel booking demand项目的python学习笔记

python笔记

    • 数据读入
    • 数据清洗与准备
    • 顾客来自哪里?
    • 一年中每晚的价格变化
    • 哪个月最忙
    • 在旅馆住多久
    • 按细分市场分类的预订

数据读入

  1. 用pandas读入
    将读取的数据放在data中
    data = pd.read_csv(‘文件路径或文件名’, encoding=‘gbk’)
    当为文件名时需要放在同一个文件夹下
    encoding=‘gbk’,为了识别中文
    data.head()可以查看输入的前几行数据
  2. 用numpy读入二维txt文件
    data = np.loadtxt(‘文件路径或文件名’, dtype=np.int, delimiter=None)
    当为文件名时需要放在同一个文件夹下
    dtype为数据类型
    delimiter=None数据分隔符为空格

数据清洗与准备

  1. data为pandas类型的数据
    data.isnull().sum()可以获得缺失值的数量
  2. 用fillna()填充缺失值
    ① 使用一个常数代替缺失值
    data_clean= data.fillna(0)
    fillna返回的是一个新的对象,新对象是data_clean
    ②用字典为不同列设定不同的缺失值
    nan_replacements = {“列1”: 0,“列2”: 0,“列3”:0, “列4”: 0, “列5”: 0}
    data.fillna(nan_replacements, inplace=True)
    #inplace=True是为修改已经存在的data对象
    #将列1中的空值替换为0
  3. 替换某列数据的某些值
    data[“需要被处理的列”].replace(“需要替换的值”, “替换后的值”, inplace=True)
    当需要对已经存在的对象进行修改时,添加 inplace=True
  4. 将某些无用数据行删除
    garbage_data=list(data.loc[无用行].index) #取这些行的索引放在列表里
    data.drop(data.index[garbage_data]) #删除无用数据行
  5. 在数据清洗完之后可以用data.shape查看有多少行多少列

顾客来自哪里?

1.value_counts()函数的用法
country_data=pd.DataFrame(data_clean[‘country’].value_counts())
对kaggle中的hotel booking demand项目的python学习笔记_第1张图片
没有选择行,所以有178行
country_data=pd.DataFrame(data_clean.loc[data_clean[‘is_canceled’]==0][‘country’].value_counts())
对kaggle中的hotel booking demand项目的python学习笔记_第2张图片
选择了行,所以只有166行
生成的行标签为国家名,列名是country
2. 用rename()函数为列重命名
country_data.rename(columns={“country”:“numbers of country”}, inplace=True)
3. sum()可以对列求和
total_country=country_data[‘numbers of country’].sum()
4. round( 算术式,2)
对算术式保留两位小数。
5. 用plotly.express绘制饼图

import plotly.express as px
fig = px.pie(country_data,
             values="numbers of country",
             names="country",
             title="Home country of guests",
             template="seaborn")
fig.update_traces(textposition="inside", textinfo="value+percent+label")
fig.show()

对kaggle中的hotel booking demand项目的python学习笔记_第3张图片
6. 用plotly.express绘制地图

guest_map = px.choropleth(country_data,
                    locations=country_data.index,
                    color=country_data["%"],
                    hover_name=country_data.index,
                    color_continuous_scale=px.colors.sequential.Plasma,
                    title="Home country of guests")
guest_map.show()

对kaggle中的hotel booking demand项目的python学习笔记_第4张图片

一年中每晚的价格变化

  1. sort_values()使用
    先将.sort_values()中的参数排序,其余列跟随着.sort_values()中的参数变化
  2. 用matplotlib画箱型图
import matplotlib as plt
plt.figure(figsize=(12, 8))
sns.boxplot(x="reserved_room_type",
            y="adr_p",
            hue="hotel",
            data=guest_price,
            hue_order=["City Hotel", "Resort Hotel"],
            fliersize=0)
plt.title("Price of room types per night and person", fontsize=16)
plt.xlabel("Room type", fontsize=16)
plt.ylabel("Price [EUR]", fontsize=16)
plt.legend(loc="upper right")
plt.ylim(0, 160)
plt.show()

对kaggle中的hotel booking demand项目的python学习笔记_第5张图片3. pd.Categorical(需要改变的列,列的顺序,ordered=True)

c = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'], ordered=True,categories=['c', 'b', 'a'])
>>> c
[a, b, c, a, b, c]
Categories (3, object): [c < b < a]
>>> c.min()
'c'
  1. 绘制多数据折线图
plt.figure(figsize=(12, 8))
sns.lineplot(x = "arrival_date_month", y="adr_p", hue="hotel", data=month_price,
            hue_order = ["City Hotel", "Resort Hotel"], ci="sd", size="hotel", sizes=(2.5, 2.5))
plt.title("Room price per night and person over the year", fontsize=16)
plt.xlabel("Month", fontsize=16)
plt.xticks(rotation=45)
plt.ylabel("Price [EUR]", fontsize=16)
plt.show()

对kaggle中的hotel booking demand项目的python学习笔记_第6张图片

哪个月最忙

  1. groupby()和其他函数的使用
import pandas as pd
df = pd.DataFrame({'key':['a','b','c','b','a','b','c','a'],'data':[1,3,5,7,8,9,2,2]})
df1=df['data'].groupby(df['key']).sum()

对kaggle中的hotel booking demand项目的python学习笔记_第7张图片

df = pd.DataFrame({'key1':['a','b','c','b','a'],'key2':['one','two','one','two','one'],'data':[1,3,5,7,8]})
data=df['data'].groupby([df['key1'],df['key2']]).sum()
print(data)

对kaggle中的hotel booking demand项目的python学习笔记_第8张图片

df = pd.DataFrame({'key1':['a','b','c','b','a'],'key2':['one','two','one','two','one'],'data1':[1,3,5,7,8],'data2':[2,4,5,6,8]})
a= df.groupby('key2')['data2'].sum()
print(a)

对kaggle中的hotel booking demand项目的python学习笔记_第9张图片

  1. concat()的使用方法
    concat方法相当于数据库中的全连接(UNION ALL),可以指定按某个轴进行连接,也可以指定连接的方式join(outer,inner 只有这两种)。
import pandas as pd
df = pd.DataFrame({'key':['a','b','c','b','a','b','c','a'],'data':[1,3,5,7,8,9,2,2]})
df1= pd.DataFrame({'key1':['a','a','g','i','f','s','o'],'data1':[1,2,5,4,8,9,4]})
# df1=df['data'].groupby(df['key']).sum()
full_data=pd.concat([df,df1],ignore_index=True)
print(full_data)

对kaggle中的hotel booking demand项目的python学习笔记_第10张图片
3. 绘制折线图

plt.figure(figsize=(12, 8))
sns.lineplot(x = "month", y="guests", hue="hotel", data=full_guest_num)
plt.title("Average number of hotel guests per month", fontsize=16)
plt.xlabel("Month", fontsize=16)
plt.xticks(rotation=45)
plt.ylabel("Number of guests", fontsize=16)
plt.show()

对kaggle中的hotel booking demand项目的python学习笔记_第11张图片

在旅馆住多久

1.绘制柱状图

plt.figure(figsize=(16, 8))
sns.barplot(x = "stay_num", y = "stay%", hue="hotel", data=full_stay)
plt.title("Length of stay", fontsize=16)
plt.xlabel("Number of nights", fontsize=16)
plt.ylabel("Guests [%]", fontsize=16)
plt.legend(loc="upper right")
plt.xlim(0,22)
plt.show()

对kaggle中的hotel booking demand项目的python学习笔记_第12张图片

按细分市场分类的预订

  1. 饼图的绘制
    饼图绘制会自动计算所占的百分比,所以数据只需要有如下形式
    对kaggle中的hotel booking demand项目的python学习笔记_第13张图片
fig = px.pie(segment,
             values=segment.values,
             names=segment.index,
             title="Bookings by market segment",
             template="seaborn")
fig.update_traces(rotation=-90, textinfo="percent+label")
fig.show()

输出:
对kaggle中的hotel booking demand项目的python学习笔记_第14张图片
2. 绘制箱型图
给出横轴x,纵轴数据y,hue标签 ,会自动计算箱型图中的数据

plt.figure(figsize=(12, 8))
sns.barplot(x="market_segment",
            y="adr_p",
            hue="reserved_room_type",
            data=data_clean,
            ci="sd",
            errwidth=1,
            capsize=0.1)
plt.title("ADR by market segment and room type", fontsize=16)
plt.xlabel("Market segment", fontsize=16)
plt.xticks(rotation=45)
plt.ylabel("ADR per person [EUR]", fontsize=16)
plt.legend(loc="upper left")
plt.show()
  1. describe()的使用
    对kaggle中的hotel booking demand项目的python学习笔记_第15张图片
    针对该问题,对于describe()返回值的解释如下:

1、count:返回数组的个数,如上述为4个元素,所以返回为4;

2、mean:返回数组的平均值,1 3 5 9的平均值为4.5;

3、std:返回数组的标准差;

4、min:返回数组的最小值;

5、25%,50%,75%:返回数组的三个不同百分位置的数值,也就是统计学中的四分位数!

你可能感兴趣的:(对kaggle中的hotel booking demand项目的python学习笔记)