房源数据可视化分析

前序

继上次爬取到链家二手房数据后,我们需要对数据做简单的可行性分析,让我们更加直观地知道北京二手房数据信息。


image.png

这里涉及的模块包有:pandas,matplotlib,pyecharts

1.不同区域房屋总量分布

1)看一下表格内容数据

# pandas读取表格
df = pd.read_excel(r"C:\Users\Administrator\Desktop\北京二手房.xls")
# 查看数据
print(df.info)
print(df.head(10)
image.png

展示出来的数据,我们可以看到“房屋总量”列数据是数字+套的字符串格式,需要做一下数据处理,得到数字来做运算。

house = df["房屋总量"].copy()
for i in range(len(house)):
    item = house.iloc[i].strip()
    house.iloc[i] = int(item[:-1])
    # print(item[:-1])
df["房屋总量"] = house

2)想要不同区域小区房屋总量数据,通过groupby分组处理。并做数据求和

house = df["房屋总量"].groupby(df["区"]).sum()
image.png

3)可视化图形代码展示

#设置视图画布1
fig1 = plt.figure(1, facecolor = 'black')

# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

#在视图1中设置子图1,背景色灰色,透明度0.3(figure.add_subplot 和plt.suplot都行)
ax1 = fig1.add_subplot(2,1,1,facecolor='#4f4f4f',alpha=0.3)

#设置轴的颜色为白色
plt.tick_params(colors='white')

#画直方图
house.plot(kind='bar', rot=0, color="#ef9d9a")

#设置标题
title = plt.title('北京各区二手房分布图', fontsize=18, color='yellow')

#设置X轴轴标题
xlabel = plt.xlabel('区域', fontsize=14, color='yellow')

#设置Y轴轴标题
ylabel = plt.ylabel('二手房数量', fontsize=14, color='yellow')

# X轴刻度文本垂直摆放
plt.xticks(rotation="vertical")

#设置子图2,是位于子图1下面的饼状图
ax2 = fig1.add_subplot(2,1,2)

# print(house.index)
# print(house.values.sum())
# 制作饼图之前数据处理
labels = list(house.index)
sizes = list(house.values)
# for i in sizes:
#     t = i/house.values.sum()*100
#     print(t)

explode = tuple([0.1]+[0]*16)
#shadow,饼是否有阴影
plt.pie(sizes,  explode=explode, labels=labels, autopct='%1.1f%%', radius=10, shadow=True, textprops={'color':'yellow'})
# 确保画的饼是圆的
ax2.axis('equal')

plt.show()

4)效果图展示


image.png

通过上图可以清晰看到每个区域的房源情况。

2. 30天内小区成交量可视化

1)与第一个图形一样,需要对数据做清洗,得到可运算的数据。这里采用正则匹配数字。

chengjiaoliang = df["成交量"].copy()
for i in range(len(chengjiaoliang)):
    item = chengjiaoliang.iloc[i].strip()
    try:
        chengjiaoliang.iloc[i] = int(re.findall(r"30天成交(\d+)套", item)[0])
    except:
        chengjiaoliang.iloc[i] = 0
df["成交量"] = chengjiaoliang

2)接下来,为了方便看到小区所属区域,我们将"区"与"小区"列做数据合并。然后组成新的pd数据。

xq_addr = df["区"] + '-' + df["小区"]
# print(xq_addr)

df2 = pd.DataFrame(data={'小区地址': xq_addr, "成交量": chengjiaoliang})

3)这时,通过展示出的数据,我们分析到存在很多小区成交量为0的情况,需要取目标值来展示,不然数据过多,展示起来不美观。

# 通过对展示的数据分析,成交量大于8的数据展示更为美观
df2 = df2[df2["成交量"] > 8]
# 按成交量排序,ascending是否按升序排序,并索引重新排序,并删除旧索引
df2 = df2.sort_values(by="成交量", ascending=False).reset_index(drop=True)

4)可视化图形代码展示


y_labes = df2["小区地址"]
x_labes = df2["成交量"]
# print(type(x_labes))

# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

## 用ggplot的风格来画图
plt.style.use('ggplot')

# 设置画布2
fig3 = plt.figure(3, facecolor= 'black')

ax3 = fig3.add_subplot(1,1,1,facecolor='#4f4f4f',alpha=0.3)

# 配置图形
plt.barh(y_labes, x_labes)

#设置标题、x轴、y轴的标签文本
title = plt.title('30天内小区成交量超过8套分布图',fontsize = 18,color = 'yellow')
xlabel= plt.xlabel('套',fontsize = 12,color = 'yellow')
ylabel = plt.ylabel('小区',fontsize = 12,color = 'yellow')

# X轴刻度文本垂直摆放
# plt.xticks(rotation=180)

plt.show()

5)效果图展示


image.png

3. 小区房屋出租量可视化分析

其实,通过对30内成交量房屋可视化处理后,出租房屋基本功能也是一致的,只是在数据清洗部分有所不同,其他基本无差异。

chuzu = df["出租量"].copy()
for i in range(len(chuzu)):
    item = chuzu.iloc[i].strip()
    try:
        chuzu.iloc[i] = int(re.search(r"(\d+)", item).group(0))
    except:
        chuzu.iloc[i] = 0
df["出租量"] = chuzu
image.png

4.选定区域小区房价区间分布

最后,我们可以选定某个区域,查看某个区域的小区价格区间分布情况。
1)这里以东城区为例。

# 仅拿东城区的数据
dongcheng = df[df["区"] == "东城"]

2)做数据清洗

# 数据清洗
price = dongcheng["价格"].copy()
for i in range(len(price)):
    item = price.iloc[i].strip()
    # 替换掉非数字的字符串并转为0
    if not item.isdigit():
        price.iloc[i] = 0
    else:
        price.iloc[i] = int(item)
# 结果演示
# print(price)

3)由于没价格数据的数据过多,不方便做展示用,需要取特定目标值来做数据展示。

# 去掉暂无价格的小区数据
price = price[price.values > 0]

4)分类价格区间,以["10万-15万/米", "6万-8万/米", "4万-6万/米", "2万-4万/米", "其他"]做例子,把数字往里套。


c = (
    Pie()
    .add("", [list(z) for z in zip(lables, [cnt1, cnt2, cnt3, cnt4, cnt5, cnt6])])
    .set_colors(["blue", "green", "yellow", "red", "pink", "orange"])
    .set_global_opts(title_opts=opts.TitleOpts(title="北京东城区二手房价格"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))

)
c.render("pie_set_color.html")

5)效果图展示,这里采用了pyecharts模块,展示更加好看点。

image.png

到这里,我们就已经把爬取到的数据,按照我们的需求做了可视化分析,当然了,这里只是列出简单方法,大家可以继续研究更加复杂的图形展示。

若想了解更多及源码获取,请参考原文

你可能感兴趣的:(房源数据可视化分析)