rbind / xiangyun

:pen: Xiangyun's personal website
https://xiangyun.rbind.io
GNU Affero General Public License v3.0
10 stars 10 forks source link

2022/06/gapminder/ #29

Closed utterances-bot closed 1 year ago

utterances-bot commented 2 years ago

Gapminder:关注差异、理解变化 - Xiangyun Huang

https://xiangyun.rbind.io/2022/06/gapminder/

XiangyunHuang commented 2 years ago

密度分布图

ggplot2geom_density() 图层调用 density() 函数实现密度估计,而 echarts4re_density() 图层调用 hist() 函数实现密度估计,估计结果用平滑线连接起来,因此,前者有更大的灵活性和更强的功能。

library(ggplot2)

ggplot(data = iris, aes(x = Sepal.Length, color = Species)) +
  geom_density()

library(echarts4r)

iris |>
  group_by(Species) |>
  e_chart() |>
  e_density(serie = Sepal.Length) |>
  e_tooltip()

ggplot2

echarts4r

XiangyunHuang commented 2 years ago

中国 GDP 增速、CPI 居民物价消费指数、失业率年度数据

china

数据源:世界银行

wb_world_indicator <- readRDS(file = "data/wb_world_indicator.rds")

china_cpi <- subset(x = wb_world_indicator, subset = iso3c == "CHN" & indicator_id == "FP.CPI.TOTL", select = c("date", "value"))

library(patchwork)
library(ggplot2)

p1 <- ggplot(data = china_cpi[complete.cases(china_cpi), ], aes(x = date, y = value)) +
  geom_line() +
  geom_point() +
  theme_minimal() +
  scale_x_continuous(n.breaks = 10) +
  labs(x = "Year", y = "CPI")

china_unemp <- subset(x = wb_world_indicator, subset = iso3c == "CHN" & indicator_id == "SL.UEM.TOTL.NE.ZS", select = c("date", "value"))

p2 <- ggplot(data = china_unemp[complete.cases(china_unemp), ], aes(x = date, y = value)) +
  geom_line() +
  geom_point() +
  theme_minimal() +
  scale_x_continuous(n.breaks = 10) +
  labs(x = "Year", y = "unemp (%)")

china_gdp_growth <- subset(x = wb_world_indicator, subset = iso3c == "CHN" & indicator_id == "NY.GDP.MKTP.KD.ZG", select = c("date", "value"))

p3 <- ggplot(data = china_gdp_growth[complete.cases(china_gdp_growth), ], aes(x = date, y = value)) +
  geom_line() +
  geom_point() +
  theme_minimal() +
  scale_x_continuous(n.breaks = 10) +
  labs(x = "Year", y = "GDP Growth (%)")

p1 / p2 / p3
earfanfan commented 2 years ago

我本来是打算干活的间隙过来摸鱼看看,差点被最上面那个“预计月度135分钟劝退”。当然啦,除开视频没看,从头到尾仔细看完也是看了十五分钟。

首先,ggplot2 确实更灵活,也更强大。 其次,我记得基尼系数这个指标我们国家好几年前就不公布、不更新了,我看你前面获取了这个指标,但是后面画图的时候好像没再提。GDP这个指标本身能衡量的内容有限,据我所知现在世界上很多国家使用的国民经济核算体系是SNA体系,也就我们国家还在用GDP(个人感觉像是便于宣传以及我们国家玩不转),GDP衡量的是总体值,无法衡量二次收入分配。 最后,你最后的小结里面提出的那几个问题确实都很有趣,但是我感觉问题都提得太简单了,并不是人均GDP上升,人口增长率就上升或下跌这么简单。你那几个问题的角度就像是仅仅只是看到了几个指标之间的关系。

好了,我先不摸鱼了,以后找时间再来絮叨。对了,你博客里面画的图都好好看,审美十分在线。

XiangyunHuang commented 2 years ago
yihui commented 2 years ago

