Just Fighting
[EDA] 데이터 내용 살펴보기 본문
728x90
https://kevinprinsloo.medium.com/advanced-eda-e6fea0193dbd
2022.07.17 - [Python] - [EDA] 데이터 정제하기
데이터를 정제한 뒤 완성된 데이터를 이제 살펴보자.
모든 수치형 컬럼의 히스토그램을 한번에 그릴 수 있다.
# 수치형 피쳐의 히스토그램 그리기
df_X.hist(bins=25, figsize=(15, 25), layout=(-1, 5), edgecolor="black")
plt.tight_layout()
각 컬럼마다 가장 많이 나오는 값을 구하고, 그 값의 비율을 구한 뒤
테이블로 시각화를 할 수 있다.
# 각 컬럼에서 가장 많이 나오는 값을 리턴. mode()
most_frequent_entry = df_X.mode()
# mode()를 통해 얻은 값과 같은지 확인 eq()
df_freq = df_X.eq(most_frequent_entry.values, axis=1)
# 같은 값이 얼마나 있는지 비율 확인
df_freq = df_freq.mean().sort_values(ascending=False)
# 상위 5개 출력
display(df_freq.head())
# 테이블 시각화
df_freq.plot.bar(figsize=(15, 4));
시각화를 통해 데이터의 특징을 식별할 수 있다.
아래 4개의 컬럼을 시각화했다.
위에 두 컬럼은 값의 변동이 있는 것으로 보아 연속적인 값을 가진 컬럼이라고 볼 수 있고,
아래 두 컬럼은 이산적인 값을 가지는 컬럼인 것을 확인할 수 있다.
df_X[["Location_Northing_OSGR", "1st_Road_Number",
"Journey_Purpose_of_Driver", "Pedestrian_Crossing-Physical_Facilities"]].plot(
lw=0, marker=".", subplots=True, layout=(-1, 2), markersize=0.1, figsize=(15, 6));
이번에는 연속적인 값을 가지는 컬럼만 필터링해
각 컬럼들 사이에 어떤 관계가 있는지 확인해보자.
# 수치형 컬럼 중에 다른 값이 25개 이상인 컬럼
cols_continuous = df_X.select_dtypes(include="number").nunique() >= 25
# 수치형 컬럼만 따로 추출
df_continuous = df_X[cols_continuous[cols_continuous].index]
df_continuous.shape
sns.pairplot(df_continuous, height=1.5, plot_kws={"s": 2, "alpha": 0.2});
이번엔 3가지의 변수의 관계를 한번에 볼 수 있는 그래프를 그려보자.
y는 Latitude로 고정하고 3개의 변수에 대해 각각의 그래프를 그릴 수 있다.
이 때, hue를 'Police_Force'로 설정하여 변수들 사이에 어떤 관계가 있는지 확인할 수 있다.
(첫번째 그래프가 안그려진다,,,,)
g = sns.pairplot(
df_X, plot_kws={'s': 3, 'alpha': 0.2}, hue='Police_Force', palette='Spectral',
x_vars=['Location_Easting_OSGR', 'Location_Northing_OSGR', 'Longitude'],
y_vars='Latitude');
g.fig.set_size_inches(15,8)
또한, 연속형 컬럼과 범주형 컬럼들의 관계도 그려볼 수 있다.
몇개의 컬럼만 선택해서 그림을 그려보았다.
# 원하는 피쳐만 시각화
selected_features = ["Vehicle_Reference_df_res", "Towing_and_Articulation",
"Skidding_and_Overturning", "Bus_or_Coach_Passenger",
"Pedestrian_Road_Maintenance_Worker", "Age_Band_of_Driver"]
# Create a figure with 3 x 2 subplots
fig, axes = plt.subplots(ncols=3, nrows=2, figsize=(16, 8))
# Loop through these features and plot entries from each feature against `Latitude`
for col, ax in zip(selected_features, axes.ravel()):
sns.stripplot(data=df_X, x=col, y=df_X["Latitude"], ax=ax,
palette="tab10", size=2, alpha=0.5)
plt.tight_layout();
그리고 명목형 변수를 하나 더 추가하여 바이올린 플랏도 그려볼 수 있다.
# Create a figure with 3 x 2 subplots
fig, axes = plt.subplots(ncols=3, nrows=2, figsize=(16, 8))
# Loop through these features and plot entries from each feature against `Latitude`
for col, ax in zip(selected_features, axes.ravel()):
sns.violinplot(data=df_X, x=col, y=df_X["Latitude"], palette="Set2",
split=True, hue="Urban_or_Rural_Area", ax=ax)
plt.tight_layout();
마지막으로 변수들 사이의 상관관계를 알아볼 수 있는 그림을 그려보자.
먼저 상관계수를 구하고, 그것을 표현하면 된다.
# 피어슨 상관계수
df_corr = df_X.corr(method="pearson")
# Create labels for the correlation matrix
labels = np.where(np.abs(df_corr)>0.75, "S",
np.where(np.abs(df_corr)>0.5, "M",
np.where(np.abs(df_corr)>0.25, "W", "")))
# Plot correlation matrix
plt.figure(figsize=(15, 15))
sns.heatmap(df_corr, mask=np.eye(len(df_corr)), square=True,
center=0, annot=labels, fmt='', linewidths=.5,
cmap="vlag", cbar_kws={"shrink": 0.8});
728x90
'Python' 카테고리의 다른 글
datetime 함수 정리 (0) | 2022.10.20 |
---|---|
[Python] Joblib으로 객체 저장하기 (0) | 2022.09.29 |
[EDA] 데이터 정제하기 (0) | 2022.07.17 |
[EDA] 데이터 구조 살펴보기 (0) | 2022.07.17 |
[Flask] API 서버 구축하기 & httpie 사용하기 (0) | 2022.07.01 |
Comments