여러가지 시각화 그래프(Histogram & Scatter & Pie Chart & Box Plot)

2021. 7. 9. 01:42(Python) Pandas를 이용한 데이터분석

히스토그램

히스토그램은 변수가 하나인 단 변수 데이터의 빈도수를 그래프로 표현한다.

x축을 같은 크기의 여러 구간으로 나누고  각 구간에 속하는 데이터 값의 개수를 

y축에 표시한다. 구간을 나누는 간격의 크기에 따라 빈도가 달라지고 히스토그램의 모양이 변한다.

import pandas as pd
import matplotlib.pyplot as plt

plt.style.use('classic')

df = pd.read_csv('D:/5674-833_4th/part4/auto-mpg.csv',header=None)

#열이름 지정
df.columns = ['mpg','cylinder','displacement','horsepower','weight',
              'acceleration','model year','origin','name']
df['mpg'].plot(kind = 'hist',bins =10, color = 'coral',figsize =(10,5))

plt.title('histogram')
plt.xlabel('mpg')
plt.show()

mpg 열을 히스토그램으로 나타내본다.

산점도

 

산점도는 서로 다른 두 변수 사이의 관계를 나타낸다.

이떄 각 변수는 연속되는 값을 갖는다. 일반적으로 정수형 또는 실수형 값이다.

2개의 연속변수를 각각  x,y label 에 놓고 데이터 값이 위치하는 (x,y) 좌표를 찾아서 점으로 표시한다.

 

import pandas as pd
import matplotlib.pyplot as plt

plt.style.use('default')

df =pd.read_csv('D:/5674-833_4th/part4/auto-mpg.csv',header = None)

df.columns = ['mpg','cylinders','displacement','horsepower','weight',
              'acceleraiton','model_year','origin','name']

print(df['cylinders'])


df.plot(kind = 'scatter',x = 'weight',y = 'mpg', c= 'coral',s = 10,figsize = (10,5))
plt.title('Scatter Plot - mpg vs wieght')
plt.show()

 

파이차트

 

파이차트는 원을 파이 조각처럼 나누어서 표현한다. 조각의 크기는 해당 변수에 속하는 데이터 값의 크기에

비례한다. 

import pandas as pd
import matplotlib.pyplot as plt

plt.style.use('default')

df = pd.read_csv('D:/5674-833_4th/part4/auto-mpg.csv',header= None)

#열이름지정
df.columns = ['mpg','cylinders','displacement','horsepower','weight',
              'acceleraiton','model_year','origin','name']

#데이터 개수 카운트를 위해 값 1을 가진 열 추가
df['count'] = 1
df_origin = df.groupby('origin').sum() #origin 열을 기준으로 그룹화 ,합계 연산
print(df_origin)

#제조국가 값을 실제 지역명으로 변경
df_origin.index = ['USA',"EU",'JPN']

# 제조국가 열에 대한 파이 차트 그리기 -count열데이터 사용

df_origin['count'].plot(kind = 'pie',
                        figsize = (7,5),
                        autopct = '%1.1f%%', #퍼센트 %표시
                        startangle = 10, #파이조각을 나누는 시작점( 각도표시)
                        colors = ['chocolate','bisque','cadetblue']
                        )

plt.title('Model Origin',size =10)
plt.axis('equal') #axis() 함수는 x,y축의 범위를 설정할수있게 하는것과 동시에 여러 옵션을 설정할수있는 함수이다. eqaul = 각 축의 범위와 축의 스케일을 동일하게 설정한다.
plt.legend(labels = df_origin.index,loc = 'upper right')
plt.show()

 

위의 예제에서 데이터 개수를 세기 위해 숫자 1을 원소로 갖는 count열을 먼저만들고

groupby() 함수를 통해서 데이터프레임 df의 모든 데이터를 origin 열 값인 1,2,3을 기준으로

나눠준뒤(1 = 'USA' ,2 = 'EU' , 3 = 'JPN') sum() 함수를 통해서 개수를 센다.

 

 

박스플롯

 

박스플롯은 범주형 데이터의 분포를 파악하는데 적합하다.

 

import pandas as pd
import matplotlib.pyplot as plt

#matplotlib 한글 폰트 오류해결
from IPython.core.pylabtools import figsize
from matplotlib import font_manager,rc
font_path = "D:/5674-833_4th/part4/malgun.ttf"
font_name = font_manager.FontProperties(fname= font_path).get_name()
rc('font',family = font_name)

plt.style.use('seaborn-poster')
plt.rcParams['axes.unicode_minus'] = False

df = pd.read_csv('D:/5674-833_4th/part4/auto-mpg.csv',header=None)

#열이름지정
df.columns = ['mpg','cylinders','displacement','horsepower','weight',
              'acceleraiton','model_year','origin','name']

# 그래프 객체 생성(figure에 2개의 subplot 생성)
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1,2,1) #1행 2열 중 1번째
ax2 = fig.add_subplot(1,2,2) #1행 2열 중 2번째

#axe 객체에 boxplot 메소드로 그래프 출력

ax1.boxplot(x = [df[df['origin']== 1]['mpg'],
            df[df['origin'] == 2]['mpg'],
            df[df['origin'] == 3]['mpg']],
            labels = ['USA','EU','JAPAN']

            )
ax2.boxplot(x=[df[df['origin'] == 1]['mpg'],
               df[df['origin'] == 2]['mpg'],
               df[df['origin'] == 3]['mpg']],
            labels=['USA', 'EU', 'JAPAN'],
            vert =False
            )

ax1.set_title('제조국가별 연비 분포(수직 박스 플롯)')
ax2.set_title('제조국가별 연비 분포(수평 박스 플롯)')
plt.show()

2개의 axe객체로 분할하기 위해 add_subplot() 메소드를 적용한다.

각각 ax1,ax2에 저장한다.

origin의 값이 1인 mpg열 ,2인 mpg열 ,3인 mpg열의 데이터 분포를 출력한다.