ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [혼공학습단 9기]혼자 공부하는 데이터 분석 with 파이썬 3주차 미션
    데이터분석 2023. 1. 24. 01:28

     

    3-1 불필요한 데이터 삭제하기

    데이터에서 불필요한 부분을 제거하고 불완전한 값을 교체하는 등의 작업을 'data cleaning'(데이터 정제)라고 한다. 

     

    - 열 삭제하기

     
    drop은 데이터프레임에서 행과 열을 삭제하는 메소드이다. default는 axis=0으로 행이고 axis=1이면 열을 나타낸다. 리스트를 전달하여 여러개의 열을 삭제할 수도 있다. inplace 매개변수로 데이터프레임을 다른 변수에 저장하지 않고 바고 update할 수도 있다.

    <원본>
    <drop 메소드로 열 삭제 >

    - NaN 데이터 없애기

    - 행 삭제하기

    - 중복 된 행 찾기

    1. 모든 열을 기준으로 중복 체크 따라서 애초에 중복이 될 수 없다. 번호열에서 중복이 나올 수 없기에 따라서 몇가지 열을 기준으로 중복을 체크할 수 있다.

    2. keep매개변수를 False로 설정하면 리턴되는 불리언 배열에 중복 된 행은 True로 Check

     

    -  그룹별로 모으기

    데이터 그룹화 하기. 제일 어려웠다. groupby로 지정한 열 값이 같은 항목들을 합친다. 기준 열 지정하고 dropna로 NaN을 해제하고(하나라도 NaN인 행은 삭제하기 때문에) 각 기준이 중복되는 것들은 전부 다 합친다. 정수인 대출건수는 끝에 .sum()메서드를 이용하여 합친다.

    - 원본 데이터 업데이트하기

    1. 중복 확인 배열 반전으로 시켜서 원본데이터의 불리언 배열 확보. keep 기본이 first이므로 중복 처음데이터가 True 그 다음 부터 False

    2. 데이터프레임을 업데이트 할 경우, copy메소드 사용. 왜냐하면 데이터프레임이 별도의 메모리 공간에 저장되는지 보장하지 않기 때문.

    1. 원본 데이터프레임 인덱스 설정. loan_count 데이터프레임과 인덱스를 동일하게 만들기 위해 인덱스 추가.

    2. 업데이트하기 : update()메서드

    3. index 열 해제. 원본 데이터프레임과 인덱스를 맞추기 위해 추가한 인덱스 행 삭제.

    대출건수 100이상인 도서목록이 그룹화과정을 거치고 나서 2311->2550으로 줄어듬. 그만큼 중복된 도서목록들을 합친 것.

    <도서명,저자,ISBN,권 행이 추가된 인덱스 행>

     

    3-2 잘못된 데이터 수정하기

    잘못된 데이터 NaN값을 확인하는 방법과 NaN값을 채우는 방법에 대해서 배워보자.

     

    - 데이터프레임 정보 요약 확인하기

    1.NaN정보확인 +메모리 확인

    2.NaN갯수만 출력하는 메소드 isna와 그 반대 메소드 notna.

    - 누락된 값 처리하기

    1. loc메소드를 이용하여 행과 열을 지정하고 None값을 넣는다.

    2. NaN에 다시 데이터를 넣어도 위에 None이 입력되면서 int64 -> float64로 바뀐다. astype메소드로 데이터타입을 지정한다. astype메소드의 매개변수로는 딕셔너리타입으로 입력한다.(열 : 데이터타입) 그리고 새로운 데이터프래임을 생성한다.

    3. 문자열에는 그냥 None을 넣으면 None이라고 나온다. 실제 판다스에서 NaN이란 값은 없다. 그래서 넘파이 패키지의 np.nan을 사용해야 한다.

    4-1. NaN을 빈문자열로 변경하기 위해서 isna()메소드로 NaN데이터이면 True인 불리언배열을 얻는다. 이를 loc메소드를 이용하여 구간 지정 후 ''로 변환한다.

    4-2. fillna 메소드를 이용해서도 NAN값을 다른 값으로 변경할 수 있다. 매개변수로 {'열': '변경하길 원하는 값'}으로 전달하면 열과 NAN갯수가 나오는 데이터프레임을 반환한다.이 또한 새로운 프레임을 생성하기 때문에 isna,sum 메소드와 연결가능하다.

    5 replace 메소드를 이용하여 1)하나의 데이터를 바꿀 떄, 2)여러개의 값을 변경할 때(list,dictionary데이터타입 사용가능),3)열마다 다른값으로 바꿀때(열 :기존값,변경할 값, 중첩 된 딕셔너리) 사용한다.

     

    - 정규 표현식

    정규표현식은 문자열 패턴을 찾아서 대체하기 위한 규칙의 모음이다.

     

    1 \d : 정규표현식은 패턴을 찾아서 대체하는 규칙의 모음이고 파이썬에서는 r''로 정규표현식을 다른 표현식과 구분한다. \d는 숫자를 나타내는 기호이다. 따라서 년도 숫자를 정규표현식으로 나타내면 \d\d\d\d이고 ()를 치면 그룹화 할 수 있다. \1과 같은 표현식으로 그룹을 지정할 수 있다. 또한 정규식을 사용한다는 표시로 regex매개변수를 True로 바꾼다. 똑같은 정규식을 연속으로 사용하면 중가로 치고 숫자를 넣어 대체할 수 있다.

    2 문자 찾기: 마침표(.) :  마침표는 모든 문자열을 대체한다. 문자열의 사이즈는 알 수없기 때문에 .*로 표시한다. 저자에서 (지은이),(옮긴이)는 전부 똑같이 존재하기 때문에 공백문자 \s와 일반 문자와 구분하기 위해 (,)사용한다. 변경할 값으로는 그룹화한 \1,\2를 사용한다.

     

    - 잘못된 값 바꾸기

    1 발행년도 열에 년도말고 다른 값이 1777개나 있다. contain 메소드와 정규식 \D(\d의 반대로 모든 문자)로 년도외의 다른 문자가 들어있는 행의 갯수와 데이터프래임을 만들었다. 또한 매개변수 na=True로 데이터가 없을 경우도 True로 나타내었다.

    2 정규식을 이용하여 실제 연도외의 데이터는 삭제하여 새로운 데이터프래임을 만들었다.

    <데이터 바꾸기 전>
    <데이터 바꾸기 후>

    3.정규식으로 NaN값을 구하고 -1로 변경한다.

    4 gt메소드를 이용하여 4000년이상인 도서를 찾고 -1로 변경한다.

    5 gt,lt메소드를 이용하여 0~1900년도 도서를 찾고 -1로 변경한다

     

    - 누락된 정보 채우기

    beautifulsoup를 이용한 웹스크래핑을 통해 누락된 정보를 얻어 데이터 업데이트 저자의 경우 여러명이 있어서 findall 메소드를 이용하여 전체 저자 입력. '-1'의 경우는 파이썬 RE모듈을 이용하여 정규식에 매칭되는 모든 문자열을 찾아 리스트로 반환한다. 이 함수의 첫번째 매개변수는 원하는 정규식이고 두 번째 매개변수는 검색 대상 문자열입니다. 이 중 연도만 추출한다.

    <누락 된 정보 확인>
    <2개의 행만 웹스크래핑을 이용하여 데이터 획득>

     

    1 5268 -> 4615로 약 600개 가량 웹에서 데이터를 가지고 왔다.

    2 데이터를 얻지 못한 행들은 dropna 메소드를 이용하여 삭제한다.

     

    - Mission

    - 기본 미션

    - 'col1'열의 합을 구하려면 2번째 매개변수에 [True,False,False] 불리언 배열이 들어가야 한다.

    - ba가 포함되고 뒤의 문자열은 .(마침표) 정규식으로 처리하기 때문에 ba가 포함된 문자열은 전부 new바뀐다. 

     

    - 후기

    너무 시간이 많이 걸린다. 생각보다, 중간중간 이해가 안되는 부분들이 나오기 시작한다. 그래서 검색해보고 찾아보고 하다보면서 시간이 많이 걸린다. 좀 더 눈에 들어오는 예시들을 사용했으면 좋겠다. 솔직히 데이터 변환을 하고 두세번 봐도 뭐가 바꼈는지 잘 모르겠다. 함수를 써서 어떻게 처리를 했다는데 이게 명확하게 눈에 안들어오니까 이해도 안되고 그런 것들로 인한 스트레스가 오히려 생겼던 것같다. 그래도 3주차 완료.

Designed by Tistory.