Programming/CodingTest

[Data] 로그 파일 집계 문제

wave35 2024. 8. 11. 21:58

 

문제 : 로그 파일 집계

설명 :

웹 서버에서 나온 큰 로그 파일이 있습니다. 
로그 파일의 각 줄에는 타임스탬프, 클라이언트의 IP 주소 및 응답 시간이 밀리초 단위로 포함되어 있습니다. 
로그 파일을 읽고 IP 주소별로 데이터를 집계한 후 각 IP 주소에 대한 평균 응답 시간을 반환하는 
Python 함수를 작성하세요.

 

 

입력 형식

로그 파일(logfile.txt)은 다음과 같은 형식을 가집니다:

# makefile
2023-07-07T14:48:00Z 192.168.1.1 200
2023-07-07T14:48:02Z 192.168.1.2 305
2023-07-07T14:48:05Z 192.168.1.1 180
2023-07-07T14:48:10Z 192.168.1.3 210
2023-07-07T14:48:15Z 192.168.1.2 290

 

 

출력 형식

함수는 IP 주소를 키로 하고 평균 응답 시간을 값으로 가지는 사전을 반환해야 합니다.

{
    "192.168.1.1": 190.0,
    "192.168.1.2": 297.5,
    "192.168.1.3": 210.0
}

 

 

제약 사항

로그 파일은 매우 클 수 있으므로 효율성이 중요합니다.
로그 파일은 잘 형성되어 있으며 오류가 없다고 가정합니다.

 

 

코드

from collections import defaultdict

def aggregate_log_data(logfile: str) -> dict:
	ip_data = defaultdict(list)
    
    # 파일 읽기
    with open(logfile, 'r') as file:
    	for line in file:
        	parts = line.strip().split()
            timestamp, ip, response_time = parts[0], parts[1], int(parts[2])
            ip_data[ip].append(response_time)
 	
    # 평균 구하기
    ip_avg_response_time = {ip: sum(times)/len(times) for ip, times in ip_data.items()}
    return ip_avg_response_time

if __name__ == "__main__":
	logfile = 'logfile.txt'  # 로그 파일 경로를 입력
    print(aggregate_log_data(logfile))

 

 

풀이 

dictionary를 통해 중복되는 key 값의 value의 평균값을 구하는 문제입니다.

defaultdict를 사용하면 키가 존재하지 않을 때 기본 값을 자동으로 생성할 수 있습니다.

반복문이 끝나고 ip_data에는 
{'192.168.1.1': [200, 180], '192.168.1.2': [305, 290], '192.168.1.3': [210]} 
와 같은 데이터들이 적재됩니다.