프로그래밍을 할 땐 비법과 요령이 필요합니다. 작은 요령 하나가 시간을 아껴줄 뿐 아니라 결과물의 질도 높입니다. 단축기나 기능추가(add-on) 같은 요소는 별 것 아니게 느껴지지만 생산성을 끌어올리는 데 확실히 도움이 됩니다. 그래서 이번 포스팅에서는 제가 가장 좋아하는 파이썬 데이터 분석 비법과 요령을 공유하려 합니다. 대부분 널리 알려진 것이지만, 몇 가지는 낯설 수 있습니다. 그래도 한 번 접해보시면 이후 데이터 분석 프로젝트에서도 즐겨 사용하게 되실 거라 확신합니다.
1. 판다스 데이터프레임(Pandas Dataframe) 기술 통계 추출 및 탐색적 분석
Profiling이라는 건, 내 앞에 있는 데이터를 잘 이해하기 위한 과정입니다. Pandas Profiling은 그것을 위해 존재하는 패키지입니다. 판다스 프로파일링을 사용하면 Pandas dataframe 형식의 데이터를 쉽고 빠르게 탐색적으로 분석(EDA, exploratory data analysis)할 수 있습니다. df.describe()와 df.info()functions는 EDA를 하고자 할 때 가장 먼저 사용되는 코드입니다. 그러나 이 코드가 제공하는 결과물은 데이터에 대한 아주 개괄적인 정보에 불과하여 대규모 데이터셋(data set)에 대해서는 큰 인사이트를 도출해내기 힘듭니다. 반면 df.profile_report()이 한 줄의 코드는 매우 많은 정보를 제공해줄 뿐 아니라 그 리포트를 상호작용이 가능한(interactive) HTML로 출력할 수 있게 해줍니다.
데이터가 주어졌을 때 pandas profiling package는 아래의 통계치를 계산합니다.
설치
pip install pandas-profiling or conda install -c anaconda pandas-profiling
사용
익히 알려진 타이타닉 데이터셋을 사용해 파이썬 프로파일러의 다재다능한 기능을 알아봅시다.
#importing the necessary packages import pandas as pd import pandas_profiling#Pandas-Profiling 2.0.0 df = pd.read_csv('titanic/train.csv') df.profile_report()
Jupyter notebook에 위와 같은 스크립트를 입력했습니다. 마지막 한 줄만으로 아래와 같은 풍성한 데이터 프로파일 리포트가 출력되는 겁니다.
또한 아래의 코드를 통해 리포트는 상호작용 가능한 interactive HTML 파일로도 출력할 수 있습니다.
profile = df.profile_report(title='Pandas Profiling Report') profile.to_file(outputfile="Titanic data profiling.html")
상세한 내용과 사례를 보고 싶다면 공식문서를 참고하십시오.
2. 판다스 플롯(Pandas Plots) 상호작용 가능(Interactive)하게 만들기
Pandas에는 DataFrame 클래스 내에 .plot() 메서드가 내장되어 있습니다. 그러나 이 메서드로 렌더링되는 시각화 툴은 상호작용이 불가능하고, 때문에 덜 매력적으로 보입니다. 대신 .plot()는 차트를 확실히 쉽게 그릴 수 있는 방법이긴 합니다. 만약 코드를 코드를 크게 수정하지 않고도 pandas로 plotly처럼 상호작용이 가능한 차트를 그릴 수 있다면 어떨까요? Cufflinks 라이브러리를 활용하면 그렇게 할 수 있습니다.
Cufflinks 라이브러리는 그래프를 쉽게 그릴 수 있게 해주는 pandas의 유연성(flexibility)과 plotly의 강력함을 통합한 라이브러리입니다. 라이브러리를 설치하는 방법과 pandas를 통해 작동하는 방법을 알아보겠습니다.
설치
pip install plotly # Plotly is a pre-requisite before installing cufflinks pip install cufflinks
사용
#importing Pandas import pandas as pd #importing plotly and cufflinks in offline mode import cufflinks as cfimport plotly.offline cf.go_offline() cf.set_config_file(offline=False, world_readable=True)
Titanic 데이터셋이 펼치는 마법을 보시겠습니다.
df.iplot()
위 이미지 우측의 시각화는 정적인(static) 차트입니다. 반면 좌측 차트는 상호작용이 가능(interactive)하고 보다 상세하게 정보를 전달합니다. 그리고 이 모든 게 큰 문법(syntax) 수정 없이 가능합니다.
보다 많은 사례를 확인하려면 여기를 클릭하세요.
3. Jupyter Notebook에서 제공하는 마법의 명령문(Magic Commnad)
마법의 명령문(Magic command)은 Jupyter Notebook에서 제공하는 일군의 함수들입니다. 이것들은 일반적인 데이터 분석에서 흔히 발생하는 문제들을 해결하기 위해 설계되었습니다. %lsmagic의 도움을 받아 가능한 마법의 명령문을 확인할 수 있습니다.
마법의 명령문들은 두 가지 종류가 있습니다: 첫 번째는 line magics인데, 이건 앞에 "%"가 붙고 단일한 입력 라인에서 작동합니다. 그리고 cell magics는 이중 "%%"를 붙임으로써 작동하고 여러 입력 줄에서 작동합니다. 마법의 함수들은 1로 설정하면 최초 %를 입력하지 않고도 호출할 수 있습니다.
일반적인 데이터 분석 과업에서 유용하게 써먹을 수 있는 매직 함수를 좀 알아봅시다.
% pastebin
%pastebin는 코드를 Pastebin에 업로드하고 URL을 반환합니다. Pastebin은 온라인 콘텐츠 호스팅 서비스인데 여기에 우리는 소스 코드뭉치(snippet)과 같은 텍스트를 저장하고 그 URL을 타인들과 공유할 수 있습니다. 사실 Github가 version 관리가 가능하긴 하지만 그 핵심(gist)은 pastebin과 유사합니다.
아래와 같이 file.py 라는 파이썬 스크립트가 있다고 생각해봅시다.
#file.py def foo(x): return x
Jupyter Notebook에서 %pastebin를 사용하여 pastebin url을 생성합니다.
%matplotlib notebook
%matplotlib inline 함수는 Jupyter notebook 내에 정적인 matplotlib 그래프를 렌더링하기 위해 사용합니다. inline 부분을 notebook으로 바꾸어서, 줌(zoom)가능하고 사이즈를 바꿀 수 있는 그래프를 그릴 수 있습니다. matplotlib 라이브러리를 import하기 전에 이 함수부터 호출하십시오.
%run
%run 함수는 python 스크립트를 노트북 내부에서 실행합니다.
%run file.py
%%writefile
%%writefile 은 셀의 내용을 file로 write합니다. 여기 이 코드는 foo.py라는 이름의 파일로 write되고 현재 디렉토리에 저장됩니다.
%%latex
%%latex 함수는 셀의 내용을 LaTeX로 렌더링합니다. 이 함수는 셀 안에 수학 공식을 작성하거나 방정식을 작성할 때 유용합니다.
4. 오류를 쉽게 발견하고 정정하기
Interactive debugger 역시 마법의 함수 중 하나이지만, 별도의 꼭지로 작성했습니다. 만약 코드 셀을 실행하는 중에 예외(exception)을 만나게 되면 새로운 줄에 %debug를 입력하고 실행해보십시오. 그러면 상호작용 가능한 디버깅 환경이 열리고 어디에서 exception이 발생하였는지 보여줄 것입니다. 그 프로그램에 할당된 변수의 값도 확인할 수 있으며 조작도 할 수 있습니다. 디버깅 모드를 종료하려면 q를 치면 됩니다.
5. Dict.나 JSON 형식(Type)의 데이터 가독성 좋게 출력(Print)하기
데이터 구조를 미학적으로 보기 좋게 표현하고 싶다면 pprint가 가장 적합한 모듈입니다. dictionary나 JSON 데이터를 print할 때 특히 더 유용합니다. 데이터를 출력하기 위해 print와 pprint를 사용하는 사례를 비교해보겠습니다.
이런 코드뭉치(snippet)들을 알아두면 어떤 기능을 구현하기 위해 StackOverFlow를 들락날락하는 일을 훨씬 줄일 수 있을 겁니다. 아직 못 다 전한 치트키가 많이 있는데요, 다음 포스팅에서 추가로 몇 개 더 알려드릴게요.
'Programming > Code Archive' 카테고리의 다른 글
[파이썬Python-웹 스크래핑] 채용공고 내 단어 출현빈도 분석하고 시각화 feat.자연어처리 (1) | 2022.01.01 |
---|---|
[파이썬Python] 데이터 분석을 빠르고 수월하게 해주는 치트키 5개_2탄 (2) | 2021.09.15 |
[파이썬Python] 코딩 속도를 높여줄 필수 코드(code snippet) 20개 (3) | 2021.09.11 |
[파이썬Python] 초심자가 알아야 할 네 가지 유용한 기능 (0) | 2021.09.10 |
[파이썬Python] 한국과 미국주식 종목코드와 종목명, 업종(섹터)추출하기 (0) | 2021.07.27 |
댓글