업무에 파이썬 활용할 줄 알기

데이터 분석 종합반 4주차 복습 본문

Python/[스파르타] 데이터 분석 종합반

데이터 분석 종합반 4주차 복습

SEO 데이터분석가 2023. 12. 1. 13:17

01. 4주차 오늘(새롭게) 배운 것

  • 매체별 유입고객수 확인
    • 그래프 바 색상 변경
    • 바를 가로로 나타내기
    • 바 숫자 나타내기
  • 게임개발반 수강이력 확인:
    • 수강이력이 있는 경우만(특정조건만) count하기
    • 필요없는 컬럼 제거
  • 반별 goal 확인:
    • 하나의 그래프안에 2개의 라인 표시하는 방법
  • 정가 구입 vs. 할인 구입 전환율 비교
    • 특정컬럼의 특정조건만 count하기
    • 2가지 데이터를 하나의 바그래프로 나타내기

02. 광고 효율이 나지 않는 매체를 찾아라!_전처리

#문제상황: 게임종합반 구매전환율이 안정적이지 않다. 게임종합반 수강생 유입에 집중하여 액션플랜을 짜보자
#문제파악: 광고효율이 좋지 않다
#원하는 결과: 효율이 좋지않은 광고매체 예산 줄이고, 다른 매체 예산 늘려 광고효율 높이기
#가설: 광고효율 낮은 매체 비용을 효율이 좋은 매체에 집행하면 기존대비 50%의 광고효율을 증대시킬 수 있을 것이다.

#광고매체별 유입자수 테이블/그래프 작성

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic')

sparta_data = pd.read_table('/content/user_db1.csv', sep=',')
sparta_data.head()

#결측치 점검: 데이터 확인>결측치 확인>결측치 제거

#데이터 확인
sparta_data.info()
print()

#결측치 확인
sparta_data.isnull().sum()
#null 데이터 행만 확인해볼 수 없나?
sparta_data[sparta_data.discounted.isna()]
sparta_data[sparta_data.isna().any(axis=1)]

sparta_data = sparta_data.dropna()
sparta_data.info()

#광고매체별 수강생 수 
access_media = sparta_data.groupby('access_media')['user_id'].count()
access_media

 

03. 광고 효율이 나지 않는 매체를 찾아라!_시각화 및 결론 도출

04. 시각화 한 스푼 더 떠먹기!

 

1) 그래프 디테일 바꾸기

(1) 막대 그래프 색 변경

원하는 색 변경

plt.bar(access_media.index, access_media.values, color='green')

 

바마다 다른색 

#alpha는 색의 투명도를 조절 하고 싶을때 
# #hex나 rgb로도 색상 표현도 가능
plt.bar(access_media.index,
        access_media.values,
        color = ['gold', 'b', '#FF0000', 'green', 'orange', 'red', '#000000'],
        alpha = 0.3)

 

테두리 색 및 두께 변경하기

#edgecolor = '원하는 색상', linewidth = 원하는 두께로 각 바의 테두리의 색상과 두께 변경
plt.bar(access_media.index,
        access_media.values, 
        color = ['gold', 'b', '#FF0000', 'green','orange','red','#000000'], 
        alpha = 0.3,
        edgecolor = 'black', 
        linewidth = 1.5)

 

2) 그래프 너비 바꾸기

바 두께 변경하기

#width=원하는 두께로 그래프의 바 너비를 변경 할 수 있어요! 기본 값은 0.8입니다!
plt.bar(access_media.index,
        access_media.values, 
        width=0.5)

 

3) 그래프 폰트 크기 바꾸기

#fontsize="원하는 크기"로 폰트 사이즈를 조절 할수 있어요!
plt.title('수강생 별 수강 신청 경로',
          fontsize=12)

4) 그래프 각 바의 수치 나타내기

#각 바의 수치 표기하는 방법
#수치필요
#수치를 어떤 위치에 표기해줄 것인가 > 반복문으로 아래 사항들을 구현
#표기해줄 x,y좌표를 구한다 / 숫자형식 / 좌우,위아래 정렬 / 사이즈 지정
bar = plt.bar(access_media.index, access_media.values)
for rect in bar:
  height = rect.get_height()
  plt.text(rect.get_x() + rect.get_width()/2.0, 
           height,
           '%.1f' % height,
           #숫자형식인거 같은데 뭔지 잘모르겠다
           ha='center',
           va='bottom',
           size = 12)

 

