[Spark] 02. Pyspark 예제 데이터로 기초 실습(feat. EDA)

2025. 9. 8. 23:03·데이터분석/04. Apach Spark

오랜만에 하루 2개 포스트를 작성할려니 쉽지 않지만...기록하는 습관을 다시 찾아야 하기 때문에 힘들어도 올려보자!

❓ 기초 실습 개요


1️⃣ 환경 구축

실습환경은 간단하다. Docker에 jupyter/pyspark-notebook 이미지를 띄우고, JupyterLab 환경에서 Pyspark를 실행하는 방식으로 진행했다. 

  • docker-compose.yml 파일 생성하고, 포트 매핑과 데이터가 저장된 디렉토리를 마운트 설정해줬다.

yaml 파일은 gpt에게 volume이 마운트될 경로만 알려주면 착하게 다 작성해준다^^

  • JupyterLab 접속, 새로운 노트북 생성, SparkSession을 생성해준다.
  • Pandas만 사용하던 때와 다르게, Spark는 SparkSession 이라는 객체를 통해 읽고 처리한다.

나도 잘 몰랐는데, docker "logs" jupyte-pyspark <- 이처럼 logs를 써야 로그 출력 결과를 확인할 수 있다고 한다.
spark 세션을 생성해서 확인해본 결과 잘 생성되었다


2️⃣ 데이터 불러오기

이번 실습에 사용된 데이터셋은 총 두 개의 데이터를 사용했다.

1. MovieLens datasets

  • 데이터셋 출처 : GroupLens 연구팀
  • 데이터셋 내용 : 영화 추천 시스템 연구를 위해 수집된 데이터셋
  • 구성 (ml-latest-small 기준, 약 100,000 ratings)
    • movies.csv : 영화 ID, 제목, 장르
    • ratings.csv : 사용자 ID, 영화 ID, 평점(0.5~5.0), 타임스탬프
  • Docker 컨테이너 안에서 다운로드 진행
# MovieLens "small" 데이터셋 다운로드 (약 1MB)
curl -L -o data/ml-latest-small.zip https://files.grouplens.org/datasets/movielens/ml-latest-small.zip

# 압축 해제
unzip -o data/ml-latest-small.zip -d data/

2. NYC Taxi datasets

  • 데이터셋 출처 : https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page
 

TLC Trip Record Data - TLC

TLC Trip Record Data Yellow and green taxi trip records include fields capturing pickup and drop-off dates/times, pickup and drop-off locations, trip distances, itemized fares, rate types, payment types, and driver-reported passenger counts. The data used

www.nyc.gov

  • 데이터셋 내용 : 뉴욕시에서 운행하는 Yellow Taxi, Green Taxi, For-Hire Vehicle(FHV, 우버·리프트 등) 기록
  • 구성 :
    • Pickup/Drop-off 시각
    • 위치 ID (픽업·하차 Zone)
    • 운행 거리 (trip_distance)
    • 승객 수 (passenger_count)
    • 요금 세부 항목 (기본요금, MTA tax, tip_amount, tolls_amount, congestion_surcharge, etc.)
    • 총 요금 (total_amount) 등
  • 직접 웹 페이지에 접속 후 parquet 파일 다운로드

green taxi trip records 데이터를 사용했다


3️⃣ MovieLens 평균 평점 확인하기

먼저 데이터를 불러오고 5개 데이터만 확인해보자

  • movies는 movieId 와 title, genres(장르) 가 있고, ratings 는 userId, movieId, rating, timestamp 컬럼이 존재한다.
  • 가장 먼저 할 수 있는건 movieId를 기준으로 두 테이블을 조인해서 영화별 평균 평점을 확인 후 평점 상위 10개 타이틀 확인? 정도는 쉽게 할 수 있어보인다.

✅ 평점 상위10 영화 정보 확인하기

  • pandas에서 사용했던 집계함수들을 pyspark에서는 functions에서 불러와줘야 한다. (ex. avg, count, sum, round 등)
  • groupBy("movieId") : 영화 제목을 기준으로 그룹화
  • count("*").alias("n") : 그룹화 된 데이터들의 개수를 카운트하고 별칭으로 "n"을 붙여줌
  • round(avg(col("rating").cast("double")), 3).alias("avg_ratings") : rating 문자열 컬럼을 수치형으로 변환, 평균을 계산하고 반올림해서 소수점 3자리까지 표현하고 별칭은 "avg_ratings"로 설정
  • agg.join(movies, "movieId") : 위에서 집계한 데이터와 movies 데이터를 movieId 기준으로 조인

4️⃣ NYC Taxi 데이터 분석하기

컬럼이 너무 많아서 데이터의 스키마 형태를 먼저 파악해보기로 했다.

