我用 AntV/S2 买了一套房

简介: 我用 AntV/S2 买了一套房
🙋🏻‍♀️ 摇到号了,如何快速选房?蚂蚁集团前端工程师子裳记录了自己真实的购房经历,通过 AntV/S2 快速实现高效选房,一份妥妥的“购房攻略”!

背景

经过一年多的摇号,我在前两天收到了某网红盘的摇中通知。还沉浸在摇中房屋喜悦中的我,很快被售房顾问告知选房的人很多,每位购房者的选房时间都很短,必须一分钟内快速选房。并且,排在 400 多号的我,在选房时无法得知前面选房者的实时信息。所以,我首先要从 1000 多套房源中,把不满足要求的房源都排除掉。加上现场选房时间短,需要在分分中完成这上百万的交易,怕自己过于紧张,必须得准备一个简单可靠的小抄。刚好最近在做的一个多维表格项目就很适用于这个场景,首先它具有方便的筛选功能,能过滤掉不想要的房型(日照短,临街等)。其次,它可以对数据进行分组,快速找到钟意房源的楼栋、单元、楼层等范围。于是我快速行动,开始搭建快速选房的多维表格。

知识扩展

多维表俗称交叉表,由列和行组成的双向表。相对于普通表格,具有能够构造、汇总及显示大量数据优势。而我们的 AntV/S2 中拥有这两种表格,满足你所有需求 🤩

交叉表

普通表格

图1:交叉表

图2:明细表

搭建可视化 demo

数据准备

我通过开发商和万能的互联网收集到了楼栋单元房号楼层房屋类型是否临街朝向面积 这几个维度的数据。
数据展示

[
  {
    "name": "21#", // 楼栋
    "unit": "1单元", // 单元
    "building": 1, // 房号
    "level": 2, // 楼层
    "property": "公寓", // 房屋类型
    "nearStreet": false, // 是否临街
    "toward": "东", // 朝向
    "area": 111, // 面积
    "score": 7  // 评分
  },
  {
    "name": "21#",
    "unit": "1单元",
    "building": 2,
    "level": 12,
    "property": "住宅",
    "nearStreet": true,
    "toward": "东",
    "area": 123,
    "score": 7
  },
  ...
]

初始化表格

使用   S2 快速搭建报表。

代码实现

import React from "react";
import ReactDOM from "react-dom";
import { SheetComponent } from "@antv/s2-react";
import '@antv/s2-react/dist/style.min.css';
// 1. 添加配置
const s2Options = {
  width: 700,
  height: 580,
}
// 2. 配置数据
const dataCfg = {
  data: data, // 填入准备好的 houses.json 
  describe: '如何使用 S2 买房',
  fields: {
    rows: [  // 行头维度
      'name',
      'unit',
      'building',
      'level',
      'nearStreet',
      'toward',
      'property',
    ],
    columns: [], // 列头维度
    values: ['area'], // 数值
  },
  meta: [
    {
      field: 'name',
      name: '楼栋',
    },
    {
      field: 'unit',
      name: '单元号',
    },
    ...
  ]
}
// 3. 渲染
ReactDOM.render(
  <SheetComponent
    dataCfg={dataCfg}
    options={options}
  />,
  document.getElementById('container')
);

展示效果

图3:初始化表格

过滤房源

列举选房需求,引入 Ant Design 中的 Select 组件实现筛选器, 快速过滤不理想的房源。

列举选房需求

  • 房屋类型为住宅:成都的阳光灰常的珍贵,公寓(居住用地,房屋产权仍为 70年)的话冬至日照不足 3 时/天 。
  • 因为对噪音敏感,所以希望房屋不临街
  • 希望购买一个不太拥挤的套三,所以面积设置到了 100~130 平
  • 最后是楼层,一栋楼最好的楼层是 2/3 处高度(30层的话,20层较好)。因为成都周边存在一些地震带,所以我向下兼容能力也比较强。但是,太矮了可能会被🌲 遮挡,蚊子多,鸟叫声恼人等问题,所以,楼层最终锁定在 6~30 层

图4:筛选房源

查看汇总房源

