ch_stat
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| ch_stat [2018/01/06 16:51] – kanemune | ch_stat [2018/01/06 21:49] (現在) – kanemune | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | # ドリトル 統計機能 (V3.22) | ||
| + | ドリトルは教育用に設計されたオブジェクト指向型のプログラミング言語です。本文書ではドリトルの統計機能について解説しています。 | ||
| + | |||
| + | # 1.ドリトル | ||
| + | ## 1.1 インストールとプログラムの実行 | ||
| + | 本文書の統計機能はV3.22以降のドリトルに含まれています。次のサイトからドリトルをダウンロードしてください。(オンライン版は未対応です) | ||
| + | * [[http:// | ||
| + | |||
| + | ドリトルを起動後、編集画面にプログラム入力し、「実行!」ボタンでプログラムを実行してください。 | ||
| + | |||
| + | をご覧ください。 | ||
| + | |||
| + | ### 1.2.1 オブジェクトを作る | ||
| + | ドリトルでは、オブジェクトを作り、それに命令を送る形でプログラムを動作させます。ドリトルには、数値オブジェクトや文字列オブジェクト、画面上でグラフィックスを用いて絵を書いたりするタートルオブジェクトなど、さまざまな種類のオブジェクトが標準で用意されています。 | ||
| + | |||
| + | ここでは、複数の文字列を表示するオブジェクトであるリストオブジェクトを例に、ドリトルによるプログラミングの流れを紹介します。まず、オブジェクトを作るには、作りたいオブジェクトの名前に作るという命令を送ります。命令を送るには「!」の記号を使い、命令を送るオブジェクトを指定します。文の最後には「。」が必要です。 | ||
| + | |||
| + | |||
| + | ^オブジェクトを作る^ | ||
| + | |オブジェクト!作る。| | ||
| + | |||
| + | |||
| + | リストオブジェクトを作成する場合は以下のようになります。実行すると画面にリストオブジェクトが表示されます。 | ||
| + | < | ||
| + | 1. リスト!作る。 | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | ### 1.2.2 オブジェクトに名前をつける | ||
| + | ドリトルでは、オブジェクトを指定して命令を送ります。先ほど作ったプログラムでは、生成したオブジェクトに名前を付けていないため、画面に表示されたオブジェクトに命令を送ることはできません。オブジェクトに名前を付けるには、『名前 = オブジェクト。』のように、「 = 」の左辺に名前を書き、右辺にオブジェクトを指定します。 | ||
| + | |||
| + | |||
| + | ^オブジェクトに名前をつける^ | ||
| + | |名前=オブジェクト。| | ||
| + | |||
| + | |||
| + | 先ほどのリストオブジェクトに名前をつけたい場合は、以下のように記述します。 | ||
| + | |||
| + | < | ||
| + | 1. 表示エリア=リスト!作る。 | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | 実行すると、画面に変化はありませんが、作成したリストには「表示エリア」と言う名前がついています。この名前は変数とも呼れます。複数のオブジェクトに同じ名前をつけた場合には、その名前は最後のオブジェクトの名前になります。 | ||
| + | |||
| + | |||
| + | ### 1.2.3 オブジェクトに命令を送る | ||
| + | ドリトルでは、オブジェクトに命令を送ることでプログラムを実行します。命令を送るオブジェクトは「 ! 」で指定し、その右側に送る命令を書きます。たとえば、以下のプログラムは、「表示エリア」に対して『120 書く』という命令を送っています。ここで[書く]は命令、「120」は命令とともに送られる値であり、パラメータ(引数)と呼ばれます。パラメータと命令の間には、空白を入れる必要があります。また、引数は文字列の場合はダブルクォーテーション(" | ||
| + | |||
| + | < | ||
| + | 1. 表示エリア=リスト!作る。 | ||
| + | 2. 表示エリア!120 書く。 | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | ### 1.2.4 オブジェクトに続けて命令を送る | ||
| + | ドリトルのプログラムは上から順に1行ずつ実行されます。以下に、「表示エリア」に複数の命令を送る例を示します。 | ||
| + | |||
| + | < | ||
| + | 1. 表示エリア=リスト!作る。 | ||
| + | 2. 表示エリア!120 書く。 | ||
| + | 3. 表示エリア!150 書く。 | ||
| + | </ | ||
| + | |||
| + | 上記のプログラムを実行すると、まず1行目が実行され、「表示エリア」という名前の付いたリストが作られます。次に、2行目が実行され、表示エリアと名付けられたリストオブジェクトに120という値が書き込まれます。さらに、3行目が実行され、リストオブジェクトの2行目に150という値が書き込まれます。 | ||
| + | |||
| + | この例では、3行のプログラムを書きました。ドリトルには命令の実行結果に続けて命令をするカスケードという機能があり、以下のように書くことも可能です。 | ||
| + | |||
| + | < | ||
| + | 1. 表示エリア=リスト!作る。 | ||
| + | 2. 表示エリア!120 書く 150 書く。 | ||
| + | </ | ||
| + | |||
| + | {{: | ||
| + | |||
| + | |||
| + | 上の2つのプログラムは、どちらのプログラムを実行しても同じ結果が得られます。下の方のプログラムでは、「表示エリア」と名前の付いたリストオブジェクトに対して『120 書く』という命令を実行し、120を書き込んでいます。さらに、120を書き込んだ結果のオブジェクトに対して『150 書く』という命令を実行しています。 | ||
| + | |||
| + | |||
| + | |||
| + | # 2.ドリトルの統計機能 | ||
| + | |||
| + | 本章では、ドリトルの統計機能について説明します。 | ||
| + | |||
| + | * データ入力 (データファイルの読み込み、配列でのデータ作成) … 2.1節、 2.2節 | ||
| + | * データ処理 (扱うデータの範囲を絞る、並び替え等) … 2.3節 | ||
| + | * データ分析 (相関係数や度数分布等) … 2.4節 | ||
| + | * データの可視化(グラフや表の描画・表示) … 2.5節 | ||
| + | |||
| + | |||
| + | ## 2.1 テーブルオブジェクトの作成 | ||
| + | |||
| + | 統計機能ではテーブルオブジェクトにより、データを表のように扱うことができます。テーブルオブジェクトの持つ表形式のデータをテーブルと呼びます。テーブルオブジェクトは、外部データを読み込む方法と配列を使って作成する方法の2種類の方法で作成できます。 | ||
| + | |||
| + | ### 2.1.1 外部データの読み込みによる作成 | ||
| + | 次のようなテキストファイルからデータを読み込むことができます。Excelなどの表計算ソフトでは、保存時に「テキスト(タブ区切り)(*.txt)」を選びます。保存されたファイルの拡張子は「.txt」のままでも扱えますが、「.tsv」に変更しておくとタブ区切りであることが明確になります。 | ||
| + | |||
| + | * 1行目は各列のフィールド名を書きます。フィールド名には漢字/ | ||
| + | * フィールド名には記号を含む名前は使えません。数字で始まるフィールド名は、先頭に「F」のような英字が付けられた形で読み込まれます。 | ||
| + | * 1列目は主キーとなる重複のないデータを置きます。 | ||
| + | * フィールド名やデータの間はタブまたはカンマで区切ります。ファイルの1行目がタブで区切られていた場合はタブで、そうでない場合はカンマで区切る形で読み込まれます。 | ||
| + | * 文字コードは「シフトJIS」が標準です。 | ||
| + | |||
| + | |||
| + | タブとカンマ以外の区切り文字を使う場合は、テーブルオブジェクトの「区切り文字」メソッドで指定してください。「シフトJIS」以外の文字コードのファイルを読み込む場合は、「文字コード」メソッドで「UTF-8」などを指定してください。 | ||
| + | |||
| + | ここではドリトルに標準で用意されている「data/ | ||
| + | |||
| + |  | ||
| + | |||
| + | 次のプログラムでは「school.tsv」から、テーブルオブジェクトを作成し、「通学データ」という変数に代入しています。 | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | </ | ||
| + | |||
| + | ^外部データの読み込み^ | ||
| + | |テーブルオブジェクト名=テーブル!" | ||
| + | |||
| + | |||
| + | 次のプログラムでは、区切り文字を「, | ||
| + | |||
| + | < | ||
| + | 1. 例題=テーブル!"," | ||
| + | </ | ||
| + | |||
| + | ^区切り文字の指定^ | ||
| + | |テーブルオブジェクト!" | ||
| + | ^文字コードの指定^ | ||
| + | |テーブルオブジェクト!" | ||
| + | |||
| + | ファイル名が間違っている等の理由でファイルを読めない場合には、「ファイルから作る」メソッドは未定義オブジェクト(undef)を返します。未定義オブジェクトに「表示」などの命令を送ると「オブジェクトが作られていません」というエラーが表示されます。 | ||
| + | |||
| + | 次のようなエラーが表示された場合は、2行目で未定義オブジェクトに「表示」が送られていますので、1行目で通学データに未定義オブジェクトが代入されたことがわかります。1行目の「ファイルから作る」が正しく実行されてテーブルオブジェクトを返すのではなく、正しく実行されずに未定義オブジェクトを返していますので、その理由を検討してください。この例では、「data/ | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | |||
| + | テーブルオブジェクトの生成後に、フィールド名を変更することができます。以下のプログラムは、" | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 通学データ!" | ||
| + | </ | ||
| + | |||
| + | ^フィールド名の変更^ | ||
| + | |テーブルオブジェクト!" | ||
| + | |||
| + | |||
| + | ### 2.1.2 プログラム中でデータを作る | ||
| + | テーブルオブジェクトをファイルからではなくプログラムの中で作ることができます。テーブルオブジェクトを生成する際に引数としてフィールド名を記述します。以下のプログラムでは最初に通学データという名前で6個のフィールドを持つテーブルオブジェクトを作成しています。次に、[追加]命令を使い、通学データに対して1レコードずつデータを追加しています。 | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 通学データ! 1 " | ||
| + | 3. 通学データ! 2 " | ||
| + | 4. 通学データ! 3 " | ||
| + | 5. 通学データ! 4 " | ||
| + | 6. 通学データ! 5 " | ||
| + | </ | ||
| + | |||
| + | ## 2.2 テーブルオブジェクトの表示 | ||
| + | |||
| + | テーブルを実行画面へ出力するには、[表示]命令を使います。テーブルは[表示]命令を使って出力できます。以下の例では、「通学データ」という名前のテーブルオブジェクトのテーブルを実行画面に新しく、テキストエリアとして表示します。データ中の欠損値は「NA」と表示されます。 | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 通学データ!表示。 | ||
| + | </ | ||
| + | |||
| + | ^表示^ | ||
| + | |テーブルオブジェクト!表示。| | ||
| + | |||
| + | |||
| + | |||
| + | ## 2.3 テーブルオブジェクトのデータ操作 | ||
| + | |||
| + | データ分析を行うために必要なデータ処理を行います。テーブルオブジェクトに対して、フィールド(列)やレコード(行)の抽出や複数のテーブルの結合など、データベース操作と同様の処理を施すことができます。これらの機能を利用することで、抽出したレコードやフィールドのデータに計算を行ったり、グラフを描画したりすることができます。また、データを昇順、降順に並べ替えたり、重複するデータを削除したりする機能もあります。 | ||
| + | |||
| + | ### 2.3.1 選択:レコード(行)の抽出 | ||
| + | テーブルから条件に該当するレコード(行)を取り出します。以下の例では、" | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 結果=通学データ!「住所==" | ||
| + | 3. 結果!表示。 | ||
| + | </ | ||
| + | |||
| + | |||
| + | ^選択:レコード(行)の抽出^ | ||
| + | | テーブルオブジェクト!「フィールド名== " | ||
| + | |||
| + | |||
| + | 本機能を活用することで、指定したフィールドの特定の検索条件に該当するデータに対して平均値や合計値等を算出できます。以下の例は、" | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 結果=通学データ!「住所==" | ||
| + | 3. 結果!" | ||
| + | </ | ||
| + | |||
| + | ### 2.3.2 射影:フィールド(列)の抽出 | ||
| + | テーブルから条件に該当するフィールド(列)を取り出します。以下の例では、" | ||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 結果=通学データ!" | ||
| + | 3. 結果!表示。 | ||
| + | </ | ||
| + | |||
| + | ^選択:レコード(行)の抽出^ | ||
| + | | テーブルオブジェクト!" | ||
| + | |||
| + | ### 2.3.3 結合:テーブルオブジェクト同士の結合 | ||
| + | 2つのテーブルを結合したテーブルを作ります。2つのテーブルには、共通のフィールドが1個以上存在する必要があります。以下の例では「住所データ」と「読書データ」の2つのテーブルオブジェクトを結合し、「通学データ」というテーブルオブジェクトを作成しています。 | ||
| + | |||
| + | < | ||
| + | 1. 住所データ=テーブル!" | ||
| + | 2. 住所データ!1 " | ||
| + | 3. 住所データ!2 " | ||
| + | 4. 読書データ=テーブル!" | ||
| + | 5. 読書データ!1 0.5 2015 追加。 | ||
| + | 6. 読書データ!2 1 2015 追加。 | ||
| + | 7. 通学データ=住所データ!(読書データ) 結合 表示。 | ||
| + | </ | ||
| + | |||
| + | ^選択:レコード(行)の抽出^ | ||
| + | | テーブルオブジェクト!(結合するテーブルオブジェクト) 結合。 | | ||
| + | |||
| + | |||
| + | ### 2.3.4 レコードの追加 | ||
| + | テーブルに新たなレコードを追加します。以下の例では、ファイルから作成したテーブルに2件のレコードを追加し表示しています。 | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 通学データ!73 " | ||
| + | 3. 通学データ!74 " | ||
| + | 4. 通学データ!表示。 | ||
| + | </ | ||
| + | |||
| + | ^追加:レコード(行)の挿入^ | ||
| + | | テーブルオブジェクト!データ1 データ2... 追加。 | | ||
| + | |||
| + | |||
| + | ### 2.3.5 レコードの並べ替え:昇順・降順 | ||
| + | 並べ替えの基準となるフィールドを指定し、昇順あるいは降順に並べ替えます。 | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 通学データ!" | ||
| + | 3. 通学データ!" | ||
| + | </ | ||
| + | |||
| + | ^レコードの並べ替え:昇順^ | ||
| + | | テーブルオブジェクト!" | ||
| + | ^レコードの並べ替え:降順^ | ||
| + | | テーブルオブジェクト!" | ||
| + | |||
| + | |||
| + | ### 2.3.6 重複の削除 | ||
| + | テーブル内の重複するレコードを取り除きます。この命令は引数を取りません。以下の例では、通学データから住所のフィールドのみを取り出し、データの重複を取り除いて表示しています。 | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 結果=通学データ!" | ||
| + | 3. 結果!重複なし 表示。 | ||
| + | </ | ||
| + | |||
| + | ^重複なし:重複の削除^ | ||
| + | | テーブルオブジェクト!重複なし。 | | ||
| + | |||
| + | |||
| + | |||
| + | ## 2.4 統計関数 | ||
| + | |||
| + | 作成したテーブルオブジェクトに対して統計処理を行えます。関数を実行すると、算出したデータを含むテーブルオブジェクトが返ります。 | ||
| + | |||
| + | テーブルの中で、データが入っていない箇所(欠損値)は「NA」と表示されます。統計関数では欠損値を対象から除いて処理が行われます。 | ||
| + | |||
| + | 引数の数が足りない場合、関数は未定義オブジェクト(undef)を返します。合計値のような数値を処理する関数は、データ中に文字列などの数値以外のデータが存在する場合は未定義オブジェクト(undef)を返します。 | ||
| + | |||
| + | 処理結果は[配列にする]命令を使うことで、テーブルオブジェクトの値を配列として取得できます。また、[数にする]命令を使うことで、テーブルオブジェクトの値を数値として取得できます。[数にする]命令は複数の数値が結果としてある場合には一番目の要素を返します。 | ||
| + | |||
| + | 以下の例では、" | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 結果=通学データ!" | ||
| + | 3. 結果の配列=結果!配列にする。 | ||
| + | 4. 結果の数値=結果!数にする。 | ||
| + | 5. ラベル!(結果の配列) 作る。 | ||
| + | 6. ラベル!(結果の数値) 作る。 | ||
| + | </ | ||
| + | |||
| + | |||
| + | ^配列にする^ | ||
| + | | テーブルオブジェクト!配列にする。 | | ||
| + | ^数にする^ | ||
| + | | テーブルオブジェクト!数にする。 | ||
| + | |||
| + | |||
| + | ### 2.4.1 合計値 | ||
| + | 指定した1つのフィールドの合計値を算出します。以下の例では、" | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 通学データ!" | ||
| + | </ | ||
| + | |||
| + | を算出します。以下の例では、" | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 通学データ!" | ||
| + | </ | ||
| + | |||
| + | を算出し、級数ごとに度数を算出します。級数はスタージェスの公式を用いて算出されます。以下の例では、" | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 通学データ!" | ||
| + | </ | ||
| + | |||
| + | を求めるために、[クロス集計]命令を使って " | ||
| + | |||
| + | を求めるために、[クロス集計]命令を使って" | ||
| + | |||
| + | を求めるために、[クロス集計]命令を使って " | ||
| + | |||
| + | を求めるために、[クロス集計]命令を使って " | ||
| + | |||
| + |  縦軸間隔。 | | ||
| + | |||
| + | |||
| + | ### 2.6.2 横軸タイトル | ||
| + | グラフの横軸のタイトルを設定します。 | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 結果=通学データ!" | ||
| + | 3. 結果!" | ||
| + | </ | ||
| + | |||
| + | |||
| + | ^横軸タイトル変更:グラフの横軸のタイトルを設定する^ | ||
| + | | グラフ!" | ||
| + | |||
| + | |||
| + | ### 2.6.3 縦軸タイトル | ||
| + | グラフの縦軸のタイトルを設定します(現在は縦書き文字に対応していないため、()などの記号は表示が崩れます)。 | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 結果=通学データ!" | ||
| + | 3. 結果!" | ||
| + | </ | ||
| + | |||
| + | |||
| + | ^縦軸タイトル:グラフの縦軸のタイトルを設定する^ | ||
| + | | グラフ!" | ||
| + | |||
| + | ### 2.6.4 位置の指定 | ||
| + | グラフを描画するときの原点(縦軸と横軸の交点)の位置を絶対座標で指定できます(円グラフの場合は中心が原点となります)。 | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 結果=通学データ!" | ||
| + | </ | ||
| + | |||
| + | ^位置:原点を絶対座標で移動させる^ | ||
| + | | グラフ!(横方向の位置) (縦方向の位置) 位置。 | | ||
| + | |||
| + | ### 2.6.5 移動する | ||
| + | グラフを描画するときの原点(縦軸と横軸の交点)の位置を相対座標で指定します(円グラフの場合は中心が原点となります)。 | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 結果=通学データ!" | ||
| + | </ | ||
| + | |||
| + | |||
| + | ^移動する:原点を相対座標で移動させる^ | ||
| + | | グラフ!(横方向の位置) (縦方向の位置) 移動する。 | | ||
| + | |||
| + | ### 2.6.6 描画 | ||
| + | グラフオブジェクトからグラフを画面に出力します。 | ||
| + | |||
| + | < | ||
| + | 1. 通学データ=テーブル!" | ||
| + | 2. 結果=通学データ!" | ||
| + | </ | ||
| + | |||
| + | ^描画:画面にグラフを出力する^ | ||
| + | | グラフオブジェクト!描画。 | | ||
