[Sql분석] 데이터 재구조화

김보림·2024년 6월 27일
0

SQL 분석

목록 보기
1/33

-pd.melt()
_pd.pivot_table

1. 테이블 불러오기

pd.read_csv() : ()안에 불러올 파일, 인코딩 정보(주로 utf-8, utf-8-sig, cp949)

2. 데이터 살펴보기

df.head() : 데이터가 잘 불러와졌는지 check

df.info() : 데이터 정보확인 (행,렬, dtype, null값...)

df.columns[] : 괄호안에 숫자를 넣어서 특정열을 확인 할 수 있음

df[df.columns[]].unique() : 특정열의 유니크한 값을 알 수 있음

df[df["열이름"]==조건] : 조건에 해당하는 열의 정보만을 확인 할 수 있음

3. 데이터 재구조화 하기

  • 이미 집계가 완료된 형태를 우리가 원하는 방식으로 바꾸기 위한 과정

df.melt() or pd.melt(df) :
가로로 나열되어 있는 데이터를 세로로 나열되게 해줌
원래 있던 컬럼들의 이름을 variable 컬럼아래 길게 나열하고
value에 그에 해당하는 값을 넣는다

pd.melt(data, id_vars="", var_name="", value_name="")

  • id_vars : 유지할 컬럼
  • var_name : melt를 통해 새로 생기는 집계기준
  • value_name : 값

4. 데이터 타입 변경하기

  • 당연히 숫자 혹은 문자여야 될 값의 데이터 타입이 다르게 설정되어 있는 경우 dtype변경

type(i) for i in df["열이름"] : "열이름"에서 가져온 변수 i의 dtype을 리스트 형태로 확인

set([type(i) for i in df["열이름"]) : set은 리스트이 중복 값을 삭제하고 데이터를 보여줌

i for i in df["열이름"] if type(i) != int : dtype이 숫자가 아닌 변수 i를 리스트로 출력해줘

  • 문자열을 정수로 변경하는 함수 선언
def strtoint(x) :

    if type(x) == str : 
        x = x.replace("-", "0")  
        x = int(x) 

    else : 
        pass

    return x

(참고. replace는 string에 적용되는 함수로, 바로 int로 바꿀 수는 없다)

df2["열이름"] = df2["열이름"].apply(strtoint) : 정의한 함수를 적용후 df에 적용

5. 피벗테이블로 데이터 다뤄보기

df.pivot_table(index = 'column1' , columns = 'column2' , aggfunc = '연산')

6. 데이터셋의 필요하지 않는 값들 빼기

df = df[df["열이름"] != "조건1"] : 조건1에 맞지 않은 열만 데이터셋에 입력

df2 = df2[df2["열이름"] == "조건2"] : 조건2에 맞는 열의 데이터만 입력

df2.drop("열이름", axis = 0 or 1) : 열이름을 기준으로 axis=0 은 행, axis=1은 열을 삭제

7. 양식이 다른 열을 일치시키기

df2['열이름'] = df2['열이름'].apply(lambda x : x.replace(" p)", ""))

  • 간단한 함수는 lambda 함수를 쓰면 따로 def로 정의하지 않아도 됨
  • apply : 컬럼에 함수 적용

8. 저장하기

df.to_csv("preprocess.csv", encoding = 'cp949', index = False)

  • 저장할때도 encoding이 필요합니다
  • 인덱스을 없애주고 저장해야함. 아니면 인덱스가 새로운 컬럼으로 저장됨
profile
볼로그

0개의 댓글