使用 S2 字段的分页功能,帮助我实时查看理想房源汇总数。

代码实现

...
const s2Options = {
  width: 700,
  height: 580,
  pagination: { // 分页配置
    pageSize: 50,
    current: 1,
  },
}
ReactDOM.render(
  <SheetComponent
    dataCfg={dataCfg}
    options={options}
    showPagination={true} // 打开 S2 内置的分页功能
  />,
  document.getElementById('container')
);

展示效果

图5:分页功能

排序让数据更清晰

利用 S2 组内排序功能,让 楼栋单元房号楼层 展示更加清晰有序

代码实现

...
const header = {
  advancedSortCfg: { open: true }, // 打开高级功能
};
// 配置数据中添加排序
const dataCfg = {
  ...
  sortParams: [
  {
    sortFieldId: 'name',
    sortMethod: 'ASC', // 按首字母进行升降序
  },
  {
    sortFieldId: 'unit',
    sortMethod: 'ASC',
  },
  {
    sortFieldId: 'level',
    sortFunc: (params) => { // 自定义升降序
      const {data} = params;
      return data.sort((a, b) => {
        const aNum = last(a.split(ID_SEPARATOR));
        const bNum = last(b.split(ID_SEPARATOR));
        return  bNum - aNum;
      });
    }
  }]
}
ReactDOM.render(
  <SheetComponent
    dataCfg={dataCfg}
    options={options}
  />,
  document.getElementById('container')
);

展示效果

图6:排序功能

重点标记理想户型

使用字段标记功能,📌 理想户型。
  • 120平的🏡 ,房型方正,得房率高。是我重点标记的对象。
  • 123平的🏡 ,南北通透,房型合理。也是我重点标记的对象。

代码实现

...
const s2Options = {
  width: 700,
  height: 580,
  pagination: { // 分页配置
    pageSize: 50,
    current: 1,
  },
  conditions: {
    // 背景 (background) 字段标记
    background: [
      {
        field: 'area',
        mapping(value) {
          if (value === 123 || value === 119) {
            return {
              // fill 是背景字段标记下唯一必须的字段,用于指定文本颜色
              fill: '#b8e1ff',
            };
          }
          return {
            fill: '#fff'
          };
        },
      },
    ],
  },
};
ReactDOM.render(
  <SheetComponent
    dataCfg={dataCfg}
    options={options}
    header={header} // 配置表头
  />,
  document.getElementById('container')
);

展示效果

图7:字段标记

📊 查看完整 S2 官方购房 demohttps://s2.antv.vision/zh/examples/case/data-preview/#house

📝选房优先级:

  • 根据以上筛选只有 149 条满足需求,而对于 400 多号的我,还是很难选到。但是,我还是首先记录下满足以上要求的第一优先级房屋。
第一优先级 (149)
21#2-1:26~30
22#1-2:6~30
...
  • 然后逐渐放宽要求,选出第二、三优先级的房子的范围。
第一优先级 (149套)
21#2-1:26~30
22#1-2:6~30
...
第二优先级 (237套)
15#1-3: 24~29
15#1-4:  22~29
...

出发选房

我带着范围小抄,出发选房啦。相对于其他购房者的犹豫不决,手握“宝典”的我,胸有成竹,最终成功捡漏第二优先级中的房屋💃。


最后的最后

