Data Science Lv.2

Ch.9 - 10. 데이터 전처리(3) : 정렬, 변환, 사용자 정의함수

seonghojang 2023. 1. 8. 17:34

crosstab : 데이터프레임의 두 변수의 원소 조합 빈도를 확인하는 함수

                 value와 aggfunc에 변수와 요약함수를 지정하면 별도의 산술연산 가능

 

normalize = 0 : row에 대한 정규화

normalize = 1 : column 에 대한 정규화

 

aggfunc를 지정 시 별도의 연산이 가능하며, (여기서는 pd.Series.mean으로 평균)

Clustering에 자주 활용된다.

위 연산을 Long Form으로 계산 가능하다.

 

 

sort_values: 데이터 정렬 함수

정렬 기준을 2개 이상으로 할 경우, 리스트 형식으로 작성하면 된다.

 

melt : Wide form 형태의 데이터를 Long form으로 바꾸는 함수

pivot : Long form 형태의 데이터를 Wide form으로 바꾸는 함수

 

문제1

workingday가 아니면서 holiday가 아닌 날의 비율은?

df = pd.read_csv('bike.csv') 
df2 = pd.crosstab(df["holiday"], df["workingday"], normalize = True)

 

문제2

가장 많은 데이터가 있는 세공 수준과 색상 조합을 순서대로 고르면?

df = pd.read_csv('diamonds.csv') 
df2 = pd.crosstab(df["cut"], df["color"]).reset_index()

cross_melt = df2.melt(id_vars = "cut")
cross_melt.sort_values("value", ascending = False).head(3)

melt를 활용해서 롱폼으로 내리고, sort 하기

 

문제3

세공수준별, 색상별 가격과 캐럿의 평균을 구하고 1캐럿당 가격이 가장 높은 세공수준과 색상 조합을 구하면?

df = pd.read_csv('diamonds.csv') 

dia = df.groupby(["cut", "color"])["price", "carat"].mean().reset_index()

dia["ratio"] = dia["price"] / dia["carat"]
dia.sort_values("ratio", ascending = False)

groupby에 두 개 이상의 조건을 지정할 수 있다는 것...

전반적으로 문제들이 쉽지 않았다