SQL 입문자를 위한 가이드: 학생 데이터로 배우는 분석

0
post-thumbnail

🐘 SQL Basics & Mental Health Analysis of International Students (DataCamp Project)

이번 포스팅에서는 SQL의 기본 개념을 간단하게 살펴보고, DataCamp에서 제공한 students 데이터셋을 이용해 체류 기간(stay)국제 학생(Inter)의 정신 건강 점수에 어떤 영향을 미치는지 분석해봅니다.


✅ 1. SQL이란?

🔹 SQL (Structured Query Language)

SQL은 데이터베이스(DB)와 대화하는 언어입니다.
관계형 데이터베이스(RDBMS)에서 데이터를:

  • 조회(SELECT)
  • 삽입(INSERT)
  • 수정(UPDATE)
  • 삭제(DELETE)

할 때 사용됩니다.

SQL은 데이터 분석뿐만 아니라, 실제 기업에서도 가장 널리 사용되는 데이터 처리 언어입니다.


✅ 2. SQL 기본 문법 요소

  1. SELECT → 어떤 데이터를 가져올지 지정
  2. FROM → 데이터를 가져올 테이블 지정
  3. WHERE → 조건에 맞는 데이터만 필터링
  4. GROUP BY → 데이터를 그룹별로 묶어 집계
  5. HAVING → 그룹화된 데이터에 조건 적용
  6. ORDER BY → 결과를 정렬 (ASC: 오름차순, DESC: 내림차순)
  7. AS (Alias) → 컬럼이나 테이블에 별칭 부여

✅ 3. students 데이터셋 살펴보기

분석에 사용할 students 테이블은 국제 학생과 국내 학생의 정신 건강 지표를 담고 있습니다.

Field NameDescription
inter_dom학생 유형 (국제학생 Inter / 국내학생 Dom)
japanese_cate일본어 숙련도
english_cate영어 숙련도
academic학위 수준 (학부/대학원)
age나이
stay체류 기간(년)
todep우울 점수 (PHQ-9)
tosc사회적 연결감 점수 (SCS)
toas문화적 스트레스 점수 (ASISS)

✅ 4. 데이터 확인하기

먼저, 테이블 구조와 일부 데이터를 확인합니다.

SELECT * 
FROM students;

🔹 이 쿼리는 모든 컬럼과 행을 보여줍니다.
실전에서는 필요한 컬럼만 조회하는 것이 더 효율적입니다.


✅ 5. 분석 목표

문제에서 요구하는 분석은 다음과 같습니다:

  • 국제 학생(inter_dom = 'Inter')만 분석
  • 체류 기간(stay)별로 그룹화
  • **우울 점수(PHQ-9), 사회적 연결감(SCS), 문화적 스트레스(ASISS)**의 평균 계산
  • 각 그룹의 학생 수 집계
  • 결과를 **체류 기간 내림차순(DESC)**으로 정렬

✅ 6. SQL 쿼리 작성

SELECT 
    stay, 
    COUNT(*) AS count_int, 
    ROUND(AVG(todep), 2) AS average_phq, 
    ROUND(AVG(tosc), 2) AS average_scs, 
    ROUND(AVG(toas), 2) AS average_as
FROM students
WHERE inter_dom = 'Inter'          -- 국제 학생만 필터링
GROUP BY stay
ORDER BY stay DESC;                -- 체류 기간 내림차순 정렬

✅ 7. 쿼리 해설

  • COUNT(*) AS count_int → 체류 기간별 학생 수 집계
  • ROUND(AVG(todep), 2) → PHQ-9 평균 (소수점 둘째 자리)
  • ROUND(AVG(tosc), 2) → SCS 평균
  • ROUND(AVG(toas), 2) → ASISS 평균
  • WHERE inter_dom = 'Inter' → 국제 학생만 선택
  • GROUP BY stay → 체류 기간별 그룹화
  • ORDER BY stay DESC → 체류 기간이 긴 순으로 정렬

✅ 8. 실행 결과 (예상)

staycount_intaverage_phqaverage_scsaverage_as
10125.5042.3033.10
986.1040.2034.00
...............

✔️ 결과는 약 9개의 행과 5개의 열을 반환합니다.


✅ 9. Pandas 버전 (CSV 기반 분석)

SQL 없이도 Pandas를 이용하면 CSV 파일에서 같은 분석을 할 수 있습니다.
다음 코드를 Colab 또는 로컬에서 실행해보세요.

import pandas as pd

# CSV 파일 로드
df = pd.read_csv("datalab_export_2025-08-03 13_33_54.csv")

# 국제 학생만 필터링
df_inter = df[df['inter_dom'] == 'Inter']

# 그룹화 및 집계
result = (
    df_inter
    .groupby('stay')
    .agg(
        count_int=('stay', 'count'),
        average_phq=('todep', lambda x: round(x.mean(), 2)),
        average_scs=('tosc', lambda x: round(x.mean(), 2)),
        average_as=('toas', lambda x: round(x.mean(), 2)),
    )
    .reset_index()
    .sort_values('stay', ascending=False)
)

# 결과 확인
import ace_tools as tools
tools.display_dataframe_to_user(name="Stay vs Mental Health Scores", dataframe=result)

🐼 Pandas는 서버 없이도 손쉽게 데이터 분석을 할 수 있습니다.


✅ 10. psycopg2 버전 (PostgreSQL 서버 필요)

PostgreSQL 서버가 있다면 psycopg2 라이브러리로 동일한 SQL을 실행할 수 있습니다.

import psycopg2
import pandas as pd

# PostgreSQL 연결 설정
conn = psycopg2.connect(
    dbname="your_database",
    user="your_username",
    password="your_password",
    host="your_host",
    port="5432"
)

# SQL 쿼리
query = """
SELECT 
    stay, 
    COUNT(*) AS count_int, 
    ROUND(AVG(todep), 2) AS average_phq, 
    ROUND(AVG(tosc), 2) AS average_scs, 
    ROUND(AVG(toas), 2) AS average_as
FROM students
WHERE inter_dom = 'Inter'
GROUP BY stay
ORDER BY stay DESC;
"""

# 결과를 Pandas DataFrame으로 불러오기
df_sql = pd.read_sql(query, conn)

# 연결 종료
conn.close()

# 결과 확인
tools.display_dataframe_to_user(name="SQL Query Result from PostgreSQL", dataframe=df_sql)

🐘 psycopg2는 실제 DB 서버에서 SQL을 실행할 때 사용됩니다.


🔥 정리

방법장점단점
Pandas서버 없이 CSV만으로도 분석 가능대용량 데이터 처리 시 느림
psycopg2실전 환경과 동일, DB 직접 쿼리 가능PostgreSQL 서버 필요

🎯 마무리

이번 포스팅에서 배운 것:

  • SQL 기본 문법 (SELECT, WHERE, GROUP BY, ORDER BY)
  • 집계 함수 (AVG, COUNT)와 데이터 반올림 (ROUND)
  • Pandas와 psycopg2를 이용한 두 가지 접근 방식

SQL은 데이터 분석의 기본이자 강력한 도구입니다.
이 예제를 통해 데이터 필터링, 그룹화, 집계를 쉽게 연습할 수 있었습니다.


0개의 댓글