nishiru3の日記

備忘録です。ネットのゴミ。

ベルヌーイ分布

確率関数

例えば、コインの表が出るか、裏が出るかの確率関数である。表が出る確率をpとすると、
x = 1の時は表、x=0の時は裏とすると確率関数は次のとおりである。

f:id:nishiru3:20180612000842p:plain

モーメント母関数

f:id:nishiru3:20180612000910p:plain

期待値

f:id:nishiru3:20180612000933p:plain

分散

f:id:nishiru3:20180612000951p:plain

参考文献

数理統計学 (数学シリーズ)

数理統計学 (数学シリーズ)

数理統計学―基礎から学ぶデータ解析

数理統計学―基礎から学ぶデータ解析

二項分布

確率関数

定義は次のとおりである。
f(x) = {}_n C_x p^x (1-p)^{n-x}
確率変数X_1,X_2,・・・,X_nがベルヌーイ分布に従うとすると、X_1+X_2+・・・+X_nは二項分布に従う。
期待値および分散はベルヌーイ分布のn倍として覚えておくと便利。二項分布は、Bin(n,p)と表現する場合もある。

モーメント母関数f:id:nishiru3:20180611234724p:plain

モーメント母関数は次のとおりである。式の整理については、後述する二項定理
(a+b)^n = \sum^{n}_{k=0} {}_n C_k a^k b^{n-k}を使う。

f:id:nishiru3:20180611142515p:plain

期待値

定義は次のとおりである。
E[X]=np

導出は次のとおりである。
P(X=x_k) = p_kとすると、
f:id:nishiru3:20180611142824p:plain
二項定理を使って変形している。

分散

定義は次のとおりである。
V[X]=np(1-p)

導出は次のとおりである。なお、E[X(X-1)]を求めてから、分散V[X]を求める。

f:id:nishiru3:20180611234724p:plain

f:id:nishiru3:20180611234918p:plain

その他

上記導出に用いた二項定理は次のとおり。

f:id:nishiru3:20180611235127p:plain

モーメント母関数を用いた期待値E[X]と分散V[X]の導出は次のとおり。

f:id:nishiru3:20180611235332p:plain

f:id:nishiru3:20180611235433p:plain

あまり厳密じゃない事に注意。

参考文献

数理統計学 (数学シリーズ)

数理統計学 (数学シリーズ)

数理統計学―基礎から学ぶデータ解析

数理統計学―基礎から学ぶデータ解析

キッカソン(9/16〜9/17) 感想

関東の@xtetsuji さんと関西の@tomucha_ さんが企画してくださいました。 参加者は全9名です。 場所は@xtetsuji さんお気に入りの菊香荘という素晴らしいお宿です。

前夜

何をするか

基本的にはハッカソンなので、何やるか決めないといけません。 何をしようか迷ったのですが、ゆるーくやりたいなということで、 CGIを弄ろうということにしました。 今更?というのは重々承知ですが、Perl入学式の最後で実施するMojoについて、 イマイチ理解できていないということがありました。 いきなりテンプレートととか出てきて面食らった記憶があります。

以前、@hakata_oyuki さんのよなべPerlでもCGIを使った勉強会があったのですが、 しっかり触ることもなく放ったらかしてたので、この機会に触ってみようと思いました。

環境

ひとまず、ローカルにXAMPPをいれてPerlCGIを動かせれば良いかなという感じで、サクッと終わりました。シェバンに気を使うくらいでしょうか。

準備

本を二冊持って行きました。一冊はPerlCGIの本、もう一冊は数理統計の本です。 数理統計は新幹線の中で読むようです。

初日

9/16 13時にみんなで集合してもくもくし始めました。約1名爆睡されていましたが、ソフトウェアエンジニアには休息も必要です。これもキッカソン!

私は、持っていった本を写経していました。勉強会での理解しながらの写経って時間がかかるので、こういったまとまった時間でやる方が私の場合、早いようです。

CGI.pmを触っていたのですが、テキストフィールド、ファイルアップロード、ラジオボタン等を触ってました。なるほどねと思いつつ、printで吐くところは、あぁ、という感じでした。

