본문 바로가기
데이터

[데이터 전처리] [Python] 데이터 처리 기초 내용 정리 (문자열, 시계)

by dwoi 2023. 4. 1.

Python을 통해서 문자열 데이터를 전처리하기 위해서 필요한 기초적인 내용을 정리하는 

 

목차

     


    데이터 전처리

    데이터 전처리는 데이터 분석과 모델링에서 가장 많은 시간과 노력이 소요되는 부분으로

    데이터의 값이나 형태를 변환하여 분석에 적합한 형태로 만드는 것을 의미

    • 결측치/중복치 처리
    • 데이터 변형 및 치환
    • 범주형 데이터 처리

    문자열 시계열 데이터는 자료형에 알맞은 처리가 필요하기 때문에 이 내용이 중요함!


    1. 파이썬 문자열

    • 파이썬 문자열 선언은 작은 따옴표, 큰 따옴표를 이용하여 선언
    • 문자열의 길이는 특수문자를 포함한 문자의 개수

     

    • 인덱스를 사용하여 문자열을 추출할 수도 있음.

    1.1. 문자열 메소드

    • 문자열을 내가 원하는 방법으로 변환하고 싶을 때 사용
      • ex.
        • 대소문자 변환(lower, upper)
        • 문자 개수 반환(count)
        • 특정 문자열 찾기(find)
        • 특정 문자열 교체하기(replace)
        • 문자열의 앞뒤 공백 제거하기(strip)
        • 문자열을 구분자로 나누기(split)

     

    1.2. 문자열 메소드 활용방법

    ⓐ. join

    • join 메소드는 문자열을 연결하여 새로운 문자열을 반환
    • join 메소드 앞에 지정된 문자(' ')를 사용하여 여러 개의 문자열을 해당 문자로 연결해줌

    ⓑ. splitlines

    • splitlines 메소드는 여러 행을 가진 문자열을 분리하여 리스트로 반환
      • ex. 
      • 블로그 뉴스와 같은 긴 텍스트 데이터를 다룰 때 문자열 데이터를 라인 별로 나눠서 조작함.

    ⓒ. replace

    • 특정 문자열을 뺴거나 교체할 떄 사용
      • ex.
      • 특수문자, 고유문사 등의 불필요한 문자여을 제거하는 전처리에 많이 사용됨.

     

    1.3. 문자열 포매팅

    • 문자열을 편리하게 출력할 수 있는 기능
    • 출력할 문자열의 형식을 지정하거나 변수를 조합하여 새로운 문자열을 출력하는 방법

     

    포매팅  방법

    name = '김진수'
    sentense = '안녕하세요, 제 이름은 {}입니다.'
    
    print(sentense.format(name))
    안녕하세요, 제 이름은 김진수입니다.

    ※ 중괄호{} : placeholder라고 지칭

    ※ 여러 개의 문자열을 format하고 싶을 때는 인덱스 개념을 사용!

    ※ format() : 안에 변수가 들어갈 수 있고, 문자열, 숫자데이터 지정 가능

     

    ⓐ. 숫자 데이터 format

    • 소수의 경우에는 소수점 이하의 숫자 개수를 지정하여 출력할 수 있음
      • %를 사용하여 백분율로 환산 가능
    • 숫자를 정해진 자리수로 표현할 수 있음
    sentense = '당신의 사번은 {0:05d}입니다.'
    
    print(sentense.format(142))

     

    ⓑ. % 연산자로 format

    • 삽입할 값이 정수라면 %d, 문자열이면 %s, 실수라면 %f를 사용
    sentense = '당신의 나이는 %d세입니다.' % 30
    
    print(sentense)

     

    ⓒ. f-string 사용 format

    • 문자열 앞에 f를 붙이는 것이 특징이며 기존 방법보다 간편하고 빠른 속도로 문자열을 처리할 수 있음.

     


     

    2. 정규표현식

    2.1. 정규표현식 개념 및 문법

    정규표현식?

    정규표현식(Regular Expression)은 문자열에서 특정 내용을 찾거나 대체 또는 발췌하는데 사용된다.

    1. 각각 다른 포맷으로 저장된 엄청나게 많은 전화번호 데이터를 추출해야 할 때
    2. 사용자가 입력한 이메일, 휴대폰 번호, IP 주소 등이 올바른지 검증하고 싶을 때
    3. 코드에서 특정 변수의 이름을 치환하고 싶지만, 해당 변수의 이름을 포함하고 있는 함수는 제외하고 싶을 때
    4. 특정 조건과 위치에 따라서 문자열에 포함된 공백이나 특수문자를 제거하고 싶을 때

    ⓐ. 정규 표현식 특수 문자

    문자  설명
    \d  숫자 1개를 의미함 (0-9)
    \D  숫자 이외에 문자 1개를 의미함 (0-9를 제외한 모든 문자)
    \s  공백이나 탭 1개를 의미함
    \S  공백 문자 외에 문자 1개를 의미함
    \w  알파벳, 숫자, underscore 문자 1개를 의미함 (a-z, A-Z, 0-9, _)
    \W  위에 적힌 문자(\w)를 제외한 모든 문자 1개를 의미 (한국어, 일본어, 특수문자 등)

     

    ⓑ. 기본 정규표현식 문법

    문법 예시 설명
    . …k
    문자(k) 앞에 문자가 3개 있는 패턴을 찾음 (back)
    ^ ^Da
    문자열이 처음부터 Da로 일치하는 패턴을 찾음 (03k)
    $ ne$
    문자열의 마지막이『혼으로 끝나는 패턴을 찾음 (done)
    * ab•
    a 이후 b가 0번 이상 등장하는 배턴을 찾음 (히 abbb)
    a\w+
    a 이후 알파벳이나 숫자가 이상 등장하는 패턴을 찾음 Caw. alc3)
    {m} a\d(3)
    a 이후 숫자가 3개인 피|턴을 찾음 (addd)
    ? date?
    ? 앞의 문자(하가 있거니 없는 패턴을 찾음 (dat. date)
    [] [abc]go
    하 b. c 중에 1개를 포함하고 그 뒤의 문자열이卯인 패턴을 찾음 ((90. b90)
    () (\d{3})-(\d{4})
    ()에 지정한 패턴을 찾을 대사용함 ( 123-9284)

     

    2.2. 정규표현식 메소드

    1. match() 메소드
      • 문자열의 처음부터 검색하여 찾아낸 패턴의 양 끝 인덱스를 반환
    2. findall() 메소드
      • 일치하는 패턴을 모두 찾아 리스트로 반환

     

    3. 날짜/시간 자료형 (datetime)

    시계열 데이터 분석

    • 시계열 데이터는 데이터 분석 분야에서 중요하게 다루는 데이터
      • 금융, 경제, 생태학, 신경과학 등의 분야에서 사용됨
    • 시계열 데이터는 보통 고정 빈도로 표현되며 1시간, 1일 등의 주기로 데이터가 수집됨
      • 물론 정해진 주기가 아닌 불규칙적인 모습으로 표현될 수 있음
    • 판다스는 표준 시계열 도구와 알고리즘을 제공
      • 날짜와 시간을 의미하는 datetime 자료형을 통해 시게열 데이터를 쉽게 조작할 수 있음
      • 대량의 시계열 데이터를 판다스 메소드를 통해 쉽게 나누고 집계할 수 있음.

    3.1. datetime 생성

    • datetime 모듈을 import하여 날짜/시간 데이터를 나타낼 수 있음
    • datetime과 timedelta를 활용하여 시간을 더하고 뺄 수 있음.

     

    3.2. datetime 자료형 변환

    • strftime 메소드 : datetime을 string으로 변환
    • strptime 메소드 : string을 datetime으로 변환

     

    3.2.1. strptime, strftime 규칙

    포맷 예시 의미
    %Y 2012, 2020
    4자리 연도를 의미함
    %y 13, 80, 12
    2자리 연도를 의미함
    %m 01, 03, 11
    2자리 월을 의미함 [01, 12]
    %d 01, 10, 31
    2자리 일을 의미함 [01, 31]
    %H 00, 10, 22
    24시간 형식의 시간을 의미함 [00, 23]
    %M 0, 15, 58
    02자리 분을 의미함 [00, 59]
    %S 00, 30, 59
    2자리 초를 의미함 [00, 60]
    %w 00, 3, 6
    요일을 정수로 나타낸 것 (일요일 = 0, 토요일 = 6)
    %U 00, 26, 52
    연중 몇 번째 주차에 해당하는 지를 표현 [00, 53]

     

    ex. 판다스 datetime 변환

    • date 열 데이터를 astype메소드로 문자열로 자료형 변환
    • pd.to_datetime 메소드를 활용해 문자열 데이터를 datetime 자료형으로 변환
      • 다른 형태의 문자열 데이터도 날짜 형식에 맞는 format을 사용하여 datetime으로 변환 가능

     


    4. datetime 조작하기

    4.1. datetime 조작

    ⓐ. 날짜 데이터 사용하기 (dt)

    • datetime 자료형에서 날짜 데이터 일부를 분리하여 추출할 수 있음 (연도만 뽑아온다던가, 몇 시인지 뽑는 등)

    ⓑ. 주기 데이터 사용하기 (period)

    • 날짜 데이터에 to_period 메소드를 사용하면 주기 데이터를 추출할 수 있음

    ⓒ. 인덱스와 슬라이싱

    • 날짜 기준으로 데이터를 선택할 수 있음
    • 슬라이싱을 사용하여 정해진 날짜 범위 데이터를 추출할 수 있음.

    ⓓ. timedelta를 인덱스로 사용하기

    • 두 datetime의 시간 간격인 timedelta 객체도 인덱스로 사용할 수 있음
    • 마찬가지로 인덱스와 슬라이스를 활용하여 범위의 데이터를 추출할 수 있음.
    • 위와 같이 시계열 데이터를 파악하고 이를 시각화하여 그래프를 뽑아서 적절하게 분석할 수 있어야 함.

     

     

    데이터에 따라 적절한 시간 단위를 설정하여서 시각화하는 것이 중요!


    마무리

    데이터 분석에 필요한 자료형들에 대해 알아봤는데 결국 중요한 건 실제로 연습해서 몸에 체득하는 게 베스트라고 생각됨.

     

     

    댓글