DataAnalysis cheat sheet

- 6 mins

값은 무조건 인덱스로 접근

Numpy

idx물론 한번에 접근 가능하다 -> a : b : c, a부터 b-1까지 구간에서 c단계 별로 접근한다, c는 안쓰면 default 1

idx대신해 리스트(bool, idx)를 넘겨도 동시에 접근 가능하므로 반복문을 통해
접근을 안해도 된다.
기령 condition = 리스트 > 100 통해 bool 리스트 얻은후 ndarr[condition] 으로
True부분만 접근.

범위기반, 리스트는 특정 값만

ndarr.max(), ndarr.min(), ndarr.std() (표준편차), ndarr.var() (분산)
np.median(ndarr)(중앙값)


Pandas

기본적으로 함수로 값건드릴때 return만 되고 안바뀜, 바꾸려면 inplace=True arg 넣기 기본적으로 np를 이용해 만든 라이브러리

DataFrame 과 Series공통

DataFrame

조회

값 수정/추가

값수정은 일반 프밍과 동일하며 추가는 map 자료형과 동일한 느낌
df.loc[:,’name’] = list -> name이 없으면 list가 추가, 있으면 수정

삭제

df.drop(21, axis = ‘index’) or df.drop(‘age’, axis = ‘columns’)
와 같이 1번째 arg에는 원하는곳, 2번째는 그게 index인지 col인지 명시해주어
해당 index/col을 다 지워 버린다.

기타.

Series

1차 배열이지만 인덱스가 엄연히 존재한다


시각화, matplotlib

매개변수 틀만 알고, 그래프의 특성을 파악해서 어떠한 type의 col_name을 넘겨야겠다 파악

%matplotlib inline

  1. 보통 index를 x축, 특정 col의 값들을 y로 이용된다.
  2. x=’col_name’, y=’col_name’ 직접 arg넘겨도 편함. (인종에따른 나이)
    ->x가 index면 default로 안넘김

원하는 정보들만 df로 추리고 그다음 plot으로 해당 col을 x, y로 사용

선 그래프

변화를 보여주기에 유용

막대 그래프

kind = ‘bar’
카테고리(종류간, index) 비교를 보여주기 위해, index 별로 값들을 막대로 그림

파이 그래프

kind = ‘pie’
카테고리(종류간, index) 비율/비교를 보여주기 위해
파이그래프에는 x축이 없으므로 원하는것을 set_index를 통해 바꾼후 y로 보려는 col의 이름을
넘겨야 한다.

히스토그램

kind = ‘hist’
연속 (-00 , 00) 특성을 가진 데이터를 일정 구간별로 묶어서 분포를 나타낸다
묶어서 막대로 나오는게 많을수록(bins) 정규분포를 따름

박스플롯

img

data의 통계정보를 시각적으로 잘 보여준다
이를 통해 data를 분석할때 어느 한 수치(평균값 같은)만 가지고 판단하면 안된다.

산점도

kind = ‘scatter’
두 col의 상관관계를 보여주기에 적합하다.
(수학점수 - 영어점수)


시각화, seaborn

import seaborn as sns
matplot과 달리 통계를 기반으로한 시각화, 데이터 분포를 보여주기 유용하다.

KDE plot

Kenel Density Estimation -> 가지고 있는 데이터로 어느정도 추측하여 분포를 그린다.

sns.violinplot(y=df[‘col_name’])

box는 요약본을 보여주는 대신 violinplot은 box와 모양 비슷하나 데이터의 분포 또한 보여준다

sns.distplot(df[‘col_name’], bins=15)

히스토그램과 함께 pdf도 같이 그려줌

LM plot

카테고리별 시각화

카테고리(종류)별로 특정 col을 비교할때 자주 사용한다

sns.heatmap(df.corr())

상관계수에 따른 값들을 시각화 해준다 이때,
sns.clustermap(df.corr())을 하면 상관계수가 높은거 끼리 묶이는 시각화

통계 개념

세상의 모든 데이터는 비슷한 분포를 가진다.

평균값 vs 중간값에서 데이터 분석은 중간값이중요, 잘못된 data의 영향을 덜받기에
평균값은 이상치가 없을때 좋다


EDA, 새로운 인사이트 도출

문자열 처리

시리즈(col 값들)의 값들을 dic처럼 쌍을 지어 다른 것으로 바꿀때

ex) 지역번호를 가지고 지역명으로 바꿀때
dic = {}를 만들고 (바꾸고자하는거), df[‘col_name’].map(dic) 하면 바뀐게 return

Groupby

카테고리별(col에 존재) 분석을 편하게 해준다

Groupby = df.groupby(‘col_name’) 하게되면 col_name에 종류별로 묶이는 groupby형식의 데이터가 리턴 되고 (index로 갔다 생각)
Groupby.count() -> 각 헤더별 각각 몇개의 종류의 값이 있는지, 예를 들어 브랜드로 그룹했을때 각 그룹별 ram은 몇종류 있는지?

Groupby.max(), Groupby.min(), Groupby.mean(), Groupby.plot(kind = ‘’, y=’col_num’)

데이터 합치기

img

  1. inner join -> 두 df의 기준 col에서 둘다 있는 값들만 합침

  2. left outer join -> 왼쪽 df기준으로 오른쪽 df 에서 왼쪽에 있는 값들에 나머지 정보 붙이는 느낌-> 왼쪽의 df는 순서가 바뀌지 않는다

  3. right outer join

  4. full outer join

df.merge(df1, df2, on = ‘col_name’, how = ‘left’)
-> how에 left, right, outer 있으면 안쓰면 inner

데이터 클리닝

img

q1 = df[‘col_name’].quantile(0.25) -> 데이터 분포에서 25% 까지인 지점의 값을 리턴
q3 = df[‘col_name’].quantile(0.75)
iqr = q3-q1
condition = ((q1 - 1.5iqr) > df[col_name]) |((q3 + 1.5iqr) < df[col_name])
df.drop(df.loc[condition, ‘col_name’].index)


참고

comments powered by Disqus
rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora