대규모 데이터 세트를 사용하여 다른 값의 중앙값보다 큰 경우 최대값을 인쇄하는 방법

대규모 데이터 세트를 사용하여 다른 값의 중앙값보다 큰 경우 최대값을 인쇄하는 방법

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

관련 정보