2011年4月29日金曜日

鍵交換-1

べき乗演算

任意の整数abおよび1より大きい自然数nに対して、a^bをnで割った余りを求めることを、nを法にしたべき乗演算という。

この時

a^b≡r(mod n)

が成立する。

 

b=b1+b2+b3------bmと分解されるとき

a^b1≡r1(mod n)

a^b2≡r2(mod n)

a^b3≡r3(mod n)

a^b4≡r4(mod n)

・・・・

a^bm≡rm(mod n)

であったりしたら、

a^b=a^b1*a^b2・・・・・・・a^bm≡r1*r2*r3・・・rm(mod n)

 

b=b1*b2*********bmと分解されるときは

a^b1≡r1(mod n)

a^b2≡r2(mod n)

a^b3≡r3(mod n)

・・・・

a^bk≡rk(mod n)

であったりしたら、

a^b=((((------((a^b1)^b2)-----))))^bm≡rm(mod n)

ex.

7^1000≡1^(1+1+++++++1)≡1(mod 6)

 

さらに整数bを

b=bm*2^m + bm-1^m-1 +++++++ b1*2^1

=(bm,bm-1,,,,,,,b1,b0),∀bi,∈{0,1}

↑さすがにカッコをつけようと思ったが・・・まあ、自分がわかれば大丈夫だ、問題ない。

と2進数表記した場合について、b1=1であるすべてのiに対して

a^2^i≡r1(mod n)

を予め計算しておけば、これを用いて以下のように計算できる。

a^b=(a^2^n)^bn * (a^2^n-1)bn-1 *********(a2^2^1)^b1*a^b0

≡rn*rn-1*****r1 * a^b0(mod n)

 

ex.

8^103(mod 13)=8^12^8 * 8^7

≡8^7(mod 13) = 8^3^2*8

≡5^2 * 8(mod 13) ≡ 5(mod 13)

 

101^659(mod 1237)

659=(1010010011)と2進数表記できることから

101^2^9≡750(mod 1237)

101^2^7≡750(mod 1237)

101^2^4≡750(mod 1237)

101^2≡750(mod 1237)

が得られる。したがって以下のように計算できる。

101^659=(101^2^9)(101^2^7)(101^2^4)(101^2)101

≡750*991*683*305*101(mod 1237)

≡90(mod 1237)

 

離散対数問題と鍵暗号

Gを位数|G|が有限な巡回群とする。この時、与えられたGの生成元gとh∈Gに対して、g^x=hとなる整数xの事をgをそこにするhの離散対数といい、上記の問題を離散対数問題という。

現在においてはい数が300桁(1024ビット)以上であれば、効率的にとくことは難しいとされている。

有限体Fqの加法単位元0以外の元からなる集合Fq*は乗法にかんしても巡回群となることが知られている。

送信者と受信者が共通の秘密鍵を用いて乗法のやりとりをする場合、予め送信者と受信者が同じ鍵を共有しておく必要がある。

そのために、盗聴の可能性がある危険な通信路において、両者が安全に共通鍵をやり取りする方法について考える。

Ka:Aが定めた整数(乱数)、Aが秘密情報として保持(秘密鍵)

Kb:Bが定めた整数(乱数)、Bが秘密情報として保持(秘密鍵)

g^Ka≡ca(mod p):Aが送信する情報(公開鍵)

g^Kb≡cb(mod p):Bが送信する情報(公開鍵)

この時、次の手順により各々が共通鍵を取得することが出来る。

1) Aは秘密鍵KaとBの公開鍵g^Kbを用いて

cb^Kb≡g^Kb^Ka≡g^KaKb≡Kab(mod p)

2) Bは秘密鍵KbとAの公開鍵g^Kaを用いて

ca^Ka≡g^Ka^Kb≡g^KaKb≡kab(mod p)

を計算する

3)1.2で求めたKabを共通鍵として各々が保持。

 

ここで、例えば盗聴者イブが共通鍵Kabを得るために、Aの公開鍵Caから、秘密鍵Kaを求めようとする場合について考えてみよう。結局このような目的を達成するには。

g^Ka≡ca(mod p)

を満たす整数Kaを求めることになるので、これは情報に関する巡回群Zp*上における離散対数門d内をとくことに他ならないことが分かる。

故にDiffie-Hell,am鍵共有(鍵交換)の安全性は離散対数問題の困難さに基づいていることが分かる。

 

