오늘은 EDA에 사용하는 코드들을 정리해보았다.
from google.colab import drive
drive.mount('/content/drive', force_remount=True)
df = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/data/data.csv')
import seaborn as sns
df = sns.load_dataset('tips')
df.head()
df.head() : 상위 n개의 행 반환. default는 5
df.tail() : 하위 n개의 행을 반환. default는 5
df.info() : DF의 기본 정보를 제공. 컬럼명, 데이터 타입, non-null의 개수 등
df.describe() : 수치형 열에 대한 통계 반환
df.corr() : 수치형 열 간의 상관관계 계산. 수치형 열만 따로 빼야한다.
numeric_df = df.select_dtypes(include=[np.number])
numeric_df.corr()
df.agg(['mean', 'std']) : mean, std, sum, min, max 등의 기본 통계 함수와 사용자 정의 함수같은 연산들을 사용하게 해준다. 주로 groupby()와 함께 사용되지만 단독으로 DF나 Series에 적용할 수 있다.
df.dtypes : 각 열의 데이터 타입
df.shape : 행, 열의 개수를 튜플 형태로 반환 ex. (891, 15)
df.columns: DF의 열 이름들을 반환
df.index: DF의 인덱스(행 이름)를 반환 RangeIndex(start=0, stop=891, step=1)
df.isnull().sum(): 각 열의 null 값 개수 반환
df['column_name'].value_counts() : DF 각 열에 대해 고유한 값들의 빈도를 반환.
df['column_name'].unique(): 특정 열의 고유한 값들을 반환
df['column_name'].nunique(): 특정 열의 고유한 값의 개수를 반환
numeric_columns = df.select_dtypes(include=['float64', 'int64']).columns
for col in numeric_columns:
plt.figure(figsize=(12, 5))
sns.boxplot(hue='survived', x=col, data=df)
plt.xlabel(col)
plt.ylabel('Value')
plt.title(f'Boxplot of {col} by survived')
plt.show()
numeric_columns = df.select_dtypes(include=['float64', 'int64']).columns
for col in numeric_columns:
plt.figure(figsize=(30, 7))
sns.countplot(hue='survived', x=col, data=df)
plt.title(f'Countplot of {col} by survived')
plt.show()
agg_stats = df.select_dtypes(include='number').agg(['mean', 'std'])
agg_stats.T.plot(kind='bar', yerr=agg_stats.loc['std'], capsize=4)
plt.title('Mean and Standard Deviation of Titanic Dataset Numeric Columns')
plt.ylabel('Values')
plt.xticks(rotation=45)
plt.legend(title='Statistics')
plt.tight_layout()
plt.show()
NCF(neural CF) 2018
CF를 NN으로 구현.
inner product(선형 결합)만으로는 한계가 있는 Matrix Factorization을
NN을 통해 Non-linear성을 부여해 user와 item의 관계를 좀 더 복잡하게 표현
ALS와 마찬가지로 Implicit Feedback에 집중함
NGCF(neural graph CF)
NCF로도 부족한 user-item의 관계를 graph structure로 표현.
유저와 아이템의 관계를 graph로 여러번 얽힌 걸로 표현해 embedding을 계속 update
LightGCN
NGCF가 임베딩 벡터를 업데이트하는 과정이 너무 과해서 simplify
현실 세계의 user-item 관계는 그렇게 안복잡하고 단순하다면서 간단한 모델을 주장
불필요한 로직을 제거해 neighborhood aggregation만 넣어 모델을 경량화
간소화한 모델이지만 성능이 더 좋음.
AutoEncoder를 사용해 Latent vector 추출해 CF 로직 적용