A. 금일 학습 내용

- ADsP 3과목 내용 정리

 

1. 데이터 마트
- 정의: 데이터 웨어하우스로부터 특정 사용자가 관심을 갖는 데이터들을 주제별, 부서별로 추출하여 모은 비교적 작은 규모의 데이터 웨어하우스
- 시간/공간적인 효율성 기대

2. 데이터 전처리
- 데이터 정제 과정: 결측값, 이상값 처리
- 분석 변수 처리과정: 변수선택, 파생변수 생성 등
- 요약 변수: 기본적인 통계 자료를 추출한 데이터 마트에서 가장 기본적 변수
- 파생변수: 특정 조건을 만족하거나 특정함수에 의해 값을 만들어 의미(목적)을 부여한 변수

3. 데이터 탐색
- 탐색적 데이터 분석(EDA): 대략적인 특성 파악
- 결측치(Missing Data)
  대치방법
      단순 대치법: 데이터 삭제, 결측값이 많은 대량의 데이터의 경우 데이터 손실 우려
      평균 대치법: 데이터 평균으로 대치하여 완전한 자료 만듦
      비조건부: 데이터 평균값 / 조건부: 실제값 분석 후 회귀분석 활용
      단순확률대치법: K-Nearest Neighbor (K-근접군집)
      다중대치법: 여러번의 대치를 통해 n개의 가상적 완전 자료 만듦
- 이상치(Outlier)
     사용분야: 사기 탐지, 의료(예외 증세), 네트워크 침입탐지 등 부정사용 방지
     판단방법
     ESD(Extreme Studentized Deviation): 평균으로부터 3표준편차 만큼 떨어진 값 = 정규분포에서 전체 데이터의 0.3%를 이상치로 잡음
      사분위수: 최솟값부터 최댓값까지 오름차순으로 정렬한 자료를 4등분했을 위치에 해당하는 값
                IQR: Q1~Q3(사분범위)
                중앙값: Q2
                하한최솟값 Q1-(1.5*IQR) 보다 작음, 상한 최댓값 Q3+(1.5*IQR) 보다 큼 → 이상치
                boxplot으로 식별 가능

4. 통계분석의 이해
- 모집단: 유한 집단 vs  무한 집단, 개념적으로 산정된 모집단을 지칭
-  통계자료 획득방법
        전수조사
        표본조사 → 대표성
            표본: 조사하는 모집단의 일부분
            모수(parameter): 모집단에 대해 알고자 하는 값, 모집단의 특성치
            통계량: 모수를 추론하기 위해 구하는 표본의 값들로 숫자 하나로 특징을 나타냄 = 데이터를 요약한 수치
-  표본 추출 방법
        단순 랜덤 추출법
        계통 추출법: 계층
        집락(군집) 추출법 (cluster sampling)
        층화 추출법
            비례층화 추출법: 전체 데이터 분포 반영 O
            불비례 층화 추출법: 전체 데이터 분포 반영 X
- 측정과 척도
        측정방법
            질적척도: 명목 척도(출생지 등) VS 서열 척도(선호도, 순위)
            양적척도: 구간 척도(온도 등) VS 비율 척도(0 값이 존재 & 모든 사칙 연산 O)
        척도에 따라 데이터 분석 방법 상이
- 기술통계: 데이터 특징 뽑기

- 추리통계: 기술통계 + 확률 → 전체 OR 미래 추측
        수집된 자료 이용하여 모집단에 대한 의사결정
            모수 추정, 가설 검증, 예측

5. 기초 통계 용어
-  자료, (모)평균(기댓값), 중앙값, 최빈값
-  분산: 데이터의 흩어진 정도를 나타냄
        데이터의 각 관찰값이 평균으로부터 얼마나 떨어져 있는지
        데이터의 변동성 표현
        분산값의 총 합 = 0
- 표준편차: 분산의 제곱근
        데이터 포인트들이 평균으로부터 얼마나 떨어져 있는지 평균적 정도 측정
- 백분위수: 순서대로 정렬 시 특정 백분위 위치에 있는 데이터 값 → 범위 파악

- 첨도: 평균에 얼마나 많이 밀집되어 있나. 분포 형태 설명
- 왜도: 데이터 분포가 얼마나 비대칭인가
        왜도 >0: 왼쪽으로 밀집
        왜도 <0: 오른쪽으로 밀집

- 상관분석: 두 변수 간의 관계를 분석하기 위해 공분산, 상관관계 활용
- 공분산: 두 변수 간의 상관관계를 나타내는 통계적 척도 → 두 변수가 함께 어떻게 변하는가
- 선형관계: 두 변수가 함께 움직이는 방향과 그 크기에 대한 것
- 상관관계: 두 변수의 선형관계의 강도와 방향 → 두 변수 비교 위함
        두 변수 간의 상관 정도를 -1 ~ 1 까지 숫자로 표현해서 측정

6. 확률
- 정의: 특정 사건이 일어날 가능성/ 표본공간(sample space) = 모든결과의 집합
- 조건부 확률: A가 발생한 가정 아래 B사건이 발생할 확률
- 독립사건: 두 사건이 서로 영향X
        한 사건 발생 여부가 다른 사건에 아무런 정보 제공 X

