배고픈 개발자 이야기

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

인포섹 아카데미

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

이융희 2021. 7. 16. 17:20
728x90

- seaborn

 

titanic 그룹화, 컴럼별 평균, 표준편차

import seaborn as sns

# titanic 데이터 중 원하는 컬럼만 데이터프레임으로 변환
titanic = sns.load_dataset("titanic")
df = titanic.loc[ : , ["age", "sex", "class", "fare", "survived"]]

# class별 각 행의 평균
df.groupby("class").mean()

# class가 Thrid인 그룹 추출
df.groupby("class").get_group("Third")

# class별 sex별 평균값
df.groupby(["class", "sex"]).mean()

# class별 sex별 그룹에서 Third class의 female
df.groupby(["class", "sex"]).get_group(("Third", "female"))

# class별 각 행의 표준편차
df.groupby(["class"]).std()

# class별 fare 행의 표준편차
df.groupby(["class"]).std()[["fare"]]

 

 

- 평균 아파트 분양 가격 분석

 

그룹화, 평균, 정렬, pivot_table

# 지역명 컬럼별 평당분양가격의 평균
df_last.groupby(["지역명"])[["평당분양가격"]].mean()

# 지역명 컬럼별 평당분양가격의 평균의 내림차순 정렬
df_last.groupby(["지역명"])[["평당분양가격"]].mean().sort_values(["평당분양가격"], ascending=False)

# 전용면적별 각 컴럼의 평균
df_last.groupby(["전용면적"]).mean()

# 전용면적별 평당분양가격의 평균
df_last.groupby(["전용면적"])[["평당분양가격"]].mean()

# 전용면적별 평당분양가격의 평균의 내림차순 정렬
df_last.groupby(["전용면적"])[["평당분양가격"]].mean().sort_values(["평당분양가격"], ascending=False)

# 전용면적, 지역명별 각 컬럼의 평균
df_last.groupby(["전용면적","지역명"]).mean()

# 전용면적, 지역명별 평당분양가격의 평균
전용면적_지역명_평당분양가격 = df_last.groupby(["전용면적","지역명"])[["평당분양가격"]].mean()

# 세로 -> 가로로 출력 및 반올림
전용면적_지역명_평당분양가격.unstack().round()

# 연도, 지역명별 평균값
g = df_last.groupby(["연도", "지역명"])[["평당분양가격"]].mean()

# 세로 -> 가로로 출력
g.unstack()

# row <-> column 변경
g.unstack().T

# 평당분양가격의 평균 테이블 만들기
pd.pivot_table(
    df_last,
    index=["지역명"],
    columns=["전용면적"],
    values="평당분양가격",
    aggfunc="mean"
)

# column없이 생성
pd.pivot_table(
    df_last,
    index=["지역명"],
    #columns=["전용면적"],
    values="평당분양가격",
    aggfunc="mean"
)

pd.pivot_table(
    df_last,
    index=["전용면적"],
    #columns=["전용면적"],
    values="평당분양가격",
    aggfunc="mean"
)

pd.pivot_table(
    df_last,
    index=["전용면적"],
    columns=["지역명"],
    values="평당분양가격",
    aggfunc="mean"
).round()

p = pd.pivot_table(
    df_last,
    index=["연도", "지역명"],
    #columns=["전용면적"],
    values="평당분양가격",
    aggfunc="mean"
)

# 2019년의 지역별 평당분양가격
p.loc[2019]

 

- titanic pivot_table 분석

titanic = sns.load_dataset("titanic")
df = titanic[["age", "sex", "class", "fare", "survived"]]

# class, sex별 생존률의 평균값과 합 테이블
pd.pivot_table(
  df,
  index="class",
  columns="sex",
  values="survived",
  aggfunc=["mean","sum"]
)

# class, sex별 fare의 평균값 테이블
pd.pivot_table(
    df,
    index = ["class", "sex"],
    columns = "survived",
    values = ["fare"],
    aggfunc = "mean"
)

# class, sex별 survived별 age 및 fare의 평균과 최댓값 테이블
pd.pivot_table(
    df,
    index = ["class", "sex"],
    columns = "survived",
    values = ["fare", "age"],
    aggfunc = ["mean", "max"]
)

 

 

- 시각화

box plot

import random

# 정수 0~100 리스트 생성
lst1 = list(range(0, 101))

# 랜덤하게 순서 바꾸기
random.shuffle(lst1)

# 이상치 삽입
lst1.append(-150)
lst1.append(150)

# 데이터 프레임으로 변경
df = pd.DataFrame(
    {
        "컬럼1":lst1
    }
)

# 25 50 75 구간 95% 신뢰도 보여주는 box plot 생성
df["컬럼1"].describe()
sns.boxplot(data=df, y="컬럼1")

plt.figure(figsize=(10, 5))
sns.boxplot(data=df, y="컬럼1")

# 25% 값 Q1값
df["컬럼1"].quantile(0.25)

# 75% 값 Q3값 
df["컬럼1"].quantile(0.75)

IQR = df["컬럼1"].quantile(0.75) - df["컬럼1"].quantile(0.25)

# 이상치 최대 한계점, 이상치 최소 한계점 구함
limit_min = df["컬럼1"].quantile(0.25) - (1.5 * IQR)
limit_max = df["컬럼1"].quantile(0.75) + (1.5 * IQR)

 

Comments