房价暴涨之下,买房到底有多赚?

这些年全国房价一片暴涨,所有人都在后悔没有早买,没有多买。如果我们把房产作为一个金融产品,是可以近似估算一下买房年化收益率到底有多少的。

买房的收益主要由两方面组成,一部分是房屋的居住收益,另一部分是房价上涨的部分。

如果房子空置,居住收益就是0。如果自主或出租,可以参考市场化租金按租售比估算。不同房子租售比不同,一般来说总价越高的租售比越低,总价越高的租售比越高。通常房子的租售比不会高于4%。

房价涨幅可以换算为年化涨幅率。如果按房价五年翻一番,平均年化约为14.9%(\sqrt[5]{2}-1)。以此类推,房价六、七、八、九、十年翻一番,对应的平均年化涨幅率分别约为12.2%(\sqrt[6]{2}-1)、10.4%( \sqrt[7]{2}-1 )、9.1%( \sqrt[8]{2}-1 )、8.0%( \sqrt[9]{2}-1 )和7.2%( \sqrt[10]{2}-1 )。我所了解的周围房价的涨幅,大多数年化涨幅率是在7-10%之间。

买房的成本也是两方面组成的,首付和贷款利息。大多数人买房都是贷款买的,首付和税费加起来都在四成以上。公积金和商业贷的利率稍有不同,综合下来是在5%上下。至于按揭还款,在近似估算中可以忽略,把它当成不同首付比例看待就行。

按照上述思路,买房的年化收益率(r)就是一个关于首付比例( dp )、租售比( ptr )、贷款利率( i )和年化涨幅率( agr )的函数:

r=(agr+ptr-(1-dp)*(1+i))/dp

从上面这个计算公式可以看出,租售比和年化涨幅率对于年化收益率的影响幅度是相同的。我们把它们简单合并,然后估算一下不同情况下买房的实际收益率(鼠标放在下图数据点上可以显示对应的数值)。

Awesome-pyecharts

作为参考,这里贷款利率为5%,年化涨幅率+租售比之和分别选取了-5%、0%、2%、4%、8%、10%、12%和15%。

从上面图中可以看出,在年化涨幅率+租售比为4%的时候,实际的收益率才大致和五年存款利率(约2.8%)相近。也就是说,年化涨幅率+租售比大于4%,从长期看买房才是赚的。过去几年房产市场的涨幅显然是高于这个数值的。

上图中同时能看出,首付比例对于实际收益率影响非常大。以年涨幅8%,租售比为2%,首付四成,贷款利率为5%的房子作为一个例子,买房年化收益可以达到17.5%。 这是非常可观的。

不难看出,如此可观的买房收益,本质上是通过按揭贷款这个杠杆带来的。所以前些年早买房、加高杠杆的人群在过去几年里是非常受益的。房子具有居住属性,但同时是一个带杠杆,具有极高风险的金融产品。现在买理财基金必须先做风险等级评估,然而一个近乎全民参与的、风险等级更高的房产市场,却不用做任何风险评估和风险提示,不得不说这是一个很神奇的事情。

借助群晖实现邮件信息的自动提取

从电子邮件中自动提取信息是一个比较普遍的需求。如有多张信用卡,从邮箱读取账单并在还款日前提醒是一个比较常见的需求。一种解决方案是把邮箱账户和密码交给或大或小的商业公司,由他们代查并提醒。但是,这需要非常信任这些公司的操守。

通常而言,直接处理个人邮箱中的内容非常困难。搭建私有邮件服务器,根据主题或发件人对收到的邮件进行筛选,然后转发到私有邮件服务器,再在私有服务器上利用脚本读取并提取邮件中的信息是另一种解决方案。

一些云主机服务商(如著名的阿里云),担心用户搭建的私有邮件服务器滥发垃圾邮件,导致域名被主流邮件服务商加到黑名单,经常会封禁邮件服务涉及的25端口。还好群晖自带一个邮件服务套件(Synology MailPlus Server),可以借以实现所需功能。

Synology MailPlus Server的安装和配置比较简单,按部就班操作就行。整个过程唯一需要注意的是似乎需要一个域名(不用是否可行我没研究过)。域名申请和动态解析是另一个话题了,不在此详述。