- 배반사건: 두 사건이 동시에 발생할 수 X → A 발생 시 B 발생 불가

7. 확률 변수
- 정의: 표본 공간에 있는 모든 원소들을 수치적 값으로 만드는 함수

- 확률함수: 확률 변수에 의해 정의된 실수를 확률(0~1)에 대응시키는 함수

8. 확률 분포
- 정의: 확률함수 (확률 변수가 특정한 값을 가질 확률을 나타내는 함수)가 그리는 패턴

- 이산확률분포(확률질량함수): 확률변수를 셀 수 있음

- 연속확률분포(확률밀도함수): 확률변수를 셀 수 없음

9. 이산확률분포

- 베르누이 분포
        확률변수가 0 또는 1, 두 개의 결과만 갖는 분포
- 이항분포
        n번의 베르누이 시행(성공 or 실패)에서 k번 성공할 확률의 분포
        0~n 사이의 값
- 다항분포
        이항분포의 확장 개념
        n번의 시행에서 각 시행이 3개 이상의 결과를 나타냄
- 포아송 분포
        시간, 공간에서 발생하는 사건의 발생 횟수에 대한 확률 분포
        발생횟수 = 확률 변수
- 기하분포
        성공확률이 p인 베르누이 시행에서 첫 번째 성공이 있기까지 k번 실패할 확률
        확률변수: 첫 성공이 일어나기 위해 필요한 시행 횟수

10. 연속확률분포
- 균일 분포
        가능한 값이 실수의 어느 특정 구간 전체에 해당하는 확률 변수
        어떤 특정 구간이 주어져도 동일한 확률
- 정규분포
        일반적인 데이터 분포 중 해당 분포가 대부분의 자연현상과 비슷함
        종모양, 좌우대칭, 중간값 = 평균값
        표준편차의 경우 작을 수록 퍼져보이는 (납작한) 그래프 나타냄
- t-분포
        통계적으로 표본으로부터 모집단의 평균에 대한 추정을 할 때 사용
        sample이 적을 때 표준정규분포보다 눌린 그래프
        sample이 많을 수록 표준정규분포에 가까워짐
        -2~ 2 사이의 값을 일반적인 상황으로 봄
        평균 = 0
- 카이제곱 분포
        표준정규분포를 따르는 확률변수들의 제곱을 합한 분포
        표준정규분포의 분산의 분포 → 몇 개의 표준정규분포를 더했는가 (자유도 몇개 더함?)
        0 이상의 값, 양수
        이상적인 값 =1
- f-분포
        카이제곱의 비율을 따름
        기준 =1
        1보다 큰 값은 유의미하다 봄
        카이제곱이 2개가 사용됨
        분모 → 집단 내 분산 , 분자 → 집단 간 분산
        f value =1 → 굉장히 규칙적으로 분포
        f value >1 → 집단 간 유의미한 차이가 있음
        자유도가 커질 수록 정규분포에 가까워짐

11. 추정
- 모수: 모집단에 대해 알고자 하는 값
- 점추정: 표본의 통계량을 이용해 모수를 하나의 값으로 추정
- 구간추정: 표본의 통계량을 이용해 모수를 하나의 값이 아닌 구간으로 추정

12. 가설검정
- 귀무가설: 기존에 알려진 사실/ 아무런 차이가 없다
- 대립가설: 주장/ 차이가 있다
- 오류 종류
        1종 오류: 실제로는 귀무가설이 참인데 이를 기각하는 오류
        2종 오류: 실제로는 귀무가설이 거짓인데 이를 채택하는 오류

13. 기술통계
- 자료 정리 및 요약 방법
- 표, 그림, 통계량 등을 사용하여 자료의 특성을 파악

14. 추리통계
- 전체 자료를 부분으로 추측
- 수집된 자료를 통해 모집단을 추측

15. 변수
- 종속변수: 연구자가 관심 있는 변수
- 독립변수: 종속변수에 영향을 미치는 변수

16. 산점도
- 변수의 값들을 x, y축 상의 점으로 표시한 그래프
- 두 변수의 관계를 시각적으로 표현
- 선형관계, 함수관계, 이상값, 집단 구분

17. t-검정
- 두 집단의 평균 차이를 비교
- t-value, 신뢰구간, p-value 활용

18. 분산 분석(ANOVA)
- 세 개 이상의 그룹 간의 평균 차이 검정
- f-value, 사후 분석, 분석 가정

19. 교차분석
- 범주형 변수 간의 관계 분석
- 적합도 검정, 독립성 검정, 동질성 검정

20. 상관분석
- 두 변수 간의 관계의 정도를 측정
- 상관계수, 피어슨 분석, 스피어민 분석

21. 회귀분석
- 독립변수와 종속변수 간의 관계 모델링
- 단순회귀, 다중회귀, 다항회귀, 비선형회귀, 로지스틱회귀

22. 정규화 선형회귀
- 과적합 방지를 위해 사용
- L1 규제(라쏘), L2규제(릿지), 엘라스틱넷

