草庐IT

我分析30w条数据后发现,西安新房公摊最低的竟是这里?

dijia478 2023-04-16 原文

前两天一个邻居发出了灵魂质问:“为什么我买的180平和你的169平看上去一样大?”

“因为咱俩的套内面积都是138平......”

我们去看房子,比较不同楼盘的价格,看的都是单价,可这个单价,却是用(总价 ÷ 建筑面积)计算的。而我们实际买到手里的,是套内面积。

套内面积 = 使用面积+墙体厚度+阳台建筑面积

建筑面积 = 套内面积+分摊面积

(这里要吐槽一下不合理公摊制度,由霍英东发明,大陆1993年从香港引入,但香港2012年就取消了)

所以我们买房子,自然是希望公摊越小越好的,花同样的钱,公摊越小,买到的套内面积越大嘛。

可你知道西安哪个区域的预售新房平均公摊最小吗?于是我又花了三天时间,写了700多行代码做了一个统计,得到下面的结论:

(数据来源:西安住建局官网 数据范围:2021-01-01 ~ 至今)

碑林区公摊最低,周至县公摊最高,高新区第二高

曲江新区,124.5㎡最大套内榜夺冠

建筑面积分布,主力段为100㎡-150㎡

公摊分布 主力段为20%-24%

面积越小,公摊越大,150-160平性价比较高

总体放量平稳

祖传手艺

这个手艺我之前已经在《用1000行代码统计西安新房价格后,我有一个惊人的发现》这篇文章中展示过了,那里我们简单介绍了如何统计最准确的西安新房平均价格。

今天我们用类似的方法,从西安市房建局获取公摊数据,统计西安新房的平均公摊。

幸好当时的代码还在,主要逻辑差不多,但获取难度比上次要大,所以我们还需要将代码稍作改善。

对了,之前有粉丝留言,问我能不能把代码开源?我觉得很刑啊,这是让我的小日子过得越来越有判头了嘛。

我这里只讲技术和思路,作为学习使用,代码的话可以自己实现,一共也就几百行,只要你请求的不是那么的频繁就好。

言归正传,今天我们的页面流程是这样的,和上次的稍有不同:

具体的页面分析我今天就不讲了,和上次差不多,主要讲一下和上次不同的点。

1

我们请求的时候,多了一个区域选择:

可以看到下面的这些区域也是西安的区县,所以我们在请求预售证信息页面的时候,需要加上区域编号,然后去根据区域遍历:

2

由于我们希望统计每个区域的公摊嘛,但是上面“城六区”说的太宽泛,页面上也没有更详细的区域信息。所以我们需要提取“项目坐落”里的区域信息,对地址开头字符和区域做一个映射:

然后就可以根据映射关系获取区域信息了。

3

由于我们的房屋公摊信息,没有直接展示在页面上,需要我们一个一个去点击获取:

所以这次我们要请求的接口量比上次获取价格要大几百倍,我们不能再用单线程请求了,需要上多线程。

我的电脑cpu是20核的,网络请求是典型的IO密集型操作,线程池大小参考值应该设置成2N,N是cpu核数,本场景IO占时间比重更高,所以线程池大小最佳值可能是3N、4N、5N。。。

但是因为我们是学习使用,不能给人家网站增加太大的负担,所以我们只启10个线程就好,等待队列大小10万,而且每请求一栋楼的数据,就让程序休眠10秒:

这样可以让请求时间缩短10倍左右,也不会给网站增加太大压力。

4

因为这次请求的接口过多,网络可能会发生抖动,接口就会调用失败。如果不处理异常,程序就直接停止了,如果忽略异常,数据又会缺失,造成统计不准确。

所以我们还需要调用接口失败时的重试机制。

我选择引入 spring-retry 来做重试机制,同时还需要aop的包:

这样我们就可以在需要进行失败重试的方法上加上 @Retryable 注解了:

这里的意思是,如果发生异常,重试9次,每次间隔1秒、2秒、4秒、8秒。。。如果9次重试都失败了,会调用 @Recover 注释的恢复方法,记录日志,人工处理。

5

这次我们直接计算总页数,不再用上次那种页面返回是空就停止循环的偷懒办法。

直接在首页就可以获取总数量 totalCount:

然后我们利用公式:

totalPageNum = (totalCount + pageSize - 1) / pageSize

已知 pageSize = 10,可以计算出总页数,作为循环的停止条件。

这样也就绕过了上一次说的第一个坑。

6

这个网站的请求参数,不需要我们再单独获取了,而是直接再href参数里,所以我们可以直接获取href参数里的值,去请求下一级接口:

这样也就绕过了上一次说的第二个坑。

7

这个网站的数据一直要追溯到2005年。

而我们并不想统计这么久远的数据,参考价值不大,只想统计2021-2022这两年的数据。

所以我们给循环停止条件上,额外加上时间判断,早于某个时间 after ,就不获取了。这里我设置的是 2021-01-01 。

这里有个小细节,我用了已经不推荐使用的java标签写法,break two;因为我这里嵌套了三层for循环,我只希望跳出其中两层。不推荐这么写,我这里这么写只是因为想提一下这个知识点。

