AI/부스트 코스

[부스트캠프 AI Tech 3기 Pre-Course] 꼭 알아야 하는 파이썬 기초 지식 Python Data Handling (CSV, 웹, XML, JSON)

hae-koos 2021. 12. 6. 11:49
728x90
반응형
모든 게시물은 macOS Monterey 12.0.1 버전을 기준으로 작성하였습니다.
부스트캠프 AI Tech 3기 예비 캠퍼를 위한 Pre-Course 강좌를 바탕으로 작성하였습니다.

https://www.boostcourse.org/

 

Comma Separate Values (CSV)

 

 

엑셀 양식의 데이터를 프로그램에 상관없이 손쉽게 공유하기 위해 사용한다.

강의에서 제공하는 "전공_유동인구_현황" 엑셀 파일을 받자.

들어가서 다른 이름으로 저장을 누르면 파일 형식에서 CSV로 바꿀 수 있다.

 

 

 

텍스트파일을 처리하듯 파일을 읽어온 후, 한줄씩 데이터를 처리한다.

 

 

 

line_counter == 0 이라는 것은 데이터 Header가 담긴 정보이니 객체에 저장하고,

다음부터는 customer_list에 한줄씩 저장한다. 이를 활용하는 또 다른 방법은

 

10번째 정보는 country 정보가 담겨있다.

 

 

아래와 같이 customers_USA_only.csv 파일이 만들어졌다.

 

 

이렇게 다룰 때 생기는 문제점이 있는데 예제 데이터를 통해 알아보자.

-> 텍스트 파일 형태로 데이터 처리시 문장 내 들어간 , 등에 대한 전처리가 필요하다.

한글로 되어 있어 한글 처리가 필요하다. 사용할 파일은 '시군별유동인구데이터.csv'

 

https://www.data.go.kr/index.do

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

 

아래는 강의에서 보여주신 예제인데 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

 

정규표현식 예시 - 제타위키

다음 문자열 포함...

zetawiki.com

 

 

[ 정규식 연습장 ] 

https://www.regexr.com/

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

 

정규식을 추출하는 연습을 해보자.

 

 

http와 zip 사이에 어떤 문자가 와도 좋다.

 

그렇다면 파이썬으로 어떻게 그 데이터를 가져올까.

 

 

 


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 기억하자.

728x90
반응형