동작구에서 주최한 빅데이터 활용 정책제안 공모전에 참가한 후 배운 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()
'study' 카테고리의 다른 글
Interactive Widget 활용한 시각화 (0) | 2020.05.13 |
---|---|
lesson learned_2 (동작구 빅데이터활용 공모전) (0) | 2020.05.02 |
lesson learned_1 (동작구 빅데이터활용 공모전) (0) | 2020.05.01 |
비지도학습 : PCA 주성분 분석 (0) | 2020.04.18 |
비지도학습 : 데이터 전처리 (0) | 2020.04.17 |
지도학습 : 커널 서포트 벡터 머신 (0) | 2020.04.15 |
댓글0