Skip to content

scoreboard 를 PyTables로 저장하는 아이디어 구현

Jaehwan edited this page Aug 3, 2019 · 3 revisions

기본적으로 파이테이블을 사용합니다. 다음 링크 참고

현재는 아이디어를 구현한 정도이기 때문에 코드가 촌스럽습니다.

구현

관련 라이브러리 import

import tables as tb
import datetime as dt
import pandas as pd
import json

테스트 데이터 입력 및 확인

team_name은 팀명을 영어약어로 만들기 위한 것입니다.

scoreboard = [{'팀': '두산', '1': 3, '2': 0, '3': 0, '4': 0, '5': 0, '6': 3, '7': 0, '8': 4, '9': 2, '10': '-', '11': '-', '12': '-', 'R': 12, 'H': 14, 'E': 1, 'B': 5},
              {'팀': 'NC', '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0, '10': '-', '11': '-', '12': '-', 'R': 0, 'H': 7, 'E': 1, 'B': 4}]
scoreboard
team_name = {'두산':'OB', 'NC':'NC', '기아':'HT', '롯데':'LT'}
team_name

점수가 없는 회에 들어있는 --1로 변환하기

기본적으로 현재 정규시즌은 12회까지 입니다. 그래서 자료형 또한 12회까지 만들었습니다. 그러나 대부분 경기에 9회에 끝나기 때문에 경기가 끝난 다음에는 점수가 없습니다. 그래서 -가 들어가게 됩니다. 그러나 자료형은 int형으로 만들기 때문에, 문자인 -을 넣을 수 없습니다. 따라서 -int-1으로 변경해야 합니다. 이를 함수로 구현했습니다.

def chang_null_to_negative_number(temp):
    return(-1 if temp == '-' else temp)

PyTables 구현

  • 파일 만들기
  • 테이터 구조 만들기
  • tab: 확인
  • h5.close(): 만든 파일 닫기
h5 = tb.open_file("test.h5", 'w')

row_des = {
    'date': tb.StringCol(10, pos=1),
    'team': tb.StringCol(2, pos=2),
    '1': tb.IntCol(pos=4),
    '2': tb.IntCol(pos=5),
    '3': tb.IntCol(pos=6),
    '4': tb.IntCol(pos=7),
    '5': tb.IntCol(pos=8),
    '6': tb.IntCol(pos=9),
    '7': tb.IntCol(pos=10),
    '8': tb.IntCol(pos=11),
    '9': tb.IntCol(pos=12),
    '10': tb.IntCol(pos=13),
    '11': tb.IntCol(pos=14),
    '12': tb.IntCol(pos=15),
    'R': tb.IntCol(pos=15),
    'H': tb.IntCol(pos=15),
    'E': tb.IntCol(pos=15),
    'B': tb.IntCol(pos=15)
}

filters = tb.Filters(complevel=0)
tab = h5.create_table('/', 'scoreboard', row_des, title='scoreboard', filters=filters)

tab

for row in scoreboard:
    tab.row['team'] = team_name[row['팀']]
    tab.row['date'] = "20190511"
    tab.row['1'] = chang_null_to_negative_number(row['1'])
    tab.row['2'] = chang_null_to_negative_number(row['2'])
    tab.row['3'] = chang_null_to_negative_number(row['3'])
    tab.row['4'] = chang_null_to_negative_number(row['4'])
    tab.row['5'] = chang_null_to_negative_number(row['5'])
    tab.row['6'] = chang_null_to_negative_number(row['6'])
    tab.row['7'] = chang_null_to_negative_number(row['7'])
    tab.row['8'] = chang_null_to_negative_number(row['8'])
    tab.row['9'] = chang_null_to_negative_number(row['9'])
    tab.row['10'] =chang_null_to_negative_number(row['10'])
    tab.row['11'] =  chang_null_to_negative_number(row['11'])
    tab.row['12'] = chang_null_to_negative_number(row['12'])
    tab.row['R'] = chang_null_to_negative_number(row['R'])
    tab.row['H'] = chang_null_to_negative_number(row['H'])
    tab.row['E'] = chang_null_to_negative_number(row['E'])
    tab.row['B'] = chang_null_to_negative_number(row['B'])
    tab.row.append()
tab.flush()

h5.close()

앞에서 저장한 자료 읽기

앞에서 만든 파일을 읽어봅니다.

df = pd.read_hdf('test.h5', 'scoreboard')
df