빅분기실기 최종 정리_1

topics
types
contexts 자격증
tags
#빅분기 #실기 #파이썬 #판다스

빅분기 실기 최종 정리 1 - Pandas 기초

1. pandas numpy 기초

import pandas as pd
import numpy as np

# 함수기억안날때
print(help(df.dropna))
print(dir(df)) # 이게가지고잇는 속성과 함수를 볼수잇음

df = pd.read_csv("")
df.copy()
df.head()
df.tail()
df.info()
df.describe() # 기본통계량등 알수잇음
df.shape
df.dtypes : 타입확인
df.select_dtypes(include='number') # 여러개가능
df.astype({'속성':type})
df['속성'].value_counts() # 어떤value몇개잇는지 # 시리얼형식인듯?
df['속성'].unique() # 어떤값들잇는지
df['조건']<span class="dead-link" title="페이지 없음">&#039;속성&#039;,&#039;속성&#039;</span> #특정속성이 null이아닌 데이터프레임에서 2속성빼냄
< > == & |  다사용가능
#           SQL               vs               판다스 
# 1.  between .. and                 emp['sal'].between(1000, 3000)
# 2.  in                             emp['deptno'].isin([ 10, 20 ] )      
# 3.  is  null                       emp['comm'].isnull() 
# 4.  like                           emp['ename'].apply( lambda 함수) 
# 5. not                            앞에 ~

df[~df['속성'].isnull() ]<span class="dead-link" title="페이지 없음">&#039;속성&#039;,&#039;속성&#039;</span> 

2. 기초통계량

어떻게 생긴데이터인지 확인

df['속성'].mean() # 평균
df['속성'].median() # 중앙값
df['속성'].mode() # 최빈
df['속성'].var() # 분산
df['속성'].std() #표준편차
df['속성'].sum()
abs(값) # 절대값
df['속성'].max()
df['속성'].min()
range = df['속성'].max() - df['속성'].min()


#IQR
Q1 = df['속성'].quantile(.25) # 사분위수
Q3 = df['속성'].quantile(.75)
IQR = Q3-Q1


df['속성'].skew() # 왜도 얼마나  비대칭인지
df['속성'].kurt() # 얼마나 뾰족한지 (정규분포대비)

len(df['속성']) # 데이터수 열수

# groupby + 기초통계
df.groupby('부서')['연봉'].mean()
df.groupby(["부서", "직급"]).agg({"연봉": "mean", "근속연수": "sum"})

3. 데이터 인덱싱 ,정렬, 변경

%%  loc는원본값바낌 %%
df.loc('행','열') # 전체 :, 여러개가능
df.loc(0:3,['속성1','속성2'])
df.loc[~df["지역"].isin(조건값), "지역"] = "기타" #치환

df.drop(columns=['속성1','속성2']) # replace옵션잇음

# 열끼리계산 가능
df['속성1'] + df['속성2']

df.sort_values('속성', ascending=False) # 디폴트는당연히 오름차순 즉 True
df.sort_values(by=["부서", "직급", "연봉"], ascending=[True, True, False])

np.where(조건,true일시,false일시) # like 삼항연산자
df['속성'] = np.where(df['속성']>100 , 100, df['속성']) # 최대값100으로제한
# 이상치쓸때좋은듯

change = {'룽고':'아메리카노', '그린티':'녹차'} # {이전값:새값}
df.replace(change, inplace=True) # 값이 완전히  일치해여험

4.결측치,이상치처리

df.isnull().sum() # 널개수

df.dropna(axis=0).shape # 행 기준 default
df.dropna(axis=1,subset=[]).shape  
# `subset`에 리스트형태의 값을 입력함으로써 결측치 제거를 수행할 레이블을 지정할 수 있습니다.
df['속성'].fillna(값)

# 이상치 판단 보통 그 값까지는퐆함
## IQR이용
upper = Q3 +1.5*IQR # 상한치
lower = Q1 - 1.5*IQR # 하한치

## 정규분포이용 
z = (df['속성'] -df['속성'] .mean() ) / df['속성'] .std() # 표본표준편차
z < -3 or z>3 이상치로 일반적으로 판단 

5. 데이터스케일링

# 표준화 정규분포가되도록.
from sklearn.preprocessing import StandardScaler

zscaler = StandardScaler() 
z = zscaler.fit_transform(df[['속성'] ]) # 평균이 0, 표준편차가 모표준편차
z = (df['속성'] -df['속성'] .mean() ) / df['속성'] .std() # 표본표준편ㄴ차
z.mean() # 0에가까움
z.std() # 1에가까움

from sklearn.preprocessing import MinMaxScaler
# 최소 0 최대 1
mscaler = MinMaxScaler()
 mscaler.fit_transform(df[['속성'] ])

6. 데이터 분리, 합치기

# 가로로분리
df.loc[0:30,]
df.loc[31:60]

# 걍 합치기
pd.concat([df1,df2],axis=0) # 행
# 사실상 join
merged = pd.merge(df1, df2, on='key', how='inner')

7. 날짜/시간 데이터,index다루기

# 날짜로 데이터타입변경
df['날짜'] = pd.to_datetime(df['날짜'])
## int type으로 리턴
df['날짜'].dt.year 
df['날짜'].dt.month
df['날짜'].dt.day 

df['날짜'].between('yyyy-mm-dd','yyyy-mm-dd') #좌우모두포함해서사이인지조건가능 return true or false이 담긴 시리즈
# 형식이 동일해야함. 

df['날짜'].between_time('hh:mm:ss','hh:mm:ss')

df.set_index('속성') # default로 드랍댐. 그러면 인덱스를 날짜로 해서접근가능
df.index.name = 'id'
df = df.reset_index() # 롤백

8. str관련

df['A'] = df['A'].str.replace('분석', '시각화') # string에서 값교체하는것과같음(부분교체가능)
# str붙는순간 널문자열로대하겟다
df['A'].str.split()
df['A'].str.contains('기본')