파이썬의 데이터 시각화 방법에 대한 짧은 소개
때로는 차트 및 플롯과 같은 시각적 형태로 볼 수 있을 때까지는 데이터가 의미가 없습니다.
자신과 다른 사람을 위해 데이터 샘플을 빠르게 시각화 할 수 있는 것은 응용 통계와 응용 머신러닝 모두에서 중요한 기술입니다.
이 튜토리얼에서는 Python에서 데이터를 시각화 할 때 알아야 할 5가지 유형의 플롯과 이를 사용하여 자신의 데이터를 더 잘 이해하는 방법을 알아봅니다.
이 자습서를 완료하면 다음을 알 수 있습니다.
- 선 플롯(Line plot)을 사용하여 시계열 데이터를 차트로 만들고 막대 차트를 사용하여 범주형 수량을 차트로 만드는 방법.
- 히스토그램과 박스 플롯으로 데이터 분포를 요약하는 방법.
- 산점도가 있는 변수간의 관계를 요약하는 방법.
튜토리얼 개요
이 튜토리얼은 다음과 같이 일곱 부분으로 나뉩니다.
- 데이터 시각화
- 매트플롯립(Matplotlib) 소개
- 선 플롯
- 막대 차트
- 히스토그램 플롯
- 박스(Box)와 턱수염(Whisker) 플롯
- 산점도(Scatter plot)
데이터 시각화
데이터 시각화는 응용 통계 및 머신러닝에서 중요한 기술입니다.
통계는 실제로 데이터의 정량적 설명과 추정에 중점을 둡니다. 데이터 시각화는 질적 이해를 얻기 위한 중요한 도구 모음을 제공합니다.
이는 데이터 세트를 탐색하고 파악할 때 유용할 수 있으며 패턴, 손상된 데이터, 이상값 등을 식별하는 데 도움이 될 수 있습니다. 약간의 도메인 지식이 있으면 데이터 시각화를 사용하여 연관성이나 중요성의 척도보다 자신과 이해 관계자에게 더 직관적인 플롯 및 차트의 주요 관계를 표현하고 시연할 수 있습니다.
데이터 시각화 및 탐색적 데이터 분석이 전체 분야이며 마지막에 언급 된 일부 책에 대해 자세히 살펴 보는 것이 좋습니다. 이 자습서에서는 데이터를 더 잘 이해하는 데 사용할 수 있는 기본 차트와 플롯을 살펴보겠습니다.
다음과 같이 기본 데이터 시각화를 위해 잘 알아야 할 5가지 주요 플롯이 있습니다.
- 선 플롯
- 막대 차트
- 히스토그램 플롯
- 박스와 턱수염 플롯
- 산점도
이러한 플롯에 대한 지식이 있으면 접하는 대부분의 데이터를 빠르게 정성적으로 이해할 수 있습니다.
이 튜토리얼의 나머지 부분에서는 각 플롯 유형을 자세히 살펴볼 것입니다.
매트플롯립 소개
Python에는 훌륭한 플롯 라이브러리가 많이 있으며 표현 가능한 그래픽을 만들기 위해 탐색하는 것이 좋습니다.
개인적 용도의 플롯의 경우 matplotlib 라이브러리를 사용하는 것이 좋습니다. Pandas와 같은 상위 수준의 라이브러리에서 다른 많은 플롯 라이브러리 및 플롯 지원의 기초입니다.
matplotlib는 이미지를 표시하거나 파일에 저장하기 전에 하나 이상의 플롯을 그릴 수 있는 컨텍스트를 제공합니다. 컨텍스트는 pyplot의 함수를 통해 액세스 할 수 있습니다. 컨텍스트는 다음과 같이 가져올 수 있습니다.
이 컨텍스트를 가져 와서 plt라는 이름을 지정하는 규칙이 있습니다. 예를 들어:
우리는 이 규칙을 사용하지 않고 대신 표준 Python 가져오기 규칙을 고수할 것입니다.
차트와 플롯은 컨텍스트를 만들고 호출하여 만들어집니다. 예를 들어:
axis, labels, 범례 등과 같은 요소는 이 컨텍스트에서 별도의 함수 호출로 액세스하고 구성할 수 있습니다.
컨텍스트의 도면은 show() 함수를 호출하여 새 창에 표시할 수 있습니다.
또는 컨텍스트의 도면을 PNG 형식의 이미지 파일과 같은 파일에 저장할 수 있습니다. savefig()함수를 사용하여 이미지를 저장할 수 있습니다.
이것은 matplotlib 라이브러리를 사용하기 위한 가장 기본적인 집중 과정입니다.
자세한 내용은 사용자 안내서와 자습서 끝에 있는 리소스를 참조하십시오.
선 플롯
선 플롯은 일반적으로 일정한 간격으로 수집된 관측치를 표시하는 데 사용됩니다.
x축은 시간과 같은 일정한 간격을 나타냅니다. y축은 관측치를 x축으로 정렬하고 선으로 연결된 관측치를 보여줍니다.
plot() 함수를 호출하고 규칙적인 간격에 대해 x-축 데이터를 전달하고 관측값에 대해 y-축을 전달하여 선 플롯을 생성할 수 있습니다.
선 플롯은 시계열 데이터와 관측치 사이에 순서가 있는 시퀀스 데이터를 표시하는 데 유용합니다.
아래 예제에서는 100개의 부동 소수점 값 시퀀스를 x축으로 만들고 사인파를 x축의 함수와 y축의 관측값으로 만듭니다. 결과는 선 플롯으로 표시됩니다.
예제를 실행하면 관측값 사이에 일정한 간격으로 x축을 가로질러 y축에 익숙한 사인파 패턴을 보여주는 선 플롯이 생성됩니다.
막대 차트
막대 차트는 일반적으로 여러 범주에 대한 상대적 수량을 표시하는 데 사용됩니다.
x축은 범주를 나타내며 간격이 균등합니다. y축은 각 범주의 수량을 나타내며 기준선에서 y축의 적절한 수준까지 막대로 그려집니다.
bar() 함수를 호출하고 x축의 범주 이름과 y축의 수량을 전달하여 막대 차트를 만들 수 있습니다.
막대 차트는 다수의 포인트 수량 또는 추정치를 비교하는 데 유용할 수 있습니다.
아래 예제에서는 각각 문자열 레이블로 정의된 세 개의 범주가 있는 데이터 세트를 만듭니다. 각 범주의 수량에 대해 단일랜덤 정수 값이 그려집니다.
예제를 실행하면 x축에 범주 레이블이 표시되고 y축에 수량이 표시된 막대 차트가 만들어집니다.
히스토그램 그림
히스토그램 그림은 일반적으로 데이터 표본의 분포를 요약하는 데 사용됩니다.
x-축은 관측치에 대한 이산 그룹 또는 구간을 나타냅니다. 예를 들어 값이 1에서 10 사이인 관측값은 5개의 통(bin)으로 분할될 수 있으며, 값 [1,2]는 첫 번째 bin에 할당되고 [3,4]는 두 번째 bin에 할당됩니다.
y축은 데이터셋에서 각 Bin에 속하는 관측치 수의 빈도 또는 개수를 나타냅니다.
기본적으로 데이터 샘플은 x축의 각 범주가 관측치 값의 간격을 나타내는 막대 차트로 변환됩니다.
히스토그램은 밀도 추정치입니다. 밀도 추정치는 데이터 분포를 시각적으로 설명해 줍니다. […] 아이디어는 연속적인 간격 (bin)의 시퀀스에서 관측치의 수를 계산하여 데이터 밀도를 나타내는 것입니다 …
— 11페이지, 응용 다변량 통계 분석, 2015.
히스토그램 플롯은 hist() 함수를 호출하고 데이터 샘플을 나타내는 목록 또는 배열을 전달하여 만들 수 있습니다.
히스토그램은 데이터 표본의 분포를 요약하는 데 유용합니다.
아래 예제에서는 표준 가우스 분포에서 추출한 1,000개의 난수로 구성된 데이터셋을 만든 다음 데이터셋을 히스토그램으로 플로팅합니다.
예제를 실행하면 막대의 모양이 가우스 분포의 종 모양 곡선을 나타내는 것을 볼 수 있습니다. 함수가 자동으로 bin 수를 선택했으며, 이 경우 값을 정수 값으로 그룹으로 분할하는 것을 볼 수 있습니다.
종종 그룹 수를 신중하게 선택하면 데이터 분포의 형태를 더 잘 노출하는 데 도움이 될 수 있습니다. bin의 수는 “bins” 인수를 설정하여 지정할 수 있습니다. 예를 들어 다음과 같습니다 :
박스 및 턱수염 플롯
박스 및 턱수염 플롯 또는 줄여서 박스 플롯은 일반적으로 데이터 표본의 분포를 요약하는 데 사용됩니다.
x-축은 데이터 표본을 나타내는 데 사용되며, 원하는 경우 x-축에 여러 박스 플롯을 나란히 그릴 수 있습니다.
y축은 관측값을 나타냅니다. 25번째 백분위수의 관측치에서 시작하여 75번째 백분위수에서 끝나는 데이터 세트의 중간 50%를 요약하는 박스가 그려집니다. 이것을 사분위수 범위 또는 IQR이라고 합니다. 중앙값 또는 50번째 백분위수는 선으로 그려집니다.
턱수염이라고 하는 선은 분포에서 합리적인 값의 예상 범위를 보여주기 위해 (1.5 x IQR)로 계산된 박스의 양쪽 끝에서 연장되어 그려집니다. 턱수염 외부의 관측치는 특이값일 수 있으며 작은 원으로 그려집니다.
박스 플롯은 변수의 분포를 표시하는 그래픽 기법입니다. 위치, 왜도(skewness), 스프레드, 타일 길이 및 외곽 지점을 확인하는 데 도움이 됩니다. […] 박스 플롯은 5개의 숫자 요약을 그래픽으로 표현한 것입니다.
— 5페이지, 응용 다변량 통계 분석, 2015.
박스 플롯은 데이터 샘플을 배열 또는 목록으로 전달하는 boxplot() 함수를 호출하여 그릴 수 있습니다.
박스 플롯은 히스토그램의 대안으로 데이터 표본의 분포를 요약하는 데 유용합니다. 그들은 박스와 턱수염에서 각각 공통적이고 합리적인 값의 범위에 대한 아이디어를 빠르게 얻는 데 도움이 될 수 있습니다. 분포의 형태를 명시적으로 보고 있지 않기 때문에 이 방법은 데이터에 비가우스와 같이 알 수 없거나 비정상적인 분포가 있을 때 자주 사용됩니다.
아래 예제에서는 하나의 차트에 세 개의 박스 플롯을 생성하며, 각 박스도는 약간 다른 가우스 분포에서 추출한 데이터 샘플을 요약합니다. 각 데이터 샘플은 배열로 생성되고 세 개의 데이터 샘플 배열은 모두 플로팅 함수에 패딩된 목록에 추가됩니다.
예제를 실행하면 세 개의 박스 및 턱수염 플롯을 보여주는 차트가 생성됩니다. 각각에 대해 y축에 동일한 배율이 사용되어 첫 번째 플롯이 찌그러진 것처럼 보이고 마지막 플롯이 펼쳐진 것처럼 보이는 것을 볼 수 있습니다.
이 경우 데이터의 중간 50%에 대한 검은색 박스, 중앙값에 대한 주황색 선, 합리적인 데이터의 범위를 요약하는 수염 선, 마지막으로 가능한 이상값에 대한 점을 볼 수 있습니다.
산점도
산점도(또는 ‘산점도’)는 일반적으로 쌍을 이루는 두 데이터 샘플 간의 관계를 요약하는 데 사용됩니다.
쌍을 이룬 데이터 샘플은 사람의 체중과 키와 같은 주어진 관측치에 대해 두 개의 측정값이 기록되었음을 의미합니다.
x축은 첫 번째 표본의 관측값을 나타내고 y축은 두 번째 표본의 관측값을 나타냅니다. 그림의 각 점은 단일 관측치를 나타냅니다.
산점도는 서로에 대한 변수의 이변량(bivariate) 또는 삼변량(trivariate) 플롯입니다. 이것은 데이터 세트의 변수 간의 관계를 이해하는 데 도움이 됩니다. 아래쪽으로 경사진 분산은 가로 축의 변수를 늘리면 세로 축의 변수가 감소한다는 것을 나타냅니다.
— 페이지 19, 응용 다변량 통계 분석, 2015.
scatter plot은 scatter() 함수를 호출하고 두 개의 데이터 샘플 배열을 전달하여 만들 수 있습니다.
산점도는 두 변수 간의 연관성 또는 상관 관계를 표시하는 데 유용합니다. 가장 적합한 선과 같은 상관 관계를 정량화 할 수 있으며, 이 역시 동일한 차트에 선 플롯으로 그려져 관계를 더 명확하게 만들 수 있습니다.
데이터 집합에는 지정된 관측치에 대해 세 개 이상의 측정값(변수 또는 열)이 있을 수 있습니다. 산점도 행렬은 세 개 이상의 변수가 있는 데이터 집합의 각 변수 쌍에 대한 산점도를 포함하는 카트입니다.
아래 예제에서는 관련된 두 개의 데이터 샘플을 만듭니다. 첫 번째는 표준 가우스에서 추출한 난수 샘플입니다. 두 번째는 첫 번째 측정값의 값에 두 번째 임의 가우스 값을 추가하여 첫 번째 측정값에 종속됩니다.
예제를 실행하면 두 변수 간의 양의 관계를 보여 주는 산점도가 생성됩니다.
확장
이 섹션에는 탐색하고자 하는 자습서를 확장하기 위한 몇 가지 아이디어가 나열되어 있습니다.
- 하나의 예제를 선택하고 사용자 고유의 인위적인 데이터 세트를 사용하도록 업데이트합니다.
- 표준 머신러닝 데이터 세트를 로드하고 변수를 플로팅합니다.
- 편리한 함수를 작성하여 레이블과 범례를 포함한 데이터에 대한 플롯을 쉽게 만들 수 있습니다.
추가 정보
이 섹션에서는 더 자세히 알아보려는 경우 주제에 대한 더 많은 리소스를 제공합니다.
게시물
책
- 양적 정보의 시각적 표시, 2001.
- 데이터 분석을 위한 파이썬: Pandas, NumPy 및 IPython과의 데이터 랭글링, 2017.
- 응용 다변량 통계 분석, 2015.
API
- matplotlib 라이브러리
- matplotlib 사용자 가이드
- matplotlib.pyplot() API
- matplotlib.pyplot.show() API
- matplotlib.pyplot.savefig() API
- matplotlib.pyplot.plot() API
- matplotlib.pyplot.bar() API
- matplotlib.pyplot.hist() API
- matplotlib.pyplot.boxplot() API
- matplotlib.pyplot.scatter() API
기사
요약
이 자습서에서는 Python의 시각화 데이터에 대한 간단한 소개를 했습니다.
특히 다음 내용을 배웠습니다.
- 시계열 데이터를 선 플롯으로 차트로 만들고 막대 차트를 사용하여 범주형 수량을 차트로 만드는 방법.
- 히스토그램과 박스 플롯으로 데이터 분포를 요약하는 방법.
- 산점도가 있는 변수 간의 관계를 요약하는 방법.