macocci7/php-frequency-table

它易于使用,用于创建频率分布表。

1.4.1 2024-07-26 07:15 UTC

This package is auto-updated.

Last update: 2024-09-26 07:48:50 UTC


README

1. 功能

PHP-FrequencyTable 是一个易于操作频率表的库。

您只需设置数组中的数据和类范围,即可轻松创建频率表。

您可以将它们以某些格式获取或保存,如 Markdown 表格、CSV、TSV 和 HTML。

支持英语(默认)和日语。

您还可以获取 PHP 的哈希数组解析数据。

2. 内容

3. 要求

  • PHP 8.1 或更高版本
  • Composer

4. 安装

composer require macocci7/php-frequency-table

5. 使用

5.1. 基本用法

您可以使用以下方式使用 FrequencyTable 类。

  • PHP: examples/BasicUsage.php

    <?php
    
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use Macocci7\PhpFrequencyTable\FrequencyTable;
    
    $ft = new FrequencyTable([
        'data' => [ 0, 5, 10, 15, 20, ],
        'classRange' => 10,
    ]);
    echo $ft->meanOn()->markdown();
  • 输出: examples/BasicUsage.md

    |Class|Frequency|RelativeFrequency|ClassValue|ClassValue * Frequency|
    |:---:|:---:|:---:|:---:|---:|
    |0 ~ 10|2|0.40|5.0|10.0|
    |10 ~ 20|2|0.40|15.0|30.0|
    |20 ~ 30|1|0.20|25.0|25.0|
    |Total|5|1.00|---|65.0|
    |Mean|---|---|---|13.0|
  • 查看: examples/BasicUsage.md

  • 详细信息

    • 导入自动加载器: require_once __DIR__ . '/../vendor/autoload.php';
    • 声明: use Macocci7\PhpFrequencyTable\FrequencyTable;
    • 实例化: new FrequencyTable()
      • 选项参数: dataclassRangecolumns2Show
        • data: 数组
        • classRange: 整数
        • columns2Show: 数组,可接受的值如下
          • 'Class'
          • 'Frequency'
          • 'CumulativeFrequency'
          • 'RelativeFrequency'
          • 'CumulativeRelativeFrequency'
          • 'ClassValue'
          • 'ClassValue * Frequency'
          • 'Subtotal'
          • 'RelativeSubtotal'
          • 'CumulativeRelativeSubtotal'
    • 平均行: 默认为 meanOff(),通过 meanOn() 添加。
    • 获取频率表: 通过 markdown() 以 Markdown 格式获取。

5.2. 更改数据和类范围

实例化后可以更改数据和类范围。

  • PHP: examples/ChangeDataClassRange.php

    <?php
    
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use Macocci7\PhpFrequencyTable\FrequencyTable;
    
    $ft = new FrequencyTable();
    
    $dataset = [
        'Group A' => [
            'data' => [ 90, 20, 80, 30, 70, 40, 60, ],
            'classRange' => 20,
        ],
        'Group B' => [
            'data' => [ 100, 10, 65, 40, 55, 90, 72, 84, ],
            'classRange' => 25,
        ],
    ];
    
    echo "# Frequency Tables\n\n";
    foreach ($dataset as $key => $data) {
        $ft->setClassRange($data['classRange']);
        $ft->setData($data['data']);
        echo "## " . $key . "\n\n";
        echo $ft->meanOn()->markdown() . "\n\n";
    }
  • 输出: examples/ChangeDataClassRange.md

    # Frequency Tables
    
    ## Group A
    
    |Class|Frequency|RelativeFrequency|ClassValue|ClassValue * Frequency|
    |:---:|:---:|:---:|:---:|---:|
    |20 ~ 40|2|0.29|30.0|60.0|
    |40 ~ 60|1|0.14|50.0|50.0|
    |60 ~ 80|2|0.29|70.0|140.0|
    |80 ~ 100|2|0.29|90.0|180.0|
    |Total|7|1.00|---|430.0|
    |Mean|---|---|---|61.4|
    
    
    ## Group B
    
    |Class|Frequency|RelativeFrequency|ClassValue|ClassValue * Frequency|
    |:---:|:---:|:---:|:---:|---:|
    |0 ~ 25|1|0.13|12.5|12.5|
    |25 ~ 50|1|0.13|37.5|37.5|
    |50 ~ 75|3|0.38|62.5|187.5|
    |75 ~ 100|2|0.25|87.5|175.0|
    |100 ~ 125|1|0.13|112.5|112.5|
    |Total|8|1.00|---|525.0|
    |Mean|---|---|---|65.6|
  • 查看: examples/ChangeDataClassRange.md

    频率表

    组 A

    组 B

  • 详细信息

    • 设置类范围: setClassRange()
    • 设置数据: setData()

