본문 바로가기

Data Engineering/Language

[Python] FacetGrid, map, function, etc

# 다양한 범주형 값을 가지는 데이터를 시각화하는데 좋은 방법=FacetGrid
# 생존 여부(Survived)에 따른 연령(Age) 분포
S = sns.FacetGrid(train, col='Survived')
S.map(plt.hist,'Age',bins=15)
# 다양한 범주형 값을 가지는 데이터를 시각화하는데 좋은 방법=FacetGrid
plt.show()

S의 파생변수를 생성한 뒤 Seaborn의 FacetGrid를 사용하여 시각화 진행

Map 함수를 사용

# map() 함수는 두번째 인자로 넘어온 데이터가 담고 있는 모든 데이터에 변환 함수를 적용하여 다른 형태의 데이터를 반환
# 성별(Sex) 변수를 숫자 범주형 변수로 바꿔줌
Sex_mapping = {'male':1, 'female':2}
for dataset in combine:
    dataset['Sex'] = dataset['Sex'].map(Sex_mapping).astype(int)

#pd.cut 

연속된 수치(continuous values)를 구간으로 나누어 카테고리화 할 때 사용합니다.

bin = [0, 18, 25, 35, 60, 100]
group_names = ['Baby', 'Youth', 'YoungAdult', 'MiddleAged', 'Senior']
train['AgeGroup'] = pd.cut(train['Age'], bins=bin, labels=group_names)
train['AgeGroup'].value_counts()

#.mode()

MODE는 배열 또는 데이터 범위에서 가장 자주 발생하거나 반복적인 값을 반환합니다. = 최빈값 대체

# Embarked의 결측치를 최빈값으로 대체 'S'
freq_port = train.Embarked.dropna().mode()[0]
freq_port

train['Embarked'] = train['Embarked'].fillna(freq_port)

#Labelencoder()

sklearn.preprocessing 안에 있는 모듈인 LabelEncoder를 활용하면 카테고리를 수치화할 수 있다.

from sklearn.preprocessing import LabelEncoder

label = LabelEncoder()
for col in ['Sex', 'Embarked', 'Title', 'AgeGroup']:
    train[col] = label.fit_transform(train[col])

# exclude = 수치형 변수를 가진 컬럼만 출력하라

df.select_dtypes(exclude=object).columns

# include = 범주형 변수를 가진 컬럼만 출력하라

df.select_dtypes(include=object).columns

 #4분위 범위(IQR) 값을 구하여라

Q3- Q1

.quantile(0.75) - quantitle(0.25)

#nunique()

데이터에 고유값들의 수를 출력해주는 함수

#unique()

데이터에 고유값들이 어떠한 종류들이 있는지 알고 싶을때 사용하는 함수

#reset_index(drop=False)

열을 인덱스로 설정하고 기존의 인덱스 열은 사라진다.
추가로 drop=True 옵션을 지정해주면 인덱스로 지정은 하되, 기존열을 남겨놓는다.

df.loc[df['quantity']==3].head().reset_index(drop=True)

#이상치 탐색

(사분위수)

IQR = Q3 - Q1

lower = Q1 - 1.5 * (Q3-Q1)

upper = Q3+1.5*(Q3-Q1)

python 실기 경우 평균으로부터 '표준편차*1.5'를 벗어나는 영역을 이상치라고 판단함

# 평균으로부터 '표준편차*1.5'를 벗어나는 영역을 이상치라고 판단
std = df['age'].std()
mean = df['age'].mean()

lower = mean - std*1.5
upper = mean + std*1.5

print(lower, upper)

# [(a) | (b)] 

>>> a | b                              # letters in a or b or both
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}

# np.log1p - Q

x의 구간은 (0,1)로 매우 짧은 반면, y의 구간은 (−∞,0)으로 매우 크다.

로그함수의 경우 위의 자연로그 함수 그래프를 보면 알겠지만, x=0 인 경우 y가 -무한대(-infinite)의 값을 가진다.

반응형