23. 일반화 선형회귀
- 범주형 자료 분석
- 로지스틱 회귀분석

24. 다차원 척도법(MDS)
- 객체 간의 근접성을 시각화하여 표현
- 유사성/비유사성 표현

25. 주성분 분석
- 차원 축소 기법
- 상관성이 높은 변수들의 선형 결합으로 주성분 추출
- 다중공산성 문제 해결

26. 시각화
- 스크리 플롯: 주 성분 수 결정

27. 시계열 분석
- 시간의 흐름에 따른 자료 분석
- 미래 예측 가능

28. 자기상관성
- 시계열 데이터에서 시간 간의 데이터 상관성 분석
- 시계열 데이터의 특징을 파악

 

A. 금일 학습 내용

- 기초 통계학 강의 듣기

- ADsP 관련 강의 듣기

 

B. 새롭게 배운 내용

1과목

1) 데이터의 이해, 데이터의 가치

2) 가치창조를 위한 데이터 사이언스의 역량

3) 전략 인사이트

 

2과목

1) 데이터 분석 기획의 이해

2) 분석 방법론, 분석 과제 발굴, 상향식 접근법, 하향식 접근법, 분석 프로젝트 관리 방안

3)  마스터 플랜 수립, 분석 거버넌스 체계 수립, 데이터 거버넌스 체계 수립, 분석 과제 관리 프로세스 수립 등

 

3과목

1) 데이터 웨어하우스와 데이터 마트

2) 통계 분석의 기초 

- 기초통계 - t검정, ANOVA, 교차분석, 상관분석

- 회귀분석 - 단순선형회귀, 다중선형회귀,최적 회귀방정식, 고급회귀분석

- 다변량 분석 - 다차원 척도법, 주성분분석법(PCA)

- 시계열분석

3) 정형 데이터 마이닝

- 분류분석 : 로지스틱 회귀분석, 의사결정나무, 앙상블 분석, 인공신경망 분석,

                   나이브베이즈 분류, k-NN 알고리즘, 서포트 벡터머신, 분류모형 성과평가

- 군집분석 : 계층적 군집분석, 혼합분포군집, 자기조직화지도(SOM)

- 연관분석

 

C. 마무리

- 통계학 어렵다. 공부 열심히 해야겠다.

A. 금일 학습내용

1. SQL 코드카타 문제: 3개 테이블을 이용한 작가별, 카테고리별 총판매량 출력하기

 

- 처음 풀었던 코드이다.

- 어떤 문제가 있는 것인지 몰랐다.

- 3개의 테이블을 한 번에 사용하는 것은 처음이라 구조적 문제라고 생각하였다.

-- BOOK 도서정보 AUTHOR 저자 정보 BOOK SALES 판매정보
SELECT B.AUTHOR_ID
    , A.AUTHOR_NAME
    , CATEGORY
    , B.PRICE*S.SALES AS SALES
FROM (BOOK B
    INNER JOIN AUTHOR A
    ON B.AUTHOR_ID = A.AUTHOR_ID)
    RIGHT JOIN 
    BOOK_SALES S
    ON B.BOOK_ID = S.BOOK_ID
WHERE DATE_FORMAT(S.SALES_DATE,'%Y-%m')='2022-01'
GROUP BY AUTHOR_NAME
        , CATEGORY
ORDER BY A.AUTHOR_ID
        ,B.CATEGORY DESC

 

- 정답으로 인정된 코드는 아래와 같다.

- 총 판매량을 구하기 위해서는 (1권의 책값 X 판매량) 을 모두 더해야하는 거였다.

- 작가별, 카테고리별 책의 총 판매량을 구하는 문제였기 때문에, 한 작가가 같은 카테고리의 책을 여러 권 집필했을 가능성 또한 고려해야 한다는 것을 너무 늦게 알았다.

- 각 테이블의 구성과 각 데이터의 조합이 어떤 것을 의미하는지 이해하지 못하고 문제부터 풀기 시작한 것이 문제였다.

- 칼럼의 구성 요소와 그 구조를 먼저 보고, 문제를 읽고 구조화시킨 후에 코드를 작성하는 버릇을 들여야겠다.

SELECT B.AUTHOR_ID
    , A.AUTHOR_NAME
    , CATEGORY
    , SUM(B.PRICE*S.SALES) AS TOTAL_SALES
FROM (BOOK B
    INNER JOIN AUTHOR A
    ON B.AUTHOR_ID = A.AUTHOR_ID)
    RIGHT JOIN 
    BOOK_SALES S
    ON B.BOOK_ID = S.BOOK_ID
WHERE DATE_FORMAT(S.SALES_DATE,'%Y-%m')='2022-01'
GROUP BY AUTHOR_NAME
        , CATEGORY
ORDER BY A.AUTHOR_ID
        ,B.CATEGORY DESC

A. 주제

그 데이터는 잘못 해석되었습니다, freak analyst, 2022.12.07

그 데이터는 잘못 해석되었습니다 | 요즘IT (wishket.com)

 

그 데이터는 잘못 해석되었습니다 | 요즘IT

무엇이든 데이터가 있으면 쉽게 결정을 내릴 수 있을 것 같습니다. 하지만 현업에서는 데이터가 있어도 결정을 내리기 어려운 상황들이 있습니다. 특히 데이터를 통한 의사결정을 내릴 때, 가장

yozm.wishket.com

 

B. 요약

데이터 해석 시 생존자 편향, 심슨의 역설, 상관 관계의 성급한 일반화 등 인지 편향적 오류를 범할 수 있다. 이를 방지하기 위하여 목표에 맞지 않는 지표를 선택하지 않도록 주의하며, 명확한 목표와 적합한 지표를 통해 올바른 의사결정을 내려야 한다. 또한, 충분한 근거를 확보하고 잘못된 해석의 가능성을 인지하는 세이건 표준을 참고하는 것도 좋은 방법이다. 

 

C. 주요 포인트

1. 데이터를 잘못 해석하는 상황별 유형

1) 생존자 편향의 오류

- 잘못된 지표설정과 해석은 고객의 이탈 등의 결과 초래한다.

- 전체 대상을 기준으로 잡아야 올바른 지표에 따른 해석이 가능하다.

 

2) 심슨의 역설

- 전체 지표와 그룹을 나눈 지표의 방향성이 다르게 나타나는 상황을 말한다.

- 집단을 나누어 그 특성에 따른 기준을 미리 정하고 그 기준으로 지표를 살펴보는 것이 효과적이다.

 

3) 상관관계를 통한 성급한 일반화

- 상관성은 있으나 인과성이 없는 경우 제 3의 공통 원인이 존재할 수 있어 성급한 일반화는 데이터 해석 오류를 초래한다.

- 사용자의 행동과 심리를 인지적으로 구조화하고 두 지표에 동시에 영향을 미치는 공통 원인을 살핀다.

- 새로운 구조로 지표 간의 관계를 파악하는 과정이 필요하다.

 

4) 목적에 맞지 않는 지표 선택

- 명확한 목적을 가지고 어떤 방식으로 프로젝트를 풀어나갈 것인지를 고민해야 한다.

- 목적에 맞는 지표는 제대로 된 의사결정을 가져온다.

 

2. 세이건 표준 참고

- 데이터를 잘못 해석하지 않기 위해 칼 세이건의 세이건 표준을 참고하는 것을 추천한다.

- 데이터를 특별한 주장으로 연결시키기 전 충분한 근거를 확보하였는지, 데이터를 잘못 해석했을 가능성은 없는지, 인지적으로 노력하는 과정이 무엇보다 중요하다.

 

D. 용어 정리

- 생존자 편향: 소수의 성공한 사례를 일반화된 것으로 인식함으로써 나타나는 편향

- 심슨의 역설: 여러 그룹의 자료를 합했을 때의 결과와 각 그룹을 구분했을 때의 결과가 다른 오류

- CTA(Call To Action) : 유저의 행동을 유도하는 버튼

- 인지 편향: 경험에 의한 비논리적 추론으로 잘못된 판단을 하는 것

 

A. 금일 학습 내용

- 기초 프로젝트 발표회 및 마무리 시간을 가졌다.

 

B. 소감

- EDA 방법으로 데이터를 분석을 처음해보았다.

- 분석 방식도 처음인데 어떤 결과를 내야하는지도 몰라 프로젝트가 시작될 때 청사진을 제대로 그리지 못하였다.

- 그래도 데이터 각각을 모두 분석하고 그 데이터 간에 어떤 관계가 있는지 확인하고자 노력하였다.

-  마케팅 전략 부분보다 데이터 분석에 좀 더 가까운 보고서를 제출하면 좋겠다는 피드백을 받았다.

- 데이터 분석에 가까운 보고서는 어떤 보고서일지 고민해 볼 필요가 있을 것 같다.

- 데이터를 잘 모르는 데 EDA 방법을 취하기 전에 어떻게 청사진을 그릴 수 있는지도 여쭙고 싶다.

 

C. 마무리

- 첫 프로젝트가 끝났다.

- 많이 답답했고, 갑갑했고, 허둥지둥 지나간 시간들 속에서 결과물이 나왔다.

- 같이 고생한 팀원들에게 감사하고, 정말 고생많았다고 이야기하고 싶다.

- 첫 팀 프로젝트는 이렇게 마무리가 되었지만 나는 해당 피드백을 받아들여 새로운 보고서를 써보고자 한다.

- 다음 프로젝트가 시작되기 전에 새로운 보고서를 마무리 지어 튜터님들께 피드백을 받을 수 있었으면 좋겠다.

A. Spotify data 데이터 정리하기

- 우선 podcast 관련 열은 사용하지 않을 것임으로 해당 열을 삭제한다.

df = df.drop(columns= ['pod_lis_frequency'
        ,'fav_pod_genre'
        ,'preffered_pod_format'
        ,'pod_host_preference'
        ,'preffered_pod_duration'
        ,'pod_variety_satisfaction'])
df.info()

- 'music_recc_rating'을 제외하고 모두 object type로 통일하였다.

 

B. 결측치 처리하기

- 결측치가 있는 ' preffered_premium_plan ' 열을 살펴보자

