행동 데이터 분석 - R과 파이썬으로 시작하는 행동 데이터 분석 가이드
플로랑 뷔송 지음, 시진 옮김 / 한빛미디어 / 2023년 5월
평점 :
장바구니담기


데이터 분석 그 중에서 특히 인간의 의도가 무엇인지 분석하는 행동 데이터 분석을 다룬 책으로 현대적 인과관계 분석 방법 및 엄밀하진 않지만 구전으로 전해오는 실무 비법들을 공개한다.

상관관계는 인과관계가 아니다.

아이스크림이 많이 팔릴수록 상어가 사람을 많이 공격하니, 아이스크림을 덜 팔면 상어가 인간을 덜 공격할 것이다.

말도 안되는 명제임에 틀림없음에도 분명 데이터 분석 세계에서는 흔히 일어날 수 있는 결론이다. 아이스크림 판매량과 상어의 공격 빈도는 계절별로 놀라울 정도의 상관성을 갖기 때문이다.

두 데이터의 패턴은 일치하지만 저런 어리석은 결론이 도출된 결정적인 이유는 인과관계가 결여되어있기 떄문이다. 무엇 때문에 아이스크림이 많이 팔렸는지, 무엇 때문에 상어에게 공격을 당하는지 찾아본다면 쉽게 위 결론을 부정할 수 있다.

문제는 위 명제가 상식에 의해 참이 아니라는 나름의 믿음이 있기에 오류를 발견할 수 있다는 점이다. 이 책에 등장하는 예제처럼 무엇때문에 매출이 증가했는지, 혹은 할인 프로모션이 과연 매출 상승에 도움을 준 것이 사실인지와 같은 결론을 알지 못하는 명제를 맞딱드린다면 저런 우를 범하기 쉬워진다.

이런 문제를 해결하고자 이 책에서 도입한 기법이 인과관계 기법이다. 위에 언급한 “무엇”이 무엇인지를 찾기 위해 즉, 원인을 찾기 위해 데이터 분석에서 사용할 수 있는 다양한 실용적인 실무 기법이 소개된 것이 이 책의 가장 큰 장점이다.

교란 데이터를 찾아내는 기법이 그 중 하나이다. 단순히 아이스크림의 판매량이 기온이라는 원인에 의해 영향을 받는 것으로 분석하여 모델을 만들고 계절 특성이 타지 않는 갑작스런 기온 상승에 본 모델을 활용하여 재고량을 비축하는 과정에서 모델의 예측이 어긋나는 경우를 그 예시로 들고 있다.

사실 판매량은 기온 외에도 특정 계절에 학생들이 방학을 맞이하여 판매량이 늘었다는 또 다른 원인이 숨어있었다는 사실을 밝히고 교랸 변수를 찾다보면 인과관계를 찾아내는 과정은 결코 쉬운 일이 아님을 깨닫게 된다.

인간의 복잡한 마음이 단순하게 규명되긴 쉽지 않기에 그 과정을 도식화 하는 과정을 통해 모델의 정확성을 높이고 단순화하여 이해하기 쉽게 만들 수 있는 여러 기법이 소개되는데 그 중 가장 먼저 등장하는 것이 인과관계 다이어그램이다.

특히 사슬, 분기, 충돌이라는 세가지 기본 구조의 소개가 인상적이었다. 사슬이란 기온이 아이스크림 매출을 올리고, 아이스 크림 매출이 도넛 매출을 따라 올리는 연쇄적인 유발 관계를 의미한다. 이러한 사슬은 확장도 가능하고 축소도 가능하다.

분기란 기온이 아이스크림 매출을 올리기도 하지만 아이스커피의 매출을 올리기도 하는 관계를 의미한다. 반면 충돌은 2가지 이상의 변수가 동일한 결과를 유발한다. 여름철 여부라는 변수가 기온에도 영향을 주고 매출량에도 영향을 주면서도, 기온이 또 매출량에도 영향을 주는 셈이다.

이런 복잡한 매커니즘을 단순화하는 방법으로 피처를 분할하거나 집계를 내거나 순환을 관리하는 방법들이 존재하는데 기법 자체로도 중요하지만 데이터를 분석하는 사람이라면 철학적으로도 반드시 알아둬야 할 기본 교양이라 생각한다.

이를 토대로 4장에서는 인과관계 다이어그램을 만들어보는 예제가 여럿 등장하는데 한 과정씩 따라하다보면 구체적으로 인과관계 다이어그램을 어떤 방식으로 그릴 수 있는지 감을 잡을 수 있다.다이어그램

아울러 앞서 언급한 교란 해소 방법으로 DCC(분리 인과 기준)과 BC(백도어 기준)은 반드시 읽어볼 것을 권하고 싶다. 이런 교란은 실무에서는 본능적으로 애써 외면하게 된다. 별다른 성과없이 엄청난 시간과 노동력을 잡아 먹을만한 주제라는 것을 알기 때문이다.

하지만 대부분의 문제는 먼 길을 돌다보면 결국 이 교랸 문제의 모순을 해결해야 풀리는 경우를 자주 발견한다. 비록 구체적인 예제가 등장하지 않아 아쉽지만 그럼에도 좋은 예시와 해결방법이 소개되어 있다.

이 책은 인과관계만 다루는 것은 아니다. 또 하나의 주제로 그동안 입문서나 교과서에서 다루지 않던 또는 수학과 같이 엄밀함을 보장할 수 없어 어두운 그늘에서 실무자 사이에만 구전으로 전해오던 현실에서의 실전 분석 방법도 상당수 소개되고 있다.

