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: 모두 찾기

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
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)