【PHP】度数分布表作成ツールPHP-FrequencyTableアップデート(Version 1.2.0)

PHP

以前作成した度数分布表作成ツール「PHP-FrequencyTable」をVersion 1.2.0にアップデートしました。

主な変更点は次の通りです。

▼機能面:

  • 日本語サポート追加(表の表示項目)
  • csv() の仕様変更
  • tsv() の仕様変更
  • html() の仕様変更
  • parse() の仕様変更
  • show()メソッド削除(markdown()で代用可)

▼構成面:

  • ドキュメントの整理
  • exampleコードの追加
  • 内部コードの整理とPSR12対応
  • 設定をNeonで対応
  • 静的解析対応 (PHPStan/PHPCS/PHPMD)
  • GitHub Workflow追加(PR時テスト/自動タグ付け)

インストールは以前同様、Composerでサクッとできます。(PHP8.0以降)

composer require macocci7/php-frequency-table

日本語サポート追加

以前は英語での表示しかありませんでしたが、

日本語でも度数分布表を表示できるようにしました。

英語日本語
Class階級
Frequency度数
Relative Frequency相対度数
Cumulative Frequency累積度数
Cumulative Relative Frequency累積相対度数
Class Value階級値

言語関連のメソッドは次の通りです。

メソッド引数戻り値説明
langs()(なし)arrayサポート言語のリスト
[ 0 => ‘eng’, 1 => ‘ja’, ]
lang()(なし)string設定されている言語名
(デフォルト:’eng’)
lang()string $langFrequencyTable言語を$langに設定する。

▼サンプルコード

<?php

require_once('../vendor/autoload.php');

use Macocci7\PhpFrequencyTable\FrequencyTable;

$ft = new FrequencyTable([
    'data' => [ 5, 10, 12, 15, 20, 25, 30, ],
    'classRange' => 10,
]);
$ft->meanOn()->setColumns2Show($ft->getValidColumns2Show());


echo $ft->lang($lang)->markdown() . "\n\n";

▼標準出力

|階級|度数|累積度数|相対度数|累積相対度数|階級値|階級値 × 度数|
|:---:|:---:|:---:|:---:|:---:|:---:|---:|
|0 ~ 10|1|1|0.14|0.14|5.0|5.0|
|10 ~ 20|3|4|0.43|0.57|15.0|45.0|
|20 ~ 30|2|6|0.29|0.86|25.0|50.0|
|30 ~ 40|1|7|0.14|1.00|35.0|35.0|
|合計|7|7|1.00|1.00|---|135.0|
|平均|---|---|---|---|---|19.3|

▼Markdownのレンダー結果例

csv() 仕様変更 / tsv() 仕様変更

csv() と tsv() の違いは区切り文字がカンマかタブかの違いだけです。

▼引数: csv() / tsv() 共通

#引数説明
1string|null $path = null保存ファイルパス。デフォルトnull。
省略するとCSV/TSVの内容を文字列で返します。
2string $quotation = ‘”‘データ個々の括り。デフォルト:二重引用符。
3string $eol = “\n”行末コード。デフォルトLF。

仕様変更した箇所は、第二引数の型を真偽値から文字列に変更し、自由に文字列指定できるようにしました。

ダブルクオートではなくシングルクオートにもできますし、

バッククオートにもできます。

html() 仕様変更

変更点は、テーブルの見出し行の箇所で tdタグを使っていたのを、thタグに変更しただけです。

▼PHPコード例

<?php

require('../vendor/autoload.php');

use Macocci7\PhpFrequencyTable\FrequencyTable;

$ft = new FrequencyTable([
    'data' => [ 0, 5, 10, 15, 20, ],
    'classRange' => 10,
]);

$ft->meanOn()->html('test.html');

▼出力例

<table>
<tr><td>Class</td><td>Frequency</td><td>RelativeFrequency</td><td>ClassValue</td><td>ClassValue * Frequency</td></tr>
<tr><td>0 ~ 10</td><td>2</td><td>0.40</td><td>5.0</td><td>10.0</td></tr>
<tr><td>10 ~ 20</td><td>2</td><td>0.40</td><td>15.0</td><td>30.0</td></tr>
<tr><td>20 ~ 30</td><td>1</td><td>0.20</td><td>25.0</td><td>25.0</td></tr>
<tr><td>Total</td><td>5</td><td>1.00</td><td>---</td><td>65.0</td></tr>
<tr><td>Mean</td><td>---</td><td>---</td><td>---</td><td>13.0</td></tr>
</table>

▼適用CSS例

<style>
    table {
        border-collapse: separate;
        border-spacing: 0;
        border: 2px #666666 solid;
        border-radius: 12px;
        overflow: hidden;
    }
    table tr:nth-child(odd) td {
        background-color: #eeeeee;
    }
    table th {
        border-right: 1px #666666 solid;
        background-color: #0099dd;
        padding: 6px;
        white-space: nowrap;
        font-weight: bold;
        color: #ffffff;
    }
    table td {
        border-right: 1px #666666 solid;
        background-color: #ffffff;
        padding: 6px;
        white-space: nowrap;
        color: #333333;
        text-align: center;
    }
</style>

▼ブラウザ表示例

parse() 仕様変更

以前は、返り値ハッシュ配列内の

「FrequencyTable」の項目に markdown() の出力を入れていましたが、次のようにハッシュ配列に変更しました。

▼ parse() 返り値一部抜粋

    [FrequencyTable] => Array
        (
            [tableHead] => Array
                (
                    [0] => Class
                    [1] => Frequency
                    [2] => RelativeFrequency
                    [3] => ClassValue
                    [4] => ClassValue * Frequency
                )

            [classData] => Array
                (
                    [0] => Array
                        (
                            [Class] => 0 ~ 10
                            [Frequency] => 2
                            [RelativeFrequency] => 0.40
                            [ClassValue] => 5.0
                            [ClassValue * Frequency] => 10.0
                        )

                    [1] => Array
                        (
                            [Class] => 10 ~ 20
                            [Frequency] => 2
                            [RelativeFrequency] => 0.40
                            [ClassValue] => 15.0
                            [ClassValue * Frequency] => 30.0
                        )

                    [2] => Array
                        (
                            [Class] => 20 ~ 30
                            [Frequency] => 1
                            [RelativeFrequency] => 0.20
                            [ClassValue] => 25.0
                            [ClassValue * Frequency] => 25.0
                        )

                )

            [total] => Array
                (
                    [Class] => Total
                    [Frequency] => 5
                    [RelativeFrequency] => 1.00
                    [ClassValue] => ---
                    [ClassValue * Frequency] => 65.0
                )

            [mean] => Array
                (
                    [Class] => Mean
                    [Frequency] => ---
                    [RelativeFrequency] => ---
                    [ClassValue] => ---
                    [ClassValue * Frequency] => 13.0
                )

        )

このようにハッシュ配列にしておいた方が扱いやすいと思います。

show() 削除 (markdown()で代用可)

show() は

echo $ft->markdown();

で代用可能なので削除しました。

以上です。

コメント

タイトルとURLをコピーしました