群晖上的邮件都存放在主盘符的MailPlus/@local中。这个目录下每个四位数的目录对应一个邮件账户,其中“0000”和“1024”可能是系统保留或模板,不用理会。对比找到账户对应的目录,假如某账户对应的数字是1028,那么收件箱对应的详细目录可能是 ‘…/MailPlus/@local/1028/1028/Maildir/cur’。

收件箱目录下每一个文件对应一封邮件。每一个文件名都较长,前10位数字代表收到时刻对应的Unix时间,邮件内容采用了标准的编码方式,并没有加密保存。通常邮件内容是html格式的富文本。因此,可以通过脚本解码并识别邮件的内容。

可惜的是,群晖自带的脚本运行触发器没有收到邮件事件判断。只能变通地设置定时任务,在每天指定时间利用脚本程序对增量邮件进行解码,根据邮件主题或内容筛选符合要求的邮件,再利用正则匹配方式抓取邮件中的信息。 如果后续还需要自动提醒,把这些信息内容保存下来,另外设定时任务读取内容并发送提醒就行了。

计算练习小App:mathcalc

去年,把前两年使用Pythonista在ipad上运行的一段Python小程序稍作修改,使用Buildozer打包成了apk,在Android设备运行。

目前只有100以内加减法的练习,需要填写输入答案,然后按OK提交。判断回答的对错后过两秒自动进入下一道题。计算练习记录以天为单位存储在db文件中。界面是kivy写的,运行不需要任何网络或本地权限。

关于北京近期新发地市场相关疫情数据的简单统计

从6月11日“西城大爷”的确诊以来,截止今日(6月20日)北京本地累计确诊205例。其中,6月16日31例和6月17日21例确诊病例未公布详情,其它153例确诊病例均公布了简要情况。

这些简要情况基本是模板式,很方便采用正则匹配汇总。尽管发布的信息量日渐减少,但依然可以提供一些疫情发展的简单情况。

公布的病例中,25例有明确的新发地市场采购日期和出现症状日期。两个日期间隔最短为2日,最长为11日,平均数为4.89天,中位数为5天。

由于近两天公布的详情中没有病例在新发地市场采购的明确日期,所以尽管前期公布了26例的明确采购日期,但统计信息意义有限。

发布简要情况的病例中,122例有明确的出现症状日期。其中,106例没有明确是否是现有确诊的密切接触者,16例明确是现有确诊的密切接触者。从日期分布来看,未明确密切接触者出现症状主要集中在6月8日到6月17日,18日和19日明显较少(当然也可能与发布延迟有一定关系);现有确诊的密切接触者最早9号有出现症状的报告,14日和18日均为4例,数量明显增多。

从与新发地市场关系看,78例为市场工作人员,34例为赴市场采购人员。其中,13日到15日市场工作人员确诊高峰期,3天共确诊63例,在19日仅有4例市场工作人员确诊。赴新发地市场采购人员确诊数自13日起大致稳定在5-8例之间。另一方面,市场工作人员从发病到确诊一般1到2天,而在市场采购人员从发病到确诊一般3到5天。

新发地市场于6月12日晚起关闭,至今已8天。结合潜伏期中位数5天,可以看出与市场直接相关的病例发病高峰期已过。在随后一周里,发布的市场工作人员确诊病例可能只有零星一些,赴新发地市场采购人员的确诊数可能由于信息发布延迟还会有一些,但总体还是呈下降趋势。但另一方面,现有确诊的密切接触者出现症状并确诊可能还有一定人数。

这一波疫情的爆发,源头明确,“西城大爷”又提前一到两天给大家敲响警钟,尽管涉及的人数众多,但是高风险人群易于确定,相对容易防控。目前来看,基本控制住了,但是作为个体,大家还是多多保重。

数据来源:北京市疾病预防控制中心

FileNames:一个批量修改文件名的小工具

经常要批量修改文件夹下文件的名称,手动改非常慢不说,还常常会不小心改到正在打开的文件导致出错。

Linux下通过正则匹配修改又快又酷,但对于我自己来说,手动或Excel批量确定好原文件名和新文件名,一键用脚本或程序改名是最舒服的。

于是,写了一个简单的py程序,FileNames。一键批量输出文件名到txt后,复制到Excel,在之后的一列批量或一一确定新文件名,两列一起复制粘贴到原txt中,再一键全部修改。

果然是方便了一些。

使用vsmeta文件更新群晖Video Station视频信息