그 중 대표적인 것이 결측치 처리이다. 결측치를 처음 접했을 때만 해도 어차피 없는 데이터 따위는 없애거나 대체하면 그만이라 쉽게 생각했는데 그 없다는 것도 나름의 정보이다. 이를 무시하면 절대 성능좋은 모델을 만들 수 없다.

보이지 않는 데이터가 때로는 보이는 데이터보다 결정적인 결과를 도출하기도 한다. 교양서이지만 통계학의 대가 데이비드 핸드가 저술한다크데이터라는 책을 읽어본다면 결측치를 결코 만만하게 볼 수 없음을 깨달을 수 있다.

아무튼 MCAR, MAR, MNAR 등을 인과관계 다이어그램과 결부시켜 실습해보는 것이 인상적인 부분인데 비교적 적은 코드로 결측치의 숨은 진실을 쉽게 파악할 수 있게 잘 정리되어있다 생각했다.

부트스트랩을 이용한 불확실성 측정 또한 놀라웠다. 그동안 그저 모델이 정확도를 높이기 위해 부트스트랩을 활용해 왔는데 p-value의 남용 이슈와 관련된 부분에서도 큰 도움을 받을 수 있다는 사실을 직접 실습할 수 있어 유익했다.

p값 남용 문제는 통계학회의 권고 외에도 무수히 많은 책에서 확인해 온 내용이지만 그래서 결론은 어쩌라구? 라는 내 질문에 나름의 해법조차 전달한 책을 찾기는 드물었다. 분명 분석가 나름의 방법이 있을텐데 엄밀하지 않아서 확실하지 않아서 명예가 훼손될까 감춰진 경향이 강했다. 저자는 그 기법을 쿨하게 밝히고 있다. 물론 서문에서 다른 학자 및 전문가와 견해를 달리할 수 있음을 밝혀두었다.전통적 검정력

그 외에도 실험을 직접 설계해보며 조절효과나 매개효과를 측정하는 방법 또한 매우 유익했다. 논문을 읽을 때마다 확실한 이해가 부족하여 막혔던 부분인데 이 책을 읽고 어느정도 감을 잡고 자신감을 얻을 수 있었다.

실습 언어는 R, Python 두 언어를 모두 사용하고 있다. 예제에 따라 두 언어 중 보다 적합한 언어를 선택하여 예제를 구성하고 있다.예제

다만 실습 위주의 책은 아니다. 크게 얻을 것이 없는데 실습 량이 많아 질 것 같은 부분은 예시로 대체하고 있으며 짧은 실습으로 언어적 기술보다 이해에 도움이 될 부분만 예제를 도입하고 있는데 그 완급조절이 가히 예술이다. 최대한 적은 분량으로 많은 것들을 알기 쉽게 전하는 책이다.

이렇듯 이 책은 99%의 입문서나 교과서가 담고 있지 않은 현실에서의 더럽고, 복잡하고, 자신있게 주장하기 힘든 데이터 분석 문제에 대하여 저자 나름의 해법을 용기있게 전달하는 책이다. 아울러 이 책에서 소개한 큰 주제 중 하나인 인과관계는 개인적으로 강인공지능(AGI)을 위한 열쇠라고 생각한다.

저자의 경험에서 얻은 노하우의 공유에 감사드리며 데이터 분석에 임하는 모든이들에게 꼭 한 번 읽어볼 것을 권하고 싶다.




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
Do it! 점프 투 파이썬 - 전면 개정판 Do it! 시리즈
박응용 지음 / 이지스퍼블리싱 / 2019년 6월
평점 :
구판절판


초보자가 실수 할 수 있는 모든 경우를 예제로 녹인 것이 장점인 책!
이 책은 프로그래밍을 처음으로 배울 때 추천하고 싶은 명작이다.

댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
자바와 파이썬으로 만드는 빅데이터 시스템 - 하둡, 카프카, 아파치 스파크로 연결하는 나만의 빅데이터 전처리 파이프라인 구현
황세규 지음 / 제이펍 / 2023년 5월
평점 :
장바구니담기


하둡 생태계와 빅데이터 파이프라인을 직접 구축할 수 있게 해주는 가이드. 윈도우, 리눅스 두 운영체제에 Python, Java 두 언어를 연동하며 SQL, NoSQL 두가지 유형의 DB를 연동하며 확실한 이해를 돕는 점이 장점이다.

하둡 Eco 기반의 빅데이터 시스템을 구축하고 이를 데이터 분석 및 AI 모델링에 활용할 수 있도록 데이터 파이프 라인을 구성하는 방법을 알려주는 책이다.하둡

가장 인상깊었던 이 책의 장점은 다양한 언어, DB, OS를 활용하여 빅데이터 시스템을 구축해본다는 점에 있다. 윈도우, 리눅스 두 종류의 OS에 설치해봄으로써 하둡 생태계의 솔루션들이 가지는 특징과 작동 방식을 비교해 볼 수 있고 덕분에 에코 시스템에 대해 깊이있는 이해를 가능하게 해준다.

더불어 현재 레거시 시스템을 활용하기 위해 어떤 OS를 선택하여 구축하는 것이 유리할 지 판단 가능하게 해주며 현재 구축한 OS를 미래에 다른 OS로 대체해야 할지 등의 판단을 미리 시뮬레이션 해준다는 점에서 큰 도움이 되는 책이다.

