2022.09.19~2022.09.23
구름 X 전주 ict이노베이션 스퀘어의 온라인 코딩교육 내용을 정리하였습니다.
사실 저 기간에는 강의가 없었지만(3차 세미프로젝트 진행), 저번에 정리하지 못한 '실습하며 새로 알게 된 부분'과 인공지능/딥러닝 관련 개념을 정리할 예정입니다. 9월 26일 이후의 교육은 백엔드 프로그래밍으로 진행되었었는데, 그 내용을 블로그에서 다루게 될 지는 아직 잘 모르겠습니다.
TF Lite: (tensorflow keras모델을)tf.lite.TFLiterConverter.from_keras_model의 인자로 준 뒤 convert함수를 사용하면 기존 모델보다 훨씬 더 작은 크기를 가진 TFLite모델이 됨
- 모델 양자화도 가능: Optimize 디폴트값이 Quantization (기존모델 1.3MB -> TFLite로 바꾼 뒤 354KB -> 양자화 후 112KB). 기존 모델보다 성능이 약간 떨어질 순 있으나, 모델 크기 감소로 따른 이득이 더 큰 경우가 많음
- 주로 안드로이드 같은 기기 안에서 실행됨. tensorflow가 설치되어 있지 않아도 이용 가능하나, 윈도우에서는 (TFLite interpreter)사용 불가
- 참조: https://youtu.be/aT0Fv1PzyV8
Pytorch: 딥러닝 라이브러리. 파이토치에 사용하기 위해서는 토치 자료형으로 넘겨주어야 함(`torch.frm_numpy()`)
- 모델 생성 등은 keras와 맥락이 비슷하지만, dense 대신 linear를 사용함
- torchvision은 이미지 분류 등을 할때 사용됨.
자연어 처리Natural Language Processing, NLP
- 자연어: 일상에서 사용되는 언어. 자연어 처리는 이 의미를 분석해 컴퓨터가 처리할 수 있도록 하는 것. 자연어 처리 분야로는 음성 인식, 번역, 감정 분석, 텍스트 분류 등이 있음
- 기계에게 인간의 언어를 "이해"시키는 과정. 인공지능의 단순 언어 형태 인식이 아닌, 의미 인식을 위함
- 코퍼스Corpus: 자연어 처리에 사용되는 데이터 모음(텍스트 모음, 말뭉치).
- 텍스트 전처리: 텍스트를 목적에 맞게 분류하는 것. 토큰화(코퍼스->토큰(문자, 단어, n-gram)), 정규화, 어간 추출(단어 핵심 추출), 불용어 제거(의미없는 용어 제거), 정규 표현식, 단어 분리, 정수 인코딩(단어를 정수에 맵핑) 등이 있음.
(n-gram: "Legendary Genius Monster Keria" --2gram--> "Legendary", "Legendary Genius", "Genius", "Genius Monster", "Monster", "Monster Keria", "Keria")
- 단어를 토큰화해야 딥러닝에서 활용 가능하기 때문에 반드시 텍스트 전처리 과정이 선행되어야 함
- 단어 임베딩word embedding: 단어와 벡터를 연관짓는 것(밀집 word vector 사용). 저차원의 밀집벡터로 학습.
- 임베딩 레이어: 정수 인덱스를 밀집 벡터로 맵핑하는 것. `Embedding(input_dim, output_dim, input_length)`. 딥러닝 모델 사이에 들어갈 수 있음.!!
- Word2vec, Glove알고리즘 등 미리 계산(훈련)된 단어 임베딩 db를 사용할 수도 있음
온라인 코딩 교육의 파이널 프로젝트로 "제대로 된" 프로젝트(체계적인 데이터 분석 사이클 수행 및 지표 개발, 시각화 등)를 해 보기 위해서 라이엇api를 활용하려 합니다. 당분간 이 섹션에서는 개인 프로젝트에 대한 내용이 업로드 될 예정입니다. 노션이나 깃랩(깃헙) 링크 등도 생성 및 정리되는 대로 공유하겠습니다.
일단 Riot Developer에 api 이용 요청을 보내 놓은 상태로, 프로젝트 방향 등의 힌트를 얻기 위해 다른 분들의 LOL 데이터분석 프로젝트들을 보며 공부하고자 합니다. (아니 이거 후에 알게 된 건데 공개 서비스 제공할 거 아니면 api 신청을 안해도 된다고.. ㅋ..ㅋㅋㅋ... 아.. 뭐.. 음.. 일단은.. 진행 해 볼게요... ㅠㅜ 분명 열심히 읽고 신청했는데.. 많이 뻘쭘하네용)
https://velog.io/@dongdongju96/롤-데이터-분석-나는-롤을-하면서-얼마나-까만화면을-보는가
매우 간단하지만 총 게임시간 대비 죽어있는 시간 비율을 구하고 시각화 하신 게 흥미롭습니다. 여담으로 롤은 유저 레벨이 높을수록, 게임 시간이 길어질수록 죽었을 때 다시 태어나는(?)데 걸리는 시간이 점점 길어지는 걸로 알고 있습니다. 지표만 보았을 땐 게임당 5~7데스씩 하시는 게 아닐까 추측해봅니다..!
https://velog.io/@dongdongju96/롤-포지션-찾아보기
'초반 라인전 죽음 횟수'를 기준으로 가장 잘 맞는 포지션을 찾으셨다 했는데, 개인적으로는 골드당 DPM 혹은 상대 라이너 대비 KDA 우위 정도를 기준삼으셨으면 어땠을까 하는 생각이 들긴 합니다. 어쨌든 죽은 위치를 받아와서 미니맵에 찍으신 거 너무 귀엽고 히트맵도 좋네요...
이 외에도 RIOT API 시리즈로 api사용 방법 등을 간략하게 정리해주셔서 유익했습니다. 두고두고 참고할 것 같아요! (동동주님이 사용하신 방법을 따라 해봤는데 왜 안될까요^-^.. 더 공부해서 다시 해보면 그땐 되겠죠..? 아니면 코랩 문제인가..?)
동동주님의 velog를 보다 댓글로 알게 된, 리그오브 레전드 관련 전적검색 및 커뮤니티 서비스를 동시에 제공한다는 어플을 구상중이신 분의 블로그도 올려봅니다. (opgg와 겹치는 것 같기도 하지만, '알림'이라는 기능이 확연한 차별점이 될 수 있지 않을까 감히 생각해봅니다.) 수많은 전적검색 사이트와 서비스들 사이에서 부디 잘 살아남으셔서 꽃과 열매를 맺으실 수 있길 바랍니다.!!
https://pog-playerofthegame.tistory.com/
https://right1203.github.io/study/2019/02/28/lol-duo-tier/
lol.ps의 ps연구실 탭의 듀오시너지라는 기능이 생각나는 분석입니다. lol.ps등장 이전부터 시너지티어를 구하고자 하셨다니 신기할 뿐입니다.. ddragon이라는 걸 사용하셨다는데 아마 https://developer.riotgames.com/docs/lol가 아닐까 싶습니다. 결론은 같은 riot api라는 거. 뭔가 설명이 많긴 한데 무슨 소리인지 잘 모르겠어요... 두 번, 세 번 읽고 야매로라도 사용해보면 좀 나을까요..?
어쨌든 거친 과정들을 코드와 함께 잘 정리해주신 덕에 데이터가 어떤 식으로 되어있고, 대충 어떻게 처리해야 할지에 대한 윤곽이 조금씩 보이는 것 같기도 합니다. 물론 직접 api를 사용해서 데이터를 받아와보면 감회가 다를 수도 있지만.. :) 어쨌든 이전에 따라쳐보았던 데이콘 청경채와 달리, 단계별로 수행해나가며 코드를 정리하신 게 좋았습니다.
https://www.metasrc.com/5v5 라는 새로운 사이트도 알게되고, 롤에 대한 이해도로 나름의 기준지표도 만드시고(제가 무엇보다 하고싶었던 것!!!) 정말 배울 게 많은 것 같습니다.
+) 새삼 신기한 것. 지표를 어떻게 잡느냐에 따라 결과가 많이 달라질 수 있군요
유미와 애니가 S+티어이고 렐과 나미가 S티어.. 이거 맞나요? 부쉬 장악 못하면 애니는 그저 궁셔틀일텐데... 참 신기하네요. 근데 또 오른쪽엔 제라스와 자이라 럭스가 2티어 대장이라네요. 티어 정리가 다른게 참 재밌습니당. 아 근데 다른 건 몰라도 나미가 S티어인 건 진짜 인정할 수 없습니다... 감전나미때나 S티어였겠지 요새는 다시 콩콩이 수호자 가서 그냥 싱싱한 횟감일 뿐이라구요... 나미만 200판 300판 했는데 나미가 좋은 시즌은 성배가 있었을 때 이후로는 단 한번도 오지 않았읍니다 ... 최근 떠올랐던 것도 루시안의 따까리로 였을 뿐 ... 그러니까 라이엇은 다음 시즌에 아테나의 부정한 성배를 부활시켜라...
https://www.kaggle.com/code/jaytegge/league-of-legends-data-analysis/notebook
챔피언 정보와 스펠 정보(json)를 pandas로 받아와서 유저들의 픽, 밴, 스펠 리스트를 만든 뒤 챔피언 이름만 남은 df를 바탕으로 (픽률과 밴률의)countplot을 그렸습니다. 챔피언 타입과 사용된 스펠에 대해서도 countplot을 그리셨어요. 그리고 주요 '첫' 게임 지표(퍼블, 포블, 첫 바론, 첫 용, 첫 전령 등)들의 value_counts를 for문 루프로 시각화까지 하셨습니당...
시각화를 통한 결론 도출까지, 군더더기 없이 말끔하네요.. ML을 활용한 연구까지 진행하신다 하셔서 같이 봤습니다.
https://www.kaggle.com/code/jaytegge/league-of-legends-logistic-regression-analysis
게임의 승패는 0과 1이라는 binary이기 때문에 로지스틱 회귀를 사용하셨다 합니다. EDA의 주요 지표를 '오브젝트'로 잡으셨는데, 음... 킬이나 시야 같은 것도 같이 보셨으면 어땠을까 하는 아쉬움이 조금 있습니다. 초반 전령이나 용, 중후반의 바론이나 4용이나 장로용이 중요한 지표인 건 맞지만 저는 게임이 후반(30분~)으로 접어들수록 각 팀의 "킬과 데스"가 더 중요하게 작동한다고 생각해서요. 아무리 말렸더라도 후반 한타 승리 몇 번이면 충분히 게임 뒤집을 수 있거든요. 그리고 그런 역전각을 보도록/막도록 돕는 가장 큰 요소가 시야입니다.
어쨌든 타워, 억제기, 용, 바론이 승리에 얼마나 기여했는가를 로지스틱 회귀로 train/test 하셨는데 '바론, 용' 데이터로 학습/예측했을 때에는 평균 정확도가 0.83, '타워, 억제기' 데이터로 학습/예측했을 때에는 평균 정확도가 0.96이 나왔대요. (아니 근데 AOS게임이면 당연히 타워나 억제기 부셔야 하니까 그런거 아닌가...? 롤은 타워깨는 게임인데요...) 그리고 전체 오브젝트 데이터로 학습/예측했을 때 또한 0.96이라는 평균 정확도를 보여주었습니다.
보면 볼수록 알 것 같기도 하고 더 모를 것 같기도 하고.. 그치만 재미있다는 건 확실히 알겠네요. 분석 계획 세우기 위해서 선행 연구(?)들을 찾아봤던 건데 아직까지는 영감이 떠오르지 않아 큰일입니다.. ㅠㅡㅠ 다음주 금요일까지는 대강의 틀이 잡혀야 할 텐데, 쩝...
'STUDY' 카테고리의 다른 글
파이썬 스터디 ver3. 17주차 (2) | 2022.11.23 |
---|---|
파이썬 스터디 ver3. 16주차 (3) | 2022.11.16 |
파이썬 스터디 ver3. 14주차 (3) | 2022.10.22 |
파이썬 스터디 ver3. 13주차 (0) | 2022.10.19 |
파이썬 스터디 ver3. 12주차 (2) | 2022.10.10 |