- ' preffered_premium_plan  ' 열은 구독을 했거나 구독을 할 의향이 있는 사람들에게 얼마를 지불할 것인가에 대한 수치이다.

df.value_counts('preffered_premium_plan', dropna=False, normalize=True)

 

- NaN 값이 40%로 데이터 대부분의 자리를 차지하고 있다.

- 이 값은 구독을 취소하거나 구독하지 않을 사용자임을 의미하는 것인지, 선택하지 않은 것인가에 대한 구분이 필요하다.

- NaN값이 어떤 의미인지를 알아볼 필요가 있다.

df.value_counts('spotify_subscription_plan', dropna=False)
df.value_counts('premium_sub_willingness', dropna=False)

- 'spotify_subscription_plan' : 현재 어떤 Spotify 구독 계획을 갖고 있는가

- 'premium_sub_willingness' :  프리미엄 구독을 하겠는가 혹은 앞으로도 프리미엄 구독을 계속할 의향이 있는가


용어 정리 및 가정

- 구독 중인 사용자: 총 사용자 중 구독중인 사용자를 의미한다.

- 구독 의향이 있는 사용자 : 신규 구독을 하거나 계속 구독할 의향이 있는 사용자를 포함하여 의미한다.

▷ 무료 사용자 424 명 중 일부는 구독 의향이 있을 수 있다고 가정함

▷  유료 사용자 96명은 모두 구독 중인 사용자로 가정함

1) 구독 중인 사용자 = 96명

2) 신규 구독을 하거나 계속 구독을 이어나갈 의향이 있는 사용자 = 186명

3) 구독을 하였거나 구독할 사용자 = 구독 중인 사용자 + 구독 의향이 있는 사용자 = 96명 + 186명 = 312명

☆ 구독 중인 사용자는 유료 사용자로만 고려함

☆ 무료 사용자 중 구독 의향이 있는 사용자만 포함하여 계산

4) 구독을 취소하거나 구독하지 않을 사용자 = 전체 사용자 - 구독을 하였거나 구독할 사용자 = 520명 - 312명 = 208명

결론

NaN 값과 구독을 취소하거나 구독하지 않을 사용자 값과 같다.

∴ NaN = 구독을 취소하거나 구독하지 않을 사용자 수


df['preffered_premium_plan'] = df['preffered_premium_plan'].fillna('No')

- 결측치가 있는 열은 ' preffered_premium_plan ' 전체 결측치에 'No' 문자값을 넣었다.

C. 이상치 확인하기

- 해당 데이터는 문자열로 구성되어 있다.

- 문자형 값을 고유한 수치로 변환하는 방법에 대해 숙지하지 못하여 열의 값을 모두 확인하는 방법으로 이상치를 확인하였다.

for column in df.columns:
    print(df[column].value_counts())
    print("\n")

 

더보기
더보기

각 컬럼별 값 확인

Age
20-35    422
12-20     71
35-60     23
6-12       3
60+        1
Name: count, dtype: int64


Gender
Female    391
Male      114
Others     15
Name: count, dtype: int64


spotify_usage_period
More than 2 years     169
1 year to 2 years     141
6 months to 1 year    119
Less than 6 months     91
Name: count, dtype: int64


spotify_listening_device
Smartphone                                                                              300
Computer or laptop                                                                       54
Smartphone, Computer or laptop                                                           48
Smart speakers or voice assistants                                                       43
Computer or laptop, Smart speakers or voice assistants                                   14
Smartphone, Smart speakers or voice assistants                                           10
Smartphone, Wearable devices                                                              8
Smartphone, Computer or laptop, Smart speakers or voice assistants, Wearable devices      8
Wearable devices                                                                          8
Smartphone, Computer or laptop, Smart speakers or voice assistants                        7
Smartphone, Computer or laptop, Wearable devices                                          5
Computer or laptop, Wearable devices                                                      5
Smartphone, Smart speakers or voice assistants, Wearable devices                          5
Computer or laptop, Smart speakers or voice assistants, Wearable devices                  3
Smart speakers or voice assistants, Wearable devices                                      2
Name: count, dtype: int64


spotify_subscription_plan
Free (ad-supported)            424
Premium (paid subscription)     96
Name: count, dtype: int64


premium_sub_willingness
No     334
Yes    186
Name: count, dtype: int64


preffered_premium_plan
No                                208
Individual Plan- Rs 119/ month     95
Student Plan-Rs 59/month           94
Duo plan- Rs 149/month             84
Family Plan-Rs 179/month           39
Name: count, dtype: int64


preferred_listening_content
Music      410
Podcast    110
Name: count, dtype: int64


fav_music_genre
Melody                       259
classical                     87
Pop                           85
Rap                           55
Electronic/Dance              16
All                            6
Rock                           4
Kpop                           4
Classical & melody, dance      2
Old songs                      1
trending songs random          1
Name: count, dtype: int64


music_time_slot
Night        312
Afternoon    117
Morning       91
Name: count, dtype: int64


