简单分析贝壳在售厦门二手房数据(二)

这是我的python数据可视化练手项目,数据从贝壳厦门二手房网爬取,数据已经经过清理,并且补充了经纬和地铁/BRT站信息,这是数据分析的第二部分,系列文章:

一、一张图看懂厦门房价

想要一张图看懂厦门房价?那这张图非热力图莫属,不过我们的数据量不够,采用散点图效果更理想。

1.1 绘图

# 导入相关模块
from pyecharts.charts import Geo
from pyecharts.globals import GeoType


# 准备数据
data_clean = pd.read_csv('data_clean_with_stations.csv')
# 构造数据集
region = data_clean['district'] + data_clean['sub_district'] + data_clean['resblock']
region = region.reset_index(drop=True)
data_pair = [(region[i], data_clean.iloc[i]['unit_price']) for i in range(len(region))]

# 热力图颜色
def rgb(minimum, maximum, value):
    minimum, maximum = float(minimum), float(maximum)
    ratio = 2 * (value - minimum) / (maximum - minimum)
    b = int(max(0, 255 * (1 - ratio)))
    r = int(max(0, 255 * (ratio - 1)))
    g = 255 - b - r
    return r, g, b

# 分色
bins = [
    {'max': 10000, 'label': '1万<', 'color': 'rgb(%s, %s, %s)' % rgb(1, 11, 1)},  # 有上限无下限,label和color自定义
    {'min': 100000, 'label': '>10万', 'color':'rgb(%s, %s, %s)' % rgb(1, 11, 11)}  # 有下限无上限
]

for i in range(1, 10):
    new_bin = {
        'min': i * 10000,
        'max': (i+1) * 10000,
        'label': '%s~%s万' % (str(i), str(i+1)),
        'color': 'rgb(%s, %s, %s)' % rgb(1, 11, i+1)
    }

    bins.insert(-1, new_bin)

# 各区二手房单价分布热力图
# 各区出租房屋租金价格分布热力图
geo = Geo(opts.InitOpts(width="800px", height="1260px", theme=ThemeType.LIGHT))
geo.add_schema(maptype="厦门", emphasis_label_opts=opts.LabelOpts(is_show=True, font_size=16))
for i in range(len(region)):
    geo.add_coordinate(region[i], data_clean.iloc[i]['lng'], data_clean.iloc[i]['lat'])
geo.add("", data_pair, type_=GeoType.HEATMAP)
geo.set_global_opts(
    title_opts=opts.TitleOpts(title="厦门二手房单价热力图"),
    visualmap_opts=opts.VisualMapOpts(min_=0, max_=80000, split_number=20, range_text=["High", "Low"],
                                      is_calculable=True, range_color=["lightskyblue", "yellow", "orangered"]),
    toolbox_opts=opts.ToolboxOpts(),
    tooltip_opts=opts.TooltipOpts(is_show=True)
)
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

# 绘图
geo.render()

1.2 结果

输出结果高达26MB,只能上截图了:

这是全市的:

简单分析贝壳在售厦门二手房数据(二)

岛内特写:

简单分析贝壳在售厦门二手房数据(二)

1.3 分析

  • 岛内单价10万以上不少,4~6万是主流。
  • 岛内外差距巨大,岛内外一体化进程任重道远。
  • 四区房价:海沧≈集美>翔安>同安,海沧散点最密集,可能生活更便利些?
  • 四个富人区:中山路商圈(美食,购物,教育);筼筜湖片区(郑智/文化中心,公园,教育);云顶山东面(依山傍海别墅区);五缘湾片区(行业大佬云集,教育资源新锐)
  • 散点密集区域基本与城市主干道/地铁重合,说明数据有一定的可靠性
  • ...

1.4 其他猜想

  • 同安主城区离各区最远,南面新形成的副中心会不会取而代之?会是价值洼地吗?还是城市规划的必然?
  • 大量面积散点空缺是什么原因?不适合建房/居住?城市规划?数据不够?
  • “冒红”的区域会向四周扩散吗?还是会有新的“五缘湾”涌现?
  • 岛外建设用地似乎还很充足?
  • ...