5.3. 更改输出列

  • PHP: examples/ChangeColumns.php

    <?php
    
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use Macocci7\PhpFrequencyTable\FrequencyTable;
    
    $columns = [ 'Class', 'Frequency', ];
    $ft = new FrequencyTable([
        'data' => [ 5, 10, 15, 20, 24, 27, 29, 30, 35, 40, ],
        'classRange' => 10,
        'columns2Show' => $columns,
    ]);
    
    echo "# Changing Columns\n\n";
    
    echo "## Case1:\n\n";
    echo $ft->markdown() . "\n\n";
    
    $columns = [ 'Class', 'Frequency', 'RelativeFrequency', ];
    echo "## Case2:\n\n";
    echo $ft->setColumns2Show($columns)->markdown() . "\n\n";
    
    $columns = $ft->getValidColumns2Show();
    echo "## Case3:\n\n";
    echo $ft->setColumns2Show($columns)->meanOn()->markdown() . "\n\n";
  • 输出: examples/ChangeColumns.md

    # Changing Columns
    
    ## Case1:
    
    |Class|Frequency|
    |:---:|:---:|
    |0 ~ 10|1|
    |10 ~ 20|2|
    |20 ~ 30|4|
    |30 ~ 40|2|
    |40 ~ 50|1|
    |Total|10|
    
    
    ## Case2:
    
    |Class|Frequency|RelativeFrequency|
    |:---:|:---:|:---:|
    |0 ~ 10|1|0.10|
    |10 ~ 20|2|0.20|
    |20 ~ 30|4|0.40|
    |30 ~ 40|2|0.20|
    |40 ~ 50|1|0.10|
    |Total|10|1.00|
    
    
    ## Case3:
    
    |Class|Frequency|CumulativeFrequency|RelativeFrequency|CumulativeRelativeFrequency|ClassValue|ClassValue * Frequency|Subtotal|RelativeSubtotal|CumulativeRelativeSubtotal|
    |:---:|:---:|:---:|:---:|:---:|:---:|---:|---:|---:|---:|
    |0 ~ 10|1|1|0.10|0.10|5.0|5.0|5.00|0.02|0.02|
    |10 ~ 20|2|3|0.20|0.30|15.0|30.0|25.00|0.11|0.13|
    |20 ~ 30|4|7|0.40|0.70|25.0|100.0|100.00|0.43|0.55|
    |30 ~ 40|2|9|0.20|0.90|35.0|70.0|65.00|0.28|0.83|
    |40 ~ 50|1|10|0.10|1.00|45.0|45.0|40.00|0.17|1.00|
    |Total|10|10|1.00|1.00|---|250.0|235.00|1.00|1.00|
    |Mean|---|---|---|---|---|25.0|23.50|---|---|
  • 查看: examples/ChangeColumns.md

    更改列

    案例1

    案例2

    案例3

  • 详细信息

    • 获取可接受列: getValidColumns2Show()
    • 获取当前列: getColumns2Show()
    • 设置列: setColumns2Show()

5.4. 更改语言

