배고픈 개발자 이야기
[2021/07/15] 정형/비정형 데이터 처리 본문
728x90
- 각 시도별 분양 면적별 분양가의 동향을 분석
csv 데이터(엑셀)은 load시 cp949인코딩 사용
결측치 처리 및 분석을 위한 명령어 실습
import pandas as pd
# Exel은 cp949
df_last = pd.read_csv("data/주택도시보증공사_전국 평균 분양가격(2019년 12월).csv", encoding="cp949")
df_last.shape
# DataFrame 정보 상세보기
df_last.info()
# null인지 True False로 표기
df_last.isnull()
df_last.isna()
# 각 column의 null 갯수 합
df_last.isnull().sum()
import numpy as np
# 결측치 삽입
df = pd.DataFrame({
"컬럼1": ["10", "20", "30"],
"컬럼2": ["10", np.nan, "30"]
})
# dtype : object -> int or float
pd.to_numeric(df["컬럼1"])
# 한글 또는 에러가 있는 경우 결측치 처리 후 실수화
df_last["분양가격"] = pd.to_numeric(df_last["분양가격(㎡)"], errors="coerce")
# new column 생성
df_last["평당분양가격"] = df_last["분양가격"] * 3.3
# 첫 행만 보기
df_last.head(1)
df = pd.DataFrame({
"컬럼1":["메론", "수박", "메론", "바나나", "메론"]
})
# unique한 원소 수, max 원소 수, dtype 출력
df["컬럼1"].describe()
결측치 처리 및 분석을 위한 명령어 실습
import random
# 0~100
list_data = list(range(0, 101))
# 랜덤한 순서로 변경
random.shuffle(list_data)
# count 결측치는 제외, std는 표준편차
df_last["분양가격"].describe()
# min()에 해당하는 행만 출력
df_last[df_last["평당분양가격"] == df_last["평당분양가격"].min()]
# max()에 해당하는 행만 출력
df_last[df_last["평당분양가격"] == df_last["평당분양가격"].max()]
# 규모구분 column의 문자열 replace, dtype을 문자열로 변경하여 실행
df_last["전용면적"] = df_last["규모구분"].str.replace("전용면적", "")
# 위와 마찬가지로 "이하" 단어 삭제
df_last["전용면적"] = df_last["전용면적"].str.replace("이하","")
# 위와 마찬가지로 "초과"를 "~"로 대체
df_last["전용면적"] = df_last["전용면적"].str.replace("초과","~")
# 위와 마찬가지로 공백 제거
df_last["전용면적"] = df_last["전용면적"].str.replace(" ","")
# 좌우 공백 제거
df_last["전용면적"] = df_last["전용면적"].str.strip()
# 두 columns 삭제, column은 axis=1, row는 axis=0이 필수 옵션
df_last.drop(["규모구분", "분양가격(㎡)"], axis=1)
- DataFrame 그룹별 처리 명령어 실습
# df_last.groupby(["학과"]) :학과 칸에 저장된 값이 같은 줄 끼리 그룹을 만듬
# 집계?
df = pd.DataFrame({
"학과":["컴공","보안","보안","컴공","컴공"],
"학년":[1, 2, 1, 2, 1],
"점수":[90, 100, 80, 90, 70]
})
# 컴공, 보안별 그룹으로 묶여 item으로 출력
for item in df.groupby(["학과"]):
print("$" * 100)
print("item")
print("$" * 100)
print(item)
print("=" * 100)
# 학과별 각 column의 평균점수
df.groupby(["학과"]).mean()
# 학과별 groupby 후 점수 column만 평균
df[["학과","점수"]].groupby("학과").mean()
# 학과별 최고점수
df[["학과","점수"]].groupby("학과").max()
# 학과별 최저점수
df[["학과","점수"]].groupby("학과").min()
# groupby()에서 쓸 수 있는 함수 :
# count(), sum(), mean(), max(), min()
# median():중앙값, std(): 표준편차, quantile : 4분위수 25%, 50% 75%
# first(), last()
# 학과가 기준, 학과 컬럼에 저장된 값이 "컴공"인 줄 리턴
df[["학과","점수"]].groupby("학과").get_group("컴공")
- Sample DataSet : seaborn(titanic)을 사용한 데이터 분석
class별 사망자 평균, 나이별 class 이용자 수 확인
import seaborn as sns
# titanic dataset load
titanic = sns.load_dataset("titanic")
# 모든 row의 지정한 column으로 DataFrame 생성
df = titanic.loc[ : , ["age", "sex", "class", "fare", "survived"]]
# class별 그룹화,
for key, people in df.groupby("class"):
print("*" * 100)
print("key = ", key)
print("len(people) = ", len(people))
print("*" * 100)
print(people)
print("=" * 100)
print("=" * 100)
# 각 class별 평균값
df.groupby("class").mean()
# class가 Third인 그룹
df.groupby("class").get_group("Third")
'인포섹 아카데미' 카테고리의 다른 글
[2021/07/19] 정형/비정형 데이터 처리 (0) | 2021.07.19 |
---|---|
[2021/07/16] 정형/비정형 데이터 처리 (0) | 2021.07.16 |
[2021/07/14] 정형/비정형 데이터 처리 (0) | 2021.07.14 |
[2021/07/13] 파이썬 기초 (스크래핑, pyplot) (0) | 2021.07.13 |
[2021/07/12] 파이썬 기초 (가변인자, BS4크롤링) (0) | 2021.07.12 |
Comments