1. 라이브러리 및 데이터 읽어오기
ㅇ 컬럼명 확인할 수 있도록 세팅하기
import pandas as pd
df = pd.read_csv('ㅇㅇㅇㅇ.csv')
pd.set_option('display.max_columns', None) #컬럼명 전부 확인할 수 있도록 셋팅하기
2. 데이터 탐색(EDA)
# print문으로 확인하고, 나중에 주석처리하기
ㅇ 데이터 샘플 확인하기 : df.head() / df.tail(n)
ㅇ 데이터프레임 크기(행/열) 확인 : df.shape
ㅇ 컬럼별 데이터타입 확인 : df.info()
ㅇ 기초통계 확인 : df.describe()
ㅇ 데이터 항목 종류 확인
- 컬럼별 종류 수 : 변수명.nunique()
- 컬럼별 항목 종류 : 변수명['컬럼명'].unique()
ㅇ 데이터 빈도수 : df.value_counts
3. 문제 풀고 출력하기(print)
ㅇ 80% 데이터 활용하기 : df 총 길이의 80%를 변수에 넣어서 iloc로 변수 만큼 데이터 선택
- a행부터 b행까지 데이터 선택 : iloc[a:b]
a = int(len(df)*0.8)
#type(a) 정수형
df = df.iloc[:a]
#print(df.shape)
# 80% 데이터 활용
df = df.iloc[:int(len(df)*0.8)]
# print(df.shape)
ㅇ 특정 컬럼 기준으로 정렬 후 n번째 데이터 선택하기/값 대체하기
- 데이터 정렬하기 : df.sort_values('컬럼명', ascending = True/False) # True는 오름차순 / False는 내림차순
- 데이터 정렬 후 index번호 새로하기 : df.reset_index()
- 특정 컬럼의 n번째 값 선택 : df['컬럼명'].iloc[n-1] # iloc[행 범위, 열 범위]
# views 컬럼 기준으로 내림차순 정렬 후 상위 10번째 값 찾기
df = df.sort_values('veiws', ascending=False)
min_value = df['views'].iloc[9]
# print(min_value)
# views 컬럼 상위 10개값을 위에서 찾은 값으로 대체하기
df.iloc[:10,-1] = min_value
# df.head(12)
ㅇ 특정 조건을 만족하는 데이터 출력하기
- 조건을 cond에 정의하고 만족하는 값 출력 : print(df[cond])
# age 컬럼이 80 이상인 데이터의 views 컬럼 평균 값 구하기
cond = df['age'] >=80
print(df[cond]['views'].mean())
ㅇ 결측치 확인 및 처리
- 결측치 확인 및 값 채우기 : df.isnull().sum() // df.fillna(값)
- 결측치 제거 : df.dropna() # 값 삭제 전/후로 shape 등을 활용해 데이터 출력해보기
# f1 컬럼 표준편차 구하기(전)
std1 = df['f1'].std()
# print(std1)
# f1컬럼 결측치 확인 및 중앙값으로 채우기
# df.isnull().sum()
med = df['f1'].median()
df['f1']=df['f1'].isnull().fillna(med)
# f1컬럼 표준편차 구하기(후)
std2 = df['f1'].std()
# print(std2)
# 두 표준편차 차이 절대값 구하기
print(abs(std1-std2))
# 결측치 데이터(행) 제거 : dropna()
# print(df.isnull().sum())
# print(df.shape)
df = df.dropna()
# print(df.isnull().sum())
# print(df.shape)
ㅇ IQR 활용한 이상값 정의
- IQR : 평균+-1.5*표준편차
# 평균, 표준편차*1.5 값 구하기
m = df['age'].mean()
s = df['age'].std()*1.5
# print(m, s)
# 이상치 최소, 최대값 정의하기
lower = m-s
upper = m+s
# print(lower, upper)
# age 컬럼의 이상치 구해서 더하기
cond1 = df['age'] <= lower
cond2 = df['age'] >= upper
# df[cond1|cond2]
print(df[cond1|cond2]['age'].sum())
ㅇ f1 컬럼의 1사분위 값 구하기 : df['컬럼명'].quantile(.25)
print(df['f1'].quantile(.25))
ㅇ 데이터 선택하기
- df.loc[행, 열]
- df 행/열 바꾸기 : df.T
# 2000년도 데이터 행 선택
# 2000년도 평균 및 평균보다 큰 값 데이터 수 구하기
# 방법1
m = df.loc[2000].mean()
print(sum(df.loc[2000,:] > m))
# 방법2 : 행/열 데이터 바꾸기 df.T
df = df.T
m = df[2000].mean()
print(sum(df[2000] > m))
ㅇ 소수점 처리
import numpy as np
올림 : np.ceil() / 내림 : np.floor() / 버림 : np.trunc()
소수점 출력 : numpy 불필요, round(값, 출력할 자리수)
import numpy as np
# 올림
m_ceil = np.ceil(df['age']).mean()
# 내림
m_floor = np.floor(df['age']).mean()
# 버림
m_trunc = np.trunc(df['age']).mean()
********** 판다스 기초 문법 *********
ㅇ 데이터프레임 만들기 : pd.DataFrame({"컬럼명":데이터})
<데이터 선택/출력>
ㅇ 컬럼 선택 : df[['컬럼1', '컬럼2']]
- 수치형 변수를 가진 컬럼 출력 : df.select_dtypes(exclude = object).columns
- 범주형 변수를 가진 컬럼 출력 : df.select_dtypes(include = object).coumns
ㅇ 컬럼명 출력 : df.columns
ㅇ 인덱스 출력 : df.index
ㅇ 소수점 자리수(반올림) : round(df['변수명'], 자릿수(0,1,2...))
ㅇ 데이터프레임에서 특정 행 선택
- loc[인덱스 명]
- iloc[인덱스 번호]
ㅇ 데이터프레임에서 특정 열 선택
- loc[인덱스 명, 컬럼명]
- iloc[인덱스 번호, 컬럼 번호] # 인덱스 번호로 기재되는 번호 데이터는 포함하지 않고 출력됨 # 범위가 될 수도 있기 때문에 a:b // 전체 데이터 선택 시 :
ㅇ 짝수번째 컬럼만 포함하는 데이터프레임 : df.iloc[:,:,2]
ㅇ 한 셀의 데이터 중 a:b번째 text까지 선택 : str[a:b]
<자료형 변환>
ㅇ 자료형 변환 : df['컬럼명'] = df['컬럼명'].astype('변환할 자료형')
ㅇ 날짜형식 데이터 타입으로 변경 : df['컬럼명' = pd.to_datetime(df['컬럼명']) / df['컬럼명'].dt.year/month
<데이터 삭제>
ㅇ df = df.drop('컬럼명', 행(0)/열(1) 방향)
ㅇ 결측치 데이터 행 삭제 : df.dropna()
ㅇ 특정 컬럼에 결측치가 있는 경우 행 삭제 : df.dropna(subset=['컬럼명'])
ㅇ 중복데이터 삭제
- 첫번쨰 데이터 남기기 : df.drop_duplicates('컬럼명')
- 마지막 데이터 남기기 : df.drop_duplicates('컬럼명', keep='last')
<csv파일로 저장하기>
ㅇ df.to_csv('파일명.csv', index=False)
<데이터 추가>
ㅇ 결측값 추가 : numpy 활용
import numpy as np
df['추가할 컬럼명'] = np.nan
ㅇ 데이터 추가
df.loc[인덱스 명, '추가할 컬럼명'] = 추가할 데이터
ㅇ 리스트[] 형태로 추가 : 컬럼 개수만큼 데이터 추가 필요
df.loc[인덱스 명] = [a,b,c,d]
ㅇ 딕셔터리{} 형태로 추가 : 컬럼 개수만큼 데이터 추가 불요하며, 추가할 데이터가 없는 키값은 결측치(NaN)으로 채움
df.loc[인덱스 명] = {컬럼1:a, 컬럼2:b, 컬럼3:c}
<데이터 정렬>
* 정렬 전에 데이터유형(정수/문자 등)은 동일하게 맞춰야함 : drop을 이용해서 데이터 삭제
ㅇ 인덱스 기준(기본값 ascending=True) : sort_index(ascending = True 오름차순 / False 내림차순)
ㅇ 값 기준(기본값 ascending=True) : sort_values('컬럼명', ascending = True / Flase)
ㅇ 복수 컬럼 값 기준 정렬 : sort_values(['컬럼1', '컬럼2'], ascending = [True/False, Ture/Flase])
ㅇ 정렬한 df 기준으로 새로운 index 만들기 : reset_index(drop=True)
<조건>
ㅇ 기준이 하나 일 때
cond = df["컬럼명'] >=20
df[cond]
ㅇ 기준이 둘 이상 일 때
cond1 = df['컬럼명'] > = 20
cond2 = df['컬럼명'] == a
df[cond1 & cond2] # and
df[cond1 | cond2] # or
<결측치 처리>
ㅇ 결측치 확인 : df.isnull().sum()
ㅇ 결측값 채우기 : df['컬럼명'].fillna(데이터)
<데이터 변경>
ㅇ replace(변경대상데이터, 변경할데이터)
ㅇ 딕셔너리 선언 후, replace(딕셔너리 변수명)
ㅇ loc로 데이터 선택 후 변경
ㅇ 행/열 데이터 바꾸기 : df.T
<내장 함수>
ㅇ 결측치 제외 컬럼/행 별 데이터 개수 카운트 : count(axis = 0(열)/1(행))
ㅇ 데이터 개수 : len(df) / df.shape[0]
ㅇ 최대값 : df['컬럼명'].max()
ㅇ 최소값 : df['컬럼명'].min()
ㅇ 평균 : df['컬럼명'].mean()
ㅇ 중앙값 : df['컬럼명'].median()
ㅇ 합계 : df['컬럼명'].sum()
ㅇ 표준편차 : df['컬럼명'].std()
ㅇ 분산 : df['컬럼명'].var()
ㅇ 왜도 : df['컬럼명'].skew()
ㅇ 첨도 : df['컬럼명'].kurt()
ㅇ 백분위수 : df['컬럼명'].describe()
ㅇ 백분위수 값 : df['컬럼명'].quantile(.25)
ㅇ 최빈값 : df['컬럼명'].mode()[0]
ㅇ 제곱데이터 구하기 : 데이터 **2 : df['컬럼'] = df['컬럼명']**2
ㅇ 나누기 나머지 : %
ㅇ 나누기 몫 : //
<데이터 개수 구하기>
ㅇ len(df[조건1 & 조건2])
<그룹핑>
ㅇ groupby('컬럼')
- 데이터프레임 형태로 출력 : df.groupby([컬럼1,컬럼2], as_index = False)
- 컬럼별 빈도수 : df.groupby(컬럼명).size()
* df.컬럼명.value_counts().sort_index()
- 연산 : .agg(['mean', 'var', 'max', 'min'])
<map>
df['컬럼명'].map({ 'A' : a, 'B':b })
2023.06.12 - [자격증공부/빅데이터분석기사] - [빅데이터분석기사] 작업형2 머신러닝 이론 및 프로세스 요약
2023.06.12 - [자격증공부/빅데이터분석기사] - [빅데이터분석기사][작업형3] 가설검정 이론 및 프로세스(정리)
'자격증공부 > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사] 작업형2 문제유형 (회귀) (0) | 2023.06.14 |
---|---|
[빅데이터분석기사] 작업형3 가설검정 이론 및 프로세스 (0) | 2023.06.12 |
[빅데이터분석기사] 작업형2 머신러닝 이론 및 프로세스 요약 (0) | 2023.06.12 |
[빅데이터분석기사] 작업형2 문제유형 (분류) (0) | 2023.06.12 |
[빅데이터분석기사] 작업형2 기출문제 3회 (분류) (0) | 2023.06.11 |