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에 두 개 이상의 조건을 지정할 수 있다는 것...
전반적으로 문제들이 쉽지 않았다