【问题标题】:Histogram for Column of Floating Point Numbers浮点数列的直方图
【发布时间】:2013-09-17 10:32:30
【问题描述】:

是否有一个通用的命令行 Unix 实用程序可以让您使用文件中的一列浮点数创建一个简单的直方图?

【问题讨论】:

    标签: unix histogram data-visualization


    【解决方案1】:

    这里有一些 python 可以将浮点输入文件绘制为直方图和曲线

    #  usage
    #
    #  python plot_file_of_floats.py  < /tmp/my_file_of_floats
    
    
    import matplotlib.pyplot as plt
    import sys
    
    floats = map(float, sys.stdin.read().split()) # read input file from command line
    
    
    plt.plot(floats, 'ro') # show floats as curve
    plt.figure()           # permit another plot to get rendered
    
    plt.hist(floats)  #  show histogram of floats
    plt.show()
    

    浮点数示例输入文件 /tmp/my_file_of_floats

    0
    0.3802513823806563
    0.6970557413810001
    0.8987761906537762
    0.9550334815954414
    0.8619219017964542
    0.6420060782538214
    0.339191808764492
    0.009613420853058656
    -0.2895238011697386
    -0.5108307062853145
    -0.6251519043638415
    -0.6258919548129064
    -0.5285343220241233
    -0.3656723046807657
    -0.17881005669083072
    -0.008834451885644044
    0.11272730604816542
    0.16980020199496673
    0.16398989653539123
    0.11263040266652444
    0.04327594873440613
    -0.013960516502076581
    -0.034374900159696395
    -0.005077671284778755
    

    上面的代码是如何使用上面的浮动文件执行的

    python plot_file_of_floats.py  < /tmp/my_file_of_floats
    

    这是直方图

    上面的python也显示了这个相同的浮动曲线

    【讨论】:

      【解决方案2】:

      我想不出任何专门为此而设计的标准 unix/gnu 命令行实用程序。您可以制作一个单行脚本,如下所示:

      awk '{nums[n++]=$1;if ($1 > max) max=$1} END {for (i=0; i<n; i++){ printf "%15.5f ",nums[i]; y=(nums[i] * 50)/max + 0.5; for(j=0; j<y; j++) printf "X";printf "\n";} }' < fileOfNumbers
      

      这里是fileOfNumbers

      0
      0.3802513823806563
      0.6970557413810001
      0.8987761906537762
      0.9550334815954414
      0.8619219017964542
      0.6420060782538214
      0.339191808764492
      0.009613420853058656
      -0.2895238011697386
      -0.5108307062853145
      -0.6251519043638415
      -0.6258919548129064
      -0.5285343220241233
      -0.3656723046807657
      -0.17881005669083072
      -0.008834451885644044
      0.11272730604816542
      0.16980020199496673
      0.16398989653539123
      0.11263040266652444
      0.04327594873440613
      -0.013960516502076581
      -0.034374900159696395
      -0.005077671284778755
      

      这是上面浮点数的输出直方图

      0.00000 X
      0.38025 XXXXXXXXXXXXXXXXXXXXX
      0.69706 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      0.89878 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      0.95503 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      0.86192 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      0.64201 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      0.33919 XXXXXXXXXXXXXXXXXXX
      0.00961 XX
      -0.28952 
      -0.51083 
      -0.62515 
      -0.62589 
      -0.52853 
      -0.36567 
      -0.17881 
      -0.00883 X
      0.11273 XXXXXXX
      0.16980 XXXXXXXXXX
      0.16399 XXXXXXXXXX
      0.11263 XXXXXXX
      0.04328 XXX
      -0.01396 
      -0.03437 
      -0.00508 X
      

      【讨论】:

        【解决方案3】:

        这是一个 Python one 班轮(在 Python 2.7.5 和 3.3.2 上测试)。它不太适合浮点数(对不起,OP),并且不会绘制图形或将数字分组到 bin 中。但它会计算不是数字的东西。也许对这种情况并不完全有帮助,但我认为多样性是某种东西的调味品。

        python -c'import collections as c, sys, pprint as p; p.pprint(c.Counter(map(int, sys.stdin.read().split())))' < fileOfNumber
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-14
          • 2011-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-10
          相关资源
          最近更新 更多