1. 팀 프로젝트 대시보드 준비
1.1 앱 리스트 구성
App | Rank | Category/Genres | Ratings | Reviews | Day_diff | 최종 Score |
1.2 업데이트 경과일
현 시점에서 최근 업데이트 날짜를 뺀 기간을 나타내었다.
1) 기준 날짜 설정
- 대시보드를 만든 시점의 날짜 설정 : 2018-10-01
→ 2018년 8월이 데이터의 마지막 날이므로 해당 날짜 이후의 날짜로 설정함
2) 기준 날짜 필드 만들기
그 전에 Last Updated 필드의 타입을 ‘날짜’로 변경하기
// 기준 Date
DATE('2018-10-01')
3) 경과일 구하기 (days)
현 시점 (기준 날짜, 2018-10-01)을 기준으로 최근 업데이트한 날짜까지의 기간을 확인
// Day_diff
DATEDIFF('day',[Last Updated], [기준 Date])
1.3 최종 Score
- 고려사항 : Rating(평점), Day_diff(기간), Reviews (리뷰수)
- 평점은 높을수록, 기간이 짧을수록 Score ↑
- 리뷰수가 높을수록 Score ↑
→ 각 지표의 최댓값이 100점, 최솟값이 0점이 되도록 점수화한 후 지표의 갯수(3개) 나누는 Score 고려
1) Rating (평점)
✔ 최댓값 / 최솟값 (FIXED를 활용하여 차원 고정)
// Rating_max
{ FIXED :MAX([Rating])}
// Rating_min
{ FIXED : MIN([Rating])}
✔ Rating 정규화 점수 식
// Rating_100점
([Rating] - [Rating_min]) / (([Rating_max]-[Rating_min]) / 100)
✔ Rating 정규화 점수 반영
2) Reviews (리뷰 수)
✔ 최댓값 / 최솟값 (FIXED를 활용하여 차원 고정)
// Review_max
{ FIXED :MAX([Reviews])}
// Review_min
{ FIXED : MIN([Reviews])}
✔ Reviews 정규화 점수 식
// Review_100점
([Reviews] - [Review_min]) / (([Review_max]-[Review_min])/100)
✔ Reviews 정규화 점수 반영
3) days (업데이트 경과일)
✔ 최댓값 / 최솟값 (FIXED를 활용하여 차원 고정)
// daydiff_max
{ FIXED :MAX([Day_diff])}
// daydiff_min
{ FIXED : MIN([Day_diff])}
✔ Days 정규화 점수 식
Rating과 Reviews와 다르게 Days의 값이 적으면 적을수록 좋기 때문에 Rating, Reviews와는 다른 식 사용
// daydiff_100점
([daydff_max] - [Day_diff]) / ([daydff_max] - [daydiff_min])*100
✔ Days 정규화 점수 반영
❓❗ 하지만 이 Score를 사용하지 않은 이유
1) 하나의 앱에 여러 카테고리의 데이터가 있는 경우
앱을 기준으로 점수를 확인하였을 때 200점이 되는 앱이 종종 있다.
이 앱의 경우, 앱의 이름은 동일하나 카테고리가 2개라 발생하는 문제였다. 그래서 VLOD에 카테고리를 추가해주면 100점으로 나눠지는 것을 확인할 수 있다.
2) 한 두 개의 컬럼을 제외한 나머지 컬럼의 데이터가 동일한 경우
모든 컬럼의 값이 똑같은 데이터 중에서 Reviews의 값이 다른 데이터를 제거하여 중복되는 데이터를 제거하였다.
그럼에도 Reviews 뿐만 아니라 다른 컬럼의 값이 달라서 전처리 시 제거되지 않은 데이터를 확인하였다. (데이터 전처리 문제)
그래서 이러한 경우에도 하나의 앱이 100점 이상의 점수를 가지게 되었다.
▼ 예시 ▼
(해당 데이터의 경우, Last Updated 컬럼의 데이터만 달라서 이와 같은 문제가 발생)
▶ 데이터를 온전히 정제를 하지 못한 탓인지 이러한 문제들이 발생하였으며, 한 두 개가 아니라서 다시 정제하는 데에 시간이 제법 걸릴 것 같아 결국은 이전에 만들어 놓은 Score 식을 활용하기로 하였다.
주말 내내 한 거라 아까워서 TIL 박제...
1.4 Rank
Score 별로 순위를 매기기 위해 Rank 함수 사용
RANK([Scores])
1.5 필터 설정
- Category 필터
- Genres 필터
- App 필터 (Score 상위 n개만 노출)
1.6 대시보드 3 초안
주말동안 각자 대시보드 하나씩 담당하여 그래프를 넣어 만들어 오기로 했다.
나는 대시보드 3을 맡았으며 레이아웃을 짜고 워드클라우드 이외의 그래프를 모두 넣었다.
1) 상단 4개의 그래프
특정 카테고리, 장르, 그리고 Score 상위 n개에 해당하는 데이터에 한정된 값들을 추가하였다.
→ App의 갯수, 평균 Rating, Type 별 비율, Content Rating 별 비율
2) Sentiment 비율
특정 카테고리, 장르에 해당하는 앱 중에 리뷰 데이터에 있는 앱들의 데이터를 통계낸 값이다.
3) 참고할 App 리스트
특정 카테고리, 장르, 그리고 Score 상위 n개에 해당하는 앱들을 Score가 가장 높은 앱부터 순위를 매겨 리스트로 보여준다.
2. 최종 대시보드
각자 주말에 해온 대시보드들을 같이 확인하면서 수정할 부분은 수정하며 최종 대시보드를 제작하였다.
2.1 상황 설정
✔ 자사 : 2차 창작물 제작 컨설팅 회사
✔ 고객 : 원작자, 투자사, 제작사
✔ 목표
- 2차 창작물 앱 제작에 있어 시장성이 좋으며, 원작의 방향성과 일치하고, 제작사의 역량에서 소화 가능한 창작물 분야를 선택
- 알맞은 분야를 선택한 후, 해당 분야에 대한 정보를 조회하여 벤치마킹할 앱을 제시
2.2 대시보드 흐름
① 구글 플레이 스토어의 현황을 파악하고 구글 플레이 스토어에 배포하는 것이 적절한지 파악
② 어떤 카테고리로 진입하는 것이 좋을지, 또 어떤 장르가 원작의 성격을 가장 잘 반영할 수 있을지 파악
③ 이를 파악하여 선정한 카테고리, 장르에서 벤치마킹할 만한 앱이 어떤 것이 있는지 파악
▶ 이를 통해서 2차 창작물 제작 가능성이 있는 앱을 추천
2.3 대시보드 시각화
1) 구글 플레이 스토어 현황 대시보드
구글 플레이 스토어의 전반적인 추세를 보며 플랫폼으로의 가치를 판단할 수 있음
2) 카테고리 & 장르 선택 대시보드
카테고리, 장르 별 정보와 특성을 제공하여 창작 분야의 구체화를 도움
- DATEDIFF 함수를 사용하여 경과일을 구함
// Day_diff
DATEDIFF('day',[Last Updated], [기준 Date])
- 파이썬 nltk 패키지를 활용하여 리뷰 문장을 토큰화한 후 워드클라우드로 시각화함
단어의 갯수를 확인하여 리뷰에서 많이 나온 단어의 갯수는 크기가 크고 초록색으로 표현됨
3) 참고할 앱 리스트 확인 대시보드
선택한 카테고리, 장르의 정보를 제공하며, 경쟁사 및 벤치마킹할 앱의 리스트를 제공
- 위의 4가지 그래프는 지정한 카테고리, 장르 별 데이터를 활용하여 표현 (초기와는 다르게 진행)
- Score 점수가 70점 이상인 상위 App 리스트를 보여줌
- 상위 App 중 리뷰 데이터에 있는 App의 감성 분석 결과 비율과 App의 감성 분석 결과를 리스트로 나타냄
✔ Score 수식
- Rating은 높을수록, Day_diff (경과일)은 낮을수록 점수가 높아져야 하기에 Rating / Day_diff 진행
- Reviews의 경우, 데이터 별 범위가 매우 넓고 차이가 크기 때문에 임의로 5000000000을 나눠줌 (임의의 값)
IIF(NOT ISNULL(MAX([Rating])),(MAX([Rating]) / MAX([Day_diff])
+ (MAX([Reviews])/5000000000)) * 1000,0)
3. 발표 자료
발표에서 나는 앞부분 서론과 대시보드 2의 3개의 그래프 설명을 맡았다.
💡 회고
레이아웃을 일일이 하나씩 짜고 그에 맞춰서 각자 만든 대시보드들을 하나로 취합하는 과정을 진행하였다.
전반적인 레이아웃 디자인과 동작을 추가하는 작업도 진행하였는데 생각보다 쉽지는 않았다.
이를 바탕으로 발표자료를 다같이 만들고 각자 담당 파트를 나누어 발표 준비를 하였다.
우리는 상황 설정한 아이디어가 절반 이상이기 때문에 이를 대시보드에 잘 녹이는 것이 매우 중요하다.
이를 대시보드에 녹이는 것과 발표 자료에 설명하는 부분에서 많은 노력이 들어갔다.
팀원들 모두들 각자 자신이 맡은 역할에 최선을 다하고 자신의 일이 끝났을 때 다른 팀원들을 도와주었다!
다들 너무나 고생했다 :)!!!!!!!!!
또한 비록 대시보드에서는 쓰이지 못했지만 혼자서 스코어링을 해본 것이 매우 도움이 되었다. 이전 프로젝트에서는 내가 이런 부분이 약하기에 다른 팀원들에게 맡겼는데, 주말동안 한 번 스스로 시간을 많이 써서 해보면서 이해를 해나갔다.
쉽지는 않은 만큼 직접 해봄으로써 스스로 많이 성장할 수 있었다 :)
'웅진X유데미 STARTERS > TIL (Today I Learned)' 카테고리의 다른 글
[스타터스 TIL] 42일차.태블로 실전 트레이닝 (18) - 태블로 자격증 공부 (Test 3) (0) | 2023.04.05 |
---|---|
[스타터스 TIL] 41일차.태블로 실전 트레이닝 (17) - 팀 프로젝트 발표, 태블로 자격증 공부 (0) | 2023.04.04 |
[스타터스 TIL] 39일차.태블로 실전 트레이닝 (15) - 팀 프로젝트 (0) | 2023.04.01 |
[스타터스 TIL] 38일차.태블로 실전 트레이닝 (14) - 레이아웃, 테이블, 워드 클라우드 (0) | 2023.04.01 |
[스타터스 TIL] 37일차.태블로 실전 트레이닝 (13) - 폭포 차트, 막대 게이지 차트, 벤다이어그램, 불릿차트, 캘린더 시각화 (0) | 2023.03.29 |