[DATA-001][입문] 정형·반정형·비정형 데이터 구분하기 > IT 기술 공유

본문 바로가기

사이트 내 전체검색

뒤로가기 IT 기술 공유

[DATA-001][입문] 정형·반정형·비정형 데이터 구분하기

페이지 정보

작성자 기술팀장 작성일 26-08-29 08:33 조회 265 댓글 0

본문

[이번 수업]
데이터를 저장하거나 분석하려면 먼저 모양을 살펴야 합니다. 이번에는 같은 정보를 정형 데이터, 반정형 데이터, 비정형 데이터로 표현해 보고 차이를 구분합니다.

[선수지식]
폴더와 파일을 만들고 터미널에서 Python을 실행할 수 있으면 충분합니다. JSON을 처음 보아도 따라올 수 있습니다.

[학습목표]
1. 세 가지 데이터 모양을 자신의 말로 설명한다.
2. 표, JSON, 자유 문장을 보고 알맞게 분류한다.
3. 데이터 모양에 맞는 저장·검증 방법을 선택한다.

[핵심개념]
정형 데이터는 열 이름과 자료형처럼 미리 정한 스키마(schema, 데이터의 설계도)에 맞춰 각 레코드가 같은 모양을 갖는 데이터입니다. 관계형 데이터베이스의 행과 열이 대표적입니다. CSV도 열 규칙과 자료형을 별도로 정해 지킬 때 정형 데이터로 다루기 쉽지만, CSV 파일 자체가 자료형까지 강제하는 것은 아닙니다.

반정형 데이터는 고정된 표 모양은 아니어도 키, 태그, 계층 같은 표식을 포함합니다. JSON과 XML이 대표적입니다. 항목마다 선택 필드나 중첩 구조가 달라도 키를 따라 값을 찾을 수 있습니다.

비정형 데이터는 업무용 열과 행처럼 미리 정한 모델이 없는 자유 문장, 이미지, 음성, 영상 등입니다. ‘아무 구조도 없다’거나 ‘쓸모없다’는 뜻은 아닙니다. 이미지 파일에도 포맷과 메타데이터가 있고 문장에도 문법이 있지만, 원하는 의미를 바로 열 하나로 꺼내기 어렵다는 뜻에 가깝습니다.

같은 고객 정보도 테이블의 한 행, JSON 문서, 상담 메모로 표현할 수 있습니다. 따라서 확장자보다 실제 규칙을 봐야 합니다. 저장 전에 모양을 엄격히 맞추는 방식을 스키마 온 라이트(schema-on-write), 읽고 분석할 때 구조를 해석하는 방식을 스키마 온 리드(schema-on-read)라고 부릅니다.

[따라하기]
아래를 data_shapes.py로 저장합니다. 외부 패키지는 필요 없습니다.

import json

columns = ("id", "name", "score")
structured_row = (1, "민수", 90)
semi_text = '''
{
  "id": 1,
  "name": "민수",
  "skills": ["Python", "SQL"],
  "profile": {"language": "ko"}
}
'''
semi = json.loads(semi_text)
unstructured = "민수는 데이터 분석을 공부하고 있습니다."

print("structured:", dict(zip(columns, structured_row)))
print("semi-structured keys:", sorted(semi.keys()))
print("unstructured words:", len(unstructured.split()))

Windows에서는 py data_shapes.py, macOS와 Linux에서는 python3 data_shapes.py를 실행합니다. 예상 결과는 다음과 같습니다.

structured: {'id': 1, 'name': '민수', 'score': 90}
semi-structured keys: ['id', 'name', 'profile', 'skills']
unstructured words: 5

첫 번째 값은 정해 둔 열과 한 행을 연결했습니다. 두 번째는 JSON의 키를 발견했습니다. 세 번째는 자유 문장을 단순히 공백으로 나눴을 뿐이므로, 정확한 의미 분석과는 다릅니다.

[흔한 실수]
JSON을 무조건 비정형으로 부르거나 CSV를 무조건 완전한 정형 데이터라고 단정하지 마세요. 실제로 스키마가 정의되고 지켜지는지가 중요합니다. 비정형 데이터도 파일 형식과 메타데이터는 가질 수 있습니다. 또한 숫자 10과 문자열 "10"은 같아 보여도 자료형이 다르므로 수집 단계에서 통일해야 합니다.

[보안 주의]
외부에서 받은 JSON·CSV는 신뢰하지 말고 크기, 문자 인코딩, 필수 필드, 값의 범위를 검사하세요. 안전한 표준 파서를 사용하고 데이터 내용을 코드나 명령으로 실행하지 마세요. CSV를 스프레드시트로 열 때 일부 셀이 수식으로 해석될 수 있으므로 출처를 확인하고 자동 실행 기능을 끄는 것이 안전합니다. 이름·이메일 같은 개인정보는 꼭 필요한 항목만 수집하고 접근 권한과 보관 기간을 제한하세요. 실습은 본인이 만든 로컬 파일로만 진행합니다.

[직접 해볼 과제]
도서 정보를 제목·저자·태그로 정하고 ① 표의 한 행 ② JSON 객체 ③ 두 문장짜리 소개글로 각각 표현하세요. 각 표현에서 제목을 찾는 방법과 누락을 검사하는 방법을 한 줄씩 적어 보세요. 그다음 JSON에서 태그를 하나 빼도 프로그램이 동작하도록 get 메서드를 사용해 보세요.

[확인문제]
1. 정형 데이터를 판단할 때 확장자보다 먼저 확인할 것은 무엇인가요?
2. JSON이 반정형 데이터로 불리는 이유는 무엇인가요?
3. 자유 문장이 비정형 데이터여도 가질 수 있는 구조나 정보에는 무엇이 있나요?

[다음 학습]
순환 커리큘럼의 다음 수업은 SWE-001 ‘요구사항을 작은 기능으로 나누기’입니다. 데이터 트랙에서는 DATA-002 ‘CSV·JSON·Parquet과 스키마’에서 파일 형식과 스키마를 더 구체적으로 비교합니다.

[공식 참고 자료]
NIST Big Data Interoperability Framework Volume 1: Definitions
https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.1500-1r1.pdf
RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format
https://www.rfc-editor.org/rfc/rfc8259.html
Python json 모듈
https://docs.python.org/3/library/json.html
Python csv 모듈
https://docs.python.org/3/library/csv.html

댓글목록 0

등록된 댓글이 없습니다.

Copyright © 소유하신 도메인. All rights reserved.

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

PC 버전으로 보기