* 수강 강의명: 데이터 분석 종합반 - 3주차
[요약]
1. 요일/시간대별 데이터 분석
1) 데이터 전처리
① 판다스 선언 및 데이터 불러오기
import pandas as pd
sparta_data = pd.read_table('/content/access_detail.csv', sep=',')
② 날짜 데이터 타입 확인하기
print(type(sparta_data['access_date'][1]))
# type() 함수를 사용해 데이터의 종류 확인 가능. str은 문자열, 시간은 timestamp로 표기됨
# sparta_date 정보에서 access_date 열에서 데이터 첫번째 부분만 확인 하면 되겠죠?
③ 데이터 포맷 변경하기
format='%Y-%m-%dT%H:%M:%S.%f'
sparta_data['access_date_time'] = pd.to_datetime(sparta_data['access_date'], format=format)
sparta_data['access_date_time_weekday'] = sparta_data['access_date_time'].dt.day_name()
sparta_data['access_date_time_hour'] = sparta_data['access_date_time'].dt.hour
sparta_data.tail(5)
# to_datetime()은 괄호 안, 해당 열의 데이터를 날짜와 시간 데이터로 변경 해주는 함수
# [날짜 컬럼].dt.day_name 은 해당 날짜의 요일을 가져오는 함수
# [날짜 컬럼].dt.hour 은 해당 날짜의 시간을 가져오는 함수
④ 요일/시간대별 수강생 수 구하기
weeks = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
weekdata = sparta_data.groupby('access_date_time_weekday')['user_id'].count()
weekdata = weekdata.agg(weeks)
hourdata = sparta_data.groupby('access_date_time_hour')['user_id'].count()
hourdata = hourdata.sort_index()
hourdata
# groupby(’컬럼명’)은 데이터를 특정 기준으로 그룹화하여 처리 가능
# count() 는 데이터 개수 집계에 활용
# agg(”변수”) 는 데이터를 리스트 순서에 따라 재배열 해주는 함수
2) 데이터 분석 및 시각화
① matplotlib, numpy 사용 선언하기
import matplotlib.pyplot as plt
import numpy as np
② 막대 그래프 그리기
그래프 사이즈 plt.figure(figsize=(10,5)) 그래프 x축 y축 plt.bar(weekdata.index, weekdata) 그래프 명 plt.title('요일별 수강 완료 수강생 수') 그래프 x축 레이블 plt.xlabel('요일') 그래프 y축 레이블 plt.ylabel('수강생(명)') x축 레이블을 90도로 변환 plt.xticks(rotation=90) 그래프 출력 plt.show()
③ 선 그래프 그리기 (막대그래프와 유사함)
# np.arange() 는 괄호에 명시된 가격으로 배열을 생성해주는 함수
그래프 사이즈 plt.figure(figsize=(10,5)) 그래프 x축 y축 plt.plot(hourdata.index, hourdata) 그래프 명 plt.title('시간별 수강 완료 사용자 수') 그래프 x축 레이블 plt.xlabel('시간') 그래프 y축 레이블 plt.ylabel('수강생(명)') x축 눈금 표시 plt.xticks(np.arange(24)) 그래프 출력 plt.show()
④ 히트맵(Heatmap)
- X축과 Y축에 변수를 지정하고, 균일할 블록으로 나누어 각 칸에 수치형 변수를 채우는 방식. 데이터 값이 높거나 양이 많은 경우 진한색을, 낮거나 적은 경우 연한색을 사용하여 시각적 패턴을 생성
> 피벗테이블 만들기
sparta_data_pivot_table = pd.pivot_table(sparta_data, values='user_id',
index=['access_date_time_weekday'],
columns=['access_date_time_hour'],
aggfunc="count").agg(weeks)
sparta_data_pivot_table
#values : 값
#index :열에 들어 가는 부분
#columns : 행에 들어가는 부분
#aggfunc : 데이터 값에 사용할 함수
> 히트맵 그래프 생
그래프 사이즈 plt.figure(figsize=(10,5)) pcolor로 히트맵 그리기 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('요') x축 눈금 표시 plt.xticks(np.arange(24)) 그래프 출력 plt.colorbar()
plt.show()
2. 지역별 데이터 분석
① 판다스 선언 및 데이터 불러오기
import pandas as pd
sparta_data = pd.read_table('/content/students_area_detail.csv',sep = ',')
② 지역 분류하기
category_range = set(sparta_data['area'])
print(category_range, len(category_range))
#set() 은 데이터 중복 없이 각 데이터의 unique한 값을 출력해오는 함수
#len() 은 리스트에 들어있는 원소 개수, 즉 리스트의 크기를 숫자로 알려줌
③ 지역 정보만 추출 (지역명, 위도, 경도)
area_info=sparta_data[['area','latitude','longitude']]
area_info=area_info.drop_duplicates(['area'])
area_info = area_info.sort_values(by=["area"], ascending=[True])
area_info= area_info.reset_index()
#새로운 테이블을 만들 때는 기존 테이블에서 필요한 열 이름을 대괄호에 넣어서 변수로 지정
#drop_duplicates()는 원하는 컬럼의 중복 데이터를 제거하는 함수
#.sort_values() 는 지정 값을 기준으로 레이블을 정렬 가능. 정렬 기준은 by=[”정렬 기준이 될 레이블”] 로 표기
#reset_index() 로 인덱스를 순서대로 재정렬 할 수 있음
④ 각 지역 수강생 수(지역명, 유저 아이디)
number_of_students = pd.DataFrame(sparta_data.groupby('area')['user_id'].count())
⑤ 테이블 합치기
result = pd.merge(area_info, number_of_students, on="area")
result
#merge() 로 두테이블을 병합할 수 있음
2) 데이터 분석 및 시각화
① matplotlib, numpy 사용 선언하기
import matplotlib.pyplot as plt
import numpy as np
plt.rc('font', family='NanumBarunGothic')
② 선 그래프 그리기
plt.figure(figsize=(10,5))
plt.plot(result['area'], result['user_id'])
plt.title('지역별 사용자 수')
plt.xlabel('지역')
plt.ylabel('사용자(명)')
plt.xticks(np.arange(13))
plt.show()
③ 지역별 값을 지도에 표시하기
- 라이브러리 불러오기
import folium
from folium.plugins import MarkerCluster
#폴리움(Folium)은 분석한 데이터의 결과를 지도에 그리기 위한 라이브러리
#마커클러스터(MarkerCluster)는 가까운 거리의 marker를 군집시켜, 해당 건수를 표현해줌
- 대한민국 위도와 경도 설정하기
m = folium.Map(location=[37.5536067,126.9674308],
zoom_start=7)
- 반복문 활용해서 지도에 지역별 위도와 경도 넣기
for n in result.index:
radius = result.loc[n,'user_id']
folium.CircleMarker([result['latitude'][n],result['longitude'][n]], radius = radius/50, fill=True).add_to(m)
#loc[n,"열 이름"] 은 n번째의 열을 조회하는 함수
#.add_to(m)은 지정해둔 지도를 가져오는 함수
** 그래프에서 한글이 깨진다면 ?
1) 새 코드에서 폰트 설치하기
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
2) Colab 런타임 재시작
3) figure 하단에 하기 코드 입력
plt.rc('font', family='NanumBarunGothic')
[정리]
1) 어떤 문제가 있었나
2) 내가 시도해본 건 무엇인가
3) 어떻게 해결했나
4) 무엇을 새롭게 알았나
- 파이썬 작성 순서나 흐름을 대략적으로 알 것 같으나 여러 번 복습이 필요할 듯
'TIL' 카테고리의 다른 글
[231214] Phython: 실습 - 타깃, 동기 부여 서비스 분석 (0) | 2023.12.14 |
---|---|
[231213] Phython: 실습 - 광고 효율, 상품 기획, 할인율 분석 (0) | 2023.12.13 |
[231211] Phython: 변수, 리스트, 딕셔너리, 조건/반복/비교연산자, 상관관계 (1) | 2023.12.11 |
[231207] Phython: 기초 개념, 데이터 분석 맛보기 (1) | 2023.12.08 |
[231207] SQL: 데이터 가공, pivot table 생성, window function, date 포맷 (2) | 2023.12.07 |