qcoding

[데이터분석정리_2] 그래프 그리기 본문

Python 데이터분석

[데이터분석정리_2] 그래프 그리기

Qcoding 2022. 6. 24. 15:34
반응형

## 파이썬을 통해 그릴 수 있는 그래프를 확인해보자.

https://github.com/youngwoos/Doit_Python/tree/main/Data

 

GitHub - youngwoos/Doit_Python: <Do it! 쉽게 배우는 파이썬 데이터 분석> 저장소

<Do it! 쉽게 배우는 파이썬 데이터 분석> 저장소. Contribute to youngwoos/Doit_Python development by creating an account on GitHub.

github.com

 

1)  산점도 - 변수 간 관계 표현하기

import pandas as pd
import numpy as np
import seanborn as sns

df=pd.read_csv('./mpg.csv')
df

# x축 displ , y축은 hwy를 나타낸 산점도 만들기
sns.scatterplot(data=df,x='displ' , y='hwy' ,hue='drv')\
    .set( xlim=(3,6) , ylim= (10,30))

### 그래프 설정 바꾸기

import matplotlib.pyplot as plt

## 해상도, 기본값 72
plt.rcParams.update({'figure.dpi' : '150'})  

## 가로,세로,크기, 기본값 [6,4]
plt.rcParams.update({'figure.figsize' : [8,6]})

##글자,크기,기본값 10
plt.rcParams.update({'font.size' : '15'})

## 폰트, 기본값 sans-serif
plt.rcParams.update({'font.family' : 'Malgun Gothic'})




## 한번에 설정
plt.rcParams.update({
    'figure.dpi' : '150' ,
    'figure.figsize' : [8,6],
    'font.size' : '15',
    'font.family' : 'Malgun Gothic'

})

##모든설정 되돌리기
plt.rcParams.update(plt.rcParamsDefault)

#설명메시지 숨시기  <AxesSubplot ... > 숨기기
# 뒤에 ; 입력
sns.scatterplot(data=df,x='displ' , y='hwy' ,hue='drv')\
    .set( xlim=(3,6) , ylim= (10,30));

 

2)  막대 그래프 - 집단 간 차이 표현하기

# mpg 데이터를 이용해 drv별 hwy 평균을 나타낸 막대그래프 만들기

 

# 평균막대그래프 만들기 -> 평균값 크기를 막대길이로 표현한 그래프 barplot

2-1) 집단별 평균표 만들기

## 집단별 평균표 만들기
df_mpg=df.groupby('drv', as_index=False).agg(mean_hwy=('hwy','mean')).sort_values('mean_hwy',ascending=False)
df_mpg

2-2) 그래프 만들기

sns.barplot(data=df_mpg,x='drv',y='mean_hwy');

# 빈도막대그래프 만들기 -> 빈도(개수)를 막대길이로 표현. countplot()

1) 집단별 빈도표 --> barplot 사용방법

#빈도 표만들기
df_mpg=df.groupby('drv',as_index=False).agg(count_drv=('drv','count'))

# barplot 그래프
sns.barplot(data=df_mpg,x='drv',y='count_drv')

2) countplot() 사용방법

##빈도수가 높은 index순서를 구함
df['drv'].value_counts().index

#countplot으로 빈도 그래프 그리기
sns.countplot(data=df,x='drv' , order=df['drv'].value_counts().index)

3)  선 그래프 - 시간에 따라 달라지는 데이터 표현하기

-> 시간에 따라 달라지는 데이터를 표현할 때 선 그래프 사용

ex) 활율, 주가지수 등 경제지표 - 시계열 데이터 (time series data)

# 미국의 경제지표 데이터 불러오기
df=pd.read_csv('./economics.csv')
df

# 기본 선그래프 그리기
sns.lineplot(data=df,x='date',y='unemploy')

## date의 타입이 object 이므로 날짜 시간타입 (datetime)의 형태로 변경한다
## 날짜 시간 타입 변수 만들기
df['date2']=pd.to_datetime(df['date'])
df.info()

 

# 연추출
df['date2'].dt.year

# 월추출
df['date2'].dt.month

# 일추출
df['date2'].dt.day

#연도변수추가
df['year']=df['date2'].dt.year
df.head()

## x축에 연도표시하기
# ci는 신뢰구간 (confidence interval)
sns.lineplot(data=df,x='year',y='unemploy' , ci=None)

 

5)  상자그림 - 집단 간 분포 차이 표현하기

-> bos plot은 데이터의 분포 또는 퍼져있는 형태를 직사각형 상자 모양으로 표현한 그래프입니다. 상자 그림을 보면 데이터가 어떻게 분포하고 있는지 알수 있기 때문에 평균값만 볼때봐 데이터의 특징을 더 자세히 이해할 수 있습니다.

상자그림 설명
상자 아래 세로선 아랫수염 하위 0~25% 내에 해당하는 값
상자 밑면 1사분위수(Q1) 하위 25% 위치 값
상자 내 굵은 선 2사분위수 (Q2) 하위 50% 위치 값 (중앙값)
상자 윗면  3사분위수(Q3) 하위 75% 위치 값
상자 세로선 윗수염 하위 75~100% 내에 해당하는 값
상자 밖 가로선 극단치 경계 Q1 , Q3 밖 1.5 IQR내 최대값
상자 밖 점 표식 극단치 Q,Q3 밖 1.5 IQR 벗어난 값

* IQR(사분위 범위) 1사분위수와 3사분위수의 거리를 뜻하고, 1.5IQR은 IQR의 1.5배를 뜻합니다.

 

 

6)  Group by 사용하여 산점도 그래프 범주별로 색 다르게 나타내기

## group by 사용


fig , ax = plt.subplots()
fig.set_size_inches(11,5)

group=visual_data.groupby('Type',as_index=False)

color = {'Free' : 'red' , 'Paid' : 'green'}

for label, item  in group:
  plt.scatter(
            x=item['Rating'],
            y=np.log10(item['Reviews']),
            c=color[label],
            label=label
            )
plt.title('Rating VS Reviews', fontsize=25)
plt.xlabel('Rating', fontsize=20)
plt.ylabel('Reviews', fontsize=20)
plt.legend()

반응형
Comments