写sql

好了,主要不同就是上面这些,其他的逻辑和上次差别不大,就不赘述了。

最后跑一下程序:

数据库里的数据:

数据库有数据了,大概30w条

接下来就是写sql查询的事了,我们只统计住宅,公寓和商业过滤掉。

西安各区新房平均公摊率:

西安公摊最高的20个新房楼幢:

西安公摊最高的20个新房楼幢:

西安新房各个建筑面积段房源数:

西安新房各个公摊率段房源数:

西安新房各个建筑面积段平均公摊:

西安每个月预售证发证房源数:

ok,到这里就统计完了,如果有想知道其他维度统计结果的,欢迎留言。

最后,愿公摊制度早日取消。

有关我分析30w条数据后发现,西安新房公摊最低的竟是这里?的更多相关文章

  1. 牛客网专项练习30天Pytnon篇第02天 - 2

    1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析:    在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1:    print(k)k=k/2A.1000 B.10C.11D.9解析:    按照题意每次循环K/2,直到K值小于等

  2. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  3. 西安华为OD面试体验 - 2

    西安华为OD面试体验开始投简历技术面试进展工作进展开始投简历去年一整年一直在考研和工作之间纠结,感觉自己的状态好像当时的疫情一样差劲。之前刚毕业的时候投了个大厂的简历,结果一面写算法的时候太拉跨了,虽然知道时dfs但是代码熟练度不够,放在平时给足时间自己可以调试通过,但是熟练度不够那面试当时就写不出来被刷了。说真的算法学到后期我感觉最重要的是熟练度和背板子(对于我这种普通玩家来说),面试题如果一上来短时间内想不出思路就完蛋了。然后由于当时找的工作不是很理想就又想考研了。但是考研是有风险的,我自我感觉自己可能冲不上那个学校,而找工作一个没成可以继续找嘛。本着抱着试试看的态度在boss上投了简历,

  4. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  5. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  6. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

  7. ruby-on-rails - 如何使用 ruby​​-prof 和 JMeter 分析 Rails - 2

    我想使用ruby​​-prof和JMeter分析Rails应用程序。我对分析特定Controller/操作/或模型方法的建议方法不感兴趣,我想分析完整堆栈,从上到下。所以我运行这样的东西:RAILS_ENV=productionruby-prof-fprof.outscript/server>/dev/null然后我在上面运行我的JMeter测试计划。然而,问题是使用CTRL+C或SIGKILL中断它也会在ruby​​-prof可以写入任何输出之前杀死它。如何在不中断ruby​​-prof的情况下停止mongrel服务器? 最佳答案

  8. 千耘农机导航的“星地一体”能力究竟是什么? - 2

    伴随农业机械化和智能化的发展,越来越多的人开始使用农机自动驾驶系统助力耕作,千耘农机导航的“星地一体”能力可有效解决信号受限的问题,实现作业提效。究竟什么是“星地一体”,又是如何解决智能化农机作业的痛点的?下面为大家揭秘。农机效率通常受限于通信网络目前虽然我国通讯网络的人口覆盖率达到99%,但地面移动通讯网络覆盖率仍小于国土面积的40%,而很多农田所在区域恰是山区、戈壁滩等偏远地区。两省交界地也会出现通信信号不稳定的状况;而国内大部分农机自动驾驶系统非常依赖通信网络,当通信网络弱的时候会出现系统掉线的现象,必须得携带小基站才能正常使用,极为繁琐。Q:什么是千耘农机导航“星地一体”能力?A:是星

  9. 【Unity游戏破解】外挂原理分析 - 2

    文章目录认识unity打包目录结构游戏逆向流程Unity游戏攻击面可被攻击原因mono的打包建议方案锁血飞天无限金币攻击力翻倍以上统称内存挂透视自瞄压枪瞬移内购破解Unity游戏防御开发时注意数据安全接入第三方反作弊系统外挂检测思路狠人自爆实战查看目录结构用il2cppdumper例子2-森林whoishe后记认识unity打包目录结构dll一般很大,因为里面是所有的游戏功能编译成的二进制码游戏逆向流程开发人员代码被编译打包到GameAssembly.dll中使用il2ppDumper工具,并借助游戏名_Data\il2cpp_data\Metadata\global-metadata.dat

  10. 驱动开发:内核无痕隐藏自身分析 - 2

    在笔者前面有一篇文章《驱动开发:断链隐藏驱动程序自身》通过摘除驱动的链表实现了断链隐藏自身的目的,但此方法恢复时会触发PG会蓝屏,偶然间在网上找到了一个作者介绍的一种方法,觉得有必要详细分析一下他是如何实现的进程隐藏的,总体来说作者的思路是最终寻找到MiProcessLoaderEntry的入口地址,该函数的作用是将驱动信息加入链表和移除链表,运用这个函数即可动态处理驱动的添加和移除问题。MiProcessLoaderEntry(pDriverObject->DriverSection,1)添加MiProcessLoaderEntry(pDriverObject->DriverSection,

随机推荐