music_Influencial_mood
Relaxation and stress relief                                                                                     195
Uplifting and motivational                                                                                        67
Sadness or melancholy                                                                                             55
Relaxation and stress relief, Uplifting and motivational                                                          44
Relaxation and stress relief, Uplifting and motivational, Sadness or melancholy, Social gatherings or parties     35
Relaxation and stress relief, Sadness or melancholy                                                               33
Relaxation and stress relief, Uplifting and motivational, Sadness or melancholy                                   22
Social gatherings or parties                                                                                      16
Relaxation and stress relief, Uplifting and motivational, Social gatherings or parties                            14
Relaxation and stress relief, Social gatherings or parties                                                        13
Uplifting and motivational, Sadness or melancholy                                                                 12
Relaxation and stress relief, Sadness or melancholy, Social gatherings or parties                                  8
Uplifting and motivational, Social gatherings or parties                                                           4
Sadness or melancholy, Social gatherings or parties                                                                1
Uplifting and motivational, Sadness or melancholy, Social gatherings or parties                                    1
Name: count, dtype: int64


music_lis_frequency
While Traveling                                                                111
leisure time                                                                    87
While Traveling, leisure time                                                   65
While Traveling, Workout session, leisure time                                  48
Workout session                                                                 33
Study Hours                                                                     19
Office hours                                                                    16
While Traveling, Workout session                                                16
Office hours, While Traveling                                                   12
Office hours, While Traveling, leisure time                                     12
Office hours, While Traveling, Workout session                                  10
Study Hours, While Traveling, leisure time                                      10
Study Hours, While Traveling                                                     9
Office hours, Study Hours, While Traveling, Workout session, leisure time        7
Study Hours, While Traveling, Workout session                                    7
Office hours, Study Hours, While Traveling                                       7
Study Hours, Workout session                                                     6
Office hours, leisure time                                                       6
Workout session, leisure time                                                    6
Study Hours, While Traveling, Workout session, leisure time                      4
Study Hours, Workout session, leisure time                                       4
Study Hours, leisure time                                                        4
Office hours, While Traveling, Workout session, leisure time                     3
Office hours, Study Hours, While Traveling, leisure time                         3
Office hours, Workout session                                                    3
Office hours, While Traveling,                                                   2
Office hours, Study Hours, Workout session                                       2
While Traveling, Workout session, leisure time, Night time, when cooking         1
Social gatherings                                                                1
Random                                                                           1
Office hours, Workout session, leisure time                                      1
While Traveling, Before bed                                                      1
Office hours, Study Hours, While Traveling, Workout session                      1
Office hours, Study Hours, While Traveling, Workout session, leisure time,       1
Office hours,Study Hours, While Traveling, leisure time                          1
Name: count, dtype: int64


music_expl_method
recommendations                              113
Playlists                                    112
recommendations, Playlists                    86
Others                                        55
Radio                                         51
Playlists, Radio                              18
recommendations, Playlists, Others            18
recommendations, Others                       15
recommendations, Playlists, Radio             13
Playlists, Others                              9
Radio, Others                                  7
recommendations, Radio                         6
Playlists, Radio, Others                       6
recommendations, Radio, Others                 4
recommendations, Playlists, Radio, Others      2
recommendations,Others, Social media           1
Others, Social media                           1
Others, Friends                                1
recommendations, Others, Social media          1
Others, Search                                 1
Name: count, dtype: int64


music_recc_rating
3    190
4    174
5     86
2     56
1     14
Name: count, dtype: int64

- 'Age' 칼럼의 6-12 범위, 60+ 범위값을 이상치라 둔다.

- Spotify 일반적으로 성인(18세 이상)을 대상으로 하는 서비스이다.

- 6~12세의 경우, 부모와 함께 사용할 수도 있지만 값의 개수가 3개이고, 그 비율이 높지 않으므로 이상치로 본다.

- 60세 이상의 사용자가 극소수라는 점에서 이상치로 분류하였다.

 

df.drop(df[df['Age'].isin(["6-12", "60+"])].index, inplace=True)

- 이상치 제거를 통해 아래와 같이 칼럼이 변경되었다.

D. 최종 데이터 info()

 

A. 금일 학습 내용

1. 코딩 테스트 문제

어떤 정수들이 있다.
이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 
이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어진다.

제한사항
- absolutes의 길이는 1 이상 1,000 이하이다.
- absolutes의 모든 수는 각각 1 이상 1,000 이하이다.
- signs의 길이는 absolutes의 길이와 같다.
- signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미한다.
실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성하라.
def solution(absolutes, signs):
    answer = 0
    for i in range(len(absolutes)):
        if signs[i] is True:
            answer += absolutes[i]
        else:
            answer -= absolutes[i]

    return answer

- 오늘의 코딩 테스트 문제였다.

- 어렵지 않게 풀었지만 다른 사람들의 코드를 살펴보니 zip() 함수를 많이 사용하였다.

 

-- 타인 코드1)

def solution(absolutes, signs):
    return sum(absolutes if sign else -absolutes for absolutes, sign in zip(absolutes, signs))

 

-- 타인 코드2)

def solution(absolutes, signs):
    answer=0
    for absolute,sign in zip(absolutes,signs):
        if sign:
            answer+=absolute
        else:
            answer-=absolute
    return answer

 

