본문 바로가기
카테고리 없음

[AI] Kaggle 데이터로 데이터 분석하기_ Student's Academic Performance Dataset

by Foxy현 2023. 6. 17.
728x90
반응형

안녕하세요!

23년 6월 24일에 있을 빅데이터 분석기사 실기를 준비하면서 준비를 해도 불안함 마음으로 더 많은 자료를 찾는 분들이 있으실 텐데요

 

조금이라도 도움이 되고자 Kaggle 데이터를 활용해서 작업형 2 유형을 다뤄보겠습니다!

 

Kaggle 입문자들에게도 좋을 것 같네요

 

https://www.kaggle.com/datasets/aljarah/xAPI-Edu-Data

 

Students' Academic Performance Dataset

xAPI-Educational Mining Dataset

www.kaggle.com

 

데이터는 오른쪽 상단에서 Copy API command를 통해 가져오실 수 있습니다

이후 다음처럼 발급받은 username과 key를 입력하도록 하겠습니다

os.environ['KAGGLE_USERNAME'] = 'sihyunlee9604'
os.environ['KAGGLE_KEY'] = 'kaggle_key'

 

또 아래 명령어를 통해 데이터를 받아오겠습니다

참고로 캐글을 통해 진행하였습니다

 

!kaggle datasets download -d aljarah/xAPI-Edu-Data
!unzip '*.zip'

df = pd.read_csv('xAPI-Edu-Data.csv')
df.head()

* 데이터 전처리

 

 범주형 데이터를 처리하기 위해 데이터를 원핫인코딩 해주겠습니다

이때 결과인 Class 속성은 y로 지정하고, 결함이 많은 데이터는 제거하였습니다

X = pd.get_dummies(df.drop(['ParentschoolSatisfaction','Class'],axis=1), 
                   columns = ['gender', 'NationalITy', 'PlaceofBirth', 'StageID', 'GradeID',
       'SectionID', 'Topic', 'Semester', 'Relation', 
       'ParentAnsweringSurvey','StudentAbsenceDays'], drop_first=True)
y = df['Class']

다음으로 데이터를 학습 데이터 / 테스트 데이터로 분류해주겠습니다

 

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.3, random_state=4234)

 

* 모델 학습 및 평가

 

먼저 RogisticRegression으로 분류를 해보겠습니다

 

from sklearn.linear_model import LogisticRegression

model_lr = LogisticRegression(max_iter = 10000)
model_lr.fit(X_train, y_train)

from sklearn.metrics import classification_report
pred = model_lr.predict(X_test)
print(classification_report(y_test, pred))

속성들이 모델에 기여한 정도를 보겠습니다

 

fig = plt.figure(figsize=(15,6))
plt.bar(X.columns, model_lr.coef_[0,:])
plt.xticks(rotation=90)
plt.show()

마지막 컬럼이 가장 기여를 많이하는 것을 볼 수 있겠네요

 

다음으로 RandomForestClassifier를 이용한 분류를 해보겠습니다

 

from sklearn.ensemble import RandomForestClassifier
model_rf = RandomForestClassifier()
model_rf.fit(X_train, y_train)
pred = model_rf.predict(X_test)
print(classification_report(y_test, pred))

 

마찬가지로 Feature Importance를 확인하겠습니다

 

fig = plt.figure(figsize=(15,6))
plt.bar(X.columns, model_rf.feature_importances_)
plt.xticks(rotation=90)
plt.show()

 

이번에는 꽤 많은 컬럼들이 크게 기여를 했네요

 

감사합니다!

 

 

 

 

 

 

728x90
반응형