문제
Excel 파일(data.xlsx)에는 여러 사용자의 IP 주소와 금액이 포함된 데이터가 있습니다.
각 사용자의 IP 주소별로 금액의 총합을 구한 후, 금액이 가장 큰 사용자부터 순서대로 출력하는 함수를 작성하시오.
파일 구조 (data.xlsx)
IP Address User Amount
192.168.1.1 Alice 100
192.168.1.2 Bob 150
192.168.1.1 Alice 200
192.168.1.3 Charlie 300
192.168.1.2 Bob 50
요구사항
- Excel 파일에서 데이터를 읽어들입니다.
- IP 주소별로 각 사용자의 금액의 총합을 계산합니다.
- 총합을 내림차순으로 정렬한 후 출력합니다.
- Python의 pandas 라이브러리와 openpyxl 모듈을 활용할 수 있습니다.
- 예외 처리도 고려해야 합니다. ( 파일이 없거나 잘못된 데이터가 있을 때 )
출력 예시
주어진 파일(data.xlsx)에 대해 함수 process_ip_data('data.xlsx')를 실행하면,
다음과 같은 출력이 나와야 합니다.
192.168.1.3: 300
192.168.1.1: 300
192.168.1.2: 200
문제 풀이 코드
import pandas as pd
def process_ip_data(file_path: str):
try:
# Excel 파일에서 데이터 읽기
data = pd.read_excel(file_path, engine='openpyxl')
# IP 주소별로 금액 총합 계산
grouped_data = data.groupby('IP Address')['Amount'].sum()
# 금액 총합을 기준으로 내림차순 정렬
sorted_data = grouped_data.sort_values(ascending=False)
# 결과 출력
for ip, total_amount in sorted_data.items():
print(f"{ip}: {total_amount}")
except FileNotFoundError:
print("파일을 찾을 수 없습니다. 경로를 확인하세요.")
except Exception as e:
print(f"오류가 발생했습니다: {e}")
해결 과정
Excel 파일 읽기:
pd.read_excel(file_path)로 Excel 파일을 읽어들입니다.
여기서 openpyxl 엔진을 사용하여 Excel 파일을 처리합니다.
그룹화 및 총합 계산:
groupby('IP Address')['Amount'].sum()으로 IP 주소별로 금액의 총합을 구합니다.
내림차순 정렬:
sort_values(ascending=False)를 통해 금액의 총합을 기준으로 내림차순으로 정렬합니다.
예외 처리:
파일이 없거나 잘못된 파일 형식일 경우 예외를 처리할 수 있도록 try-except 블록을 사용했습니다.
'Programming > CodingTest' 카테고리의 다른 글
[이코테] [7] 투포인터 (0) | 2025.03.19 |
---|---|
[Data]Web log에서 유저별 페이지 방문 통계 (0) | 2024.10.03 |
[HackerRank] SuperReducedString (같은문자열제거) Strings 문제 (0) | 2024.09.01 |
[HackerRank] Marc's Cakewalk (마크케이크웍) Greedy 문제 (0) | 2024.08.25 |
[HackerRank] Gemstones (잼스톤) Strings 문제 (0) | 2024.08.21 |