728x90
반응형
SMALL
728x90
반응형
SMALL

이번 포스팅에서는 좀 더 편리하게 시각화하기 위해  Seaborn에 대하여 알아보도록 하겠습니다.

우선, Seaborn은 matplotlib을 기반으로 만들어져 통계 데이터 시각화에 최적화된 인기 라이브러리

Seaborn을 활용하면 시각화가 쉬워 집니다

사실 외울게 많습니다...ㅠㅠ

먼저 터미널이나 명령 프롬프트에서pip install seaborn을 입력하여 seaborn 모듈을 설치합니다.

Seaborn 은 좀 더 예쁘게 시각화할 수 있도록 도와줍니다.


간단한 비교를 위해 seaborn을 사용하지 않고 matplot만 사용하여 그래프를 그려 보겠습니다.

기초적인 시각화도 예쁘지만 이번엔 seaborn을 활용해서 여러 가지 스타일을 지정해 보겠습니다.

seaborn을 사용할 때 반드시 matplotlib 모듈도 같이 import 되어 있어야 합니다.

Seaborn에 있는 몇 가지 연습 데이터셋을 사용해 보도록 하겠습니다.

먼저 요일별 점심, 저녁, 흡연 여부와 식사 금액과 팁을 정리한 데이터입니다.

위 데이터는 단순히 요일별 매출을 시각화해본 그래프입니다.

이것만으로도 충분히 시각화가 쉬워지지만, hue라는 옵션을 이용하면 또 다른 데이터를 이용해서 데이터를 구분해 볼 수 있습니다.

위의 그래프를 확인해보면 흡연자가 더 결제범위가 큰 것이 확인됩니다

이번엔 약간 다른 스타일의 그래프를 그려 보겠습니다.

결제 금액과 종업원에게 주는 팁에 대한 회귀 분석 시각화입니다.
lmplot을 활용하면 간단하게 데이터 분석이 가능합니다.

적절한 상관계수를 확인할 때 사용하기 좋은 lmplot

회기 분석은 간단하게 말해서 예전에 그려봤던 상관계수라고 보시면 될 것 같습니다.
일전에 상관계수를 데이터와 데이터 사이에 상관 정도를 구해서 분석의 용도로 활용했는데, 회기 분석은 그 상관관계를 구하는 조금 더 정확한 방법이라고 보시면 될 것 같습니다.
즉, 위의 그래프에서 제시하는 결제금액에 따른 적절한 팁 액수를 확인할 수 있다는 것입니다.

결론적으로 "total_bill과 tip은 양의 상관관계를 갖는다"라고 이야기합니다.( total_bill이 많아질수록 tip이 많아지는 걸 알 수 있습니다)
또한 유효한 범위까지 그림으로 그려주는 것이 확인됩니다.

hue를 이용해서 흡연자로 비교해 보겠습니다.

lmplot 시각화도 hue옵션을 가질 수 있고, palette 옵션을 이용해 색상도 지정해 주었습니다.

다음은 연도 및 월별 항공기 승객수를 기록한 데이터입니다

연도 및 월별 항공기 승객수로 구분하기 위해 pivot_table을 활용하겠습니다.

값 별 수치를 색상으로! heatmap을 사용하여 데이터 확인하기

heatmap을 활용하면 수치 별 시각화를 정말 쉽게 확인할 수 있습니다.

일전 데이터를 보고 pivot을 활용한다면 heatmap으로 데이터를 확인해보세요!

각 항목별 비교로 확인해 보기 pairplot

머신러닝에서 많이 사용되는 아이리스 꽃에 대한 데이터입니다. 각각의 데이터가 의미하는 바는 다음과 같습니다.

  • Species : 붓꽃의 종. setosa, versicolor, virginica 세 가지 값 중 하나
  • Sepal.Width : 꽃받침의 너비
  • Sepal.Length : 꽃받침의 길이
  • Petal.Width : 꽃잎의 너비
  • Petal.Length : 꽃잎의 길이

아주 간단하게 데이터 분석이 가능해집니다.

아이리스 예제는 인공지능 머신러닝에서 매우 중요하게 다뤄지는 예제입니다.

지금까지

다음 포스팅에서는 이전의 범죄 데이터를 활용하여 시각화 분석을 해보도록 하겠습니다.

728x90
반응형
LIST
728x90
반응형
SMALL

이번 포스팅에서는 Matplotlib를 활용한 데이터 시각화에 대해서 이야기해보겠습니다.

 

