파이톨치

[BoostCamp AI Tech] 데이터 분석 본문

AI&ML/BoostCamp AI Tech

[BoostCamp AI Tech] 데이터 분석

파이톨치 2024. 8. 20. 13:15
728x90

데이터 분석

# 고전 통계

과거 통계적 데이터 분석의 핵심은 추론이었다. 

표본 데이터(수집된 데이터)를 통해서 모집단(전체 데이터)의 특징을 아는 것이었다. 

예를 들어, 대푯값, 분포와 밀도, 상관관계, 가설 검정 등이 있다. 

 

현대에서는 데이터에 대해 해석, 의사 결정, 예측이 필요하다.

의사 결정의 보조 지표로 활용하기도 한다. 

 

다양한 장애물들이 있는데,

명확한 목적이 없고, 잘못된 목적이 있을 수 있고,

데이터와 리소스의 부재가 있고,

데이터에 

 

# 데이터 문해력

데이터 문해력이 중요하다. 

이는 데이터를 건전한 목적과 윤리적인 방법으로 사용한다는 전제 하에,

현실 세상의 문제에 대한 끊임없는 탐구를 통해 질문하고 답하는 능력이다. 

 

1. 좋은 질문을 할 수 있는 역량 (나는 이게 굉장히 중요하지만, 어렵다고 생각한다.) 

2. 필요한 데이터를 선별하고 검증할 수 있는 역량 

3. 데이터 해석 능력을 기반으로 유의미한 결론을 만들어내는 역량 

4. 가설 기반 A/B 테스트를 수행하여 결과를 판별할 수 있는 역량 

5. 의사결정자들도 이해하기 쉽게 분석 결과를 표현할 수 있는 역량 

6. 데이터 스토리텔링을 통해 의사결정자들이 전체그림을 이해하고 분석 결과에 따라 실행하게 하는 역량 

 

모델과 분석 방법 결정하는 것도 중요하다.

물론, 결과나 성능이 중심이 될 수 있지만, 

학습 시간, 예측 시간, 비용, 안동성과 보안 등을 고려해야 한다. 

ChatGPT가 GPT4보다 훨씬 싸서 많이 사용하는 것과 비슷하다. 

 

# 데이터 시각화

## Bar Plot (막대 그래프)

category 데이터에 수치 값 비교하기에 좋다. 

아래 형태와 같은 plot을 grouped bar plot 이라고 한다. 

matplotlib 보다는 seaborn 사용을 권장한다고 한다. 

 

아래와 같이 그래프를 속일 수도 있다. 

첫번째와 네번째는 숫자로는 별로 차이가 나지 않지만, 그래프를 어떻게 그리느냐에 따라서 값이 상이하게 달라질 수 있다. 

 

이렇게 하면 사용자 입장에서 헷갈릴 수 있고, 인사이트를 얻고 싶다면 오른쪽처럼 해야한다. 

이를 principle of proportion ink 라고 한다. 잉크양에 비례해야 한다는 의미이다. 

 

이건 테크닉인데, matplotlib 에서는 여백과 공간을 조정해서 가독성을 높일 수 있다고 한다. 

또한 필요없는 복잡성보다는 인사이트를 얻을 수 있는 시각화가 중요하다. (엔지니어는 복잡한 3D 싫어할 확률 높다.) 

 

## Line Plot (꺾은선 그래프)

일반적으로, 추세를 보기 위해서 사용한다. 주식 그래프에서 많이 사용하는 것도 추세를 보기 위함일 것이다. 

참고로, 주식과 같은 것을 시계열 데이터 라고 한다. 

 

인간의 인지 능력 딸려서, 선을 5개 이하로 사용하는 것이 좋다고 한다. 

시계열 데이터는 복잡하기 때문에 soothing 해서 단순하게 만들어주기도 한다. 

 

꺾은선 그래프는 추세를 파악하는 것이 중요하기 떄문에, 축을 0에 초점을 둘 필요는 없다. 

시계열 데이터는 데이터의 point가 중요하기에 점을 찍어주는게 좋다. 

 

점과 점 사이에 데이터가 없다면 보간을 하기도 하는데, 이때 오인을 하는 요소가 된다. (발표할 때 사용하기도 함) 

## Scatter Plot 

점을 사용하여 2개의 feature 간 관계를 파악한다. 

이를 사용하여 상관관계 분석에 사용할 수도 있다. 

3가지 특성에 대해 보면 군집을 파악할 수도 있다. 

 

점이 많이지면 데이터 분포를 파악하기 힘들기 때문에 

투명도, 지터링, 등고선 등을 사용한다. 

전문가분은 2D 히스토그램이랑 등고선 추천한다 하셨다.

 

보통 마커보다는 색이 젤 눈에 잘 들어온다고 한다. (근데 나는 색약이라 그런지 잘 안 보인다...)

 

인과관계와 상관관계를 다르다. (상어와 아이스크림 판매량) 

 

## 코드 예시

fig = plt.figure() 
ax = fig.add_subplot(1, 2, 1)
ax = fig.add_subplot(1, 2, 2) 
plt.show()

 

세로로 긴 표 2개를 나란히 그리는 방법이다. 

 

fig = plt.figure() 
ax = fig.add_subplot(2, 1, 1)
ax = fig.add_subplot(2, 1, 2) 
plt.show()

 

가로로 긴 표 2개를 그리는 방법이다.

 

ax의 순서에 구분을 주고 그릴 수도 있다. 

fig = plt.figure() 
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2) 

ax1.plot([1,2,3])
ax2.plot([3,2,1])
plt.show()

 

한 표에 동시에 그릴 수도 있다. 

plot과 bar를 동시에 그릴 수도 있다.

fig = plt.figure() 
ax1 = fig.add_subplot(1, 1, 1)

ax1.plot([1,2,3], [1, 2, 3])
ax1.bar([1, 2, 3], [1, 2, 3])

plt.show()

 

그래프에 예쁘게 표시도 해줄 수 있다. 

나중에 ppt 발표할 때 써먹고 싶으면 기억해두자! 

코드는 다음과 같다. 

fig = plt.figure() 
ax1 = fig.add_subplot(1, 1, 1)

ax1.plot([1,1,1], label='1')
ax1.plot([2,2,2], label='2')
ax1.plot([3,3,3], label='3')

ax1.set_title("BASIC PLOT") 
ax1.set_xticks([0, 1, 2]) 
ax1.set_sticklabels(['zero', 'one', 'two']) 

ax1.annotate(text = "this is annoate", xy=(1,2),
			xytext=(1.2, 2.2), 
            arrowprops=dict(facecolor="black"),
            )
ax1.legend()

plt.show()

 

pandas의 강력한 장점 중 하나는 group 이다. 

group = stduent.groupby('gender')['race/enthnicity'].value_counts().sort_index()

 

로 해주면 남녀가 그룹으로 분리해서 볼 수 있다. 

 

그룹으로 만들어두면 아래와 같은 시각화가 가능하다. 

fig, axes = plt.subplot(1, 2, figsize=(15, 7)) 

axes[0].bar(group['male'].index, group['male'], color='royalblue')
axes[1].bar(group['female'].index, group['female'], color='tomato')

for ax in axes:
	ax.set_ylim(0, 200) 
    
plt.show()

 

 

 

데이터 분석을 할 때, 고전적으로 describe(), info(), head() 등으로 확인한다. 

info 에서 봤을 때 (text와 같은) object 데이터를 수치형으로 바꾸어주고 해야 한다.

또한, 결측치를 확인하기 위해 사용한다. 

 

describe는 고전적인 통계값을 알려준다. 

 

 

728x90