데이터분석 6기/본캠프

2025-05-28 spark 피하기

seyeon1130 2025. 5. 28. 21:02

df[''].nlargest() -> 컬럼중에 가장 큰 값 가져오기, 기본값은 5개지만 괄호 안에 숫자 넣으면 더 가져올 수 있음

for app_name, group in df.groupby("app_name"):
이렇게 하면 그룹별로 for문도 돌릴 수 있음

그리고 데이터프레임에서 컬럼 가져올 때 [] 안해도 됨. df.age 하면 나옴,,, 지금까지 몰랐따

 

%%time 치면 실행시간이랑 나옴

CPU times: user 19.1 s, sys: 985 ms, total: 20.1 s Wall time: 20.3 s

 

트렌드 감지

골든크로스 단기 평균선이 장기 평균선을 위로 돌파 → 상승 추세 시작 신호
데드크로스 단기 평균선이 장기 평균선을 아래로 하향 돌파 → 하락 추세 시작 신호

 

%%time
# 60일 이동 평균 계산 (장기선)
ma_long = df_daily_facebook.review_mean.rolling(60).mean()

# 20일 이동 평균 계산 (단기선)
ma_short = df_daily_facebook.review_mean.rolling(20).mean()

# 조건에 따라 trend 배열 생성 (벡터 연산으로 빠르게 처리)
trend = np.where(ma_short == ma_long, 'Neutral',    # 같으면 Neutral
         np.where(ma_short > ma_long, 'Up', 'Down')) # 크면 Up, 작으면 Down

# 60일 이전엔 평균 계산 불가능 → trend도 None 처리
trend[:60] = None
    
    # 같으면 중립 추세
    else:
        trend = "Neutral"
    
    # 결과 저장
    trends.append(trend)
    ma_longs.append(ma_long)
    ma_shorts.append(ma_short)

 

np.where(조건, 조건이 True일 때 값, 조건이 False일 때 값)

df['리뷰'].value_counts(normalize=True) :비율로 나타내줌

 

멀티 프로세싱

from joblib import Parallel, delayed
df_agg = pd.concat(
    Parallel(n_jobs=-1)(
        delayed(trend_calculator)(df_target) 
        for app_name, df_target in df_daily.groupby("app_name")
    )
)

n_jobs = -1 : 모든 코어 쓰겠다