[我分享] 统计数组中各数字(元素)出现的次数

  [复制链接]
谢中华 发表于 2010-3-8 21:19:52
在论坛上经常遇到这样的问题:如何统计一个数组中各数字(元素)出现的频数、频率和累积频率?这里以案例形式做一个总结。


第一种方法:调用MATLAB自带的函数tabulate统计一个数组中各数字(元素)出现的频数、频率

【例1】统计数值型数组中各元素出现的频数、频率。

  1. >> x = [2  2  6  5  2  3  2  4  3  4  3  4  4  4  4  2  2
  2.       6  0  4  7  2  5  8  3  1  3  2  5  3  6  2  3  5
  3.       4  3  1  4  2  2  2  3  1  5  2  6  3  4  1  2  5];
  4. >> tabulate(x(:))
  5.   Value    Count   Percent
  6.       0        1      1.96%
  7.       1        4      7.84%
  8.       2       14     27.45%
  9.       3       10     19.61%
  10.       4       10     19.61%
  11.       5        6     11.76%
  12.       6        4      7.84%
  13.       7        1      1.96%
  14.       8        1      1.96%
复制代码

【例2】统计字符串中各字符出现的频数、频率。

  1. >> x = ['If x is a numeric array, TABLE is a numeric matrix.']';
  2. >> tabulate(x)
  3.   Value    Count   Percent
  4.       I        1      2.44%
  5.       f        1      2.44%
  6.       x        2      4.88%
  7.       i        5     12.20%
  8.       s        2      4.88%
  9.       a        5     12.20%
  10.       n        2      4.88%
  11.       u        2      4.88%
  12.       m        3      7.32%
  13.       e        2      4.88%
  14.       r        5     12.20%
  15.       c        2      4.88%
  16.       y        1      2.44%
  17.       ,        1      2.44%
  18.       T        1      2.44%
  19.       A        1      2.44%
  20.       B        1      2.44%
  21.       L        1      2.44%
  22.       E        1      2.44%
  23.       t        1      2.44%
  24.       .        1      2.44%
复制代码

【例3】统计字符型数组中各行元素出现的频数、频率。

  1. >> x = ['崔家峰';'孙乃喆';'安立群';'王洪武';'王玉杰';'高纯静';'崔家峰';
  2.         '叶 鹏';'关泽满';'谢中华';'王宏志';'孙乃喆';'崔家峰';'谢中华'];
  3. >> tabulate(x)
  4.   Value    Count   Percent
  5.     崔家峰        3     21.43%
  6.     孙乃喆        2     14.29%
  7.     安立群        1      7.14%
  8.     王洪武        1      7.14%
  9.     王玉杰        1      7.14%
  10.     高纯静        1      7.14%
  11.     叶 鹏        1      7.14%
  12.     关泽满        1      7.14%
  13.     谢中华        2     14.29%
  14.     王宏志        1      7.14%
复制代码

【例4】统计字符串元胞数组中各字符串出现的频数、频率。

  1. >> x = {'崔家峰';'孙乃喆';'安立群';'王洪武';'王玉杰';'高纯静';'崔家峰';
  2. '叶鹏';'关泽满';'谢中华';'王宏志';'孙乃喆';'崔家峰';'谢中华'};
  3. >> tabulate(x)
  4.   Value    Count   Percent
  5.     崔家峰        3     21.43%
  6.     孙乃喆        2     14.29%
  7.     安立群        1      7.14%
  8.     王洪武        1      7.14%
  9.     王玉杰        1      7.14%
  10.     高纯静        1      7.14%
  11.      叶鹏        1      7.14%
  12.     关泽满        1      7.14%
  13.     谢中华        2     14.29%
  14.     王宏志        1      7.14%
复制代码

【例5】统计名义尺度(如性别,职业,产品型号等)数组中各元素出现的频数、频率。

  1. >> load fisheriris
  2. >> species = nominal(species);
  3. >> tabulate(species)
  4.        Value    Count   Percent
  5.       setosa       50     33.33%
  6.   versicolor       50     33.33%
  7.    virginica       50     33.33%
复制代码

第二种方法:自编效率更高的函数HistRate(代码如下),调用HistRate函数统计一个数组中各数字(元素)出现的频数、频率和累积频率。
函数HistRate的代码:

游客,如果您要查看本帖隐藏内容请回复

【例1】统计数值型数组中各元素出现的频数、频率和累积频率。

  1. >> x = [2  2  6  5  2  3  2  4  3  4  3  4  4  4  4  2  2
  2.       6  0  4  7  2  5  8  3  1  3  2  5  3  6  2  3  5
  3.       4  3  1  4  2  2  2  3  1  5  2  6  3  4  1  2  5];
  4. >> HistRate(x)
  5.          取值         频数       频率      累积频率
  6.            0            1       1.96%       1.96%
  7.            1            4       7.84%       9.80%
  8.            2           14      27.45%      37.25%
  9.            3           10      19.61%      56.86%
  10.            4           10      19.61%      76.47%
  11.            5            6      11.76%      88.24%
  12.            6            4       7.84%      96.08%
  13.            7            1       1.96%      98.04%
  14.            8            1       1.96%     100.00%
复制代码

【例2】统计字符串中各字符出现的频数、频率和累积频率。

  1. >> x = ['If x is a numeric array, TABLE is a numeric matrix.']';
  2. >> HistRate(x)

  3. ans =

  4.     '取值'    '频数'    '频率(%)'    '累积频率(%)'
  5.     'I'       [   1]    [ 2.4390]    [     2.4390]
  6.     'f'       [   1]    [ 2.4390]    [     4.8780]
  7.     'x'       [   2]    [ 4.8780]    [     9.7561]
  8.     'i'       [   5]    [12.1951]    [    21.9512]
  9.     's'       [   2]    [ 4.8780]    [    26.8293]
  10.     'a'       [   5]    [12.1951]    [    39.0244]
  11.     'n'       [   2]    [ 4.8780]    [    43.9024]
  12.     'u'       [   2]    [ 4.8780]    [    48.7805]
  13.     'm'       [   3]    [ 7.3171]    [    56.0976]
  14.     'e'       [   2]    [ 4.8780]    [    60.9756]
  15.     'r'       [   5]    [12.1951]    [    73.1707]
  16.     'c'       [   2]    [ 4.8780]    [    78.0488]
  17.     'y'       [   1]    [ 2.4390]    [    80.4878]
  18.     ','       [   1]    [ 2.4390]    [    82.9268]
  19.     'T'       [   1]    [ 2.4390]    [    85.3659]
  20.     'A'       [   1]    [ 2.4390]    [    87.8049]
  21.     'B'       [   1]    [ 2.4390]    [    90.2439]
  22.     'L'       [   1]    [ 2.4390]    [    92.6829]
  23.     'E'       [   1]    [ 2.4390]    [    95.1220]
  24.     't'       [   1]    [ 2.4390]    [    97.5610]
  25.     '.'       [   1]    [ 2.4390]    [        100]
复制代码

【例3】统计字符型数组中各行元素出现的频数、频率和累积频率。

  1. >> x = ['崔家峰';'孙乃喆';'安立群';'王洪武';'王玉杰';'高纯静';'崔家峰';
  2.         '叶 鹏';'关泽满';'谢中华';'王宏志';'孙乃喆';'崔家峰';'谢中华'];
  3. >> HistRate(x)

  4. ans =

  5.     '取值'      '频数'    '频率(%)'    '累积频率(%)'
  6.     '崔家峰'    [   3]    [21.4286]    [    21.4286]
  7.     '孙乃喆'    [   2]    [14.2857]    [    35.7143]
  8.     '安立群'    [   1]    [ 7.1429]    [    42.8571]
  9.     '王洪武'    [   1]    [ 7.1429]    [         50]
  10.     '王玉杰'    [   1]    [ 7.1429]    [    57.1429]
  11.     '高纯静'    [   1]    [ 7.1429]    [    64.2857]
  12.     '叶 鹏'     [   1]    [ 7.1429]    [    71.4286]
  13.     '关泽满'    [   1]    [ 7.1429]    [    78.5714]
  14.     '谢中华'    [   2]    [14.2857]    [    92.8571]
  15.     '王宏志'    [   1]    [ 7.1429]    [        100]
复制代码

【例4】统计字符串元胞数组中各字符串出现的频数、频率和累积频率。

  1. >> x = {'崔家峰';'孙乃喆';'安立群';'王洪武';'王玉杰';'高纯静';'崔家峰';
  2. '叶鹏';'关泽满';'谢中华';'王宏志';'孙乃喆';'崔家峰';'谢中华'};
  3. >> HistRate(x)

  4. ans =

  5.     '取值'      '频数'    '频率(%)'    '累积频率(%)'
  6.     '崔家峰'    [   3]    [21.4286]    [    21.4286]
  7.     '孙乃喆'    [   2]    [14.2857]    [    35.7143]
  8.     '安立群'    [   1]    [ 7.1429]    [    42.8571]
  9.     '王洪武'    [   1]    [ 7.1429]    [         50]
  10.     '王玉杰'    [   1]    [ 7.1429]    [    57.1429]
  11.     '高纯静'    [   1]    [ 7.1429]    [    64.2857]
  12.     '叶鹏'      [   1]    [ 7.1429]    [    71.4286]
  13.     '关泽满'    [   1]    [ 7.1429]    [    78.5714]
  14.     '谢中华'    [   2]    [14.2857]    [    92.8571]
  15.     '王宏志'    [   1]    [ 7.1429]    [        100]
复制代码

【例5】统计名义尺度(如性别,职业,产品型号等)数组中各元素出现的频数、频率和累积频率。

  1. >> load fisheriris
  2. >> species = nominal(species);
  3. >> HistRate(species)

  4. ans =

  5.     '取值'          '频数'    '频率(%)'    '累积频率(%)'
  6.     'setosa'        [  50]    [33.3333]    [    33.3333]
  7.     'versicolor'    [  50]    [33.3333]    [    66.6667]
  8.     'virginica'     [  50]    [33.3333]    [        100]
复制代码





[ 本帖最后由 谢中华 于 2010-3-22 20:46 编辑 ]

623 条回复


liuhuanjinliu 发表于 2010-3-8 21:43:16
谢谢谢老师!呵呵

谢中华 发表于 2010-3-8 21:47:07

回复 2# liuhuanjinliu 的帖子

客气,大家同道中人,共同提高吧!

hgsz2003 发表于 2010-3-9 00:28:01
谢老师啊 必须和您多交流了 我是统计的研究生。呵呵 这个正是统计对数据描述上的频数表法 呵呵。 学习下

henshui 发表于 2010-3-11 14:39:45
刚想怎么设计个程序呢!呵呵有现成的函数 省事了!!

freedom2010 发表于 2010-3-16 19:22:19
学习了,谢谢您。
不过有一个疑问还想向您请教一下,我用的是MATLAB7.0,怎么没有histrate呢?
如下

help HistRate

HistRate.m not found.

Use the Help browser Search tab to search the documentation, or
type "help help" for help command options, such as help for methods.

谢中华 发表于 2010-3-16 19:49:52
哈哈,HistRate是我自己编的函数,效率比MATLAB自带的tabulate函数要高。

freedom2010 发表于 2010-3-16 19:51:36
知道了,谢谢

shengxuanyi 发表于 2010-3-20 10:18:30
例题中的名字好熟悉啊,呵呵,!很实用的函数!赞!

zouyi@ 发表于 2010-3-24 14:56:21
请问 累计频率是什么意思呢

yuaner2001 发表于 2010-3-24 18:50:27
谢老师,将出版的书中有上面这些函数的代码吗?
我准备预定,目前有项工作急需这些功能。
另外,Matlab有关于统计的工具箱吗?在哪里可以免费下?我是Matlab新手,请多指教。

谢中华 发表于 2010-3-24 19:48:01

回复 10# zouyi@ 的帖子

某个点对应的累积频率就是这个点左侧(包括该点)的频率之和。

谢中华 发表于 2010-3-24 19:51:58

回复 11# yuaner2001 的帖子

书中生成随机数一章中有HistRate函数的代码,安装MATLAB后,安装目录下有自带的统计工具箱,不需下载。

li_bbin 发表于 2010-3-27 11:04:05
高~~~~~~~~~

tyut2002489 发表于 2010-3-27 11:18:28
好棒啊!

liudao 发表于 2010-6-11 17:36:39
例题中的名字好熟悉啊,呵呵,!很实用的函数!赞!

zhjstef 发表于 2010-7-16 10:27:16
这个要看看。正在拜读老师的书

shaotao527 发表于 2010-8-15 21:18:49
呵呵!学习一下,谢谢了

expertdu 发表于 2010-10-6 13:40:15

histrate

histrate代码是什么?谢谢!

qwesan123 发表于 2010-10-8 04:54:14
  谢谢分享

谢中华 发表于 2010-10-8 09:01:25

回复 19# expertdu 的帖子

作者自编的函数,书中有代码。

yoyo-leo 发表于 2010-10-11 11:46:12
谢谢版主,要好好向您学习呀

hsh3303 发表于 2010-10-18 20:01:48
居然,要买书,才可以,杯具,

[ 本帖最后由 hsh3303 于 2010-10-18 20:04 编辑 ]

菜头 发表于 2010-12-30 08:56:44
进来看下老师的分析

gechengwei 发表于 2011-1-8 12:18:24
谢谢分享……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表