배고픈 개발자 이야기
[2021/07/14] 정형/비정형 데이터 처리 본문
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
'인포섹 아카데미' 카테고리의 다른 글
[2021/07/16] 정형/비정형 데이터 처리 (0) | 2021.07.16 |
---|---|
[2021/07/15] 정형/비정형 데이터 처리 (0) | 2021.07.15 |
[2021/07/13] 파이썬 기초 (스크래핑, pyplot) (0) | 2021.07.13 |
[2021/07/12] 파이썬 기초 (가변인자, BS4크롤링) (0) | 2021.07.12 |
[2021/07/09] 파이썬 기초 (0) | 2021.07.09 |
Comments