GCI 데이터 과학자 교육 강좌 연습 문제 해결 Chapter6
GCI 데이터 과학자 육성 강좌
'GCI 데이터 과학자 육성 강좌'은 도쿄대학(마츠오 연구실)이 개강하고 있는 '실천형 데이터 과학자 육성 강좌 및 Deep Learning 강좌'로, 연습 파트의 콘텐츠가 JupyterNoteBook 형식으로 공개(CC-BY-NC- ND)입니다.
Chapter6는 「Pandas를 이용한 데이터 가공 처리」로, 데이터 해석을 하기 위한 강력하고 고속의 데이터 조작 라이브러리의 사용법을 학습해 갑니다.
일본어로 배울 수 있는 귀중하고 훌륭한 교재를 공개해 주시고 있는 것에의 「좋아!」버튼 대신에, 풀어 본 해답을 실어 봅니다. 틀린 곳이 있으면 지적해 주세요.
Chapter6 Pandas를 이용한 데이터 가공 처리
6.1 Pandas
6.1.1 계층 적 인덱스
<연습 문제 1>
다음 데이터에 대해 Kyoto 열만 추출해 봅시다.
hier_data_frame1 = DataFrame(np.arange(12).reshape((3,4))
,index = [['c','d','d'],[1,2,1]]
,columns = [['Kyoto','Nagoya','Hokkaido','Kyoto']
,['Yellow','Yellow','Red','Blue']]
)
hier_data_frame1.index.names =['key1','key2']
hier_data_frame1.columns.names =['city','color']
hier_data_frame1
hier_data_frame1["Kyoto"]
<연습 문제 2>
연습 문제 1의 데이터에 대해 city를 정리하여 열끼리의 평균값을 내십시오.
hier_data_frame1.mean(level = "city", axis = 1)
<연습 문제 3>
연습 문제 1의 데이터에 대해 key2마다 행의 합계 값을 계산해 봅시다.
hier_data_frame1.sum(level = "key2")
6.1.2 데이터 병합
<연습 문제 1>
아래의 두 개의 데이터 테이블에 대해 내부적으로 결합해 봅시다.
pd.merge(attri_data_frame4, attri_data_frame5, how = "inner")
<연습 문제 2>
attri_data_frame4를 기반으로 attri_data_frame5의 테이블을 외부 조인해 봅시다.
pd.merge(attri_data_frame4, attri_data_frame5, how = "outer")
<연습 문제 3>
attri_data_frame4에 대해 다음 데이터를 세로 결합해 봅시다.
pd.concat([attri_data_frame4, attri_data_frame6])
6.1.3 데이터 조작 및 변환
<연습 문제 1>
이전 장에서 사용한 "student-mat.csv"의 데이터를 사용합니다. age를 2배로 한 컬럼을 추가해 봅시다.
student_data_math["2age"] = 2 * student_data_math["age"]
student_data_math[["age", "2age"]].head()
<연습 문제 2>
위와 같은 데이터로, 「absences」의 컬럼에 대해, 이하의 3개의 빈으로 나누어 각각의 인원수를 세어 봅시다. 덧붙여 cut의 옵션 설정으로, 디폴트는 우측이 폐 구간이 되고 있습니다만, 이번은 0이 들어가기 위한 right=False를 추가해 주세요.
# pd.cut(student_data_math.absences, absences_bins, right=False)
pd.value_counts(pd.cut(student_data_math.absences, absences_bins, right=False))
> [5, 100) 151
> [1, 5) 129
> [0, 1) 115
> Name: absences, dtype: int64
<연습 문제 3>
위와 같은 데이터를 사용하여 "absences"열에 대해 qcut을 사용하여 세 개의 bin으로 나눕니다.
# pd.qcut(student_data_math.absences, 3)
pd.value_counts(pd.qcut(student_data_math.absences, 3))
> (-0.001, 2.0] 183
> (6.0, 75.0] 115
> (2.0, 6.0] 97
> Name: absences, dtype: int64
6.1.4 데이터 집계 및 그룹 연산
<연습 문제 1>
방금 사용한 'student-mat.csv'를 사용하여 'student-mat.csv'를 사용하여 pandas를 집계해 봅시다. 우선, school을 축으로 하여 G1의 평균점을 각각 구해 봅시다.
student_data_math = pd.read_csv("student-mat.csv",sep=";")
student_data_math.groupby("school")["G1"].mean()
> school
> GP 10.939828
> MS 10.673913
> Name: G1, dtype: float64
<연습 문제 2>
다음은 school과 성별을 축으로 하여 G1, G2, G3의 평균점을 각각 구해 봅시다.
student_data_math.groupby(["school", "sex"])[["G1", "G2", "G3"]].mean()
<연습 문제 3>
다음은, school과 성별을 축으로 하여, G1, G2, G3의 최대치, 최소치를 정리해 산출해 봅시다.
student_data_math.groupby(["school", "sex"])[["G1", "G2", "G3"]].agg(["max", "min"])
6.2 결손 데이터와 이상치의 취급의 기초
6.2.1 누락 데이터 처리 방법
<연습 문제 1>
아래의 데이터에 대해 1열에서도 NaN이 있는 경우 삭제하고 그 결과를 표시합니다.
sample_data_frame2.dropna()
<연습 문제 2>
위에서 준비한 데이터에 대해 NaN을 0으로 채웁니다.
sample_data_frame2.fillna(0)
<연습 문제 3>
위에서 준비한 데이터에 대해 NaN을 각 열의 평균값으로 채웁니다.
sample_data_frame2.fillna(sample_data_frame2.mean())
6.2.2 이상 데이터 처리 방법
6.3 종합 문제
6.3.1 종합 문제 1
이전에 사용한 "student-mat.csv"를 사용하여 다음 질문에 답하십시오.
(1) 상기의 데이터에 대해 연령×성별로 G1의 평균점을 산출하고, 세로축이 연령, 가로축이 성별이 되는 표(테이블)를 작성합시다.
(2) (1)에서 표시한 결과 테이블에 대해 NA가 되어 있는 행(레코드)을 모두 삭제한 결과를 표시합시다.
student_data_math = pd.read_csv("student-mat.csv",sep=";")
# (1)
print("(1)")
print(student_data_math.groupby(["age", "sex"])["G1"].mean().unstack())
# (2)
print("\n(2)")
print(student_data_math.groupby(["age", "sex"])["G1"].mean().unstack().dropna())
> (1)
> sex F M
> age
> 15 10.052632 12.250000
> 16 10.203704 11.740000
> 17 11.103448 10.600000
> 18 10.883721 10.538462
> 19 10.642857 9.700000
> 20 15.000000 13.000000
> 21 NaN 10.000000
> 22 NaN 6.000000
>
> (2)
> sex F M
> age
> 15 10.052632 12.250000
> 16 10.203704 11.740000
> 17 11.103448 10.600000
> 18 10.883721 10.538462
> 19 10.642857 9.700000
> 20 15.000000 13.000000
Reference
이 문제에 관하여(GCI 데이터 과학자 교육 강좌 연습 문제 해결 Chapter6), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nebula121/items/1b3ac861d49a0fa7d930
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
6.1 Pandas
6.1.1 계층 적 인덱스
<연습 문제 1>
다음 데이터에 대해 Kyoto 열만 추출해 봅시다.
hier_data_frame1 = DataFrame(np.arange(12).reshape((3,4))
,index = [['c','d','d'],[1,2,1]]
,columns = [['Kyoto','Nagoya','Hokkaido','Kyoto']
,['Yellow','Yellow','Red','Blue']]
)
hier_data_frame1.index.names =['key1','key2']
hier_data_frame1.columns.names =['city','color']
hier_data_frame1
hier_data_frame1["Kyoto"]
<연습 문제 2>
연습 문제 1의 데이터에 대해 city를 정리하여 열끼리의 평균값을 내십시오.
hier_data_frame1.mean(level = "city", axis = 1)
<연습 문제 3>
연습 문제 1의 데이터에 대해 key2마다 행의 합계 값을 계산해 봅시다.
hier_data_frame1.sum(level = "key2")
6.1.2 데이터 병합
<연습 문제 1>
아래의 두 개의 데이터 테이블에 대해 내부적으로 결합해 봅시다.
pd.merge(attri_data_frame4, attri_data_frame5, how = "inner")
<연습 문제 2>
attri_data_frame4를 기반으로 attri_data_frame5의 테이블을 외부 조인해 봅시다.
pd.merge(attri_data_frame4, attri_data_frame5, how = "outer")
<연습 문제 3>
attri_data_frame4에 대해 다음 데이터를 세로 결합해 봅시다.
pd.concat([attri_data_frame4, attri_data_frame6])
6.1.3 데이터 조작 및 변환
<연습 문제 1>
이전 장에서 사용한 "student-mat.csv"의 데이터를 사용합니다. age를 2배로 한 컬럼을 추가해 봅시다.
student_data_math["2age"] = 2 * student_data_math["age"]
student_data_math[["age", "2age"]].head()
<연습 문제 2>
위와 같은 데이터로, 「absences」의 컬럼에 대해, 이하의 3개의 빈으로 나누어 각각의 인원수를 세어 봅시다. 덧붙여 cut의 옵션 설정으로, 디폴트는 우측이 폐 구간이 되고 있습니다만, 이번은 0이 들어가기 위한 right=False를 추가해 주세요.
# pd.cut(student_data_math.absences, absences_bins, right=False)
pd.value_counts(pd.cut(student_data_math.absences, absences_bins, right=False))
> [5, 100) 151
> [1, 5) 129
> [0, 1) 115
> Name: absences, dtype: int64
<연습 문제 3>
위와 같은 데이터를 사용하여 "absences"열에 대해 qcut을 사용하여 세 개의 bin으로 나눕니다.
# pd.qcut(student_data_math.absences, 3)
pd.value_counts(pd.qcut(student_data_math.absences, 3))
> (-0.001, 2.0] 183
> (6.0, 75.0] 115
> (2.0, 6.0] 97
> Name: absences, dtype: int64
6.1.4 데이터 집계 및 그룹 연산
<연습 문제 1>
방금 사용한 'student-mat.csv'를 사용하여 'student-mat.csv'를 사용하여 pandas를 집계해 봅시다. 우선, school을 축으로 하여 G1의 평균점을 각각 구해 봅시다.
student_data_math = pd.read_csv("student-mat.csv",sep=";")
student_data_math.groupby("school")["G1"].mean()
> school
> GP 10.939828
> MS 10.673913
> Name: G1, dtype: float64
<연습 문제 2>
다음은 school과 성별을 축으로 하여 G1, G2, G3의 평균점을 각각 구해 봅시다.
student_data_math.groupby(["school", "sex"])[["G1", "G2", "G3"]].mean()
<연습 문제 3>
다음은, school과 성별을 축으로 하여, G1, G2, G3의 최대치, 최소치를 정리해 산출해 봅시다.
student_data_math.groupby(["school", "sex"])[["G1", "G2", "G3"]].agg(["max", "min"])
6.2 결손 데이터와 이상치의 취급의 기초
6.2.1 누락 데이터 처리 방법
<연습 문제 1>
아래의 데이터에 대해 1열에서도 NaN이 있는 경우 삭제하고 그 결과를 표시합니다.
sample_data_frame2.dropna()
<연습 문제 2>
위에서 준비한 데이터에 대해 NaN을 0으로 채웁니다.
sample_data_frame2.fillna(0)
<연습 문제 3>
위에서 준비한 데이터에 대해 NaN을 각 열의 평균값으로 채웁니다.
sample_data_frame2.fillna(sample_data_frame2.mean())
6.2.2 이상 데이터 처리 방법
6.3 종합 문제
6.3.1 종합 문제 1
이전에 사용한 "student-mat.csv"를 사용하여 다음 질문에 답하십시오.
(1) 상기의 데이터에 대해 연령×성별로 G1의 평균점을 산출하고, 세로축이 연령, 가로축이 성별이 되는 표(테이블)를 작성합시다.
(2) (1)에서 표시한 결과 테이블에 대해 NA가 되어 있는 행(레코드)을 모두 삭제한 결과를 표시합시다.
student_data_math = pd.read_csv("student-mat.csv",sep=";")
# (1)
print("(1)")
print(student_data_math.groupby(["age", "sex"])["G1"].mean().unstack())
# (2)
print("\n(2)")
print(student_data_math.groupby(["age", "sex"])["G1"].mean().unstack().dropna())
> (1)
> sex F M
> age
> 15 10.052632 12.250000
> 16 10.203704 11.740000
> 17 11.103448 10.600000
> 18 10.883721 10.538462
> 19 10.642857 9.700000
> 20 15.000000 13.000000
> 21 NaN 10.000000
> 22 NaN 6.000000
>
> (2)
> sex F M
> age
> 15 10.052632 12.250000
> 16 10.203704 11.740000
> 17 11.103448 10.600000
> 18 10.883721 10.538462
> 19 10.642857 9.700000
> 20 15.000000 13.000000
Reference
이 문제에 관하여(GCI 데이터 과학자 교육 강좌 연습 문제 해결 Chapter6), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nebula121/items/1b3ac861d49a0fa7d930텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)