배고픈 개발자 이야기

[2021/07/14] 정형/비정형 데이터 처리 본문

인포섹 아카데미

[2021/07/14] 정형/비정형 데이터 처리

이융희 2021. 7. 14. 09:31
728x90

정형 데이터

    –값이 의미를 파악하기 쉽고,    규칙적인 값으로 데이터가 저장된 경우

    –주로 정수 실수와 같은 숫자 저장

    –문자의 경우 성별 컬럼에 male, female 과 같이 정수로 변환 할 수 있는 범주형 데이터가 저장된 경우

비정형 데이터

    –정해진 규칙이 없어서 값의 의미를 쉽게 파악하기 힘든 데이터

    –게시판의 텍스트, 음성, 영상과 같은 데이터가 비정형 데이터

 

데이터 분석 업무의 80~90%는 데이터 수집 및 정리에 사용됨

10~20%가 알고리즘 선택등

 

판다스

 

- 판다스 자료구조

 

 

- DataFrame 생성

    아래와 같이 두가지 방법으로 생성할 수 있다.

import pandas as pd

# dictionary로 생성
df1 = pd.DataFrame(
    {
        "나이":[15, 17],
        "성별":["남", "여"],
        "학교":["수리중", "덕영중"]
    },
    index = ["준서", "예은"]
)

# list로 생성
df2 = pd.DataFrame(
    [
     [15,"남","수리중"],
     [17,"여","덕영중"]
    ],
    index = ["준서", "예은"],
    columns=["나이","성별","학교"]
)

 

index, columns 수정

또는 inplace는 바로 바뀐값을 적용하는 옵션

df.rename(index={"준서":"학생1","예은":"학생2"}, columns={"성별":"남녀","학교":"소속"}, inplace=True)

 

- DataFrame 조회 및 복사, 삭제

df = pd.DataFrame(
    {
        "수학": [90, 80, 70],
        "영어": [98, 89, 95],
        "음악": [85, 95, 100],
        "체육":[100, 90, 80]
    },
    index=["서준","우현","인아"]
)

# 1과목 조회
df["수학"]

# 여러과목 조회
df[["수학", "영어", "음악"]]

# 전체 조회
df[:]

# 값복사 (df2 수정에 따른 원본 영향없음)
df2 = df[:]

# 우현행 삭제 axis=0은 차원을 의미
df2.drop("우현", axis=0, inplace=True)

# 수학열 삭제
df2.drop("수학", axis=1, inplace=True)

# 영어, 음악열 삭제
df2.drop(["영어", "음악"], axis=1, inplace=True)

 

- 값 조회 및 행열 추가

# index 이름으로 조회
df.loc["서준"]

# index number로 조회
df.iloc[0]

# index 이름 range로 조회
df.loc["서준":"우현"]

# index number range로 조회
df.iloc[0:2]

# 열 조회
df["음악"]
df.음악

# 서준의 음악점수 이름으로 조회
df.loc["서준","음악"]

# 서준의 음악점수 number로 조회
df.iloc[0, 2]

# 열 추가 일괄 80점으로
df["국어"] = 80

# 열 추가 개별 점수로
df["과학"] = [100, 90, 80]

# 행 추가 (이름)
df.loc["동규"] = [100, 90, 80, 70, 60, 50]

# 행 추가 (number)
df.loc[777] = [100, 90, 80, 70, 60, 50]

 

- index 수정, 값 변경, 전치행렬

# index열을 이름열로 변경
df.set_index("이름", inplace=True)

# index열 초기화
df.reset_index(inplace=True)

# 서준의 체육 점수를 변경
df.loc["서준", "체육"] = 99
df.iloc[0, 3] = 88

# 서준의 음악, 체육 점수를 변경
df.loc["서준", ["음악", "체육"]] = 100, 50

# 행렬 대칭
df.transpose()
df.T

 

- index 열이 2개일 때 조회 및 정렬

df = pd.DataFrame({
    "학과":["컴공","보안","컴공","보안"],
    "학년":[1, 4, 2, 3],
    "이름":["홍길동","홍길순","이몽룡","성춘향"],
    "학점":[4.0, 4.5, 3.9, 4.4]
})

# 2개의 열을 index열로 지정
df.set_index(["학과","학년"], inplace=True)

# 컴공 2학년 조회
df.loc[("컴공", 2)]

# 학과가 컴공인 학생 조회
df.xs("컴공", level="학과")

# 학년이 2학년인 학생 조회
df.xs(2, level="학년")

# 인덱스열 정렬
df.sort_index(inplace=True)

 

다음과 같이 정렬된 결과가 나옴

 

 

- seaborn

여러 종류의 dataset을 사용해볼 수 있는 모듈

import pandas as pd
import seaborn as sns

# seaborn 모듈에서 titanic dataset load
titanic = sns.load_dataset("titanic")

# age와 fare열만 DataFrame으로 지정
df = titanic.loc[:,["age","fare"]]

# 마지막 5행 표시
df.tail()

# DataFrame에 숫자 10 더하기
addition = df + 10

# DataFrame끼리 연산하기 addition -df
subtraction = addition - df
Comments