支持英语和日语。默认为英语。

  • PHP: examples/ChangeLang.php

    <?php
    
    require_once __DIR__ . '/../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 "# Supported Languages\n\n";
    foreach ($ft->langs() as $index => $lang) {
        echo "## Language:[" . $lang . "]\n\n";
        echo $ft->lang($lang)->markdown() . "\n\n";
    }
  • 输出: examples/ChangeLang.md

    # Supported Languages
    
    ## Language:[eng]
    
    |Class|Frequency|CumulativeFrequency|RelativeFrequency|CumulativeRelativeFrequency|ClassValue|ClassValue * Frequency|Subtotal|RelativeSubtotal|CumulativeRelativeSubtotal|
    |:---:|:---:|:---:|:---:|:---:|:---:|---:|---:|---:|---:|
    |0 ~ 10|1|1|0.14|0.14|5.0|5.0|5.00|0.04|0.04|
    |10 ~ 20|3|4|0.43|0.57|15.0|45.0|37.00|0.32|0.36|
    |20 ~ 30|2|6|0.29|0.86|25.0|50.0|45.00|0.38|0.74|
    |30 ~ 40|1|7|0.14|1.00|35.0|35.0|30.00|0.26|1.00|
    |Total|7|7|1.00|1.00|---|135.0|117.00|1.00|1.00|
    |Mean|---|---|---|---|---|19.3|16.71|---|---|
    
    
    ## Language:[ja]
    
    |階級|度数|累積度数|相対度数|累積相対度数|階級値|階級値 × 度数|小計|相対小計|累積相対小計|
    |:---:|:---:|:---:|:---:|:---:|:---:|---:|---:|---:|---:|
    |0 ~ 10|1|1|0.14|0.14|5.0|5.0|5.00|0.04|0.04|
    |10 ~ 20|3|4|0.43|0.57|15.0|45.0|37.00|0.32|0.36|
    |20 ~ 30|2|6|0.29|0.86|25.0|50.0|45.00|0.38|0.74|
    |30 ~ 40|1|7|0.14|1.00|35.0|35.0|30.00|0.26|1.00|
    |合計|7|7|1.00|1.00|---|135.0|117.00|1.00|1.00|
    |平均|---|---|---|---|---|19.3|16.71|---|---|
  • 查看: examples/ChangeLang.md

    支持的语言

    语言:[eng]

    语言:[ja]

  • 详细信息

    • 获取支持的语言: langs()
    • 获取当前语言: lang()
    • 设置语言
      • 英语(默认): lang('eng')
      • 日语: lang('ja')

5.5. 将数据保存到 CSV

  • PHP

    <?php
    
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use Macocci7\PhpFrequencyTable\FrequencyTable;
    
    $ft = new FrequencyTable([
        'data' => [ 0, 5, 10, 15, 20, ],
        'classRange' => 10,
    ]);
    
    $ft->meanOn()->save('test.csv');
  • 结果: test.csv

    "Class","Frequency","RelativeFrequency","ClassValue","ClassValue * Frequency"
    "0 ~ 10","2","0.40","5.0","10.0"
    "10 ~ 20","2","0.40","15.0","30.0"
    "20 ~ 30","1","0.20","25.0","25.0"
    "Total","5","1.00","---","65.0"
    "Mean","---","---","---","13.0"
    
  • 详细信息

    • 保存CSV有2种选择。
      1. save(PATH)PATH 必须有 .csv 扩展名。

      2. csv(): 参数如下

        csv(
            string|null $path = null,
            string $quotation = '"',
            string $eol = "\n"
        )
        • $path: 文件路径。
          • csv文件的字节数将以整型返回。
          • 保存失败时将返回 false
          • 当给定 null 时,csv将以字符串类型返回。
        • $quotation:每个值将被 $quotation 引号引用。
          • 双引号(默认):指定 '"'
          • 单引号:指定 "'"
        • $eol:每行的末尾将以 $eol 结尾。
          • "\n"LF(换行符)
          • "\r"CR(回车符)
          • "\r\n"CRLF(回车符+换行符)

        例如

        echo $ft->csv(
            quotation: "'",
            eol: "\r\n",
        );

        结果是

        'Class','Frequency','RelativeFrequency','ClassValue','ClassValue * Frequency'
        '0 ~ 10','2','0.40','5.0','10.0'
        '10 ~ 20','2','0.40','15.0','30.0'
        '20 ~ 30','1','0.20','25.0','25.0'
        'Total','5','1.00','---','65.0'

