04 테드 강연으로 다뤄보는 복잡한 형태의 데이터
사람들에게 영감을 심어주는 테드 강연! CSV, JSON 형태의 데이터와 앞서 배운 개념을 종합적으로 다루며 테드 강연에서 가장 인기 있는 동영상과 핫한 주제를 분석해봅니다.
CSV 데이터 읽고 처리하기
CSV는 콤마로 나뉘어진 데이터 형식으로, 용량이 작고 엑셀 등의 프로그램으로 보기 좋게 표현할 수 있다는 장점이 있습니다. 파이썬의 내장 csv 라이브러리를 이용하면 CSV 파일을 효율적으로 읽어 올 수 있습니다.
reader()는 CSV 파일의 내용을 먼저 줄 별로 나눈 뒤, 구분 기호(delimiter)를 기준으로 분리해 주는 함수입니다.
데이터 분석에 이용하기
CSV 데이터를 분석하려면, 먼저 각 열의 데이터를 분리해야 합니다. 책 정보가 담긴 CSV 파일의 데이터를 ,를 기준으로 분리하고 제목 (저자): 페이지 수p 형식으로 출력하는 함수를 완성하세요.
books.csv 파일은 1열부터 제목, 저자, 장르, 페이지 수, 출판사 순서로 나열되어 있습니다. 먼저 파일을 열고 구조를 확인한 후 코딩을 시작하세요.
제목, 저자, 장르, 페이지 수, 출판사 순서에서 제목 (저자): 페이지 수 포함한 자료로 만들기 (예: On the Origin of Species (Charles Darwin): 502p)
reader = csv.reader(file, delimiter=',')
for row in reader: print(row[0])
CSV 데이터 변환하기
CSV 데이터의 각 열은 고유한 의미를 갖습니다. 책 데이터를 CSV 형식으로 저장한다면 각 열은 제목, 작가, 페이지 수 등의 의미를 갖게 됩니다.
이 성질을 이용하면 CSV 데이터를 JSON으로 변환할 수 있습니다. 이 실습에서는 책 데이터를 담은 CSV 파일을 동일한 의미를 가진 JSON 형식으로 변환해 봅니다.
데이터 분석에서 이용하기
CSV는 파일의 크기가 작다는 장점을 갖고 있지만, 상황에 따라 JSON 같은 다른 형식으로 변환하여 주고 받아야 합니다.웹 환경에서 사용해야하거나 KEY:VALUE가 중요할 때 JSON이 유용
책 데이터를 JSON 형식으로 변환하여 저장하는 books_to_json() 함수를 완성해 보세요.
books.csv 파일은 1열부터 책의 제목, 작가의 이름, 장르, 페이지 수, 출판사 데이터를 저장하고 있습니다. 이 파일을 다음과 같은 형식의 JSON 형식으로 변환한 후, books.json 파일에 저장하세요. 페이지 수는 문자열이 아닌 정수 값이라는 것에 주의하세요!=> int를 통해 정수로 변경해야함
reader = csv.reader(src, delimiter=',')
for row in reader: print(row[0])
원래 def로 만들었던 함수를 짧게, 이름없이 만들고 싶을 때,
lambda를 통해 맨오른쪽처럼 코드의 길이를 줄이고 같은 의미의 코드를 작성할 수 있다.
한 줄 함수 작성하기
lambda는 def와 비슷하게 함수를 생성하는 연산입니다. 단, 함수가 이름을 갖지 않고, 특정 범위에서만 적용되기 때문에 한 번만 사용되거나 아주 간단한 함수를 선언할 때 사용됩니다. 그 외의 경우 def를 이용합니다.
아래 코드는 동일한 기능을 갖고 있습니다.
실습하기
def로 선언된 함수를 동일한 기능을 가진 lambda 함수로 선언해 보세요. 주어진 함수와 여러분이 작성한 함수는 이름의 _ 이용하여 구분합니다.
문자열이 Boolean의 자리, 즉 if나 while의 뒤에 들어갈 때 string이 빈 문자열이면 False, 아니면 True를 갖습니다.
A if B else C는 B 를 만족할 경우 A, 아니면 C의 값을 가집니다.
함수를 리턴하는 함수
파이썬의 함수는 함수를 리턴값으로 가질 수 있습니다. 지금까지는 정수, 문자열과 같은 변수만을 리턴했지만, 종종 함수를 리턴값으로 갖는 경우도 있습니다.
itemgetter() 함수가 대표적인 예입니다. itemgetter의 리턴값은 데이터의 모음을 받아 n번째 원소를 리턴하는 함수입니다.
함수 내부에서 함수를 리턴하는 방법은, lambda를 사용할 수도 있고, 다음과 같이 함수 내에서 def를 또 사용할 수도 있습니다.
add_n(X)=X+n
데이터 분석에서 이용하기
데이터가 특정 범위에 속하는 유효한 값인지 검증하는 함수를 Validator 함수라고 부릅니다.
이 실습에서는 데이터가 특정 범위의 정수값이 맞는지 확인하는 min_validator()와 max_validator() 함수를 완성해 봅니다.
map(f, list)=[f(x),f(y),f(y)]
리스트에 함수 적용하기
map()은 데이터 구조의 각 원소들에 동일한 함수를 적용하여 새로운 데이터를 만드는 파이썬의 기본 함수입니다. data라는 리스트가 주어졌을 때, 아래의 두 코드는 유사한 연산을 합니다.
List comprehension과 map()의 가장 주된 차이점은 연산을 진행하는 시점입니다. map()의 경우 데이터를 map이라는 클래스로 저장하고, 데이터가 필요해질 때 주어진 연산을 수행합니다.
실습하기
앞서 보았던 books.csv 파일을 읽어서 제목의 리스트를 리턴하는 get_titles() 함수를 완성하세요.
리스트에 함수 적용하기
filter()는 주어진 데이터 구조에서 특정 조건을 만족하는 원소만 골라 내는 파이썬의 기본 함수입니다. data라는 리스트가 주어졌을 때, 아래의 두 코드는 유사한 연산을 합니다.
filter()도 map()과 마찬가지로 즉시 연산되지 않고 filter 타입의 데이터 구조를 생성합니다.
실습하기
books.csv 파일을 읽어서 페이지 수가 250이 넘는 책들의 제목을 리스트로 리턴하는 get_titles_of_long_books() 함수를 완성하세요.
댓글