지금에서야 2주차를 시작하는 나는 게으름인간이다.
저번 주차에서는 pandas를 사용하여 데이터를 읽어오고 이를 원하는 형식으로 가공하는 것을 하였다. 이번 주차는 수많은 데이터들을 효과적으로 설명할 수 있는 데이터 시각화에 대해 학습할 예정이다.
우선 matplotlib과 seaborn을 사용하는 데 둘 다 시각화를 위한 것이며, seaborn은 matlplotlib의 간편화된 버전이라고 한다. seaborn은 통계적인 부분의 시각화 기반이라 더욱 깔끔하고 직관적인 시각화를 지원한다.
아래의 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()
아래의 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()
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()
주어진 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
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()
주어진 데이터로 파이차트를 그리는 코드를 작성해주세요.
단, 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()
주어진 데이터셋에서 파티의 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 vs violin plot (이상치를 확인할 수 있는 2가지 시각화 기법)
이상치: 보통 관측된 데이터의 범위에서 많이 벗어난 아주 작은 값이나 큰 값
주어진 데이터를 이용하여 예시 와 같은 그림을 그리는 코드를 작성해주세요.
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()
주어진 데이터를 이용하여 예시 와 같은 그림을 그리는 코드를 작성해주세요.
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주차 공부가 끝났다.
아무래도 개념을 먼저 공부하는 것이 아닌 문제를 풀기 위해 필요한 개념을 구글링하며 학습을 하다보니 시간이 꽤나 걸린다.
아직까지의 공부는 그래프를 그저 따라 그리는 연습을 한 것 같다. 이 그래프가 어떤 수치를 나타내기에 유리한지, 각 그래프는 어떻게 해석하는 것인지에 대한 공부도 필요한 것 같다.