Search
Duplicate

Python data handling

생성일
2023/02/16 14:39
태그

Python data handling

CSV, 웹(html), XML, JSON

CSV (Comma Separate Value)

CSV, 필드를 쉽표(,)로 구분한 텍스트 파일
엑셀 양식의 데이터프로그램에 상관없이 쓰기 위한 데이터 형식
탭 (TSV), 빈칸 (SSV) 등으로 구분해서 만들기도 함
통칭하여 character-separated values (CSV) 부름
엑셀에서는 ‘다름이름저장' 기능으로 사용 가능

CSV 객체로 CSV 처리

Text 파일 형태로 데이터 처리시 문장 내에 들어가 있는 “,” 등에 대해 전처리 과정 필요
파이썬에서는 간단히 CSV 파일을 처리하기 위해 csv 객체를 제공함
시간대 / 조사일자 / 행정구역 / 날씨 등을 기준으로 연령별 / 성별 유동인가 해당 지역에 몇 명인가 표시
import csv reader = csv.eader(f, delimiter = ',', quotechar='"', quoting=csv.QUOTE_ALL)
Python
복사
encoding 신경써라!
encoding="cp949" #윈도우는 cp949일 가능성 많다 encoding="utf8" #안될때는 이걸로 바꿔라
Python
복사

WEB (World Wide Web, WWW)

데이터 송수신을 위한 HTTP 프로토콜 사용
데이터를 표시하기 위해 HTML 형식을 사용
정보의 보고, 많은 데이터들이 웹을 통해 공유됨
HTML도 일종의 프로그램, 페이지 생성 규칙이 있음
규칙을 분석하여 데이터의 추출이 가능
추출된 데이터를 바탕으로하여 다양한 분석이 가능

정규식 (regular expression)

정규 표현식, regexp 또는 regex 등으로 불림
복잡한 문자열 패턴을 정의하는 문자 표현 공식
특정한 규칙을 가진 문자열의 집합을 추출

HTML

웹 상의 정보를 구조적으로 표현하기 위한 언어
제목, 단락, 링크 등 요소 표시를 위해 태그 사용
모든 요소들은 꺾쇠 괄호 안에 둘러 쌓여 있음
모든 HTML은 트리 모양의 포함 관계를 가짐
일반적으로 웹 페이지의 HTML 소스파일은 컴퓨터가 다운로드 받은 후 웹 브라우저가 해석 / 표시

정규식 (regular expression)

정규 표현식, regexp 또는 regex 등으로 불림
복잡한 문자열 패턴을 정의하는 문자 표현 공식
특정한 규칙을 가진 문자열의 집합을 추출

정규식 for HTML Parsing

주민등록번호, 전화번호, 도서 ISBN 등 형식이 있는 문자열을 원본 문자열로부터 추출함
HTML 역시 tag를 사용한 일정한 형식이 존재하여 정규식으로 추출이 용이함
문법 자체 매우방대, 스스로 찾아서 하는 방법 터득 중요

정규식 기본문법

정규식 연습장 (http://www.regexr.com/)
문자 클래스 [] : [와] 사이의 문자들과 매치 라는 의미
“-” 를 사용 범위를 지정할 수 있음
메타 문자
정규식 표현을 위해 원래 의미 X, 다른 용도로 사용되는 문자
. ^ $ * + ? { } [ ] \ | ( )
Python
복사
. : 줄바꿈 문자인 \n 을 제외한 모든 문자와 매치
* : 앞에 있는 글자를 반복해서 나올 수 있음
+ : 앞에 있는 글자를 최소 1회 이상 반복
{m.n} : 반복 횟수를 지정
? : 반복 횟수가 1회
: or
^ : not

정규식 in 파이썬

re 모듈을 import 하여 사용
import re
Python
복사
함수
search - 한 개만 찾기
findall - 전체 찾기
추출된 패턴은 tuple로 반환됨
연습 - 특정 페이지에서 ID만 추출하기
ID 패턴 : [영문대소문자|숫자] 여러 개, 별표로 끝남

XML

데이터의 구조와 의미를 설명하는 TAG(MarkUp)를 사용하여 표시하는 언어
TAG와 TAG 사이에 값이 표시되고, 구조적인 정보를 표현할 수 있음
HTML과 문법이 비슷, 대표적인 데이터 저장 방식
정보의 구조에 대한 정보인 스키마와 DTD 등으로 정보에 대한 정보(메타정보)가 표현되며, 용도에 따라 다양한 형태로 변경가능
XML 은 컴퓨터(이기종) 간에 정보를 주고받기 매우 유용한 저장 방식으로 쓰이고 있음
XML도 HTML 과 같이 구조적 마크업 언어
정규표현식으로 Parsing 이 가능함
그러나 좀 더 손쉬운 도구들이 개발되어 있음
가장 많이 쓰이는 parser 인 beautifulsoup 으로 파싱

Beautifulsoup

activate python_mooc conda install lxml conda install -c anaconda beautifulsoup4=4.5.1
Shell
복사
모듈 호출
from bs4 import BeautifulSoup
Python
복사
객체 생성
soup = BeautifulSoup(books_xml, "lxml")
Python
복사
Tag 찾는 함수 find_all 생성
soup.find_all("author")
Python
복사

JSON

JS Object Notation
원래 웹 언어인 자바스크립트의 데이터 객체 표현 방식
간결성으로 기계/인간이 모두 이해하기 편함
데이터 용량이 적고, 코드로의 전환이 쉬움
이로 인해 XML 의 대체제로 많이 활용되고 있음

JSON in Python

json 모듈을 사용하여 손 쉽게 파싱 및 저장 가능
데이터 저장 및 읽기는 dict type 과 상호 호환 가능
웹에서 제공하는 API 는 대부분 정보 교환 시 JSON 활용
페북, 트위터, 깃헙 등 거의 모든 사이트
각 사이트 마다 Developer API 의 활용법을 찾아 사용
JSON Read
JSON 파일의 구조를 확인 → 읽어온 후 → Dict Type 처럼 처리
JSON Write
Dict Type으로 데이터 저장 → json 모듈로 Write