对这种包含超多代码以及巨型 HTML 标签(如 HTML Widgets 产生的 <script> 标签)的文档来说,Hugo 的字数统计肯定是严重偏高的。再加上中文的问题,字数统计就更容易不靠谱。我没有什么简单的办法。我能想到的就是用 JS 去数字符数:

document.querySelector('.article-content').innerText.length

这样出来是两万多,比 Hugo 数的六万多应该是靠谱多了。

XiangyunHuang commented 2 years ago

@yihui 看了好一会儿,试了下,还是不知道怎么正确地修改我的博客配置。字数统计确实是 Hugo 的一个问题,还很复杂https://github.com/gohugoio/hugo/issues/9335

P.S. 代码里的字可以不计,交互图里出现的也可以不算。

yihui commented 2 years ago

Hugo 方面无法配置。JS 方案参见 #30,你可以自己根据需要调整。我个人觉得这种字数和时长估计功能是鸡肋,我一般只是看一眼窗口滚动条再决定用什么速度去读文章,软件估计出来的时间可能很不靠谱,因为影响阅读时长的因素太多了,字数只是很小的一个因素,就比如一首诗几十个字,可能要读十分钟;一篇小说几千个字,也许五分钟能扫完;技术文章读读跳跳,也指不定需要花多长时间读完。还是我以前说的,如果文章太长,提供个目录大纲就很好了,剩下的事情交给读者自己决定。

XiangyunHuang commented 2 years ago

有的读者还是需要一个一眼看到头的阅读预期,右侧浏览器进度滚动条不够清楚,上面的 JS 方案 https://github.com/rbind/xiangyun/pull/30 很好了,字数和时间不要求准确,有参考意义就行,我看了之前的几篇文章的预估时间和字数,都挺合理的。

XiangyunHuang commented 2 years ago

@earfanfan 关于宏观社会经济指标的解读,我感觉其实非常复杂,需要搜集很多材料,比如我之前看到中国人口政策及数量变迁(1949-2010)。同样的,汉斯在 TED 演讲中,对五个动画的解读,让人听起来非常厉害,下面掌声雷动,他肯定是花了很多时间搜集材料的。统计学学下来给我一个世界是不可知的感觉,你不可能知道所有细节,总是留有不确定性,越是宏观的越复杂,基尼系数、XX 指数往前倒腾都有近百年的历史,到如今都很复杂。一个大一点的上市公司也是如此,比如 BATJ 和 TMD,每一个业务指标都可以对应一些业务环节或一些业务过程,每天的核心指标都在变动,即使是部门级的指标,作为一个分析师都很难解读数据的全部变化,因为指标的变动因素太多了,产品、运营、算法和工程团队都会影响它,这还只是内部因素,外部因素还有用户、天气、市场、行业、政策等等。之前看了钱学森的《创建系统论》,对复杂性讲得很好,他们当时建立一个部门,采用复杂的数学经济模型(成百上千的变量到数以万计的变量)、结合各个部门的专业人士一起,模型 + 领域专家的模式,书中说是定性和定量结合的模式。大公司何尝不是一个钱老说的复杂巨系统呢?说实在的,书好读,事不好做!你能给做个示例吗?我来学习学习!

earfanfan commented 2 years ago

@XiangyunHuang 好的,等我晚上下班回去仔细写写我的看法,只要你能不怎么情绪波动就行。

XiangyunHuang commented 2 years ago

@earfanfan 关于国民经济核算体系,详见统计之都前段时间登发的高敏雪老师的文章1950年代产值问题讨论回顾(一)——开篇导语,感觉和你说的出入很大。里面关于指标的定义、计算及背后的本质阐述得非常清楚,对从事数据开发、数据分析相关的应该有借鉴意义。

earfanfan commented 2 years ago

@XiangyunHuang 嗯,好,我回头瞅瞅。ps.这两天我的渣网络又不允许我进入你的博客了,所以虽然我还记得我的承诺,但我也忘记那天摸鱼看的是撒然后留下的评论了……

啊,总而言之,总有一天我得记着过来把我没絮叨完的叨完。

earfanfan commented 2 years ago