でもMojoとの比較で、何やってるのかが多少わかった気がします。

もう少し、深淵を見た方が良いかなと思ってます。

二日目

台風が来ていたので、当初の予定より早めに切り上げて、東京に戻りました。 本当は京都に行くと必ず行くラーメン屋があったのですが、泣く泣く諦めました。

あと、@ma_maeyama さんがtestを触っていて、ここら辺もやっておきたいなぁと感じました。testはPerlだけの話じゃないですしね。

感想

お宿の菊香荘の場所は非常に落ち着いていて、食事も非常に美味しかったです。 疲れたら、またパソコン一台持って行って、もくもくしていたいです。

個人的には、関西のあずまさんにお会いできたのも一つ大きな収穫でした。

最後にキッカソン企画者および参加者の皆様、また菊香荘の皆様、楽しい時間をありがとうございました。またいきたいと思います。

Perl入学式2017 第5回(9/2) サポーターで参加させてもらいました。 

ひさびさに

@xtetsuji さんからサポーターで来ていただけませんか? とお誘いをいただいたので、お手伝いさせていただきました。 @sironekotoro さん、@kaz_hiramatsu ‏さんもいらっしゃってました。

FizzBuzzについて

Perl入学式の練習問題の一つに第2回のFizzBuzzMojoのテンプレートに入れよう。 というのがあります。テンプレート内でのコードの埋め込み方の練習です。 その中で、受講者さんのひとりが

「テンプレート内にコード埋め込むような事って普通やるんですか?」

とおっしゃっていたので、

「そうですね、FizzBuzzの演算のようなものは分離した方が管理しやすいですよね。」

と答えておきました(間違ってたらごめんなさい)。

ということで、以下のようなコードをピザ会の前にお渡ししておきました。

#!/usr/bin/env perl
use Mojolicious::Lite;

plugin 'PODRenderer';

sub fizzbuzz {
    my @str=();
    for my $i (1..100) {
        if ($i % 3 == 0 && $i % 5 == 0 ){
            push @str,"FizzBuzz";
        } elsif( $i % 3 == 0) {
            push @str,"Fizz";
        } elsif( $i % 5 == 0) {
            push @str, "Buzz";
        } else {
            push @str, "$i";
        }
    }
    return \@str;
};

get '/' => sub {
  my $c = shift;
  $c->stash(title => 'FizzBuzz');
  $c->stash(fizzbuzz => fizzbuzz());
  $c->render(template => 'index');
};

app->start;
__DATA__

@@ index.html.ep
<!DOCTYPE html>
<html>
  <head><title><%= title %></title></head>
  <body>
  % for my $str (@{$fizzbuzz}) {
    <%= $str%><br>
  % }
  </body>
</html>

もう少し、スッキリできそうですけど、FizzBuzzの部分は外に出せたかなと思います。

ピザ会

終了後はピザを食べながら、各プログラミング言語の良し悪しを語ってました。 良いなと思ったのは、プログラミング言語の良い所と悪い所をちゃんと評価できていたのは建設的で感じがよかったです。

感想

Perlは久々に書いたので、復習してからいきました。やっぱり書いててたのしいなぁと改めて思いました。 私もPerl入学式の受講者だったのですが、当時よりはコードが読めるようになった?気がします。

また、第5回から参加されていた方もいらっしゃっていたので、 @kaz_hiramatsu ‏さんと@sironekotoro さんがWindowsにMojoliciousを入れる事をされていました。 ここらへんは手練れじゃないとできないなぁと感じつつ、私もまだまだ修行が足りん! と思いました。

Perlとの出会い、そして。

Perl入学式に参加する前後とこれからについて書いてみようと思います。

出会い前(新人の頃、2006年)

大学では、建設系の学問を修めて、卒業後はそっち系のコンサルタントに就職しました。

大学では、現場でデータとって分析したり、FortranやC/C++を使って非圧縮性流体の解析をやってました。