이런 유형의 주제를 다루는 책은 국내에서 이 책 외에 2권 정도밖에 보지 못했는데 그 중 가장 참고하기 좋은 책이라 생각한다. 또한 그만큼 희소한 내용을 다룬다는 점에 가치가 있다고 볼 수 있다.

몇년 전 이 책 만큼 훌륭한 책을 접했는데 그 책의 경우 다양한 OS나 언어를 연동하지는 않고 있어 하둡 생태계에 대한 깊이있는 이해에 한계를 느꼈고, 더욱이 Cloudera Manager의 패키지의 구성요소를 하나하나 설치하는 과정을 거치고 있어 Cloudera의 라이센스 정책이 변동되거나 버전이 변동되는 경우 호환성 측면에서 애를 먹었던 기억이 난다.

이 책은 대형 빅데이터 시스템 패키지에 의존하는 것이 아닌 하나하나의 솔루션을 직접 설치해보는 과정을 거치기에 제대로 밑바닥부터 빅데이터 시스템을 구성하는 데 큰 도움을 주는 책이다.

또한 앞서 언급한 바와 같이 OS외에도 Java와 Python 언어를 활용하여 데이터 파이프라인을 구축해 볼 수 있다는 장점도 눈에 띈다. 아직 국내 레거시 대부분은 Java 의존성이 높으며 엔터프라이즈 급의 서비스를 가동하는 경우 Java를 쉽사리 포기할 수도 없고 하둡 생태계가 워낙 Java와 궁합이 잘 맞으니 하둡 시스템을 구축하는데 있어 Java를 활용하는 가이드가 소개된 점은 장점이라 할 수 있다.

다만 Java는 Python이 가지는 데이터 생태계에서의 강력함 대비 생산성이 떨어지는 것 또한 사실이다. 이 책은 두가지 언어를 모두 연동하는 예제와 기법을 보여줌으로써 Java언어와의 연동을 통해 내부 매커니즘을 제대로 이해할 수 있게 도와주고 Python으로도 연동해봄으로써 불필요한 코딩을 최소화하여 설계 측면에서의 안목을 신장시켜 준다는 두가지 장점을 모두 갖고 있다.

DB 또한 마찬가지이다. Mysql과 같은 SQL 진영이 가지는 ACID 기반의 트랜잭션 처리 및 배치처리는 물론 MongoDB와 같은 NoSQL 진영의 CAP 이론을 기반으로 한 스케일 아웃 및 실시간 병렬처리의 특성을 모두 익히고 활용할 수 있게 함으로써 적은 시간대비 다양한 레거시의 활용을 가능하게 해준다는 점이 큰 장점 중의 하나라 생각한다.

이를 모두 가능케 하는 개발 환경의 IDE로는 이클립스를 채택하고 있다. IntelliJ나 Pycharm과 같은 Jetbrain 사의 제품이 소개되어도 좋았을 것이나 두가지 IDE를 모두 소개해야 한다는 점 및 온전한 기능을 활용하고 싶다면 유료로 구매해야 하는 만큼 무료로도 훌륭한 개발을 지원하는 이클립스를 선택한 점도 마음에 드는 부분이다.IDE

또한 1장에서는 빅데이터를 이해하는 데 필요한 기초 이론을 매우 깔끔하고 이해하기 쉽게 잘 정리하고 있어 놀라웠다. 이 영역의 이론만 다뤄도 능히 책 한 권 이상의 분량이 필요한데 실습을 진행하는 데 반드시 필요한 이론만 깔끔하게 정리하고 있어 매우 인상적이었다.이론

하둡시스템에는 다양한 오픈 소스들의 톱니 바퀴 처럼 물려있지만 이 책은 그 중에서도 하둡, 카프카, 스파크 간의 연동 및 활용에 집중한다.카프카

물론 조금 더 깊이 들어가면 주키퍼로 병렬 서비스를 통제한다거나, 스쿱과 같은 솔루션을 활용해 데이터를 이기종 시스템에 일괄 전송하는 등의 방법도 소개될 수 있겠지만 이 책에서는 소개되지 않는다.

다만 어떤 시스템에서도 반드시 사용하게 되는 하둡이라는 기본 파일 시스템과 이를 카프카를 이용해서 스파크로 넘겨주고 최종적으로 데이터 마트에 저장하는 일련의 과정을 소개하는데 집중한다.

예제로는 미 연방 재무 지표인 FRED 데이터를 활용한다. 이를 일종의 데이터 레이크로 바라보며 API 키를 발급받아 가져오는 형태의 프로젝트를 진행한다.

FRED의 데이터는 특히 주식 투자를 진행하게 되면 자주 들여다보게 되는 지표가 많다. 예를 들어 장단기 금리차, 통화량 등 유동성 변동, 금리 변동 등의 수치를 얻을 수 있기에 이 책을 통해 기본기를 다진 후 FRED 데이터를 실시간으로 분석해 볼 수 있는 빅데이터 시스템을 만들고 이 수치 간의 모델링을 통해 주가 예측이나 글로벌 매크로 변동을 예측해보는 것도 재미있는 프로젝트가 되리라 생각한다. 아마 저자는 나름의 인사이틀 활용해 지금 내가 말한 것들을 이미 구축하며 수익률을 측정하고 있을거라 생각한다.

