import seaborn as sns
'''데이터 프레임 응용
<함수 매핑>
-시리즈 또는 데이터 프레임의 개별 원소를 특정 함수에 일대일 대응 시키는 과정
시리즈.apply(매핑함수) : 매핑함수에 시리즈의 모든 원소를 하나씩 입력하고 리턴
타이타닉의 age,fare 열 선택후 새로운 열 ten 추가 모든 데이터는 숫자 10
임의의 객체 n에 숫자 10을 더하는 add_10(n) 사용자 함수 정의
객체 a와 b를더하는 add_two_obj(a,b) 함수 정의
add_10(10) 출력
add_two_obj(10,10) 출력
'''
#타이타닉 가져오기
titanic = sns.load_dataset('titanic')
#age, fare 열 선택
data = titanic.loc[:,['age','fare']]
#열 ten 추가 데이터 = 10
data['ten'] = 10
def add_10(ab):
return ab+10
def add_two_obj(a,b):
return a+b
#age 열에 apply 메소드로 add_10 함수 매핑후, 결과를 sr1에 저장
sr1 = data['age'].apply(add_10)
#print(sr1)
#age열에 apply메소드로 add_two_obj함수 매핑 후 결과를 sr2에 저장
sr2 = data['age'].apply(add_two_obj,b=10)
#print(sr2)
#age 열에 apply 메소드로 람다 함수 활용 add_10 함수 사용 결과를 sr3에 저장
sr3 =data['age'].apply(lambda x: add_10(x))
#print(sr3)
#sr1, sr2 sr3 결과 비교
'''
데이터 프레임 원소에 함수 매핑
-데이터프레임.applymap(매핑함수) : 매핑 함수에 데이터프레임의 각 원소를 하나씩 넣어 리턴
-데이터프레임.apply(매핑함수,axis=0) 모든열을 하나씩 분리하여 매핑 함수의 인자로 각 열이 전달
-시리즈로 인수를 받아서 null값 여부를 반환하는 사용자 함수 missing_value 정의
-데이터프레임의 각 열을 인수로 전달하면 데이터프레임 반환
'''
print('-----------------------------------')
print(data[['age','fare']].applymap(add_10))
def missing_value(series):
return series.isnull()
print(missing_value(data[['age','fare','ten']]))
'''데이터프레임의 각 열에 함수 매핑
1.시리즈를 입력받아 하나의 값을 반환
2.시리즈의 최댓값과 최솟값의 계산하여 값을 반환하는 min_max(x) 함수 정의
3.데이터프레임의 apply 메소드에 min_max 함수 적용
'''
def min_max(x):
return max(x)-min(x)
print(data.apply(min_max))
'''데이터프레임의 각 행에 함수 매핑
데이터프레임.apply(매핑함수,axis=1)
타이타닉 age,ten열 지정, 메소드에 add_two_obj 매핑함수 , axis =1 옵션 지정
'''
data['add'] = data.apply(lambda x: add_two_obj(x['age'],x['ten']),axis=1)
print(data['add'])
'''데이터 프레임.pipe(매핑함수)
-매핑함수가 반환하는 리턴값에 따라 pipe 메소드가 반환하는 객체의 종류가 결정
-데이터프레임 반환 , 시리즈 반환 , 개별 값 반환등
--각 열의 NaN 찾기 함수 생성 - 데이터 프레임 전달하면 데이터 프레임 반환
--각 열의 NaN 개수 반환 함수 생성 - 데이터 프레임 전달하면 시리즈 반환
--데이터프레임의 총 NaN 개수찾기 함수 생성- 데이터프레임 전달하면 값을 반환
'''
def find_nan(x):
return x.isnull()
def missing_count(x):
return missing_value(x).sum()
def total_number_missing(x):
return missing_count(x).sum()
'''데이터 프레임에 pipe()메소드로 3개 함수 매핑하기'''
result_data = data.pipe(missing_value)
print(result_data.head())
print(type(result_data))
print('\n')
result_sr = data.pipe(missing_count)
print(result_sr.head())
print(type(result_sr))
print('\n')
result_value = data.pipe(total_number_missing)
print(result_value)
print(type(result_value))