現在のところ、安全性を確保するためには、離散対数問題と対応させて、300桁以上の素数pを用意する必要があるとされている。

Image159

Excelで作ったモデル、p=11wwww



基礎数理

最大公約数+拡張ユークリッド・アルゴリズム

a=b*m+r

r=0⇔(def)b|a

 

最大公約数gcd(a,b) or (a,b)

(a,b) == 1 ⇔ 互いに素

 

ユークリッド互除法

ユークリッド互除法-wiki

アルゴリズム

入力を m, n (mn) とする。

  1. n = 0 なら、 m を出力してアルゴリズムを終了する。
  2. nm を割り切るなら、 n を出力してアルゴリズムを終了する。
  3. mn で割った余りを新たに n とし、更に 元のnを新たにm とし 3. に戻る。

上記の手順は「n, m に対して剰余の演算を行うことができる」という仮定だけに依っているので、整数環だけではなく任意のユークリッド整域においても同様にして最大公約因子を求めることができる。

(問題) 1071 と 1029 の最大公約数を求める。

  • 1071 を 1029 で割った余りは 42
  • 1029 を 42 で割った余りは 21
  • 42 を 21 で割った余りは 0

よって、最大公約数は21である。

 

てな説明よりも、実際に組んでみるヨロシ。

function euclidean([int]$m, [int]$n){
    if($m -lt $n){
        $a = $m
        $m = $n
        $n = $a
    }
    while($b -! 0){
        if($m%$n -eq 0){
            return $n
        }
        $a = $n
        $n = $m%$n
        $m = $a
    }
}


eucli.ps1

Image155

 

今回はPowerShellで書いてみました。

ちなみに、はじめてPowerShellでスクリプトを走らせるときにはすこおし設定が必要です。

PowerShellスクリプトの実行セキュリティ・ポリシーを変更する

Image153

やたら横になげえダイアログウインドウで肺を洗濯するとでmatu。

 

定理

2つの整数abに対してd=(a,b)→∃x,y|d=ax+by

このようなxyは一意には決まらん。

なんか経過は良く解らんが・・・

(a,b)を求めるのと同時に与式を満たすx,yも求まるんだと、

これを拡張ユークリッド・アルゴリズムという

と、よくわからんかったが、ここが分かりやすい。

拡張ユークリッド互除法

>拡張ユークリッドの互除法は,不定方程式の解を与えます。例として,不定方程式

>1004*x+1001*y=1

>を解きましょう。 ここで不定方程式とは上の等式を解として整数 (x,y) を考えるものです。またこれを解くとは上の等式を満たす>整数(x, y) のすべての組を求めるものです。

---------------------------------

>拡張ユークリッドの互除法は,整数の合同における逆元を計算します。例として,合同式

>12357 * x ≡ 102 mod 100102

>を解いてみましょう。この合同式を解くとは,x を 12357 倍して,100102 で割ったときの余りが 102 となる整数 x をすべて>求めることです。

 

合同式とフェルマーの小定理

合同⇔def 整数a,bに対してa-bが1よりも大きい自然数nで割り切れるとき、abはnを法として合同であるという

a≡b(mod n)

ex.79≡25(mod 3) ・・・ 79 ? 25 = 54 = 3*18

 

nを1より大きい自然数としたとき、1からn-1までの自然数の中でnと互いに素である数の個数をΦ(n)と表す:オイラー関数

ex.Φ(12)・・・5,7,9,11・・・=4

 

オイラーの定理

素数pに対して

n=p1^e1 * p2^e2 *・・・・* pk^ekとするちょきグーパー

Φ(n) = n(1-1/p1)(1-1/p2)・・・・(1-pk)

=p1^(e1-1) * p2^(e2-1)・・・・ * pk^(ek-1)*(p1-1)(p2-1)・・・(pk-1)

ex.60=2^2 * 3 * 5

Φ(60) = 2^(2-1) * 3^(1-1) * 5^(1-1) * (2-1)(3-1)(5-1)

=2^1*1*1 * 1*2*4 = 16

 

定理

1より大きい自然数nに対して、整数aとnが互いに素であるなら

a^Φ(n) ≡ 1(mod n)

 

こいつを利用すると・・・

7^Φ(60) = 7^16 ≡ 1(mod 60)

 

フェルマーの小定理

特にnが素数の場合・・・aで割れない整数aに対して、以下の合同式が成立