이 책의 결과물은 결국 데이터 마트에 저장된 FRED 데이터를 시각화하여 보여주는 것으로 종료된다. 데이터 마트에 저장된 데이터를 Python의 데이터 프레임으로 불러와 간단한 전처리를 거친 후 시각화하여 보여주는 예제인 셈이다.결과

비록 결과물은 단순하지만 중요한 것은 데이터 파이프라인 간 유기적인 구성 및 각 노드를 담당하는 솔루션의 활용법일 것이기에 이 책은 그런 목적을 달성할 수 있도록 충실히 잘 따르고 있다.

그렇기에 데이터 파이프라인을 거쳐 AI 모델링으로 이어지는 부분은 생략되어 있다. 이 부분까지 진행하면 빅데이터 파이프 라인에 집중하는 데 너무 분량이 많아지고 집중력을 떨어뜨릴 수 있기에 적절한 구성이라 생각한다.

그럼에도 한가지 아쉬운 점은 빅데이터 시스템을 구성하는 데 있어 카프카, 하둡, 스파크 각각을 설치하는데 호환성 측면에서 문제가 없는지 사전에 파악하는 방법이나 유의할 점이 소개되었으면 더 좋겠다는 생각이 든다.

책에 소개된 버전 간의 호환성은 문제가 없지만 결국 수년의 세월이 흐르면 독자들은 다시 새로운 버전의 에코 시스템을 구성하게 될 것이고 그 때 호환성에 관한 저자의 시행착오나 노하우가 소개되어있다면 큰 도움을 받을 수 있을거라 생각하기 때문이다.

아무튼 이 책은 빅데이터 시스템을 밑바닥에서 구축해보고 그 안에 숨은 매커니즘을 상세히 이해할 수 있게 도와주는 훌륭한 양서이다. 빅데이터 시스템에 관심이 있거나 파이프 라인을 구축하고 싶지만 지식이 전무한 독자에게 추천하고 싶다. 빠른 시간 내에 빅데이터 시스템의 큰 틀을 이해하는 데 많은 도움을 받을 수 있으리라 생각한다.




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
파이썬 라이브러리를 활용한 데이터 분석
웨스 맥키니 지음, 김영근 옮김 / 한빛미디어 / 2023년 5월
평점 :
장바구니담기


데이터 분석이나 AI 분야에 필요한 Python을 활용하는 기법의 핵심만 잘 정리한 책으로 여러 대학의 교과서로 채택된 만큼 관련 목적으로 가장 먼저 읽을 것을 권하고 싶은 책이기도 하다.

데이터 과학이 세간의 정의대로 “프로그래밍 + AI + 도메인”의 융합 분야라 가정한다면 이 책은 그 중 프로그래밍의 스킬을 습득하는 데 큰 도움이 되는 책이다.

AI분야에서 가장 인기있는 언어는 Python이며 Python의 기본 문법은 물론 라이브러리를 쉽고 빠르게 익히고 싶다면 가장 먼저 이 책을 읽을 것을 추천하고 싶다. 개인적으로는 몇년 전 2판을 보고 매우 큰 도움을 얻을 수 있었다. 이미 세계 유수 대학에서 교재로 활용되고 있거니와 AI 분야에 처음 진입하는 입문자에게 추천이 끊이지 않는 책이기도 하다.

2판과 기본적인 내용은 매우 유사하다. 다만, Python 3.11의 최신 버전을 기준으로 예제 코드들이 작성되어있다는 점이 다른 부분이다. 아무래도 2판은 3.6 버전이었기에 그새 추가된 편의 기능이 상당하다. 기타 부록이나 groupby와 내용 등 부분적으로 내용이 풍부해진 점도 눈에 띄였다.

기본적인 책의 내용 및 이 책만이 가지고 있는 특징을 중심으로 간단하게 책을 소개해보고자 한다.

우선 1 ~ 3장은 Python의 기초 지식에 대해 설명한다. Python의 현 위치, 기초 문법 및 내장 자료구조, 주피터 노트북을 다루는 방법이 소개되어있다.

Python은 R과 같은 특수목적 언어가 아니라 범용 언어이기 때문에 연구 및 포팅 과정을 분리할 필요없고 Glue 코드로 C언어와 같은 저수준 호환이 가능하여 데이터 분야에 지속적인 성장중이라는 사실과 GIL과 같은 단일스레드 특성 그 외에도 오늘날 Python의 위상을 가능케한 강력한 라이브러리 - Numpy, Pandas, SciPy, scikit-learn 등 -의 개요를 소개하고 설치 및 간단한 예제를 실습한다.

이어서 Python 실습 환경 중 가장 애용되는 주피터 노트북을 실습한다. “?”를 통해 객체의 정보를 얻는 등의 팁도 소개되어있다. 맨 뒤 부록편에 IPython의 심화과정이 이어지니 이미 주피터 노트북을 많이 다뤄본 독자라면 부록편을 먼저 읽는 것도 나쁘지 않을듯하다.IPython

부록편에는 알아두면 매우 유용한 단축키, 매직명령어, 명령어 히스토리, 북마크 기능 등이 소개되어있어 제대로 익히면 개발 속도를 몇 배는 높일 수 있을 것이다.

개인적으로는 대화형 디버깅 및 프로파일링 기능에 대한 소개가 큰 도움이 되었다. 간결한 예제로 그대로 따라하니 쉽고 빠르게 주피터 환경에서의 디버깅이 가능했다. 그동안 이 방법을 잘 몰라 Pycharm에 크게 의존했었는데 이제 툴 가리지 않고 이런 편리한 기능을 습득할 수 있어 만족스러웠다.