5.6. 将数据保存到 TSV

  • PHP

    <?php
    
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use Macocci7\PhpFrequencyTable\FrequencyTable;
    
    $ft = new FrequencyTable([
        'data' => [ 0, 5, 10, 15, 20, ],
        'classRange' => 10,
    ]);
    
    $ft->meanOn()->save('test.tsv');
  • 结果: test.tsv

    "Class"	"Frequency"	"RelativeFrequency"	"ClassValue"	"ClassValue * Frequency"
    "0 ~ 10"	"2"	"0.40"	"5.0"	"10.0"
    "10 ~ 20"	"2"	"0.40"	"15.0"	"30.0"
    "20 ~ 30"	"1"	"0.20"	"25.0"	"25.0"
    "Total"	"5"	"1.00"	"---"	"65.0"
    "Mean"	"---"	"---"	"---"	"13.0"
    
  • 详细信息

    • 保存TSV有2种选择。
      1. save(PATH)PATH 必须有 .tsv 扩展名。

      2. tsv(): 参数如下

        tsv(
            string|null $path = null,
            string $quotation = '"',
            string $eol = "\n"
        )
        • $path: 文件路径。
          • tsv文件的字节数将以整型返回。
          • 保存失败时将返回 false
          • 当给定 null 时,tsv将以字符串类型返回。
        • $quotation:每个值将被 $quotation 引号引用。
          • 双引号(默认):指定 '"'
          • 单引号:指定 "'"
        • $eol:每行的末尾将以 $eol 结尾。
          • "\n"LF(换行符)
          • "\r"CR(回车符)
          • "\r\n"CRLF(回车符+换行符)

        例如

        echo $ft->tsv(
            quotation: "'",
            eol: "\r\n",
        );

        结果是

        'Class' 'Frequency'     'RelativeFrequency'     'ClassValue'    'ClassValue * Frequency'
        '0 ~ 10'        '2'     '0.40'  '5.0'   '10.0'
        '10 ~ 20'       '2'     '0.40'  '15.0'  '30.0'
        '20 ~ 30'       '1'     '0.20'  '25.0'  '25.0'
        'Total' '5'     '1.00'  '---'   '65.0'

5.7. 将数据保存到 HTML

  • PHP

    <?php
    
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use Macocci7\PhpFrequencyTable\FrequencyTable;
    
    $ft = new FrequencyTable([
        'data' => [ 0, 5, 10, 15, 20, ],
        'classRange' => 10,
    ]);
    
    $ft->meanOn()->save('test.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>
    • HTML视图

      test.html

  • 详细信息

    • 保存HTML有2种选择
      1. save(PATH)PATH 必须有 .html 扩展名。
      2. html(PATH): 参数如下
        html(string|null $path = null)
        • $path: 文件路径。
          • html文件的字节数将以整型返回。
          • 保存失败时将返回 false
          • 当给定 null 时,html将以字符串类型返回。

5.8. 将数据保存到 Markdown

  • PHP

    <?php
    
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use Macocci7\PhpFrequencyTable\FrequencyTable;
    
    $ft = new FrequencyTable([
        'data' => [ 0, 5, 10, 15, 20, ],
        'classRange' => 10,
    ]);
    
    $ft->meanOn()->save('test.md');
  • 结果: test.md

    |Class|Frequency|RelativeFrequency|ClassValue|ClassValue * Frequency|
    |:---:|:---:|:---:|:---:|---:|
    |0 ~ 10|2|0.40|5.0|10.0|
    |10 ~ 20|2|0.40|15.0|30.0|
    |20 ~ 30|1|0.20|25.0|25.0|
    |Total|5|1.00|---|65.0|
    |Mean|---|---|---|13.0|
  • 查看: test.md

  • 详细信息

    • 保存markdown有2种选择
      1. save(PATH)PATH 必须有 .md 扩展名。
      2. markdown(): 参数如下。
        markdown(string|null $path = null)
        • $path: 文件路径。
          • markdown文件的字节数将以整型返回。
          • 保存失败时将返回 false
          • 当给定 null 时,markdown将以字符串类型返回。

5.9. 获取解析数据

您也可以不显示频率表来检索解析数据。

使用 parse() 方法。 parse() 方法返回以下哈希数组。

  • PHP

    <?php
    
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use Macocci7\PhpFrequencyTable\FrequencyTable;
    
    $ft = new FrequencyTable([
        'data' => [ 0, 5, 10, 15, 20, ],
        'classRange' => 10,
    ]);
    
    print_r($ft->parse());
  • 结果

    Array
    (
        [classRange] => 10
        [data] => Array
            (
                [0] => 0
                [1] => 5
                [2] => 10
                [3] => 15
                [4] => 20
            )
    
        [Max] => 20
        [Min] => 0
        [DataRange] => 20
        [Mode] => 5
        [Total] => 5
        [Mean] => 13
        [Median] => 10
        [MedianClass] => Array
            (
                [index] => 1
                [bottom] => 10
                [top] => 20
            )
    
        [FirstQuartile] => 2.5
        [ThirdQuartile] => 17.5
        [InterQuartileRange] => 15
        [QuartileDeviation] => 7.5
        [Classes] => Array
            (
                [0] => Array
                    (
                        [bottom] => 0
                        [top] => 10
                    )
    
                [1] => Array
                    (
                        [bottom] => 10
                        [top] => 20
                    )
    
                [2] => Array
                    (
                        [bottom] => 20
                        [top] => 30
                    )
    
            )
    
        [Frequencies] => Array
            (
                [0] => 2
                [1] => 2
                [2] => 1
            )
    
        [Subtotals] => Array
            (
                [0] => 5
                [1] => 25
                [2] => 20
            )
    
        [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
                    )
    
            )
    
    )

