인프런 커뮤니티 질문&답변

minsubrother님의 프로필 이미지
minsubrother

작성한 질문수

다양한 사례로 익히는 SQL 데이터 분석

RFM 분석 SQL 수행하기 - 01

ntile 정규분포에 관하여 ... 향후 일을 하게 될 시

해결된 질문

작성

·

230

·

수정됨

0

강의를 듣는 도중, ntile()의 경우, 분포가 skew가 심하면(정규분포가 아니라면), 순위를 매길 때, 문제가 생김을 배울 수 있었습니다.

Q1. 저는 왜곡이 되어있는 걸 보자마자, 차라리 판다스나 Spark SQL로 데이터를 정규화 한뒤에, 시각화를 하는게 더 빠르지 않을까? 하는 생각이 들었는데요, 기업에서 일을 하게 될 때, 어떤 경우에 SQL을 쓰는지가 궁금합니다.


저는 강사님의 강의를 수강하며, python 데이터 분석 -> 머신러닝 -> 딥러닝 이후, 현재 SQL강의를 수강하고 있습니다. 희망직무는 데이터 사이언스트 및 데이터 엔지니어를 희망하는데, 항상 채용공고를 보면, python 능력도 중요하지만 고급 SQL 능력도 자격요건으로 되어 있는 경우가 많았습니다.

Q2. 현업에서 데이터를 가공하거나 처리할 때, 오히려 프로그래밍언어보다는 SQL를 훨씬 많이 쓴다고 하는데, Q1처럼 때에 따라 유동적으로 쓰는 것인지, 아니면 앞으로 데이터 분석을 연습할 때도, (이를 테면, 캐글과 같은) 파이썬 보다는 SQL위주로 연습하는 것이 더 적합한 건지 여쭙고 싶습니다.

 

Q3. 이건 머신러닝과 관련된 이야기지만, 이렇게까지 skew가 개선되지 않을 때는 어떻게 해야하나요?

from sklearn.preprocessing import StandardScaler
# OverSampling을 해도 Skew가 개선되지 않음
# UnderSampling을 하면 데이터가 줄어들기 때문에, 사용에 유의가 필요하나 skew가
# 너무 심하기 때문에 사용함.
from imblearn.under_sampling import CondensedNearestNeighbour
from scipy import stats
import numpy as np

def log_transform(column):
    return np.log1p(column)

scaler = StandardScaler()
df["freq"] = log_transform(df["freq"])
df["freq"] = scaler.fit_transform(df[["freq"]])


cnn = CondensedNearestNeighbour(sampling_strategy='majority', random_state=42)
X_resampled, y_resampled = cnn.fit_resample(df[["freq"]], df["user_id"].values)

resampled_df = pd.DataFrame(data=X_resampled, columns=["freq"])
print(resampled_df)

#######
          freq
0    -0.352373
1    -0.352373
2    -0.352373
3    -0.352373
4     2.495698
...        ...
2557 -0.352373
2558  3.642937
2559 -0.352373
2560 -0.352373
2561 -0.352373

[2562 rows x 1 columns]
#########

resampled_df["freq"] = log_transform(resampled_df["freq"])
resampled_df["freq"].skew()
### 2.4721717038971214

답변 1

1

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

여러개의 제 강의를 수강해 주셔서 감사합니다.

  1. 제 생각엔 Pandas와 SQL 모두 익히시면 좋을 것 같습니다. 이유로는 회사에서 머신러닝 모델러/분석 인재를 필요로 할 수도 있고, 일반적인 데이터 분석 인재 역시 필요할 수 있습니다. 주목할 점은 과거와 다르게 지금은 이 두가지 모두를 갖춘 인재를 요구하는 경향이 강해지고 있습니다.

대부분 회사의 데이터는 RDBMS에 있습니다. 과거 머신러닝 모델러는 Pandas DataFrame이나 사이킷런 패키지를 잘 사용은 하지만 RDBMS SQL을 잘 몰라서 데이터 엔지니어들이 일단 만들어 놓은 데이터 또는 SQL을 이용하여 이를 Pandas DataFrame에 올려서 작업하는 형태를 취했습니다. 큰 회사라면 데이터 엔지니어, 일반 분석가, 데이터 사이언티스트(예를 들어 머신러닝 모델러)와 같이 여러명의 인재를 갖출 수 있지만, 상대적으로 규모가 작은 회사라면 이렇게 세분화된 인재를 갖추기 어렵습니다. 더구나 RDBMS에서 데이터가 어떻게 되어 있고, 이걸 SQL로 어떻게 추출해야 하는지 잘 모른다면 데이터 사이언티스트가 능동적으로 업무를 주도해 나가기 어려운 환경에 처하기 쉽습니다.

그렇기 때문에 큰 회사조차 데이터 사이언티스트가 적어도 SQL을 이용해서 원하는 데이터를 추출할 수 있는 능력을 갖추기를 원하고 있습니다.

SQL은 많은 회사에서 데이터를 추출/조회/분석하는데 사용하는 기본 요소이기에 익혀놓으면 큰 도움이 됩니다. Pandas DataFrame은 어떻게 보면 좀 보조적인 요소입니다. 하지만 Pandas DataFrame은 일단 적재만 되면 굉장히 뛰어난 분석 툴입니다. SQL로 처리 할 수 없는 부분을 쉽게 처리할 수도 있습니다. 반대로 SQL은 DataFrame이 처리하기 번잡한 조인이나 Group by, Analytic Function을 이용해서 쉽게 데이터를 처리할 수 있습니다. 상호 보완적인 요소가 많으며, 요즘의 구인 추세라면 둘 다 익혀 두는게 좋습니다.

  1. 캐글에서 데이터 분석을 할 경우에는 Pandas를 사용하시면 좋을 겁니다. 제 생각엔 Pandas를 자유롭게 사용할 수 있는 수준이고, 이 강의에서 사용되는 SQL을 잘 활용할 수 있는 수준이라면 어느 기업에서 요구하는 인재 기준이라도 잘 부합할 수 있을 것입니다.

  2. 로그 변환으로도 Skew가 해소 되지 않는다면, 다른 변환을 사용해 볼 수는 있지만, 제 경험상 크게 도움은 안되었던 것 같습니다. 로그 변환을 해도 일정 수준 이상 Skew가 해소되지 않더라도 그냥 로그 변환 수준에서 만족하는게 좋을 것 같습니다.

 

감사합니다.

 

minsubrother님의 프로필 이미지
minsubrother

작성한 질문수

질문하기