인공지능 스터디 2주차 - 데이터 시각화(matplotlib,seaborn을 이용한)

박도연·2023년 7월 6일
0
post-thumbnail

지금에서야 2주차를 시작하는 나는 게으름인간이다.

저번 주차에서는 pandas를 사용하여 데이터를 읽어오고 이를 원하는 형식으로 가공하는 것을 하였다. 이번 주차는 수많은 데이터들을 효과적으로 설명할 수 있는 데이터 시각화에 대해 학습할 예정이다.

우선 matplotlib과 seaborn을 사용하는 데 둘 다 시각화를 위한 것이며, seaborn은 matlplotlib의 간편화된 버전이라고 한다. seaborn은 통계적인 부분의 시각화 기반이라 더욱 깔끔하고 직관적인 시각화를 지원한다.

1. 시각화 기본

문제 1-1 line plot

아래의 x와 y값을 이용하여 line plot을 그려보세요.

<내 코드>

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4, 5]
y = [123, 1, 59, 40, 10, 100]

plt.plot(x,y)  #plot([x축],[y축]), plot([0,1,2,3,4,5],[123,1,59,40,10,100]}도 가능
plt.show()

참고사이트


문제 1-2 Title and Bar plot

아래의 x와 y값을 이용하여 bar plot을 그려보세요.
단, 제목은 Shape Like W라고 붙여주세요.

<내 코드>

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4, 5]
y = [123, 1, 59, 40, 10, 100]

plt.bar(x,y)    #bar모양으로 나타내기
plt.title('Shape Like W')     #그래프의 제목
plt.show()


문제 1-3 Scatter plot

seaborn에서 제공하는 penguin 데이터셋을 가지고 몸무게와 부리의 길이 관계를 알아보고 싶습니다. scatter plot을 활용하여 두 변수간의 관계를 scatter plot으로 시각화 하는 코드를 작성해주세요. 단, 제목은 "Body Mass vs Bill Length"로 해주세요. (X축에 몸무게, Y축에 부리의 길이를 표현해주세요.)

<내 코드>

import matplotlib.pyplot as plt
import seaborn as sns

penguin_df = sns.load_dataset("penguins")
plt.title('Body Mass vs Bill Length')
plt.scatter(penguin_df['body_mass_g'],penguin_df['bill_length_mm'])    #scatter모양으로 나타내기 scatter(x,y)
plt.show()


문제 1-4 subplots and figsize

주어진 X와 Y를 가지고, 위에서 배운 line plot, bar plot, scatter plot을 한번에 그려주세요.
1. figsize를 12 x 5로 지정합니다.
2. 가로로 3개의 그래프를 한 줄에 그려주세요.
3. line plot, bar plot, scatter plot 순서대로 그려주세요.

<내 코드>

import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4, 5]
y = [123, 1, 59, 40, 10, 100]

plt.figure(figsize=(12,5))    #도표사이즈 지정
plt.subplot(131)         #여러 개의 도표 나타내기 subplot(열,행,위치)
plt.plot(x,y)

plt.subplot(132)        #1x3 중 2번째
plt.bar(x,y)

plt.subplot(133)
plt.scatter(x,y)

plt.show()

여러개 그래프 그리기
도표사이즈
plt,fig,axes


문제 1.5 plt vs ax

axes는 자유롭게 그래프를 배치할 수 있음
axes(왼쪽, 아래, 폭, 높이) 0~1사이의 소수만 가능
plt,fig,axes


문제 1.6 Dittribution
펭귄 몸무게의 분포를 seaborn으로 그리는 코드를 작성해주세요.
단, 색은 orange로 하고, density line 밑을 채워주세요.

<내 코드>

import matplotlib.pyplot as plt
import seaborn as sns

penguin_df = sns.load_dataset("penguins")
sns.kdeplot(penguin_df['body_mass_g'],shade=True,color="orange")
#밀도플롯 그리기, kdeplot(데이터[], shade(음영), 색)

plt.show()

밀도플롯


문제 1-7 Pie Chart

주어진 데이터로 파이차트를 그리는 코드를 작성해주세요.
단, FORD의 expode는 0.2입니다.

<내 코드>

import matplotlib.pyplot as plt
cars=['AUDI', 'BMW', 'FORD', 'TESLA', 'JAGUAR']   #주어진 코드
data=[23, 29, 41, 12, 17]          #주어진 코드

