macocci7 / php-frequency-table
它易于使用,用于创建频率分布表。
Requires
- php: >=8.1
- nette/neon: ^3.4
Requires (Dev)
- macocci7/php-combination: ^1.0
- php-parallel-lint/php-parallel-lint: 1.3
- phpmd/phpmd: ^2.15
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.7
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. 基本用法
- 5.2. 更改数据和类范围
- 5.3. 更改输出列
- 5.4. 更改语言
- 5.5. 将数据保存到 CSV
- 5.6. 将数据保存到 TSV
- 5.7. 将数据保存到 HTML
- 5.8. 将数据保存到 Markdown
- 5.9. 获取解析数据
5.1. 基本用法
您可以使用以下方式使用 FrequencyTable 类。
-
<?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();
-
|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|
-
详细信息
- 导入自动加载器:
require_once __DIR__ . '/../vendor/autoload.php';
- 声明:
use Macocci7\PhpFrequencyTable\FrequencyTable;
- 实例化:
new FrequencyTable()
- 选项参数:
data
、classRange
、columns2Show
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";
-
# 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|---|---|
-
更改列
案例1
案例2
案例3
-
详细信息
- 获取可接受列:
getValidColumns2Show()
- 获取当前列:
getColumns2Show()
- 设置列:
setColumns2Show()
- 获取可接受列:
5.4. 更改语言
支持英语和日语。默认为英语。
-
<?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"; }
-
# 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|---|---|
-
支持的语言
语言:[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种选择。
-
save(PATH)
:PATH
必须有.csv
扩展名。 -
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'
-
- 保存CSV有2种选择。
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种选择。
-
save(PATH)
:PATH
必须有.tsv
扩展名。 -
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'
-
- 保存TSV有2种选择。
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视图
-
-
详细信息
- 保存HTML有2种选择
save(PATH)
:PATH
必须有.html
扩展名。html(PATH)
: 参数如下html(string|null $path = null)
$path
: 文件路径。- html文件的字节数将以整型返回。
- 保存失败时将返回
false
。 - 当给定
null
时,html将以字符串类型返回。
- 保存HTML有2种选择
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种选择
save(PATH)
:PATH
必须有.md
扩展名。markdown()
: 参数如下。markdown(string|null $path = null)
$path
: 文件路径。- markdown文件的字节数将以整型返回。
- 保存失败时将返回
false
。 - 当给定
null
时,markdown将以字符串类型返回。
- 保存markdown有2种选择
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. 示例
- Example.php >> 结果在 Example.md
- ChangeDataClassRange.php >> 结果在 ChangeDataClassRange.md
- ChangeColumns.php >> 结果在 ChangeColumns.md
- ChangeLang.php >> 结果在 ChangeLang.md
- ExampleCases.php >> 结果在 ExampleCases.md
- PopulationInJapan2022.php >> 生成结果见 PopulationInJapan2022.md
- OhtaniShohei2023.php >> 生成结果见 OhtaniShohei2023.md
- OutlierDetection.php >> 生成结果见 OutlierDetection.md
- RetrieveParsedData.php >> 生成结果见 RetrieveParsedData.txt
- ReverseClasses.php >> 生成结果见 ReverseClasses.md
- FrequencyTableTest.php : 所有用法均在此代码中编写。
7. LICENSE
文档编写日期:2023/05/18
最后更新日期:2024/07/26
版权所有 (c) 2023-2024 macocci7