高敏雪老师的文章我刚摸鱼看了,我们国家的国民经济核算体系确实在1993年以后已经从MPS+SNA混合转成了SNA,但我脑子里确确实实有一个我们国家的国民经济核算体系和那些发达国家的不一样的印象。

我上网搜了搜SNA是有新旧体系的区分的,有个SNA2008年的新体系,并且2008年以后世界上大多数国家尤其是发达国家都转为了新的SNA体系,那个时候我们国家还是沿用旧的SNA体系。我们国家在2017年出了《中国国民经济核算体系(2016)》,但是那时候我已经毕业当社畜去了,后续没有再关注这个新的到底是转成了SNA2008,还是在旧版基础上改的。

近几年看与国民经济核算相关的文章比较少,可能我还看的是一些观念激进的人写的,当他们写到我们国家的国民经济核算体系并未与国际接轨,可能是因为我们国家玩不转这个核算体系的时候,我内心是认同的。

XiangyunHuang commented 2 years ago

就单个指标的解读,有篇大佬的文章写得很好建国以来人均 GDP 增长情况,另外,高老师的文章把指标建设的底层逻辑讲得很好,完全解答了我近一年来的一个困惑。特别是下面一段:

在这一选择和转型过程的背后,包含了几代统计人的研究、思考和实践,起点就是1950年代向苏联学习、基于MPS建立的以总产值为代表的产值指标。先是按照“老大哥”的指点逐步建立起一套进行产值统计的制度,进而结合统计实践和应用过程中发现的问题,开始针对总产值指标的定义和算法展开讨论,进而延伸到替代指标的选择。现在回过头来看这些争论,并与当下围绕GDP的争议相比较,不禁让人生出许多感慨——尽管所面对的指标发生了变化,但争论所涉及的核心议题则是相通的:表面看来,争论的焦点是指标的定义和计算方法,其背后的实质则与特定时代的经济管理模式、所秉持的经济思想、发展所追求的目标密切相关。这就是说,对当年围绕总产值指标所发生的讨论进行回顾和总结,一方面可以钩沉当年“我们从哪里来”“曾经走过怎样的路”,同时也可以为理解当下、面对当前问题进行相关研究提供一定借鉴。

XiangyunHuang commented 2 years ago

就部门层面的指标而言,它们往往对应一块大的业务,互联网行业变化快,指标跟着产品等迭代速度相应地也快,绩效指标很多是移动靶,也经常需要改指标口径,牵一发而动全身,产品、算法、数据都得跟着一块变,迭代几轮下来,数仓的构建逻辑越来越复杂,数据加工过程也变复杂了,但是这么变的目的高老师说的很清楚了,跟公司的战略(扶持新业务)、部门的定位(比如做强平台、支持业务还是纯业务导向)、业务的目标(比如是提升指标 A 还是提升指标 B,很多时候指标之间存在跷跷板,不可兼得)强相关。

XiangyunHuang commented 2 years ago

给自己一个提示:似乎有另一种实现方式制作分组气泡动画图 10:将原数据 wb_hans 重塑成宽格式, 然后使用数据叠加的方式将各个类别的气泡散点图画上,这就不需要用 e_add_nested() 修改 itemStyle,还可以获得一个图例,坏处是分组的类目很多时,冗余代码会变多,要添加和类别一样多的 e_scatter(),详见讨论 https://github.com/JohnCoene/echarts4r/issues/435

XiangyunHuang commented 2 years ago

2022-07-08 我去 gapminder 官网做了一个测试,结果如下

事实证明了这准确率确实还不如一只大猩猩 🦍,但是我却为此感到一丢丢自豪,因为我发现我比好些发达国家的平均水平要高不少。 不过,话又说回来,要是在我没写这篇文章之前做测试,很有可能不及平均水平。

XiangyunHuang commented 2 years ago

你能给做个示例吗?我来学习学习!

给自己一个提示:一口气了解石油和中东的百年战争 小Lin说栏目有一个团队在干商分的事,以后,可以找个有意思的话题也来解读一波。