AI Basic/Python
[Python] 09 Data Handling
iamzieun
2023. 3. 8. 22:25
01 CSV
- CSV
- Comma Separate Value, Character Separate Value
- 필드를 쉼표(,) 또는 그 외의 구분자로 구분한 텍스트 파일
- 엑셀 양식의 데이터를 프로그램에 상관 없이 쓰기 위한 데이터 형식
- CSV 객체
import csv
reader = csv.reader(f, delimiter=",", quotechar='"', quoting=csv.QUOTE_ALL)
-
- delimiter: 구분자
- quotechar: 문자열을 둘러싸는 신호 문자
- quoting: quotechar로 둘러쌀 레벨 (QUOTE_ALL / QUOTE_MINIMAL)
- 파이썬에서의 CSV
- 유동 인구 데이터로부터 성남시 데이터만 수집
import csv
seoung_nam_data = []
header = []
rownum = 0
with open("korea_floating_population_data.csv","r", encoding="cp949") as p_file:
csv_data = csv.reader(p_file) # csv 객체를 이용해서 csv_data 읽기
for row in csv_data: # 읽어온 데이터를 한 줄씩 처리
if rownum == 0:
header = row # 첫 번째 줄은 컬럼명이므로 header로 따로 저장
location = row[7] # “행정구역” 필드 데이터 추출
if location.find(u"성남시") != -1:
seoung_nam_data.append(row) # ”행정구역” 데이터에 성남시가 들어가 있으면 seoung_nam_data List에 추가
rownum +=1
with open("seoung_nam_floating_population_data.csv","w", encoding="utf8") as s_p_file:
writer = csv.writer(s_p_file, delimiter='\\t', quotechar="'", quoting=csv.QUOTE_ALL)
writer.writerow(header) # 제목 필드를 파일에 쓰기
for row in seoung_nam_data:
writer.writerow(row) # seoung_nam_data에 있는 정보를 파일에 쓰기
02 Web, html
02-1 Web
- Web
- World Wide Web (WWW)
- 인터넷
- 데이터 송수신을 위한 HTTP 프로토콜 사용
- 데이터 표시를 위한 HTML 형식 사용
- Web의 동작 방식
- ① 사용자가 웹 브라우저의 검색창에 특정 사이트의 주소를 입력한다.
- ② 웹 브라우저가 DNS에게 특정 사이트의 (도메인)주소를 요청한다.
- ③ DNS가 웹 브라우저에게 사이트의 IP주소를 응답한다.
- ④ 웹 브라우저가 웹 서버에게 IP 주소를 이용하여 html 문서를 요청한다.
- ⑤ 웹 서버는 바로 웹 페이지를 공급하지 못하고, 웹 애플리케이션 서버와 데이터 베이스에서 웹 페이지 작업을 처리한다.
- ⑥ 작업 처리 결과를 웹 서버로 보낸다.
- ⑦ 웹 서버는 웹 브라우저에게 html 문서 결과를 응답한다.
- ⑧ 웹 브라우저는 화면에 웹 페이지를 출력한다 (렌더링).
- → 웹 페이지의 html 소스파일은 컴퓨터에 다운로드된 후 웹 브라우저가 해석하여 출력하는 것 !
02-2 HTML
- HTML
- Hyper Text Markup Language
- 웹 상의 정보를 구조적으로 표현하기 위한 언어
- 제목, 단락, 링크 등의 요소들을 Tag를 이용하여 표현
- 트리 모양의 포함 관계를 가짐
<!doctype html>
<html>
<head>
<title>Hello HTML</title>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
- 정규식 regular expression
- 정규 표현식, regexp, regex 등으로 불림
- 복잡한 문자열 패턴을 정의하는 문자 표현 공식
- html을 parsing 하는데 사용됨
- 정규식 기본 문법
- []: [와 ] 사이의 문자에 매치
- ex. [abc]: 해당 글자가 a, b, c 중 하나이다
- : [, ] 안에서 문자의 범위를 지정
- ex. [a-zA-Z]: 알파벳 전체, [0-9]: 숫자 전체
- .: 줄바꿈 문자(\n)를 제외한 모든 문자에 매치
- *: * 앞의 문자 0회 이상 반복
- +: + 앞의 문자 1회 이상 반복
- {}: 문자 반복 횟수 지정
- ?: 문자 1회 반복
- |: or
- ^: not
- 파이썬에서의 정규식
- re 모듈 활용
- search: 1개만 찾기
- findall: 모두 찾기
- re 모듈 활용
03 XML
- XML
- eXtensible Markup Language
- 데이터의 구조와 의미를 설명하는 TAG를 사용하여 표시하는 언어
- HTML과 비슷한 문법
- 컴퓨터 간에 정보를 주고 받는데 사용됨
<?xml version="1.0"?>
<books>
<book>
<author>Carson</author>
<price format="dollar">31.95</price>
<pubdate>05/01/2001</pubdate>
</book>
<pubinfo>
<publisher>MSPress</publisher>
<state>WA</state>
</pubinfo>
</books>
- BeautifulSoup
- XML, HTML 등 Markup 언어 scraping을 위한 도구
# 모듈 호출 from bs4 import BeautifulSoup # xml 파일 string으로 읽어오기 with open("books.xml", "r", encoding="utf8") as books_file: books_xml = books_file.read() # 객체 생성 soup = BeautifulSoup(books_xml, "lxml") # lxml Parser를 사용해서 데이터 분석 # author가 들어간 모든 element 추출 for book_info in soup.find_all("author"): # find_all: 패턴에 해당하는 문자 모두 반환 print (book_info) print (book_info.get_text()) # get_text: 반환된 패턴의 값 반환
04 JSON
- JSON
- JavaScript Object Notation
- JavaScript의 데이터 객체 표현 방식
- 간결성으로 기계와 인간이 모두 이해하기 편하다는 장점을 가지기 때문에 XML의 대체제로 많이 활용되고 있음
{"employees":[ {"name":"Shyam", "email":"shyamjaiswal@gmail.com"}, {"name":"Bob", "email":"bob32@gmail.com"}, {"name":"Jai", "email":"jai87@gmail.com"} ] }
- python의 dictionary와 유사 (key:value 쌍으로 데이터 표시)
- 파이썬에서의 JSON
- JSON 모듈 활용
- Read: JSON 파일을 읽어온 후 → Dict Type처럼 처리
- Write: Dict Type으로 데이터 저장 → JSON 모듈로 Write
- JSON 모듈 활용
import json
with open("json_example.json", "r", encoding="utf8") as f:
contents = f.read()
json_data = json.loads(contents)
print(json_data["employees"])
import json
dict_data = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
with open("data.json", "w") as f:
json.dump(dict_data, f)