github 주소 : github.com/sangHa0411/DataScience/blob/main/Amazon_BestSellers_Matplotlib.ipynb
sangHa0411/DataScience
Contribute to sangHa0411/DataScience development by creating an account on GitHub.
github.com
이번 포스팅에서는 matplotlib을 이용하는 방법을 자세하게 정리하여서 데이터를 시각화하면서 matplotlib을 사용할 때 어떻게 해야하는지에 대해서 정리해보도록 하겠습니다.
먼저 Pandas를 이용해서 데이터를 불러오겠습니다
1. 막대그래프
author_List = df['Author'].value_counts()[:10]
keys = author_List.keys()
values = list(author_List)
plt.figure(figsize = (15 , 6))
plt.bar(keys , values , alpha = 0.5 , color = 'lightblue')
plt.title('Top 10 Most Bestselleres' , fontsize = 15)
plt.xticks(rotation = -45 , fontsize = 10)
plt.xlabel('Author' , fontsize = 12)
plt.ylabel('Counts (book)' , fontsize = 12)
plt.show()
key에는 이산적인 속성의 값들이 , values에는 각 속성에 대한 수치적 값이 (위에는 갯수) 로 리스트 자료구조를 만들어서 plt.bar함수에 입력합니다. plt.bar의 다른 인자인 alpha는 막대의 색깔 농도를 의미하고 color = '' 을 함으로써 색상도 정할 수 있습니다.
2. 원 그래프
plt.figure(figsize = (15 , 8))
plt.title('Genre Distribution Rate' , fontsize = 20)
keys = list(df['Genre'].value_counts().keys())
values = list(df['Genre'].value_counts())
plt.pie( values ,
labels = keys,
autopct = '%.2f%%' ,
colors = ['lightblue' , 'tomato'],
explode = [0.01 , 0.01] ,
textprops = {'fontsize' : 15 , 'weight' : 'bold'})
plt.ylabel('')
plt.show()
plt.pie가 핵심 함수이며 plt.bar와는 다르게 먼저 수치를 저장한 리스트 자료구조를 인자로 입력합니다. 그리고 나서 labels = [] 에 각 속성의 이름 혹은 의미가 무엇인지를 말해주도록 이산적인 속성의 리스트를 (위와 같은 경우에는 ['Non Fiction' , 'Fiction'] ) 를 입력합니다.
그리고 나서 autopct를 이용해서 퍼센트 출력을 정하고 colors로 각 부분에 대한 색상을 정합니다.
explode는 벌어지는 정도를 의미하며 textprops으로 글자의 크기 및 스타일을 정해줄 수 있습니다.
3. 히스토그램
plt.figure(figsize = (12 , 5))
plt.title('Bestseller Rating Histogram' , fontsize = 15)
plt.hist(df['User Rating'] ,
facecolor = 'lightgreen' ,
edgecolor = 'green' ,
bins = 100)
plt.xlabel('Rating' , fontsize = 12)
plt.ylabel('Counts' , fontsize = 12)
plt.show()
1차원 히스토그램은 1변량의 리스트 데이터만 입력해주면 됩니다. 그러면 거기에 있는 값과 해당 값의 갯수를 파악해서 히스토그램을 그려줍니다. facecolor로 막대의 색깔, edgecolor로 경계선의 색깔을 정해줄 수 있습니다.
4. 선 그래프
year_Reviews = df.groupby('Year').sum()['Reviews']
keys = year_Reviews.keys()
values = list(year_Reviews)
plt.figure(figsize = (14 , 6))
plt.title('Year & Reviews Line Graph' , fontsize = 20)
plt.plot(keys , values , color = 'tomato' , label = 'Reviews')
plt.xlabel('Year' , fontsize = 15)
plt.ylabel('Sum of Reviews' , fontsize = 15)
plt.legend()
plt.show()
plt.plot으로 선그래프를 그릴 수 있는데 plt.bar와 같이 이산적인 속성을 저장한 리스트 그리고 각 이산적인 속성에 대한 수치를 저장한 리스트를 순서대로 입력함으로써 그려볼 수 있습니다.
예시로 위에 있는 keys , 그리고 values에 대한 정보는 아래와 같습니다.
5. 박스 그래프
박스 그래프를 그리기 위해서는 먼저 2차원 array가 필요합니다.
각 이산적인 속성을 0 , 1. 2 등으로 매핑하고 각 속성에 대한 1변량 데이터 즉 히스토그램을 만들 때 입력했던 리스트 같은 것들을 모아서 최종적으로 2차원 array를 만들어주어야 합니다.
각 년도에 따른 리뷰 갯수에 대한 데이터를 추출해서 리스트를 만들고 이를 순차적으로 리스트에 넣어줌으로써 다중 리스트 자료구조를 최종적으로 2차원 배열을 만들어줍니다.
plt.figure(figsize = (15 , 7))
idx_List = list(range(1 , len(keys) + 1))
plt.title('Year & Reviews Box Plot' , fontsize = 20)
plt.boxplot(values.T)
plt.xlabel('Year' , fontsize = 15)
plt.ylabel('Reviews' , fontsize = 15)
plt.xticks(idx_List , keys)
plt.show()
주의할 것은 이렇게 만든 2차원 배열의 전치행렬을 plt.boxplot에 입력을 해주어야 한다는 것입니다.
그리고 처음에 0. 1. 2 로 매핑했던 것을 다시 년도로 바꾸어주기 위해서 plt.xticks를 이용하였습니다.
6. 점 그래프
저희는 2가치 연속적인 속성을 가지고 서 각 위치에 점을 찍어서 어디에 데이터가 많이 분포하는 가를 알 수 있는 점 그래프를 그려볼 수 있습니다.
fictions = getSubDF(df , 'Genre' , 'Fiction')
non_fictions = getSubDF(df , 'Genre' , 'Non Fiction')
plt.figure(figsize = (12 , 7))
x1 = fictions['Price']
y1 = fictions['Reviews']
x2 = non_fictions['Price']
y2 = non_fictions['Reviews']
plt.title('')
plt.title('Reviews , Price Graph' , fontsize = 20)
plt.scatter(x1 , y1 , alpha = 0.5 , color = 'lightblue' , label = 'fiction')
plt.scatter(x2 , y2 , alpha = 0.5 , color = 'tomato' , label = 'non fiction')
plt.xlabel('Price' , fontsize = 15)
plt.ylabel('Reviews' , fontsize = 15)
plt.legend()
plt.show()
아래와 같이 하나의 plt.figure에 2개의 점 그래프를 같이 그릴 수 있으며 각 plt.scatter의 인자로 입력한 label 값을
마지막에 plt.legend()를 함으로써 어떤 항목을 의미하는지 표시를 할 수도 있습니다.
plt.scatter(x1 , y1 , alpha = 0.5 , color = 'lightblue' , label = 'fiction')
plt.scatter(x2 , y2 , alpha = 0.5 , color = 'tomato' , label = 'non fiction')
plt.legend()
각각의 plt.scatter에 x에는 가격정보 , y에는 리뷰 정보가 들어있으며 둘다 연속적인 속성입니다.
참고자료 : towardsdatascience.com/data-visualization-using-matplotlib-16f1aae5ce70
Data Visualization using Matplotlib
Data Visualization is an important part of business activities as organizations nowadays collect a huge amount of data. Sensors all over…
towardsdatascience.com
'Python' 카테고리의 다른 글
Python - Seaborn을 이용해서 Heatmap을 그려보기 (0) | 2020.11.05 |
---|---|
Python - Seaborn을 이용해서 데이터 시각화하는 방법 (0) | 2020.11.05 |
Python - 기존 그래프의 확대 부분 같이 그리기 (1) | 2020.11.01 |
Python - Seaborn 을 이용한 Boxplot , Violinplot 그리기 (0) | 2020.11.01 |
Python - 상관행렬을 이용한 각 속성간의 연관성 파악하기 (0) | 2020.11.01 |