2. zip() 함수

- 정의: 동일한 개수(=길이가 같음)로 이루어진 자료형을 묶어주는 역할을 하는 내장함수이다.

- 데이터는 위와 같은 형태이다.

- absolutes의 길이가 3이고 signs의 길이 또한 3임으로 zip()함수를 사용할 수 있다.

- 사용한다면 아래와 같이 리스트 형태의 결과가 나온다.

 

2. 두 변수의 자료형이 다르다면 어떤 결과가 나올까.

a = [1,2,3,4,5,6]
b = 'python'

list(zip(a,b))

 

- a변수는 리스트 형태, b변수는 문자열 형태로 zip함수를 사용해보았다.

 

- 소괄호로 묶인 튜플 형태로 반환되는 것을 알 수 있다.

 

B. 마무리

- 튜플로 묶이는 이유는 무엇인지 궁금하다

- 내장함수는 얼마나 많이 있는 것일까.

 

A. 주제

: 개발 블로그는 어떻게 써야할까?,F -Lab & Company,2022.07.13

개발 블로그는 어떻게 써야할까? (f-lab.kr) 

 

B. 요약

개발자는 블로그를 운영하는 목적을 분명히 하여야한다 이야기하며 글 작성법을 소개하였다.

 

C. 주요 포인트

1. 공부한 내용을 공유하기

- 어려운 개념을 잘 정리하여 공유하면 기술력을 인정받을 수 있다.

- 단순한 클래스 사용법이나 다른 블로그 내용을 재정리한 글은 한계가 있다.

 

2. 활용한 내용을 적기:

- 이해가 중요한 개발에서는 공부한 내용을 실제 프로젝트에 어떻게 활용했는지 공유하는 것이 중요하다.

- 특정 개념을 프로젝트에 적용하여 개선한 경험을 공유하는 것을 추천한다.

 

3. 깊이 있는 개념 정리하기

- 단순한 개념 소개보다는 내부 메커니즘까지 깊게 다룬 글이 더 유익하고 높은 평가를 받을 수 있다.

 

4. 공유 목적의 글 작성

- 블로그는 다른 사람들과 경험과 지식을 공유하는 공간이다.

- 다른 사람들이 이해하기 쉽도록 글을 작성해야 한다.

 

 

A. 데이터 변수의 이름, 설명 확인하기

- Spotify 사용자 행동 데이터 세트

- 고객 개인정보, 사용장치, 행동에 대한 데이터 존재

- 각 컬럼별 이름 설명

번호 컬럼명 설명
1 Age 사용자의 연령층은 어떻게 되는가
2 Gender 사용자의 성별은 어떻게 되는가
3 spotify_usage_period Spotify를 사용한 지 얼마나 되는가
4 spotify_listening_device Spotify를 청취할 때 주로 사용하는 장치는 무엇인가
5 spotify_subscription_plan 현재 어떤 Spotify 구독 계획을 갖고 있는가
6 premium_sub_willingness  프리미엄 구독을 하겠는가 혹은 앞으로도 프리미엄 구독을 계속할 의향이 있는가
7 prefered_premium_plan 프리미엄이거나 프리미엄을 구독할 의향이 있는 경우 구독료를 얼마를 지불하겠는가
8 preferred_listening_content 무엇을 더 듣고 싶은가
9 fav_music_genre  어떤 장르의 음악을 가장 좋아하는가
10 music_time_slot 가장 좋아하는 음악 감상 시간은 언제인가
11 music_Influencial_mood 음악을 들을 때 다음 중 어떤 기분이나 상황이 음악 선택에 가장 큰 영향을 미치는가
12 music_lis_frequency 언제 음악을 더 자주 듣는가
13 music_expl_method Spotify에서 새로운 음악을 어떤 방법으로 접하는가
14 music_recc_rating Spotify 음악 추천은 몇 점인가
15 pod_lis_frequency 팟캐스트를 얼마나 자주 듣는가
16 fav_pod_genre 팟캐스트 중 어떤 장르를 가장 좋아하는가
17 preffered_pod_format 일반적으로 선호하는 팟캐스트 형식은 무엇인가
18 pod_host_preference 무명인이 호스팅하는 팟캐스트 혹은 유명인이 호스팅하는 팟캐스트를 선호하는가
19 prefered_pod_duration 짧은 팟캐스트 에피소드(30분 미만) 또는 긴 에피소드(30분 이상)를 선호하는가
20 pod_variety_satisfaction  Spotify의 팟캐스트의 다양성과 가용성에 만족하는가

 

B. Spotify 데이터 구성 확인

df.info()
df.isnull().sum()

 

- value_counts() 함수를 사용하면 아래와 같이 모든 정보가 뜨지만 티스토리에서 보기 어려움으로 한 행만 불러오기로 한다.

df.value_counts()

 

- 50번째 행의 데이터를 보면 다음과 같다.

df.iloc[50, :]

 

- 'preffered_premium_plan', 'fav_pod_genre', 'preffered_pod_format' , 'pod_host_preference', 'preffered_pod_duration' 은 null 값을 포함하고 있다.

