Rの16進数カラー値の指定には「#」が必要
macだとエクセルやパワーポイントで自分で作った色の16進数カラーコードを簡単に確認できます。
こうして得た16進数カラー値を使ってRで作図しようとしたのですが、エラーが出ました。
plot(x = 1:10, y = 1:10, pch = 16) #macで表示されるカラーコードをそのまま使用するとエラー plot(x = 1:10, y = 1:10, pch = 16, col = "FF9933") #plot.xy(xy, type, ...) でエラー: 色名 'FF9933' が不正です
どうやら16進数カラー値の前に「#」が必要なようです。
plot(x = 1:10, y = 1:10, pch = 16, col = "#FF9933")
16進数カラーコードのサイトを見るとどれも「#」がついているので、通常は#つきで表現するんですかね?
だとしたらなぜmacは#つきで表示しないんだろう。
P.S
Rで関数を使って色を作成すると16進数で8桁のコードが出てきますが、最後の2桁が透明度なんですね。今回調べてて初めて知りました。「00」が透明で「FF」が不透明ですので試しに「55」と設定すると薄くなりました。
rainbow(3) #[1] "#FF0000FF" "#00FF00FF" "#0000FFFF" plot(x = 1:10, y = 1:10, pch = 16, col = "#FF993355")
Rで例外処理
Rのbaseパッケージのt.test関数は、2群が全て同じ定数だとエラーとなる。
他変数のデータを網羅的に検定するときなど、ここで処理止まると面倒くさい。。。
group1 <- rep(1, 5) group1 <- rep(0, 5) t.test(group1, group2, var.equal = T) #スチューデントのt検定を実施 t.test.default(group1, group2, var.equal = T) でエラー: データは本質的に定数です
そこで、例外処理でエラーが出る際にはNAを返すようにする。
Rではtry関数あるいはtryCatch関数で例外処理できるので、
tryCatch({ t.test(group1, group2, var.equal = T)$p.value }, error = function(err){ return(NA) }) [1] NA
【アニメ感想】リズと青い鳥
圧倒的なリアリティで描かれる苦しくて美しい少女の成長物語。
【りゅうおうのおしごと!7巻感想】非現実的な舞台で描かれるリアルな心情
今話題の将棋界を舞台にしたライトノベルの第7巻です。
- 作者: 白鳥士郎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2018/01/17
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
あらすじ
B級2組の8回戦を大悪手によって敗北した清滝鋼介は挽回の糸口を得ようと棋士室へ赴く。しかし『名人挑戦者』のプライドを纏った清滝の言動は現役の奨励会員にとって到底受け入れられるものではなかった。
「先生は俺達に命の対価として何を払えますか?」
自分が奨励会員だった時代には考えられない言葉に強い憤りを覚えると同時に、自分が『老害』となってしまったことを自覚し清滝は落胆する。
しかしその言葉の『熱』は消えかけていた清滝の心を再び燃え上がらせていく。
弟子の八一や銀子から絶大な信頼を寄せられているものの、第1巻の幕開けを放尿シーンで飾るなどどちらかと言うとギャグ要員だった清滝鋼介九段がメインです。
『過去の栄光にすがり若者に疎んじられる』というのは棋士だけでなくどの業界でもある話だと思います。この状況を打開する方法は至ってシンプルです。『過去の栄光を捨て現実を受け入れた上で若者の教えを請う』に尽きます。
しかし、実際に実行に移すのは非常に困難です。
過去の栄光を捨てるのはある意味自分の人生を否定することですし、例え本人がそうできたとしても周りの若者が受け入れるとは限りません。
この状況を清滝がどう打開するかは本作を読んで頂きたいのですが、非常に将棋界らしい(と言っても将棋には疎いですが)エピソードだと感じました。
僕も含めた大部分の人にとって将棋界は非現実的な場所だと思います。
最近将棋界がよく報道されていますが、そこで活躍する棋士たちに敬意や畏怖の念を抱いても、共感や感情移入をできる人はそう多くないと思います。*1
そんな非現実的な場所や人を舞台にしているにも関わらず、この作品のキャラの心情には圧倒的なリアリティがあります。
読み終わると『熱い』と感じずにはいられません。
このシリーズの面白さを改めて認識した巻でした。
今月から放送しているアニメも毎週楽しみです。
www.ryuoh-anime.com
追伸
銀子かわいいんだけど6巻の引きを考えると精神状態が心配になったのは僕だけじゃないはず笑
*1:少なくとも将棋に疎い僕はそうです。将棋が好きな人はまた違うのかもしれませんが。。。
2017年で最も「たーのしー!」かった日は?
今年も残すところわずかですね。
今年も多くのアニメが放送されましたが、2017年最も話題を集めたのは「けものフレンズ」ではないでしょうか?
kemono-friends.jp
本作で特徴的なセリフの1つに「たーのしー!」があります。
そこでけものフレンズに関するツイートから2017年で最も「たーのしー!」かった日を求めてみたいと思います*1。
1.Twitter APIキー・トークンの取得
ツイートを取得するにはTwitter APIキーとトークンを取得する必要があります。APIキー・トークン・ツイート取得までは下記の記事を参考にさせて頂きました。
www.randpy.tokyo
#使用するライブラリをダウンロード library(rtweet) library(dplyr) library(ggplot2) library(tidyverse) library(scales) #APPNAME, CONSUMERKEY, CONSUMERSECRETは前もって取得しておきます APPNAME <- "xxxxxxxxxx" CONSUMERKEY <- "xxxxxxxxxx" CONSUMERSECRET <- "xxxxxxxxxx" #トークンを取得 twitter_token <- create_token( app <- APPNAME, consumer_key <- CONSUMERKEY, consumer_secret <- CONSUMERSECRET)
これでツイート取得する準備は整いました。当初はsearch_tweets関数でハッシュタグ「#けものフレンズ」を含むツイートを全て取得しようと思っていたのですが、helpのdescriptionによると
ONLY RETURNS DATA FROM THE PAST 6-9 DAYS.
とのことで最高で6-9日までしか遡れないようです。*2
そこで、公式アカウント(@kemo_anime)のツイートを取得し、そのリツイートやいいねの数を見ることにします。
2.ツイート取得・前処理
#get_timeline関数を使用 #user:ユーザー名 #n:取得したいツイート数 #home:ユーザーのツイートを取得する場合はF #token:token_createで取得したオブジェクト tl <- get_timeline(user = "kemo_anime", n = 3200, home = F, token = twitter_token) dim(tl) [1] 2575 42
2575ツイートを取得できました*3。42変数の中にツイート日、文章、いいねの数などが含まれています。
アカウント名からてっきりアニメ専用アカウントかと思っていましたが、ツイート日が格納された変数(created_at)を見ると最初のツイートは2015年2月(アプリ時代?)でした。
以下解析のために前処理としてデータを整形します。
#リツイートを除外 tl <- tl[tl$is_retweet == F, ] #APIで取得するとグリニッジ標準時なので日本時間に変更 tl$created_at <- as.POSIXlt(tl$created_at, tz = "Japan") #アニメの影響を見たいので期間を2017年1月1日以降に tl <- tl[tl$created_at > "2017-01-01 02:00:00", ] #日ごとにまとめる tl$day <- as.POSIXct(substring(tl$created_at, 1, 10)) tw_per_day <- table(tl$day) %>% as.data.frame()
3.ツイート解析
下図は公式アカウントの1日あたりツイート数のヒストグラムです。
この1年で公式アカウントからは570ツイートあり、1日あたりのツイート数は1〜9件ということが分かります*4。
#合計ツイート数を算出 sum(tw_per_day$Freq) [1] 570 #1日あたりツイート数の概要 summary(tw_per_day$Freq) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.000 1.000 2.000 2.317 3.000 9.000 #ヒストグラムのプロット ggplot(tw_per_day, aes(x = Freq)) + ggtitle("けものフレンズ公式アカウント ツイート数/日") + theme(plot.title = element_text(family = "HiraginoSans-W3", hjust = 0.5), axis.title = element_text(family = "HiraginoSans-W3", size = 10)) + geom_histogram(bins = 9, binwidth = 1) + scale_x_continuous(breaks = 1:9, labels = 1:9) + xlab("ツイート数/日") + ylab("頻度")
いいね数とリツイート数をプロットしてみます。
day_df <- data.frame(day = rev(unique(tl$day)), favorite_count = tapply(tl$favorite_count, tl$day, sum), retweet_count = tapply(tl$retweet_count, tl$day, sum)) #ggplot用に整形 day_plot <- tidyr::gather(day_df, key = "group", value = "value", c("favorite_count", "retweet_count")) #プロット ggplot(data = day_plot, aes(x = day, y = value, colour = group)) + ggtitle("けものフレンズ公式アカウント いいね数・リツイート数") + theme(plot.title = element_text(family = "HiraginoSans-W3", hjust = 0.5), axis.title = element_blank(), axis.text.x = element_text(family = "HiraginoSans-W3", size = 8), legend.text = element_text(family = "HiraginoSans-W3")) + geom_line() + scale_x_datetime(breaks = as.POSIXct(paste("2017-", 1:12, "-01", sep = "")), labels = paste(1:12, "月", sep = "")) + scale_y_continuous(labels = comma) + scale_colour_discrete(name = element_blank(), labels = c("いいね", "リツイート")) #いいねとリツイートの相関係数を算出 cor(day_df$favorite_count, day_df$retweet_count) %>% round(digits = 2) [1] 0.93
いいね数とリツート数は強い相関があること(相関係数:0.93)、どちらも日によって数に大きな差があることが分かります。
多少荒っぽいかもしれませんが、以降は単純のためにいいね・リツイート数の合計したものを基準にします。
#いいねとリツイートを合算 day_df$fav_rt <- day_df$favorite_count + day_df$retweet_count #プロット ggplot(data = day_df, aes(x = day, y = fav_rt, group = 1)) + ggtitle("けものフレンズ公式アカウント いいね+リツイート数") + theme(plot.title = element_text(family = "HiraginoSans-W3", hjust = 0.5), axis.title = element_blank(), axis.text.x = element_text(family = "HiraginoSans-W3", size = 8), legend.text = element_text(family = "HiraginoSans-W3")) + geom_line() + scale_x_datetime(breaks = as.POSIXct(paste("2017-", 1:12, "-01", sep = "")), labels = paste(1:12, "月", sep = "")) + scale_y_continuous(labels = comma) #いいね+リツート数の多い日トップ5を算出 day_df$Freq <- tw_per_day$Freq head(day_df[order(day_df$fav_rt, decreasing = T), -1], 5) favorite_count retweet_count fav_rt Freq 2017-03-29 65440 61601 127041 4 2017-12-25 76554 49895 126449 3 2017-07-21 45296 53329 98625 3 2017-04-24 33692 48750 82442 2 2017-04-27 36986 42759 79745 4
僅差ではありますが最も「いいね+リツイート数」が多いのは3月29日でした。ただし、3月29日のツイート数は4、2位の12月25日のツイート数は3ですので、1ツイートあたりの平均では12月25日がトップになります。
トップ5のうち放送期間中(1〜3月)のツイートが1件しかないのも興味深いです。
それでは、3月29日や12月25日にどのようなツイートがされたのか見ていきます。
tl$fav_ret <- tl$favorite_count + tl$retweet_count #いいね+リツイート数の多いツイートトップ5を表示 tweets <- data.frame(tl[, c("favorite_count", "retweet_count", "fav_ret", "text")], row.names = as.character(tl$created_at)) head(tweets[order(tweets$fav_ret, decreasing = T), -4], 5) favorite_count retweet_count fav_ret 2017-12-25 00:00:21 68438 45488 113926 2017-07-21 15:01:22 42581 51385 93966 2017-04-07 17:00:24 30064 44505 74569 2017-04-24 10:05:39 26132 38002 64134 2017-03-29 02:18:57 35350 25957 61307
ツイート単位で最もいいね+リツイート数が大きいのは12月25日の「ようこそジャパリパーク」のクリスマスver.を告知するツイートです。
3月29日のツイートは最終回直後のものですね。
Merry Christmas!
— けものフレンズ@公式アカウント (@kemo_anime) December 24, 2017
ジャパリパークより愛を込めて#けものフレンズ pic.twitter.com/hlGdaz8j6f
けものフレンズ# 最終回ご視聴ありがとうございました。最後までたくさんの方に楽しんで頂けた事に、製作に関わった全てのスタッフ一同、厚く感謝を申し上げます。今後も長く愛される作品となれますよう、創意工夫を尽くし努力して参ります。これからも「けものフレンズ」をよろしくお願い致します。
— けものフレンズ@公式アカウント (@kemo_anime) March 28, 2017
JupyterでRを使おうとしたら詰まった話
すでに分かりやすい説明がいくつもありますが、自分の環境では詰まったのでまとめてみる。
環境
・OS:MacOS Sierra(10.12.6)
・R:3.4.2
・Jupyter:4.3.0
※pyenvでanaconda3-5.0.1をインストールして使用
参考
qiita.com
ターミナルでRを立ち上げ以下のコマンドを入力すれば良い、はずなのですが自分の場合は1行につき1回詰まりました。。。
> install.packages(c('repr', 'IRdisplay', 'evaluate', 'crayon', 'pbdZMQ', 'devtools', 'uuid', 'digest')) > devtools::install_github('IRkernel/IRkernel') > IRkernel::installspec()
まず1行目を入力すると
警告メッセージ: doTryCatch(return(expr), name, parentenv, handler) で: 共有ライブラリ '/Library/Frameworks/R.framework/Resources/modules//R_X11.so' を読み込めません: dlopen(/Library/Frameworks/R.framework/Resources/modules//R_X11.so, 6): Library not loaded: /opt/X11/lib/libSM.6.dylib Referenced from: /Library/Frameworks/R.framework/Resources/modules//R_X11.so Reason: image not found
どうやらX11がないと怒られているようです。
調べてみると以前のmacOSではX11が標準で入っていたようですが、現在は別途インストールする必要があるようです。
macos - Can't load X11 in R after OS X Yosemite upgrade - Stack Overflow
Mac 用の X11 について - Apple サポート
アップル公式サイトからダウンロードサイトへ移動してインストールします。
インストールすると「/opt/X11/lib/libSM.6.dylib」が生成され無事にパッケージのインストールはできました。
次に2行目のコマンドですが
> devtools::install_github('IRkernel/IRkernel') Skipping install of 'IRkernel' from a github remote, the SHA1 (dfa7f4ef) has not changed since last install. Use `force = TRUE` to force installation
`force = TRUE`と言われたのでとりあえずその通りに実行してみます。
> devtools::install_github('IRkernel/IRkernel', force = T) Downloading GitHub repo IRkernel/IRkernel@master (中略) *** installing help indices ** building package indices ** testing if installed package can be loaded * DONE (IRkernel) 警告メッセージ: GitHub repo contains submodules, may not function as expected!
警告メッセージは出たものの、一応インストールはできたようなので先に進んでみます。
> IRkernel::installspec() IRkernel::installspec() でエラー: jupyter-client has to be installed but “jupyter kernelspec --version” exited with code 127.
エラー文を検索してみてもよく分からない。。。
で、2時間くらい悩んだのですが、これは完全に私の不注意でした。
最初に書いたようにpyenvのanacondaでjupyterをインストールしていたのですが、実行環境がanacondaじゃなかった(笑)
anaconda環境でRを立ち上げて上記コマンドを実行し、ターミナルに戻って
$ jupyter notebook
これで新規ファイル作成時にRを選択できるようになりました。
Airmailで自動的にBCC送信
※App Storeより
今までは何となくoutlookを使っていたのですが、シンプルで見やすいUI(Mac標準のメーラーよりMacっぽい感じがします)とカスタマイズ性に惹かれて乗り換えてみました。
outlookでは「送信の際に自動で自分(任意のアドレス)をBCCに追加する」設定が簡単にできたのですが、同様の設定で少し詰まったので書き留めておこうと思います。
ネットでは該当しそうなページを見つけられなかったので、Airmailの公式HPにあるチャットで質問してみました(私の英語力でも通じた)。
Preferences > Accounts > [Account] まではいいとして「Composer」なんてあったかなあと思い確認してみてもそれっぽいタブはありません。
結論から言うと日本語表示での「エディタ」が「Composer」でした。
んー、これはさすがに「コンポーザー」か「構成」と訳すべきではないでしょうかね。どうりで自力では見つけられなかったはずだ。。。
「エディタ」タブの「送信済みメール」で「自動BCC」を選択し、その横に自分のアドレスを記載すると、自動で自分にBCCできるようになりました。
めでたし、めでたし。
*1:無料のbeta版と有料版がありますが機能の差はほとんどないようです。私もbeta版を利用していますが機能面で不満を感じたことはありません