강의내용 정리
문제파악: 게임개발 종합반의 전체광고 효율을 살펴보았는데 회사에서 사용한 광고 비용에 비해 매출까지의 효율이 나타나지 않고 있습니다.
원하는 결과: 가장 효율이 나지 않는 광고매체를 찾아서 예산을 줄이고 다른 매체에서 예산을 늘려, 같은 비용 대비 광고 효율을 높이고 싶습니다.
※ 단, 광고별 단가는 똑같다고 가정합니다.
우선 데이터를 확인 해 줍니다
|
import pandas as pd
import matplotlib.pyplot as plt
sparta_data = pd.read_csv('/content/user_db1.csv')
sparta_data.tail()
|

각 미디어 별 어떤 경로를 통해 게임개발 종합반을 수강하게 되었는지 알 수 있습니다.
그리고 ★결측치를 파악해 줍시다. (매번 까먹는 것 같습니다)
|
sparta_data = pd.read_csv('/content/user_db1.csv')
sparta_data.info()
|

이렇게 데이터를 보면 discounted 에는 5654개의 자료가 있지만 다른 곳에는 8128개의 자료가 있는것을 확인 할 수 있습니다.
더 정확하게 보려면
|
sparta_data.isnull().sum()
|
코드를 넣어 주면

discounted에 2474개의 결측치가 있는 것을 알 수 있습니다.
그리고 이 결측치를 제거해주기 위해
|
sparta_data = sparta_data.dropna()
|
위 코드를 넣어주고 다시 결측치를 세주면

결측치가 사라지게 됩니다.
이제 데이터를 분석해봅시다
우리는 access_media 별 수강생 수를 세면 되기 때문에 group by 와 count를 이용해 주면 됩니다.
|
#수업 신청 경로 기준 수강생수 합계
access_media = sparta_data.groupby('access_media')['user_id'].count()
access_media
|
추가 설명: 위에서 access_media를 그룹으로 user_id의 수를 세어준 것입니다.

이제 위 도표를 시각화 하겠습니다.
|
import matplotlib.pyplot as plt
import numpy as np
plt.rc('font', family='NanumBarunGothic') #한글 깨짐을 방지시켜줘요!
|
일단 필요한 라이브러리를 불러와 줍니다.
|
#plt.figure(width, height) : 넓이와 높이 만큼 이미지를 생성한다는 것을 말해줍니다!
plt.figure(figsize=(6,6))
#각각 어떤 값이 들어가야 하는지 입력해 볼까요?
#plt.bar(X축값, Y축값)
plt.bar("x축 기입" ,"y축 기입")
#그래프의 제목
plt.title('수강생 별 수강 신청 경로')
#그래프의 x축 라벨 이름
plt.xlabel('수강 신청 경로')
#그래프의 y축 라벨 이름
plt.ylabel('수강생 수')
#x축 눈금의 글씨의 각도 변경을 위해 plt.xticks(rotation="원하는 각도")를 이용해요!
#x축 눈금의 글씨를 45도 회전
plt.xticks(rotation=45)
#그래프를 화면에 나타나도록 합니다.
plt.show()
|
바를 그려주는 코드를 복사해준 후 x축에는 access_media.index , y축에는 access_media를 넣어주면