1 ~ 3장의 가장 만족스러운 부분은 Python의 기초 문법과 내장 기능을 매우 잘 정리한 것이다. 자주 활용되는 예제로 매우 빠르게 습득할 수 있게 구성되어있고 특히 자주 실수하는 부분 다른 언어와의 다른 특성으로 인해 개발자들이 실수하는 부분을 중심으로 핵심만 매우 잘 뽑아냈다는 생각을 들게 했다.

isinstance(), iter(), is, pass, range() 등 Python의 독특한 기능들이 확실히 구별하여 익힐 수 이게 잘 구성되어있고, 튜플이나 리스트 자료형에서 *_로 불필요한 변수를 버리는 관습, 슬라이싱 및 step, items()와 zip(), 중첩 리스트 컴프리헨션, 다중 값 반환, 제너레이터 등의 기능이 소개된다.

묵직한 기본서로 착실히 기본 문법을 습득하는 것도 중요한 일이지만 다른 언어에 정통한 경력자 같은 경우 이 책에서 소개하는 정도로만 빠르게 문법을 익히고 AI 프로젝트에서 필요 시 마다 문법을 찾아 적응하는 top-down방식도 나쁘지 않은 습득방식이라 생각한다.

4장 이후로는 본격적인 데이터 분석에 필요한 기법들이 소개된다. 4장은 NumPy가 소개되는데 선형대수 및 행렬 연산을 위해 데이터 분석에서 가장 많이 쓰이는 라이브러리 중 하나이다.

사실상 5장 이후로 대부분 가독성 좋고 분석가 지향의 Pandas를 주로 사용하지만 간간히 데이터 변환을 위해 Numpy를 사용하는데 이를 위해 필요한 최소한의 연산 기법만 소개하고 있다.

그 수준을 벗어나는 내용은 부록A에 따로 정리되어있다. 비록 부록에 들어있지만 대부분의 실전에서는 오히려 부록에 있는 내용들이 더 많이 활용된다.

자주 활용하다보면 중요성을 알게 하는 stride 개념과 브로드캐스팅, 타 언어와의 호환, ufunc 메소드 및 성능에 관한 팁 등이 소개되어있는데 특히 타 언어의 호환이나 성능과 관련된 조언은 향후 많은 도움이 될 것 같다.

어쨌든 4장에서 소개하는 NumPy는 기본적인 행렬 연산 및 Vectorization이라 흔히 칭하는 반복문을 피하는 방법 정도만 소개되어있어 쉽고 빠르게 익힐 수 있다.

5장은 이 책의 가장 중요한 라이브러리인 Pandas를 소개한다. 이 책이 다루는 대부분의 데이터 형태는 tabular이기에 가장 많이 활용되는 라이브러리는 Pandas가 된 것 같다. 비정형은 대부분 딥러닝의 영역이고 일반적인 데이터 분석과는 다른 영역으로 인식하기에 딥러닝과 직접적으로 관련된 부분 - 텐서플로, 파이토치, 비정형데이터 등 - 은 다뤄지지 않는다.

tabular 데이터 - 이 책은 structed data 라고 표현한다. - 는 대부분 우리가 일상에서 가장 접하기 쉬운 구조를 갖고 있다. 즉, 엑셀이나 보고서에서 흔히 보는 표 형태의 데이터라고 생각하면 이해하기 쉬울 것이다. Pandas는 이런 형태의 데이터를 가공, 분석하는데 굉장히 편리한 기능을 제공한다.

5장은 Series, DataFrame의 사용법을 주로 다룬다. loc, iloc을 통한 접근 및 색인 방법이나 apply를 통한 가공 그리고 기술 통계를 위한 활용법을 다룬다.

앞서 기초 문법 영역에서도 언급했지만 기본 문법을 배우고 실전에서 흔히 겪는 문제들을 미리 언급해 둔 부분이 마음에 든다. 예를 들어 연쇄 색인이나 정수 색인의 함정을 언급한 파트가 그러하다.

다른 기본서를 통해 문법을 익혔을 때는 대부분 그런 설명이 없어 실전에서 꽤 시간을 소모하거나 당황한 적이 있는데 이 책은 기본 지식만 전달하는 것 이상으로 흔히 발생할 수 있는 오류나 부가 설명이 함께 설명되어 있어 실전에서의 시행착오를 크게 줄여준다.

결국 Pandas등으로 데이터 분석을 한다고 해도 결국은 DB, File등으로 부터 데이터를 I/O하는 것은 피할 수 없는데 6장에는 그런 입출력에 관한 정리가 담겨있다. read_csv로 읽어들이거나 읽는 방식이나 옵션을 제어하는 방법들이 기술되어있다. 특히 beautifulsoup 등을 이용해 웹 스크레이핑하는 방법 및 XML, DB와의 IO도 간략히 소개되어있다.

7 ~ 8장, 10장은 전처리에 주로 활용되는 데이터 정제, 가공에 자주 쓰이는 기법들이 소개되어 있다. 결측치를 제거하거나 대체하는 방법, 샘플링, 더미화, Join, Merge, groupby 등의 기법이 그러한 예이다.

개인적으로 SQL에 친숙해진 나의 경우 Python의 유연함이 오히려 독이었다. 같은 2차원이라고는 하지만 SQL의 경우 열에 해당하는 차원은 유일하며, 고정이었기에 다양한 인덱스 및 열이 존재하는 DataFrame 객체는 가공하기 은근히 까다로웠다.