- podcast 의 경우 결측치가 많고, 이를 대신할 수 있는 데이터가 없으므로 관련 열은 제외하고 데이터 분석에 임한다.

- 'prefferd_premium_plan'의 null값은 어떤 값을 의미하는지 아직 알 수 없으므로 문자 'NA'로 대체하는 방법을 고려한다.

 

df.describe()

- 위와 같이 'music_recc_rating'  음악 추천과 관련된 점수의 기초통계를 확인할 수 있다.

- describe() 의 경우, 수치형 데이터를 기반으로 기초 통계를 출력한다.

- 다만 info()에서 확인하였듯 수치형 데이터는 음악 추천 점수열 밖에 없다.

 

df.describe(include=object)

- object type의 기초 통계도 출력하면 아래와 같다.

- 열이 너무 많아 분할하여 올린다.

 

 

- 기초 통계에서 알 수 있는 사항은 다음과 같다.

  •  20-35세의 응답자가 422명으로 가장 많으며, Spotify의 주요 소비층이다.
  • 음악 스트리밍 서비스가 젊은 세대에게 특히 인기가 있음을 나타낸다.
  • 그 중 여성 소비자가 391명으로 전체의 75%를 차지하고 있다.
  • 2년 이상 사용한 응답자가 169명으로, 오랜 기간 동안 서비스를 이용하고 있는 사람이 32.5%이다.
  • 스마트폰을 사용하는 응답자가 300명으로, 해당 기기가 음악 소비의 주요 플랫폼임을 알 수 있다.
  • 무료(광고지원) 구독을 사용하는 응답자가 424명으로, 유료 구독자가 상대적으로 적다.

- 여기서 이끌어낼 수 있는 인사이트는 아래와 같다.

  • 젊은 소비자들은 최신음악과 트랜드에 민감하게 반응하며, 디지털 플랫폼을 적극적으로 활용하기에 이들의 선호도를 충족시키는 것이 중요하다.
  • 여성 소비자가 선호하는 콘텐츠나 특정 장르에 맞춘 마케팅 전략이 필요하다.
  • 사용자의 충성도 및 서비스에 대한 만족도가 높으므로 장기적인 사용자 확보를 위해 지속적인 서비스 개선과 사용자 경험 향상이 중요하다.
  • 모바일 중심의 서비스 제공이 필수적이다.
  • 약 82%에 달하는 사용자가 무료 서비스를 선호하기에 유료 구독으로의 전환을 유도하기 위해서는 추가적인 가치 제안을 고려해야 한다.

 

 

A. ON AIR 분석절차를 기반으로 한 프로젝트

1) Objective (목표)

- 프로젝트 목표:  음악 플랫폼(Spotify) 유저 행동 데이터를 분석하여 서비스 현황을 확인하고 개선점을 제시하고자 한다.

- 부가적인 목표: 기초 프로젝트인만큼 데이터 EDA를 진행하고 결과를 도출하여 발표하는 것을 가장 큰 목표를 두고 있다.

 

2) Necessary data (데이터)

- 데이터 소스(유형, 범위 명시) 와 수집 계획을 고려한다.

- 이에 따라 kaggle에 있는 Spotify User Behavior Dataset 자료를 활용하고자 한다.

- 데이터 출처:  https://www.kaggle.com/datasets/meeraajayakumar/spotify-user-behavior-dataset/data

 

3) Analytics (분석)

- 데이터 전처리 및 시각화하여 인사이트를 도출하는 계획을 제시한다.

- EDA를 통해 이상치/결측치를 처리하고 시각화한다.

 

4) Interpretation (해석)

- 분석 결과 해석하고 비즈니스에 어떻게 적용할지 제언을 제하고자 한다.

 

5) Report (보고)

- 인사이트가 잘 돋보이게 보고서를 작성한다.

 

B. 프로젝트 계획서

구분 작성내용
프로젝트 명 음악 플랫폼 유저 행동 데이터 분석을 통한 유료 구독자 수 증진 방안
프로젝트 목표 사용자 패턴을 이해하고 데이터 분석을 통한 서비스개선 및 유료 구독자 수 증진
프로젝트 핵심내용 사용자 행동 데이터를 수집 · 분석하여 유료 구독 유도를 위한 전략 개발

 

 

C. EDA (Exploratory Data Analysis, 탐색적 데이터분석)

https://www.dropbase.io/post/data-preparation-101

- 정의: 수집한 데이터를 다양한 각도에서 관찰하고 이해하는 과정으로 데이터를 분석하기 전에 그래프나 통계적인 방법으로 자료를 직관적으로 바라보는 과정

 

-  과정

1) 분석의 목적과 변수가 무엇이 있는지, 개별 변수의 이름이나 설명을 갖는지 확인한다.

2) 데이터를 전체적으로 살펴보며 이상치, 결측치 등을 확인한다.

3) 데이터의 개별 속성 값이 예측한 범위와 분포를 갖는지 확인하며, 아닌 경우 그 이유를 확인한다.

4) 개별 속성 관찰에서 찾아내지 못했던 패턴을 상관관계, 시각화 등을 통해 나타낸다.

+ Recent posts