RUBY
순위Rank (파이썬) 본문
순위
수의 크고 작음을 이용해서 수의 순서를 정하는 것을 순위라고 한다.
rank 함수는 주어진 값들을 이용하여 작은 값부터 1등이라고 순위를 매긴다.
method: 중복된 값이 있을 때 랭킹을 어떻게 매길지를 지정한다. 예를 들어 배열 [5, 6, 6, 6, 7]에 대해 [1, 2, 3, 4, 5]라고 순위를 매긴다고 할 때, 중복된 값들의 순위를 묶어(여기에서는 [2, 3, 4]) 그룹)
average: (default) 그룹의 평균으로 순위를 부여 -> [1, 3, 3, 3, 5]
min: 그룹의 최솟값으로 순위를 부여 -> [1, 2, 2, 2, 5]
max: 그룹의 최댓값으로 순위를 부여 -> [1, 4, 4, 4, 5]
first: 값이 나타난 순서대로 순위를 부여 -> [1, 2, 3, 4, 5]
dense: ‘min’ 방법과 동일하지만, 순위가 항상 1씩 증가하도록 부여 -> [1, 2, 2, 2, 3]
ascending: 오름차순으로 순위 매길 것인지 여부를 정한다. 오름차순으로 순위를 매기고 싶다면 True(default), 내림차순으로 순위를 매기고 싶다면 False라고 지정한다.
50부터 100까지의 수 중 랜덤으로 20개를 뽑아내서 큰 수부터 랭킹을 매겨보자
import random
scores = random.sample(range(50, 101), 20)
ranks = [0 for i in range(20)]
for idx, sco1 in enumerate(scores):
for sco2 in scores:
if sco1 < sco2:
ranks[idx] += 1
print(scores)
print(ranks)
for i, s in enumerate(scores):
print(f'score:{s} \t rank:{ranks[i] + 1}')
[95, 88, 50, 69, 77, 56, 53, 74, 71, 100, 72, 75, 61, 57, 80, 76, 65, 51, 64, 66]
[1, 2, 19, 10, 4, 16, 17, 7, 9, 0, 8, 6, 14, 15, 3, 5, 12, 18, 13, 11]
score:95 rank:2
score:88 rank:3
score:50 rank:20
score:69 rank:11
score:77 rank:5
score:56 rank:17
score:53 rank:18
score:74 rank:8
score:71 rank:10
score:100 rank:1
score:72 rank:9
score:75 rank:7
score:61 rank:15
score:57 rank:16
score:80 rank:4
score:76 rank:6
score:65 rank:13
score:51 rank:19
score:64 rank:14
score:66 rank:12
학급 학생(20명)들의 중간고사와 기말고사 성적을 이용해서 각각의 순위를 구하고, 중간고사 대비 기말고사 순위 변화(편차)를 출력하는 프로그램을 만들어 보자.(시험 성적은 난수를 이용한다.)
import rankMod as rm
import random
midStuScos = random.sample(range(50, 101), 20)
endStuScos = random.sample(range(50, 101), 20)
rd = rm.RankDeviation(midStuScos, endStuScos)
rd.setMidRank()
print(f'midStuScos: {midStuScos}')
print(f'mid_rank: {rd.getMidRank()}')
rd.setEndRank()
print(f'endStuScos: {endStuScos}')
print(f'end_rank: {rd.getEndRank()}')
rd.printRankDeviation()
class RankDeviation:
def __init__(self, mss, ess):
self.midStuScos = mss
self.endStuScos = ess
self.midRanks = [0 for i in range(len(mss))]
self.endRanks = [0 for i in range(len(mss))]
self.rankDeviation = [0 for i in range(len(mss))]
def setRank(self, ss, rs):
for idx, sco1 in enumerate(ss):
for sco2 in ss:
if sco1 < sco2:
rs[idx] += 1
def setMidRank(self):
self.setRank(self.midStuScos, self.midRanks)
def getMidRank(self):
return self.midRanks
def setEndRank(self):
self.setRank(self.endStuScos, self.endRanks)
def getEndRank(self):
return self.endRanks
def printRankDeviation(self):
for idx, mRank in enumerate(self.midRanks):
deviation = mRank - self.endRanks[idx]
if deviation > 0:
deviation = '↑' + str(abs(deviation))
elif deviation < 0:
deviation = '↓' + str(abs(deviation))
else:
deviation = '=' + str(abs(deviation))
print(f'mid_rank: {mRank} \t end_rank: {self.endRanks[idx]} \t Deviation: {deviation}')
midStuScos: [82, 62, 74, 61, 54, 81, 90, 66, 84, 76, 75, 64, 93, 71, 94, 77, 55, 99, 96, 50]
mid_rank: [6, 15, 11, 16, 18, 7, 4, 13, 5, 9, 10, 14, 3, 12, 2, 8, 17, 0, 1, 19]
endStuScos: [61, 71, 63, 91, 93, 72, 66, 82, 54, 67, 84, 95, 52, 83, 53, 75, 70, 56, 69, 59]
end_rank: [14, 8, 13, 2, 1, 7, 12, 5, 17, 11, 3, 0, 19, 4, 18, 6, 9, 16, 10, 15]
mid_rank: 6 end_rank: 14 Deviation: ↓8
mid_rank: 15 end_rank: 8 Deviation: ↑7
mid_rank: 11 end_rank: 13 Deviation: ↓2
mid_rank: 16 end_rank: 2 Deviation: ↑14
mid_rank: 18 end_rank: 1 Deviation: ↑17
mid_rank: 7 end_rank: 7 Deviation: =0
mid_rank: 4 end_rank: 12 Deviation: ↓8
mid_rank: 13 end_rank: 5 Deviation: ↑8
mid_rank: 5 end_rank: 17 Deviation: ↓12
mid_rank: 9 end_rank: 11 Deviation: ↓2
mid_rank: 10 end_rank: 3 Deviation: ↑7
mid_rank: 14 end_rank: 0 Deviation: ↑14
mid_rank: 3 end_rank: 19 Deviation: ↓16
mid_rank: 12 end_rank: 4 Deviation: ↑8
mid_rank: 2 end_rank: 18 Deviation: ↓16
mid_rank: 8 end_rank: 6 Deviation: ↑2
mid_rank: 17 end_rank: 9 Deviation: ↑8
mid_rank: 0 end_rank: 16 Deviation: ↓16
mid_rank: 1 end_rank: 10 Deviation: ↓9
mid_rank: 19 end_rank: 15 Deviation: ↑4
'프로그래밍 언어 > Python' 카테고리의 다른 글
삽입 정렬(Insertion Sort) (파이썬) (0) | 2023.01.25 |
---|---|
버블 정렬(Bubble Sort)(파이썬) (0) | 2023.01.25 |
이진 검색(탐색) (파이썬) (0) | 2023.01.25 |
선형검색, 보초법 (파이썬) (0) | 2023.01.25 |
딕셔너리를 이용한 프로그래밍(파이썬) (0) | 2023.01.24 |
Comments