분석가 Step 0. 자격증/ADP

[20회 실기] 기계학습 문제 풀이 2편

뚱뿌 2023. 3. 28. 11:07

※ 개인적으로 ADP 실기 문제들을 풀이하려고 합니다. 사용 언어는 'R 프로그래밍'입니다.

 코드 및 관련 의견 주심 감사하겠습니다.

 

20회 실기 기계학습 문제 풀이 1편
 

[20회 실기] 기계학습 문제 풀이 1편

※ 개인적으로 ADP 실기 문제들을 풀이하려고 합니다. 사용 언어는 'R 프로그래밍'입니다. ※ 코드 및 관련 의견 주심 감사하겠습니다. 문제 복기 참고 사이트 https://www.datamanim.com/dataset/ADPpb/00/20.ht

danha23.tistory.com

2-1. 데이터 전처리

각 가구의 15분 간격의 전력량의 합을 구하고, 해당 데이터를 바탕으로 총 5개의 군집으로 군집화 진행
그 후 아래의 그림과 같은 형태로 출력 
군집화를 위한 데이터 구성의 이유 설명
결과 예시

보통은 R 프로그래밍을 이용해서 전처리 부터 분석까지 모두 진행한다. 

그러나 이번 문제에서는 시간 데이터를 구간으로 나누는 방법이 필요한데, R을 이용하는 것보다 파이썬(Python)을 이용하는 것이 간단하다. 그래서 해당 문제에서의 1번째 "각 가구의 15분 간격의 전력량의 합"은 파이썬을 이용하여 구하였다. 

파이썬을 이용하여 구한 후, 파일을 저장한 후 R 프로그래밍을 이용하여 군집화를 진행한다.

※ R을 이용하여 시간 데이터 구간 나누는 방법 아시는 분 의견 주시면 감사합니다.

[참고 : https://rfriend.tistory.com/494]

import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/adp/20/problem2.csv')
df.shape

df['date'] = pd.to_datetime(df['date'])

# 시간 데이터 구간 나누기 
# resample() 

df_time = df.groupby('houseCode').resample('15T', on = 'date')['power consumpytion'].sum().reset_index()
df_time.head()

# 데이터 저장
df_time.to_csv('df_0327.csv', index = False)

데이터 전처리 결과

 

군집화 수행
## Kmeans clustering
km_result <- kmeans(df['power.consumption'], centers = 5)

df$cluster <- km_result$cluster
head(df)

군집 결과

 

2-2. 히트맵 시각화

각 군집의 요일, 15분 간격별 전력사용량의 합을 구한 후 시각화
library(lubridate)

# 요일 및 시간 구별
df$weekday <- wday(ymd_hms(df$date), label = T, abbr = F)
df$time <- paste0(hour(ymd_hms(df$date)),":", minute(ymd_hms(df$date)))
head(df)

# 군집별 요약
library(dplyr)
cluster_sum <- df %>% group_by(cluster, weekday, time) %>% summarize(power.consum_sum = sum(power.consumption))

cluster_sum %>% head()

# 히트맵 시각화
library(ggplot2)
heat_gg <- ggplot(cluster_sum, aes(x=time, y=weekday, fill = power.consum_sum)) + geom_tile()
heat_gg + theme_minimal() + facet_wrap(~cluster, nrow = 5) + theme(axis.text.x = element_text(angle=90))

그룹, 요일 및 시간별 power.consumption 합계에 대한 히트맵