安居客二手房python数据可视化

继上一篇安居客二手房的数据进行预处理后,接下来就可以对数据进行可视化。

我们需要用到的库有:

import os
import shutil

import pandas as pd
from matplotlib import pyplot as plt
from pyecharts import Pie

重点介绍!!!!!!

Matplotlib库介绍
plot(kind="绘图类型")
绘图类型:
‘line’ : #折线图
‘bar’ : #条形图
‘barh’ : #横向条形图
‘hist’ : #直方图(数值频率分布)
‘box’ : #箱型图
‘kde’ : #密度图,主要对柱状图添加Kernel 概率密度线
‘density’ : same as ‘kde’
‘area’ : #与x轴所围区域图(面积图)。Stacked=True时,每列必须全部为正或负值,stacked=False时,对数据没有要求
‘pie’ : #饼图。数值必须为正值,需指定Y轴或者subplots=True
‘scatter’ : #散点图。需指定X轴Y轴
‘hexbin’ : hexbin plot#蜂巢图。需指定X轴Y轴

一:

对数据进行可视化之前先要对数据进行分析,发现那些是我们需要的数据,并且数据之间有什么联系,我们可以从中得到什么价值(这是基础的一步也是很重要的一步)

总价、单价、面积、户型、地区商品房、普通住宅、一梯两户、钢混结构、精装........

  1. 区域分析:是否是中心区域还是偏远区域,分析各个区域的二手房套数多少
  2. 总价与单价分析:分析那个区域的二手房价格高,价格低,反应不同人对价格的心理价格区间,以及可以得出各个地区发展情况,是否位于中心路段
  3. 面积大小分析: 分析是什么样的二手房面积居多,以及地区的面积差异
  4. 房屋用途分析是什么样的房屋用途最多,主要看普通住宅类型
  5. 电梯:分析该二手房是否有电梯
  6. 朝向:分析朝向是否符合中国建筑的坐北朝南,以及房屋朝向对房屋总价的影响
  7. 建筑类型:分析房屋是塔楼还是板楼,知道房屋开发商喜欢什么类型的房子,以及得出什么的房子建筑是主流
  8. 户型:分析二手房主流户型是什么,可以为不同的人提供不同的需求
  9. 装修情况:对二手房的装修情况分析
  10. 楼层位置:根据对二手房的楼层位置和总价的分析,可以看出低中高层楼房谁更受欢迎,谁的价钱更高
  11. 房屋用途:分析房屋的用途大部分是拿来干什么

这些分析指标就是我们要分析的一些角度

二:

接下来具体对数据进行可视化

(1)这次用了函数来对数据进行读取

if __name__ == "__main__":
    if os.path.exists("./安居客_处理后.txt"):
        os.remove("./安居客_处理后.txt")

    srcfile = "../数据处理/安居客_处理后.txt"
    dstfile = "./安居客_处理后.txt"
    shutil.copy(srcfile, dstfile)  # 移动文件
    print("移动文件 %s -> %s" % (srcfile, dstfile))
'''
读取数据
'''
def getData():
    data = pd.read_csv("./安居客_处理后.txt", header=0, sep=';', encoding="utf-8")
    data.columns = ['编号','区县', '片区','小区名称','房屋单价','房屋总价',
    '户型','面积','朝向','装修','建设时间','房屋属性',
    '用途','产权','产权时间','唯一住房','中介公司',
    '挂牌时间','楼层位置','楼层数','首付','月供']

    #data['房屋单价'] = data['房屋单价'].astype(float)
    #data['房屋总价'] = data['房屋总价'].astype(int)
    #data['面积'] = data['面积'].astype(int)

    #  图表中文显示
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 步骤一(替换sans-serif字体)
    plt.rcParams['axes.unicode_minus'] = False  # 步骤二(解决坐标轴负数的负号显示问题)
    fig, ax = plt.subplots()
    return data

用def定义函数来获取文件内容(详细解释在代码中的注释中)

(2)接下来介绍3种数据可视化的方法

1.