二、有多少小区是地铁自由的?

采用饼图统计这些二手房离最近地铁站/BRT的距离分布。

1.4 绘图

# 准备数据
data_clean = pd.read_csv('data_clean_with_stations.csv')
# 猜测,岛外的房子离地铁更近:
# 岛外
# data_clean = data_clean[data_clean.district.isin(['海沧', '集美', '翔安', '同安'])]
# 岛内
data_clean = data_clean[data_clean.district.isin(['思明', '湖里'])]

# 导入绘制饼图的库
from pyecharts.charts import Pie
# 添加分bin字段'area_bin'
bins = [0]
for i in range(0, 25):
    bins.append((i+1)*200)
disntance_bin = pd.cut(data_clean.distance_to_station, bins, right=False)
data_clean['disntance_bin'] = disntance_bin
# 分组获得数据
distance_grouped = data_clean.groupby('disntance_bin')['distance_to_station'].count()
# 字段list
intervals = ['%s~%sm' % (str(i.left), str(i.right)) for i in distance_grouped]
intervals[-1] = '4800m~'
# 值list
counts = list(distance_grouped.astype('float64'))

area_group = (
    Pie(opts.InitOpts(width="800px", height="600px", theme=ThemeType.LIGHT))
        .add("", [list(z) for z in zip(intervals, counts)])
        .set_global_opts(title_opts=opts.TitleOpts(title="在售二手房与最近轨道交通站的距离(岛内)"),
                         legend_opts=opts.LegendOpts(type_="scroll", pos_right="left", orient="vertical"),
                         toolbox_opts=None)
        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
area_group.render()

1.4 结果

全市:

Awesome-pyecharts

考虑到岛外生活区聚集,单独绘制岛内/岛外:

Awesome-pyecharts
Awesome-pyecharts

1.4 分析

  • 如果距离500m算地铁自由的话,岛内小区已经过半了
  • 岛外的数据比想象中的低,可能因为地铁规划较晚

1.4 其他猜想

  • 统计入规划中的地铁站再做计算,岛外的数据会不会赶上岛内?能否从中挖掘价值洼地?

四、地铁房怎么个贵法

采用散点图来直观表现离地铁距离对房价的影响。

4.1 绘图

# 导入绘制散点图的库,
    from pyecharts.charts import Scatter
    # 准备数据
    data_clean = pd.read_csv('data_clean_with_stations.csv')
    data_clean = data_clean.sort_values(by='distance_to_station')
    # 过滤距离为0的数据,这是一些小区名为路名的数据,api返回的小区经纬和地铁站或BRT站重合了

    data_clean = data_clean[data_clean["distance_to_station"] > 0]
    # 岛内
    data_clean = data_clean[data_clean.district.isin(['思明', '湖里'])]

    scater = (
        Scatter()
            # .add_xaxis([str(distance) + 'm' for distance in data_clean['distance_to_station']])
            .add_xaxis(data_clean['distance_to_station'])
            .add_yaxis(
            series_name = '',
            # series_name = "房屋单价(元/平)",
            y_axis=data_clean['unit_price'],
            symbol_size=3.5,
            label_opts=opts.LabelOpts(is_show=False),
            itemstyle_opts=opts.ItemStyleOpts(color='rgba(255, 140, 0, 0.15)')
        )
            .set_global_opts(title_opts=opts.TitleOpts(title="二手房单价(元/平)-地铁/BRT站距离(m)散点图(岛内)"),
                             legend_opts=opts.LegendOpts(type_="scroll", pos_right="middle", orient="vertical"),
                             datazoom_opts=[opts.DataZoomOpts(type_="slider", range_start=0, range_end=71), opts.DataZoomOpts(orient="vertical", type_="slider", range_start=0, range_end=65)],
                             toolbox_opts=opts.ToolboxOpts(),
                             )
            .render("地铁距离-单价散点图-岛内.html")
    )

4.2 结果

简单分析贝壳在售厦门二手房数据(二)

4.3 分析

  • 散点总体打出一个三角形区域,验证了轨道交通是房价筹码的观点
  • 离地铁/BRT千米以内房价总体起底高,上浮空间也大
  • 离地铁1100以外房价慢慢开始对离地铁/BRT的距离脱敏,因而离地铁1100以内可以定性为地铁房(可能需要更多数据支持)
  • 1100米可作为商家在地铁商圈店铺寻址的依据

4.4 其他猜想

  • 非地铁房也有不少高价小区,受什么因素驱动?
  • 探究(地铁/BRT,医院)双因素对房价的影像,绘制三维散点图
  • 岛外高价房基本都是地铁房吗?

五、厦门房子量价齐飞?

先说明:“量”不是成交量的量,而是不同年份房子的流通量。

流通二手房的年份占比一定程度上能反应各个年份建成的房屋总量,希望统计该数字可以看到厦门房子“量”的趋势。

4.1 绘图

用直方图来统计,分别统计面积和套数:

# 准备数据
data_clean = pd.read_csv('data_clean_with_stations.csv')

# 添加分bin字段'area_bin'
bins = [1945]
while bins[-1] < 2020:
    bins.append(bins[-1] + 5)

year_build_bin = pd.cut(data_clean.year_build, bins, right=False)
data_clean['year_build_bin'] = year_build_bin

# 分组获得数据
year_build_groups = data_clean.groupby('year_build_bin')

# 字段list
intervals = ['%s~%s年' % (str(i.left), str(i.right)) for i in year_build_groups['area'].count().index]

# 某年建成的房屋套数的值
list_counts = year_build_groups['area'].count()

# 某年建成的房屋总面积的值
list_area_sum = year_build_groups['area'].sum().astype('float64')

bar1 = (
    Bar()
        .add_xaxis(intervals)
        .add_yaxis("流通套数(套)", y_axis=list(list_counts), category_gap=1)
        .extend_axis(yaxis=opts.AxisOpts())
        .set_global_opts(title_opts=opts.TitleOpts(title="建成年份统计流通二手房套数和总面积"),
                         datazoom_opts=[opts.DataZoomOpts(type_="slider", range_start=45, range_end=100)],
                         toolbox_opts=opts.BrushOpts(), )
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
)
bar2 = (
    Bar()
        .add_xaxis(intervals)
        .add_yaxis("流通总面积(㎡)", y_axis=list(list_area_sum), yaxis_index=1)
        .set_global_opts(toolbox_opts=opts.BrushOpts(), )
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
)

# 住房条件(面积)没有改善,哈哈

"""scatter1 = (
    Bar()
        .add_xaxis(x)
        .add_yaxis("商家A", Faker.values(), yaxis_index=0, )
        .extend_axis(yaxis=opts.AxisOpts())
    #     .set_global_opts(yaxis_opts=opts.AxisOpts(type_="value", name="商家A", position="right"))
)
scatter2 = (
    Line()
        .add_xaxis(x)
        .add_yaxis("商家B", [v / 1000 for v in Faker.values()], yaxis_index=1)
    #     .extend_axis(yaxis=opts.AxisOpts(type_="value", name="商家B", position="left"))
    #     .set_global_opts(yaxis_opts=opts.AxisOpts(type_="value", name="商家B", position="left"))
)"""

# 叠加,绘制
bar1.overlap(bar2)
bar1.render()

4.2 结果

Awesome-pyecharts

4.3 分析

  • 价飞一直知道,现在才知道“量”也齐飞
  • 结果符合改开后高速发展的历史进程
  • 2015~2020年的数据较低,是准新房流通少的影响
  • 建面/套数没有明显变化,厦门房子总体没有变小

4.4 其他猜想

  • 不同城市准新房的流通占比能反应投机占比吗?
  • 不同年份建成房子面积的方差是增大还是缩小?

爱心提示:本文仅当个人(非专业人士)练手项目(数据少且不可靠),不作任何投资建议(手动滑稽)。

直达:进行中:进一步手机和处理数据/建模

原创文章,作者:10bests,禁止任何形式转载:https://www.10bests.com/beike-house-info-analysis-part2/

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注