投稿

ラベル(mfrow)が付いた投稿を表示しています

Rで、福岡市オープンデータサイトのCSVファイルを扱いやすいように加工する

イメージ
福岡市のオープンデータのサイト に「福岡市の大気環境測定結果(直近48時間)」というCSVデータが公開されています。 Rでこれを取り込みたいときは、 d <- read.csv("http://ckan.open-governmentdata.org/dataset/ef0a812c-538b-4e54-ae3e-b22022a7c83a/resource/c60ccc29-811d-44f8-9aba-dcb660387927/download/kankyodata48.csv") とするだけでOK。(URLが長くてごちゃごちゃしてますが、read.csvにダブルクォートで指定しているだけです) でも、中身を見てみると、いまいち使いにくそうなフォーマットなんですよね。 head(d)とやれば分かりますが、ちょっと列が多いので、列名だけ表示させてみます。 > colnames(d) [1] "年月日" "測定局名称" "測定項目名称" "緯度" [5] "経度" "単位" "測定値.1時." "測定値.2時." [9] "測定値.3時." "測定値.4時." "測定値.5時." "測定値.6時." [13] "測定値.7時." "測定値.8時." "測定値.9時." "測定値.10時." [17] "測定値.11時." "測定値.12時." "測定値.13時." "測定値.14時." [21] "測定値.15時." "測定値.16時." "測定値.17時." "測定値.18時." [25] "測定値.19時." "測定値.20...

Rの数式描画の中で変数を展開したいときはbquoteを使う

イメージ
ループを使って複数のグラフを描くような状況。 par ( mfrow= c ( 2 , 2 ) ) # 2行2列で作図する   for ( i in 1 : 4 ) { curve ( x^i , - 1 , 1 , asp= 1 , ylab= "y" ) } 複数のグラフを描いてみた(タイトルなし) グラフを区別するためにmainオプションでタイトルを付けましょう↓ par ( mfrow= c ( 2 , 2 ) )   for ( i in 1 : 4 ) { curve ( x^i , - 1 , 1 , asp= 1 , ylab= "y" , main= paste ( "y=x^" , i ) ) } タイトルをつけてみたが格好悪い う~ん、伝わりはするけど、"y=x^2"みたいな見た目が格好悪い。ちゃんと数式(数字の肩に指数が乗っている感じ)で表現したいですよね。 そういうときは、expression関数で、いけるかな・・・? par ( mfrow= c ( 2 , 2 ) )   for ( i in 1 : 4 ) { curve ( x^i , - 1 , 1 , asp= 1 , ylab= "y" , main= expression ( y==x^i ) ) } expressionだと変数iが展開されない ありゃ? 数式の形にはなりましたが、変数iが展開されずそのまま「i」と出ちゃいました。 やっと本題です。 このiを展開(i = 1, 2, 3, 4)したいときには、bquote関数が使えます↓ par ( mfrow= c ( 2 , 2 ) )   for ( i in 1 : 4 ) { curve ( x^i , - 1 , 1 , asp= 1 , ylab= "y" , main= bquote ( y==x^. ( i ) ) ) } ...

Rの箱ひげ図(boxplot)で外れ値を表示させない

イメージ
例えば17人のテストの点数のデータがあって、↓こんなだったとしましょう。 x <- c ( 40 , 45 , 50 , 55 , 60 , 62 , 63 , 64 , 65 , 66 , 67 , 68 , 70 , 75 , 80 , 85 , 90 ) そのまま、boxplotを使うと↓こんな感じになります。 boxplotの表示結果(外れ値扱い 有り) boxplot ( x ) で、   「この小っちゃい丸は何だ?」   「外れ値です」   「外すなよ」 みたいなこともあると思います。 外れ値と言っても、プロットされているわけだから情報が落ちているわけじゃないし、構わないような気もしますが、まあ、特別扱いしたくないって時もあるでしょう。 で、ヒゲをどこまで伸ばすかというのは、boxplot関数のrangeオプションで指定します。デフォルトだと、箱の長さの1.5倍までとなっております。 このrangeをめちゃくちゃ大きくしておけば、事実上、ヒゲは最大のデータ、最小のデータまで伸びることになりますが、そんなことしなくても、特別な値 0 を指定することで、最大・最小まで伸ばすことができます。 boxplotの表示結果(外れ値扱い 無し) boxplot ( x , range = 0 ) rangeの指定によって、ヒゲの長さがどう変化するか見てみましょう。 boxplotで外れ値扱いの範囲を変化させたもの(外れ値の表示 有り) par ( mfrow= c ( 1 , 4 ) ) stripchart ( x , vertical=T , pch= 1 , main= "散布図" ) boxplot ( x , range = 1 , main= "range=1" ) boxplot ( x , range = 1.5 , main= "range=1.5(デフォルト)" ) boxplot ( x , range = 2.0 , main= "range=2.0" ) 一番左のはデータを...

Rの複数グラフ表示でヒストグラムの適切な階級幅を見つける(par,mfrow,mfcol)

イメージ
ヒストグラムの階級幅をどれくらいにするか。小さすぎるとばらつきの影響が出てしまうし、大きすぎると意味が読み取りづらくなってしまいますよね。 パラメタを変えながら何度もhist関数を実行し、表示結果を目で見て判断というのが一般的でしょうか。 どうせなら、いっぺんに描画してまとめて比較しましょう、というやり方です。 # 正規分布に従う乱数を1000個 x <- rnorm ( 1000 )   # 表示領域を3行×2列に分割 par ( mfrow= c ( 3 , 2 ) )   # 階級幅の数を変えながら複数のヒストグラムを描画 for ( n in c ( 5 , 10 , 15 , 20 , 25 , 30 ) ) { hist ( x , breaks= seq ( min ( x ) , max ( x ) , length =n+ 1 ) , main= paste ( n , "分割" ) ) }   上記の表示結果だと、「20分割まで行っちゃうと単峰性が崩れるから、15分割くらいかな」みたいな感じでしょうか。 上記のように mf row =c(3,2) と指定すれば3行×2列を 行方向 に並べる、mf col =c(3,2) と指定すれば3行 ×2列を 列方向 に並べる、となります。 length = n +1 となっているのは、5個の階級に分けるためには、6個の境界が必要だからですね。 [蛇足] 関数名やパラメタ名を覚えるにはその語源を知るといいですよね。parはパラメタ(parameter)、rowは行(row)、colは列(column)というのはよさそうですが、mfが何の略だか分からない。「matrix figure」なんじゃないかと個人的には思っていますが、でたらめかも。コメントで教えてくれた人には10ガバスあげます。