reset_index, set_index, drop 등의 기능을 이 책을 통해 쉽게 익히고 개념을 잡을 수 있었다. 새롭게 알게된 가공 기술은 SQL때 하지 못했던 세부적이고 정밀한 가공을 가능하게 해줘으니 이 부분 또한 이 책에 가장 고마운 부분 중 하나이다.

9장은 matplotlib이나 seaborn을 활용한 기본적인 시각화를 다룬다. 산포도나 히스토그램 등 가장 흔하게 사용하는 형태 몇가지를 범례, 축, 주석, 눈금 등을 셋팅하는 수준으로만 다루고 있어 그 이상의 정보는 필요할 때마다 다른 전문도서를 참조하는 것이 좋다. 뒤에 13장에 여러 실전 프로젝트 예시가 등장하는데 그때 이해할 수 있는 수준의 지식 정도만 다루고 있다.시각화

11장은 시계열과 관련된 데이터 가공, 연산 기법을 다룬다. datetime, timedelta 등으로 다양한 예제를 처리하다보면 금방 감이 온다. 시간 데이터가 들어오면 데이터 가공은 정말 까다로워진다.

특히, 날짜를 시프트하거나, 서로 다른 타임존을 일치시킨다거나, 리샘플링, 이동평균값 산정 등에 있어서 까다로운 편인데 예전에 Pandas의 기능을 충분히 알지 못해 직접 일일이 기능을 개발했던 경험이 있다. 이후 Pandas가 제공하는 편리한 라이브러리를 활용하고 나서 시계열은 되려 SQL로 처리하지 못하게 되는 불상사(?)가 일어나기도 했다.리샘플링

아무튼 이 책은 그간 시계열을 통해 겪었던 매우 잦은 시행착오들을 번복하지 않도록 필요한 기능을 잘 추려 설명하고 있다는 점이 또 하나의 장점이다.

12장은 전통 통계기법 라이브러리인 statsmodels로 기본 모델링을 하는 방법을 다룬다. 솔직히 개인적으로는 statsmodels를 실전에서 써 본 경험이 없다. 데이터가 대용량으로 축적되고 나서 전통적인 통계 모델을 효용가치가 많이 줄어든 것 같다.

물론 사이킷런이나 딥러닝 프레임워크의 비약적인 발전과 비정형 데이터에서의 뛰어난 성능이 statsmodels를 더욱 소외받게 만든 이유도 있는 것 같다.

빅데이터, AI 시대에 엄밀함과 추정 및 검정은 확실히 중요도가 줄어든 면은 있지만 어쨌든 이 책에서는 데이터 분석이나 모델링 보다는 Python 기술을 익히는데 초점을 맞추고 있기에 목적에 충실하고자 간단한 모델링의 샘플을 보여주고자 이 챕터를 수록한 것 같다.

13장은 본격적으로 지금까지 배운 기술들을 종합하여 실전 데이터 분석을 진행해본다. 가급적이면 각 예제를 대충 살펴보고 궁극적으로 원하는 데이터가 무엇인지 살펴본 후 책을 참조하지 않고 직접 분석 작업을 진행해 볼 것을 권한다.실전

1 ~ 12장을 익혀 꽤나 자신감을 얻었음에도 실전 문제를 푸는 것은 정말 녹록치 않음을 느낄 것이다. 그러한 깊은 고민이 거듭된 뒤 이 책의 예제를 통해 해결책을 찾는다면 그동안 배운 파편화된 지식들이 연결되는 느낌을 받을 것이고 실전에서 강력한 문제해결 능력을 갖게 도와줄거라 생각한다. 개인적으로는 그런 방법으로 많은 도움을 받았다.

책 내용 외 구성상의 특징으로는 개인적으로 빛 번짐 방지 처리가 된 것이 너무 마음에 들었다. 한빛미디어 책은 거의 모든 것이 늘 마음에 들었는데 딱 한가지 아쉬운 부분이 가끔 종이 재질에 따라 형광등에 빛이 반사되어 책이 잘 보이지 않는 현상이 있었는데 이번 책은 번짐 현상이 전혀 없어 집중해서 편안하게 읽을 수 있었다.

또, 비록 이번 판이 컬러 인쇄판은 아니지만 시각화는 1개 챕터만 차지하고 있고 그 외 내용은 음영처리로도 충분히 시각적으로 이해하는 데 문제가 없었기에 오히려 흑백으로 인쇄하여 보다 저렴한 비용으로 많은 독자들이 읽을 수 있는 기회를 얻는 것이 좋다고 생각한다. 이런 저런 측면에서 내용 뿐만아니라 구성상으로도 100점을 주고 싶을 만큼 마음에 쏙 드는 책이다.

언제고 이 책을 꼭 한 번 리뷰해보고 싶었지만 수 년간 엄두도 못내다가 이번 3판 발간을 계기로 쭉 한 번 정리해볼 수 있어서 즐거웠다. 리뷰가 너무 길어져 독자분들이 참조하시기에는 불필요한 말들이 너무 많아졌지만 700페이지에 육박하는 책을 그래도 조금 자세히 들여다 보는 계기를 만들고 싶은 욕심을 양해해주시기 바란다.

