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
awk
Python이 유용할 것이라는 희망 으로 태그를 지정했습니다 .
암호:
# !/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