이렇게 매체별 수강생 수 도표가 완성되게 됩니다.
이를 통해 우리는 오프라인 광고를 줄이고 인스타그램 광고를 늘림으로써 더 많은 수강생 수를 기대해 볼 수 있을 것 입니다.
막대 그래프 시각화하기
위 그래프를 조금 더 보기 좋게 바꾸는 여러 방법을 배웠습니다.
1) 막대그래프 색 변경하려면
|
plt.bar(access_media.index ,access_media, color = 'red',)
|
기존 x,y 값을 넣는 곳에 color='원하는 색' 명령어를 추가해 주면 됩니다.
2) 막대그래프 마다 색을 입히려면
|
#alpha는 색의 투명도를 조절 하고 싶을때 씁니다! :)
# #hex나 rgb로도 색상 표현도 가능해요!
plt.bar(access_media.index,access_media.values, color = ['gold', 'b', '#FF0000', 'green','orange','red','#000000'], alpha = 0.3)
|
color = [ ] 안에 차례로 원하는 색을 넣어주면 됩니다. 추가로 alpha로 색을 진하기를 조정할 수 있습니다.
3) 테두리 색 및 두께 변경
|
#edgecolor = '원하는 색상', linewidth = 원하는 두께로 각 바의 테두리의 색상과 두께 변경이 가능 합니다!
plt.bar(access_media.index,access_media.values, color = ['gold', 'b', '#FF0000', 'green','orange','red','#000000'], alpha = 0.3,edgecolor = 'green', linewidth = 0.5)
|
뒤에다 edgecolor = '원하는 테두리색', linewidth = '원하는 테두리 굵기' 를 넣어줄 수 있습니다.
4) 표 막대그래프의 두께 변경
|
#width=원하는 두께로 그래프의 바 너비를 변경 할 수 있어요! 기본 값은 0.8입니다!
plt.bar(access_media.index,access_media.values, width=0.5)
|
똑같이 뒤에서 width를 통해 원하는 바의 두께를 결정해줄 수 있습니다.
5) 폰트 사이즈 변경
이번에는 plt.bar가 아니라 plt.title을 변경해 줘야 합니다.
|
plt.title('수강생 별 수강 신청 경로',fontsize=20)
|
뒤에다 fontsize = '원하는 폰트 사이즈' 명령어를 입력해주면 됩니다.
6) 각 바의 수치를 위쪽에 나타내고 싶을때
|
#그래프를 bar라는 변수에 넣고,
bar = plt.bar(access_media.index,access_media.values)
#for 반복문으로,
for rect in bar:
#각 바의 세로길이 값을 구하고,
height = rect.get_height()
#bar의 가장 정 가운데 x 좌표 구하기 : get_x()로 x축의 가장 왼쪽 부분 + get_width의 절반 값
plt.text(rect.get_x() + rect.get_width()/2.0, height, '%.1f' % height, ha='center', va='bottom', size = 12)
|
위 코드를 추가해주면

이런식으로 각 막대 그래프 위에 인덱스 별 수치를 표시해줄 수 있습니다.
7) 세로그래프 대신 가로 그래프를 그리고 싶을때
plt.bar("x축 기입" ,"y축 기입") -> plt.barh 로 바꿔주면 됩니다. h만 추가하면 되겠죠
한 화면에 두개 그래프 그려넣기
|
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()
app_users_goal
game_users_goal
|
일단 이렇게 2개의 데이터를 봐줍니다.
참고로 한개의 데이터씩 따로 봐줘야 합니다.


그러면 이러한 데이터가 각각 나오게 되는데 이걸 한 화면안에 띄워줄 예정입니다.
|
#그래프 크기 설정 (인치)
plt.figure(figsize=(8,6))
#x축 y축 설정을 동일하게 해주고, color와, label을 추가 해주시면 됩니다. 참 쉽죠?
#app 종합반 수강생 관심 분야
plt.plot(app_users_goal.index ,app_users_goal,color="red", label="app")
#game 종합반 수강생 관심 분야
plt.plot(game_users_goal.index ,game_users_goal,color="blue", label="game")
#각 그래프의 범례는 .legend()을 이용하여 만들어 줍니다! :)
plt.legend()
#그래프 타이틀
plt.title("앱 종합반, 게임 종합반 수강생의 관심사")
#x축 레이블
plt.xlabel('수강 목적')
#y축 레이블
plt.ylabel('수강생 수')
#그래프 보여주기
plt.show()
|
이렇게 두개의 plt.plot을 설정해주면

이런식으로 두가지 데이터를 한 화면안에 띄워줄 수 있습니다.