아무튼 AI, 데이터 분야에 Python을 활용하기로 마음을 먹고 진입하기로 결정했다면 가장 먼저 읽을 것을 추천하고 싶은 책은 이 책이다. 그 외 필요한 것들은 해당 분야에 정통한 책을 읽어가면 자연스레 살이 붙게 될 것이다. 더불어 AI나 모델, 통계, 수학에 능숙하지만 Python 프로그래밍이 두려운 분들이 쉽게 Python에 정착하는데도 이 책은 많은 도움을 줄 수 있을것이다.




댓글(0) 먼댓글(0) 좋아요(0)
좋아요
북마크하기찜하기 thankstoThanksTo
 
 
 
과학의 위로 - 답답한 인생의 방정식이 선명히 풀리는 시간
이강룡 지음 / 한빛비즈 / 2023년 4월
평점 :
장바구니담기


진리의 세계에서 숨쉬는 과학, 수학을 인문학적 표현으로 일상으로 끌어오고자 노력한 책.

다년간 과학과 수학에 심취하며 깨달은 결과를 독자와 공유하는 책으로 인문학 전문가 특유의 표현으로 전달하고자한 시도가 인상적인 책이다.

이 책을 읽으며 가장 만족스러웠던 부분은 과학의 즐거움에 심취할 수 있었다는 점이다. 약간의 수학과 과학에 흥미를 느끼는 이라면 아마 앉은 자리에서 손떼지 못하고 단숨에 책을 끝까지 읽게 될 것 같다.

나 역시 화장실을 잠시 다녀오는 시간을 제외하고는 책에 손을 떼지 못했다. 아마 과학이나 수학에 크게 관심없는 사람일지라도 적어도 초반 1장 정도는 흥미진진하게 빠져들지 않을까 싶다.

책이 재미있는 이유에는 어려운 과학을 쉽게 풀어주는데 있는 것 같다. 첫째로 작가가 다년간 어려운 지식들을 확실히 이해하고자 노력한 과정이 축약되어 우리에게 조금 더 쉽게 전달할 수 있는 능력을 얻은 것 같고, 둘째로 작가가 인문학에 정통하기에 진리에 인접한 심오한 영역을 전달하는 능력에 있는 것 같다.

저자는 과학과 진리를 쉽게 이해시키려는 시도에 그치지 않고 그 안에서 얻은 깨달음도 공유한다. 인생과 닮은 부분이나 사람이 사회안에서 살아가며 행동하는 원리 또한 과학과 유사한 점이 많다는 것을 삶과 엮는다.

이런 깨달음은 엄밀히 수학적으로 정의된 것들은 아니지만 사람이 살면서 느끼는 경험으로 비추어 볼 때 대부분 사실이 아닐까 싶다. 또한 사실 여부를 떠나서 중요한 것은 인생을 바라보는 관점을 풍부하게 만들어 보다 나은 선택에 도움을 준다는데 의미가 있는 듯 하다.

아무튼 개인적으로 흥미를 느꼈던 부분은 꽤 방대한 과학과 수학의 지식을 쉽고 재미있게 전달해주는 저자의 전달력이다. 무한과 유한의 속성에 대한 통찰이 수록된 도입부는 이 책을 쉬지 않고 단숨에 읽게 만드는 좋은 포문이었다.

그 안에도 여러 주제가 등장하지만 에릭칸토어의 집합론과 무한급수 개념의 좋은 예인 제논의 역설 등이 그 예이다. 처음 제논의 역설을 접했을 때는 충격 그 자체였다. 분명히 틀린 것은 알겠는데 논리적으로 반박하는 것이 쉽지 않았다.

제논의 역설
아킬레우스가 거북이보다 10배 빨리 이동할 수 있다고 가정하고, 아킬레우스보다 거북이를 100m 앞에서 출발 시킨다. 아킬레우스가 100m를 달려가면 거북이는 10m를 가고, 거북이를 따라잡기 위해 아킬레우스가 10m를 가면 그동안 거북이는 1m를 나아간다. 아킬레우스가 거북이를 따라잡기 위해 달리는 동안 거북이 역시 움직이므로 아킬레우스는 영원히 거북이를 따라잡을 수 없다.

이는 무한급수 개념이 정립되며 무한이 유한으로 바뀌며 해결된다. 0.9999…가 1과 같다는 것도 그 예이고 책에 등장하는 시각형 면적을 무한으로 더하는 예도 비슷한 예이다.

무한사각형

파이(π)가 무한한 과정으로 숫자가 이어진다고 해서 숫자 4보다 클 수 없는 논리와도 같다. 놀라운 것은 저자가 이런 흥미로운 사실들을 전달하는 난이도와 양에 있는데 책 지면 2페이지 안으로 모든 개념과 답을 일상의 언어로 서술하고 있어 이 정도면 스토리 빠른 전개를 추구하는 요즘 대중들의 요구를 사이다처럼 해소시켜 주지 않을까라는 생각이 들었다.

영화 인터스텔라와 유사한 느낌이었다. 이렇게 어려운 내용을 알기 쉽게 전달하고 그것도 영화나 소설처럼 재미있게 전달할 수 있다는 것은 확실히 비범한 능력이라는 생각이 들었다.

칸토어의 집합론도 마찬가지이다. 무한대끼리도 크기 비교가 어느정도 가능하다는 연속체의 농도(알레프) 개념을 이렇게 쉽게 설명하는 책은 처음인 것 같다. 심지어 알레프나 농도라는 말은 책에는 등장하지 않는다.

자연수 1,2,3,4,…와 짝수 2,4,6,8,.. 집합은 둘 중 어느쪽이 클까?