explode=[0,0,0.2,0,0]

plt.pie(data,labels=cars, autopct='%.1f%%', startangle=0, counterclock=False, explode=explode, shadow=True)
#autopct:부채꼴 안 숫자(%.1f%%=소수점 한자리), startangle: 시작 각도, counterclock: True=반시계방향 False=시계방향, explode: 떨어진 거리, shadow:그림자 설정

plt.show()


pie 차트 그리기


문제 1-8 Box plot

주어진 데이터셋에서 파티의 size별로 tip의 분포가 얼마나 차이가 나는지 "이상치와 함께" 확인할 수 있는 코드를 작성해주세요.

<내 코드>

import matplotlib.pyplot as plt
import seaborn as sns
tips=sns.load_dataset('tips')

sns.boxplot(x = "size", y = "tip", data = tips)

plt.show()


boxplot

boxplot vs violin plot (이상치를 확인할 수 있는 2가지 시각화 기법)
이상치: 보통 관측된 데이터의 범위에서 많이 벗어난 아주 작은 값이나 큰 값

2. Decorating

문제 2-1 Xlabel, Ylabel and Colors

주어진 데이터를 이용하여 예시 와 같은 그림을 그리는 코드를 작성해주세요.
1. X축과 Y축에 이름이 있습니다.
-폰트 크기는 14, Bold로, 색은 회색으로 해주세요.
-X, Y 축과의 거리는 12만큼 띄워줍니다.
2. 그래프 자체의 색깔과 경계선의 색깔이 존재합니다.
-색은 "lightgray", 경계선은 "gray"로 지정해주세요.

<내 코드>

import matplotlib.pyplot as plt

X = ["Tom", "Amy", "Jim", "Bill", "Pegi"]
Y = [8, 23, 52, 37, 64]

plt.bar(X,Y, color='lightgray',edgecolor='gray')
plt.xlabel('Salesperson', fontsize=14, labelpad=12, color="gray", weight='bold')     #labelpad: 축과 떨어진 거리
plt.ylabel('Revenue(1000$)', fontsize=14, labelpad=12, color="gray", weight='bold')

plt.show()

축 label


문제 2-2 Text Annotation, 수직선과 수평선

주어진 데이터를 이용하여 예시 와 같은 그림을 그리는 코드를 작성해주세요.

1. 각 bar 위에 annotation이 존재합니다.
-검정색으로, center에 정렬해주세요. y값보다 4 낮은 위치해 있어야 합니다.
2. y=45 지점에 파란 선을 넣고, y=15 지점에 빨간 선을 그려주세요.
-두 선은 모두 dash style로 그려야 합니다.
-단, 빨간 선의 밑엔 연한 빨강으로 색칠이 돼야 합니다.

<내 코드>

import matplotlib.pyplot as plt

X = ["Tom", "Amy", "Jim", "Bill", "Pegi"]
Y = [8, 23, 52, 37, 64]

plt.bar(X,Y, color='lightgray',edgecolor='gray',zorder=10)  #zorder:레이어드
plt.xlabel('Salesperson', fontsize=14, labelpad=12, color="gray", weight='bold')     
plt.ylabel('Revenue(1000$)', fontsize=14, labelpad=12, color="gray", weight='bold')

plt.text(0,8,'8',ha='center')
plt.axhline(45,0,1,color='blue', linestyle='--')    #수평선 그리기(y축위치, x축 시작(0~1), x축 끝(0~1))
plt.axhline(15,0,1,color='red', linestyle='--')


plt.show()


이 문제는 구현에 실패한 것들이 있다.
1. 막대그래프 위 텍스트 배치
2. 빨간 점선 아래 음영채우기
수평선 그리기


2주차 공부가 끝났다.
아무래도 개념을 먼저 공부하는 것이 아닌 문제를 풀기 위해 필요한 개념을 구글링하며 학습을 하다보니 시간이 꽤나 걸린다.
아직까지의 공부는 그래프를 그저 따라 그리는 연습을 한 것 같다. 이 그래프가 어떤 수치를 나타내기에 유리한지, 각 그래프는 어떻게 해석하는 것인지에 대한 공부도 필요한 것 같다.

profile
도여줄게 완전히 도라진 나

0개의 댓글