脳卒中左片麻痺になりました

twitter http://twitter.com/#!/ti5942

2017年04月

Screenshot01

plot(x$`緯度(度)`,x$`気温(℃) `,col="cyan")

Screenshot01

メインタイトルやラベルを入れる


plot(x$`緯度(度)`,x$`気温(℃) `,col="cyan",main="緯度と気温の関係",xlab="緯度(度)",ylab="気温(℃)")
Screenshot01

列名がA,B,Cのときも同じで,むしろ入力しやすい
plot(x$B,x$C,col="cyan",main="緯度と気温の関係",xlab="緯度(度)",ylab="気温(℃)")

Screenshot01


ここで,グラフをPDFやPNG,JPEG等の画像にエクスポートして,文書に挿入してもかまわないが...
Screenshot01Screenshot02Screenshot02

以下のようにしてTikZコードでエクスポートできる.

library(tikzDevice)
tikz("tex/散布図0.tikz")
plot(x$B,x$C,col="cyan",main="緯度と気温の関係",xlab="緯度(度)",ylab="気温(℃)")
dev.off()

なお,engine="luatex" または "xetex" を付記することにより警告メッセージが変わる.
(engine="luatexのときは警告メッセージなしだった.)

また,QTikZで開くことで,内容が確認できる.
Screenshot01Screenshot02Screenshot03




いま,LyXのエンジンはupLaTeXなので,yラベルを縦書きにすることも容易である.
Screenshot01Screenshot02Screenshot03


さらに,表とグラフを横に並べてみた.
Screenshot01



マークは変えれるんだろか?

DSC_0010

まずテキストエディターで次のようにデータを入力する.

/home/ti5942/R/WD/data/sample.csv

Screenshot01

列名を最初から日本語でいれておいてもいいんだが...

一応,練習のためにA,B,Cとします.

ここで,RStudioを起動し,ワークディレクトリを/home/ti5942/R/に設定します.
Screenshot01Screenshot02

変数xにこのファイルの読み込みデータを代入します.

x <- read.csv("data/sample.csv")

xを表示する.

Screenshot01Screenshot02

xの列名を,地名,緯度(度),気温(℃)に変更する.

colnames(x) <- c("地名","緯度(度)","気温(℃)")

注意.lubuntuのRStudioでは日本語変換が効かないのでコピペする.
Screenshot01

変換してみる

library(xtable)
xtable(x)
Screenshot01

出力先をdata/tex/日本の都市の緯度と気温.texにして変換する

sink("tex/日本の都市の緯度と気温.tex")
xtable(x)
sink()

Screenshot01


LyXに入れて,タイプセットしてみる.

Screenshot01Screenshot02Screenshot03




今回の課題というのは,

「データ表とその散布図」
DSC_0010DSC_0011

前回の課題は「度数分布表とヒストグラム」
Screenshot01Screenshot02Screenshot03


とか
Screenshot01Screenshot02Screenshot03


「表」は「LyXの表」より「LaTeXの表」のほうが,扱いやすいので「LaTeXの表」を作成するのだけれども...

「LyXの表」→「LaTeXの表」 よりも Rのデータフレーム→「LaTeXの表」 のほうが自分の好みなので(^^ゞ

Rのデータフレームを作成してそれをxtable関数を使って「LaTeXの表」に変換します.


【散布図】については,例とヘルプを見てみると
Screenshot01Screenshot02Screenshot03

type
what type of plot should be drawn. Possible types are
"p" for points,
"l" for lines,
"b" for both,
"c" for the lines part alone of "b",
"o" for both ‘overplotted’,
"h" for ‘histogram’ like (or ‘high-density’) vertical lines,
"s" for stair steps,
"S" for other steps, see ‘Details’ below,
"n" for no plotting.

一方,TikZでは

Screenshot01Screenshot02Screenshot03




LyXで表を作ったんだが...
Screenshot01

なんか変(^_^;)

作り方が間違ってるかも...

よくわからないので,LaTeX 形式で作成してみよう!
Screenshot01

まずは,データ作成
今回はテキストエディタを使って作成しました.
Screenshot01

数値データにする必要があるので

x <- as.numeric(read.table("data/成績データ.txt"))

Screenshot01
これで(R上に)データ入力完了です.

ここから,手作業なら「度数分布表」→「ヒストグラム」なのですが,Rを使えば逆方向の「ヒストグラム」→「度数分布表」が可能です.

あっ...
R上の「ヒストグラム」の画像化→LyXに図で挿入

R上の「度数分布表」の画像化→LyXに図で挿入


もう一度テキストを確認
DSC_0009

  • データはあるクラス50名の試験の得点
  • 階級幅のとり方を10点として,...
  • 一番点数の低い階級は15点以上25点未満
  • 「95点」のデータは85点以上95点未満の階級


Screenshot01

データの個数は50個(length(x)=50)で最小値は15(min(x)=15),最大値は95(max=95)

Screenshot01

histのオプションで

階級の右側が「未満」ということより
right=False,
にする.
また,「95点」のデータは85点以上95点未満の階級で,階級幅が10点ということより
breaks=seq(15,95,10),
include.lowest=TRUE,(デフォルト)
であるから,
h <- hist(x,breaks=seq(15,95,10),right=FALSE)
とすると標準デバイスに出力される.

Screenshot01Screenshot02

柱の色を"cyan"(シアン)にして
Screenshot01Screenshot02

tikzデバイス(library(tikzDvice))を使えば,tikzコード化してファイルに出力できるのですが,これは後ほど...

まずは「度数分布表」から

ひとつの「データフレーム」を作成し,それを表示させるとそれがまさしく「表」になります.
Screenshot01


度数分布表 <- data.frame(以上=ijo,未満=miman,
+                      階級値=kaikyuti,度数=dosu,
+                      相対度数=paste(sdosu,"(",sprintf("%3d",sdosu*100),"%)")
Screenshot02

この表をLaTeXコードに変換するには
Screenshot01Screenshot02

’’’
library(xtable)
print(xtable(度数分布表))
’’’
これで,変換されたLaTeXコードが画面(コンソール)に表示されます.
sink("指定ファイル") は出力先をコンソールから指定ファイルにする関数で,指定しなければ(sink())出力先はコンソールになります.

また,グラフをグラフ描画画面からTikZコード化して,指定ファイルに出力するスクリプトが
'''
library(tikzDevice)
tikz("tex/hist.tex",3,3)

hist(x,breaks=seq(15,95,10),right=F,col="cyan")
dev.off()
'''
LyXにおいて,
TeXコードで
\input{指定ファイル}
とすることにより,取り込むことができます.
Screenshot01Screenshot02Screenshot03

さらに,簡単な修正により,度数分布表とヒストグラムを並べて表示したり,ヒストグラムのラベルを日本語にしたり,縦書きにしたりできます.

Screenshot01



課題:
IMG_20170422_040748

Rでデータフレームを作成します

参考:
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/39.html

Screenshot01Screenshot02Screenshot03



plot(x$緯度,x$気温,col="cyan",type="p")

これで散布図は作成されます.
Screenshot01

でも,なんか物足りない...

そこで,CSVファイルに出力し,Gnumericで開きます.

write.csv(x,"日本の都市の緯度と気温.csv")
Screenshot01

データは表計算Gnumericで入力したほうがやりやすいかもしれない...

ここからグラフ(散布図)を描いてみよう!
Screenshot01

LaTeX+TikZ ではどうだろうか?
まずは,表から.


まずは,データ入力で,以下の方法が考えられる.
  1. 直接入力
  2. テキストファイルを使う
  3. 表計算ソフトを使う

とりあえず,「1.直接入力」でやってみよう.


IMG_20170415_182459


データの個数は50個.だけど,一気に入力するとチェックが大変なので,3つ(x1,x2,x3)に入力およびチェックして,それらをひとつ(x1にx2を追加したものをxとし,それ(x)にx3を追加する)にまとめる方法をとる.


x1 <- c(data01,...,data17) データ数17

x2 <- c(data18,...,data24) データ数17

x3 <- c(data25,...,data50) データ数16


x <- append(x1,x2)

x <- append(x,x3) データ数50


Screenshot01
これでデータは用意できました.


ここで,まずデフォルトでヒストグラムを描き,そこから度数分布表を出してみる.

Screenshot01Screenshot02
「度数分布表」は

Rで度数分布表を作る

より

Screenshot01Screenshot02


幹葉図を描くために,xをソートする.


Screenshot01



【幹葉図】


10〜20    15 18 20 (3)

20〜30    23 25 25 30 (4)

30〜40    35 40 40 (3)

40〜50    45 45 46 46 48 50 50 50 (8)

50〜60    55 55 56 57 58 60 60 60 (8)

60〜70    62 62 63 63 65 65 65 67 67 70 70 70 (12)

70〜80    75 75 75 78 78 78 79 79 80 (8)

80〜90    85 90 (2)

90〜100  95 (1)


オプションright=Fをつけてみる.


Screenshot01Screenshot02

【幹葉図】


10〜20    15 18

20〜30    20 23 25 25

30〜40    30 35

40〜50    40 40 45 45 46 46 48

50〜60    50 50 50 55 55 56 57 58

60〜70    60 60 60 62 62 63 63 65 65 65 67 67

70〜80    70 70 70 75 75 75 78 78 78 79 79

80〜90    80 85

90〜100  90 95



・階級を15〜95で10点刻みにする.(right=T)


Screenshot01Screenshot02

【幹葉図】


15〜25    15 18 20 23 25 25?

25〜35    30 35

35〜45    40 40 45 45

45〜55    46 46 48 50 50 50 55 55

55〜65    56 57 58 60 60 60 62 62 63 63 65 65 65

65〜75    67 67 70 70 70 75 75 75

75〜85    78 78 78 79 79 80 85

85〜95    90 95




・階級を15〜95で10点刻みにする.right=F


Screenshot01Screenshot02

【幹葉図】


15〜25    15 18 20 23

25〜35    25 25 30

35〜45    35 40 40 

45〜55    45 45 46 46 48 50 50 50 

55〜65    55 55 56 57 58 60 60 60 62 62 63 63

65〜75    65 65 65 67 67 70 70 70

75〜85    75 75 75 78 78 78 79 79 80

85〜95    85 90 95?


【補足1】

・階級を15〜95で10点刻みにする.right=F, include.lowest=Fとするとエラーになる


Screenshot01


データ95が入らなくなるからなあ.


【補足2】

・階級を15〜105で10点刻みにする.right=F

Screenshot01Screenshot02

【幹葉図】


15〜25    15 18 20 23

25〜35    25 25 30

35〜45    35 40 40 

45〜55    45 45 46 46 48 50 50 50 

55〜65    55 55 56 57 58 60 60 60 62 62 63 63

65〜75    65 65 65 67 67 70 70 70

75〜85    75 75 75 78 78 78 79 79 80

85〜95    85 90

95〜105  95



DSC_0007

Screenshot01Screenshot02Screenshot03





breaks=seq(15,95,by=10)

は,

breaks=c(15,25,35,45,55,65,75,85,95)


と書いても同じ.



「75点以上85点未満」「85点以上95点未満」の2つの階数を合わせて「75点以上95点未満」にするには,このbreaksの「85,」を削除し,

breaks=c(15,25,35,45,55,65,75,95)

とすればよい.


Screenshot01Screenshot02
これでいいのかなあ?





また,表において

library()xtable

print(xtable(frequency_table))
で,TeXコード化して利用してもよい.


Screenshot01Screenshot01Screenshot02



QTikZを使ってイメージ化してもよい.
Screenshot01Screenshot02


統計:度数分布表とヒストグラム
IMG_20170415_182459IMG_20170415_182525

教科書では手作業で作成する方法が示されている.
RとGnumericを利用して作成してみよう.

データ入力は,手作業でするしかなく,テキストファイルで編集してから取り込むか,直接入力するかですが...
とりあえず,直接データ入力でいきます.


まずは,Rから.
これは, Rで度数分布表を作る - Rプログラミングの小ネタ を参考にすればよい.

データ入力方法は
IMG_20170415_182459Screenshot01







画像を見ながら,3行x1,x2,x3を入力し,x <- append(append(x1,x2),x3) としました.
?hist
Screenshot01Screenshot02

ヒストグラムを描いてみる
1.hist(x,breaks=seq(15,95,10),right=F,col="cyan")
Screenshot01

2.hist(x,breaks=c(15,25,35,45,55,65,75,85,95),right=F,col="cyan")
Screenshot01

3.「75点以上85点未満」「85点以上95点未満」を合わせて「75点以上95点未満」とした場合
 hist(x,breaks=c(15,25,35,45,55,65,75,95),right=F,col="cyan")

Screenshot01


度数分布表(10点刻み)
hist(x,breaks=seq(15,95,10),right=F,col="cyan")

Screenshot01Screenshot01




このページのトップヘ