파이썬의 대표적 데이터 시각화 모듈 - Matplotlib

많은 내용들이 Matplotlib 모듈에 포함되어 있지만, 우리는 주로 pyplot이라는 시각화 도구를 제일 많이 사용합니다.

먼저 import 부터 하겠습니다.

pyplot 함수 불러와서 plt로 앨리어스

아주 간단하게 그래프를 그려 보았습니다.

plot 함수에는 그래프에 표현될 데이터들이 들어가고, 각 x축과 y축은 임의로 지정되어서 숫자가 표시됩니다.
조금 더 복잡하게 삼각함수 그래프를 그려보겠습니다. 물론 numpy를 활용합니다.

figsize: 그림 크기

각종 옵션으로 grid나 x축, y축 라벨을 붙여 그래프에 대한 설명을 시각화할 수 있습니다.

두 개 이상의 그래프를 비교하여 시각화를 해줄 수도 있습니다. (plot만 더 추가)

범례 옵션도 plot 함수에 추가 해주면 범례 표현도 가능합니다.

오른쪽 상단에 표기

또한 lw 옵션을 이용해 선의 굵기를 지정할 수 있고, color 옵션으로 색상도 지정 가능합니다

다른 모양 그래프로 더 알아보겠습니다.

linstyle 옵션으로 선의 모양도 지정할 수 있습니다.

dotted : 점, dahsed : 끊어진 선

데이터가 실제 존재하는 곳에 점을 찍어 줄 수도 있습니다.
marker 옵션을 이용해 점을 찍고, markerfacecolor 옵션을 이용해 색상을, markersize 옵션으로 크기를 지정할 수 있습니다.

scatter를 사용하면 점 그래프가 됩니다.

scatter로 점 그래프 그리기

scatter에서는 마커의 크기를 s 옵션으로 조절합니다.
c 옵션(색상)으로 color map까지 만들어 낼 수 있습니다.

numpy의 랜덤 함수를 이용해서 그래프를 그려 보겠습니다.
loc 옵션으로 평균을, scale 옵션으로 표준 편차를 조절할 수 있습니다.

위의 그래프를 boxplot으로 표현할 수도 있습니다.

boxplot은 나중에 더 자세히 살펴볼 수 있습니다.

2021/02/03 - [Programming/Python] - [Python]Data Visualisation # 시각화 기초 (Plot, Bar)

 

[Python]Data Visualisation # 시각화 기초 (Plot, Bar)

데이터를 분석하기에 앞서, 데이터를 시각화해서 보는 것은 데이터를 이해하는데 필수적인 요소라고 생각합니다. 이번 포스팅에서는 파이썬 기반 시각화 라이브러리인 matplotlib에 대해서 알아

yuja-k.tistory.com

더 많은 옵션 변경을 알고 싶다면 시각화 기초 편을 참고하는 것을 추천합니다.

지금까지 Matplotlib를 활용한 데이터 시각화에 대하여 알아보았고 다음 블로그에서는 CCTV 현황 그래프로 분석해보도록 하겠습니다.

728x90
반응형
LIST
728x90
반응형
SMALL

지난 포스팅에 이어 이번 포스팅은 Pandas 고급 사용법인 두 데이터를 병합하는 방법에 대하여 알아보겠습니다.

 

서로 다른 두 데이터 프레임을 병합해 보겠습니다.

병합을 통해 우리가 원하는 형태의 데이터 프레임을 만들 수 있습니다.

먼저 알아볼 병합 방식인 concat은 데이터를 기준 키(key) 없이 단순히 인덱스나 컬럼을 기준으로 병합을 진행해 줍니다.

위의 데이터가 잘 확인 됐다면 단순히 열 방향(칼럼 기준)으로 합쳐 보겠습니다.
다른 옵션을 부여하지 않으면 자동으로 열 방향으로 병합됩니다.

특별히 keys 옵션을 활용하면 합쳐진 데이터 별 인덱스를 새로 부여할 수 있습니다.
인덱스가 왼쪽에 위치할수록 깊이가 얕습니다. 이 때 인덱스의 깊이를 level 이라고 합니다.

level을 확인해 보겠습니다.

 

레벨에 따른 인덱스 확인하기 -> level = 0
레벨에 따른 인덱스 확인하기 -> level = 1

서로 다른 인덱스와 컬럼을 가진 데이터 프레임을 합쳐 보겠습니다.

df1도 확인 해 볼까요?