'''
各区县房源分布情况!!!
柱状图
'''
def dataAnalysis1():
    data = getData()
    print(data['区县'].value_counts())

    #bar  垂直条形图
    #barh 水平条形图
    data['区县'].value_counts().plot(kind='bar', color=['green', 'red', 'blue', 'grey', 'pink'], alpha=0.5)

    plt.title('某市二手房各区、县房源分布信息!', fontsize=15)
    plt.xlabel('区、县名称', fontsize=15)
    plt.ylabel('房源数量', fontsize=15)
    plt.grid(linestyle=":", color="r")
    #x轴刻度旋转60度
    plt.xticks(rotation=60)
    #legend显示图例
    plt.legend()
    plt.show()

这是一个柱状图关于各区县房源分布情况

运行结果如下:

2.

'''
房屋总价和总面积的关系图
散点图
'''
def dataAnalysis4():
    data = getData()

    #  绘制总面积和总价的散点关系图
    home_area = data['面积']
    # print(home_area.head())
    total_price = data['房屋总价']
    # print(total_price.head())
    plt.scatter(home_area, total_price, s=3)
    plt.title('某市二手房总价和总面积关系', fontsize=15)
    plt.xlabel('房屋面积', fontsize=15)
    plt.ylabel('房源总价', fontsize=15)
    plt.grid(linestyle=":", color="r")
    plt.show()

这是一个散点图关于房屋总价和总面积的关系图

运行结果如下:

3.

'''
楼层和房源数量的饼图
饼状图
'''
def dataAnalysis8():
    data = getData()

    avg_price_louceng = data.groupby('楼层位置').count()['户型']
    print(avg_price_louceng)
    x = avg_price_louceng.index
    y = avg_price_louceng.values
    pie = Pie("楼层和房源数量的饼图")
    pie.add("", x, y, is_label_show=True)
    pie.render("pie.html")

这是一个饼图关于楼层和房源数量的关系图

运行结果如下:

以上三种就是对数据可视化进行处理的方法

我们关于对安居客二手房的项目就结束了,以上几篇文章希望对大家有所帮助(如有不足,敬请指正)

源代码如下:

'''
Matplotlib库介绍
plot(kind="绘图类型")
绘图类型:
‘line’ : #折线图
‘bar’ : #条形图
‘barh’ : #横向条形图
‘hist’ : #直方图(数值频率分布)
‘box’ : #箱型图
‘kde’ : #密度图,主要对柱状图添加Kernel 概率密度线
‘density’ : same as ‘kde’
‘area’ : #与x轴所围区域图(面积图)。Stacked=True时,每列必须全部为正或负值,stacked=False时,对数据没有要求
‘pie’ : #饼图。数值必须为正值,需指定Y轴或者subplots=True
‘scatter’ : #散点图。需指定X轴Y轴
‘hexbin’ : hexbin plot#蜂巢图。需指定X轴Y轴
'''
import os
import shutil

import pandas as pd
from matplotlib import pyplot as plt
from pyecharts import Pie

#pip uninstall pyecharts
#pip install pyecharts==0.1.9.5


'''
读取数据
'''
def getData():
    data = pd.read_csv("./安居客_处理后.txt", header=0, sep=';', encoding="utf-8")
    data.columns = ['编号','区县', '片区','小区名称','房屋单价','房屋总价',
    '户型','面积','朝向','装修','建设时间','房屋属性',
    '用途','产权','产权时间','唯一住房','中介公司',
    '挂牌时间','楼层位置','楼层数','首付','月供']

    #data['房屋单价'] = data['房屋单价'].astype(float)
    #data['房屋总价'] = data['房屋总价'].astype(int)
    #data['面积'] = data['面积'].astype(int)

    #  图表中文显示
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 步骤一(替换sans-serif字体)
    plt.rcParams['axes.unicode_minus'] = False  # 步骤二(解决坐标轴负数的负号显示问题)
    fig, ax = plt.subplots()
    return data


'''
各区县房源分布情况!!!
柱状图
'''
def dataAnalysis1():
    data = getData()
    print(data['区县'].value_counts())

    #bar  垂直条形图
    #barh 水平条形图
    data['区县'].value_counts().plot(kind='bar', color=['green', 'red', 'blue', 'grey', 'pink'], alpha=0.5)

    plt.title('某市二手房各区、县房源分布信息!', fontsize=15)
    plt.xlabel('区、县名称', fontsize=15)
    plt.ylabel('房源数量', fontsize=15)
    plt.grid(linestyle=":", color="r")
    #x轴刻度旋转60度
    plt.xticks(rotation=60)
    #legend显示图例
    plt.legend()
    plt.show()


