보리차
03) 복잡한 형태의 데이터: csv, lambda, map, filter 본문
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 |