不会被封的网站谁做,系统官网网站模板下载地址,百度推广哪个公司好,梅林多丽工业区做网站Tips#xff1a;分享是快乐的源泉#x1f4a7;#xff0c;在我的博客里#xff0c;不仅有知识的海洋#x1f30a;#xff0c;还有满满的正能量加持#x1f4aa;#xff0c;快来和我一起分享这份快乐吧#x1f60a;#xff01; 喜欢我的博客的话#xff0c;记得… Tips分享是快乐的源泉在我的博客里不仅有知识的海洋还有满满的正能量加持快来和我一起分享这份快乐吧 喜欢我的博客的话记得点个红心❤️和小关小注哦您的支持是我创作的动力数据源存放在我的资源下载区啦
数据可视化九Pandas北京租房数据分析——房源特征绘图、箱线图、动态可视化等高级操作 目录 数据可视化九Pandas北京租房数据分析——房源特征绘图、箱线图、动态可视化等高级操作案例一北京租房数据分析问题1填充空值如有否则不处理删除重复信息如有否则不处理问题2 更改列名房屋类型厅室: 户型 房屋类型精装修: 装修问题3 删除 URL、房屋类型面积 列问题4: 区域 ‘列’ 分为三部分请拆分成 ‘行政区域’、‘商圈’、‘小区’ 三个列问题5: 按要求格式化数据问题6选择 房源编号, 行政区, 商圈, 小区, 户型, 面积, 租金, 单价, 装修, 朝向, 楼层位置, 总楼层, 电梯, 车位, 用水, 用电, 燃气, 采暖, 经纪人 列 组成新的 DataFrame 保存为lianjia_cleaned.csv问题7画出 租金 的箱线图分布采用 darkgrid 风格采用boxenplot()函数问题8画出 不同行政区域 租金 的箱线图问题9画四个子图分别按 行政区域、 商圈前20、户型前10、面积自行分段画出房源数量柱状图问题10以 总楼层 为横坐标画出 房源数量 柱状图问题11房源特征绘图画四幅子图问题12仿照上面例子对用水、用电、燃气、采暖 进行饼状图分析问题13以 行政区域、商圈 两列 分组汇聚一室的 房源数量 和 平均租金并可视化 本次作业绘图可采用seaborn、matplotlib库或者pandas内置绘图功能 案例一北京租房数据分析
# 加载模块import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inlineplt.rcParams[font.sans-serif] [Arial Unicode MS] # SimHei.ttf
plt.rcParams[axes.unicode_minus] False # 导入数据
df pd.read_csv(data/lianjia.csv, encodinggbk, index_colFalse)
df.sample(1)
# 默认语言gbk另外要设置inex_col False 默认原数据无行索引不然会导致URL默认为行索引。
# header False, 默认原数据无列索引。# 查看数据总体信息空值统计查看重复数据信息df.info()df.isnull().sum()df[df.duplicated()True]问题1填充空值如有否则不处理删除重复信息如有否则不处理
# 没有空值不处理# 删除重复值
df.drop_duplicates(inplaceTrue)
df[df.duplicated()True]问题2 更改列名房屋类型厅室: 户型 房屋类型精装修: 装修
df.rename(columns{房屋类型厅室:户型, 房屋类型精装修:装修}, inplaceTrue)问题3 删除 URL、房屋类型面积 列
df.drop(columnsURL, inplaceTrue)
df.drop(columns房屋类型面积, inplaceTrue)问题4: 区域 ‘列’ 分为三部分请拆分成 ‘行政区域’、‘商圈’、‘小区’ 三个列
df[行政区域] df[区域].apply(lambda x:x.split()[0])
df[商圈] df[区域].apply(lambda x:x.split()[1])
df[小区] df[区域].apply(lambda x:x.split()[2])
df问题5: 按要求格式化数据
# 户型列 统一修改为 几室几厅几卫 格式
# 例如‘房间’ 改为 ‘室’
# 1室1卫 改为 1室0厅1卫
df[户型].replace(房间, 室, inplaceTrue)
df[户型].replace([1室1卫, 2室1卫, 3室1卫, 1室0卫, 2室2卫, 3室2卫, 1室2卫, 5室2卫, 4室2卫], [1室0厅1卫, 2室0厅1卫, 3室0厅1卫, 1室0厅0卫, 2室0厅2卫, 3室0厅2卫, 1室0厅2卫, 5室0厅2卫, 4室0厅2卫], inplaceTrue)# 面积 列去掉单位保留数字
df[面积].apply(lambda x:x[:-1])# 装修 列 数据格式修改
# 精装修 改为 精装
# # 改为 简装
df[装修].replace(精装修, 精装, inplaceTrue)
df[装修].replace(#, 简装, inplaceTrue)# 楼层 列 拆分为 楼层位置、总楼层 两列
df[楼层位置] df[楼层].apply(lambda x: x.split(/)[0])
df[总楼层] df[楼层].apply(lambda x: x.split(/)[1]).str[:-1]
df问题6选择 ‘房源编号’, ‘行政区’, ‘商圈’, ‘小区’, ‘户型’, ‘面积’, ‘租金’, ‘单价’, ‘装修’, ‘朝向’, ‘楼层位置’, ‘总楼层’, ‘电梯’, ‘车位’, ‘用水’, ‘用电’, ‘燃气’, ‘采暖’, ‘经纪人’ 列 组成新的 DataFrame 保存为lianjia_cleaned.csv
data_cleaned df[[房源编号, 行政区域, 商圈, 小区, 户型, 面积, 租金, 押金, 装修, 朝向, 楼层位置, 总楼层, 电梯, 车位, 用水, 用电, 燃气, 采暖, 经纪人]]
data_cleaned data_cleaned.reset_index(dropTrue) # 重设索引
data_cleaned.to_csv(lianjia_cleaned.csv) # 导出清洗后的数据到新的csvdf pd.read_csv(lianjia_cleaned.csv, index_col0)
df问题7画出 租金 的箱线图分布采用 darkgrid 风格采用boxenplot()函数
with sns.axes_style(darkgrid):plt.figure(figsize(6, 10))ax plt.subplot()sns.boxenplot(y租金, datadf)ax.set_ylabel(租金元/月, fontsize15)ax.set_title(房源租金分布, fontsize18)# 从箱型分布看出全市整租房源的租金主要分布在2500-5500元/套左右。问题8画出 不同行政区域 租金 的箱线图
plt.figure(figsize(14, 10))sns.boxenplot(x行政区域, y租金, datadf)plt.show()问题9画四个子图分别按 行政区域、 商圈前20、户型前10、面积自行分段画出房源数量柱状图
fig, axes plt.subplots(2, 2, figsize(20, 18)) # 绘制2*2多子图
fig.subplots_adjust(hspace0.5, wspace0.1) # 设置子图的间距df_ df.copy()
df_[面积] df_[面积].map(lambda x:eval(x[:-1]))area df_[行政区域].value_counts()
sns.barplot(xarea.index, yarea.values, paletteBlues_d, axaxes[0, 0])
axes[0, 0].tick_params(labelsize15) # 设置轴刻度文字大小,两个轴同时设置
axes[0, 0].set_xticklabels(axes[0, 0].get_xticklabels(), rotation35) # 设置轴刻度文字方向旋转角度
axes[0, 0].set_xlabel(行政区域, fontsize18)
axes[0, 0].set_ylabel(房源数量, fontsize18)trade_top20 df_[商圈].value_counts()[:20]
sns.barplot(xtrade_top20.index, ytrade_top20.values, paletteBlues_d, axaxes[0, 1])
axes[0, 1].tick_params(labelsize15)
axes[0, 1].set_xticklabels(axes[0, 1].get_xticklabels(), rotation70)
axes[0, 1].set_xlabel(Top20商圈, fontsize18)
axes[0, 1].set_ylabel()type_top10 df_[户型].value_counts()[:10]
sns.barplot(xtype_top10.index, ytype_top10.values, paletteBlues_d, axaxes[1, 0])
axes[1, 0].tick_params(labelsize15)
axes[1, 0].set_xticklabels(axes[1, 0].get_xticklabels(), rotation30)
axes[1, 0].set_xlabel(Top10户型, fontsize18)
axes[1, 0].set_ylabel(房源数量, fontsize18)# 划分面积区间。
bins [7, 15, 30, 60, 90, 125, 156]
size pd.cut(xdf_[面积], binsbins).value_counts()
sns.barplot(xsize.index, ysize.values, paletteBlues_d, axaxes[1, 1])
axes[1, 1].tick_params(labelsize15)
axes[1, 1].set_xticklabels(axes[1, 1].get_xticklabels(), rotation0)
axes[1, 1].set_xlabel(面积区间, fontsize18)
axes[1, 1].set_ylabel()plt.suptitle(房源数量分布总览, fontsize25) # 多子图加总标题问题10以 总楼层 为横坐标画出 房源数量 柱状图
plt.figure(figsize(10,6))ax plt.subplot()
s df.总楼层.value_counts()
sns.barplot(xs.index, ys.values)
ax.set_xlabel(总楼层, fontsize18)
ax.set_ylabel(房源数量, fontsize18)
ax.set_title(房源所在楼栋总层高, fontsize20)plt.show()问题11房源特征绘图画四幅子图
柱状图画出朝向(前10)分布柱状图 朝向 列饼图画出装修分布 装修 列饼图画出楼层高度分布 楼层位置 列饼图画出有无电梯分布 电梯 列
fig, axes plt.subplots(2, 2, figsize(12, 12))
plt.subplots_adjust(wspace0.1, hspace0.4)s1 df.朝向.value_counts()[:10]
sns.barplot(xs1.index, ys1.values, axaxes[0, 0])
axes[0, 0].set_xticklabels(axes[0, 0].get_xticklabels(), rotation90)
axes[0, 0].set_xlabel(朝向)
axes[0, 0].set_ylabel(房源数量)
axes[0, 0].set_title(Top10 朝向, fontsize16)s2 df.装修.value_counts()
axes[0, 1].pie(xs2.values, explodenp.ones(len(s2))*0.01, labelss2.index, autopct%.1f%%)
axes[0, 1].set_title(装修, fontsize16)s3 df.楼层位置.value_counts()
axes[1, 0].pie(xs3.values, explodenp.ones(len(s3))*0.01, labelss3.index, autopct%.1f%%)
axes[1, 0].set_title(楼层, fontsize16)s4 df.电梯.value_counts()
axes[1, 1].pie(xs4.values, explodenp.ones(len(s4))*0.01, labelss4.index, autopct%.1f%%)
axes[1, 1].set_title(电梯, fontsize16)plt.suptitle(房源特征, fontsize20)plt.show()问题12仿照上面例子对用水、用电、燃气、采暖 进行饼状图分析
fig, axes plt.subplots(2,2,figsize(12, 12))
plt.subplots_adjust(wspace0.1, hspace0.4)s1 df.用水.value_counts()
axes[0,0].pie(xs1.values, labelss1.index, explodenp.ones(len(s1))*0.1, autopct%.1f%%)s2 df.用电.value_counts()
axes[0,1].pie(xs2.values, labelss2.index, explodenp.ones(len(s2))*0.1, autopct%.1f%%)s3 df.燃气.value_counts()
axes[1,0].pie(xs3.values, labelss3.index, explodenp.ones(len(s3))*0.1, autopct%.1f%%)s4 df.采暖.value_counts()
axes[1,1].pie(xs4.values, labelss4.index, explodenp.ones(len(s4))*0.1, autopct%.1f%%)plt.show()问题13以 行政区域、商圈 两列 分组汇聚一室的 房源数量 和 平均租金并可视化
注意一室分为 ‘1室1厅1卫’, ‘1室0厅1卫’, ‘1室0厅0卫’, ‘1室1厅0卫’
df1 df[df[户型].isin([1室1厅1卫, 1室0厅1卫, 1室0厅0卫, 1室1厅0卫])] # 1室的房源共1511条
df1_group df1.groupby(商圈)[租金].agg([(房源数量, count), (平均租金, median)]) # 按照商圈分类并计算count, median
df1_price df1_group[df1_group[房源数量]14].sort_values(by平均租金) # 筛选出超过15套房源的商圈按照租金进行升序排序# 可视化
fig, ax plt.subplots(1, 1, figsize(23, 10))
ax1 ax.twinx()df1_price[房源数量].plot.line(axax1, colorred ,linewidth4)
# ax1.set_ylim(0, 70)
ax1.set_yticks([0, 20, 40, 60, 80]) # 设置y轴的刻度范围及标记默认不从0开始
ax1.legend((房源数量,), locupper center, fontsize20)df1_price[平均租金].plot.bar(axax, colorblue, alpha0.5)
ax.legend((平均租金,), fontsize20)ax.set_xticklabels(ax.get_xticklabels(), rotation65)
ax.set_xlabel()
ax.set_ylabel(平均租金, fontsize20)
ax.tick_params(labelsize20)
ax1.set_ylabel(房源数量, fontsize20)
ax1.tick_params(labelsize20)ax.set_title(1室户型的平均租金与房源数量, fontsize25)plt.show()