트위치 룰렛 결산

3. 투네이션 뽑기정리 update 2.2.0

다운로드 위치

사용 방법 2.0.1과 동일

업데이트 내용 정리

이번 투네이션에서 크리스마스 업데이트가 이루어지면서
이전에 만든 뽑기정리를 사용하지 못한다는 제보가 들어왔습니다.
CSV파일에 좀 이상한 변화가 생긴 것을 확인하였습니다.
물론 현업에 계신 분들이 어떠한 이유가 있어서 변화를 주었을 수도 있지만
기본적으로 [CSV파일은 쉼표로 구분된 텍스트 파일]이다.

우선 1열은 Title 행을 두고 있는 것을 확인할 수 있다.
Time, Account, Name, Amount, Message

이렇게 두고 있는 것을 확인이 가능하였는데
이제 다음이 문제가 나오기 시작합니다.

[예시로 다른 누군가의 실제 데이터가 아닙니다.]

투네이션의 뽑기는 두 가지 결과값이 존재합니다.
1 연속 뽑기, 10 연속 뽑기
이 데이터는 이전까지 “크리스마스 뽑기 – 꽝,꽝,꽝,꽝,꽝,꽝,꽝,꽝,꽝,꽝”의 형태로 존재하였습니다.

이전 데이터 예시

최근 CSV 데이터

이전에는 Title 행인 1행과의 형식이 맞았지만
지금은 10연차는 타이틀 행과 형식 자체가 달라지며
(솔직히 정형 데이터에 맞지 않은 값을 가지고 있게 되었다고 생각합니다.)

따라서 위 데이터를 그대로 pandas나 기타 모듈로 불러오면
에러를 보여줍니다.
, 로 구분되어야 하는 csv에서 1행은 5개의 인자를 가지고 있는데
어떤 행은 14개의 인자를 가지고 있으며 – 10 연차 뽑기의 경우
어떤 행은 제목에 맞게 5개의 인자(1 연차 뽑기)를 가지도록 설정되었기 때문입니다.

뽑기정리 해결 방법

pandas에 바로 올릴 수가 없으므로
원본을 손상시키지 않도록 새로운 파일을 하나 만들어
이를 활용하도록 만들었습니다.

def update_csv(csv_path):
    new_file_path = 'processed_input.csv'
    with open(csv_path, 'r', encoding='utf-8') as file, open(new_file_path, 'w', encoding='utf-8') as new_file:
        first_line = True
        for line in file:
            if first_line:
                # 첫 번째 줄(헤더)은 그대로 씁니다.
                new_file.write(line)
                first_line = False
            else:
                # 줄을 쉼표로 구분합니다.
                parts = line.split(',')
                # 네 번째 쉼표 이후의 텍스트를 큰따옴표로 묶습니다.
                modified_line = ','.join(parts[:4]) + ',"' + ','.join(parts[4:]).strip() + '"\n'
                # 수정된 줄을 새 파일에 씁니다.
                new_file.write(modified_line)
    return pd.read_csv(new_file_path)

new_file_path는 프로그램 위치에 processed_input.csv라는 이름으로 만들어지게 되며
clean_message_column을 통하여 뽑기 이름을 제거하고 결과를 활용할 수 있도록 만들어졌습니다.

def clean_message_column(df):
        # '- '와 그 앞의 텍스트를 제거
        df[' Message'] = df[' Message'].str.replace('.*?-\s*', '', regex=True)
        df[' Message'] = df[' Message'].str.split(',').apply(lambda x: [i.strip() for i in x])
        return df

전체 코드는 아래의 사진을 클릭하여 확인해주세요

뽑기정리

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다