tmapパッケージはしばらく更新がないらしい
先日tmap(version 1.11)の更新通知が来ていた。 たまたまNewsを確認したところ下記のような記載があり、 sfパッケージがspに置き換わるまでしばらく更新はなさそうである。
NOTE: this will be the last version before the major update (in which sf fully replaces sp)
issuesには現時点で25項目上がっているが、これらは今後解決していくのだろうか。
高速にggplotする
ここ(Accelerating ggplot2: use a canvas to speed up plots creation)にあるように、 ベースマップを作成しておくことで高速な描画が期待できる。
library(tidyverse) library(sf) nc <- read_sf(system.file("shape/nc.shp", package="sf")) nc_p <- st_sample(nc, size = 100) %>% st_sf() base_map <- ggplot(data=nc) + geom_sf() microbenchmark::microbenchmark( base_map + geom_sf(data = nc_p), ggplot(data=nc) + geom_sf() + geom_sf(data=nc_p) )
Unit: milliseconds expr min lq mean median uq max neval cld base_map + geom_sf(data = nc_p) 2.378383 2.499209 2.937826 2.576802 2.827515 24.75987 100 a ggplot(data = nc) + geom_sf() + geom_sf(data = nc_p) 4.982936 5.213071 5.761455 5.411302 6.064894 10.97817 100 b
行番号(名前)をデータフレームに追加する
これまではtibble::rowid_to_column()
を利用してきたが、この処理をもう少し早くする必要が出てきてしらべていたら、dplyr::add_rownames()の存在を知り、速度比較したらあやかったので今後はこれを使うことにする。
library(tidyverse) library(microbenchmark) library(data.table) iris_df <- iris %>% as.data.table() microbenchmark(iris %>% add_rownames(), iris %>% rownames_to_column(), iris_df %>% add_rownames(), iris %>% mutate(id = seq.int(nrow(.))))
Unit: milliseconds expr min lq mean median uq max neval cld iris %>% add_rownames() 1.218453 1.262064 1.416237 1.310582 1.368730 4.750718 100 a iris %>% rownames_to_column() 2.834875 2.919264 3.122361 2.996101 3.133352 5.571955 100 c iris_df %>% add_rownames() 1.384211 1.447833 1.556418 1.512777 1.599620 2.527902 100 a iris %>% mutate(id = seq.int(nrow(.))) 2.348928 2.415761 2.593333 2.479005 2.568303 5.112818 100 b
追記:
dplyr::add_rownames()
はduplicatedとなっており、代わりにtibble::rownames_to_column()
を利用せよというwarningが出てくる。
少し遅いがtibbleの関数を利用するほうが無難という結論。
グラフをつくる前に読む本
グラフをつくる前に読む本を読んだ。 献本されたというツイッターを多く見たので、読んでみた。
下記に示すグラフの種類についてどのような場合に・どのようなことを表現したいときに利用すべきかが書いてある。
- 棒グラフ
- 折れ線グラフ
- 円グラフ
- レーダーチャート
- ヒートマップ
- 散布図
- 積み上げグラフ
これまでにさまざまなグラフを見てきていると思うので、 自身の理解している(把握している)使い方と相違なければすらすらと読める。 ある意味当たり前のことが書かれている。ただし、自身のこれまで用いてきた使い方の再確認するという意味では一度読んでおいてよいと思う。
また、それぞれのグラフが用いられた起源について書かれており、どのような経緯でそれぞれのグラフで表現する必要性があり生まれたかが少しわかり面白いと思う。 また著者の方針ですべてのグラフにはオープンにされている実データを用いており、より分かりやすくなっていると思う。
ところどころに著者のデータに対する解釈が書かれており(その解釈が正しいかどうかは別として)、データの結果を単に示すことだけでなくそこからいかに考察しデータを読み解くことが重要であると考えさせられた。
利益が絡むと、よく見えるようにインチキ工夫しようと考えるが、
ぜひ本を読んでまじめなグラフづくりが行われるように願うばかりである。
RQGISを利用してみる
RQGISパッケージを利用することでQGISの関数を利用することができる。
インストール方法はvignetteにまとめられているので、そちらを参考に進めるとインストールできる。
ger <- raster::getData(name = "GADM", country = "DEU", level = 1)
library(sp) library(tidyverse) library(sf) library(RQGIS)
set_env()
Trying to find QGIS in C:/OSGEO4~1.
$root [1] "C:\\OSGeo4W64" $qgis_prefix_path [1] "C:\\OSGeo4W64\\apps\\qgis-ltr" $python_plugins [1] "C:\\OSGeo4W64\\apps\\qgis-ltr\\python\\plugins"
必要とするアルゴリズムを検索する場合にはfind_algoristhms()を利用する。 検索の際には正規表現を利用することができる。
find_algorithms(search_term = "(polygon)(centroid)")
[1] "Polygon centroids------------------------------------>qgis:polygoncentroids" [2] "Polygon centroids------------------------------------>saga:polygoncentroids"
find_algorithms(search_term = "(split)(line)")
[1] "Split lines with lines------------------------------->qgis:splitlineswithlines"
使い方を確認したい場合にはget_usage()を利用する。
get_usage(alg = "qgis:polygoncentroids")
ALGORITHM: Polygon centroids INPUT_LAYER <ParameterVector> OUTPUT_LAYER <OutputVector>
必要なパラメータを確認するにはget_args_man()を利用する。
params <- get_args_man(alg = "qgis:polygoncentroids") params
$INPUT_LAYER [1] "None" $OUTPUT_LAYER [1] "None"
params$INPUT_LAYER <- ger params$OUTPUT_LAYER <- file.path(tempdir(), "get_coords.shp") out <- run_qgis(alg = "qgis:polygoncentroids", INPUT_LAYER = ger, OUTPUT_LAYER = file.path(tempdir(), "ger_coords.shp"), load_output = T)
出力結果を確認する。qgis:polygoncentroid の場合はsfオブジェクトで結果が得られる。
class(out)
[1] "sf" "tbl_df" "tbl" "data.frame"
plot(ger) plot(out, add = T, col = "blue")
日本語を含むデータがある場合にはうまく実行できないので注意する必要がある。 実行できたとしてもデータフレームないの文字が文字化けしているので、データを確認すること。文字化けを回避する方法ご存知の方がいましたらコメントお願いいたします。
日本学生支援機構の奨学金
日本学生支援機構で初となる給付型奨学金に約2500人を採用されたそうである。
日本学生支援機構の奨学金の貸与者数について調べてみると、 平成26年の実績が公表されている。 月ごとに貸与者数に変動があるが、多い時で第一種で約45万人、第二種で85万人が貸与を受けている。 合計で130万人近くが日本学生支援機構の奨学金の貸与を受けている。
これに比べて今回の給付型に採用された人は貸与者数の0.2%である。 利子なしの第一種奨学金を借りたくても借りれない人が多くいると考えられる中、給付型の奨学金を借りることはかなり困難であると考えられる。
そもそも、第一種奨学金の貸与者数に比べて第二種奨学金の貸与者数は2倍近くある。 均等な教育機会の均等を確保されるために実施される国(公共)の事業なのに 利子をとる第二種奨学金の貸与者数が多すぎると思う。 そして、財務状況にて損益状況を勘定していることに違和感がある。 個別の法人にして収益を上げる必要があるのか。 民間の事業ではないのだから収益を上げるぐらいなら第一種奨学金の給付者を増やすべきではないかと思う。
詳しいことはわからないが、奨学金貸与事業の損益状況をみると、 事業収益として、学資金利息が378億円に対して、延滞金収入が41億円と10%近くもある。 民間事業ならそれで収益が出て万々歳なのだろうけど、公共事業でこういう状況ってどうなんでしょうかね。