从网上抓取了一些视频放在家里群晖218+上,但由于这些视频不是标准影片,群晖不能自动识别视频信息,在Video Station只显示文件名,不能按照系列分类。

手动编辑了一个文件的信息,群晖自动保存了一个视频文件全名+.vsmeta的文件。文本编辑器打开文件发现是乱码。幸好github上搜到了一个相关的项目。看了一遍代码,尽管似乎也是半成品,大致还是明白了.vsmeta文件的格式。

总结起来,群晖.vsmeta文件是一个二级制文件,由一系列的标识(TAG)和对应内容(整数、浮点数、字符串或标识组)组成,分为五部分信息:

  1. 文件头(0x080x02)
  2. 通用信息
    • 节目标题(TAG_SHOW_TITLE = 0x12)
    • 节目标题2(TAG_SHOW_TITLE2 = 0x1A)
    • 剧集标题(TAG_EPISODE_TITLE = 0x22)
    • 剧集年(TAG_YEAR = 0x28)
    • 剧集发布日期(TAG_EPISODE_RELEASE_DATE = 0x32)
    • 剧集信息锁定(TAG_EPISODE_LOCKED = 0x38)
    • 章节小结(TAG_CHAPTER_SUMMARY = 0x42)
    • 剧集信息(TAG_EPISODE_META_JSON = 0x4A)
    • 分类(TAG_CLASSIFICATION = 0x5A)
    • 评分(TAG_RATING = 0x60)
    • 剧集数据(TAG_EPISODE_THUMB_DATA = 0x8A)
    • 剧集文件MD5(TAG_EPISODE_THUMB_MD5 = 0x92)
  3. 第一组(TAG_GROUP1 = 0x52)
    • 演员(TAG1_CAST = 0x0A)
    • 导演(TAG1_DIRECTOR = 0x12)
    • 类型(TAG1_GENRE = 0x1A)
    • 编剧(TAG1_WRITER = 0x22)
  4. 第二组(TAG_GROUP2 = 0x9A)
    • 季(TAG2_SEASON = 0x08)
    • 集(TAG2_EPISODE = 0x10)
    • 季发布年(TAG2_TV_SHOW_YEAR = 0x18)
    • 季发布日期(TAG2_RELEASE_DATE_TV_SHOW = 0x22)
    • 季信息锁定(TAG2_LOCKED = 0x28)
    • TAG2_TVSHOW_SUMMARY = 0x32
    • TAG2_POSTER_DATA = 0x3A
    • TAG2_POSTER_MD5 = 0x42
    • TAG2_TVSHOW_META_JSON = 0x4A
  5. 第三组 TAG2_GROUP3 = 0x52
    • TAG3_BACKDROP_DATA = 0x0A
    • TAG3_BACKDROP_MD5 = 0x12
    • TAG3_TIMESTAMP = 0x18

用python照着造了一个轮子,在218+抓取视频的定时任务后加入了创建对应.vsmeta文件的py脚本,果然自动更新文件信息了,Video Station的目录终于整齐有序了。

目前还在上半场。。。

这些天,国内新冠病毒新增确诊病历疑似病历一直以境外输入为主。国外几个主要疫情国家每日新增确诊似乎大都降低或滞涨了。看似曙光已现。

爬了一下worldometers上的数据,对比了一下疫情以来境内外主要地区的每日新增确诊人数,顿时整个人都不好了。。。

截止4月10日,境内外主要地区每日新增确诊人数变化图

即使乐观地忽略检测能力的影响,境外疫情似乎最多也只控制到我们二月初的水平。两三个月来,我们的政府和人民以整个社会生产经营几乎停滞为代价,全国医护驰援湖北、全民“坐月子”、健康码通行码助力流调、政府协调尽全力建喷绒布口罩生产线,又花了近一个月才在三月中旬基本控制境内疫情。境外还有多久能控制疫情,让整个人类社会回到疫情出现前的节奏?

数据整理小工具:SortData.exe

SortData是一款对文件中数据按照指定变量名顺序整理的小工具。

特点:

(1)支持数据文件格式:Excel文件(.xls或.xlsx)、逗号分隔符文件(*.csv);可读取Excel文件第一张数据表或所有数据表;单次可对一个文件或一个文件夹下所有文件进行整理操作;

(2)支持自定义变量名顺序,支持设置变量名对应的一系列别名以合并整理数据。

更新历史:

2020-03-08 v0.10

      创建程序

下载: