サポンテ 勉強ノート

サポンテの勉強ノート・読書メモなどを晒します。

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート - まとめ

はじめに

第二十一講までを読み終わり、まとめのページを作りました。

f:id:saponte:20170705081649p:plain

免責

このページはあまり自主規制しません。

まとめの観点

基本的に、この見開き2ページを見れば学んだことを概ね思い出せるように作成します。

まとめた内容

まとめのページは以下のように作成しました。

  • ノートのすべてのページから、各講の内容を一言であらわすならどのようになるかを抜き出す。
  • 重要な数式や手順を書き出す。
  • 重要な数式や用語の初出は色の付いた字で書く。
  • 直感的に解りづらい記号を書き出す。

講の一覧

一つの講は不要と判断して省きました。

各講の内容を一行で抽出しました。 また初出の用語を強調し、リファレンスとして引きやすいような文にします。

この一覧を作るとき重要なのは、目次や見出しに使われている語句を安易に羅列するのではなく、なるべく自分が言葉を使うようにすることです。自分がその内容をちゃんと理解しているか、他人に聞かれたときに自分がサッと答えることができるか、自分がその内容を思い出すとき、どのようなキーワードが必要か。そうしたことを考えて作ります。

そうするのは、すでに身についている語をわざわざまた強調する意義が薄いからです。本文や目次、見出しなどで著者が強調したい語と、自分にとって重要な語は違うのです。もちろん本の読み方によっては「概要を記録しておきたい」という面もあると思いますので、そういうときは別になります。

あまりにかけ離れたものになってしまうと、自分のノートのほかのページや本へのリファレンスとする際に使い物にならなくなる危機感を持つ人もいるかもしれません。しかしほとんどの本には「章」や「部」などの ID として使える単位があります(この本の場合は「講」)。形式的にそこを残しつつ、自分の言葉で考えるのが良いと思います。

振り返り

作ったノートをすべて振り返ってみます。

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第一講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第二講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第三講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第四講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第五講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第六講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第七講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第八講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第九講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十一講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十二講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十三講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十四講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十五講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十六講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十七講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十八講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十九講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第二十講」 - サポンテ 勉強ノート

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第二十一講」 - サポンテ 勉強ノート

いままで何度も書きましたが「授業を聴きながら書くのはメモ。そこから理解した内容を自分なりに整理して『作った』ものがノート」であると言われています。

振り返ってみると、当然ですがいままでの道のりが俯瞰できます。最初の頃のことがほんとうに初歩的なことであり、またすべての基礎であることがわかります。何かを学び始めるときは、自分がそもそもどこに向かっているのかすら判らない時もあります。最初にその道のりをざっと確認する勉強法もありますが、それを未知の分野に対して適用するのはやはり難しいかもしれません。

ここまでやるのはかなり骨が折れます。ここまでやる必要があるのかというご意見はあるでしょうが、試験勉強に適用した場合、ここまでやれば試験前準備の手間はかなり省けます。本の内容を忘れた場合も、最初に冒頭のまとめのページを見て、よくわからない部分があったら各講のページ、それでもわからなかったら本自体を参照したり別の書籍を参照するなど、かなり効率的に「振り返り」ができます。あまり時間が取れず結局4ヶ月もかかってしまいましたが、学生さんが1教科/1ヶ月ペースでこのようなノートが作れるなら1年で12教科がこなせることになります。もう社会人ですが、今後も必要に応じてこのような感じで勉強をしていきたいと思います。なによりも自分のために。

カラーボールペン

カラーボールペンを派手に使っていますが、ちょっとゴチャゴチャし過ぎてしまったと反省しております。昔、同じようにカラーペンを巧みに使ってきれいなノートを作っている同級生がいて、憧れのような気持ちもありました。今後は、図表は別として、本文は色数はなるべく抑えて、太さによる違いをもっと利用したほうがいいかもしれない。まとめのページは色数を抑えてみました。太さのバリエーションは持っていないので、工夫も必要かもしれません。

もともと絵を描くために入手したカラーボールペンを流用しています。特に問題はなかったのですが SARASA Clip のグレーの 0.3mm だけ、妙に引っかかる感じで書きづらかったです。これだけはインクがなくなり次第、別の太さを試してみたいと思います。

本の感想

あとがきで著者のかたが書いている通り、入門以前の内容です。しかしながら巷の「入門」書の多くは予備知識が必要だったり、その予備知識に頼った専門用語が駆使されていたりするのに比べると、門外漢の私としてはうれしい内容でした。

先ほど「その道のりをざっと確認する」のが難しいと書きましたが、この本ではその「ざっと確認」ができたと思います。勉強しながら「いったい自分はどこに向かっているのだろう」と思っていました。十七講を超えたあたりでやっとなんとなく分ってきました(笑)。

最後までお読みいただき、ありがとうございました。

完全独習 統計学入門

完全独習 統計学入門

SQL アンチパターン (Bill Karwin,和田卓人,和田省二,児島修 オライリージャパン)

免責

この本を読んだことがない人が、このノートから本の内容を脳内に展開することはできません。見出し部分は Amazon などで「目次」の内容として公開されている範囲にとどまります。

この本を買うかどうか悩んでいる人は是非購入しましょう。これは価値のある本です。

本の紹介

SQL つまり RDBMS を使ったアプリケーション開発や運用の中で遭遇する「アンチパターン」についてまとめられている本です。出版年を見ると歴史が古いことがわかりますが、Amazon で見ると最近も非常に人気があるロングセラーであることがわかります。読んでみると、それは確かに納得のいくものでした。

アンチパターン、つまり「やらない方がよい手法」を集めたものですが__多くの人が共感してくれると思いますが__よくやってしまう手法でもありました。なんとなく「まずいんじゃないかな〜」と思って(ついつい)やっていること(あるいは賢明にも避けたこと)に対して名称を付け、するべきではない理由、あえて採用する場合の基準などを明確に説明してあります。この本は RDBMS を扱う仕事をする人の道しるべなのです。

ノート

これは本をまるごと1冊、見開き2ページにまとめてみました。

全体は3つの部に分かれています。それぞれのパターンの見出しを箇条書きのようにまとめてみました。実際の業務にあたっては、この見開きだけを参考にして進めていくことができます。簡単なチェックリストにもなります。

本と違えたところ

この本を持っている人の中には「見出しが違うな」と気づいた方もいるかもしれません。これは自分でわかりやすい形に書き換えました。最初に断っておくと、翻訳が気に入らないということではありません。実際、この本の翻訳はすばらしいと思います。そうではなく自分が経験した業務にはなじみのない表現であったり、この方が自分が思い出しやすいなど、現実に使いやすくあることを念頭に作ったノートです。

追加したもの

また「この本の中にない見出しがあるぞ」と気づいた方もいるかもしれません。別の書籍で記されているアンチパターンや Web で調べて見つけたりしたものを追加してあります。いずれも、この本に収められていても不思議ではない知見です。これからも見つけ次第、追記してきます。ノートは、こうして成長していくのです。

それぞれの出自を記します。

とりあえず削除フラグ

訳者の方がネット上に公開しているスライドです。詳細はリンク先をご覧下さい。

SQLアンチパターン 幻の第26章「とりあえず削除フラグ」

論理削除フラグという名の死亡フラグ - @ledsun blog

これほど明確で的確な命名はありません。シビれます。

買い物リストとカートの中身

これは「 理論から学ぶデータベース実践入門 」という別の書籍に書かれていたアンチパターンです。検索性能を上げるために別のカラムなどから導き出される結果をフラグにして持っておくなどの冗長設計をして、そのメンテナンスを怠るといった内容です。その書籍にはキャッチーな名前が付いていなかったと思いますので、自分で勝手に名前をつけました。

スーパーで買い物をするとき買い物リストを持っていきますが、売り場の順序とリストに書かれている順番は違います。カートに入れた商品に対して買い物リストにチェックを入れ忘れると、売り場を回っているうちに「あれ?これはカートに入れたっけ?」とわからなくなります。そうなるとカートの中に入ったたくさんの商品をかき回して調べなければいけません。そんなイメージです。

単語帳

これは「 楽々 ERD レッスン 」という書籍から引用し、私が設計上のアンチパターンとして名前をつけてノートに記しました。

ビジネス上のコード__例えば社員番号や商品コード__をテーブルの主キーにする設計手法を指します(やっている人は多いのではないでしょうか?)。

学生がよく使っている単語帳は一見すると単語それ自体が主キーになりそうですが、同じ単語で複数の意味を持つ場合に、カードを分けたい場合があります。そのようなイメージです。

ビジネス上のコードはビジネス上のルールに則っています。ビジネスルールである以上、ビジネスルール自体が目的を持ち、しかもそれはシステムの寿命やスコープと一致するわけではありません。ビジネス上のコードはシステムの都合ではなくビジネスの都合によって決められ、そして頻繁に変更されます 1

その他、どのような場合に問題が発生するかは「 楽々 ERD レッスン 」自体をご参照ください。これもいい本です。


  1. 頻繁というのは相対的な言葉ですが、ここでは「システムの寿命と比較してはるかに」という意味です。ユーザーは「ごく稀に変更がある」という程度の認識でしょう。ユーザーの「滅多に無い」という言葉を「システム上のレアケース」とは思わない方が良いです。

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第二十一講」

はじめに

第二十一講の勉強ノートです。t分布の相対度数と母平均を区間推定する方法について書かれています。

この本はこの講で終わりです。最後に、今までのまとめのページを作ります。

f:id:saponte:20170630214307p:plain

免責

ノートには著作権法に抵触しないよう、自主規制が入ります。

本の紹介

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第二十講」

はじめに

第二十講の勉強ノートです。t分布が登場しました。母平均以外は標本データから算出できる統計量Tと、その分布について書かれています。

母分散の推定方法がわかったところで、同様の手法で母平均の推定に挑んでいきます。

f:id:saponte:20170630214204p:plain

免責

ノートには著作権法に抵触しないよう、自主規制が入ります。

本の紹介

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十九講」

はじめに

第十九講の勉強ノートです。母分散を推定する方法について書かれています。

f:id:saponte:20170630214031p:plain

免責

ノートには著作権法に抵触しないよう、自主規制が入ります。

本の紹介

PHP を使って VBScript コードを作る(な、何を言っているのか...

背景

先ごろ VBS を使って2000行を超えるスクリプトを二つ作りました。しかしこの二つのスクリプトソースコードのうち 2/3 は同じです。

Visual Studio 2015 でデバッグとプロジェクト管理をしています。便利です。後ほどリンクをご紹介します。

開発環境には別の仕事の関係で PHP もインストールしてあります。

ソースコードの分割

VBS には include という概念がないため、一つのファイルに全ての処理を書かなければいけません。手軽に実行がモットーのスクリプトですから、これは制限というよりむしろ美徳です。しかし開発時はファイルが別々になっててくれた方がうれしい場合があるのも事実。二重管理しなくてすむし、再利用もしやすくなるしね。

include には下記の別の方法もあるにはありますが、やっぱり最終的な実行ファイルは一つにしたいです。

vbScriptでinclude文を使う - tekkの日記 C#,VB.NET

ユーザーに配るとき「これをダブルクリックしてね」と言うだけで済みますからね。せっかく Visual Studio を使っているので、「ビルド」として複数のスクリプトファイルを一つにまとめる処理を作ってみましょう。

手順1:プロジェクトの作成

メモ: Visual Studio を使って VBScript の開発を行う - 高東ソフトウェアサービス

まずはこれでプロジェクトを作ります。私の場合は 2008 と 2015 で同じ手順を行い、確認しました。VBS 開発もこれで IDE の恩恵を受けることができます。

リンク先の手順をざっくり書くと、以下のようになります。

  • Visual C++ のメイクファイルプロジェクトを流用して、VBScript 用のプロジェクトを作る。
  • 新規プロジェクトで「Visual C++」「メイクファイルプロジェクト」を選択する。プロジェクト名を決めたらウィザードはすぐに終了。
  • ソリューションエクスプローラーに表示される以下のものは不要。
    • ソースファイル
    • ヘッダーファイル
    • リソースファイル
    • readme.txt
  • Windows エクスプローラ上で VBSTest.vbs を作成し、ソリューションエクスプローラーにてプロジェクトに追加する。
  • プロジェクトのプロパティで以下の設定をする。
    • 「構成プロパティ」->「全般」->「構成の種類」を「ユーティリティ」に変更する。
    • 「構成プロパティ」->「デバッグ」->「コマンド」に「wscript.exe」を設定する。
    • 「構成プロパティ」->「デバッグ」->「コマンド引数」に「VBSTest.vbs //X」を設定する。

手順2:メインファイルの作成

手順1のリンク先にある手順の通りにプロジェクトを作ったものとして、プロジェクトのルートに VBSTest.vbs があるものと想定します。中身は空でかまいません。これをビルドのたびに書き換えるイメージです。

次に VBSTest.php を作成します。タイプミスではありません。拡張子は PHP です。 何を言っているのかわからねーと思 いますが、つまり PHP を VBS のプリプロセッサとして使用するのです。

PHP で VBS のプリプロセッサ

PHPプログラマーが知らないPHPの用法 | 株式会社きじねこ

PHP は Hypertext Preprocesser の略です。HTML のプリプロセッサという出自を持ちます。しかし PHP さんにとって PHP の外側の世界が本当に HTML なのかどうかは知ったこっちゃありません。つまり VBS でもなんでもいいのです。

VBSTest.php の中身は以下の通りです。

<?php
require_once 'classes/ApplicationEntry.vbs';
// require_once 'tests/HelloWorldTest.vbs';
require_once 'classes/HelloWorld.vbs';

見ての通り、ファイル内容を結合しているだけです。コメントアウト部分は後ほど説明します。

手順3:サブフォルダの作成

次に include する対象のクラスファイルを格納する「classes」フォルダを作成します。

そしてこれに対応するフォルダ「みたいなもの」をプロジェクトに作ります。ソリューションエクスプローラー上で右クリックして「追加>フィルター」を選択します。Visual Studio 上でフォルダ「みたいに」使えるのでこれでいいです。

手順4:クラスファイルの作成

次にこの「classes」フォルダの中に二つのクラスファイルを作ります。

以下のファイルは「集中例外ハンドラ」です。深い階層から Err.Raise したいときに便利で必ず作るので、この記事には関係ありませんが、備忘録としてここに書かせていただきます。

try~catchを実装するには - 城陽人の本棚

classes/ApplicationEntry.vbs です。

Option Explicit

Dim app
Set app = New ApplicationEntry

app.Start
WScript.Quit(0)

Class ApplicationEntry
    Sub Start()
        On Error Resume Next
        Call Me_Main() ' この後に何も行を書かないことで上の On Error Resume Next を集中例外ハンドラにできる。
    End Sub

    Private Sub Me_Main()
        On Error Goto 0 ' この行は Me_Main() 内部でのみ有効。

        Dim h
        Set h = New HelloWorld
        h.Greeting "Hello"
    End Sub

    Private Sub Class_Terminate()
        If Err.Number <> 0 Then
            WScript.Echo Err.Number & ":" & Err.Description & "@" & Err.Source
            WScript.Quit(Err.Number)
        End If
    End Sub
End Class

PHP はファイル末尾の改行を無視するので、最後は二つの改行で終らせるのがいいかもしれません。

次に HelloWorld クラスを記述します。classes/HelloWorld.vbs です。

Class HelloWorld
    Public Sub Greeting(ByVal msg)
        WScript.Echo msg & "World!"
    End Sub
End Class

手順5:ビルドバッチの作成

プロジェクトのプロパティで「構成プロパティ>ビルドイベント」を選択します。

コマンドライン」の欄に「Build.bat」を設定します。

次にその Build.bat をプロジェクトフォルダ直下に作成します。中身は以下の通りです。

@echo off
php -c C:\php\php-cli.ini VBSTest.php >VBSTest.vbs
type VBSTest.vbs
echo 0

type しているのは PHP の部分でエラーが発生した場合に、それをビルドエラーとして Visual Studio で検知できるようにするためです。後ほど実際にやってみます。

手順6:作成したファイルをプロジェクトに追加

作成したファイルを全て Visual Studio からプロジェクトに追加します。ソリューションエクスプローラー上で右クリックし「追加>既存の項目」を選択してスクリプトを追加します。

「classes/ApplicationEntry.vbs」「classes/HelloWorld.vbs」はもちろんフィルタ「classes」の下に、VBSTest.php と Build.bat はプロジェクト直下に追加します。

ビルド

これでプロジェクトの「ビルド」をすると VBSTest.vbs の中身が PHP によって作られるようになります。

手順7:デバッグ

その後は「デバッグなしで実行」するとデバッグもできます。何を言っているのかわからねーと思いますが、いや 先ほど紹介したリンク にもちゃんとそう書かれています。VBS をデバッグするためにはなぜか「デバッグなし」の方を選ばなければなりません。Visual Studioツールバーをカスタマイズして、こちらも直ぐにクリックできるようにしておきます。

ビルドエラーの検知

さて、PHP ファイルのコメントアウト部分を以下のように変更してリビルドしてみてください。

<?php
// require_once 'classes/ApplicationEntry.vbs';
require_once 'tests/HelloWorldTest.vbs';
require_once 'classes/HelloWorld.vbs';

「tests/HelloWorldTest.vbs」というファイルはまだ作っていないですからエラーが出てほしいです。Visual Studio の「エラー一覧」ペインを見ると、ちゃんとエラーが表示されていることが確認できると思います。PHP の出力するエラーを「ビルドエラー」のように見ることができます。

「tests/HelloWorldTest.vbs」を実際に実装すれば、クラスの単体テストを行うことができます。あるいは ApplicationEntry.vbs の中で WScript.Quit(0) しているので classes/HelloWorld.vbs の中に直接テストコードを埋め込んでしまってもいいでしょう(実行されないため)。個々のクラスファイルを指定すると単体テスト、ビルドして結合テスト、などができるようになります。

これでソースコードの管理や再利用が簡単になるだけでなく、 プリプロセッサの恩恵 にあずかることもできます。

集中例外ハンドラのファイル(classes/ApplicationEntry.vbs)にハードコーディングしている「HelloWorld」を PHP の変数にしてしまえば(例えば「<?=$className ?>」のように)再利用できます。

開発時にはトレースを出して、本番リリースのスクリプトでは__それをフラグ一つで無効化するのではなく__処理自体を削除するというようなこともできるようになります(単体テストしづらくなりますが)。

聞いただけでゲンナリする VBS の開発も、これでだいぶ楽になると思います。

参考文献

「完全独習 統計学入門(小島寛之 ダイヤモンド社)」 勉強ノート「第十八講」

はじめに

第十八講の勉強ノートです。標本分散と比例する統計量Wの作り方が書かれています。この講から何か核心に入っていく感じです。ワクワクします。

f:id:saponte:20170702204924p:plain

免責

ノートには著作権法に抵触しないよう、自主規制が入ります。

本の紹介