4) 가로 그래프 그리기

#.bar에 h만 더 추가해서 가로그래프로 변경
plt.barh(access_media.index, access_media.values, color="g")

 

05. 패키지 상품 기획하기_가설 수립 및 전처리

 

원본데이터와 필요 데이터

 

코드 작성

#패키지 상품 기획하기
#가설: 게임반 수강생은 웹개발반 수강신청을 가장 많이 했을 것이기 때문에 2과목을 패키지 구성하는 것이 개임반 구매전환율을 가장 높일 수 있을 것이다.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic')

sparta_data = pd.read_table('/content/user_registered_class.csv', sep = ',')
sparta_data.head()

#특정 컬럼 삭제 어떻게 하나?

#어떤 데이터를 봐야하는가? web, app, sql별 총 수강생수

#컬럼별 합계 
sum_of_students_by_class = sparta_data[sparta_data==1].count()
#1인것만 더해주는건 알겠는데, 그냥 컬럼별 합계를 구하려면 어떻게 해야하나?

#불필요 행 제거
sum_of_students_by_class = sum_of_students_by_class.drop(['user_id', 'web.1'])
sum_of_students_by_class

 

※추가로 알고 싶었던 함수

1. 컬럼 합계 계산

 

원하는 열 지정하여 합계 계산 함수

#원하는 열 지정하여 합계 계산
sum_of_students_by_class = sparta_data[['web','app','sql']].sum()
sum_of_students_by_class

 

모든 컬럼의 합계 계산 함수

#모든 컬럼의 합계 계산
sum_of_students_by_class = sparta_data.sum()
sum_of_students_by_class

 

2. 특정 컬럼 삭제 방법

 

하나의 컬럼 삭제 함수

#하나의 컬럼 삭제
sparta_data = sparta_data.drop(labels='web.1', axis=1)
sparta_data

axis=1의 의미: 컬럼 중 'web.1'을 찾겠다

 

두개이상의 컬럼 삭제 함수

#두개이상의 컬럼 삭제
sparta_data = sparta_data.drop(labels=['user_id','web.1'], axis=1)
sparta_data

 

06. 패키지 상품 기획하기_추가 가설 시각화 하기

한 화면에 여러 그래프 겹쳐그리기

#왜 앱개발반 신청자가 게임개발반에 관심이 많을까?
#공통관심사가 부수입창출로 유사해서 일 것이다

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic') #한글 깨짐 방지 글꼴 설정

sparta_data_app = pd.read_table('/content/user_db_app.csv',sep=',')
sparta_data_game = pd.read_table('/content/user_db_game.csv',sep=',')


#목표별 수강생수
app_users_goal = sparta_data_app.groupby('goal')['user_id'].count()
game_users_goal = sparta_data_game.groupby('goal')['user_id'].count()

#목표별 수강생수(게임반,앱반) - 한화면에 여러그래프 겹쳐그리기
plt.figure(figsize=(8,6))
#2개 데이터에 대해 각각 라인그래프를 만들어 주면 됨
plt.plot(app_users_goal.index, app_users_goal.values, color="red", label="app")
plt.plot(game_users_goal.index, game_users_goal.values, color="blue", label="game")
#범례는 .legend(), 알아서 label명을 가져오는걸까?
plt.legend()
plt.title('앱 종합반, 게임 종합반 수강생의 관심사')
plt.xlabel('수강 목적')
plt.ylabel('수강생 수')
plt.show()

 

 

2개의 테이블을 하나의 그래프로 표현하는 방법을 배웠는데,

 

아래와 같이 전처리 테이블을 만들어서 그래프 만들어주는 코드도 궁금하다

 

07. 할인은 정말 효과적인 선택일까?_전처리하기

그냥 바로 이렇게 하면 안되나?

08. 할인은 정말 효과적인 선택일까?_데이터 분석 및 시각화

#문제: 결제 마지막 페이지 이탈률 높고, 금액이 문제인 것으로 예상됨
#원하는 결과: 결제 마지막 페이지에서 고객 이탈율 줄이기
#가설: 할인쿠폰 제공하면 결제율을 높일 수 있을 것이다
#실험진행: 12,000명 대상 할인쿠폰 제공 / 미제공 2개 그룹

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic') #한글 깨짐 방지 글꼴 설정