'''
各区县房源均价分布情况!!!
柱状图(横)
'''
def dataAnalysis2():
    data = getData()

    data.groupby('区县').mean()['房屋单价'].sort_values(ascending=True).plot(kind='barh', color=['r', 'g', 'y', 'b'],
                                                                           alpha=0.5)
    plt.title('某市二手房各区、县房屋均价分布信息!', fontsize=15)
    plt.xlabel('房屋均价', fontsize=15)
    plt.ylabel('区县名称', fontsize=15)
    plt.grid(linestyle=":", color="r")
    plt.legend()
    plt.show()


'''
二手房户型情况
柱状图
'''
def dataAnalysis3():
    data = getData()

    data['户型'].value_counts().plot(kind='bar', color=['green', 'red', 'blue', 'grey', 'pink'], alpha=0.5)
    plt.title('二手房房屋户型情况!', fontsize=15)
    plt.xlabel('房屋户型', fontsize=15)
    plt.ylabel('房源数量', fontsize=15)
    plt.grid(linestyle=":", color="r")
    plt.xticks(rotation=60)
    plt.legend()
    plt.show()


'''
房屋总价和总面积的关系图
散点图
'''
def dataAnalysis4():
    data = getData()

    #  绘制总面积和总价的散点关系图
    home_area = data['面积']
    # print(home_area.head())
    total_price = data['房屋总价']
    # print(total_price.head())
    plt.scatter(home_area, total_price, s=3)
    plt.title('某市二手房总价和总面积关系', fontsize=15)
    plt.xlabel('房屋面积', fontsize=15)
    plt.ylabel('房源总价', fontsize=15)
    plt.grid(linestyle=":", color="r")
    plt.show()


'''
二手房装修情况
柱状图
'''
def dataAnalysis5():
    data = getData()

    #value_counts:查看表格某列中有多少个不同值的快捷方法,并计算每个不同值有在该列中有多少重复值。
    data['装修'].value_counts().plot(kind='bar', color=['green', 'red', 'blue', 'grey', 'pink'], alpha=0.5)
    plt.title('二手房装修情况的房源分布信息!', fontsize=15)
    plt.xlabel('装修类型', fontsize=15)
    plt.ylabel('房源数量', fontsize=15)
    plt.grid(linestyle=":", color="r")
    plt.xticks(rotation=60)
    plt.legend()
    plt.show()


'''
二手房小区建成年份与小区均价分布信息
散点图
'''
def dataAnalysis6XXXX():#(没有采集小区均价数据)
    data = getData()

    # 将小区建成时间转成日期并仅提取其中的年份
    print(data.建设时间)
    built_year = pd.to_datetime(data.小区建成).dt.year
    #print(built_year)
    # 绘制小区建成年限与小区均价的散点分布图
    plt.scatter(data.小区建成, data['小区均价'].astype(float), s=6)
    plt.title('某市二手房小区建成年份与均价分布信息!', fontsize=15)
    plt.xlabel('小区建成年份', fontsize=15)
    plt.ylabel('小区房屋均价', fontsize=15)
    plt.grid(linestyle=":", color="r")
    plt.xticks(rotation=0)
    plt.show()

def ensure_float(x):
    print(x.index)
    for indexs in x.index:
        print(type(x[indexs]))
        print(x[indexs])
        #print(int(x[indexs]))

'''
楼层与房屋均价关系
柱状图
'''
def dataAnalysis7():
    data = getData()
    #print(data["房屋单价"])
    ensure_float(data["房屋单价"])

    data.groupby('楼层位置').mean()['房屋单价'].sort_values(ascending=True).plot(kind='bar', color=['green', 'red', 'blue', 'grey', 'pink'], alpha=0.5)
    plt.title('二手房楼层与房屋均价分布信息!', fontsize=15)
    plt.xlabel('楼层信息', fontsize=15)
    plt.ylabel('房屋均价', fontsize=15)
    plt.grid(linestyle=":", color="r")
    plt.xticks(rotation=60)
    plt.legend()
    plt.show()