상식적으로 자연수는 짝수와 홀수의 집합이 합쳐졌다 생각하기에 직관적으로는 두 집합이 같다고 생각하기는 어렵다.

하지만 장미를 로즈라고 하든 ROSE라고 하든 정의 자체에 상관이 없는 것처럼 1을 t로, 2를 z로, .. 이런식으로 숫자를 원하는 다른 기호 혹은 명칭으로 대체가 가능하다. 즉, 자연수 집합을 2,4,6,8,…으로 표기해도 문제가 없다는 이야기인데 이를 통해 두 집합의 크기가 같다는 것을 알 수 있다.

무한과 유한은 도대체 무엇이기에 그리고 이산과 연속은 또 어떻게 개념적으로 얽혀있는 것인지? 어쩌면 무한을 유한으로 바꿔가는 과정이 우리가 진리를 향해 나아가는 이유일지도 모르겠다. 빛의 기본 단위를 광자로 이산화 시키고, 에너지의 기본 단위마저 끊어낼 수 있는 현대 과학의 진척처럼 말이다.

저자의 여행은 이후로도 계속된다. 세상에서 가장 아름답다는 오일러의 공식이나 맥스웰 방정식도 소개된다.맥스웰 방정식

“몇제곱이냐?”를 의미하는 로그를 왕에게 제법 큰 보상을 받기위해 머리쓰는 농부의 예제에 빗대기도 한다. 첫날은 쌀 2톨 주시고 다음날은 4톨, …을 원한다고 할 때 10만 톨을 받기위해 필요한 날짜를 계산한다면 간단히 log2(10만)으로 표기할 수 있게 된다.

사실 로그는 개인적으로 생각이 많다. 괜히 수식 계산에 의미가 없는 형상 log라는 기호가 더해지면서 상징 기호를 하나 더 만든것은 아름답지 못하다고 생각한다. 다만, 로그는 혼자 있을때는 별 것 없지만 둘 이상의 숫자를 비교하는 경우 큰 의미가 있다.

지수적 폭발에서 해방시켜주고 저자의 표현처럼 곱셈의 세상을 순간적으로 덧셈의 세상으로 바꿔주기 때문이다. 2는 1이되고, 8은 3이 되니 효과가 작아보이지만 10억에 가까운 1073741824은 고작 30이 되니 천문학적인 세계에서는 엄청난 도구가 된다.

저자가 전달하는 삼각함수의 표현 역시 훌륭하다. 동그란 시계에서 시침만 있다 가정하고 그 바늘이 12시에서 1시가 되면 시침의 높이는 조금 줄어든다. 이렇게 3시, 6시 등을 거치며 높이는 1 ~ -1 사이를 움직이게 되는데 이 그래프가 바로 sin 함수가 된다.

이 sin 그래프의 순간 순간 기울기 즉, 변화율을 구한 미분값이 cos함수 그래프가 된다. 즉, sin을 미분하면 cos가 되는 셈이다.삼각함수

그 외에도 빠르게 움직이는 물체는 공간속의 속도가 빨라지니 그만큼 시간속의 속도는 줄어들어 시간이 천천히 흐른다는 특수 상대성 이론이나 인터스텔라에서의 예시와 같이 중력이 큰 곳에서는 시간이 천천히 흐른다는 등 어려운 과학 개념을 상식적인 사례, 간단한 실험, 예시 등으로 쉽게 전달하고 있어 적잖이 놀랐다.

또, 빛을 입자적으로 표현하면 광자라 칭하고, 파동으로 표현하면 전자기파라고 표현하며, 어떨때는 전자파라는 언어로 표현되어 인체에 해로울 것 같다는 인상을 주는 다양한 과학적 표현들이 결국 빛 하나와 동일한 단어라 정리하는 시각에도 놀랐다.

단위와 정의를 확실히하여 개념으로 이어지고 속력과 속도의 단어 차이에 대해 비평하며 복잡한 것을 단순하게 만들어 독자 상상속에서 벌어지는 공포를 줄여주는 온갖 시도는 독자로 하여금 순수한 진리 탐구의 재미를 향한 여행을 지속 가능하게 해주는 느낌이다.

10년전 칼세이건의 코스모스를 책으로도 접하고 영화로도 접했던 나는 저자가 책에 담은 전율을 생생하게 느낀 또 하나의 독자이기도 하다. 갈릴레이 이후 지금까지의 시간은 빅뱅 후 우주의 역사는 1년이라고 가정했을 시 겨우 1초의 시간이다.

겨우 그 1초의 시간안에 벌어진 과학의 대모험 중 천문학, 물리학, 생물학, 화학 등 가릴 것 없이 굵직한 주제들을 250여 페이지 동안 여행한다는 것은 불가능에 가까울텐데 저자는 일상의 언어로 충실히 해내고 있다.

정리하자면 저자가 책 말미에 표현했든 인생사 새옹지마인것 같다. 우연처럼 다가오는 일에는 항상 노력이 이미 기다리고 있었다.

스스로를 수포자로 단정짓고 운명처럼 혹은 우연처럼 다가오는 진리탐구의 재미와 벅차오름을 원천 차단하는 것은 너무 불행한 일이 아닐까? 그렇기에 수학과 과학에 전혀 관심 없는 독자일지라도 이 책만큼은 한 번 쯤 권해보고 싶다.




댓글(0) 먼댓글(0) 좋아요(2)
좋아요
북마크하기찜하기 thankstoThanksTo