ラベル R の投稿を表示しています。 すべての投稿を表示
ラベル R の投稿を表示しています。 すべての投稿を表示

2023-10-19

Tidyverseのggplot2による複数系列の折れ線グラフ

以前よりRを利用してデータのグラフ化を行っていました。僕はMicrosoftのOffice製品を持っていないので、Excelがあれば簡単に作れてしまうようなグラフでも、何か他の方法で行わなければなりません。Microsoft Officeは持っていませんが、LibreOfficeなら利用しているので、Calcを使えばExcelと同様なグラフは描けそうです。しかしExcelやCalcのようなWYSIWYG的アプローチは、ちょっと試してみる程度なら簡単で便利ですが、定期的に同じような作業を繰り返す場合には、かえって手間がかかると思っています。

 

そこで、Rを利用してCSVからグラフを生成することにしています。ただしRの利用に慣れていないので、Webで事例を探しつつ手探りでスクリプトを組んでいるので、ロジックの見通しが悪いし、簡単に出来ることを、わざわざ複雑に処理しているようか感覚が抜けきれませんでした。一昨年に放送大学で「Rで学ぶ確率統計('21)」を受講しました。そこで「Tidyverse」というものの存在を知り、従来のRとは違いがあり、便利そうではあるものの、完璧に理解するには至りませんでした。

 

最近になって再びCSVからグラフを描く必要がでてきました。従来から慣れている方法でもグラフは描けそうですが、これを機会に改めてTidyverseを理解してみることにしました。特に、ggplot2を使えば、従来の方法よりもグラフが統一的な方法で描けそうです。


まずは、単純な折れ線グラフを描く練習をしてみて、Tidyverseやggplot2の使い方に慣れてみました。よく理解できたとは言えませんが、グラフを描くのに最低限必要な点は理解したと思います。


次に、同一グラフ内に複数の折れ線グラフを描く場合、ggplot2では如何に処理するのか調べました。ggplot2を使えば、同一グラフに折れ線グラフを追加していく事はできるようです。試してみたら、確かに出来ました。しかし折れ線グラフを追加するたびに関数「geom_line()」が増えていくので、ロジックがスッキリしません。しかも折れ線グラフを数本追加するくらいなら、力業でなんとかできるかもしれませんが、何十本も追加するとしたら(やれば出来るかもしれませんが)やっていられません。


僕が悩んでいるような事柄はFAQだろうと思ったのですが、Webを検索しても解決策が見つかりません。もしかすると検索キーワードが悪いのかもしれませんが、適切な検索キーワードが与えられるということは、ほぼ正解を知っているという事なので、何もわからない場合は検索キーワードすら思いつかないのです。そうこうしているうちに、次のようなWeb記事に辿りつきました。

 

ここで後者の記事の中に以下のような事が書かれていました。サラッと書いてありますが、これが僕の求めていた情報でした。

今のwide形式のデータだとグラフを作りづらいので、long形式に変換したいと思います。「tidyr」という便利パッケージの「gather」関数を使ってみました。

 

ここで言及されている関数「gather()」は、答えを求めて闇雲にWebで検索を繰り返していた際にも見かけたような気がしますが、その際には関係ないと思って、読み飛ばしていました。

 

試行錯誤を繰り返しましたが、これでCSVから複数系列の折れ線グラフを描くことが出来そうです。

2021-09-11

ASTEC-X 8.1でFreeBSDのRStudio

つい先日、FreeBSD/amd64上のRStudioを、Windows10上のASTEC-X 8.0で使おうとして、残念ながら失敗しました。何が悪いのか分かりませんでしたが、ASTEC-X 8.0というのは2012年12月19日にリリースされたものなので、最新のXクライアントに対応できなかったのかもしれません。


ところが2021年9月10日にASTEC-X 8.1がリリースされ、アップデートキットも提供されたので、更新して、再度RStudioを動かしてみました。ASTEC-X 8.0の頃とはエラーの出方が変わりましたが、やはり駄目でした。


qt.qpa.xcb: X server does not support XInput 2

qt.qpa.xcb: XKeyboard extension not present on the X server

WARNING: Application calling GLX 1.3 function "glXCreatePbuffer" when GLX 1.3 is not supported!  This is an application bug!

[78137:19316736:0910/203957.135850:ERROR:gl_surface_glx_qt.cpp(141)] GLX 1.3 or later is required.

[78137:19316736:0910/203957.135873:ERROR:gl_ozone_glx_qt.cpp(57)] GLSurfaceGLXQt::InitializeOneOff failed.

セグメンテーション違反 (core dumped)


Webを検索すると、FreeBSD上でRStudioを動作させている事例もあるようです。動くものであれば、動かせるようにしたいと思うのですが、何から手を付けたら良いのか、わかりません。

2021-09-02

RStudio

放送大学教養学部の第2学期が2021年10月から始まりますが、「Rで学ぶ確率統計('21)」を受講してみることにしました。放送大学では数年前から「オンライン授業」という形態が登場しており、従来からある「放送授業」に比べて、いろいろとやり方が異なっています。印刷教材(放送大学では教科書のことを印刷教材と呼んでいます)も提供されないので、何か参考資料をWeb上か一般書籍で手元に置こうと考えています。


この授業ではRを使用する環境としてRStudioを使うようです。これまでFreeBSD/amd64上でRを使っていたので、RStudioを使わなくても何とかなるかもしれないとは考えましたが、とりあえずRStudioの環境を準備だけしておこうと思いました。調べてみるとFreeBSDのportsにはRStudioがあったので、これを使えば良いのではないかと考えました。ただしFreeBSD/amd64ではGUI環境が使えないのですが、Windows10上でASTEC-Xが使えるので、何とかなるのではないかと思いました。


FreeBSD/amd64にRStudioを入れるのは簡単だったのですが、XクライアントをWindows10上のASTEC-Xに出そうとしたら、エラーになってしまいました。

qt.qpa.xcb: X server does not support XInput 2

*snip*

The X11 connection broke: Maximum allowed requested length exceeded (code 4)

XIO:  fatal IO error 2 (そのようなファイルまたはディレクトリはありません) on X server "192.168.1.31:0"

      after 254 requests (249 known processed) with 0 events remaining.


ASTEC-X 8.0が出たのは2012年12月19日だし旧いのかもしれません。FreeBSD/amd64上のRStudioをWindows10上のASTEC-Xに出すのは、うまくいきそうにありません。


放送大学の授業を受けるためには、Windows10上でRStudioの環境を作って対応しようと思います。それとは別に、FreeBSD上のRStudioをWindows10上のASTEC-Xに出せるようにする方法を模索しようと思います。

2020-03-19

Rで移動平均

大量のデータ(100万件強)を可視化するためにRを使ってグラフを描いてみました。データ量が多すぎるので、グラフが真っ黒になってしまい、データの傾向が掴めません。この問題を解決する方法を考えていて、移動平均を求めてからグラフにしてみようと考えました。

Rでは標準で移動平均を求める方法がないという情報もあります。「標準で」という意味を考える必要はありますが、パッケージを使えば移動平均を求められるようです。そのパッケージも複数あるようです。
  1. Rで移動平均
  2. R で移動平均
  3. 移動平均(rolling mean / moving mean)の計算方法
  4. Rで移動平均を求める

各パッケージを試したわけではありません。偶々使ってみたのが「TTR」というパッケージでした。以下のような使い方で、簡単に利用できたので助かりました。ここでは64点の移動平均をとってみました。

A <- read.csv(データファイル) 
X <- A$V1
Y <- A$V2
library(TTR)
Z <- SMA(X, 64)
plot(X, Z)

2017-10-14

Rにおいてread.csv()を使う場合のTips

LibreOffice Calcを使って入力した情報をグラフ化する場合にRを利用しています。グラフ化する機能はCalcにもあるのですが、WYSIWYG的な操作方法が好きになれないのでRを使っています。入力したシートをUTF-8エンコーディングのCSVでファイルに出力し、そのファイルをRで読み込んでグラフ化します。

RでCSVファイルを読み込むにはread.csv()を使います。いろいろとオプションが用意されていますが、簡単に使ってみるには以下のようにします。
foo <- read.csv("foo.csv")

こんな感じで今まで使用していたのですが、問題が発生しました。
  1. 1行目にはヘッダ情報として各列の項目名が日本語で指定されていたのですが、 文字化けしてしまう。
  2. 各列の項目名をグラフ化した時にlegend()で使おうとしたら、うまく扱えない。

まず1番目の問題は、CSVを読み込むときにファイルエンコーディングを指定する必要があるようです。「RのUTF-8で漢字などが入っている場合read.tableができない」という情報が役に立ちました。要するに「encoding="UTF-8"」を明示的に指定しておきます。

2番目の問題は「stringsAsFactors=F」を指定すれば良いようです。これは「Factor型になってしまいがちな文字列型のデータフレームの列を戻す」を参考にしました。

これらのオプションを指定することで意図していたようにCSVファイルを読み、グラフを出せました。