'''
楼层和房源数量的饼图
饼状图
'''
def dataAnalysis8():
    data = getData()

    avg_price_louceng = data.groupby('楼层位置').count()['户型']
    print(avg_price_louceng)
    x = avg_price_louceng.index
    y = avg_price_louceng.values
    pie = Pie("楼层和房源数量的饼图")
    pie.add("", x, y, is_label_show=True)
    pie.render("pie.html")


if __name__ == "__main__":
    if os.path.exists("./安居客_处理后.txt"):
        os.remove("./安居客_处理后.txt")

    srcfile = "../数据处理/安居客_处理后.txt"
    dstfile = "./安居客_处理后.txt"
    shutil.copy(srcfile, dstfile)  # 移动文件
    print("移动文件 %s -> %s" % (srcfile, dstfile))

    #dataAnalysis1()
    #dataAnalysis2()
    #dataAnalysis3()
    #dataAnalysis4()
    #dataAnalysis5()
    #dataAnalysis6()  #不可运行(未采集小区均价)
    #dataAnalysis7()
    dataAnalysis8()
### 安居客出租房武汉为例爬虫+数据分析+可视化 这个爬虫是我前段时间在淘宝上做单子的时候遇见的一个客户需求。本来以为就是一个简单的爬虫项目。但后面客户加了数据清洗和数据分析的要求。而后又加了要详细代码解释的需求等等。直到最后客户坦白说这是他们大专的毕设.......但是这个单子坐下来只有200左右,我想了一下,感觉好亏啊。在淘宝上随便找一个做毕设的都要好多钱的,而且客户本身的代码能力、数学、逻辑能力都很差,导致我每行都给注释以及看不懂,在我交付代码后又纠缠了我一个多礼拜。反正总体做下来的感觉就是烦躁。头一次感觉到了客户需求变更带来的巨大麻烦。 总之这是一次不是很愉快的爬虫经历。但是作为我写爬虫以来注释最详细的一次,以及第一次真正使用像matplotlib这种数据分析库的代码,我认为还是有必要分享出来给大家当个参考的(PS:大佬轻拍~)。爬虫本身几乎没有什么难度,写的也比较乱,敬请见谅。 **功能** 爬取安居客上的出租房信息(武汉地区的),并通过爬取的数据进行数据清洗以及数据分析。给出四个不同层面的可视化图。最终结果如下图所示: ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/1.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/2.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/3.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/4.png) **环境** 1. Windows 10 2. python3.7 **使用方法** 首先声明该爬虫由于是特定情况下写的,所以本身的通用性特别差,仅可以对安居客网站上的武汉出租房信息进行爬取,且需要自己手动更新cookie。同时在对数据进行分析及可视化的时候由于也是特别针对武汉出租房的进行的,所以针对性也比较强。如果别的需求需要自己进行更改。 1. 访问[安居客网址](https://wuhan.anjuke.com/),获取cookie。 > tip:获取cookie的方法可根据[此链接](https://jingyan.baidu.com/article/5d368d1ea6c6e33f60c057ef.html) 2. 在项目中找到`spider.py`的文件,将第12行的cookie换成你自己的cookie。 3. 运行`spider.py`,获取房源信息。运行后应会产生一个`武汉出租房源情况.csv`的文件。此文件为我们从安居客上爬取的房源信息,其中包含`房屋租住链接、房屋描述、房屋地址、房屋详情(户型)以及经纪人、房屋价格`五个属性。 4. 在获取了数据之后我们运行`matplotlib.py`文件。进行数据清洗,分析,可视化。运行后即可获得**功能**中展示四个图片。 **技术栈** 1. request 2. parsel 3. pandas 4. matplotlib **进步(相比之前)** 此次爬虫相比之前的技术上可以说有减无增。但其中注释相当详细,可谓是每行代码都有注释。所以对于初学者应该有一些用处。同时使用matplotlib进行了数据分析可视化等。对于数据处理的代码的注释也是几乎每行都有注释的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值