大規模なデータセットを使用して他の値の中央値より大きい場合に最大値を印刷する方法

大規模なデータセットを使用して他の値の中央値より大きい場合に最大値を印刷する方法

100列と100,000行のデータセットがあります。最大値(例:g1の20.17)が残りの中央値(0.21と0.57)の2倍大きい場合、最大値とその行名と列名をどのように印刷できますか?これは行命ごとに個別に行わなければならず、最大数を含む中央値を計算せずに残りの数を計算する必要があります。

注:これ以前に回答しましたただし、列と行がほとんどない小規模なデータセットを使用してください。

入力サンプル

name    s1  s2  s3
g1  20.17   0.21    0.57
g2  0.19    0.19    94.0
g3  0.15    0.21    0.26
g4  0.09    0.19    0.16
g5  0.019   0.19    0
g7  2.28    0   0 

サンプル出力

g1  s1  20.17
g2  s3  94.0
g7  s1  2.28

ベストアンサー1

awkPythonが役に立つことを願ってタグを付けました。

パスワード:

# !/usr/bin/python
import operator
import sys

with open(sys.argv[1], 'rU') as f:
    header = next(f).split()
    for line in f:
        data = line.split()
        numbers = [float(i) for i in data[1:]]
        max_index, max_value = max(
            enumerate(numbers), key=operator.itemgetter(1))

        del numbers[max_index]
        half = len(numbers) >> 1
        numbers.sort()
        if len(numbers) % 2:
            median = numbers[half]
        else:
            median = sum(numbers[half-1:half+1]) / 2.0

        if max_value > median * 2:
            print('{}\t{}\t{}'.format(
                data[0], header[max_index+1], max_value))

結果:

g1  s1  20.17
g2  s3  94.0
g5  s2  0.19
g7  s1  2.28

おすすめ記事