파이썬의 데이터 시각화 library
라이브러리 : 라이브러리 내부의 코드를 조합해서 원하는 결과를 내야한다.
프레임워크 : 이미 틀이 짜여있음, 틀에 내용물을 채워가며 결과를 내야한다.
pip install matplotlib
위 코드를 통해 설치하게 된다.
%matplotlib inline
을 통해 활성화 한다. (선언함으로써 시각화 할 것임을 나타낸다.)
import matplotlib.pyplot as plt
%matplotlib inline
plt.show() #plt를 확인하는 명령어
plt.figure(figsize =(,)) #plotting을 할 도면을 선언
이 때 figsize는 튜플 형태로 선언하며 1픽셀 = 72이므로 정수일 때 정수 x 72 크기가 된다.
plot에는 한가지 값 뿐만 아니라 두가지도 넣고 출력이 가능하다.
y = x^2의 그래프를 작성해본다면
x = np.array([1,2,3,4,5]) #정의역
y = np.array([1,4,9,16,25]) #f(x)
plt.plot(x, y)
plt.show()
이미지와 같은 그래프가 그려지며 너무 매끄럽지 못한 모습을 볼 수 있다.
그래서 두 점 사이에 많은 점을 찍기 위해 np.arange(a,b,c)
를 사용하려 한다.
여기서 c는 입력하지 않으면 int로 고정되어있어 위의 이미지와 같은 결과가 나오므로 작은 수로 입력해서 작성해야 매끄러운 결과가 나올 수 있다.
x = np.arange(-20, 20,0.01)
plt.plot(x, x**2)
plt.show()
이로써 numpy로 이루어진 것도 plot를 이용하여 나타낼 수 있음을 알 수 있다.
위 이미지를 보면 x는 무엇이고 y는 무엇인지 설명이 부족함을 볼 수 있다.
이를 해결하기 위해 plt.xlabel
, plt.ylabel
을 사용하여 이름을 붙여준다.
x = np.arange(-20,20,0.01)
plt.xlabel("x vlaue")
plt.ylabel("y value")
plt.plot(x,x**2)
plt.show()
그리고 원하는 범위 만큼 그래프를 자를 수 있다.
이는 .axis()
를 이용하여 원하는 축에서 그래프를 자르게 된다.
이때 axis([x_min, x_max, y_min, y_max])의 범위가 정해지게 된다.
plt axis([-5,5,0,25])
그래프에서 x축과 y축에 원하는 크기만큼 눈금을 정하기 위해 .xticks
와 .yticks
를 사용한다.
plt.xticks([i for i in range(-5,6,1)]) #눈금을 어디에 설정할지
plt.yticks([i for i in range(0,27,3)])
그래프에 이름을 넣어 줄 수 있다. 이는 .title()
을 이용하여 넣는다.
np.title("y = x^2 grape")
그래프 그리기의 마지막으로 범례를 쓸 수 있다. 이때 코드는 선(그래프)를 그린 후 해야하므로 거의 마지막 쯤에 작성하게 된다. .legend()
를 이용하여 나타낸다.
plt.plot(x,x**2, label ="trend")
plt.legend()
plt.show()
위 코드와 같이 plot에 label을 작성하고 legend를 넣게 되면 아래 이미지와 같이 나타나게 된다.
.plot()
x = np.arange(20)
y = np.random.randint(0,21,20)
x,y
plt.plot(x,y) #plot을 이용하여 꺽은 선 그래프를 그릴 수 있다.
plt.axis([0,20,0,20])
plt.yticks([0,5,10,15,20])
plt.show()
#Extra: y축을 20까지 보이게 하고 싶다면?, y축을 "5"단위로 보이게 하고 싶다면?
#.axis(), yticks()
코드를 통해 난수를 생성하고 plot를 그리게 되면 꺽은 선 그래프가 그려지게 된다.
.scatter
plt.scatter(x,y) ## 점으로 나타냄
plt.show()
.boxplot()
plt.boxplot(y)
plt.title("Box plot of y")
plt.show()
plt.boxplot((x,y))
plt.title("Box plot of x, y")
plt.show()
plt.bar(x, y)
plt.xticks([i for i in range(0,20,1)])
plt.show()
plt.hist(y, bins=np.arange(0,22,2))
plt.xticks(np.arange(0,22,2))
plt.show()
.pie()
z = [100, 300, 200, 400]
plt.pie(z, label = ['one', 'two', 'three', 'four'])
plt.show()
import seaborn as sns
sns.kdeplot()
sns.kdeplot(y, shade = True)
plt.show()
#보이게 할 때 공유하므로 써줘야한다.
#전체를 1로 봤을 때 각부분이 어느정도의 density를 가지는 지 표현
sns.countplot()
#data frame를 만든다
vote_df = pd.DataFrame({"name" : ['Andy', "Bob", "Cat"], "vote":[True, True, False]})
vote_df
name vote
0 Andy True
1 Bob True
2 Cat False
vote_count = vote_df.groupby("vote").count()
vote_count
name
vote
False 1
True 2
#in matplotlib barplot
plt.bar(x = [False,True], height = vote_count['name'])
plt.show()
groupby로 요약 한 후 bar로 그려주었다. countplot은 좀더 편리하게 그래프를 그릴 수 있게 해준다.
#sns의 countplot
sns.countplot(x =vote_df['vote'])
plt.show() #label도 있고 구분도 하기 쉽게 되어있음
sns.catplot()
covid = pd.read_csv("./country_wise_latest.csv")
s = sns.catplot(x="WHO Region",y="Confirmed",data=covid)
s.fig.set_size_inches(10,6)
plt.show()
#범주형 데이터와 수치형 데이터를 맵핑하는데 유리하다.
#여러개의 데이터를 그리는 방법,default는 strip 형태로 보여주는 것이다.
#kind='violin' 처럼 그리는 형태를 다른 게 만들 수도 있다.
sns.stripplot()
sns.stripplot(x ='WHO Region' ,y='Recovered', data = covid)
plt.show()
sns.swarmplot()
sns.swarmplot(x ='WHO Region' ,y='Recovered', data = covid)
plt.show()
sns.heatmap()
covid.corr()
sns.heatmap(covid.corr())
plt.show()