sparta_data = pd.read_table('/content/user_db1.csv',sep=',')

#할인받은 그룹이 구매를 더많이 했을까?
#할인구매, 정가구매별 인원수
sum_of_students_by_discounted = sparta_data[sparta_data['group']==1]['user_id'].count()
sum_of_students_by_not_discounted = sparta_data[sparta_data['group']==0]['user_id'].count()
#언제 ()를 사용하고, 언제 []를 사용하는지 아직 잘모르겠음..
#왜 저렇게 하지 그냥 하나의 테이블 형태로 만들면 안되나?
#test = sparta_data('group')['user_id'].count()

#할인구매(0), 정가구매(1)의 결제전환율 
#(할인구매자수/그룹전체수, 정가구매자수/그룹전체수, 할인쿠폰 제공그룹, 미제공그룹 각각 6,000명이 전체 모수인가?)
percent_of_students_by_discounted = sum_of_students_by_discounted/12000*100
percent_of_students_by_not_discounted = sum_of_students_by_not_discounted/12000*100
print(percent_of_students_by_discounted, percent_of_students_by_not_discounted)

#각 그룹별 결제전환율 바그래프 그리기
plt.figure(figsize=(10,5))
x_list=["정가 구입 그룹","할인 적용 그룹"]
y_list=[percent_of_students_by_discounted, percent_of_students_by_not_discounted]
plt.bar(x_list, y_list)
plt.title('할인 여부 결제 전환율 비교 분석')
plt.xlabel('할인 적용 여부')
plt.ylabel('결제 전환율')
plt.show()

#실제 데이터 분석 상황에서는 이런식으로 하지 않을 것 같은 방법이다

2개의 테이블을 하나의 그래프로 표현하는 코드 비교

<2개의 테이블을 하나의 라인그래프로 표현하는 코드>

의문점: 여러가지 라인을 나타내는 방법이 이게 최선일까?

plt.plot을 아래 plt.bar처럼 하나의 함수에 2개라인을 표현하기에는 컬러와 라벨구분을 못해주긴 하겠다..!

 

<2개의 테이블을 하나의 바그래프로 표현하는 코드>

09. 4주차 끝 & 숙제 설명

숙제하는 중 시행착오

#숙제
#할인율이 높으면 결제가 많아지나? 
#가설: 할인율이 높으면 결재 전환율도 높을 것이다
#실험자체가 좀 이해가 안가긴한데..
#2706명에게 1,2,3만원 쿠폰을 동시에 발송했다는게 무슨말이여??
#2706명이 전체 모수라면 3등분으로 나눠서 1,2,3만원을 각 3개 그룹으로 나눠서 보내는게 맞지 않나?
#2706 * 3 = 8118인데.. 2706명은 어디서 나온 숫자이며..

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family='NanumBarunGothic') #한글 깨짐 방지 글꼴 설정

sparta_data = pd.read_table('/content/user_db1.csv',sep=',')


#무슨 데이터를 봐야하지?
#discounted별(1,2,3만원별) 결제 전환수

#그룹별 결제전환수
students_discounted = sparta_data.groupby('discounted')['user_id'].count()

#바그래프
plt.figure(figsize=(5,5))
x_label = ['10,000원', '20,000원','30,000원']
plt.bar(x_label, students_discounted.values)
plt.title('할인금액별 결제전환수')
plt.xlabel('할인금액')
plt.ylabel('결제전환수')
plt.show()

 

더 알아보고 싶은 것

그래프 바 수치 나타내기에서 숫자형식 함수부분 이해안감 ('%.1f' % height)

범례 메소드를 다양한 그래프에 적용을 해봐야 감이 잡힐 것 같다

 

수업 목차

01. 4주차 오늘 배울 것

02. 광고 효율이 나지 않는 매체를 찾아라!_전처리

03. 광고 효율이 나지 않는 매체를 찾아라!_시각화 및 결론 도출

04. 시각화 한 스푼 더 떠먹기!

05. 패키지 상품 기획하기_가설 수립 및 전처리

06. 패키지 상품 기획하기_추가 가설 시각화 하기

07. 할인은 정말 효과적인 선택일까?_전처리하기

08. 할인은 정말 효과적인 선택일까?_데이터 분석 및 시각화

09. 4주차 끝 & 숙제 설명