コンピュータリテラシ的な授業ではさっぱりで、正直プログラムは嫌いでした。 でも、微分方程式を数値的に解けるようになってから、流体の基礎方程式であるナビエストークスの方程式が面白くなり、 実務上もプログラムが大事であることがわかって、プログラムを書くことが大好きになりました。

会社に入ってからも、似たようなことをやってましたが、コンパイル言語だけではなくて、 スクリプト系の言語も使ってみたいなと思い、Rubyの本を読んだりしてました。

仕事では、数値解析をやることがありますが、コンサルタントがメインですし、 数値解析やったり、そのためのプログラムを書いてもあまり評価はされない感じでした。

一番評価されるプログラムはエクセルVBAでした(笑) おそらく多くの非IT部門がメインの会社がそうかと思います。

出張(2011年)

会社で2ヶ月ほどの海外出張となりました。 日本と違い規則正しい生活ができましたが、平日の夜や休日はやることがありません。 (発展途上国の田舎だと本当に何もありません) 仕方ないので、オライリーの「初めてのPerl」をiPadで読んでました。 読み物として面白いのですが、Perlがなぜかしっくり来ませんでした。 おそらくコンテキストの部分だと記憶しています。

そうこうしてるうちに、「ローカルのエンジニアに、日本の検討方法を説明してくれ」と現地の所長に言われました。 簡単に言えば、拡散方程式を解く話になるのですが、C++で書くのもつまらんなと思い、違う言語を使うことにしました。

Perlという手もあったのですが、結果Pythonで書くことにしました。 コンクリートの解析なので、力学の計算も含まれているのですが、それなりに勉強になりました。

帰国後(2011年〜2013年)

Pythonが結構使えることがわかったので、数値データの可視化の部分で利用してました。 matplotlibが便利で、コンター図やベクトル図を書いてました。 ただし、計算負荷が大きいものはFortranかCでした。

転職(2014年はじめ)

思うところがあり、転職しました。ベンチャーですが、科学技術計算を生業としてプログラムを書ける会社です。 プログラムを書くことがメインとなったのです。 主な変化点を挙げると以下のようになります。

  • 自分がやりたいことを中心に据えられた。
  • 残業が減った。
  • 給与も減った(えっ?)。
  • 時間ができた。

Perl入学式に参加(2014年6月頃)

転職して時間作れるようになったし、 新たに勉強しようと思い、ネットで探していると、「Perl入学式」の文字が・・・。

気づいた時には、第2回からだったのですが、資料が整っていることもあり、 第1回の資料を見てPerl入学式に必要な環境は整えられました。

ところで、仕事では数値計算をやるのですが、速度が大事です。 一方で、数値計算をやるために必要なパラメータの設定等は、プログラムを走らせる前にテキスト等の形式で用意します。

正直、FortranやCでテキスト処理を行うのははきついのです。 それまではAWKなんかで処理をしたりしていました。

そこで、Perl入学式参加にあたり、もっとテキストデータをPerlで処理することを目標にしました。 (自分の中の目標を持つことは大事です)

以上の目標を持ってPerl入学式に参加することにしました。

参加して、@papix校長はじめ、サポーターの皆さんの手厚い指導のもと、 「Perlって面白いな」と感じました。

Perl入学式に参加して得られた事を挙げると以下のようになります。

  • 最近のPerlの書き方やルールを知る事ができます。書籍でも得られますが、情報が古い事があります。現役の方の情報を得られるのは有用です。

  • テキスト処理で重要な正規表現、そして柔軟なデータ構造を表現できるリファレンスは、大きな収穫だったと思います。正規表現は他の言語(というか、ある種「正規表現」という言語?)にも活かすことができます。リファレンスは面倒くさいと思われる方もいらっしゃると思いますが、Perlの一番面白く、柔軟性を持たせる機能だと感じ、Perlが好きになった理由の一つです。

  • サポーター含め、私と同じように生徒して参加してある方との出会いは刺激になりました。みなさん、様々なバックグラウンドをお持ちでありながら、Perlを勉強する機会に恵まれるのは、やはり、Perlという言語、そしてPerl入学式が非常に優れている証明になるのかなと思います。

  • 練習問題が出題の後、答え合わせは講師のコーディングになります。勉強になるのは、講師の方のコーディング環境です。私はEmacsを使うことが多いのですが、シェルとVimの環境もやはり速いなと思い、多少?環境も整えたりました。Perlとは異なりますが、プログラムの環境を自分で調べて整えるのは大事だなと改めて感じました。

  • 私自身、Webに猛烈な興味があるわけではなかったのですが、Perl入学式を経て、興味を持つようになり、Webと科学技術計算をどうやって上手く繋ぐべきか考えるようになりました。

  • @htk291さん曰く、「飲み会が本番です」

