본문 바로가기

study

lesson learned_1 (동작구 빅데이터활용 공모전)

동작구에서 주최한 빅데이터 활용 정책제안 공모전에 참가한 후 배운 lesson learned을 간단히 정리하고자 한다. 해당 공모전을 통해 전처리와 분석순서에 대한 기초를 잡을 수 있었다. 또한 전처리와 시각화 부분은 기초적이지만 가장 중요한 부분으로 내가 많이 간과하고 있음을 느꼈다. 시각화를 통한 EDA를 기계적으로 하도록 연습해야겠다.

1. 전처리
2. 시각화
3. 분석

 

# encoding= "utf8"로 인코딩이 잘 안될 경우
pd.read_csv("./data/data.csv", encoding= "utf8-sig")

 

1.2. 데이터 재구조화

from pandas import DataFrame
data = DataFrame({'cust_ID' : ['C_001', 'C_001', 'C_002', 'C_002'],
                  'prd_CD' : ['P_001', 'P_002', 'P_001', 'P_002'],
                  'pch_cnt' : [1, 2, 3, 4],
                  'pch_amt' : [100, 200, 300, 400]})
data

 

2.1. bar chart 특정부분 컬러링

# 인덱스 정렬 및 열 삭제
cct = pd.read_excel("정제 데이터/cct_tb.xlsx").reset_index(drop=True).drop(["Unnamed: 0"], axis=1)
cct.head()

# 그래프 삽입 모듈 및 그래프 내 한글 폰트 삽입 코드
from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)

import matplotlib.pyplot as plt
 
plt.figure(figsize=(10,5))
 
barlist=plt.bar(cct["EMD_NM"], cct["관리기관명"])
barlist[0].set_color('r')
barlist[1].set_color('y')

#plt.savefig('demo.png')

 

2.2. pd.get_dummies를 이용한 One-hot 인코딩

animal = pd.DataFrame({'name':['duck', 'lion', 'dog', 'cat', np.nan],
                      'color':['red', 'yellow', 'red', 'green', np.nan]}) 
animal

 

2.3. 스케일링

피처별로 범위나 크기가 다른 값을 스케일링을 통해 통일시킨다.

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
new_df = scaler.fit_transform(df)

 

3.1. KMeans SSE 확인

KMeans 클러스터링을 적용하기전 군집 수를 결정하기 위해 elbow 곡선을 그려본다.

from sklearn.cluster import KMeans
import matplotlib.pyplot  as plt
plt.figure(figsize=(12, 6))

def elbow(X):
    sse = []

    for i in range(1,10):
        km = KMeans(n_clusters=i,algorithm='auto', random_state=42)
        km.fit(X)
        sse.append(km.inertia_)

    plt.plot(range(1,10), sse, marker='o')
    plt.xlabel('K')
    plt.ylabel('SSE')
    plt.show()

elbow(new_df)

 

3.2. KMeans 클러스터링

elbow 곡선을 통해 SSE가 가장 줄어들기 시작하는 팔꿈치 부분을 군집 수로 결정한다.

from sklearn.cluster import KMeans
import matplotlib.pyplot  as plt

k = 4

model = KMeans(n_clusters=k,algorithm='auto')
model.fit(new_df)
predict = pd.DataFrame(model.predict(new_df))
predict.columns=['predict']

 

3.3 차원 축소

클러스터링 결과를 2차원 그래프에 시각화하기 위해 차원축소를 이용한다. 차원 축소 후 주성분 2개를 시각화한다.

from sklearn.decomposition import PCA
plt.figure(figsize=(12, 8))

pca = PCA(n_components=2)
X = pca.fit_transform(new_df)
y_pred = model.labels_
plt.scatter(X[:, 0], X[:, 1], c=y_pred, cmap='rainbow')
plt.show()