이번 포스트에선 스파르타코딩클럽의 "[왕초보] 마케터, 기획자를 위한 실전 데이터 분석" 수업 중 3주차 수업에 대한 개발일지를 정리하고자 한다.
이번 수업의 목표는 총 3가지이다:
1. 실제 데이터를 분석,
2. 그래프에서 인사이트를 도출,
3. 주어진 문제에 대한 가설을 데이터 기반으로 검증.
이번 3주차 수업은 2주차까지 배웠던 프로세스는 동일하게 진행하되,
프로세스에 살을 붙이는 느낌이었다.
따라서, 새로 배웠던 코드나 함수를 위주로 포스트를 정리했다.
1주차와 2주차 개발일지 링크는 참고용으로 첨부해두었다.
총 2가지 미션을 기반으로 수업은 진행되었다.
미션이 진행된 가상 배경은, 스파르타코딩클럽 회사에 다니는 신입사원에게 팀장님이 지난 회의 중 나왔던 이야기들을 바로 진행할 수 있게 데이터로 체크해달라는 요청을 실행하는 것이다.
미션 #1) 가장 적절한 고객 관리 타이밍은?
미션 #1의 진행 목적은, 완주를 위한 고객관리 메시지를 보낼 최적의 시간대를 찾기 위함이다.
수강생들이 가장 많이 혹은 가장 적게 수업을 듣는 시간과 요일을 찾는 것이 목표이다.
데이터를 분석하는 총 5가지 단계인 1) 문제 정의 및 가설 설정하기 → 2) 데이터 분석 기본 세팅 및 데이터 가공하기 → 3) 데이터 분석하기 → 4) 분석 결과 시각화하기 → 5) 최종 결론 내리기 순서로 미션을 진행했다.
이번 포스트에서는 새로 배운 내용을 위주로 정리했기 때문에, 위 데이터 분석 단계 중 2, 3, 4 단계에서 새로 배운 내용을 정리했다.
2) 데이터 분석 기본 세팅 및 데이터 가공하기
2단계에서 새로 배운 코드는 아래와 같다. 주석 처리된 부분을 참고하면 좋을 것 같다:
#컬럼의 데이터 타입 알아보기
print(type(sparta_data["access_date"][0]))
#컴퓨터에 기존 데이터의 의미를 알려준 후, 여기서 내가 원하는 데이터 추출하기
#to_datetime()은 날짜와 시간 데이터로 변경해주는 함수이다.
#[날짜 컬럼].dt.day_name으로 해당 날짜의 요일을 가져올 수 있다.
#[날짜 컬럼].dt.hour으로 해당 날짜의 시간 값을 가져올 수 있다.
#sort.index()는 오름차순으로 정렬해주는 기능이다. sort_index(ascending=False)는 내림차순으로 정렬해주는 기능이다.
format='%Y-%m-%dT%H:%M:%S.%f'
sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date'], format='mixed')
sparta_data['access_date_weekday']=sparta_data['access_date_time'].dt.day_name() #요일 데이터 추출하기
sparta_data['access_data_hour']=sparta_data['access_date_time'].dt.hour
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('access_date_weekday')['user_id'].count() #요일별로 수강 완료한 학생들
weekdata
hourdata = sparta_data.groupby('access_data_hour')['user_id'].count() #시간별로 수강 완료한 학생들
hourdata = hourdata.sort_index() #오름차순
hourdata = hourdata.sort_index(ascending=False) #내림차순
hourdata
3) 데이터 분석하기 + 4) 분석 결과 시각화하기
3, 4단계에서 배운 새로운 코드는 아래와 같다.
4번째 단계인 분석 결과 시각화하기에서는 추가로 히트맵(Heatmap)이라는 그래프를 만들어보았다.
*히트맵(Heatmap)이란 X축과 Y축을 특정하게 제한된 변수로 하고,
균일한 블록으로 나누어 각 칸에 수치형 변수를 채우는 그래프이다.
변수에 대하여 데이터 값이 높거나 양이 많은 경우에는 진한 색을,
낮거나 작은 경우 연한 색을 사용한다.
#라인 그래프
#np.range(N): ()에 명시된 N 숫자만큼의 간격으로 배열을 생성 해주는 함수이다.
plt.figure(figsize=(10,5))
plt.rc('font', family='NanumBarunGothic')
plt.plot(hourdata.index, hourdata)
plt.title("시간별 수강 완료 학생들")
plt.xlabel("시간")
plt.ylabel("수강생 (명))")
plt.xticks(np.arange(24)) #x축 눈금 표시하기 - 숫자를 일정한 간격으로 일렬로 표시하는 방법
plt.show()
#히트맵
#피벗테이블 만들기
#values : 열에 들어 가는 부분
#index : 행에 들어가는 부분
#aggfunc : 데이터 축약시 사용할 함수
sparta_data_pivot_table = pd.pivot_table(sparta_data, values='user_id',
index=['access_date_weekday'],
columns=['access_data_hour'],
aggfunc="count").agg(weeks)
sparta_data_pivot_table
#그래프 사이즈 변경
plt.figure(figsize=(14,5))
#pcolor를 이용하여 heatmap 그리기
plt.pcolor(sparta_data_pivot_table)
#히트맵에서의 x축
plt.xticks(np.arange(0.5, len(sparta_data_pivot_table.columns), 1), sparta_data_pivot_table.columns)
#히트맵에서의 y축
plt.yticks(np.arange(0.5, len(sparta_data_pivot_table.index), 1), sparta_data_pivot_table.index)
#그래프 명
plt.title('요일별 종료 시간 히트맵')
#그래프 x축 레이블
plt.xlabel('시간')
#그래프 y축 레이블
plt.ylabel('요일')
#plt.colorbar() 명령어를 추가하면 그래프 옆에 숫자별 색상값을 나타내는 컬러바를 보여 줍니다
plt.colorbar()
plt.show()
np.arange(1,100,3) #1부터 100까지 숫자를 출력할 껀데, 3칸씩 출력해달라.
미션 #2) 제품 수요가 많은 지역은?
미션 #2의 진행 목적은 보다 효율적인 광고 집행을 위함이다.
수강 수요가 가장 많은 지역을 찾는 것이 목표이다.
미션 1과 동일한 이유로 5가지 데이터 분석 단계 중 2, 3, 4 단계에서 새로 배운 내용을 정리했다.
2) 데이터 분석 기본 세팅 및 데이터 가공하기
2단계에서 새로 배운 코드는 아래와 같다. 주석 처리된 부분을 참고하면 좋을 것 같다:
#category_range = set(sparta_data['area']) #지역정보의 값을 set으로 처리하면, 중복된 값을 다 없애고 unique 값만 보여준다.
#print(category_range, len(category_range)) #len은 값의 길이.
#drop_duplicates()을 이용하면, area(지역) 컬럼의 중복 데이터를 처리 할 수 있습니다. :)
area_info=area_info.drop_duplicates(['area'])
area_info=area_info.sort_values(by=["area"], ascending=True)
area_info=area_info.reset_index()
area_info
3) 데이터 분석하기 + 4) 분석 결과 시각화하기
데이터를 실제 지도에 표시하여 분석 결과를 시각화했다.
지도 라이브러리 사용을 선언하기 위해서는 Folium과 MarkerCluster 라이브러리를 선언해야 한다.
*Folium(폴리움) 라이브러리는 분석한 데이터의 결과를 지도에 그리기 위한 라이브러리이고,
MarkerCluster(마커 클러스터)는 가까운 거리의 marker들을 근집시켜, 해당 건수를 표현해주는 라이브러리다.
import folium
from folium.plugins import MarkerCluster
Folium과 MarkerCluster 라이브러리를 사용한, 반복문이 포함된 코드이다.
반복문이란 반복되는 작업을 코드 몇 줄로 자동화할 때 사용하는 문법이다.
데이터를 호출하기 위해 반복되는 수행 작업이 필요할 때 활용하는 문법이다.
m = folium.Map(location=[37.5536067,126.9674308],
zoom_start=7)
#대한민국 위도 경도 설정하기
for n in result.index:
radius = result.loc[n,'user_id']
#loc[n,"열 이름"] => loc[]를 활용하여 n번째의 열을 조회 할 수 있다.
#즉, n번째의 user의 수를 가져 올 수 있다.
folium.CircleMarker([result['latitude'][n],result['longitude'][n]],
radius = radius/50, fill=True).add_to(m)
#.add_to(m)를 활용하여, 지정해 두었던 우리나라의 지도를 가져올 수 있다.
m
#반복문 기초 다지기
fruits = ['사과', '배', '감', '귤']
for fruit in fruits: # fruit 은 우리가 임의로 지어준 이름입니다.
print(fruit) # 사과, 배, 감, 귤 하나씩 꺼내어 출력합니다.
#print(fruits[0])
#print(fruits[1])
#print(fruits[2])
#print(fruits[3])
fruits = ['사과', '배', '배', '감', '수박', '귤', '딸기', '사과', '배', '수박']
count = 0
for fruit in fruits:
if fruit == '귤':
count = count + 1
# 사과의 갯수를 출력합니다.
print(count)
3주차 수업도 끝이다.
3주차 수업에서는 다양한 함수, 그래프, 라이브러리를 활용할 수 있었던 점이 가장 큰 배움이었다.
'데이터 분석일지 > 마케터, 기획자를 위한 실전 데이터 분석' 카테고리의 다른 글
피벗 테이블과 코호트 분석 히트맵 시각화하기 (2) | 2024.06.04 |
---|---|
실무 상황에서 데이터 분석하기 2탄 - 데이터 시각화 (2) | 2024.06.03 |
Numpy와 Seaborn 라이브러리로 데이터 분석하기 (0) | 2024.05.08 |
Colab으로 본격 데이터 분석하기 (0) | 2024.04.30 |
엑셀로 데이터 분석하기 (1) | 2024.04.18 |