배고픈 개발자 이야기
[2021/07/16] 정형/비정형 데이터 처리 본문
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)
'인포섹 아카데미' 카테고리의 다른 글
[2021/07/20] 클라우드 컴퓨팅 환경과 서비스 (0) | 2021.07.20 |
---|---|
[2021/07/19] 정형/비정형 데이터 처리 (0) | 2021.07.19 |
[2021/07/15] 정형/비정형 데이터 처리 (0) | 2021.07.15 |
[2021/07/14] 정형/비정형 데이터 처리 (0) | 2021.07.14 |
[2021/07/13] 파이썬 기초 (스크래핑, pyplot) (0) | 2021.07.13 |
Comments