순위(Ranking Algorithm)

밤비나·2023년 3월 21일

순위 알고리즘

순위 알고리즘(Ranking Algorithm)은 데이터셋에서 각 항목의 순위를 매기는 알고리즘이다. 일반적으로 순위 알고리즘은 대회에서의 성적이나 검색 엔진에서의 검색 결과 등에 사용된다.

순위 알고리즘에는 여러 가지 방법이 있지만, 가장 대표적인 방법으로는 점수 매기기(Score-Based) 방식과 항목 비교하기(Comparison-Based) 방식이 있다.

점수 매기기 방식

항목에 대한 점수를 계산하여 순위를 매긴다.
대표적으로 사용되는 알고리즘으로는 PageRank 알고리즘이 있다.
PageRank 알고리즘은 웹 페이지의 중요도를 계산하여 검색 엔진의 검색 결과에 반영된다.

항목 비교하기 방식

항목끼리의 비교를 통해 순위를 매긴다.
대표적으로 사용되는 알고리즘으로는 퀵소트(QuickSort)와 머지소트(MergeSort) 등이 있다.
이러한 알고리즘은 정렬 알고리즘으로써, 순서를 비교하면서 정렬하는 방식으로 항목들을 정렬하고, 정렬된 항목의 순서를 기준으로 순위를 매긴다.

순위 알고리즘의 성능은 알고리즘에 따라 다르며, 데이터셋의 크기와 종류에 따라서도 달라질 수 있다. 따라서 적절한 알고리즘을 선택하여 최적의 결과를 도출해야 한다.

def ranking_algorithm(data):
    n = len(data)
    rank = [0] * n

    for i in range(n):
        rank[i] = 1
        for j in range(n):
            if data[j] > data[i]:
                rank[i] += 1

    return rank

연습 문제

학급 학생(20명)들의 중간고사와 기말고사 성적을 이용해서 각각의 순위를 구하고, 중간고사 대비 기말고사 순위 변화(편차)를 출력하는 프로그램을 만들어 보자.(시험 성적은 난수를 이용한다.)

  1. 학생들의 성적을 랜덤하게 생성
  2. 중간고사와 기말고사의 성적을 각각 저장
  3. 중간고사와 기말고사의 성적을 내림차순으로 정렬
  4. 각각의 성적에 대해 순위를 매기기
  5. 중간고사와 기말고사 순위를 저장
  6. 순위 변화(편차)를 계산
import random

# 학생 수
num_students = 20

# 학생들의 중간고사와 기말고사 성적을 저장할 리스트
midterm_scores = []
final_scores = []

# 학생들의 성적을 랜덤하게 생성
for i in range(num_students):
    midterm_scores.append(random.randint(0, 100))
    final_scores.append(random.randint(0, 100))

# 중간고사와 기말고사 성적을 내림차순으로 정렬
midterm_ranks = sorted(range(num_students), key=lambda k: midterm_scores[k], reverse=True)
final_ranks = sorted(range(num_students), key=lambda k: final_scores[k], reverse=True)

# 중간고사와 기말고사의 순위를 저장할 리스트
midterm_rankings = [0] * num_students
final_rankings = [0] * num_students

# 순위를 매김
for i in range(num_students):
    midterm_rankings[midterm_ranks[i]] = i+1
    final_rankings[final_ranks[i]] = i+1

# 순위 변화(편차)를 계산
rank_changes = []
for i in range(num_students):
    rank_changes.append(final_rankings[i] - midterm_rankings[i])

# 결과 출력
print("중간고사 성적: ", midterm_scores)
print("기말고사 성적: ", final_scores)
print("중간고사 순위: ", midterm_rankings)
print("기말고사 순위: ", final_rankings)
print("순위 변화(편차): ", rank_changes)

'''
중간고사 성적:  [22, 92, 69, 47, 1, 72, 49, 26, 66, 75, 34, 49, 89, 6, 40, 21, 24, 5, 63, 90]
기말고사 성적:  [43, 39, 48, 96, 45, 54, 77, 11, 59, 23, 37, 100, 36, 13, 71, 4, 33, 50, 60, 42]
중간고사 순위:  [16, 1, 6, 11, 20, 5, 9, 14, 7, 4, 13, 10, 3, 18, 12, 17, 15, 19, 8, 2]
기말고사 순위:  [11, 13, 9, 2, 10, 7, 3, 19, 6, 17, 14, 1, 15, 18, 4, 20, 16, 8, 5, 12]
순위 변화(편차):  [-5, 12, 3, -9, -10, 2, -6, 5, -1, 13, 1, -9, 12, 0, -8, 3, 1, -11, -3, 10]
'''
profile
씨앗 데이터 분석가.

0개의 댓글