最近(2015年〜)

今年度に入り、新しい会社で働くことになりました。

Perlを使う会社ではないですが、やはりプログラムを書くことも、コンサルティングをすることも評価してくれる会社です。

給料は上がって、時間は若干作りづらくなりましたが、バランスはちょうどいいかなと思ってます。

今年に入って印象的なことは以下のようになります。

  • 最初で最後のYAPC2015に参加しました。正直さっぱりわからんことも多かったですが、参加されている方が楽しんでおり、何より他言語だろうが、Perlと関係なかろうが、発表されていることに驚きました。Perlコミュニティの良い意味での緩さがすばらしいと思います。「私、Perl全くわかりませんけど」で始まる発表が許されるのはおそらくPerlだけなんだろうなと勝手に思ってます。

  • 少し先に進めるために、「よなべPerl」という勉強会にも参加させていただいてます。@hakata_oyukiさん(福岡でのPerl入学式も関わっていらっしゃいます)が主催されてますが、Webやデータベースに関わる所も勉強になります。日下部さん(あっ!)流もわかります!

  • 吉祥寺.pmにも一度だけ参加させていただきました。発表したいな思いますが、なかなか・・・。時間を作りたいですね。上半期だと可能かなと思ってます。

  • 2度目の入学をしています。1度目で気付かなかった所(特にリファレンスとMojoの部分の説明の難しさ)に気づいたり、自分が忘れている事項に気づきます。ちょうど復習になるのでしょうか。

まとめ

Perlと出会い、Perl入学式に参加してプログラムを書く行為の第2歩が整えられた気がします。Perlに限らなければプログラムを書く行為をして、給料をもらうことはやっていたのですが、 Perl入学式で得られたPerlそのものの知識、出会いを通じて、幅が広がったなと思います。

プログラムを書く、ということ一つを取っても、様々な分野があると思います。インフラに携わる方、Webに携わる方、組み込みに携わる方、私のように科学技術計算に携わる方、その他、私が想像できない分野でプログラムを書かれている方もいると思います。また、プログラム書くことはしない方もいらっしゃると思います。

その中で、新しい1歩、新しい2歩を踏み出してみたいという方は、Perl入学式に参加されてはいかがでしょうか?

よなべPerlの感想

参加目的

なんか新しいことに挑戦したいなと思い、昨年初めて2014年度の「Perl入学式」に参加させていただきました。

Perl入学式」ではPerlの基本的な使い方を学びつつ、最後にMojoliciousの簡単な使い方まで教えていただきましたが、この先の学習を考えると、Webを学びたいなというのがありました。

ちょうど、YAPCの次の日ということもあり、福岡在住の@hakata_oyukiさんがよなべPerlを開催されるということで、参加させていただきました。

yonabeperl.blog.jp

www.zusaar.com

YAPCはブログを書くまでが、YAPCということなので、それに倣い、よなべPerlの感想を書かせていただきます。

日時と場所

2015年8月23日 17:00 ~ 19:00 @北千住

概要

Webプログラミングの概要を掴むために、以下のことをやりました。

当日は、テキストによる資料を用意していただき、予定時刻が記入されていたのは非常に良かったです。

環境の設定

大きく以下の2つを整えました。

WindowsMacの両方に対応しています。

私はMacでしたが、Emacsを使うので、そのままEmacsを使いました。 これから、参加されようとされる方は、アプリをインストールして行くと、 時間の短縮になると思います。miは大学の時に使っていたので、思い出深いエディタです。

