여러 테이블을 조인하여 로딩하기

pandas로 빠르고 간편한 데이터 적재

Amany Mahfouz

Instructor

키

  • 데이터베이스 레코드는 고유 식별자(키)를 가짐

311 신고 데이터, unique_key 열이 강조됨. 고유 키는 숫자입니다.

pandas로 빠르고 간편한 데이터 적재

키

  • 데이터베이스 레코드는 고유 식별자(키)를 가짐

강의 목록 데이터, course_code 열이 강조됨. 코드는 과목 약어와 숫자로 구성됩니다.

pandas로 빠르고 간편한 데이터 적재

키

  • 데이터베이스 레코드는 고유 식별자(키)를 가짐

강의 목록 데이터, instructor_id 열이 강조됨. 값은 9자리 정수입니다.

pandas로 빠르고 간편한 데이터 적재

키

교수 테이블, id 열이 강조됨. 값은 강의 목록의 instructor_id와 같은 9자리 정수입니다.

pandas로 빠르고 간편한 데이터 적재

키

강의 목록 데이터에 교수 이름 열이 조인됨

pandas로 빠르고 간편한 데이터 적재

테이블 조인

날씨 데이터, date 열이 강조됨

311 신고 데이터, created_date 열이 강조됨

pandas로 빠르고 간편한 데이터 적재

테이블 조인

SELECT *
  FROM hpd311calls
pandas로 빠르고 간편한 데이터 적재

테이블 조인

SELECT *
  FROM hpd311calls
       JOIN weather 
       ON hpd311calls.created_date = weather.date;
  • 여러 테이블은 점 표기법(table.column)을 사용
  • 기본 조인은 양쪽 테이블에 모두 있는 키만 반환
  • 조인 키의 데이터 타입이 같아야 매칭됨
pandas로 빠르고 간편한 데이터 적재

조인과 필터링

/* 난방/온수 신고만 가져오고 날씨 데이터 조인 */
SELECT *
  FROM hpd311calls
       JOIN weather 
       ON hpd311calls.created_date = weather.date
 WHERE hpd311calls.complaint_type = 'HEAT/HOT WATER';
pandas로 빠르고 간편한 데이터 적재

조인과 집계

/* 자치구별 신고 건수 구하기 */
SELECT hpd311calls.borough, 
         COUNT(*)
  FROM hpd311calls
 GROUP BY hpd311calls.borough;
pandas로 빠르고 간편한 데이터 적재

조인과 집계

/* 자치구별 신고 건수에
   인구수와 주택 수 조인 */
SELECT hpd311calls.borough, 
       COUNT(*), 
       boro_census.total_population,
       boro_census.housing_units
  FROM hpd311calls
 GROUP BY hpd311calls.borough
pandas로 빠르고 간편한 데이터 적재

조인과 집계

/* 자치구별 신고 건수에
   인구수와 주택 수 조인 */
SELECT hpd311calls.borough, 
       COUNT(*), 
       boro_census.total_population,
       boro_census.housing_units
  FROM hpd311calls
       JOIN boro_census 
       ON hpd311calls.borough = boro_census.borough
 GROUP BY hpd311calls.borough;
pandas로 빠르고 간편한 데이터 적재
query = """SELECT hpd311calls.borough, 
                    COUNT(*), 
                    boro_census.total_population,
                    boro_census.housing_units
             FROM hpd311calls
                  JOIN boro_census 
                  ON hpd311calls.borough = boro_census.borough
            GROUP BY hpd311calls.borough;"""

call_counts = pd.read_sql(query, engine)
print(call_counts)
         borough  COUNT(*)  total_population  housing_units
0          BRONX     29874           1455846         524488
1       BROOKLYN     31722           2635121        1028383
2      MANHATTAN     20196           1653877         872645
3         QUEENS     11384           2339280         850422
4  STATEN ISLAND      1322            475948         179179
pandas로 빠르고 간편한 데이터 적재

복습

  • SQL 키워드 순서
    • SELECT
    • FROM
    • JOIN
    • WHERE
    • GROUP BY
pandas로 빠르고 간편한 데이터 적재

연습해 봅시다!

pandas로 빠르고 간편한 데이터 적재

Preparing Video For Download...