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

我们需要用到的库有:

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()

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

运行结果如下:

python 绘制房间布局图 用python画简单房子_数据可视化

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()

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

运行结果如下:

python 绘制房间布局图 用python画简单房子_数据分析_02

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")


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

运行结果如下:

python 绘制房间布局图 用python画简单房子_数据可视化_03

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

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

源代码如下:

'''
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()