때는 바야흐로 2021년...
내가 운동을 그만두고 처음 보러 간 경희대학교의 시합.
부상으로 인해 경기를 뛰지 못하는 선배 두 명이 노트와 볼펜을 들고 무언가를 끄적이고 있었고, 나는 그걸 어깨너머로 보고는 경악을 금치 못했다.
경희대의 몇 번 선수가 슛을 몇 번 쐈는지 수기로 일일히 기록하고 있었던 것.
답답함을 느낀 나는 작년 10월쯤 Vanila JS를 통해서 이를 해결할 수 있는 간단한 웹앱을 만들어본 적이 있었다.
[Javascript] 자바스크립트로 아이스하키 경기 슈팅 기록 사이트 만들기
다만 급조한 것이라 완성도가 높지는 않았고, 나도 마땅히 시간이 없어 건들지 못한 채로 어느덧 시간이 이렇게 됐는데 이번에 경기분석을 해야 할 이유가 생겨, 이참에 그냥 만들자! 하고 만들게 됐다.
꼭 웹앱일 필요성은 없다고 생각해서 Python, PyQt5를 이용해서 개발했다.
개발 기간은 약 5일 ?
PyQt5는 파이썬을 통해서 GUI를 만들어본 사람이라면 들어봤을 것이라 생각하는데, Tkinter와 가장 유명한 GUI 구현 라이브러리라고 한다. 저번에 써본 TKinter는 너무 불편하고, 얼핏 보니 PyQt5에는 리액트와 비슷한 Row, Col 느낌으로 구현이 가능해서 해당 라이브러리를 사용하게 됐다.






goal,1,19:48,home,1,16.95,13.125,"['1p', 'Tie', '5on5']","['1p', 'Tie', '5on5']"
shot,1,19:52,home,12,9.15,17.549999999999997,"['1p', 'Tie', '5on5']","['1p', 'Tie', '5on5']"
shot,1,19:54,home,11,18.825,14.625,"['1p', 'Tie', '5on5']","['1p', 'Tie', '5on5']"
버튼이나 단축키를 통해 동작을 정의하고 링크장에 그 위치를 클릭하면 그 데이터가 저장되는 구조이다.
class MyApp(QWidget):
def __init__(self):
...
def initUI(self):
self.setWindowTitle('SuperSaver')
self.setFocusPolicy(Qt.StrongFocus)
self.setCursor(Qt.ArrowCursor)
self.root = QVBoxLayout()
self.renderGameInfo() #render self.gameInfoSection
self.renderRinkAndDataSection() #render self.rinkAndDataSection
self.renderDataButtonSection()
self.setTimer()
self.setLayout(self.root)
self.setFocus()
self.showFullScreen()
코드 량이 너무 많아 (1000줄이다;) 모두 붙일 수는 없지만, 최대한 깔끔하게 함수를 분류하려 노력했다. initUI 함수 안에 render 함수 세 부분이 각각 상, 중 ,하 파트의 랜더링을 담당.
그리고 이는 실제로 고등학교 데이터를 통해 시각화와 간단한 분석을 해본 포스팅.
물론 이때는 통계에 대한 지식이 거의 없어 난잡하지만, 시각화 부분은 괜찮았던 것 같다.
생각보다 시간이 많이 걸렸는데, 라이브러리가 익숙하지 않아서인 것 같다.
그래도 재미있는 경험이었다 ㅋㅋ
조금 다듬어서 실사용 가능하게 만들어볼 계획이다.