빅분기실기 최종 정리_1

topics 900-자격증 100-데이터분석 & AI
types 학습 레퍼런스
contexts 자격증
tags

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

1. pandas numpy 기초

import pandas as pd
import numpy as np

# <span id="함수기억안날때"></span>함수기억안날때
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['조건']<a href="/pages/'%EC%86%8D%EC%84%B1'%2C'%EC%86%8D%EC%84%B1'.html" class="wiki-link">'속성','속성'</a> #특정속성이 null이아닌 데이터프레임에서 2속성빼냄
< > == & |  다사용가능
# <span id="sql-vs-판다스-"></span>SQL               vs               판다스 
# <span id="1-between-and-empsalbetween1000-3000"></span>1.  between .. and                 emp['sal'].between(1000, 3000)
# <span id="2-in-empdeptnoisin-10-20-"></span>2.  in                             emp['deptno'].isin([ 10, 20 ] )      
# <span id="3-is-null-empcommisnull-"></span>3.  is  null                       emp['comm'].isnull() 
# <span id="4-like-empenameapply-lambda-함수-"></span>4.  like                           emp['ename'].apply( lambda 함수) 
# <span id="5-not-앞에-"></span>5. not                            앞에 ~

df[~df['속성'].isnull() ]<a href="/pages/'%EC%86%8D%EC%84%B1'%2C'%EC%86%8D%EC%84%B1'.html" class="wiki-link">'속성','속성'</a> 

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['속성']) # 데이터수 열수

# <span id="groupby-기초통계"></span>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옵션잇음

# <span id="열끼리계산-가능"></span>열끼리계산 가능
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으로제한
# <span id="이상치쓸때좋은듯"></span>이상치쓸때좋은듯

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

4.결측치,이상치처리

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

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

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

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

5. 데이터스케일링

# <span id="표준화-정규분포가되도록"></span>표준화 정규분포가되도록.
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
# <span id="최소-0-최대-1"></span>최소 0 최대 1
mscaler = MinMaxScaler()
 mscaler.fit_transform(df[['속성'] ])

6. 데이터 분리, 합치기

# <span id="가로로분리"></span>가로로분리
df.loc[0:30,]
df.loc[31:60]

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

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

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

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

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에서 값교체하는것과같음(부분교체가능)
# <span id="str붙는순간-널문자열로대하겟다"></span>str붙는순간 널문자열로대하겟다
df['A'].str.split()
df['A'].str.contains('기본')