axis 옵션을 이용하면 행 (row - 가로방향) 기준 또는 열 (column - 세로 방향) 기준을 설정해 줄 수 있습니다.

 

  • axis가 0이면 세로 병합 - 컬럼 기준
  • axis가 1이면 가로 병합 - 인덱스 기준

axis가 1이기 때문에 가로(row)로 병합이 되는 것이 확인이 됩니다.
문제는 NaN 데이터의 존재입니다.

각 데이터 프레림별 해당하는 인덱스에 알맞은 데이터가 존재하지 않기 때문에 표현할 수 없는 값은 NaN으로 표기됩니다.

예를 들어 df1은 원래 인덱스 6번이 없었는데 concat에 의해 병합되면서 인덱스가 부여가 되었습니다.

하지만, 6번 인덱스에 표현할 값이 없기 때문이고, 2번 인덱스에는 표현할 값이 있기 때문에 NaN 으로 처리되지 않습니다.

마찬가지로 df4는 인덱스 0번과 1번에 데이터가 없었기 때문에 데이터가 NaN으로 처리되고 있는 것입니다.

concat에 join='inner' 옵션을 부여하면 서로 공통적인 인덱스를 가진 행만 병합이 됩니다.

따라서 공통 인덱스가 아닌 행은 버리게 됩니다.

df1, df4의 공통 인덱스인 2번과 3번만 병합 되었습니다.

join_axes 옵션을 이용하면 기준 데이터 프레임의 인덱스를 지정해줄 수도 있습니다.
이는 합쳐지는 데이터 프레임에 기준 데이터 프레임과 동일한 인덱스가 없으면 해당 row는 버립니다.

기존 인덱스를 무시하고 합쳐지고 나서 새로운 인덱스를 부여하려면ignore_index=True 옵션을 사용하면 됩니다.
이번엔 세로 방향(row)으로 합쳐 보겠습니다.

 

key가 되는 데이터를 기준으로 합쳐주는 merge

concat은 두 개의 데이터 프레임에 공통된 key가 되는 컬럼이 없을 때 사용할 수 있으나, merge는 두 개의 데이터 프레임에 공통으로 묶어 줄 수 있는 key값이 있을 때 사용 할 수 있습니다.

이제부터 공통으로 존재하는 칼럼인 key를 기준으로 merge 기준을 설정하는 on 옵션을 사용하여 공통된 key에 대해서만 합치게 만들어 보겠습니다.

서로 동시에 같이 존재하는 키값인 K0, K2, K3만 합쳐진다. 서로간에 없는 키값에 대한 row는 버린다

how 옵션을 활용하여 기준이 되는 데이터 프레임을 지정할 수도 있습니다.

left 데이터 프레임이 기준이 된다. right에는 없는 K4에 대한 값은 NaN 처리
right 데이터 프레임이 기준이 된다. left에는 없는 K1에 대한 값은 NaN 처리

merge 했을 때 키값이 없더라도 일단 행을 채우고 싶다면(합집합처럼)how='outer'를 사용할 수 있습니다.
참고로, how='inner' 옵션은 첫 번째 merge처럼 공통된 키값에 대한 요소만을 갖습니다.

여기까지 Pandas의 고급 사용법 중 하나인 서로 다른 두 데이터 프레임을 병합해 보았습니다.

다음 포스팅부터는 이어서 CCTV 데이터와 인구현황 데이터를 합치고 분석해보도록 하겠습니다.

728x90
반응형
LIST
728x90
반응형
SMALL

pandas는 dataframe을 주로 다루기 위한 라이브러리이며, dataframe을 자유롭게 가공할 수 있습니다.

 

이번 포스팅에서는 파이썬을 활용한 데이터 분석에서 가장많이 활용되는 Data Analysis Library인 pandas에 대해서 알아보도록 하겠습니다. (DataFrame 생성, 정제 및 준비, 삭제, Data 내보내기)

 

pandas는 크게 세가지의 자료구조를 지원하고 있습니다.

1차원 자료구조인 Series, 2차원 자료구조인 DataFrame, 그리고 3차원 자료구조인 Panel을 지원하는데 그 중, 2차원 자료구조로 행과 열이 있는 테이블 데이타(Tabular Data)를 공부해 봅시다.

 

  • Data 분석을 위한 lib

  • DataFrame Create

  • CRUD in Dataframe

CRUD는 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능인 Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 묶어서 일컫는 말이다.

