霞と側杖を食らう

ほしいものです。なにかいただけるとしあわせです。[https://www.amazon.jp/hz/wishlist/ls/2EIEFTV4IKSIJ?ref_=wl_share]

「成功裡」という言葉との衝動遊戯

【ABSTRACT】

「成功裡」のような「○○裡」は、"~~ly"という英語もしくはそれに関係する言葉の和訳で造られたものだという仮説の検証を行ったが、筆者の力不足のため完遂はできなかった。

【OBJECTIVE】

「会は成功裡(裏)に終わった。」という文に、自分の日本語感覚は違和を覚える。全く日本語として問題ないのは事実なのだが、「成功裡」という単語がどうも私の日本語感覚にとってみると自然ではないのだ(こういうことは偶に起こる)。過去に一度、この「成功裡」という単語に齟齬を感じたがスルーしていたのだけど、最近、あることが思い浮かんだ。
英訳すると、"The meeting ended successfully."となる。明治時代以降、英語文献の和訳作業の中で、できた言葉なのではないかという仮説に行き着く。つまり、何が言いたいのかというと、successfully = successful + ly = 成功 + ly という式で以て造られた語なのではないかという仮説が浮かんだのだ。lyのところ、裡で上手く意味が合うし、この訳し方、天才では!って自画自賛して和訳した日本人の存在があったのではないか。そういう想像が膨らんだのだ。
秘密裡という言葉もある。これは、secretlyから来ているのではないか。そんなことを思いついたけど、実際のところどうなのだろうか。これを調べていきたい。

【METHODS】

まずは手始めにgoogle大先生にお話しを伺った。しかし、これでは解決しなかったので、ジャパンナレッジで調べてみた。

【RESULTS】

まず、googleで、「成功裡」「成功裡 secretly」「成功裡 語源」などと検索をかけてみたところ、2件の記事が、なるほどと思った。
「成功裏」とは?意味や使い方を解説 | 意味解説

裏 と 裡 : 語句楽散歩
だ。 「裡」には、内側の意味があり、「裡」を「うち」と読むこともあるということが分かった。(後者の記事は、裏原宿を台湾の文章で使うとき、裡原宿と書いていいかどうかという話で、面白かった。)

「裡」という言葉の知識はついたものの、語源は何なのか分からない。せめて初出が日本に西洋文化流入する前であるならば、自分の立てた仮説は否定される。ジャパンナレッジLibを使って、検索をかけて、語源情報もしくは凡例情報を探してみて、関係しているところを以下に、引用する。

3 その状態で。「暗暗裏・成功裏・秘密裏」

"り【裏】[漢字項目]", デジタル大辞泉, JapanKnowledge, https://japanknowledge.com , (参照 2018-11-03)

【二】〔語素〕
状態を表わす漢語に付いて、その状態のうちに物事が行なわれることを表わす。
竹沢先生と云ふ人〔1924〜25〕〈長与善郎〉竹沢先生の人生観・二「真に生きる実践的な力を得、不退の安心裡に住し得る底の現実力となって来なくては嘘だと」
多甚古村〔1939〕〈井伏鱒二〉休日を待つ「隠密裡に調査すべしとの別紙の書類が封入され」

"り【裏・裡】", 日本国語大辞典, JapanKnowledge, https://japanknowledge.com , (参照 2018-11-03)

4 (「裡」とも書く。「…のうちに」の形で)物事の行われる状況を表す。「暗黙の―に理解しあう」「会は成功の―に終わる」

"うち【内】", デジタル大辞泉, JapanKnowledge, https://japanknowledge.com , (参照 2018-11-03)

(13)(「裏」「裡」を訓読したものか。多く「の」を受けて用いられる) 物事の経過する間の状況、環境などを示すのに用いる。終始そのようなさまであるあいだ。「おたがいに暗黙のうちに了解しあった」
*米国及び英国に対する宣戦の詔書‐昭和一六年〔1941〕一二月八日「事態を平和の裡に回復せしめむとし、隠忍久しきに彌(わた)りたるも」

"うち【内】", 日本国語大辞典, JapanKnowledge, https://japanknowledge.com , (参照 2018-11-03)

人の知らないうち。ひそかな状態。内々(ないない)。
*内地雑居未来之夢〔1886〕〈坪内逍遙〉二「皮相論者が下院の勢力を称歎するにも係らず、其実暗々裡(アンアンリ)に、国家の権威を彼貴族輩が握れるならずや」
或る女〔1919〕〈有島武郎〉前・一四「何時でも暗々裡(アンアンリ)に事務長の為めにされてゐるのを意識しない訳には行かなかった」

"あんあん‐り【暗暗裏・暗暗裡】", 日本国語大辞典, JapanKnowledge, https://japanknowledge.com , (参照 2018-11-03)

どの凡例も明治期以降のもので困った。ただ、『日本国語大辞典』の「うち」の説明で、「裡」を訓読して、「(の)うち」にという使われ方が疑われている。もしも、この使い方が西洋文化流入以前の漢文にあるのだとしたら、仮説が否定されてくれるのだが、これ以上の調査はできなかった。

【CONCLUSIONS】

「○○裡」は、"~~ly"という英語もしくはそれに関係する言葉の和訳で造られたものだという仮説は否定できなかった。こういう文献調査・言葉の調査のような訓練を受けたのは大学の教養の講義くらいで、この方面では私は力不足だと感じた。誰か、この仮説の検証を引き継いでいただける方がいれば、ぜひ引き継いで検証していただきたい。
(あと、ジャパンナレッジすごい。)

【REFERENCES】

【RESULTS】にて、それぞれ記載しているので、今回は省略させていただきます。

RのデータフレームでNAを削除して左に詰めたいときの覚書

 

RのデータフレームでNAを削除して左に詰める方法

【用途】

スポーツの試合結果の表があったとき、時折、天候など何らかの理由によって試合日が振り返られることがある。そんなときにNAとなっているところを消して、要素を左に詰めたいという操作をしたくなることがある。そんなときのための技。

【内容】

library(magrittr) #パイプ演算子を愛してるから
df_na <- data.frame(
  V1 = c(1,0,1,0),
  V2 = c(0,NA,1,NA),
  V3 = c(1,1,0,0),
  V4 = c(NA,1,NA,0),
  row.names = c("A","B","C","D")
)
df_na
##   V1 V2 V3 V4
## A  1  0  1 NA
## B  0 NA  1  1
## C  1  1  0 NA
## D  0 NA  0  0

こんなデータフレームがあるとする。これのNAを消して、左に寄せたい。 想定としては、A~Dが選手名やチーム名に相当。V1~V4は時系列で、試合の順番に相当。

df_tume <- apply(df_na,1,na.omit) %>% t()
colnames(df_tume) <- c("v1","v2","v3")
df_tume
##   v1 v2 v3
## A  1  0  1
## B  0  1  1
## C  1  1  0
## D  0  0  0

【記憶の検索キーワード】

データフレーム, NA, 処理, 欠損, 欠測, 削除, 詰める, 寄せる, R, 試合, 振替

怪異・妖怪伝承との衝動遊戯:第2ゲーム

 

「怪異・妖怪伝承との衝動遊戯:第1ゲーム」で書いた内容のRのコードと解説です。

moratoriamuo.hatenablog.com

R MarkdownでHTMLを作成して、はてなブログのHTML編集にコピペしてます。
ディレクトリについては、上手く調整してください。
スクレイピングで得たデータはoni_youyakuフォルダを作成して保存しています。

スクレイピング

必要なライブラリーの読み込みをする。

library(tidyverse)
library(rvest)
library(magrittr)
library(stringr)
library(XML)

データベースの構造を把握するため、オニの一つ目だけ要約を抜き出してみる。

result_oni_1 <- read_html("http://www.nichibun.ac.jp/YoukaiCard/0640010.shtml")
youyaku_table_1 <- result_oni_1 %>% html_table(fill = TRUE)
youyaku_1 <- youyaku_table_1[[11]]$X3[27]
write(youyaku_1, "oni_youyaku_1.txt")

YoukaiCardの番号を抜き出せれば、そこだけ変更すればいけそうだと分かる。

result_oni <- read_html("http://www.nichibun.ac.jp/cgi-bin/YoukaiDB2/ksearch.cgi?Name=%E3%82%AA%E3%83%8B&Pref=&Area=%E5%85%A8%E5%9B%BD")
links_oni <- result_oni %>% html_nodes("td") %>% html_nodes('a') %>% html_attr('href')
#YoukaiCardのTRUEorFALSE
#Card_TF <- str_detect(links_oni, pattern = "YoukaiCard")
#links_oni[Card_TF]
#ってやろうとしたけど、これで十分だった
links_oni <- str_subset(links_oni, pattern = "YoukaiCard")
#ここから、/で始まりshtmlで終わるところを抽出したい(うまいやり方が思い付かず位置でごり押し)
str_count("../../YoukaiCard/")
card_shtml <- str_sub(links_oni, start = 18)
#そこから/と.shtmlを削除したデータも作成(後でtxtファイルの名前に使用)
card_num <- str_sub(card_shtml, end = -7)
#ループ処理で使うurl集
url_oni <- str_c("http://www.nichibun.ac.jp/YoukaiCard/", card_shtml)
#長さが一緒であることの確認。件数。
length(card_num)
length(url_oni)

これでループ回してスクレイピングしようとしたら、途中で文字化けして止まってしまった。
10番目で止まったので、そこを調べてみると

result_oni_10 <- read_html(url_oni[10])
youyaku_table_10 <- result_oni %>% html_table(fill = TRUE)

Error in type.convert.default(out[, i], as.is = TRUE, dec = dec) :
invalid multibyte string at ’シ<88>蜈ィ蝗スシ壹が繝具シ<89>
縲竊帝。樔シシ蜻シ遘ー
と表示された。 エラーのケースは例外処理するコードを書いた。

例外処理した番号をプリントする。

for(i in 1:length(url_oni)){
  tryCatch(
    {
      result_oni <- read_html(url_oni[i])
      youyaku_table <- result_oni %>% html_table(fill = TRUE)
      youyaku <- youyaku_table[[11]]$X3[27]
      name <- str_c("oni_youyaku_",card_num[i],".txt")
      write(youyaku, name)
      Sys.sleep(2)
    }
    , error = function(e){ERROR_num[i] <- 1
                        print(i)}
  )
}

これを回すと496件中105件、エラーしたことが分かった。
原因と対処法が思いつかない。どなたかご教授願いたいです。
代わりに、XMLパッケージのreadHTMLTable()を使ったら、なぜか分からないけど上手くいった。

for(i in 1:length(url_oni)){
      tab <- readHTMLTable(url_oni[i])[11] %>% as.data.frame()
      youyaku <- tab[27,3] %>% as.character()
      name <- str_c("oni_youyaku_",card_num[i],".txt")
      write(youyaku, name)
      Sys.sleep(2)
}

これで各データが入手できた。
全データを結合した文書データも作成しておく。

fnames <- dir(pattern=".txt") 
fnames_list <- as.list(fnames)
all_youyaku <- ""
for(file in fnames_list){
  all_youyaku <- str_c(all_youyaku,scan(file, what = "char", quiet = TRUE))
}
write(all_youyaku, "all_youyaku.txt")

分析

必要なライブラリーの読み込みをする。

library(RMeCab)
library(tidyverse)
library(stringr)
library(wordcloud)
library(tm)
library(topicmodels)
library(ldatuning)

頻度集計

オニ全体の特徴を掴むためにデータ全体で頻度集計。

oni_all_freq <- RMeCabFreq("oni_youyaku/all_youyaku.txt")
oni_all_freqD <- oni_all_freq[order(oni_all_freq$Freq, decreasing = TRUE),] %>% 
  as.data.frame()

自立語(動詞・形容詞・形容動詞)の頻度集計

oni_all_jiritu_freq <- oni_all_freqD %>% filter(Info2=="自立")
freq_dt <- oni_all_jiritu_freq %>% head(30) %>% as.data.frame() %>% select(Term,Freq) %>% t()
freq_dt
##      1      2      3      4      5      6      7      8      9       
## Term "する" "いう" "なる" "ある" "来る" "言う" "出る" "いる" "食べる"
## Freq "431"  "255"  "157"  "154"  " 85"  " 77"  " 69"  " 59"  " 58"   
##      10       11     12     13     14     15     16     17       18    
## Term "逃げる" "行く" "住む" "食う" "死ぬ" "入る" "作る" "入れる" "取る"
## Freq " 58"    " 44"  " 41"  " 41"  " 40"  " 40"  " 32"  " 31"    " 29" 
##      19     20     21     22     23     24     25     26     27    
## Term "見る" "ない" "殺す" "帰る" "聞く" "くる" "つく" "呼ぶ" "持つ"
## Freq " 27"  " 26"  " 24"  " 23"  " 23"  " 22"  " 22"  " 21"  " 21" 
##      28       29       30      
## Term "現れる" "さらう" "つける"
## Freq " 19"    " 18"    " 18"

名詞の頻度集計

oni_all_noun_freq <- oni_all_freqD %>% filter(Info1=="名詞")
freq_noun_dt <- oni_all_noun_freq %>% head(30) %>% as.data.frame() %>% select(Term,Freq) %>% t()
freq_noun_dt
##      1     2     3     4     5     6     7      8      9      10    
## Term "鬼"  "家"  "の"  "昔"  "人"  "日"  "退治" "こと" "よう" "節分"
## Freq "938" "100" "100" " 87" " 86" " 78" " 77"  " 75"  " 68"  " 64" 
##      11     12     13       14    15     16    17     18    19    20   
## Term "それ" "これ" "ところ" "男"  "とき" "夜"  "もの" "娘"  "人"  "時" 
## Freq " 60"  " 58"  " 57"    " 56" " 52"  " 52" " 51"  " 48" " 48" " 48"
##      21    22    23    24    25     26     27    28    29    30    
## Term "豆"  "山"  "目"  "月"  "ため" "正月" "首"  "石"  "姿"  "菖蒲"
## Freq " 47" " 46" " 46" " 42" " 40"  " 39"  " 37" " 34" " 33" " 31"

ワードクラウド

wordcloudで可視化

corpus_oni <- docDF("oni_youyaku/all_youyaku.txt", type = 1)

警告がめっちゃ出たけど、結果は出た。何の警告は調べず放置してしまいました。
ワードクラウドの出力は乱数で変わっていると思われる。

options(warn=-1)
corpus_oni <- corpus_oni %>% filter(POS1 == "名詞"&POS2=="一般"| POS2 == "自立") 
wordcloud(corpus_oni$TERM, corpus_oni$all_youyaku.txt, min.freq= 15, scale=c(15,0.5),
          family ="JP1", random.color=FALSE, color = rainbow(5))

options(warn=0)

トピックモデル

複数文書の読み込んで、文書ターム行列を作成する。

#フォルダのパス
dir_youyaku <- "oni_youyaku"
DTM <- docDF(dir_youyaku, type = 1)

名詞(一般)と動詞を抽出し、トピックモデルを実行する。

DTM_nouns_verbs <- DTM %>% filter( (POS1 == "名詞"&POS2 == "一般") | POS2 == "動詞" )%>% 
  select(-c(POS1,POS2)) %>% 
  data.frame(row.names = 1) %>% t() %>% 
  as.DocumentTermMatrix(weighting = weightTf)

トピック数を何パターンかやってみて、直感で決定した。

これも乱数依存の結果なので、第1ゲームと結果が異なる。(set.seed()しとくべきだった。)

#トピック数をkとする。
k <- 3
lda_result <- LDA(DTM_nouns_verbs,k)
terms(lda_result,10)

k <- 4
lda_result <- LDA(DTM_nouns_verbs,k)
terms(lda_result,10)

k <- 10
lda_result <- LDA(DTM_nouns_verbs,k)
topic10_nv <- terms(lda_result,10) %>% as.data.frame()

k <- 20
lda_result <- LDA(DTM_nouns_verbs,k)
topic_nv20 <- terms(lda_result,10) %>% as.data.frame()

k <- 30
lda_result <- LDA(DTM_nouns_verbs,k)
topic30_nv <- terms(lda_result,10) %>% as.data.frame()
k <- 30
lda_result <- LDA(DTM_nouns_verbs,k)
topic30_nv <- terms(lda_result,10) %>% as.data.frame()
topic30_nv
##     Topic 1 Topic 2 Topic 3 Topic 4 Topic 5 Topic 6  Topic 7 Topic 8
## 1        鬼      家      鬼      鬼      鬼      鬼       鬼      鬼
## 2        腕      鬼      橋    節分      剣    団子     神様    地蔵
## 3        綱      村      夫      頭      戸      土       山      爺
## 4      破風      宿      気    戸口      瘤      矢     場所      手
## 5        家      僧      妻      豆    人々    殿様       川    人形
## 6        姓      娘      神      柊      篩      足       弓      金
## 7      子孫      木    死体      月      手      背       嘘      赤
## 8  ケムダシ    旅人    弓矢      目      青  囲炉裏       涙      字
## 9      先祖    兄弟    鬼神      鰯    一つ    武士 お婆さん      銭
## 10       外    村人    悪鬼  イワシ      里      山       瓶    博打
##    Topic 9 Topic 10 Topic 11 Topic 12 Topic 13 Topic 14 Topic 15 Topic 16
## 1       鬼       月       鬼       鬼       鬼       鬼       男       目
## 2       血       鬼       人     菖蒲     地獄       女       鬼       鬼
## 3       灰       餅     行者       娘       人       火       姿       弟
## 4       弓     若者       島       蓬       田       釜       女       籠
## 5       山       図       竹     節句       地     山姥     地蔵       人
## 6     バラ       金     門松     節供     地名       家       池       姉
## 7       尻     神様       赤   ヨモギ     狂言       牛       木       心
## 8       矢       婆       妻     屋根     罪人     蜘蛛       塩       兄
## 9     ひと       宿       青       家       盆     馬方       馬   ススキ
## 10      土     餓鬼     正月       雨       寺       爺       尊     小僧
##    Topic 17 Topic 18 Topic 19   Topic 20 Topic 21 Topic 22 Topic 23
## 1        鬼       鬼       鬼         鬼       豆       鬼       鬼
## 2        酒     目玉     子供         芽     節分       森       首
## 3      童子       丸       山       上人       鬼       首       寺
## 4        呑       箒 お爺さん     神さま       子       木     村人
## 5        力       魔     集落 おじいさん       家       蛭       興
## 6      神社       姿       谷         牙       晩     里人     勅命
## 7        ヶ       箕       船         舟     川下       村       粥
## 8        首     人間     宝物         川       数       跡       念
## 9    ゾウリ ショウブ       髪     モグラ       年       下       天
## 10       坂     臭い       沖       息子     まき     比べ   オオモ
##    Topic 24 Topic 25 Topic 26 Topic 27 Topic 28 Topic 29 Topic 30
## 1        鬼       鬼       鬼       鬼       鬼       鬼       嫁
## 2        鶏       歯       石       人       年     正月       助
## 3    爺さん       穴       岩       娘       島       骨       鬼
## 4      鳴き       飯       跡       家       角       外       娘
## 5      正体       下       血       妹     怪物     部落     山鳥
## 6      女房       山     伝説       底       亥       福       尾
## 7        隣     鬼面       川       山     部落       内       矢
## 8      博打     柄杓       狐       籠     男子       松     土蔵
## 9        箕     様子        U       金       勘     節分     将軍
## 10       金   婆さん     主人     継母       由     家々     神酒

見えないモノを見ようとして

カレーの香ばしさとタバコの煙を乗せた、大航海時代を想起させる空気が、地下鉄に押し出された風に運ばれる。後楽園駅の改札のことだ。街によって匂い(臭い)は異なる。そんなにおいは、いくら視力が良くても感じることはできない。目に見えるものだけが存在してるわけじゃない。目に見えないものも存在してる。
見たことなくても、あると信じているものは意外に多い。たとえば、昼ドラの修羅場。昼ドラには、ドロドロの三角関係と修羅場が付き物だと思っているけれども、一度も、そういうドロドロを私は見たことがない。今もやっているのか知らないが、石原良純の天気予報も見たことない。良純の天気予報は当たらないって知っている(いや、知識があるというべきか)けれども、実際に良純の天気予報を見て、外れることを確認したことはない。死に際の走馬灯なんてものも経験したことがない。経験していないのに、存在する、もしくは事実であると思い込んでいる。これまた、少し古い話だが、デスブログがある。確認したわけじゃないけれども、面白がって信じている。何かを面白がる誰かがいて、それの形を変えて人に伝えて、それがまた拡散していく。そんな人の好奇心と不正確さこそが、確認なしに存在を信じる原因だろう。
フェイクニュースなんてドラマがあるらしい。見たことはないんだが、デマだとかフェイクニュースだとかがよく拡散される時代になったものだ(もちろん、昔からそういうのはあったのだが)。情報伝達の速度が飛躍的に上昇した現在、噂の伝達速度は音速を超えているだろう。多種多様で大量の、洪水のような情報を受けているのだから、すべての情報の正しさを確認している暇なんてなかろう。確認のための「ふるい」が必要そうだ。個人的には、その「ふるい」は自分の腑に落ちて信じることができるかどうかっていう疑いなんだけど、疑い続けるっていうのは結構、エネルギーを要するもので、疲れる。そんな面倒な作業をスキップするのが「信仰」とか「崇拝」なんじゃなかろうか。この人がおっしゃっているのだから、もしくは、我が神様がおっしゃっているのだから間違いないっていう省略を欲しがる人もいるだろう。威厳や貫禄、権威や正当性にすがりたいってのもよくわかる。それが楽だから。そういう省略を与えるのが「宗教」の一側面なんだろう。宗教を信仰するのは悪いことでもなんでもないけれど、「直面した問題が解けないから」といって、考えることをスキップして宗教に与えられるものを疑わずに受け入れてばかりいると、悲惨な結末に辿り着くかもしれないよって書いておく。(当の本人にとっては悲惨ではなく、救われて幸せなのかもしれないけど。)オウム真理教の信者にしても、いつだったかの占い師に心酔したオセロ中島にしても、自分で考えることを止めた結末がアレだったんじゃないかなって思う。

 

(2012年9月27日に書いたものを編集)

怪異・妖怪伝承との衝動遊戯:第1ゲーム

【ABSTRACT】

怪異の専門家に手っ取り早くなるために、怪異・妖怪伝承データベースのデータに対して、Rとテキストマイニング(自然言語処理データマイニング)の手法を用いて、怪異について学習する。

【OBJECTIVE】

モラトリアムが終わろうとしている。このまま就職して本当に良いのだろうか。そんな疑問が頭を過ぎる。就活をしているとき、自分の過去と向き合って、やりたいことを探していた。面接でしゃべるためだけの志望理由を探すために。
そんな過去への省察をもう一度やってみた。すると、一人の男が思い浮かんだ。忍野メメである。忍野メメは、西尾維新の『化物語』と、それに続くシリーズの登場人物で、怪異・妖怪変化の類の専門家である(化物語は、高校生の頃、初めて見た深夜アニメだったように思う。表現の仕方が独特で、アニメが面白いものだと気付くきっかけだった。このままでは脱線してしまうので、これ以上は語らない。)。 忍野メメは一見、胡散臭いが、実際は頼りになる人物で、とても魅力的に感じていた。そうだ、怪異の専門家になってみよう。それが今回の遊びの目的である。
ところで、怪異とは何なのか。忍野メメによると、
「人間がそこにあると思うからそこにあるもの、それが怪異」
とのことである。

【METHODS】

データは、国際日本文化研究センターが作成した『怪異・妖怪伝承データベース』を利用する。 国際日本文化研究センター | 怪異・妖怪伝承データベース
データを検索すると、それぞれのカードに、番号、呼称、出典、話者(引用文献)、地域、要約、貼り付け事例がある。要約の項の説明に、「貼り付け事例からピックアップした民俗語彙や特徴、行為、怪異・妖怪現象の本質などを、100字程度の文章形式にまとめたもの。なお、データには現在の観点からみて不適切と判断される表現も含まれているが、データの資料性を重視して、貼り付け事例に従って表記した。」とある。要約のところだけをスクレイピングで抽出して集めることにする。

データベースには、全部で35701件の事例データがあるが、さすがに全部扱うのは厳しい。代表的な怪異である「オニ」を取り扱う。「オニ」には「ウシオニ」、「オニババ」、「オニビ」などあるが、「オニ」として登録されているものだけを取り扱う。全部で496件である。

そのうちの1件を具体的に見てみることにする。これはオニの検索結果で一番上に表示されたデータである。 http://www.nichibun.ac.jp/YoukaiCard/0640010.shtml
要約の項目には、「昔、鬼が毎年現れて田畑を荒らした。村人は困り、もし一夜のうちに100段の石段を作れなければ、以後、姿を現さないと鬼に約束させた。ある夜、鬼が石段をつくり、あと一つで100段というところで、一番鶏が鳴いたので、鬼は姿を隠してしまった。」とある。

これらの要約部分を抽出して集めていく。スクレイピングはrvestパッケージで、read_html()とhtml_table()で、できると思ったのだが、496件中105件、謎の文字化けが発生してしまった(文字化けって怪異では?)。解決方法が分からなかったので、別の方法を探すことに。XMLパッケージのreadHTMLTable()も使えるみたいなので、やってみたら、文字化けを起こさずに上手くいった。無事、要約を抽出した496件のtxtデータが入手できた。このへんのコードは第2ゲームに載せる予定。

さて、データは得られた。35701件を496件に絞り込んだと言えども、全部を読んで頭に入れている時間は無いので、テキストマイニングの力を借りて、オニという怪異の特徴を把握する。頻度集計、ワードクラウドでオニ全体の特徴をつかみ、トピックモデルを用いて、各オニを分類してみて、傾向をつかんでみる。

【RESULTS】

頻度集計

オニ全体の特徴をざっくりと把握するため、496件のデータをひとまとめにして頻度集計を行う。 まず、自立語(動詞、形容詞、形容動詞)についての頻度集計の結果がこちら。
f:id:moratoriamuo271:20181024033654p:plain
食べる、死ぬ、殺す 、さらうなどのおどろおどろしい言葉が見られる。
次に、名詞についての頻度集計の結果がこちら。
f:id:moratoriamuo271:20181024034149p:plain
鬼が多いのは当然として、退治するケースが多そう。他に、節分、豆、正月、菖蒲といった言葉が目立ち、鬼の来る季節というのがありそう。月が気になってデータベースを検索してみたら、月と関係する話もあるが、大半は何月の話かという月が多かった。夜という言葉も多い。オニは夜行性のようだ。目や首は、オニの話なのか、人の話なのか、ここからは分からない。

ワードクラウド

はてなブログ映えを意識して、ワードクラウドによる可視化も行ってみた。これもひとまとめにしたデータで行った。
f:id:moratoriamuo271:20181024035104p:plain
オニのイメージはこんな感じということだ。

トピックモデル

496件のオニに関する怪異・妖怪伝承データをトピックモデルによる分類を行った。
トピック数は30にして、よく出る言葉を並べたものを用意した。30にしたのは、3,4,5,10,20,30と色々やってみて、解釈しやすかったから。 f:id:moratoriamuo271:20181024050434p:plain
トピック1は夫婦ものの話だろう。金と血が出ているのが少し怖い。トピック2は季節は秋で兄弟ものだ。
トピック3は鬼の形相を書いているものだろうか。赤や青、角、歯と鬼の描写かと思われる。トピック4は晩に山からやってきて妹か息子を鬼が殺してしまった話か。 トピック5は自然と関係する。トピック6は池周辺の家の話か。 トピック7は正月の話で、ショウブが関係する。菖蒲といえば、端午の節句では、と思ってググってみたら、食わず女房という話が日本にはあるらしい。これだ。
食わず女房 - Wikipedia
トピック8は山と狐と集落と仕業が気になる。トピック9はトイトイが気になったが、麻雀は関係なく、鳥のことらしい。
トピック10は正月に門松で厄除けという話だろう。トピック11は部落の神社と弓の話か。
トピック12は退治の話だろうか。トピック13は節分の話だ。トピック14はお地蔵さんに団子でもお供えして鬼から身を守ったのだろうか。トピック15は鬼は外、福は内の話だ。
トピック16は僧が鬼を追い払うかと。トピック17は旅人が泊まった家の山姥の正体が鬼だったとかではないか。天井から隠れて見ていた話かもしれない。
トピック18は綱が気になってデータベースを見てみたら、綱と名がつく人の話がいくつか見られた。渡辺綱という名前がよく出てきて調べてみると、
渡辺綱 - Wikipedia
平安時代の武将で、源綱ともいう。羅生門の話と関係があり、一条戻橋が舞台の話の書き換えなんだとか。
トピック19は霧のかかった川を船で渡っていたら子供が連れ去られたとかだろうか。トピック20は節分にイワシの頭と柊を戸口にって話だ。トピック21は剣で目玉を刺したとかか。
トピック22は端午の節句だ。菖蒲。ヨモギ。トピック23は罪人が地獄に落ちて、鬼にいじめられているところを神が救おうとしたとかではないか。
トピック24は大晦日が気になった。データベースを覗いてみると、大晦日は鬼が家に入らないように各地でいろんな工夫をしているみたいだった。
トピック25は相撲が気になった。鬼と相撲するケースがいくつかあるようだ。 朝鮮の話では、鬼と箒が関係あるらしい。中でも笑ったのが、この話で、
http://www.nichibun.ac.jp/YoukaiCard/1231055.shtml
「ある人が鬼と相撲を取った。倒してみると、正体は便所の箒に鼻血がついたものだった。」というものだ。
トピック26は庄屋が気になる。庄屋とは村長のような存在らしい。村に鬼がやってきて困ったとかって話か。
トピック27は勅命。退治する命令でも下ったのだろう。トピック28は山鳥が気になる。夢のお告げや山鳥の尾で作った矢が関係するらしい。
トピック29は酒呑みが関係しそうである。興味深い。トピック30は鶏の鳴きと博打が気になる。博打を調べてみると鬼が博打してる話が何件も出た。
トピックの解釈はこんな感じだろう。分類してみると、新しい発見もあるものだ。

【CONCLUSIONS】

スクレイピングでは、文字化けという名の怪異に憑りつかれて、なかなか眠りにつけなかった。周囲の友人からも、最近元気ないねと心配される次第であった。
分析上の課題としては、盛り沢山である。
word2vecは試してみたい。時間の制約上、今回は、できなかった。
トピックモデルについては、LDAでトピック数を雰囲気で決めてしまったが、ldatuningというパッケージがあるらしいので、これを使って、トピック数を決定してみるべきだった。
ディリクレ過程を使ったノンパラベイズによるトピックモデルならば、トピック数を事前に決めなくても良いらしいのだが、まだキャッチアップできていない。というか、そもそもトピックモデルを理論的に把握していないので、学習に努めたいところ。
解釈には、やはりドメイン知識が不可欠だ。柳田國男あたりを読んで伝承に詳しくなるべきかもしれない。
今回はオニにのみ注目したが、他の知らない怪異を見てみるのもよいかもしれない。さらに、最近発見したのが、 まんが日本昔ばなしのデータベースだ。
まんが日本昔ばなし〜データベース〜 - 1975年〜1994年、TBS系列で放送されたTVアニメ「まんが日本昔ばなし」の全話総まとめ、全話あらすじデータベースです。
これを使ってスクレイピングして、分析するのも面白そうだ。

コードや分析の詳細は別記事に追記する予定で、第2ゲームで、RMarkdownでHTML変換して貼り付ける予定。
【2018/10/25に貼り付けました。】
怪異・妖怪伝承との衝動遊戯:第2ゲーム - 霞と側杖を食らう

スクレイピングテキストマイニングの入門には多少成功したようには思うし、スクレイピングテキストマイニングの力を借りて、怪異の専門家に少しは近付けたように思う。怪異の専門家の力を借りたくなったら、ご連絡ください。力は貸します。助けはしません。一人で勝手に助かってもらうだけですが。

ところで、
「人間がそこにあると思うからそこにあるもの、それが怪異」
という怪異の説明を最初に挙げた。
これは統計モデリングと似ていないだろうか。
何か不思議な現象があったとする。怪異の専門家ならば、現象を、見えない何かによるものとして、その何かを怪異と呼ぶだろう。 統計家ならば、現象を、確率分布(統計モデル)によるデータ発生と捉えるだろう。怪異の専門家も統計家もやっていることの本質は同じなのであった。

【REFERENCES】

・『R Advent Calendar 2017 rvestを用いてポケモンデータをスクレイピング&分析してみた』
R Advent Calendar 2017 rvestを用いてポケモンデータをスクレイピング&分析してみた | かものはしの分析ブログ
スクレイピングの際に、参考にしました。

・『readHTMLTable:R から HTML の表を読み込む』
readHTMLTable:R から HTML の表を読み込む - 廿TT
XMLパッケージのreadHTMLTable()で、tableの読み取りができることに気付かせていただきました。

・小林『Rによるやさしいテキストマイニング: 機械学習編』
Amazon CAPTCHA
これを読んでテキストマイニングの仕方を学びました。読んだときの記録は昔書きました。
Rによるテキストマイニング(機械学周編)の学習記録 - 霞と側杖を食らう

・石田・市川・瓜生・湯谷『Rによるスクレイピング入門』
http://amzn.asia/d/clK9Tjm
スクレイピングの学習に使っています。

国際日本文化研究センター『怪異・妖怪伝承データベース』
国際日本文化研究センター | 怪異・妖怪伝承データベース
データベースを利用させていただきました。

動学的最適化の基礎の学習記録

【学習動機】

変分ベイズを学ぶ前に、変分法のおさらいをしようと思ったことと、マクロ経済学で、動学的最適化問題に帰着させて、最適化を行うのだけれど、変分法だとかハミルトニアンだとか動的計画法(DP)だとか、出てくるけど、いったいぜんたいなんなんだってなって整理したかった。とくに、中級マクロをやると、二期間モデルで最適化解きますまでは良いのだが、唐突に「こいつがオイラー方程式って呼ばれる」って書かれる。
たとえば、
二神・堀『マクロ経済学
http://amzn.asia/d/bC2ZtZE
では、たしかそのようだったと記憶している。オイラー方程式ってなんなんだよってなるのに、それを教えてはくれない。とても気持ち悪い(二神・堀『マクロ経済学』は、それ以外は読みやすく、中級マクロ本としては良著だと思います。)。上級マクロの講義を受けると、最適化を、オイラー方程式だったり、ハミルトニアンだったり、ベルマン方程式だったりの、どれかで、突然解かれていて、何がなんだか分からないうちにどんどん前に進んでいってしまうことがある(とくに一番最初は面食らって意味不明の沼の底に落とされた。)。一応、解き方を真似してその場しのぎをしてみるけれど、やはり、気持ち悪い。
動学的最適化の諸々の違いは何なのか。各手法の旨味は何なのか。そのへんが分からなくて気持ち悪い。
そんなときに、日本語でいいものがないか探していて出会ったのが、
A.C.チャン『動学的最適化の基礎』
http://amzn.asia/d/5FvrgpB
だった。そんなわけで、これをざっくりと読むことにした。

【学習記録】

<総括>

動学的最適化問題には、3つの主要なアプローチがあり、変分法と最適制御理論(ハミルトニアン)と動的計画法がある。
変分法は古典的アプローチで、汎関数積分可能で、登場するすべての関数が連続で連続的に微分可能であることが仮定される。
最適制御理論は、時間変数 tと状態変数 y(t)に加えて、制御変数 u(t)を扱う。制御変数に焦点を当てるということは、状態変数が二次的な地位になる。これは、状態変数について初期条件が与えられると、制御経路の決定が、その副産物として状態変数の経路を必ず決める場合にのみ受け入れられる。このため、最適制御問題は状態変数yと制御変数uを結ぶ式である \frac{dy}{dt}=f(t,y(t),u(t))がないといけない。これは運動方程式(遷移式、状態方程式)と呼ばれ、uの選択によるyへの影響を表す。 動的計画法の特徴は、与えられた制御問題を制御問題の一群に包含し、その結果それはある与えられた問題を解くことが結果的に問題の一軍を解くことになることと、この一連の問題の焦点は汎関数の最適値 V^{ * }に向けられ、変分法における最適状態経路 y^{ * } や最適制御理論における最適制御経路  u^{  *  }  の特徴に関心がない点である。

この本は、第一部が序論、第二部が変分法、第三部が最適制御理論で構成されている。動的計画法については、連続時間だと偏微分方程式の知識が必要になるため、深入りせず、変分法と最適制御理論に焦点が当てられている。この記事では、各章について記述するのではなく、気になっていたことについてだけ書いていくことにする。

結局、 オイラー方程式とは、 \max{\int{F(t, y(t), y'(t))}dt} s.t.  y(0)=A, y(T)=Z変分法で解いたときに、変分法で設定された \epsilon p(t)が消え、必要条件として現れる F_y - \frac{d}{dt}  F_{y'} = 0 \forall t \in [0,T ]のことだった。(このブログの記事では場合分けして書くのが面倒なので、積分区間を曖昧に濁している。本ではしっかり書かれている。)このオイラー方程式は、 F_{y' y'} y''(t) + F_{y y'} y'(t)+F_{t y'}-F_{y} = 0 \forall t \in [0,T ]とも表現でき、これはオイラー方程式が一般に、2階の非線形微分方程式であることを意味している。これは。一般解は2つの任意の定数をもつから、初期点と終点があれば確定した解が得られるってことにつながる。終点が可動的な場合を考えると、横断性条件が導ける。
制約条件付き静学的最適化問題同様、制約条件付き動学的最適化問題でも、ラグランジュの未定乗数法が役に立つ。ラグランジュ乗数を、それぞれが1つのオイラー方程式(オイラーラグランジュ方程式)における付加的状態変数として扱えばよい。動学的最適化問題に帰着して、ラグランジュ関数を立てて解いてるのは、変分法だったわけだ。

最適制御理論の特徴の一つは、変分法は内点解しか扱えない一方で、最適制御理論ではコーナー解も扱える点である。制御経路はジャンプする非連続性が認められている。他方で、状態経路は時間期間を通して連続でなければならないが、有限個の鋭点、角を持つことが認められていて、区分的に微分可能であればよい。最適制御理論のもう一つの特徴は、制御変数 uに対する制約を直接扱えること。もうひとつ、変分法との違いは、もっとも簡単な例が、変分法では固定終点のケースであったが、最適制御理論では自由終点(垂直的終点直線)のケースである点。
最大値原理と呼ばれる1階の必要条件が重要で、ハミルトン関数(ハミルトニアン) Hと共役状態変数(costate variable、あるいは補助変数)  \lambda の概念によって記述される。共役状態変数は、ラグランジュ乗数と似ていて、性質上、評価変数であり、関連する状態変数の潜在価格(シャドープライス)を測るもの。ハミルトニアン
 H(t,y,u,\lambda )=F(t,y,u) + \lambda (t) f(t,y,u)
と定義される。状態変数 yに関する1つの2階微分方程式であったのがオイラー方程式だったが、最大値原理は、状態変数 yと共役状態変数 \lambdaに関する2つの1階微分方程式を含んでいる。さらに、あらゆる時点において、制御変数 uに関してハミルトニアンが最大化されることが必要となる。
たとえば、最適制御の問として最も簡単なものを
 \max{V=\int{F(t,y,u)}dt}
s.t.  \dot{y}=f(t,y,u),y(0)=A,y(T)=Z Aは所与でZは自由。および、 \forall t, u(t) \in U
と記述でき、ハミルトニアン
 H(t,y,u,\lambda )=F(t,y,u) + \lambda (t) f(t,y,u)
となり、最大値原理の条件は、
 \max_{u}{H(t,y,u,\lambda)} \forall t
 \dot{y}=\frac{\partial H}{\partial \lambda}
 \dot{\lambda}=-\frac{\partial H}{\partial y}
 \lambda(T)=0
となる。
最大値原理の詳細な証明はこの本では扱っていないが、制御問題の変分法的な見方で以て、理論的根拠を示している。変分法と最適制御理論の比較をし、両者の同等性についても述べられている。その他、経済学的な解釈の仕方まで学べる。 たとえば、利潤を最大化する企業を考え、状態変数は資本ストック K、制御変数 uは経営上の意思決定として、最適制御問題を設定すると、
 \max{\Pi} = \int{\pi (t,K,u)}dt
s.t.  \dot{K} = f(t,K,u),  K(0)=K_0, K(T)=K_T ( K_0, Tは所与、 K_Tは自由。)
このとき、
 \frac{\partial \Pi^{ * }}{\partial K_0} =\lambda ^{ * } (0)
 \frac{\partial \Pi^{ * }}{\partial K^{ * } (T)} = - \lambda ^{ * } (T) となる。最適な共役状態変数 \lambda ^{ * } (0)は、所与の初期資本に対する最適総利潤 \Pi^{ * }の感度の尺度となっており、初期資本を1単位増やしたら総利潤が \lambda ^{ * } (0)大きかったことを意味する。したがって、初期資本の帰属価値、潜在価格であると理解できる。逆に、   \lambda ^{ * } (T)は計画期間の最後であと1単位保存したいとすると総利潤を  \lambda ^{ * } (T)だけ犠牲にしなくてはいけない。つまり、終点資本ストックの潜在価格を意味する。
同様に、一般的に、 \lambda ^{ * } (t)はその特定時点における資本ストックの潜在価格となる。

紛れもなく、読みやすい良著。上級マクロで初見殺しを食らう前に知っておきたかった。

<捕捉>

マクロの消費と投資については、 阿部修人先生講義ノート
http://www.ier.hit-u.ac.jp/~nabe/2007consumption.pdf

http://www.ier.hit-u.ac.jp/~nabe/investment2013.pdf
が流れを追いやすく参考にした。

橘永久先生の最大値原理の資料
http://www.le.chiba-u.ac.jp/~ttachi/doc/maximumprinciple-061124.pdf
もとても参考になった。

物理のかぎしっぽの変分法のページは今回読まなかったが、過去に変分法で躓いたときに参考した。
http://hooktail.sub.jp/mathInPhys/variations1/

経済セミナーの最適化特集回も昔読んだので、記録しておく。
経済セミナー2011年10・11月号|日本評論社

後から見つけたので、読めてはいないが、
須賀晃一先生の経済数学の資料
http://www.f.waseda.jp/ksuga/matheco05II.pdf
が、とても有用そうな気がした。
他に、細矢祐誉先生の経済学のための数学の講義資料がすごいので、 http://stairlimit.html.xdomain.jp/text16-8.pdf
つよい人は読んでみるとよいかと。

最適化について、もっと初めの方から始めたい方は
金谷『これなら分かる最適化数学―基礎原理から計算手法まで』
http://amzn.asia/d/8l4kbdI
がオススメ。

<追記>

ルジャンドル変換が気になって少し調べて雰囲気理解しただけだけど、参考になった資料のリンクを追加する。
ルジャンドル変換とはなにか?(動画 バージョン)
http://irobutsu.a.la9.jp/mybook/ykwkrAM/sim/LegendreTR.html
ルジャンドル変換とは何か(Legendre transformation) http://fnorio.com/0146Legendre_transformation/Legendre_transformation.html
EMANの物理学 ルジャンドル変換
https://eman-physics.net/analytic/legendre.html

【学習予定】

マクロのお気持ちは少しずつ理解できてきた気がする。 変分ベイズにいい加減、取り組みたい。

Rによるテキストマイニング(機械学周編)の学習記録

【学習動機】

これまでベイズ統計を学んできたけど、ノンパラベイズをまだ知らない。ノンパラベイズについて調べてみると、ディリクレ過程が出てきて、ディリクレについて調べてみると、トピックモデルが出てきた。トピックモデルで何かしたいというわけじゃないが、理論を追ってトピックモデルは行けたらいいなと思った。
トピックモデルは自然言語処理に関連する。機械学習関連分野に、自然言語処理と画像認識があるが、どちらかできるようにしておくといいなと思っていた。でも、画像認識は出来れば面白そうだけどマシンパワーないと辛そうだし、自然言語処理文字コードとか面倒だからいいやと放置していた。今回、自然言語処理と触れ合えるチャンスなので、入門してみようという気持ちが起こった。できるようになれば、趣味としても面白いような気もするし、実力ついたら、それはそれで将来どこかで仕事に使えるかもしれない。そんなわけで、とりあえずRで基本的なことをできるようにしようと思い立ったのである。

【学習記録】

<総括>

小林『Rによるやさしいテキストマイニング[機械学習編]』を読むことにした。

https://www.amazon.co.jp/R%E3%81%AB%E3%82%88%E3%82%8B%E3%82%84%E3%81%95%E3%81%97%E3%81%84%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E7%B7%A8-%E5%B0%8F%E6%9E%97-%E9%9B%84%E4%B8%80%E9%83%8E/dp/4274221008

200ページほどで、自然言語処理、前処理、スクレイピング機械学習のRを用いたやり方が分かるのは良い。駆け抜けていくような本。ざっくり手法を知るのには適していると思われる。コードの重複するような部分はサポートページに任せて、関数の説明をもう少し詳しくすればベターだったと感じた。この『Rによるやさしいテキストマイニング』はシリーズ化されており、無印版と活用事例編版がある。活用事例編は気になるところ。

サポートページに、付属データがないんだけど、、、
https://www.ohmsha.co.jp/book/list.htm?keyword=r%E3%81%AB%E3%82%88%E3%82%8B%E3%82%84%E3%81%95%E3%81%97%E3%81%84%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%83%9E%E3%82%A4%E3%83%8B%E3%83%B3%E3%82%B0&cmid=752

と思ったら、ここにあった。

ML - Rによるやさしいテキストマイニング

第1章から第4章までがテキストマイニングの基本を扱っており、第5章から第7章が機械学習の手法を扱っている。

c1:自然言語処理

形態素解析は、文を単語単位で分割。各単語の品詞などを同定する処理。
日本語の形態素解析ツールとして、MeCabChaSen、JUMAN、KyTeaが挙げられている。
規則や定義がツールごとに違うので、1つのプロジェクトでは同一のものを使うべし。

【MeCab】を【R】で使えるようにするための【RMeCab】を導入する方法・流れ【Windows編】|さぎのみや家の分析録

これに従って、MeCabとRMeCabのインストールをした。日本語はこれでなんとかなりそう。
英文解析では、パッケージのopenNLPとNLPを使っている。
やってみると、library(openNLP)がうまくいかない。
error: JAVA_HOME cannot be determined from the Registry
とエラーを吐いてくる。windowsのデフォルトのjavaが32bitなのが悪いらしい(?)
rJavaがロードできない - 盆栽日記 これで解決できたぽい。

構文解析(係り受け解析)は、文を区単位で分割し、区の係り受け関係(修飾・非修飾関係)を分析する技術。
日本語の構文解析ツールとして、CaBoChaとKNPが挙げられている。 英語では、openNLPmodels.enパッケージとopenNLPパッケージのParse_Annotator()で解析可能。

・意味解析は、いくつか種類があって、固有表現抽出、術後項構造解析、語義曖昧性解消、評判分析(感情分析)がある。ここでは、評判分析の例が紹介されている。ポジ・ネガの単語が入ってる評価表現辞書が必要。 英文の評価分析をするならば、tidytextが有用。パッケージに3つの辞書(afinn, bing, nrc)があり、言葉とそれに対応する感情(nrcならば、anger, fear, positive, negativeなど10種類)のデータフレームとして入っている。

head(get_sentiments("afinn"))
summary(get_sentiments("afinn")$score)

と確認したところ、afinn辞書はwordに対応するscoreがmax5のmin-5で与えられている。

head(get_sentiments("bing"))
unique(get_sentiments("bing")$sentiment)

と確認したところ、bing辞書はwordに対応するposiとnegaのみ。
tidytextは単語単位の評判分析ができたが、文単位の評判分析はSentimentAnalysisパッケージで可能。本書の第一版第一刷時点では、CRANに公開されていなかったみたいだが、2018/10/11現在では公開されていて、普通にインストールできた。
日本語の評価表現辞書としては、単語感情極性対応表、日本語評価極性辞書が挙げられている。

R+RMeCabで感情分析

このへんを参考にすれば日本語はできそう。

・言語判定は、テキストが何の言語か判定する技術。textcatパッケージで可能。

・文書要約は、重要な情報を自動で抽出する技術。LSAfunパッケージのgenericSummary()で可能。

c2:テキスト処理

テキストの読み込みと整形と頻度集計と用例検索を扱っている。

テキストの読み込みはscan()で、整形はstringrやtmで小文字変換、句読点、数字削除。tmのstopwordsも。日本語なら、stringrのstr_replace_all()で。頻度集計は日本語ならRMeCabTxet()で得た結果をmap_chrの第二引数をextract(1)と指定して、table()で集計して、sort()で並べ替え、データフレーム化してあげればいい。もしくはRMeCabFreq()を使ってもできる。
複数文書の頻度集計すると文書ターム行列が得られる。(NLPの理論本ぱらぱら見てて、潜在意味解析(LSA)の特異値分解のとこで出てきたやつか!)
英語なら、tmのCourpus()を整形して、DocumentTermMatrix()で文書ターム行列作成して、as.matrix()でゲット。
日本語なら、RMeCabのdocDFでできる。 n-gramの頻度集計、日本語なら、RMeCabのNgram()で可能。共起語の頻度集計は、日本語なら、RMecabのcollocate()で。 用例検索はforループで。

c3:スクレイピング

rvestを使用。これは、もう少し詳しく掘り下げたいため、今回は簡単にコード回して別の機会に。

『Rによるスクレイピング入門 』 https://www.amazon.co.jp/R%E3%81%AB%E3%82%88%E3%82%8B%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E7%9F%B3%E7%94%B0-%E5%9F%BA%E5%BA%83/dp/486354216X

で学びたいところ。

c4:データハンドリング

これも、宇宙本で過去に学習しているため、流し見しただけ。テキストに対してどのように使うかは追加的に学べる。

Rstudioとtidyverseの学習記録 - 霞と側杖を食らう

c5:回帰

この章から機械学習の手法のパートになるが、だいたいの手法は知っているため、コードを書いて流し見。気になったところはメモする形になる。 p119のcolnames(BNCbiber)の結果が違う。たとえば、"f_01_past_tense"は"f01_past_tense"。 p120のselect(BNCbiber, ~~~)は、エラーが出る。

Error in UseMethod("select_") : 
  no applicable method for 'select_' applied to an object of class "c('matrix', 'double', 'numeric')"

classがmatrixだとダメなのでは?仕方がないので、as.data.frame(BNCbiber)でデータフレームに変換したら解決。
平滑化回帰の交差検証のところで、bisoregパッケージのloess.wrapperをやっても、返ってこない、なぜか不明。
正則化回帰はglmnetパッケージ使ってやってる。問題ない。

c6:分類

k近傍法をclassパッケージのknn()でやっている。knn(trainの説明変数, testの説明変数, trainの目的変数, kの数) 書かれていないが、caretパッケージのconfusionMatrix()を使うにはe1071パッケージも必要みたい。
ナイーブベイズをe1071パッケージのnaiveBayes()でやっている。
ニューラルネットワークをnnetパッケージで。SVMをe1071パッケージのsvm()で。
ちなみに、e1071パッケージの名前は、" Misc Functions of the Department of Statistics, Probability Theory Group (Formerly: E1071), TU Wien"とあり、このパッケージを作ったウィーン工科の研究チームの識別子がe1071だったことに由来するみたい。

https://cran.r-project.org/web/packages/e1071/e1071.pdf

決定木のCARTをrpartパッケージとrpart.plotパッケージを使っている。
バギングはadabagパッケージのbagging()、ブースティングはadabagパッケージのboosting()、勾配ブースティングはgbmパッケージのgbm()を使用。ランダムフォレストはrandomForestパッケージのrandomForest()。

このへんのアンサンブル学習は、なんかよく使われているらしいけど、何も理論的背景を知らないので、入門してみたいところ。

c7:教師なし学習

階層型クラスタリングはdist()で距離を得て、hclustに、得た距離をつっこんで、methodを指定すればオーケー。
階層型クラスタリングは可視化性能は良いが、計算量が多く、大きいデータには使いにくい。 kmeans()でk-means法。
自己組織化マップはkohonenパッケージのsomgrid()とsom()を使用。
word2vecをwordVectorsパッケージで実行。やってみたけど、たぶん、メモリ不足で上手くいかなかった。 トピックモデル 1つの文書なら、ldaパッケージで可能。日本語でやるなら、RMeCabで形態素解析済みのデータを作ってやる必要がある。
複数文書なら、topicmodelsパッケージを使うとよい。

【学習予定】

トピックモデルが気になるので、理論含めて学んでいきたい。

佐藤『トピックモデルによる統計的潜在意味解析 (自然言語処理シリーズ) 』

https://www.amazon.co.jp/%E3%83%88%E3%83%94%E3%83%83%E3%82%AF%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E7%B5%B1%E8%A8%88%E7%9A%84%E6%BD%9C%E5%9C%A8%E6%84%8F%E5%91%B3%E8%A7%A3%E6%9E%90-%E8%87%AA%E7%84%B6%E8%A8%80%E8%AA%9E%E5%87%A6%E7%90%86%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E4%BD%90%E8%97%A4%E4%B8%80%E8%AA%A0/dp/4339027588/ref=pd_bxgy_14_img_2?_encoding=UTF8&pd_rd_i=4339027588&pd_rd_r=1c761cb3-d025-11e8-a088-e38b52a8e10c&pd_rd_w=cjY9N&pd_rd_wg=hAy82&pf_rd_i=desktop-dp-sims&pf_rd_m=AN1VRQENFRJN5&pf_rd_p=a4de75e6-d8f7-4a34-bd69-503ea4866e6c&pf_rd_r=YMC0NPW68TZJ139H80GE&pf_rd_s=desktop-dp-sims&pf_rd_t=40701&psc=1&refRID=YMC0NPW68TZJ139H80GE

岩田『トピックモデル (機械学習プロフェッショナルシリーズ)』

https://www.amazon.co.jp/%E3%83%88%E3%83%94%E3%83%83%E3%82%AF%E3%83%A2%E3%83%87%E3%83%AB-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%B2%A9%E7%94%B0-%E5%85%B7%E6%B2%BB/dp/4061529048/ref=pd_rhf_dp_s_cp_0_6?_encoding=UTF8&pd_rd_i=4061529048&pd_rd_r=32a053ef-9690-4827-b938-0ee907c2dc6d&pd_rd_w=KXxPv&pd_rd_wg=wwj3v&psc=1&refRID=1S99Q54MSNH93XTCV1QR

あたりで学習していきつつ、実際に何かしらのデータを用いて試していきたい所存。