def string_to_int(df, column):# 字符串替换清理df[column] = df[column].str.replace("$", "")df[column] = df[column].str.replace(",", "")# 转为数值型df[column] = pd.to_numeric(df[column]).astype(int)return dfgm_df = string_to_int(gm_df, 'price')
列表型字段编码像host_verifications
和amenities
这样的字段 , 取值为列表格式,我们对其进行编码处理(用哑变量替换) 。
# 查看列表型取值字段gm_df_copy = gm_df.copy()gm_df_copy['amenities'].head()
文章插图
gm_df_copy['host_verifications'].head()
文章插图
# 哑变量编码gm_df_copy['amenities'] = gm_df_copy['amenities'].str.replace('"', '')gm_df_copy['amenities'] = gm_df_copy['amenities'].str.replace(']', "")gm_df_copy['amenities'] = gm_df_copy['amenities'].str.replace('[', "")df_amenities = gm_df_copy['amenities'].str.get_dummies(sep = ",")gm_df_copy['host_verifications'] = gm_df_copy['host_verifications'].str.replace("'", "")gm_df_copy['host_verifications'] = gm_df_copy['host_verifications'].str.replace(']', "")gm_df_copy['host_verifications'] = gm_df_copy['host_verifications'].str.replace('[', "")df_host_ver = gm_df_copy['host_verifications'].str.get_dummies(sep = ",")
编码后的结果如下所示df_amenities.head()df_host_ver.head()
文章插图
文章插图
# 删除原始字段gm_df = gm_df.drop(['host_verifications', 'amenities'], axis=1)
数据探索下一步我们要进行更全面一些的探索性数据分析 。EDA数据分析部分涉及的工具库,大家可以参考ShowMeAI制作的工具库速查表和教程进行学习和快速使用 。哪些街区的房源最多?
- 数据科学工具库速查表 | Pandas 速查表
- 图解数据分析:从入门到精通系列教程
gm_df['neighbourhood_group_cleansed'].value_counts()
文章插图
bar_data = https://www.huyubaike.com/biancheng/gm_df['neighbourhood_group_cleansed'].value_counts().sort_values()# 从bar_data构建新的dataframebar_data = https://www.huyubaike.com/biancheng/pd.DataFrame(bar_data).reset_index()bar_data['size'] = bar_data['neighbourhood_group_cleansed']/gm_df['neighbourhood_group_cleansed'].count()# 排序bar_data.sort_values(by='size', ascending=False)bar_data = https://www.huyubaike.com/biancheng/bar_data.rename(columns={'index' : 'Towns', 'neighbourhood_group_cleansed' : 'number_of_listings','size':'fraction_of_total'})#绘图展示#plt.figure(figsize=(10,10));bar_data.plot(kind='barh', x ='Towns', y='fraction_of_total', figsize=(8,6))plt.title('Towns with the Most listings');plt.xlabel('Fraction of Total Listings');
文章插图
曼彻斯特镇拥有大曼彻斯特地区的大部分房源,占总房源的 53% (1849) , 其次是索尔福德,占总房源的 17% ;特拉福德,占总房源的 9% 。
大曼彻斯特地区的 Airbnb 房源价格分布
gm_df['price'].mean(), gm_df['price'].min(), gm_df['price'].max(),gm_df['price'].median()# (143.47600446428572, 8, 7372, 79.0)
Airbnb 房源的均价为 143 美元,中位价为 79 美元,数据集中观察到的最高价格为 7372 美元 。# 划分价格档位区间labels = ['$0 - $100', '$100 - $200', '$200 - $300', '$300 - $400', '$400 - $500', '$500 - $1000', '$1000 - $8000']price_cuts = pd.cut(gm_df['price'], bins = [0, 100, 200, 300, 400, 500, 1000, 8000], right=True, labels= labels)# 从价格档构建dataframeprice_clusters = pd.DataFrame(price_cuts).rename(columns={'price': 'price_clusters'})# 拼接原始dataframegm_df = pd.concat([gm_df, price_clusters], axis=1)# 分布绘图def price_cluster_plot(df, column, title):plt.figure(figsize=(8,6));yx = sb.histplot(data = https://www.huyubaike.com/biancheng/df[column]);total = float(df[column].count())for p in yx.patches:width = p.get_width()height = p.get_height()yx.text(p.get_x() + p.get_width()/2.,height+5,'{:1.1f}%'.format((height/total)*100), ha='center')yx.set_title(title);plt.xticks(rotation=90)return yxprice_cluster_plot(gm_df, column='price_clusters',title="Price distribution of Airbnb Listings in the Greater Manchester Area");
文章插图
从上面的分析和可视化结果可以看出,65.4% 的总房源价格在 0-100 美元之间,而价格在 100-200 美元的房源占总房源的 23.4% 。不过我们也观察到数据分布有很明显的长尾特性,也可以把特别高价的部分视作异常值,它们可能会对我们的分析有一些影响 。
推荐阅读
- 一篇文章带你了解NoSql数据库——Redis简单入门
- 一篇文章带你了解服务器操作系统——Linux简单入门
- 一步一图带你深入理解 Linux 虚拟内存管理
- 一篇文章带你了解热门版本控制系统——Git
- 一篇文章带你了解网页框架——Vue简单入门
- 我用canvas带你看一场流星雨
- 一篇文章带你掌握主流办公框架——SpringBoot
- 带你认识JDK8中超nice的Native Memory Tracking
- SpringBoot+Vue3 AgileBoot - 手把手一步一步带你Run起全栈项目
- 带你读AI论文丨ACGAN-动漫头像生成