GitHub star ⭐️🌟 ( https://github.com/antvis/S2)的盆友, 赠送购房攻略(https://codesandbox.io/s/s2-house-template-4jgz7q?file=/config.ts)一套

想体验多维表格强大的分析和看数功能吗?欢迎使用 AntV/S2  

我们的 AntV/S2  已经开源啦,无论在工作还是生活都可以随意使用。如果你觉得以上文章对你还有帮助,或者有一定兴趣,欢迎一键三连:AntV/S2 - GitHubhttps://github.com/antvis/S2)。

相关文章
|
数据采集 人工智能 监控
40.8K star!让AI帮你读懂整个互联网:Crawl4AI开源爬虫工具深度解析
Crawl4AI 是2025年GitHub上备受瞩目的开源网络爬虫工具,专为AI时代设计。它不仅能抓取网页内容,还能理解页面语义结构,生成适配大语言模型的训练数据格式。上线半年获4万+星标,应用于1200+AI项目。其功能亮点包括智能内容提取引擎、AI就绪数据管道和企业级特性,支持动态页面处理、多语言识别及分布式部署。技术架构基于Python 3.10与Scrapy框架,性能卓越,适用于AI训练数据采集、行业情报监控等场景。相比Scrapy、BeautifulSoup等传统工具,Crawl4AI在动态页面支持、PDF解析和语义分块方面更具优势
4895 0
40.8K star!让AI帮你读懂整个互联网:Crawl4AI开源爬虫工具深度解析
|
关系型数据库 API 数据库
基于Patroni的PostgreSQL高可用环境部署
在部署PostgreSQL到生产环境中时,选择适合的高可用方案是一项必不可少的工作。本文介绍基于Patroni的PostgreSQL高可用的部署方法,供大家参考。
8455 153
|
机器学习/深度学习 存储 人工智能
AI实践:智能工单系统的技术逻辑与应用
智能工单系统是企业服务管理的核心工具,通过多渠道接入、自然语言处理等技术,实现工单自动生成、分类和分配。它优化了客户服务流程,提高了效率与透明度,减少了运营成本,提升了客户满意度。系统还依托知识库和机器学习,持续改进处理策略,助力企业在竞争中脱颖而出。
1809 5
|
Web App开发 缓存 Linux
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
《FFmpeg开发实战》书中第10章提及轻量级流媒体服务器MediaMTX,适合测试RTSP/RTMP协议,但不适合生产环境。推荐使用SRS或ZLMediaKit,其中SRS是国产开源实时视频服务器,支持多种流媒体协议。本文简述在华为欧拉系统上编译安装SRS和FFmpeg的步骤,包括安装依赖、下载源码、配置、编译以及启动SRS服务。此外,还展示了如何通过FFmpeg进行RTMP推流,并使用VLC播放器测试拉流。更多FFmpeg开发内容可参考相关书籍。
1449 2
FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流
|
机器学习/深度学习 人工智能 安全
智能时代的隐私守护者:AI加密技术的崛起与挑战###
本文深入探讨了人工智能(AI)在数据加密领域的创新应用,分析了AI如何增强数据安全性,同时也指出了面临的挑战和未来发展趋势。通过具体案例分析,展现了AI加密技术在保护个人隐私与促进数据安全方面的潜力,为读者提供对未来智能时代隐私保护的深刻洞见。 ###
|
存储 并行计算 测试技术
NumPy 性能优化:提升 Python 数值计算的速度
【8月更文第30天】Python 是一种广泛使用的编程语言,在科学计算领域尤其受欢迎。然而,由于 Python 的动态类型和解释执行机制,其在处理大规模数值数据时可能会显得相对较慢。为了克服这一限制,NumPy(Numerical Python)库提供了高性能的多维数组对象以及一系列用于操作这些数组的函数。本文将探讨如何利用 NumPy 来提高 Python 中数值运算的效率。
1452 1
|
Linux 测试技术 数据库
解决django与sqlite3不兼容报SQLite 3.9.0 or later is required (found 3.8.2)错的问题
解决django与sqlite3不兼容报SQLite 3.9.0 or later is required (found 3.8.2)错的问题
923 2
|
数据采集 机器学习/深度学习 数据可视化
DSPy 是什么?其工作原理、用例和资源
【8月更文挑战第13天】
1637 0
|
机器学习/深度学习 自然语言处理 搜索推荐
构建智能搜索应用:Elasticsearch与自然语言处理的融合
【8月更文第28天】随着大数据和人工智能技术的发展,用户对搜索应用的需求已经从简单的关键词匹配转向了更加智能化、人性化的交互方式。本文将探讨如何利用Elasticsearch和自然语言处理(NLP)技术构建一个能够理解用户意图并提供精准搜索结果的智能搜索系统。
1338 0
|
安全 Java 程序员
Java的Stream操作详解
Java的Stream操作详解
32424 1
Java的Stream操作详解