모든 게시물은 macOS Monterey 12.0.1 버전을 기준으로 작성하였습니다.
부스트캠프 AI Tech 3기 예비 캠퍼를 위한 Pre-Course 강좌를 바탕으로 작성하였습니다.
Comma Separate Values (CSV)
엑셀 양식의 데이터를 프로그램에 상관없이 손쉽게 공유하기 위해 사용한다.
강의에서 제공하는 "전공_유동인구_현황" 엑셀 파일을 받자.
들어가서 다른 이름으로 저장을 누르면 파일 형식에서 CSV로 바꿀 수 있다.
텍스트파일을 처리하듯 파일을 읽어온 후, 한줄씩 데이터를 처리한다.
line_counter == 0 이라는 것은 데이터 Header가 담긴 정보이니 객체에 저장하고,
다음부터는 customer_list에 한줄씩 저장한다. 이를 활용하는 또 다른 방법은
아래와 같이 customers_USA_only.csv 파일이 만들어졌다.
이렇게 다룰 때 생기는 문제점이 있는데 예제 데이터를 통해 알아보자.
-> 텍스트 파일 형태로 데이터 처리시 문장 내 들어간 , 등에 대한 전처리가 필요하다.
한글로 되어 있어 한글 처리가 필요하다. 사용할 파일은 '시군별유동인구데이터.csv'
https://www.data.go.kr/index.do
아래는 강의에서 보여주신 예제인데 open 할 때 encoding 방식을 기재하지 않으면
에러가 날 수 있으니 유의하자. 윈도우에서 저장 관리되는 데이터는 모두 cp949,
맥os 는 utf-8 이라서 그냥 더블클릭으로 파일을 열면 알 수 없는 문자가 나온다.
if location.find(u"성남시") 의 u는 유니코드라는 의미로 보통 한글 앞에 붙인다.
-1 은 없다의 의미이므로 "'없다'가 아니다" = "있다" 즉, 성남시가 있다면
데이터에 추가를 해라
이제 파일 저장을 하는데 delimiter 즉, 데이터를 자르는 기준은 tab size
작은 따옴표를 필드를 구분하는 기준으로 삼을 것이다. (quotechar)
윈도우와 맥 사이의 띄어쓰기 차이가 있어 두 줄 씩 간격이 생겼고,
코딩한대로 작은 따옴표로 구분되어 있음을 확인할 수 있다.
csv 라이브러리보다는 나중에 pandas를 배워 활용할테니 너무 스트레스 x
Web
HTML 소스파일을 컴퓨터가 다운로드 받아 웹 브라우저가 해석하고
왼쪽 이미지처럼 표시하여 우리가 사용하는 것이다.
간단한 HTML 파일을 보자.
html 안에 head라는 구조와 body라는 구조가 있다.
웹데이터를 다운로드 받아 분석할 일이 많을텐데 HTML도 페이지 생성 규칙이 있어
그 규칙을 분석하여 데이터의 추출이 가능하다.
분석 방법으로는 String, Regular Expression, Beautiful Soup가 있다.
Regular Rxpression
전화번호의 패턴이 존재하고, ip주소의 패턴이 존재한다.
이를 어떻게 활용할 수 있을까?
ctrl + h를 누르고 정규식 아이콘을 클릭한 뒤, 양식에 맞춰 기재하면
색깔이 칠해지는 것을 확인할 수 있다. 이를 replace to None 하면 사라진다.
HTML 역시 tag 형태로 규칙이 있으니 정규식을 활용하여 추출할 수 있다.
워낙 다양하니 필요한 것들을 검색하여 공부할 수밖에 ~
https://zetawiki.com/wiki/%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D_%EC%98%88%EC%8B%9C
[ 정규식 연습장 ]
정규식을 추출하는 연습을 해보자.
그렇다면 파이썬으로 어떻게 그 데이터를 가져올까.
eXtensible Markup Language (XML)
데이터의 구조와 의미를 설명하는 TAG(MarkUp)를 사용하여 표시하는 언어
위에서 HTML이라는 MarkUp Language 봤는데 이와 유사하다.
TAG와 TAG 사이에 값이 표시되고 구조적 정보를 표현할 수 있으며
대표적인 데이터 저장 방식이다. 컴퓨터 간에 정보를 주고받기 매우 유용한
저장 방식으로 쓰이고 있다.
<필드를 열고> 값을 기입하고 <필드를 닫는> 형태, 마찬가지로 트리구조를 갖는다.
역시 정규표현식으로 Parsing이 가능하지만 더 손쉬운 도구들이 개발되어 있다.
가장 많이 쓰이는 parser인 BeautifulSoup을 사용한다.
parser = xml 파일을 분석하는 도구로 보통 "lxml" 사용한다.
beautifulsoup 예제 데이터로 미국 특허청(USPTO) 데이터는 XML로 제공된다.
해당 데이터중 등록번호 '08621662'를 분석하기 위해 XML 데이터를 추출해보자.
우측 하단 사진 속 XML 파일의 invention-title을 추출하는 것을 볼 수 있다.
특허에는 출원번호, 출원일, 등록번호, 등록일, 상태, 특허명 등의 데이터가 있다.
<publication-reference>라는 큰 태그 밑에 <document-id> 밑에
country, doc-number, kind, date 라는 세부 태그들이 존재한다.
아래 소스코드에서 12번째 줄 ~ 17번째 줄을 확인하자.
이중으로 짜인 태그는 코드도 이중으로 짜야 한다는 것 주의하자.
JavaScript Object Notation (JSON)
원래 웹 언어인 Java Script의 데이터 객체 표현 방식
간결성으로 기계/인간이 모두 이해하기 편하다.
데이터 용량이 적고, Code로의 전환이 쉬워 XML의 대체제로 많이 활용된다.
사전 자료형과 상당히 유사하고 실제로 전환할 수 있다.
왼쪽은 XML, 오른쪽은 JSON. 오른쪽이 훨씬 간결하고 용량도 적게 잡는다.
json 모듈을 사용하여 손 쉽게 파싱 및 저장할 수 있으며 데이터를 저장하고 읽는
방식은 사전 자료형과 유사하여 상호 호환이 가능하다.
페이스북, 트위터, github 등 거의 모든 사이트에서 데이터를 JSON 형태로 교환한다.
contents에는 string 형태로 저장되고, 이를 json.loads 활용하여 불러온다.
이를 출력한 결과는 아래와 같다. dict 타입으로 불러오는 것 역시 확인할 수 있다.
write 방식도 동일하다. read = loads & write = dump 기억하자.