음...너무 많아서 중요한건만 설명하자

  • lpep_pickup_datetime : 승객이 탑승한 날짜&시간
  • lpep_dropoff_datetime : 승객이 하차한 날짜&시간
  • fare_amount : 지불금액
  • tip_amount : 팁으로 지불한 금액
  • cbd_congestion_fee : 보스턴의 혼잡구역을 지날 때 추가되는 금액 (오호..미국 택시는 혼잡비용도 받는구나..)

✅ 간단하게 전처리

데이터를 확인해보니 3월 데이터에 2월 데이터가 조금 섞여있다. 2025. 3. 데이터만 필터링하고 시작하자~

컬럼이 너무 많아서..표현하기 어렵다..toPandas로 확인해도 너무 많은 컬럼

✅ 요일별 이용건수, 평균 요금, 평균 팁 금액 확인해보기

  • 1 : 일요일 ~ 7 : 토요일 순서로 보면 된다.
  • 일요일이 이용 건 수가 가장 적으며, 월요일에 가장 많은 것을 보니 대부분 월요일에는 피곤해서 택시를 타고 출근해서 그럴 것 같다.

✅ 시간대별로 집계해보기

  • 평균 요금(Avg Fare) : 밤 ~ 새벽6시까지 높은 금액이 결제되었는데, 이는 대중교통이 운행을 안하는 시간대라서 택시를 타고 멀리 이동하다보니 평균 요금이 높게 분포되었다고 볼 수 있다.
  • 이용 건수(Trips) : 당연히 새벽시간대에 낮게 분포되고, 출근시간대부터 급격히 증가하다가 17시 이후부터 감소하는 경향이 있다.
  • 평균 팁(Avg Tip) : 세 개의 데이터를 하나의 그래프에 표현하다보니 차이를 확인하기 어렵지만, 그래도 분석해본다면 새벽시간대에 팁 금액이 높아진다. 아무래도 야간주행&장거리 이동이 있을 수 있어서 팁 금액을 높게 지불하는 것 같다.

✅ 일자별로 집계하기

  • 주말에는 확연하게 떨어지는 이용건수 패턴을 볼 수 있다. 
  • 주말일때 평균 지불 요금이 높은 경향을 볼 수 있는데, 아무래도 주말이라는 특수성으로 인해 높은 금액을 받는 것 같다.

기회가 있다면 PySpark 기초를 한번 더 포스트해봐야겠다.. 처음 해보는데 Pandas랑 비슷하다보니 은근 재밌다..

'데이터분석 > 04. Apach Spark' 카테고리의 다른 글

[Spark] 06. PySpark로 Linear Regression(선형회귀) 모델 만들기  (0) 2025.09.12
[Spark] 05. PySpark DataFrame 기초 연습  (0) 2025.09.12
[Spark] 04. Ubuntu에 python, jupyter notebook, spark 설치해보기  (0) 2025.09.10
[Spark] 03. 맥북 M1에 UTM으로 우분투 arm64 설치하기  (1) 2025.09.09
[Spark] 01. GFS와 하둡, 스파크까지 데이터 처리 기술 흐름  (0) 2025.09.08
'데이터분석/04. Apach Spark' 카테고리의 다른 글
  • [Spark] 05. PySpark DataFrame 기초 연습
  • [Spark] 04. Ubuntu에 python, jupyter notebook, spark 설치해보기
  • [Spark] 03. 맥북 M1에 UTM으로 우분투 arm64 설치하기
  • [Spark] 01. GFS와 하둡, 스파크까지 데이터 처리 기술 흐름
dalleeoppaa
dalleeoppaa
DA, GIS 공부 기록
  • dalleeoppaa
    달래오빠
    dalleeoppaa
  • 전체
    오늘
    어제
    • 분류 전체보기 (112) N
      • GIS (22)
        • 01. GIS TIL (13)
        • 02. OpenSource Geo Data (6)
        • 03.사이드 프로젝트 (1)
      • 프로젝트 (6)
        • 01. 상권분석 지도 (3)
        • 02. olist 고객 RFM 분석 (3)
      • PointCloud (1)
      • 프로그래밍 언어 (57) N
        • 01. Python (1)
        • 02. SQL (49)
        • 03. C++ (3) N
        • 04. TIL (4)
      • 데이터분석 (23)
        • 01. Google Cloud Platform (1)
        • 02. GA4 & GTM (1)
        • 03. LookerStudio (4)
        • 04. Apach Spark (7)
        • 05. 데이터 시각화 (10)
      • 인턴 (2)
        • 01. NPL (2)
        • 02. TIL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스SQL
    sql코테
    프로그래머스코테
    태블로연습
    태블로신병훈련소
    데이터분석취준
    PostgreSQL
    c++독학
    데이터분석
    태블로부트캠프
    코딩테스트
    solvesql
    데이터분석가코테
    postgresql연습
    GIS
    프로그래머스
    SQL
    MySQL
    프로그래머스lv3
    데이터분석가
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
dalleeoppaa
[Spark] 02. Pyspark 예제 데이터로 기초 실습(feat. EDA)
상단으로

티스토리툴바