HTMLの記述

時間の都合上、コピペが多くなりますが、タグ打ちです。 また、Chromeの使い方も多少教えていただきました。要素の検証で見るんですね。 基本のタグは覚えるべきですが、使いながら覚えるべきかなと。

CSS

HTMLとCSSに関する書籍だったり、サイトがあったりして、言葉は知っていたのですが、 中身はさっぱりでしたが、説明を受けてようやくわかりました。 なるほどスタイルの設定ね。リファレンス見ながら、覚える感じです。

JavaScript

jQuerryを使いました。基本の文法については触れられませんでしたが、 JavaScriptがなんたるかを知ることはできました。

どういったライブラリを導入して、HTMLファイル内に記述すると、どういった動きになるかはわかりました。 基本的な文法については、自分で勉強しないとなというのはあります。

プロトコルとかドメインとかIPアドレスとか

個人的にはここら辺の仕組みはちゃんと勉強したことがなかったので面白かったです。 nslookupコマンドも知らなかったので・・・。

普段は偏微分方程式を解いて、数値データを可視化することがメインなので、Webだと新しい知識が入ってきて楽しいです。

良かった点

  • 勉強会自体はフランクな感じで雰囲気は良かったです。
  • 環境の設定から丁寧に説明して下さり、参加者のみなさんも理解していおりました。
  • 当日の会場はWifiの調子が悪いということで、急遽、資料等を当日配布してくださいました。対応力が良かったです。

次回に向けて

  • 本来の予定ではさくらのレンタルサーバを使った実習ということだったので、出来れば次回参加してその知識と能力を得たいなと思います。
  • 正直、未だにWAF(FireWallじゃない方)がわかっていないので、ここら辺を理解したいなと思います。
  • 「Webを支える技術」を購入し、少しずつ読んでいます。やはり基本的な背景は知っておく必要あるかなと。
  • 次回も機会があれば、参加したいなと考えてます。今の所、Webで飯を食おうとは考えておりませんが、知っておくことで、広がる世界もありますし、思わぬところで、仕事に生かされることもあります。
  • ひとまず、数値計算ができるサイトを作ることを目標にしたいかなと考えています。ユーザーのインプットに対して、数値解とグラフくらいを表示できるといいかなと。

御礼

@hakata_oyukiさんにはお世話になりました。また、解りやすい解説ありがとうございました。また参加させていただきます。

Perl入学式(第2回補講)

概要

Perl入学式(第2回補講)が開催されました。

  • 日時:2015年7月25日13時〜
  • 場所:五反田某所

資料については、下記をご参照ください。

github.com

第1回は環境構築がメインのため、ソースを書くことはほどんどありませんでしたが、 第2回はひたすらソースを書きました。

Perl特有の文法はもちろんですが、Perlに限らず、他言語でも使えるプログラムの考え方?の勉強をしました。

  • 標準入出力
  • 変数の取り扱い(スカラ、配列)
  • 演算子(四則演算子、論理演算子
  • 繰り返し(for文)
  • 分岐(if,elsif,else)

改行を取り除く「chomp」なんかももちろんやりました。

感想

  • 第2回はPerlのソースを動かすという意味でも、他言語でも使える知識を得られると感じました。 特に最後の課題であるFizzBazzは非常に奥が深いなと思います。

  • ハッシュ、リファレンスについては第3回の予定(2014年度は第3回でした)のはずです。勉強したい方は是非。

  • サポーターの方は非常に親切です。非常に初心者レベルの質問をしても答えてくださいます。また、皆さんが「初心者がつまづく所を知りたい」という姿勢を感じます(私だけかも知れませんが)。

  • 校長が前半を担当、@xtetsujiさんが後半を担当されました。校長は登板過多のようでした。

その他

  • Perlを勉強したい方にも、プログラム経験がなく、とりあえずプログラム書いてみたい方にも適切な勉強会かなと思います。エンジニアでない方も参加されていますので、二の足を踏んでいる方は是非!