您可以使用解析数据如下

  • PHP

    <?php
    
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use Macocci7\PhpFrequencyTable\FrequencyTable;
    
    $ft = new FrequencyTable([
        'classRange' => 10,
        'data' => [ 0, 5, 10, 15, 20, ],
    ]);
    
    $parsed = $ft->parse();
    echo "Data:[" . implode(', ', $parsed['data']) . "]\n";
    echo "Max:" . $parsed['Max'] . "\n";
    echo "Min:" . $parsed['Min'] . "\n";
    echo "Median:" . $parsed['Median'] . "\n";
    echo "Median is in the class of "
         . $parsed['MedianClass']['bottom']
         . " ~ "
         . $parsed['MedianClass']['top'] . "\n";
    echo "Total:" . $parsed['Total'] . "\n";
    echo "Mean:" . $parsed['Mean'] . "\n";
    echo "Q1:" . $parsed['FirstQuartile'] . "\n";
    echo "Q3:" . $parsed['ThirdQuartile'] . "\n";
    echo "IQR:" . $parsed['InterQuartileRange'] . "\n";
    echo "QD:" . $parsed['QuartileDeviation'] . "\n";
  • 输出

    Data:[0, 5, 10, 15, 20]
    Max:20
    Min:0
    Median:10
    Median is in the class of 10 ~ 20
    Total:5
    Mean:13
    Q1:2.5
    Q3:17.5
    IQR:15
    QD:7.5

5.10. 反向类

您可以使用 reverseClasses() 方法反向设置类列表。

  • PHP

    <?php
    
    require_once __DIR__ . '/../vendor/autoload.php';
    
    use Macocci7\PhpFrequencyTable\FrequencyTable;
    
    $ft = new FrequencyTable([
        'data' => [0, 5, 10, 15, 20, ],
        'classRange' => 10,
    ]);
    echo $ft
        ->reverseClasses()
        ->markdown();
  • 输出

    |Class|Frequency|RelativeFrequency|ClassValue|ClassValue * Frequency|
    |:---:|:---:|:---:|:---:|---:|
    |20 ~ 30|1|0.20|25.0|25.0|
    |10 ~ 20|2|0.40|15.0|30.0|
    |0 ~ 10|2|0.40|5.0|10.0|
    |Total|5|1.00|---|65.0|
  • 查看

6. 示例

7. LICENSE

MIT

文档编写日期:2023/05/18

最后更新日期:2024/07/26

版权所有 (c) 2023-2024 macocci7