본문 바로가기
Python/멋사_AIS7

Day 20~23

by Hi_heidi 2024. 1. 25.

Day 20~23

<0306>

데이터 샘플링

더 큰 데이터 세트에서 의미있는 정보를 찾아내기 위해 모든 데이터의 일부를 분석하는 방법

구글 애널리틱스 참고

1. numpy로 샘플링

(1) 랜덤 선택
sample_no = np.random.default_rng(42).choice(raw['가입자 일련번호'].unique(), 10000)
# 가입자 일련번호 고윳값 개수(=숫자 형태, 랜덤선택할 범위) 중에서 1만 개를 랜덤선택한다
# np.random.seed(42) 값을 고정하는 역할, numpy 공식 문서는 별로 추천하지 않는다

(2) 랜덤 선택한 데이터 추출
df = raw[raw['가입자 일련번호'].isin(sample_no)]
# isin으로 샘플링한 가입자 일련번호 데이터만 추출

2. pandas로 샘플링

(1) 랜덤 선택
sample_no = raw['가입자 일련번호'].sample(10000, random_state=42)
# 가입자 일련번호 고윳값 개수(=숫자 형태, 랜덤선택할 범위) 중에서 1만 개를 랜덤선택한다

(2) 랜덤 선택한 데이터 추출
df = raw[raw['가입자 일련번호'].isin(sample_no)]
# isin으로 샘플링한 가입자 일련번호 데이터만 추출

<0307>

데이터 타입 변경

  • datetime으로 변경하기: 파생변수 생성 및 dt accessor 활용 목적
    df['컬럼명'] = pd.to_datetime(df['컬럼명'],format="%Y%m%d")
    # %Y = YYYY
    # %y = yy
    # %m = mm
    # %d = dd

파생변수 생성

  • dt accessor 활용
    df['월'] = df['컬럼명'].dt.month
    df['일'] = df['컬럼명'].dt.day
    df['요일'] = df['컬럼명'].dt.weekday #dayofweek도 가능
    df['영문요일'] = df["컬럼명"].dt.day_name()
  • map 활용 : 입력 대응에 따라 Series의 값을 맵핑, 일정 규칙에 따라 반복 가능한 객체를 변환시킴
    (1) 맵핑할 딕셔너리 생성
    inject_dict={'A':'내복제','B':'주사제','C':'외용제','D':'기타'}
    # 이런 것도 가능
    drug_type = '내복제:A, 주사제:B, 외용제:C, 기타:D'
    {drt.split(":")[1].strip() : drt.split(":")[0].strip() for drt in drug_type.split(",")}
    (2) 맵핑  
    df['투여경로'] = df['약품일반성분명코드'].str[6].map(inject_dict)

상관분석

서로 대등한 두 변수(X, Y) 간 직선적(linear) 관련성 강도(strength)를 하나의 값, 즉 상관계수(correlation co-efficient)로 표현하고 통계적 유의성 여부를 검정하는 방법

박용규. (2001). 통계시리즈(Ⅵ): 상관분석과 회귀분석(Correlation and Regression analysis). 가정의학회지, 22(1)

  • 상관계수는 두 변수간 연관된 정도를 나타낼 뿐 인과관계를 설명하는 것은 아님
  • 두 변수 간 인과관계가 있는지는 회귀분석을 통해 확인할 수 있음

피어슨 상관계수(Pearson Correlation Coefficient)

  • 1에 가까울수록 비례하며 -1에 가까울수록 반비례
  • 피어슨 상관계수로 회귀분석의 회귀식 정확도를 평가하기 위한 척도로 결정계수(coefficient of determination)를 구할 수 있음(r^2)
    r 관계
    0.7 ≤ r ≤ 1.0 강한 양적 상관관계
    0.3 ≤ r < 0.7 뚜렷한 양적 상관관계
    0.1 ≤ r < 0.3 약한 양적 상관관계
    -0.1 ≤ r < 0.1 상관관계 거의 없음
    -0.3 ≤ r < -0.1 약한 음적 상관관계
    -0.7 ≤ r < -0.3 뚜렷한 음적 상관관계
    -1.0 ≤ r ≤ -0.7 강한 음적 상관관계
df.corr() # NA/null값을 제외한 열의 상관관계를 계산
mask = np.tril(np.ones_like(corr))
# np.triu 상삼각을 1로(위 날리기), np.tril하삼각을 1로(아래 날리기)

sns.heatmap(corr,cmap='winter_r', annot=True, fmt='.2f', vmin=-.2, vmax=.2, mask=mask)
# annot=True 실제 값을 화면에 나타낸다
# fmt='.2f' # 소수 둘째 자리까지 나타낸다

  • 상관분석(correlation): vmin, vmax값을 지정하면 아무리 min, max값이 vmin, max값보다 커도 지정한 색깔의 진하기보다 진해지지 않음

<0308>

downcast

  • 현업에서 다루는 데이터는 실습에서 다루는 데이터보다 대부분 큰 용량. 이 때 컴퓨터 RAM 용량만큼 불러올 수 있는데 더 많은 데이터를 불러와서 분석하거나 모델을 만들기 위해서는 메모리를 효율적으로 사용할 수 있어야 한다.

    이미지 출처
    df['컬럼명'] = pd.to_numeric(df['컬럼명'], downcast='unsigned') # downcast하지 않겠다
    df['컬럼명'] = pd.to_numeric(df['컬럼명'], downcast='integer') # int로 변환하겠다(보통 int32 or int 64)
    df['컬럼명'] = pd.to_numeric(df['컬럼명'], downcast='float') # float로 변환하겠다(float64로 변환)

<0309>

Apache Parquet공식문서 바로가기

데이터 처리 프레임워크, 데이터 모델 또는 프로그래밍 언어에 관계없이 하둡 에코시스템의 모든 프로젝트에서 사용할 수 있는 컬럼 스토리지 형식의 데이터 파일 형식
  • 복잡한 데이터를 대량으로 처리할 수 있도록 성능이 향상된 효율적인 데이터 압축 및 인코딩 체계를 제공
  • pyarrow 또는 fastparquet 라이브러리 설치 필요
df.to_parquet('df.parquet.gzip', compression='gzip')

상세 파라미터는 pandas 공식 문서 참고

기타

  • countplot: x, y 중 하나에만 값을 넣으면 나머지축에 빈도(count)를 구해서 표시
  • 히스토그램
    • 범주형/수치형을 구분하는 기준은 x축의 연속성: 막대가 연속적으로 그려졌으면 수치형으로, 불연속적이면 범주형으로 판단
    • 연산 방식 지정하는 옵션: histfunc(seabornestimate)

출처) 멋쟁이 사자처럼 AI스쿨 7기 박조은 강사님 강의자료

'Python > 멋사_AIS7' 카테고리의 다른 글

Day 19  (0) 2022.10.13
Day 18  (0) 2022.10.12
Day 16  (0) 2022.10.06
Day 15  (0) 2022.10.06
Day 14  (0) 2022.10.04