사용자 인터페이스가 갖추어야 할 기능(정보의 참조/검색/갱신)을 가리키는 용어로서도 사용된다.

주로 Database 에서 사용되는 말이지만, 생각해보면 입력된 데이터로부터 어떤 처리과정을 거쳐도 CRUD는 다 적용되는것 같아서 저는 모든 프로그밍 언어를 배울때 중요한 기본기로 봅니다.

 

# CREATE

# READ

# UPDATE

# READ

# DELETE

# READ

  • 키값 or 연속적인 키값을 도출하기

===== 구분선 은 보기 편하시길바라며 ... 햏

  • df.head() / df.tail() -> sample data 출력하기

보기의 예제는 data의 크기가 작아서 한눈에 보기가 쉽지만, big data를 가져오면 10000개가 넘는 row를 가진 dataframe들이 많습니다. 그때, 가장 기본적으로 확인해야하는것이 sample data를 출력하여 data가 가진 정보를 분석하는 것입니다.

  • df = pd.DataFrame(c).T 전치행렬, 컬럼명 변경

     

     

.T (전치 행렬) 를 사용하지 않는 경우 columns 의 갯수를 맞춰주면된다

Pandas를 이용한 DATA 내보내기

  • DataFrame 생성하여 쉼표로 구분된 형식의 새로운csv파일 만들기

print(df)
print(db)

  • 파일을 생성하는 방법

숫자를 수로 사용 - 파일을 분리 혹은 수정본을 위해 구분하여 사용합니다.

 

숫자 순차를 사용하는 이유 - 외부에 있는 파일을 읽을떄 일반적으로 많이 사용합니다.

 

for문을 사용하면 여러개의 파일을 한번에 생선할 수 있다.

 

  • 파일을 생성하지 않고 Test

sys 모듈 : python interpreter 와 관련된 정보와 기능을 제공
sys 모듈을 통해 파일생성을 하지 않고 data를 볼수있다.

 

  • ...,None,... 사이에 None 값 replace

NULL값 대신 다른 문자나 숫자로 대체도 가능하다

  • DataFrame 안에 값이 없을 경우

NaN 값으로 대체되어 출력


DATA 정제 및 준비

  • 결측데이터 여부 확인

  • 결측데이터가 있을때 결측치 채우기

df.to_csv(sys.stdout, na_rep='호랑이') 파일내보내기시 결측값 대처하기

  • 누락된 데이터 골라내기

  • 데이터 변형

  • 데이터 치환

728x90
반응형
LIST
728x90
반응형
SMALL

데이터를 분석하기에 앞서, 데이터를 시각화해서 보는 것은 데이터를 이해하는데 필수적인 요소라고 생각합니다.

 

이번 포스팅에서는 파이썬 기반 시각화 라이브러리인 matplotlib에 대해서 알아보도록 하겠습니다.

 

matplotlib은 다양한 데이터를 많은 방법으로 그래프를 만들고 변화를 줄 수 있도록 하는 파이썬 라이브러리입니다.

 

matplotlib을 사용하기 위해서는 먼저 아래와 같이 matplotlib을 설치하고 import를 해주어야 합니다.

 

  • matplotlib 환경 설정

         File → setting → matplotlib install을 해주면 준비 완료!

 

  • import matplotlib 하는 3가지 방법

  개인적으로, 3번째 방법이 좋은 가독성을 만들어준다고 생각합니다

  • plot 의 종류

  • Graph title

그래프 제목을 'Tiger'로 바꿔보자

  • Data List

인수값을 한개만 입력하면 ( [list 형식] or (tuple 형식)... ) y축의 값으로 설정된다. 

  • Plot 인수값 plt.plot( [y 축], [x 축] )

        ** 주의 **

        인수값이 맞지 않을 경우 >> ValueError: x and y must have same first dimension, but have shapes (5,) and (4,)

        인수값의 차원은 맞춰주어야 한다.

  • Graph grid

    격자의 순서는 show()에서 적용되기 때문에 show() 입력 전엔 꼭 적어야 한다

가독성을 위해 고정틀은 주로 상단에 적어준다 (like title, grid..)

         plt.grid() 의 default 값은 false입니다. 그러므로, True값은 꼭 입력해 주어야 한다.

  • x label y label 지정하기

X축은 'tiger', Y축은 'lion'으로 차트 축 제목을 만들어보자.

  • range를 사용한 인수값

    range 를 가용하여 시작과 끝 값을 설정할 수 있지만, 인수 길이는 같도록 주의해야 합니다.

  • Line colour

