Python/빅데이터 분석과 머신러닝

#8 데이터 분석

sundori 2024. 7. 23. 17:33

목차

    파이프라인

    데이터 분석에서 데이터를 효과적으로 가져오고 분석하는 것은 매우 중요한 작업이다. 데이터를 어느 한 지점에서 특정 부분까지 가져오는데에 많은 장애(중복, 유실 등)가 있으며 가져오려는 지점이 많아질수록 더욱 복잡해진다.

    더불어 준비된 데이터를 특정한 절차에 따라 분석을 해야 하는데, 이를 파이프라인이라고 한다.

    파이프 라인
    데이터 -> 데이터 준비-> 데이터 보기 -> 데이터 클렌징 -> 데이터 탐색 -> 데이터 시각화 -> 분석 결과
    단계 내용
    1 데이터 준비 데이터 소스, 데이터 백업
    2 데이터 보기 데이터프레임의 기본 정보 출력 : df.info()
    데이터프레임의 통계 요약 정보 출력 : df.describe()
    데이터 유형 확인 : df.types
    행데이터, 열 변수, 변수 유형
    데이터 조작 : 데이터 개수 확인, 정렬
    데이터 병합과 연결(옵션)
    3 데이터 클렌징 결측값, 이상값, 중복값
    4 데이터 탐색 단일변수 데이터 분석
    데이터 재구조화
    데이터 그룹 분석
    5 데이터 시각화 범주형 단일변수
    연속형 단일변수
    범주형/범주형
    연속형/연속형
    범주형/연속형

     

    데이터 분석 시작전 확인해야할 것.
    1.데이터 보기로 전반적인 데이터 형태를 보기.
    2.데이터가 일부인가 아니면 전부인가.
    3.데이터의 크기는 얼마나 큰가?
    4.데이터에 식별자가 있냐 없냐?
    5.데이터를 합병해야 한다면 같은 종류의 데이터 인가?
    6.최댓값, 최솟값, 중간값, 평균 확인하기
    7.이상치(이상값)이 있나?
    8.결측값이 있다면 무엇이고 왜 누락되었는지 확인하기

     

     

     

    타이타닉 분석 파이프라인

    타이타닉 데이터변수

    변수 설명 변수 설명 구분
    PassengerId 승객번호    
    Survived 생존여부 0 = no, 1 = yes 범주
    Pclass 객실등급 1 등급,  2 등급, 3등급 범주
    Name 승객이름    
    Sex 성별 male, femail 범주
    Age 나이    
    SibSp 함께 탑승한 형제 및 배우자의 수 형제 수 + 배우자 수  
    Parch 함께  탑승한 부모 및 아이의 수 부모 수 + 자녀 수  
    Ticket 티켓번호    
    Fare 탑승요금    
    Cabin 객실번호 공백이 많아서 기준 알기 어려움  
    Embarked 탑승항구 C = Cherbourg, Q = Queenstown, S = Southampton 범주

    데이터 준비

    데이터 분석과 머신러닝 파이프라인 준비과정에서 가장 중요한 첫 단계는 데이터 백업이다. 손상된 데이터는 다시 복구가 불가능하기 때문에 복사본을 만들어야한다.

    복사본 만들고 읽어보기

    데이터 클렌징

    타이타닉 데이터는 891개의 행 중에 나이(Age)에 177개의 결측치, 객실 번호(Cabin)에 687개의 결측치 그리고 탑승 항구(Embarked)에는 2개의 결측치가 존재한다. 

    이를 결측치를 처리하는 방법인 결측치 확인과 결측치 대체 및 제거 순서로 데이터 클렌징을 진행한다.

    • 객실번호(Cabin)은 결측치가 너무 많기에 제거
    • 탑승 항구의 경우 결측치가 2개만 존재하므로 어느 값으로 채워도 문제가 없을 것 같아 최대 빈도수대체
    • 나이의 경우 결측치가 많고 나이에 따라 생존 여부가 달라질 것으로 보여 데이터를 중앙값으로 대체

    """결측치 시각화"""
    sns.heatmap(df.isnull(),cbar=False) # 시본 시각화 확인
    sns.heatmap(df.isnull(),cbar=True) # 시본 시각화 확인

    시본 시각화

    import missingno as msno # missingno 패키지 임포트
    msno.matrix(df) # 매트릭스 결측치 시각화

    매트릭스 결측치 시각화

    msno.bar(df) # 바차트 결측치 시각화

    바차트 결측치 시각화

    msno.heatmap(df) # 히트맵 결측치 시각화

    히트맵 결측치 시각화

    msno.dendrogram(df) # 덴드로그램 결측치 시각화

    덴드로그램 결측치 시각화

    Cabin 결측치 제거

    msno.matrix(df) #결측치 제거 확인

    제거 전
    제거 후

    Embarked 대체 및 나이 대체

    데이터 탐색

    데이터 시각화 분석

    단일 범주형/연속형 분석

    범주형 연속형
    생존 여부?
    남녀 성비?
    좌석 등급별 성비?
    출발 항구별 비율?
    나이 분포
    요금 분포

     

     

    범주형/범주형

    Pg = sns.PairGrid(df, y_vars="Survived",
                     x_vars=["Pclass", "Sex", "Embarked","Age_class"],
                     height=5, aspect=.7)
    Pg.map(sns.pointplot, scale=1.3, errwidth=4, color="xkcd:plum")
    Pg.set(ylim=(0, 1))
    sns.despine(fig=Pg.fig, left=True)

    sns.distplot(df['Age'].loc[df['Sex'] == 'Male'])
    sns.distplot(df['Age'].loc[df['Sex']=='female'])

     

     

    요약

    • 항구에 따라 사망자의 수의 차이가 있으며, 연령 값은 결측치가 많기 때문에 적절한 값으로 전처리해야함.
    • 남성일 경우 사망자가 많고 여성일 경우 적은 경항.
    • 사회적 계층(객실, 요금 등)이 높을수록 사망자 수가 줄어든다.
    • 연령이 낮은 16세 이하일 경우 사망자가 적고, 성인의 경우 차이가 없다.
    • 변수는 바이닝 분석.
    • 파생 변수를 만들어 분석 가능.

    'Python > 빅데이터 분석과 머신러닝' 카테고리의 다른 글

    #10 머신러닝  (0) 2024.07.30
    #9 스몰데이터 통계  (0) 2024.07.25
    #7 데이터 시각화  (2) 2024.07.18
    #4 데이터 보기(판다스)  (0) 2024.07.17
    #6 데이터 탐색  (0) 2024.07.14