빅데이터, CSV, 인코딩과 파이썬 모듈·패키지·라이브러리 완벽 정리

Posted by Anonymous and classified in Computers

Written on in English with a size of 9.38 KB

빅데이터란?

빅데이터란 디지털 환경에서 생성되는 모든 데이터, 즉 최근에 얻을 수 있게 된 데이터의 총칭입니다. 많은 양의 데이터가 매우 빠르게 생성되고 있으며 다양한 형태(문자, 영상 등)로 생성되고 있습니다.

빅데이터의 특징 (3V)

  • ① 크기(Volume): 일반적으로 수십 테라바이트 혹은 페타바이트 이상
  • ② 속도(Velocity): 매우 빠른 속도로 생산
  • ③ 다양성(Variety): 문자, 이미지, 영상과 같이 정형/비정형/반정형의 다양한 종류의 데이터

CSV 파일이란?

CSV는 ‘Comma-Separated Values’의 약자로, 각각의 데이터 값을 콤마(,)로 구분하는 파일 형식입니다.

*API란?

서비스 제공자가 소프트웨어 혹은 데이터를 다른 사용자가 효과적으로 활용할 수 있도록 공개하는 서비스입니다.

데이터 파일 형식의 종류

텍스트 기반 (Human-readable)

사람이 직접 열어보면 구조를 어느 정도 읽을 수 있습니다. 호환성이 좋고 단순하지만, 속도와 공간 효율은 떨어집니다.

  • CSV (Comma-Separated Values): ,로 구분된 단순한 텍스트 형식
  • TSV (Tab-Separated Values): 구분자가 탭
  • JSON (JavaScript Object Notation): 중첩 구조 표현에 강하며 웹 API 표준
  • XML: 태그 기반으로 의미론적 구조 표현 가능
  • YAML: JSON보다 가독성이 높은 설정 파일 포맷

바이너리 기반 (Machine-optimized)

사람이 직접 읽기 어렵지만, 저장 공간을 절약하고 읽기/쓰기 속도가 빠릅니다.

왜 CSV를 쓰는가? 지금도 쓰는 이유

  • 단순함: 텍스트 편집기로도 열람과 수정이 가능하며, 그냥 텍스트 파일에 구분자를 더한 형태입니다.
  • 호환성: 엑셀, 파이썬, R, 구글 스프레드시트 등 어디서나 동작하며, 거의 모든 프로그래밍 언어, 데이터베이스, 스프레드시트에서 지원합니다.
  • 인간 친화적: 메모장으로 바로 열어 볼 수 있습니다.
  • 가벼움: 소규모 데이터 교환과 아카이브에 충분합니다.

문자 인코딩의 역사

ASCII 시대 (1960~70년대)

그 시절 컴퓨터는 사실상 “영어 전용”이었습니다. ASCII는 7비트 코드로 총 128개 문자만 표현할 수 있었습니다.

  • 알파벳 26자 × 대소문자, 숫자, 특수문자 몇 개가 전부였습니다.
  • 한국어는 11,172자(“가”부터 “힣”까지)이므로 ASCII로는 표현이 불가능했습니다.
  • 당시 한국 사용자에게 컴퓨터는 “영어를 쓰는 사람만 쓸 수 있는 기계”였습니다.

다국어 인코딩의 등장: EUC (1970~80년대)

컴퓨터가 미국을 넘어 일본, 한국, 중국으로 퍼지면서 문제가 발생했습니다. “자국 언어를 못 쓰면 국민이 컴퓨터를 어떻게 쓰나?”라는 문제였습니다. Unix 진영에서 제안한 해결책이 EUC(Extended Unix Code)입니다.

  • ASCII를 그대로 두고, 영어가 아닌 문자는 2바이트 확장으로 처리했습니다.
  • 일본어는 EUC-JP, 중국어는 EUC-CN, 한국어는 EUC-KR로 나뉩니다.
  • “영어는 1바이트, 한글은 2바이트”라는 규칙으로 한국어 컴퓨터 사용이 가능해졌습니다.

EUC-KR과 KS X 1001 (1980년대)

한국 정부는 “한국어는 한국 사람이 책임지고 표준을 만들어야 한다”는 입장이었고, 1987년 KS C 5601(현 KS X 1001) 문자 집합을 제정했습니다.

  • 당시 메모리와 저장장치가 귀했기 때문에 모든 한글(11,172자)을 담을 수 없었습니다.
  • 자주 쓰이는 2,350자만 완성형으로 수록했습니다.
  • ‘가, 나, 다’ 같은 기본 글자만 가능했고, ‘쀍’, ‘똠’ 같은 글자는 “없는 글자”로 취급되었습니다.

그래서 “EUC-KR은 한국어의 반쪽짜리”라는 농담도 있었습니다.

Windows와 CP949 (1990년대)

마이크로소프트가 Windows를 들고 한국에 들어오면서 EUC-KR만으로는 한국어를 온전히 표현할 수 없다는 문제가 드러났습니다. 이에 CP949(Code Page 949)라는 확장판이 만들어졌습니다.

  • EUC-KR에 없던 글자들, 즉 옛한글, 드문 한자, 현대 한글의 희귀 조합을 추가했습니다.
  • 이제 ‘똠방각하’ 같은 단어도 컴퓨터에서 표현할 수 있게 되었습니다.
  • 1990년대 이후 한국 Windows의 기본 인코딩은 CP949였으며, 워드, 엑셀, 한글 파일, 은행 전산망까지 CP949를 사용했습니다.

이러한 이유로 오늘날에도 CSV 파일을 열 때 encoding='cp949'를 지정해야 하는 경우가 있습니다.

유니코드와 UTF-8의 혁명 (2000년대 이후)

나라별 인코딩이 제각각이라는 문제가 있었습니다. 한국 파일을 미국에서 열면 깨지고, 일본 파일을 중국에서 열면 깨졌습니다. 전 세계가 문자 깨짐(mojibake)에 시달렸고, 이를 해결하기 위해 국제 표준 유니코드(Unicode)가 등장했습니다. 전 세계 모든 문자를 하나의 코드 체계로 통일하며, 그 구현 방식 중 하나가 UTF-8입니다.

  • 영어는 1바이트(ASCII와 호환)입니다.
  • 한글은 3바이트입니다.
  • 전 세계 문자와 이모지까지 모두 지원합니다.

리눅스와 macOS는 빠르게 UTF-8을 채택했고, Windows도 지원을 점차 강화했습니다. 오늘날 웹 페이지 인코딩의 95% 이상이 UTF-8입니다.

Jupyter Notebook의 In [ ] 의미

  • In [*]: 현재 실행 중인 셀. 커널이 처리 중이며, 무거운 연산, 입력 대기, 네트워크 지연 시 오래 보일 수 있습니다.
  • In [ ]: 아직 실행하지 않은 셀. 대기 상태이며 실행 기록(번호)이 없습니다.
  • In [num]: num번째로 실행 완료된 셀. 실행 순서를 의미합니다.

헤더(Header)란?

헤더는 데이터를 다룰 때 표지판 같은 역할을 합니다. 여러 가지 값들이 어떤 의미를 갖는지 표시한 행을 말합니다.

next() 함수로 헤더 처리하기

헤더를 별도로 처리하기 위해 next() 함수를 사용할 수 있습니다.

  • next() 함수: 첫 번째 데이터 행을 읽어오면서 데이터의 탐색 위치를 다음 행으로 이동시키는 명령입니다. 이터레이터(iterator)에서 다음 항목을 꺼내오는 함수입니다.
  • header = next(data): header 변수에 헤더 데이터 행을 저장합니다.
  • print(header): header 변수를 출력합니다.
  • csv.reader(): CSV 파일에서 데이터를 읽어오는 함수입니다.
  • csv.writer(): CSV 파일에 데이터를 저장하는 함수입니다.

모듈, 패키지, 라이브러리

파이썬에서는 모듈의 기능을 활용하여 코드를 분리하고 공유합니다.

모듈(Module)

여러 기능(함수, 변수, 클래스 등)을 따로 구현한 파이썬 파일(.py)입니다. 가끔 script라고도 부릅니다. 파이썬 코드 가장 위에 import로 불러옵니다.

  • 예: import math, import csv

패키지(Package)

특정 기능과 관련된 여러 모듈들을 하나의 상위 폴더에 넣어 놓은 것입니다. 패키지 안에 하위 폴더가 더 존재할 수도 있습니다.

  • 파이썬 3.3 이후부터는 __init__.py가 없어도 패키지로 인식하지만, 하위 버전 호환을 위해 __init__.py 파일을 생성하여 패키지를 표현하는 것이 안전합니다.
  • from my_package import module1
  • A.B라고 하면 A는 패키지, B는 모듈입니다. 예: matplotlib.pyplot은 matplotlib 패키지에 있는 pyplot 모듈입니다.

라이브러리(Library)

여러 모듈과 패키지를 묶어서 부르는 말로, 일종의 코드 모음입니다. 패키지와 라이브러리의 경계는 다소 모호하며, 프로그래밍 언어마다 정의가 조금씩 다를 수 있습니다.

  • 표준 라이브러리(Python Standard Library): 파이썬 설치 시 기본으로 설치되며 별도 설치 없이 바로 import하여 사용할 수 있습니다. 예: time, sys, os, math, random, urllib 등
  • 외부 라이브러리(Third-Party Library): Python.org 팀이 아닌 외부 개발자나 커뮤니티가 만든 라이브러리로, pip install 같은 패키지 관리자를 통해 설치해야 합니다. 예: numpy, pandas 등. 표준 라이브러리보다 더 우수하거나 사용하기 쉬운 경우도 있습니다(예: NumPy, SciPy, requests).

Related entries: