data.isnull()
true/false로 표현됨
data.isnull().sum()
컬럼별 빈칸의 개수 알려줌
true = 1 , false = 0 으로 되기 때문.
판다스 csv 읽기
pandas.read_csv('path', sep = '\t') 탭으로 분리된 데이터 읽기
이렇게 읽어오면 데이터프레임 타입이 된다.
파이썬 디폴트 인코딩은 UTF-8
판다스 사용
data.describe()
ㅡ> count, mean, std, min, 25%, 50%, 75%, max 값이 컬럼 별로 나온다.
데이터프레임 함수
data.head()
첫 다섯줄 보여줌.
head 함수에 인덱스 지정 가능함.
data.head(10)
data.shape()
데이터 모양 보여줌.
결과: (행,열)
data.info()
컬럼이름과 데이터 개수, 데이터 타입 보여줌
(어느 컬럼에 null 데이터가 얼마나 있는지 확인도 가능함. 다른 컬럼 데이터 건수 대비 적은 건수)
그 외 주요 메소드
std 표준편차, skew 왜도(치우침 정도), kurt 첨도(뾰족함 정도), cumsum 누적 합
data.sum()
수치형 데이터가 아닌 모든 컬럼만 합해줌. 스트링도 합쳐버린다.
데이터 프레임 특정 컬럼만 사용하는 방법
data.column_name
해당 컬럼을 맨앞 & 맨 뒤 다섯줄 총 10줄 보여줌
data.column.sum()
특정 컬럼의 합계만
data['column']
대괄호 써서 사용할땐 따옴표 필수
data['column'].sum()
결과가 data.column.sum() 랑 동일함
수치형 데이터 아닌 컬럼에 무슨 값 있는지 확인
data['column'].unique()
해당 필드 데이터 값 별 데이터 몇 건이나 되는지 요약해서 알 수 있음
data['column'].value_counts()
비율도 알 수 있음
data['column'].value_counts(normalize = True)
각 값별 몇 퍼센트인지 나온다.
만약
어떤 데이터가 수치형인데 수치형으로 인식되지 않았다면?
1) null 값 들어있는지 확인
.isnull().sum()
2) 컬럼의 최소/최대값 확인
data.column.min()
data.column.max()
만약 리턴값이 ₩₩N 이라면?
ANSI 타입으로 읽어들이면서 빈칸이 문자로 들어옴. 그래서 전체 컬럼이 문자로 인식됨.
특정 컬럼의 값을 조건으로 추출하기
data[data.column == '₩₩N']
======<<<결측값, 이상값 처리>>>======
파이썬에서 NaN 은 정해지지 않은 값이다.
Null 과 동일한 표현이다.
data[data.column.isnull()]
컬럼의 값이 null 인 경우만 결과로 반환된다.
loc인덱서 사용하여 특정 조건 만족하는 데이터를 변환하기
data.loc[data.column.isnull(), 'column' ] = 'U'
이상한 값은 모두 NaN으로 대체한 후
NaN을 삭제하는 코드
import numpy as np
data.loc[data.column == '₩₩N', 'column'] = np.nan
nan 으로 대체되었다
data.dropna()
nan 값을 가진 행 제외하고 조회.
실제 데이터를 삭제해버리는게 아니라 nan값을 가진 행을 제외하고 반환하는 함수.
실제 데이터에서 삭제하려면 ?
data.dropna( inplace = True )
결과를 반환 하는 대신, 해당 데이터를 삭제 한다.
데이터 행수가 변경이 된다.
data[['column1','column2']].dtypes
컬럼2개의 데이터 타입 속성값 조회
data[['column1','column2']] = data[['column1','column2']].astype(float)
실수 타입으로 변경
astypes() 메소드는 데이터 타입 변경해준다.
괄호 안에 원하는 타입을 집어넣으면 된다.
===== 이상값 처리 =======
Tukey 방법
1사분위수 아래로 IQR의 1.5배에 해당하는 값보다 작거나,
3사분위수로 IQR의 1.5배에 해당하는 값보다 크면 이상치로 규정하는 방법.
* IQR : InterQuartile Range 사분범위
중간에 50%의 데이터들이 흩어진 정도를 의미한다.
Q3 -Q1 으로 IQR 은 구해질 수 있다.
Q1 은 데이터의 중앙값 아래에서의 중앙값
Q3 은 데이터의 중앙값 위에서의 중앙값
Tukey 방식으로
아웃라이어 구하는 함수
import numpy as np
def outliers_iqr(data):
q1, q3 = np.percentile( data, [25,75] )
iqr = q3 - q1
lower_bound = q1 - (iqr * 1.5 )
upper_bound = q3 + (iqr * 1.5 )
return np.where((data > upper_bound) | (data < lower_bound))
outliers = outliers_iqr(data.column)
np.size( outliers )
하면 이상치 데이터 갯수 확인 가능
data.iloc[outliers]
이상값에 해당하는 행 확인 가능
iloc은 행의 위치를 숫자로 표시해서
데이터 일부를 추출하는 인덱서인데
outliers가 정수를 담은 array이기 때문에
iloc 인덱서 사용하는 것이 적당함.
==========================================================
데이터 통합
==========================================================
판다스 Merge 함수
data3 = pd.merge(data1, data2, left_on='column1', right_on = 'column2')
merge함수의 인자
왼쪽테이블, 오른쪽테이블, left_on =
왼쪽테이블에서 key값으로 사용될 컬럼, right_on = 오른쪽테이블에서 key값으로 사용될 컬럼
join type - how인자
디폴트 값은 inner
how인자의 종류4가지
inner 교집합
left 왼쪽테이블 기준으로 오른쪽 데이터 가져오기
right 오른쪽테이블기준으로 왼쪽데이터 가져오기
outer 합집합
pd.merge(df1, df2, how = 'inner', on = 'a')
같은 컬럼 있으면 on 사용 가능
pd.merge(df1, df2, how = 'left', on = 'a')
등으로 사용하면 된다.
============================================
탐색적 데이터 분석: 시각화
============================================
시각화 패키지: matplotlib, seaborn
matplotlib > pyplot
파이 차트:
범주형 변수 하나를 가지고 그릴 수 있는 차트.
from matplotlib import pyplot as plt
import numpy as np
labels = data.column.unique()
sizes = data. column.value_counts()
colors = ['yellow', 'green', 'red']
plt.pie(sizes, labels=labels, colors=colors, autopct = '%1.1f%%', startangle=90)
plt.show()
colors는 지정하지 않으면 디폴트 사용함
autopct 자동으로 비율을 계산하여 소수점 한 자리까지 표시하고 %를 붙임
startangle 첫번째 파이 조각의 시작 각도 지정
히스토그램
- 하나의 변수
- 수치형 분포
plt.hist(data.column, color = 'blue')
plt.show()
히스토그램의 구간의 크기 변경
plt.hist(data.column, color = 'blue', bins = 1000)
box plot
plt.boxplot(data.column)
상자수염그림
데이터의 일부만으로 그려보기
data_condition = data[data.column < 5000]
plt.boxplot(data_condition.column)
plt.show()
최소값,1사분위수,중앙값,3사분위수,최대값
data_some = data[data.column < 5000]
plt.boxplot([data_some.column[data_some.column2 == 'F'] , data_some.column[data_some.column2 == 'M']])
plt.xticks([1,2],['Female','Male'])
plt.show()
선 그래프
plt.plot( data['column'].groupby( data['column2']).sum() )
plt.show()
막대그래프1
plt.bar(labels, height = sizes, color = 'blue' )
plt.show()
막대그래프2
data2['column'].value_counts().plot( kind = 'bar' )
plt.show()
===============================================
데이터 전처리
===============================================
특정 셀 찾은 후 값 변경 하기
data[data.column == 'f'] = 'F'
data.loc[data.column == 'f', 'column']
= 'F'
인덱서(loc)
- 형식: [행 인덱싱값, 열 인덱싱값]
- 특정 위치의 값을 찾아 변경하고 싶을 때, 인덱서로 찾아서 작업 가능
- 조건, 이름을 넣어 특정 행 찾기
피봇 방식으로 데이터 요약하기
pd.pivot_table( data, index = 'group1', columns = 'type1', values = 'value1', aggfunc = np.sum )
pivot 과 unpivot =>
pivot_table 함수, melt 함수.
원래 인덱스는 0부터 숫자인데.
index = 지정해줘서 이 데이터로 인덱스 사용함.
인덱스 변경
df1 = df1.reset_index()
언피봇함수 (=melt함수)
pd.melt( df1, id_vars = 'group1' , value_vars = ['종류1','종류2','종류3'], var_name = 'type1', value_name = 'value1')
'IT,SW,Data,Cloud,코딩' 카테고리의 다른 글
빅데이터분석기사_캐글T1-1_IQR (0) | 2022.10.11 |
---|---|
파이썬 공부4 (0) | 2022.09.19 |
파이썬 공부3 (0) | 2022.09.13 |
파이썬 공부2 (0) | 2022.08.29 |
[자격증 공부] Salesforce Certified Marketing Cloud Administrator 정보 및 시험 준비, 그리고 합격 후기 (14) | 2022.04.29 |
[AWS 공부] AWS 솔루션 살펴보기 + AWS 웹서버 아키텍쳐 및 로드밸런싱 기초 내용 (0) | 2022.04.26 |
주성분분석(PCA)와 밀도기반 군집분석(DBSCAN) (0) | 2022.02.22 |
텍스트마이닝 (0) | 2022.02.17 |
댓글