관리 메뉴

보리차

03) 복잡한 형태의 데이터: csv, lambda, map, filter 본문

공부/데이터 분석

03) 복잡한 형태의 데이터: csv, lambda, map, filter

보리콩 2021. 8. 31. 22:54

CSV: Comma Separated Value

각 열이 특정한 의미를 가짐

# movies.csv
# 국문 제목, 영문 제목, 개봉 연도
다크나이트, The Dark Knight, 2008
겨울 왕국, Frozen, 2013
슈렉, Shrek, 2001
슈퍼맨, Supterman, 1978

# 다른 구분 문자(delimiter)도 사용 가능
다크나이트|The Dark Knight|2008
겨울 왕국|Frozen|2013
슈렉|Shrek|001
슈퍼맨|Supterman|1978

=> 엑셀에서 불러와서 표로 만들 수 있다.

용량이 매우 작다.

 

영화 제목에 콤마가 들어가면?

=> 큰따옴표(" ")를 이용하여 데이터를 감싼다.

# movies.csv
먹고 기도하고 사랑하라,"Eat, Pray, Love", 2010

 

csv의 장점

# movies.csv
아이언맨, Iron Man, 2008
겨울왕국, Frozen, 2013

# movies.json
[{"ko": "아이언맨", "en": "Iron Man", "year":2008},
{"ko": "겨울왕국", "en": "Frozen", "year":2013}]

같은 데이터를 저장하는 데 용량을 적게 소모함

 

# movies.csv
아이언맨, Iron, Man, 2008
겨울왕국, Frozen, 2013

데이터 오염에 취약함(한 줄만 틀리게 작성해도 그 뒤에 나머지 데이터들도 영향을 줌)

 

import csv

with open('movies.csv') as file:
	reader = csv.reader(file, delimiter=',')	# delimiter: 구분자
    for row in reader:
    	print(row[0])

 

 

고급 파이썬

lambda

def square(x):
	return x * x
    
square = lambda x: x * x

 

assert( ): 내가 의도한대로 값이 나오는지 확인

assert(square1(3) == square2(3)) # 두 값이 같으면 통과, 아니면 에러

 

 

 

map( )

def get_eng_title(row):
	split = row.split(',')
    return split[1]
    
eng_titles = [get_eng_title(row) for row in movies]
eng_titles = [row.split(',')[1] for row in movies]

# 거의 동일해보이지만 결과는 약간 다름
# 리스트가 아닌 map이라는 타입을 가짐
eng_titles = map(get_eng_title, movies)
eng_titles = map(
	lambda row: row.split(',')[1],
    movies
)

 

 

 

filter( )

r_words = [word for word in words if word.startswith('r')]

def starts_with_r(word):
	return word.startswith('r')
# 리스트가 아닌 filter 타입을 가짐
r_words = filter(starts_with_r, words)

 

 

 

 

 

 

[출처: 앨리스AI트랙 2기 aitrack.elice.io]

'공부 > 데이터 분석' 카테고리의 다른 글

06) Pandas 심화  (0) 2021.09.05
05) Pandas  (0) 2021.09.03
04) NumPy  (0) 2021.09.02
02) 데이터형 변환 - 딕셔너리, JSON, 집합, matplotlib  (0) 2021.08.31
01) 데이터 분석에 필요한 파이썬 문법  (1) 2021.08.30