팀 프로젝트를 하루종일 진행하였다.
오늘은 데이터를 정제하고, 레이아웃을 정하니 하루가 금방 지나갔다..!😂
1. 데이터 전처리
1.1 ⛑ Troubleshooting
1. MySQL로 import했을 때 8717개 데이터만 나오는 현상 발견
2. NaN값 모두 제거되고 $를 인식하지 못해 Paid 데이터도 모두 제거되어서 발생함
3. [해결방안] json 파일로 변환하여 import하기
1.2 MySQL로 전처리
- googleplaystore.csv : 10,841개
- MySQL에 import한 전체 데이터 : 10,778개 (-63)
→ Category = ‘1.9’ 데이터 자동 삭제됨
→ 그 외의 자동 삭제된 데이터가 있지만 일일이 확인이 어려움 ㅠㅠ
✅ 전처리할 사항
1. 빈 값 제거 (import 시 제거됨)
-- 데이터베이스 불러오기
USE GOOGLE_PLAYSTORE;
-- 데이터 확인
SELECT *
FROM googleplaystore_re;
-- 전체 데이터 갯수 : 10778
SELECT COUNT(*)
FROM googleplaystore_re;
2. 중복 행 제거 (모든 열의 값이 다 똑같은 경우)
-- 1. 중복 행 제거
CREATE TABLE googleplaystore_re2
(SELECT DISTINCT * FROM googleplaystore_re);
SELECT *
FROM googleplaystore_re2;
-- 데이터 갯수 : 10296
SELECT COUNT(*)
FROM googleplaystore_re2;
3. 동일 앱인 중복 행 제거 (Reviews만 다른 경우)
-- WITH 절 사용 (내가 작성한 쿼리)
WITH max_reviews AS (
SELECT App
, Category
, MAX(Reviews) as reviews_2
FROM googleplaystore_re2
GROUP BY 1, 2
)
SELECT g.App, g.Category, g.Rating, Reviews, Size, Installs, Type, Price, Content_Rating, Genres, Last_Updated, Current_Ver, Android_Ver
FROM googleplaystore_re2 AS g
INNER JOIN max_reviews AS m
ON g.reviews = m.reviews_2;
-- 서브쿼리 활용 (팀원이 작성한 쿼리)
SELECT g1.App, g1.Category, g1.Rating, g1.Reviews, Size, Installs, Type, Price, Content_Rating, Genres, Last_Updated, Current_Ver, Android_Ver
FROM googleplaystore_re2 AS g1
INNER JOIN (SELECT App
, Category
, MAX(Reviews) AS Reviews
FROM googleplaystore_re2
GROUP BY 1,2) g2 ON g1.App = g2.App
AND g1.Category = g2.Category
AND g1.Reviews = g2.Reviews;
-- 3. 중복 제거한 데이터를 테이블로 생성
CREATE TABLE googleplaystore_3
(SELECT g1.App, g1.Category, g1.Rating, g1.Reviews, Size, Installs, Type, Price, Content_Rating, Genres, Last_Updated, Current_Ver, Android_Ver
FROM googleplaystore_re2 AS g1
INNER JOIN (SELECT App
, Category
, MAX(Reviews) AS Reviews
FROM googleplaystore_re2
GROUP BY 1,2) g2 ON g1.App = g2.App
AND g1.Category = g2.Category
AND g1.Reviews = g2.Reviews);
4. Installs에 + 지우기
UPDATE googleplaystore_3
SET Installs = replace(Installs, '+', '');
5. Genres에 ';' → ':'로 변경
UPDATE googleplaystore_3
SET Genres = replace(Genres, ';', ':');
6. CSV 파일로 내보내기
SELECT *
FROM googleplaystore_3
LIMIT 10000;
2. 레이아웃 짜기
어제 아프셔서 조퇴하신 팀원이 오늘은 쾌차까진 아니지만 많이 나으신 상태로 오셔서 다시 같이 이야기를 나눠보았다.
이를 기반으로 대시보드 레이아웃에 대한 의견을 말해주셨는데, 좀 더 이해가 되어서 이 분의 의견을 바탕으로 레이아웃을 다시 짜보았다.
대시보드가 2개에서 3개로 변경이 되었고, 각각에 대한 대시보드 레이아웃을 팀원들이 하나씩 맡아서 짰다.
(나는 데이터 정제함!)
2.1 레이아웃
✅ 구상한 레이아웃
1) 전체적인 Google Playstore의 현황 대시보드
2) 카테고리에 따른 Google Playstore의 현황 대시보드
3) 카테고리, 장르 별로 2차 창작물을 제작 시 참고할 앱 리스트 제공 대시보드
2.2 레이아웃에 대한 피드백
- 워드클라우드를 레이아웃에 굳이 사용할 필요는 없음 (대부분 자료에 캡쳐해서 넣음)
- 워드클라우드가 2개 쓰이는 것 살짝 주의할 필요 있음! (적절히 사용하기)
- 2번, 3번 대시보드가 이어져야 하기 때문에 2번에서 3번 대시보드로 넘어갈 때 매끄럽게 설명할 수 있도록 만들기
💡 회고
데이터 전처리를 한다고 오랜만에 SQL을 했는데, 바보가 된 기분이었다....ㅇㅂㅇ
예전에는 나름 쿼리를 잘 짰다고 생각했는데, 오늘 쿼리를 짜는데 쉽지 않았다. 그새 많이 까먹었나보다.
쿼리 짜는 것, 그리고 MySQL에 파일을 임포트할 때, 데이터가 손실된 데이터를 확인하는 것, 마지막으로 쿼리로 정제한 데이터가 잘 정제가 되었는가에 대해 확인하는 것이 어려웠다.
데이터 전처리도 역시나 쉽지 않은 것을 오늘 다시 느꼈다. 하지만 해커톤에서도 SQL을 활용해서 전처리를 해야 하기 때문에 열심히 했다! 그리고 팀원 중 예전에 나와 같은 교육을 듣고 오늘 많이많이 도와준 SQL 메이트가 있어서 훨씬 쉽게 했다.
대시보드 레이아웃을 대략적으로 짰고 대시보드에 들어갈 그래프를 주말동안 만들어오기로 했다.
주말동안 최대한 할 수 있는 한 열심히 해봐야겠다!!!!!!!!!!!!!!아좌아좌~~~~~~~~~~~~~~~~~💪💪💪
'웅진X유데미 STARTERS > TIL (Today I Learned)' 카테고리의 다른 글
[스타터스 TIL] 41일차.태블로 실전 트레이닝 (17) - 팀 프로젝트 발표, 태블로 자격증 공부 (0) | 2023.04.04 |
---|---|
[스타터스 TIL] 40일차.태블로 실전 트레이닝 (16) - 팀 프로젝트 (1) | 2023.04.04 |
[스타터스 TIL] 38일차.태블로 실전 트레이닝 (14) - 레이아웃, 테이블, 워드 클라우드 (0) | 2023.04.01 |
[스타터스 TIL] 37일차.태블로 실전 트레이닝 (13) - 폭포 차트, 막대 게이지 차트, 벤다이어그램, 불릿차트, 캘린더 시각화 (0) | 2023.03.29 |
[스타터스 TIL] 36일차.태블로 실전 트레이닝 (12) - LOD Fixed 날짜, 게이지 차트, 와플차트, Jitter bar 차트 (0) | 2023.03.28 |