728x90
5.1 데이터 시각화
컴퓨터 화면에 시각적 이미지 이용하여 데이터를 효과적으로 보여주는 방법
데이터 시각화의 필요성
- 복잡한 데이터에 대한 이해를 돕는다
- 의사결정을 지원한다
- 효과적인 커뮤니케이션 수단이 된다
데이터 수집과 전처리 못지 않게 시각화를 통해서 그 의미를 잘 전달하는 것 역시 데이터 과학자가 해야할 중요한 일들 중 하나
5.2 matplotlib의 다양한 기능 맛보기
맷플롯립 코드 살펴보기
import matplotlib.pyplot as plt
years = [2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022]
ranks = [5,3,2,3,4,6,7,4]
# 그래프 그리기 plt.plot(x축데이터, y축데이터, 선의 색상, 마커 정보)
plt.plot(years, ranks, color='blue', marker='*')
plt.title("Tottenham Hotspur FC Ranking")
plt.xlabel("Year")
plt.ylabel("Ranking")
plt.show()
x = list(range(-20, 20))
y1 = [2*t for t in x]
y2 = [t**2 for t in x]
y3 = [-.2*t**2 -5 for t in x]
plt.plot(x, y1, 'r--', x, y2, 'g^-', x, y3, 'b*:')
plt.axis([-30, 30, -30, 30])
- r은 빨강, g는 녹색, b는 파랑을 의미 / --는 점선, -는 실선, :는 짧은 점선을 의미
- ^는 세모, *는 별표를 의미
- plt.axis([x축 시작, x축 끝, y축 시작, y축 끝]): 축의 범위를 지정(그림 그릴 영역 지정)
5.3 차트 장식을 도와주는 다양한 기법들
x = np.arange(1, 101)
y = [np.random.rand() * 6 - 3 for _ in range(100)]
plt.plot(x,y,color='r',marker='*')
plt.show()
5.4 넘파이를 이용한 함수 그리기, 범례 표시
- 범례: 그래프의 여러 요소를 식별하기 위해 사용되는 표식
x = np.arange(-20, 20)
y1 = x
y2 = 3*x
y3 = x**2-5
plt.plot(x, y1, 'r--', label='x')
plt.plot(x, y2, 'g-', label='3^x')
plt.plot(x, y3, 'b:', label='x^2-5')
plt.axis([-20, 20, -20, 100])
plt.legend(loc='lower right')
- 범례의 위치는 맷플롯립이 최적의 위치를 자동으로 선택하며, loc 키워드 인자 이용해 특정 위치 지정도 가능
- plt.legend(loc='lower right')경우 범례의 위치는 화면의 오른쪽 하단
5.5 막대형 차트도 손쉽게 그려보자
- plt.bar(막대를 세울 위치, 데이터의 값 리스트, 막대의 폭)
- 데이터는 딕셔너리 형태로 만들기
data = {'Korea':33147, 'USA':80412, 'China': 12541, 'Japan':33949, 'France': 46315}
countries = list(data.keys())
GDPs = list(data.values())
plt.bar(countries, GDPs, width=0.4)
plt.ylabel("2023 GDP")
plt.title("IMF 2023 GDP Statistics")
plt.show()
5.6 눈금 표시 방법을 알아보자
years = [1965, 1975, 1985, 1995, 2005, 2015]
ko = [130, 650, 2450, 11600, 17790, 27250]
jp = [890, 5120, 11500, 42130, 40560, 38780]
ch = [100, 200, 290, 540, 1760, 7940]
x_range = np.arange(len(years))
plt.bar(x_range+0.0, ko, width=0.25)
plt.bar(x_range+0.3, jp, width=0.25)
plt.bar(x_range+0.6, ch, width=0.25)
plt.xticks(x_range, years)
x_range = np.arange(len(years)) | 복잡한 연도 숫자 대신 0,1,2,... 순서 번호 쓰려고 |
x_range+0.0, x_range+0.3, x_range+0.6 | 서로 다른 나라 막대들을 나란히 그리려고 |
plt.xticks(x_range, years) | x축 눈금을 진짜 연도(years)로 바꿔서 보이게 하려고 |
- x_range = np.arange(len(years)): years 대신 [0, 1, 2, 3, 4, 5] 순서 번호를 사용해서 x축을 간단한 번호(index)로 정리한다.
- x_range에 +0.0, +0.3, +0.6씩 더해서 나라별(한국, 일본, 중국) 막대가 서로 겹치지 않고 옆에 나란히 보이게 한다.
- plt.xticks(x_range, years): 눈금을 실제 years로 다시 표기
5.7 데이터를 점으로 표현하는 산포도 그래프와 파이 차트
- 산포도: 데이터 집합에 포함된 두 변수 간의 관계를 점들로 표현한 그래프
- 파이차트: 데이터의 상대적인 비율을 시각적으로 표현하는데 사용되는 원형 차트의 일종
- 데이터 값은 원 전체에 대한 비율로 나타나며, 이 비율에 따라 원이 여러 조각으로 나누어짐
- 이러한 조각을 세그먼트/슬라이스 라고 함
- 각 조각의 크기가 전체 데이터에서 차지하는 비율을 직관적으로 보여줌
- pie() 사용
data={'Apple': 67000, 'Banana':89000, 'Orange': 35000}
fruits = list(data.keys())
sales = list(data.values())
plt.pie(sales, labels=fruits, autopct='%.2f')
plt.title('Fruit Sales Pie Chart')
- 해당 영역의 비중을 백분율로 표시하고 싶으면 autopct 키워드 매개변수에 출력 형식 지정
5.8 히스토그램으로 자료의 분포를 한눈에 살펴보자
- 히스토그램: 주어진 자료를 몇 개의 구간으로 나누고, 각 구간의 도수를 조사하여 나타낸 막대 그래프
np.random.seed(42)
# 평균이 100이고 표준편차가 15인 정규분포를 따르는 1000개의 데이터 생성
data = np.random.normal(100,15,1000)
plt.hist(data)
- 히스토그램을 만들 데이터의 값을 동일한 구간으로 나누어 담는 통을 빈이라고 한다. (디폴트값은 bins = 10)
겹쳐진 히스토그램도 그리자: 다중 히스토그램
- alpha 속성 값을 주어 투명도를 가지게 한다.
plt.hist(random_n, n, color='orange', label='noraml dist')
plt.hist(random_d, n, color='blue', alpha=0.3, label='random dist')
plt.legend()
5.9 데이터를 효율적으로 표현하는 상자 플롯
상자플롯은 상자-수염 플롯이라고도 하는데 수치 데이터의 최대값, 최소값, 중간값과 사분위 수 등의 많은 정보를 하나의 형태로 효율적으로 가시화할 수 있는 방법
- 주식 캔들 차트는 상자 플롯을 응용한 차트로 데이터에 대한 기술적 분석의 가장 기본적인 도구로 이용되고 있다.
- 스피어 스타일과 튜키 스타일이 있는데, 튜키 스타일은 이상치를 확인하기 위해 주로 사용된다.
- 상자부는 Q2로 표시된 중앙값을 중심으로 상위 25%~하위25%값이 모여있는 구간을 표시
- 즉, 상자의 아래쪽에서 위쪽까지가 전체 데이터의 50%가 모여있는 구간
- 위스커 or 수염: 상자 밖 아래위로 세로로 그어진 직선
- Q3-Q1: 사분범위 혹은 IQR
- 이상치: 최대값 범위 밖에 데이터가 존재하는 경우
- np.boxplot()
표준편차가 커질수록, IQR(사분위수)도 커지고 수염(위스커)의 길이도 커진다.
5.11 하나의 차트에 여러 그래프 그리기: subplots()
예를 들어 subplots(2,2)는 전체 화면을 2행 2열로 나눈다는 의미
728x90
'Data > Bigdata' 카테고리의 다른 글
[Bigdata] 4. 넘파이의 세계로 (0) | 2025.04.28 |
---|---|
[Bigdata] 슬라이싱 정리 (0) | 2025.04.28 |
[Bigdata] 3. 넘파이 시작하기 (1) | 2025.04.27 |
[Bigdata] 2. 데이터 분석을 위한 도구 (0) | 2025.04.27 |
[Bigdata] 1. 빅데이터로 통하는 세상 (0) | 2025.04.27 |