最近我都做了些什么
Dec 4, 2019
1 minute read

时间匆匆忙忙到了 2019 年的 12 月,我自己也是匆匆忙忙的事情。至于即将到来的年终总结什么的,就随缘了。 最近忙的事,既然暂时告一段落,就有必要开个博客总结一下。 所以这一篇可能内容会比较杂乱反复。

地图和 shiny 玩出新花样

shiny 中,选择想要绘制的美国州名,再单独绘制这一个州的情况,达到如下图的效果:

当然,在众多的美国地图文件中,如果选择边缘没有那么精细的版本,就能让渲染速度更快一点。 shiny 实在是一个好用好玩的东西。

R 也能写简单的网络爬虫?

有一个项目是需要整理 2015 到 16 赛季 nba 球员的场均得分、场均助攻等数据。 我们可以直接在 篮球数据网站 进行爬取。 这事本来比较适合直接拿 python 跑,但出于一些原因,还是得用 R。 但意外地发现,其实也不是特别复杂,解析,xpath 查找也都不在话下,核心爬取部分也就不到 30 行代码。

library(tidyverse)
library(xml2)

# 得到某个球员的查询地址
# 举例,输入"Derrick Rose",函数返回"/players/r/rosede01.html"
get_player_url <- function(player_name) {
  query_url <- "https://www.basketball-reference.com/search/search.fcgi?hint=&search="
  url <- paste0(query_url, str_replace(player_name, " ", "%20"))
  player_url <- url %>%
    read_html() %>%
    html_nodes(xpath='//div[contains(@class, "search-item-url")]') %>%
    html_text()
  return(player_url[1])
}

# 得到某个球员的数据
# 举例:输入"Derrick Rose",函数返回该球员相关的 Age, Tm等等数据
get_player_data <- function(player_name) {
  print(player_name)
  base_url <- "https://www.basketball-reference.com"
  player_url <- get_player_url(player_name)
  if (is.na(player_url)) {url <- paste0(base_url, "/search/search.fcgi?hint=&search=",
                                       str_replace(player_name, " ", "%20"))}
  else {url <- paste0(base_url, get_player_url(player_name))}
  player_data <- url %>%
    read_html() %>%
    html_table() %>%
    .[[1]] %>%
    filter(Season == "2015-16") %>%
    select(Season, Age, Tm, Pos, PTS, AST, TRB, STL, BLK, FG, FT, TOV) %>%
    mutate(Player = player_name)
  return(player_data)
}

病例和对照的匹配

在病例对照研究中,对于一定数量的病例,要在对照组中选择一定比例的对象作为对照,这个过程叫做匹配(Match)。 而匹配一般会以性别,年龄等特征作为变量。 这次的匹配任务是使用年龄进行匹配,但查了网上的一些资料,大都是你要用什么什么,很少告诉你怎么用的。 自己操练了以下,用 MatchIt 可太简单了:

library(MatchIt)

# 匹配
match_it <- matchit(group~年龄, data=data, method="nearest", ratio=1)
a <- summary(match_it)

# 提取匹配好的数据
df_match <- as_tibble(match.data(match_it)[1:ncol(data)])

各种选项和奥秘都在 matchit 函数中,包括 methodratio 等等。

荒野大镖客2的游玩体验

这周通关了Rockstar Games 的新作 荒野大镖客2 的一周目。 本来应该专门用一篇博客来聊一些通关的感想,但是看到网路上已经有不少文章,各种深度,各种角度都有。 自己就也不用煞有介事地再去聊了。

对我而言,R星最大的特质在于他会让你关注社会,关注现实。 纵观几部作品,表面上看,他在打造一个越来越真实,细节越来越丰富的开放世界。 但是从剧本层面来讲,他通过游戏让你:认识你自己、关注社会的现状和趋势、找到自己的归宿。

比如亚瑟,是一个忠心耿耿的帮派打手,同时又具有情感和正义感的西部牛仔。 而美国文明和秩序的边界在不断向西部扩张,传统的牛仔和帮派文化注定走下历史舞台。 无论亚瑟如何反抗,都不可避免地成为牺牲。 在这个无比悲壮的故事背后,可以看到R星一直以来对美国历史和社会的观察,而非仅仅把玩家从现实世界抽离。 R星之于育碧,小丑之于漫威,都是一样的道理,我喜欢讨论现实的东西。

另外,最近还做了一个时间序列分析,但没有时间写了。另外,新开了游戏《纪元1800》,这游戏简直太上头了。 连续两天玩到快两点,今天不能再这样了。