a^(n-1) ≡ 1(mod n)

 

これが暗号となんの関係がとの説明は以下が詳しい

べき乗剰余演算とフェルマーの小定理

てかbcて言語は俺のような使い方をする人間には扱い易そうな言語だな。

導入を検討しよう。

 

有限体

ある演算#が定義された集合Gに対して、以下の小売を満たすとき、Gと演算#の組(G,#)を代数系という。

 

def

代数系が以下の3つの小売を満たすとき、(G、#)あるいは単純にGを群という

1.任意の元abc∈Gに対して(a#b)#c=a#(b#c)

2.任意の元a∈Gに対してe#a=a#e=aなる元e∈Gが存在スルー

3.任意の元a∈Gに対してx#a=a#x=eなる元x∈Gが存在する

eを単位元という。xを逆元という

 

群Gに対して、集合Gの元の個数をこの群の位数といい|G|で表す。

こいつが有限なら有限GUN

#が加法+のときは加法GUN、乗法*の時は乗法群

 

任意の元ab∈Gにたいして、交換速が成立するような群を特に可換群、アベール群(オケツ・テロテロ群)という。

ex.

複素数全体C、実数全体R、整数全体Zは通常加算演算+に対して可換群

 

a^m=a*a*-------*a さらにa^-m=a^-1*--------a^-1

とし、a^0=eとする。

また、a^m=eとなる最小の自然数mを元aの位数という。

群の位数と元の位数

↑フォント綺麗、てか全体的にきれいなページですぅ

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄V ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

526F7A656E204D616964656E2028BFE9C0B1C0D029_123e9b5fb10b_2

群(G,#)において、任意の元a∈Gを用いて

G={g^m:m∈Z}

で表されるときGを巡回群といいgをGの生成元という。

巡回群

 

def

2つの演算が定義された集合Rに関して、(R,+,#)が各演算に対して代数系であり、次の4つの公理を満たすとき(R,+,#)あるいは、単にRを環という。

1.(R,+)は可換群

2.任意の元abc∈Rに対して(a#b)#c=a#(b#c)

3.任意の元abc∈Rに対してa#(b#c)=a#b+a#cおよび(b+c)#a=b#a+c#a

4.乗法に関する単位元1が存在する

 

乗法に関して可換

ab∈Rに対してab=baが成立するとき可換環という。

 

[r]={an+r:m∈Z}={b∈Z:b≡r(mod n)}

この集合[r]をnを法にした整数の剰余類という

代表元

Zn={0,1,2-------,n-1}

を各代表元の集合とする。任意の元ab∈Znに対して、a+bをnで割ったあまりをcとし、a*bをnで割った余りをdとしたとき

a+b≡c(mod n)及び a*b≡d(mod n)

特にこの環をnを法とする整数剰余環という。cf剰余表

剰余環と剰余体

 

なんかだるくなってきたのでココマデ



ブリーフィング

秘密の文章の文字列との組を規則にしたがって文字に置き換えるという方法が取られた

└ 古典暗号

cf.踊る人形、HAL

 

1976 Diffie/Hellman等によって公開鍵配送の発案

→暗号界隈の大きな前進

 

DH鍵共有、RSA暗号、エルガマル暗号 ∈ 公開鍵暗号

 

デジタル署名

 

ハッシュ関数、ゼロ知識証明

 

共通鍵暗号

 

暗号を学ぶ上での基礎知識

├ 余剰演算・冪乗演算

├ ユークリッド・アルゴリズム ・・・ 最大公約数

└ 拡張ユークリッド・アルゴリズ ・・・ 逆元

 

Diffie-Hellman鍵交換 - 楕円曲線

RSA暗号 - 素数の選定方法

エルガマル暗号 - 離散対数問題、計算困難性

ハッシュ関数 - SHA-256

共通鍵暗号 - AES

メッセージ認証コード - 擬似ランダム関数、ユニバーサルハッシュ関数

ゼロ知識証明 - 電子投票、電子送金

TLS、S/MIME、WPA

公開鍵暗号基盤:PKI

電子認証基板、電子認証局、電子証明書、電子署名法

第三者適合評価制度、人間工学



今期のアニメ総評

今んとこ見ているアニメ

・神の味噌汁

・日常

・シュタゲ

・いろは

・変ゼミ

・その他子供向けアニメ

 

>> 味噌汁

全体的に良い、てか俺が1期の汐宮タン好きなだけな話だが。

OPよい、EDよい。CD発売がマジで待ち遠しいですな。

ハクアも可愛いね。可愛かったんだけど、ハクア登場の回の、なんていうかの芝居臭さは否めない。

そいつだけチョット残念だが、今後に期待だな。

OPでのハクアの可愛さは異常なんだけどね。

EDもいいね、1期のコイノシルシの全員分のキャラソンもよかた。

基本的にハズレ無しだが、やはり1期に比べると相対的に勢いが足りない。

 

>>日常

最近見始めた。が早速切ろうと考えている。

OPはかなり良作。「恋に落ちたのだな」の部分の女の子の可愛さは引き立っている。

前評判的にギャグマンガ日和的なノリかと思いきや、どうもひとつ突き抜けられていない感が強い。

京アニだからってことじゃなくて、これは原作側の問題だね。もっと言ってしまえば好みの問題だ。

らき☆すたとかケイオン!が好きなやつには多分もってこい。俺はそれも途中で切ったから。

結局は好みの問題だということだ。

 

>>シュタゲ

デュフフ、マジパネエ、ウェウェウェwwwwwww

的ないわゆるネットスラングがかなり耳につく

スパイスになればいいんだけどね、ああいうのはネットの中(内輪)だから気楽でいいし、たまに面白い。

というか、今のネットでは普通、使わないよ、ああいう言葉。まあ、製作者も分かってるだろうけどね。

OPは禿逸。素晴らしい、OP詐欺と言っても過言ではないほど出来は良い。EDはフツー。

内容は・・・原作も結構アレだからね。

つまりだ、ヱヴァン〇〇ヲンの最終回を分かったふりをして楽しめる人間にはもってこいのアレ。

特に特殊な背景もないくせに、チョットああいうふうにすれば、なんか勝手に読者・視聴者側が暴走してくれるよね(ヒグ●シの作者的な言葉で)、的なアレな要素も結構あるが、それでもまだエンタメの領域は超えていないって感じかな?ヱヴァンゲ〇〇ンはエンタメの領域を越えている。てかぶっきらぼうにいうと・・・ツマラン。アレ無しで使徒全部コンプで最終回で良かったんじゃねえのアレ?w

けど、こいつは多分切らない。最後まで見て原作プレイするか判断する。

期待してるぜい。

 

>>いろは

面白い、OP・EDは特筆すべき点はないが、面白い。

ストーリは(・∀・)イイ!!基本的によく言われるのがNHKの朝のテレビ小説風、うん!確かにそれは言えてると思う。

それを毛嫌いしている人もいるらしいから、言ってしまえばああいうのがダメな人には多分つまんない作品なんだと思う。

非常に濃いキャラを最初の回で紹介、主人公の近寄り難いような純粋さ(てか単に馬●)、そしてお約束のちょっとした色気シーン。

完全に製作者は狙ってるだろ的なNHK連ドラ的展開!

安心して見れる一作ですな。これは前々から期待してた良作。

 

>>変ゼミ

あ~、なんつうか、先輩レベルマジぱねえっす的な作品。

皮とかマジ勘弁。面白いけど・・・ウッシッシー

 

>>その他子供向け

ポケモンのOP・EDはかなり心に響く良曲だなあ。

疲れているときに聴くとグッと来る。

子供のころって本当に純粋に純粋だったんだなぁと感じる良曲。

上が再生、てか反映されていないとき用

ED

このポケモンなのだが、普通に可愛い女の子が出てくるんだよね。

で、休日に弟がいている録画を一緒に見ながら「この娘名前なんつうの?」て聞いてる。

弟は露骨に嫌な顔をしながら、が教えてくれるんだな。

で俺は自分の部屋に戻ってPCでその女の子の画像検索ですよ。

Image149

いま、さがそうと思って火狐を立ち上げたものの名前が浮かんでこない。

で、これが検索結果。この検索ワードを思いつく俺も大概なのかもしれないが、g00g13先生は流石だ。

とっても屈託なく、明るくて

とってもスイーツ()で

その明るさ(天真爛漫過ぎ)故に周りを呆れさせるほど。可愛いよベル可愛いよ。ハァハァ

(リアルでこんな女がいたら、1.避ける 2.避けようがないときは理性のリミッターを外してぶん殴る)

そんな天真爛漫で実に女の子らしいベルが・・・

颯爽と登場した俺に「だめじゃないか、ガミガミ」と説教みたいなことをされショボーンとする(妄想です)。

この妄想は実にいい。誰か薄い本にしてくれw(ニン〇〇ドーに告訴されない程度に)

 

このベルにはもうひとつの特徴が・・・画像から察してください。

 

ドラえもんのOPもいいね。


ドラえもん新オープニング曲 投稿者 yoshikazux64

 


ドラえもんOP 09ver 投稿者 yoshikazux64

 

これは製作者は確実に涙をさそっている?

これを見ている子供たちが、普通の生活、親と過ごすこのひとときが自分にとって、親にとって一番幸せな時期だと知るのはいつの頃だろうか?



2011年4月23日土曜日

R入門08

2つの変数の記述統計

国語の点数が高いほど、英語の点数が高い傾向がある

・・・量的変数どうしの関係=相関

質的変数どうしの関係=連関

 

散布図の描写

Image125

a<-c(・・・・・)

b<-c(・・・・・)

plot(a,b)

 

共分散

・・・偏差の積の平均(此処で言う偏差とは平均からの偏差)

> sum((a-mean(a))*(b-mean(b)))/length(a)
[1] 7.55

または

> mean((a-mean(a))*(b-mean(b)))
[1] 7.55

一発出る関数はcov

> cov(a,b)
[1] 7.947368

しかしながら、これは先ほど求めた共分散と微妙に値が異なっている。

これは先程のようにnで割るか、n-1で割るかで差が出てくるから。

不偏共分散

 

共分散=不偏共分散*n-1/n

> cov(a,b)*(length(a)-1)/length(a)
[1] 7.55

 

今度は身長と体重で共分散その様子を見てみる。

> m<-c(1.5,1.6,1.7,1.8,1.9)
> cm<-m*100
> k<-c(50,70,60,80,90)
> cov(cm,k)
[1] 225
> cov(m,k)
[1] 2.25

 

相関係数

rxy=sxy/sxsy

> a
[1]  6 10  6 10  5  3  5  9  3  3 11  6 11  9  7  5  8  7  7  9
> b
[1] 10 13  8 15  8  6  9 10  7  3 18 14 18 11 12  5  7 12  7  7
> cov(a,b)/(sd(a)*sd(b))
[1] 0.749659

こいつを一発で出す関数はcor()

> cor(a,b)
[1] 0.749659

無相関に近づくと相関係数は0に近づく。

相関係数の値に明確な基準はないけど目安として

相関係数の絶対値が

0.2以下・・・ほとんど相関なし

0.4以下・・・弱い相関

0.7以下・・・中程度の相関あり

それ以上・・・強い相関あり

 

故に、先程算出した相関係数を見る限りa,bは強い相関があると考えられる。

しかし、極少数の外れ値によって相関係数が大きく左右されることがあるので、相関係数も大事だが、必ず散布図を描写すること。

 

クロス集計表

次は連関を見ていこう

質的変数どうしの関係。

aに関して

> a<-c("S","S","A","A","S","S","S","S","S","A","A","S","A","S","S","A","S","S","S","S")
> a
[1] "S" "S" "A" "A" "S" "S" "S" "S" "S" "A" "A" "S" "A" "S" "S" "A" "S"
[18] "S" "S" "S"
> table(a)
a
A  S
6 14

 

bに関して

> b<-c("A","A","A","A","S","S","S","S","S","S","A","A","A","S","A","S","S","S","S","S")
> b
[1] "A" "A" "A" "A" "S" "S" "S" "S" "S" "S" "A" "A" "A" "S" "A" "S" "S"
[18] "S" "S" "S"
> table(b)
b
A  S
8 12

 

abの連関

> table(a,b)
   b
a    A  S
  A  4  2
  S  4 10

 

ファイ係数

相関係数の特別な場合で、1と0の二つの値からなる二値変数に対して計算冴えれる相関係数のこと。

> aa<-ifelse(a=="A",1,0)
> aa
[1] 0 0 1 1 0 0 0 0 0 1 1 0 1 0 0 1 0 0 0 0

> bb<-ifelse(b=="A",1,0)
> bb
[1] 1 1 1 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0

このように1、0に変換した後の相関係数がファイ係数。

> cor(aa,bb)
[1] 0.3563483

 

練習問題

Image129

> (sum((a-mean(a))*(b-mean(b)))/length(a))/(sqrt(sum((a-mean(a))^2))*sqrt(sum((b-mean(b))^2)))
[1] 0.09092974

 

> aa<-c("A","S","S","A","S","A","A","S","A","A","S","A","S","A","S","S","A","A","S","S")
> table(a)
a
1  3  4  5  6  8 10 12
2  2  1  1  1  1  1  1
> table(aa)
aa
A  S
10 10
> bb<-c("A","S","A","A","S","S","S","S","A","A","A","A","S","S","A","S","S","A","S","S")
> table(bb)
bb
A  S
9 11
> table(aa,bb)
   bb
aa  A S
  A 6 4
  S 3 7

 

> aaa<-ifelse(aa=="S",1,0)
> bbb<-ifelse(bb=="S",1,0)
> cor(aaa,bbb)
[1] 0.3015113



R入門07

練習問題

Image119

Image120

余計な物が写りこんでるが気にするな。

> mean(a)
[1] 112

> sqrt(sum((a-mean(a))^2)/length(a))
[1] 77.82031

> mean(b)
[1] 65
> sqrt(sum((b-mean(b))^2)/length(b))
[1] 31.70173

 

> (a-mean(a))/sqrt(sum((a-mean(a))^2)/length(a))
[1] -0.6682061 -0.1542014 -0.7967072 -0.9252084 -0.7967072  1.5163138
[7]  0.1028009  1.6448149  1.1308103 -1.0537096
> (b-mean(b))/sqrt(sum((b-mean(b))^2)/length(b))
[1] -0.4731602 -0.1577201 -0.7886004 -0.4731602  1.1040405  0.4731602
[7] -1.1040405 -1.4194807  1.1040405  1.7349208



R入門06

標準化

z得点=(データの値-平均)/標準偏差

> a<-c(13,14,7,12,10,6,8,15,4,14,9,6,10,12,5,12,8,8,12,15)
> a
[1] 13 14  7 12 10  6  8 15  4 14  9  6 10 12  5 12  8  8 12 15
> mean(a)
[1] 10
> sqrt(mean((a-mean(a))^2))
[1] 3.331666

ここまでは標準偏差の式。

> (a-mean(a))/sqrt(mean((a-mean(a))^2))
[1]  0.9004503  1.2006005 -0.9004503  0.6003002  0.0000000 -1.2006005
[7] -0.6003002  1.5007506 -1.8009007  1.2006005 -0.3001501 -1.2006005
[13]  0.0000000  0.6003002 -1.5007506  0.6003002 -0.6003002 -0.6003002
[19]  0.6003002  1.5007506

 

> sqrt(mean(((a-mean(a))/sqrt(mean((a-mean(a))^2))-mean((a-mean(a))/sqrt(mean((a-mean(a))^2))))^2))
[1] 1

 

偏差値=z得点*10+50
> 10*(a-mean(a))/sqrt(mean((a-mean(a))^2))+50
[1] 59.00450 62.00600 40.99550 56.00300 50.00000 37.99400 43.99700 65.00751 31.99099 62.00600 46.99850 37.99400 50.00000 56.00300
[15] 34.99249 56.00300 43.99700 43.99700 56.00300 65.00751

 

偏差値の平均は50、標準偏差が10になる事を確認
> mean(10*(a-mean(a))/sqrt(mean((a-mean(a))^2))+50)
[1] 50
> sqrt(mean(((10*(a-mean(a))/sqrt(mean((a-mean(a))^2))+50)-mean(10*(a-mean(a))/sqrt(mean((a-mean(a))^2))+50))^2))
[1] 10



R入門05

散布度

データを見る際には中心的位置の他にどれだけ散らばっていれば分かればなおよい。

それを散布度という。

> b<-mean(a)
> b
[1] 10.8
> a-b
[1] -0.8  2.2 -2.8  4.2 -2.8
> c<-a-b
> d<-c*c
> d
[1]  0.64  4.84  7.84 17.64  7.84
> e<-sum(d)
> e
[1] 38.8
> f<-length(a)
> f
[1] 5
> g<-e/f
> g
[1] 7.76
> sqrt(g)
[1] 2.785678

なんでこの本ではこんなにまどろっこしい事をするんだろうとかなり疑問に思った。

> sqrt(sum((a-mean(a))^2)/length(a))
[1] 2.785678

これで良くないか?

> var(a)
[1] 9.7

なぜ違うの?

>これは不偏分散という。ついさっき求めたのは標本分散という。

>標本分散・・・偏差の2乗/データ数

>不偏分散・・・偏差の2乗/(データ数-1)

∴不偏分散から標本分散を求めるには

> var(a)*(length(a)-1)/length(a)
[1] 7.76

こうすればよい

 

> sd(a)
[1] 3.114482

これは不偏分散の平方根

ここから標本分散を求めるには

> ((sd(a)^2)*(length(a)-1)/length(a))
[1] 7.76

こうすればよい。

 

平均偏差

個別のデータ - 平均の絶対値の平均

> mean(abs(a-mean(a)))
[1] 2.56

 

レンジ(範囲)

> max(a)-min(a)
[1] 7



R入門04

1つの変数の記述統計

データを構成するモノ・・・質的変数

CF.二値変数(とりうる値が2通りのみ) ⇔ 量的変数

別に同値じゃないけど分かるよね、対比て意味ね。

 

質的変数と量的変数の区別は統計解析上重要らしい。

 

データの視覚的表現

> a<-c("C","B","B","A","B","C","A","D","D","D","A","A","A","C","B","D","C","C","B","D")
> a
[1] "C" "B" "B" "A" "B" "C" "A" "D" "D" "D" "A" "A" "A" "C" "B" "D" "C"
[18] "C" "B" "D"
> table(a)
a
A B C D
5 5 5 5

 

> b<-c(13,14,7,12,10,6,8,15,4,14,9,6,10,12,5,12,8,8,12,15)
> b
[1] 13 14  7 12 10  6  8 15  4 14  9  6 10 12  5 12  8  8 12 15
> hist(b)

Image118

代表値の求め方

・平均

> 10+13+8+15+8
[1] 54
> sum(10,13,8,15,8)
[1] 54
> a<-c(10,13,8,15,8)
> sum(a)
[1] 54
> sum(a)/5
[1] 10.8
> sum(a)/length(a)
[1] 10.8
> mean(a)
[1] 10.8

 

・中央値

> median(a)
[1] 10

データを大きさの順に並べた場合真ん中に位置する値の事

奇数の場合は真ん中が存在しうるが、データ数が偶数の場合には真ん中の二つの値の平均を持って中央値することが一般的

 

・最頻値

> table(a)
a
8 10 13 15
2  1  1  1

から8だと分かる。

最も頻繁に観測される値。

最頻値が2つあるような分布(二峰型分布)の場合、最頻値を代表値として用いるのは適切でないと思われます。

複数の最頻値がある場合、例えばSASではそれらの最小値を最頻値として表示しますが、いずれにせよ、こういう場合は最頻値以外を代表値として用いるほうが無難です。

データに外れ値なのがある場合など、中央値が用いられる場合はありますが、一般的には、代表値としては平均を用いると考えて差し支えありません。

 

 

だとよ。



R入門03

関数をパッケージする。

まずはファイル>新しいスクリプトを開く

すると以下のようなエディット窓が開く

Image114

こいつに次のような標準分散を求める関数をカキカキ。

varp(x)<-function(x){
    var(x)*(length(x)-1)/length(x)
}

で保存するんだけど。

Image115

普通のソフトはこれだけ入力すれば、後は拡張子は自動的に付けてくれるものなんだけどこいつは付けてくれない。

だから、自分で.rと拡張子を入力する必要が出てくる。

このまま保存しても、基本的には問題ないんだけど、このままだと拡張子の全くつかないファイルとして保存されることになる。

だから次回このファイルを読み込む際に、すべてのファイルという指定をつけないと認識してくれないので、やはりめんどくさいが.rは付けることにしよう。

で、Rgui.exeを再起動

Image117

> x<-c(11,464,12,55,123)
> varp(x)

と入力すると以下の文字列が返される。

>エラー:  関数 "varp" を見つけることができませんでした

つまり、この段階ではvarpという関数は定義されていないと言うことだ。

> source("標準分散.r")
> varp(x)
[1] 29054

ここでsource(“ファイル名”)を実行させることで、そのファイルの関数を利用出来るようになる。

あっそwすごいね~しびれるぅ。



R入門01

> 2+4
[1] 6

 

> 20/5
[1] 4

 

> sqrt(200)
[1] 14.14214

 

なんか便利な関数があるアルヨてな話

> summary(c(173,178,180,183,182,174,179,179,174,192))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
  173.0   175.0   179.0   179.4   181.5   192.0

 

変数に代入するのにいちいち<-ていう演算子ぶち込まないといけないよねてな話

> 身長 <- c(173,178,180,183,182,174,179,179,174,192)
> 身長
[1] 173 178 180 183 182 174 179 179 174 192

 

でこいつは本には書いてなかったのだが、一回代入すると、多分ソフトを再起動させるか、同じ変数名に別の数値を代入しない限り、その値は保持されるみたい。

> 身長 <- c(173,178,180,183,182,174,179,179,174,192)
> 身長
[1] 173 178 180 183 182 174 179 179 174 192
> sqrt(身長)
[1] 13.15295 13.34166 13.41641 13.52775 13.49074 13.19091 13.37909 13.37909
[9] 13.19091 13.85641
> summary(身長)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
  173.0   175.0   179.0   179.4   181.5   192.0

 

ここで発見したこと。どうやらこの言語には予約語という概念は存在しないらしい。

要するにsqrt(sqrt)ということも、sqrtという変数に正のsqrt関数有効範囲内の数値が代入されていれば有効であるということだ。

なんとも中途半端な言語だなあ。本当に使っていて大丈夫なのか?これ?

> matrix <- matrix(c(173,178,180,183,182,174,179,179,174,192,17000,14000,9000,50000,30000,12000,900,2100,1000,25000),10,2)
> matrix
      [,1]  [,2]
[1,]  173 17000
[2,]  178 14000
[3,]  180  9000
[4,]  183 50000
[5,]  182 30000
[6,]  174 12000
[7,]  179   900
[8,]  179  2100
[9,]  174  1000
[10,]  192 25000

で、このmatrix(c(x,y,・・・・・)n,m)

これでnm行列の作成と言うところだね。

まあ、統計言語としちゃあ仕方ないんだけど、俺的には配列変数を応用してやったほうが直感的で使い良いと思うんだけどね。

Image111

test.csvの中身

> hoks <- read.csv("test.csv")
> hoks
    X height salary
1   1    173  17000
2   2    178  14000
3   3    180   9000
4   4    193  50000
5   5    182  30000
6   6    174  12000
7   7    179    900
8   8    179   2100
9   9    174   1000
10 10    192  25000

csvファイルから直接読み込めるのはちょっと便利かもね。



R入門

なにこれ?

>フリーのソフトウェア。自由に改変、再配布可能。

 

どんなやつ?具体的に。

>こんなの、貧相なUI。

Image107

>しかし、この貧相さがグッと来る。貧相といえば・・・

>ああここはそういう事をいう場所じゃなかったね~

 

インスコ

>ここから http://www.r-project.org/:公式

Image104

 

文字化け?

>インストーラを走らせると、Comodoオオトカゲさんを使っているとこう言うのが出る。

Image109

>こんなモノをリメンバーしても意味ないから、チェック外してインストローラとして実行させる。

>で、こんなんが出る。

>ffdshowでもあったけど、なんでこうなるのだ?●ね。

Image108

 

話変わるけど、今シュタゲでも見てるけどなんぞあれ?

ストーリはまあまあ、椎名へきる=花澤香菜で視聴確定したけど・・・

正直見ていてしんどい。あんなコッテコテのWEBランゲージ使うやついないだろしかし。

あんな典型的なてか、あんな言葉リアルで言っている「香具師」なんていないでしかしお寿司だお(^^)。

 

視聴中にため息が耐えないアニメだが、3話の終わりごろからようやくオッと思う展開が。

あのWEBランゲージが耳につかないほどの超展開、面白い展開を期待したいところだな。

原作をやっていないから、所見だからとても楽しみだなあ。アニメ終わったら原作でもプレイしてみようか。



2011年4月2日土曜日

PowerShellとBeep音

今日はちょっとした遊びで、PowerShellでBeep音を鳴らさせてみた。

参照したページはここ

http://itnandemolab.blog70.fc2.com/blog-entry-356.html

Image80

これでアイマスのGoMyWayでも演奏させてみようかと考案中。

現在、音符からPowerShell用のコードに変換するプログラムを考案中・・・

まずは音符表示コードの仕様を決定しなくては、

しかし、音楽には全くの素人の私にそんなことできっかな?