강의자료 목록으로

python 기초 문법 + duckdb 활용

python 기초 문법 + duckdb 활용

Python을 활용한 기초통계 분석

수업자료 : https://hohoho3060.notion.site/python-35deb25dbab280cf952ede42ab26c55d?source=copy_link

1. Python 분석 환경

Python은 데이터 분석을 위한 프로그래밍 언어이고, VS Code는 Python 코드를 작성하고 실행하는 작업 공간이다.

수업에서 사용할 기본 도구는 다음과 같다.

필요한 패키지는 터미널에서 다음과 같이 설치할 수 있다.

pip install pandas numpy matplotlib duckdb jupyter

2. Jupyter Notebook과 .py 파일의 차이

Python 코드는 주로 두 가지 방식으로 실행할 수 있다.

첫째, Jupyter Notebook 파일인 .ipynb로 실행할 수 있다.

둘째, 일반 Python 스크립트 파일인 .py로 실행할 수 있다.

Jupyter Notebook에서는 셀 단위로 실행한다.

import pandas as pd df = pd.read_csv(r"C:\Users\user\Dropbox\ai_lecture\output\hccp\hccp_worker_2023_selected.csv") df.head()

.py 파일에서는 보통 전체 파일을 한 번에 실행하며, 결과를 보려면 print()를 자주 사용한다.

import pandas as pd df = pd.read_csv(r"C:\Users\user\Dropbox\ai_lecture\output\hccp\hccp_worker_2023_selected.csv") print(df.head())

3. python 패키지

사회과학 데이터 분석에서는 보통 Pandas를 중심으로 데이터를 다루고, 내부적인 수치 계산에서 NumPy가 함께 활용된다.

4. Pandas 시작하기

Pandas는 보통 pd라는 이름으로 불러온다.

import pandas as pd

4.1 Series

Series는 하나의 변수 또는 하나의 열을 의미한다.

예를 들어 응답자의 연령, 소득, 직무만족도 같은 변수 하나가 Series에 해당한다.

income = pd.Series([3000, 4200, 5100, 3900]) print(income)

4.2 DataFrame

DataFrame은 여러 개의 변수가 모인 표 형태의 데이터이다.

df_sample = pd.DataFrame({ "gender": [1, 2, 1, 2], "annual_income_10k_krw": [3000, 4200, 5100, 3900], "overall_job_satisfaction": [3, 4, 5, 3] }) print(df_sample)

사회과학 조사자료에서 DataFrame은 설문 응답 데이터 전체에 해당한다.

5. HCCP 근로자 데이터 불러오기

이번 수업에서는 다음 CSV 파일을 사용한다.

C:\Users\user\Dropbox\ai_lecture\output\hccp\hccp_worker_2023_selected.csv

Windows 경로를 Python 문자열로 사용할 때는 앞에 r을 붙이면 편리하다.

이를 raw string이라고 하며, 역슬래시 \를 경로 구분자로 그대로 사용할 수 있게 해준다.

import pandas as pd file_path = r"C:\Users\user\Dropbox\ai_lecture\output\hccp\hccp_worker_2023_selected.csv" df = pd.read_csv(file_path)

데이터를 불러온 뒤에는 먼저 구조를 확인한다.

df.head()

df.info()

df.shape

df.columns

각 코드의 의미는 다음과 같다.

6. 주요 변수 예시

이번 자료에서 수업 예제로 활용하기 좋은 변수는 다음과 같다.

7. 기초통계 분석

7.1 전체 요약통계

숫자형 변수의 기초통계를 한 번에 확인할 수 있다.

df.describe()

특정 변수만 보고 싶을 때는 다음과 같이 작성한다.

df["annual_income_10k_krw"].describe()

7.2 평균, 중앙값, 표준편차

df["annual_income_10k_krw"].mean()

df["annual_income_10k_krw"].median()

df["annual_income_10k_krw"].std()

df["annual_income_10k_krw"].min()

df["annual_income_10k_krw"].max()

각 통계량의 의미는 다음과 같다.

7.3 여러 변수의 요약통계

df[["annual_income_10k_krw", "regular_work_hours", "overall_job_satisfaction"]].describe()

8. 범주형 변수

사회과학 자료에서는 성별, 학력, 혼인상태처럼 범주형 변수를 자주 다룬다.

빈도표는 value_counts()로 확인한다.

df["gender"].value_counts()

비율을 함께 보고 싶을 때는 normalize=True를 사용한다.

df["gender"].value_counts(normalize=True)

결측치를 포함해 확인하고 싶을 때는 dropna=False를 사용한다.

df["education_level"].value_counts(dropna=False)

9. agg()로 여러 통계량 한 번에 계산하기

agg()는 aggregate의 줄임말이다.

여러 통계량을 한 번에 계산할 때 사용한다.

df["annual_income_10k_krw"].agg(["count", "mean", "median", "std", "min", "max"])

여러 변수에 대해서도 사용할 수 있다.

df[["annual_income_10k_krw", "regular_work_hours", "overall_job_satisfaction"]].agg( ["count", "mean", "median", "std", "min", "max"] )

해석할 때는 다음 질문을 던질 수 있다.

  • 연간 근로소득의 평균과 중앙값은 얼마나 다른가?
  • 주당 정규 근로시간의 분산은 큰 편인가?
  • 직무만족도 평균은 척도의 중간값보다 높은가?
  • 10. groupby()와 agg()로 집단별 기초통계 구하기

    groupby()는 데이터를 특정 집단으로 나누는 기능이다.

    agg()는 각 집단에 대해 어떤 통계량을 계산할지 지정하는 기능이다.

    10.1 성별 평균 소득

    df.groupby("gender")["annual_income_10k_krw"].mean()

    10.2 성별 소득 요약통계

    df.groupby("gender")["annual_income_10k_krw"].agg(["count", "mean", "median", "std"])

    10.3 학력별 직무만족도

    df.groupby("education_level")["overall_job_satisfaction"].agg(["count", "mean", "std"])

    10.4 여러 변수의 집단별 요약

    df.groupby("gender")[["annual_income_10k_krw", "regular_work_hours", "overall_job_satisfaction"]].agg( ["count", "mean", "std"] )

    11. 새로운 변수 만들기

    출생연도에서 연령을 계산할 수 있다.

    HCCP 2023년 자료이므로 기준연도를 2023년으로 둘 수 있다.

    df["age"] = 2023 - df["birth_year"]

    생성한 연령 변수의 기초통계를 확인한다.

    (정확한 나이 계산은 생일이 없어서 확인이 어려움)

    df["age"].describe()

    연령대 변수를 만들 수도 있다.