line 색상을 다양하게 변경해보자

  • Graph range with Line colour

range 범위값을 이용한 y x 값의 2개의 line 색을 다르게 나타내보자

  • Graph tick mark

 

위와 같은 tick mark를 사용할때는  .-  혹은   - v- 와같이 뒤에 '-'를 붙여사용 합니다.

., ov^<> w1234 sp*hH+xDd로 예시를 봅시다.

k 는 key 값이며 인덱스 번호를 나타내며, v 는 value 값으로 문자열을 나타낸다.
선에 대한 다양한 tick mark를 표현

  • Graph Line Style

  • Graph line detail Style

    선 색깔 굵기 스타일, 마커 종류 크기, 마커 선 색 굵기, 마커 내부 색을 바꿀 수도 있습니다.

무엇을 변경해도 제가 만든표보다 예쁘게 만들수 있으니 다르게 변경도 해보기

  • Graph x/y 축 유효 범위

    plt. x/y lim(start, end)을 사용하여 x축과 y축의 값을 지정할 수 있습니다.

x축 y축의 값의 범위를 지정해보자

  • x / y ticks ( x, y의 눈금자 표시 범위 )

범위설정을 range를 사용하여 지정해주자

  • x / y ticks with rotation

    길이가 긴 범례의 경우, tick 값의 각도를 회전시키면 더욱 보기가 좋습니다.

rotation값을 원하는대로 바꾸면서 돌려보자

  • 인수값, 범례의 label 명과 legend 위치 지정하기

범례의 위치를 바꿔보자

위의 범례의 위치에 따른 값을 사용하여 데이터에 맞도록 설정할 수 있습니다.

오른쪽 하단 = 4

  • 배경 색상

    colour : 0-255까지 사용 가능합니다. 각 색상당 (명도를 나타냄)
    • # 10진수 255를 이용 / 16 진수를 이용 / 비례 값 ex) 0.0(0) - 1.0(255)

  • 출력 그래프 (Window) 창 크기 조절

    figure ( figsize= )를 이용하여 표가 나타나는 window 창의 크기를 조절할 수 있습니다.

colab / jupyter 의 경우 <Figure size 460.8x345.6 with 0 Axes> 로 출력

  • plot 그래프를 여러 개 나타내는 것

    subplot ( plot 가로 값, 세로 값, 창 순번의 위치 값 )
    • 단, 그래프가 겹쳐지지 않게끔 조절해주어야 합니다.

  • y 축 2개 사용 (나이에 따른 age와 height)

    twinx()를 사용하여 y축의 값을 추가할 수 있습니다.

  • Capture 결괏값을 저장할 때 그림파일로 바로 저장하기

        gcf() 를 통해 Figure 객체를 얻어 사용합니다. (변수값부터 얻어 사용)

        그다음, fig.savefig('파일명')으로 파일을 저장합니다.

  • Bar chart ( bar )

bar차트로 나타내보자

  • Horizontal Bar chart ( barh )

  • align = 'center' / 'edge'

    차트의 축(=눈금선) 위치를 가운데 또는 끝에 맞출 수 있습니다.

잘 모르겠죠? rotation = 90 로 회전시켜 정확한 위치를 확인하기

  • Bar 차트 속성

ctrl+b를 통해 bar의 default 값을 알 수 있습니다.

또는, 오른쪽 마우스+GO to..+declaration or usages

 

확인해보면, 아래와 같은 순서로 default값들이 나열되므로, 원하는 값으로 맞춰서 사용하면 간략하고 쉽게 나타낼 수 있습니다.

 

# x, height, width = 0.8, bottom = None(기준값의 밑바닥), *, align = 'center' 속성 사용, data = None, ** kwargs 가변 인수 값 처리):

# alpha = 막대 색깔과 배경과 섞이는 정도를 의미합니다. <- alpha blending 

지금까지 간단하게 matplotlib를 이용하여 기본 그래프를 그리는 방법에 대해서 알아보았습니다.
모든 코드를 외우려 하지 말고 표현하고자 하는 의미를 알아두고 응용부터 시작해 봅시다.

위의 모든 default값을 외우고 있는 사람은 거의 없고 다들 한마음 한뜻으로 찾아본다고 조심스럽게 생각합니다.

저는 외우지 못해서 기록하기 위한 Yuja_smoothie의 노트였습니다~!

728x90
반응형
LIST

+ Recent posts