ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <데이터 분석 준비> 데이터 탐색 - eda
    데이터분석 2019. 1. 25. 10:39

    연습해 볼 것

    1. 데이터 탐색

    2. NA 데이터 처리

    3. 컬럼 삭제 또는 추가

    4. 범주형 데이터 처리



    데이터 가져오기



    pandas를 import해주고 data2.csv파일을 가져온다. 



    data.csv파일 안에 있는 데이터들의 종류이고, 이름을 바꿔주는 코드이다. 

    inplace가 true면 원래 데이터프레임에 저장을 해주는 것이고, default면 새로운 데이터프레임을 만들어서 저장해주는 것이다.


    예를 들면, 


    df

     a

     b

     c

     d

     

     

     

     

    이렇게 되어 있는데,

    inplace가 없이 df. drop('d')를 실행한다면, 새로운 데이터 프레임을 만들어야한다.

    그래서 x = df.drop('d') 이런 식으로 새로운 데이터 프레임을 저장할 수 있는 변수를 넣어주어야한다.

    실행이 되면

    x

     a

     b 

     c

     

     

     


    이렇게 새로운 데이터 프레임이 만들어진다.

    하지만, df.drop('d', inplace=True) 이렇게 inplace를 True로 해준다면 원래 데이터 프레임에서 'd'열을 지워주는 것이다.



    NA데이터 탐색



    total_na는 데이터에 있는 모든 NA데이터를 합해서 저장해준것이고, count_na는 NA데이터의 갯수를 저장해 준것이다.

    그래서 missing_data를 찾아주면



    이렇게 cust_id와 description에 NA데이터가 가장 많이 있다고 나온다. 그리고 차지하는 퍼센트도 얼마 안되는것을 보니까 지워줘도 될것같다.


    이렇게 하면 NA데이터를 간단하게 지워 줄 수 있다.

     



    데이터 형식 바꾸기


    데이터의 형식을 바꿔주는 처리도 해볼 수 있다.

    invoice_date의 타입을 조회해보면, str인 문자열 형식으로 나오게 된다.

    위의 코드처럼 하면 문자열 형식을 datetime형식으로 바꿔 줄 수 있다.


    위 코드처럼  float형을 int형으로 바꿔줄 수 있다.



    컬럼 추가


    컬럼을 새로 추가 시켜 줄 수도 있는데,

    수량과, 한개당 가격을 곱해서 총 비용을 amount_cost라는 컬럼에 저장을 해줄 수 있다.


    또, insert를 이용해서도 추가 시킬 수 있다.



    map 함수는 map(함수, 리스트)를 인자로 받는데,

    이 코드에서는 lambda x: 100*x.year + x.month가 map이 받는 함수인 것이다. 

    x에 invoice_date 목록에서 하나씩 들어가서 함수가 실행이되고, 

    year_month라는 새로운 컬럼의 값으로 저장이 되는 것이다.


    4번째에 year_month라는 이름의 컬럼을 넣어주는데 값은 invoice_data 목록에서 하나씩 빼서 x에 넣어준다.

    5번째에는 month라는 이름의 컬럼을 invoice_date에서 month라는 데이트타입을 넣어준다,



    groupby 사용


    groupby를 이용해서 정보를 보기좋게 볼 수 있다.


    groupby를 해주면 groupby가 된 'cust_id'와 'country'가 index로 들어가게 되는데,

    as_index를 False로 주면 index컬럼에 넣지 말고 value로 들어가게 해달라 하는것이다.




    invoice_num(송장번호) 별로 year_month에 주문한 한번만 나옴.

    예를들어서


    invoice_num    year_month

    1                    1

    1                    1

    1                    2

    1                    2

    1                    2

    1                    3

    일때

    1                    1

    1                    2

    1                    3

    이렇게 나오게 된다.




    정렬된 데이터에서 

    index는 invoice_num이 되고, value는 unique()가 적용된 year_month가 됩니다.




    이렇게 value_counts()를 해주면 year_month별 갯수를 세어서 보여주게 됩니다.





    year_month를 중심으로 순서대로 보여주고 싶으면




    sort_index()를 사용해서 index를 중심으로 정렬을 시켜주면 됩니다.




    결과가 마치 year_month로 groupby해서 invoice_num을 세어준 것과 비슷하게 나온것 같아보인다.



    하지만, 이 데이터는 동일한 invoice_num(송장번호) 당, 같은 year_month에 주문된 건은 하나로 unique()시켜서 year_month로 세어준 데이터이다.


    즉 송장번호가 같으면 하나의 달별 주문만 남겨주는 것이다.




    year_month로 groupby해서 invoice_num을 세어준 것과 비교를 해보면, 코드는 이렇게 되고



    결과는 이렇게 나오게 된다.



    이 데이터는 그냥 달별로 groupby를 해주고 invoice_num을 세어준 거라서, 동일한 invoice_num이 같은 year_month에 주문한 것을 빼주지 않고 모두 세어주어서 count양이 아까 데이터 보다 많아진다.



    그래프로 보여주기


    이제 데이터를 그래프로 보여주도록 해주려면,

    먼저,matplotlib을 import해주고


    plot함수를 이용해서 bar형식으로 그래프를 보여달라고 하면,


    year_month별로 주문된 건이 나오게 된다.

    댓글

Designed by Tistory.