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

Sue·2025년 8월 3일
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은 데이터 분석의 기본이자 강력한 도구입니다.
이 예제를 통해 데이터 필터링, 그룹화, 집계를 쉽게 연습할 수 있었습니다.


profile
AI/ML Engineer

0개의 댓글