-
빅데이터 분석 기사 실기 대비 : 파이썬 필수 함수 모음DATA_CERTIFICATES 2023. 10. 30. 22:26
1. 자료형
# 대괄호[] 중괄호{} 소괄호() # 리스트 [] 딕셔너리{} 튜플() 집합{} # 리스트명 = [요소1, 요소2, 요소3, ...] # 딕셔너리명 = {Key1:Value1, Key2:Value2, Key3:Value3, ...} # 튜플명 = ('a', 'b', ('ab', 'cd'))
1) 순서형
## 순서형 자료형 list[] tuple() ## 1. 자료형 list [] # len() 리스트의 길이를 구함 # sort() 디폴트값은 오름차순으로 정렬 1234.... # del 삭제 # append() 마지막 인덱스에 추가를 함 # insert(a,b) a번째 위치의 b를 삽입하기 # index() 값이 있으면 인덱스를 알려줌 # remove(x) 리스트에서 첫번째로 나오는 X를 삭제힘 # count(x) 리스트 안에 x가 몇 개 있는 지 알려줌
## 순서형 자료형 2. tuple () # 튜플은 ( )으로 둘러싼다. #( )괄호가 없어도 튜플로 인식한다. # ex) a = 1,2,3,4,5 => type(a)는 tuple이다. # 리스트는 요소 값의 생성, 삭제, 수정이 가능하지만 튜플은 요소 값을 바꿀 수 없다. # 인덱싱, 슬라이싱은 항상 []을 쓴다. # 사칙연산은 같은 자료형끼리만... # 튜플 요소들을 더해주기 : 슬라이싱 이용 a = (1,2,4,5) b = a[:2]+ (3,) + a[2:] #튜플과 튜플을 더해서 하기 print(b)
2) 비순서형
# 비순서 자료형, dict {} , set ## 1. 딕셔너리 dict {} # {Key1:Value1, Key2:Value2, Key3:Value3, ...} # key 값에는 숫자, 문자열, tuple()만 들어올 수 있다. dict와 list는 안됨 # value값은 다 가능하다. # key와 value는 한 쌍으로 삭제, 추가된다. # 슬라이싱 인덱싱이 아니라 key로 value를 찾는다. # => value형태가 list.tuple이라면 이때 인덱싱.슬라이슬를 적용 # key값이 중복될 경우, 한개만 도출,반환된당 # keys() 딕셔너리명.keys()를 하면 딕셔너리가 가진 key값들을 보여준다. # values() #value값들을 보여준다. # items() #key value를 튜플로 묶어 보여준다. # clear() 지우기 # get() key로 value 얻기 딕셔너리명.get() # in() 해당key가 있는지 확인 => "key" in 딕셔너리명 # update() 딕셔너리에 한번에 key와 value를 추가하고 싶을때 딕셔너리자료형태로 추가함 # zip() 2개의 튜플을 key와 value로 묶어 dict으로 만듬
## 비순서형 자료형 2. ## set()함수 집합 # 순서가 없고 중복을 제거하고 집합을 만든다. # 반환시 {}에 담아나옴 # 만약 set 자료형에 저장된 값을 인덱싱으로 접근하려면 리스트나 튜플로 변환 후 해야 한다. # 교집합 : & 또는 intersection() # 합집합 : | 또는 union() # 차집합 : - 또는 difference() # add() : 요소 한개 추가하기 # update() : 요소 여러개 추가 # remove() : 특정값 제거하기 s1&s2 #교집합 s1|s2 #합집합 s2-s1 #차집합 s.add(4) s.remove(3) s.update([3,4,5,6,7,8,9])
3) 분기문 boolean
# #boolean ### boolean : 분기문 # False 0 True1 # "",[],(),{},None,0 등 문자열,리스트,튜플,딕셔너리 등에 요소가 없으면 False # 그외에는 True
2. 내장함수
#1. ## abs() :절대값 #2. all() : F하나라도 있으면 F 나옴 print( all([])) #True가 나옴, 예외 #3. any() : T하나라도 있으면 T나옴 #4. dir() : 변수나 함수를 보여줌 #5. ## divmod(a,b) : a를 b로 나눈 몫과 나머지를 튜플로 리턴 #6. # 몫을 구하는 연산자 // s 나머지를 구하는 연산자 % 가 합쳐진것 #7. enumerate() :순서가 있는 데이터(리스트, 튜플, 문자열)를 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 리턴 #8. eval() : 문자열 안에 있는 연산식도 계산 #9. ## filter(func함수, iterable반복가능한 데이터) :함수적용시 반환값이 참인 것을 리턴함 print(list(filter(lambda x: x > 0, [1, -3, 2, 0, -5, 6]))) #10. input() : 사용자의 입력을 받는 함수 # a = int(input("숫자를 넣으시오:")) # print(a) #11. ## int() : 숫자를 정수로 변환. 실수를 변환하면 소수점은 버린다.(반올림없음) #12. # float() : 실수로 변환 #13. # str() : 문자열로 변환 #14. ## len() : 요소의 개수, 자릿수 #15. ## list() : tuple,set등을 list로 변환 #16. ## tuple() : tuple로 #17. ## type() : 자료형 알려줌 #18. # zip(*iterable) : # zip(*iterable)은 동일한 개수로 이루어진 데이터들을 묶어서 리턴하는 함수 # tuple로 묶어서 리스트로 반환 # *iterable은 반복가능한 데이터여러개 입력 가능 print(list(zip([1, 2, 3], [4, 5, 6]))) #19. ## map(): filter와 비슷함, #20. ## max() : 최대값 #21. ## min(): 최솟값 #22. ## sum() : 데이터의 합 #23. ## open(filename, [mode]) : mode 생략가능, #24. # pow(x,y) : x의 y 제곱한 결괏값을 리턴하는 함수 #25. ## range([start], stop, [step]): stop전 까지, start 기본값은 0 #26. # round(number,[ndigits몇번째소수점까지 표시할지]) : 반올림하여 정수로 나타냄 print(round(1.5)) #(홀수의 경우 반올림) print(round(2.5)) #이건...2로 나옴 ( 짝수의 경우 버림) print(round(4.5)) # 4 #27. ## sorted() : 데이터 오름차순 정렬, 결과는 리스트로 리턴 # sorted(어쩌구) : 독립적인 함수로 작동 # 변수객체등등.sort() 의 경우 sort()는 매소드method로 작동 a = [1,2,3] sorted(a) a.sort() # 반복 가능한(iterable) 데이터 # 반복 가능한 데이터란 for 문 등에서 사용 가능한 자료형을 의미한다. # 리스트, 튜플, 문자열, 딕셔너리, 집합 등이 있다. # 28. help(함수명) : 함수의 기능을 알려준다. # help(패키지명.함수명) : 패키지의 함수 기능을 알려준다
*람다함수 / 익명함수
## 람다 함수 *** 3. lambda 익명함수 : lambda뒤에는 함수 : 실무에서 많이씀 # lambda로 만든 함수는 return 명령어가 없어도 표현식의 결괏값을 리턴한다. # 함수명 = lambda 매개변수1, 매개변수2,.. : 매개변수 활용 표현식 add = lambda a,b : a+b result = add(3,4) print(result)
* 파일 읽기
## python file open_close # with open("경로","w") as f: # with 을 사용하면 close을 안해도 된다. # f.write("어쩌구저쩌구내용") ### 파일읽기 # 1. readline() : 첫 한줄만 읽음 # 2. readlines() : 파일의 모든 줄을 읽음 # 3. read() : 파일내용 전체를 문자열로 리턴
3.Numpy
# import numpy as np # ndarray는 list나 tuple 같은 시퀀스 자료형으로 부터 생성한다. ### attribute는 ()을 사용하지 않는다. __.T attribute의 약자 ## a.shape : 몇 행, 몇 열 # a.size : 용량?? # a.dtype : int, float 등등 # a.astype : dtype을 변경한다. X.reshape(3,4) # 만약 행 또는 열이 몇개인지 모르겠으면 -1를 사용하면 됨 X.reshape(3,-1) # 열 모름 X.reshape(-1,4) # 행 모름 ### method는()을 사용한다. ## # np.reshape() : 행렬 모양 바꿈 # np.array() : numpy 연산을 위한 array 생성 # np.arange() : (start,end,step)으로 array 생성 ## # np.zeros() : 0으로 이루어진 행렬 생성 # np.ones() : 대각선 값이 1인 행렬 생성 # np.empty() : 0근사값으로 이루어진 행렬 생성
1) 넘파이 배열의 인덱스, 슬라이싱 인덱스에 [ ]리스트 배열형식이나 boolean배열형식 가능 2) 합치기 np.concatenate( (a,b) ,axis=0) vstack( (a,b) ) 행추가합치기 np.concatenate( (a,b) ,axis=1) hstack( (a,b) ) 열추가합치기 3) 추가 np.append(a,b ) 4) 행렬곱셉 A*B np.matmul(A,B) np.dot(A,B) 5) 정렬 np.sort() 6) NaN 생성하기 np.nan 7) 전치 행렬 바꾸기 np.transpose(A) A.T 8) 절대값 abs() 9) np.amin() np.amax()
4.Pandas
import seaborn as sns import pandas as pd 1) 시리즈 s = pd.Series( 배열을 만들고, dtype=, index=) 속성 (attribute) s.index s.values []인덱싱가능 s.shape s.ndim s.isnull() s.isna() => s[ s.isnull() ] s.notnull() s.notna() s.loc []인덱싱 유용 s.iloc []인덱싱 유용 ㅣ integer location약자]
2) 데이터프레임 DataFrame df = pd.DataFrame(data) # 속성 . df.index df.columns #컬럼명들 볼 수 있음 #인덱싱.슬라이싱 가능 df.values df.dtypes df.T #행렬바꿈 df.ndim #차원수 #데이터 타입 바꾸기 df['컬럼명'].astype('int32') # 컬럼명 바꾸기 df.rename(columns={ "이전 컬럼명" : "이후 컬럼명" }, inplace=True)
### 파일 입출력 # csv 파일 불러오기 df = pd.read_csv('경로/파일명') # csv로 저장하기 df.to_csv('파일명.csv', index=False) #인덱스는 제거하고 저장
5.데이터 프레임
조회_정렬_조건필터
## 표 일부분만 읽기 df.head() : 앞 5줄정도 default값으로 df.tail() : 마지막 5줄 정도 default값으로 df.info() : 정보요약해줌 df['컬럼명'].value_counts() #컬럼별 데이터 분포 확인 ### 정렬 sort ## 인덱스 정렬 # df.sort_index() #디폴트는 오름차순0123, 내림차순 정렬 ascending=False # 값 정렬 # df.sort_values(by='기준이 되는 컬럼명', ascending=False) ## 2개 이상의 컬럼을 기준으로 값 정렬 # df.sort_values(by=['fare', 'age']) ### indexing, slicing # loc : location의 줄임말 #기본적으로 문자열 인덱스가 포함된 경우 사용 # 주의할점 : [시작포함, 끝포함] df.loc[5,'class'] #[행, '컬럼명'] #fancy indexing도 가능 print ( df.loc[2:5, ['age', 'fare', 'who']] ) ## loc-조건필터 # boolean index을 만들어 조건에 맞는 데이터만 추출 cond = ( df['age'] >= 70 ) df.loc[cond] ## 다중 조건 필터 df.loc[ (df['age']>=50) & (df['age']<=80) ] df.loc[(조건1) & (조건2)] & | == 등등 사용 # 특정 컬럼만 df.loc[ 조건, '컬럼명' ] #조건 필터 후 원하는 값 대입 가능 (단일 컬럼 선택에 유의) df.loc[cond, 'age'] = -1 ---- ### 2) iloc : integer location : 숫자 index만 허용 ##주의 iloc [시작포함: 끝 안 포함] # Fancy Indexing df.iloc[[0,3,4], [0,1,5,6] ] # [행 리스트], [열 리스트] df.iloc[:3, :5] ### isin python의 기본 in대신 pandas에서 사용하는 것 # df['컬럼명'].isin( [ '요소1?' ,'요소2' ,'요소3' ] ) ## loc와 활용 condition = df['컬럼명'].isin( [ , , ]) df.loc[ condition ]
결측치 처리
###결측치 처리 # 1.결측 데이터 확인 # 2.결측치가 아닌 데이터 확인 # 3.결측 데이터 채우기 # 4.결측 데이터 제거하기 ## 1.결측 데이터 확인 # df.isnull().sum() #sum()사용시 True인 애들만 나옴 # df.isna().sum() ## 2.결측치가 아닌 데이터 확인 # notnul l: isnull()과 반대. # df.notnull().sum() # 결측 데이터 필터링 # df.loc[df['컬럼명'].isnull()] ## 3.결측 데이터 채우기 => 주로 평균값으로 쓴다 # fillna() : 특정값을 넣을 수 있음 df1 = df.copy() # df1['컬럼명'].fillna() # 통계값으로 결측치 대체 # 1) 평균으로 # df1['컬럼명'].fillna( df1['컬럼명'].mean() ) # 2) 중앙값 # df1['컬럼명'].fillna( df1['컬럼명'].median() ) # 3) 최빈값 : 0번째 index를 지정하여 값을 추출한 후 채워야함 # df1['컬럼명'].mode()[0] # df1['컬럼명'].fillna( df1['컬럼명'].mode()[0] ) # 모드 mode() 최빈값 ## 4. NaN 결측 데이터 제거하기 # dropna() # df1.dropna(how='any') :1개 라도 NaN값이 존재시 drop # df1.dropna(how='all') :모두 NaN값이 존재시 drop 1.결측치 채우기 예시 df1['age'].fillna(30) df.loc[df['age'].isnull(), 'age']= 30
데이터 전처리, 추가, 삭제, 변환
### 1. 추가 # 임의의 값 대입 새로운 컬럼 추가 df1['새로운 컬럼명'] = True # 중간에 컬럼 추가 # insert(컬럼인덱스, 컬럼명, 값) df1.insert(열 넣을 위치인덱스,"새로운컬럼명", 조건값) ### 2. 삭제 : 행/ 열 ## 1) 행 삭제 # 행 삭제시 index를 지정하여 삭제 df1.drop(1) # 범위를 지정하여 삭제 df1.drop(np.arange(10)) # fancy indexing을 활용 df1.drop([1, 3, 5, 7, 9]) ## 2)★★ 열 삭제 ★★ 필 수... # 열 삭제시 반드시 axis=1 옵션을 지정 = 열 df1.drop('컬럼명', axis=1).head() # 다수의 컬럼(column) 삭제 df1.drop(['who', 'deck', 'alive'], axis=1) drop_col = ['who', 'deck', 'alive'] df1.drop(columns=drop_col) # 삭제 내용 바로 적용 # 1> inplace = True 로 지정.. # 2> 변수에 재대입 하여 결과 반영 # df1.drop(['who', 'deck', 'alive'], axis=1, inplace=True)
컬럼간 연산
### 컬럼간 연산 df1 = df.copy() df1['family'] = df1['sibsp'] + df1['parch'] # 문자열의 합 ; 이어붙히기 가능 df1['gender'] = df1['who'] + '-' + df1['sex'] # round() 사용 : 소수점 자릿수 지정 # round(숫자, 소수 몇 째자리) df1['round'] = round(df1['fare'] / df1['age'], 2) # 'round' 라는 컬럼을 생성함, round()를 이용해서 계산, 소수점 2째짜리까지 표시 # 연산시 1개의 컬럼이라도 NaN 값을 포함하고 있다면 결과는 NaN df11 = df1.loc[df1['age'].isnull(), 'deck':].head()
카테고리 타입
### category 타입 #문자열을 다루기 어려운 경우에 함수사용 편의를 위해서 df1 = df.copy() df1['who'].astype('category').head() #category로 변경시에는 Categories가 같이 출력됨 # 예를 들면, who 에는 child man woman 으로 구분(category)할수있음 # 변경사항 적용 df1['who'] = df1['who'].astype('category') # 카테고리 출력 # category로 변경하면 category 의 attribute 사용 가능 df1['who'].cat.categories #특수 메서드 .cat # 카테고리 이름 변경 df1['who'].cat.categories = ['아이', '남자', '여자'] df1['who'].value_counts()
6.Groupby && Pivot table
#1 groupby() : 데이터를 특정 조건에 맞게 전처리에 유용 #2 pivot_table() : 행 열 기준 데이터를 펼쳐서 그에 대한 통계량을 볼 때 df = sns.load_dataset('titanic') ##간단한 함수는 lambda를 이용하자.. ## apply() - lambda 함수 df['survived'].apply(lambda x: '생존' if x == 1 else '사망') # df[컬럼명].apply(함수명) #함수 사용시 괄호 () 안써도 됨 ### 1. groupby() : 특정기준으로 그룹핑 ## 반드시 aggregate 하는 통계함수와 일반적으로 같이 적용 # sum() , mean(), min(), max() 등등 # df.groupby('컬럼명').mean() ## 2개 이상 컬럼 ; list로 묶어서 # df.groupby(['컬럼명', '컬럼명']).mean() ## ★★ 1개의 특정 컬럼만 결과 도출 # df.groupby(['컬럼명1', '컬럼명2'])['결과 알고싶은 컬럼명'].mean() ## 인덱스 초기화 # reset_index() ;그룹핑된 데이터프레임의 index를 초기화,새로운 데이터프레임 생성 # df.groupby(['컬럼명1', '컬럼명2'])['결과 알고싶은 컬럼명'].mean().reset_index() ## 다중 컬럼 결과 도출 # df.groupby(['컬럼명1', '컬럼명2''])[['원하는 컬럼명1', '원하는 컬럼명2']].mean() ## 다중 통계 함수 # agg() : 여러 통계 값 적용시 # df.groupby(['sex', 'pclass'])[['survived', 'age']].agg(['mean', 'sum'])
pivot_table은 시험문제로는 살짝 애매함
##Pivot_table() # 엑셀과 비슷 # index, columns, values를 지정 ## 1개 그룹 단일컬럼 결과 # index에 그룹을 표시 # df.pivot_table(index='', values='') # columns에 그룹을 표기 # df.pivot_table(columns='', values='') ## 다중 그룹 단일컬럼 결과 # df.pivot_table(index=['', ''], values='') ## index 컬럼 중첩없이 행,열로 # df.pivot_table(index='', columns='', values='') ## 다중 통계함수 # df.pivot_table(index='', columns='', values='', aggfunc=['sum', 'mean'])
7.데이터 합치기
#### 데이터 합치기 기본 4가지 방법 #인덱스 A B #1 10 #2 20 #3 30 60 #4 40 80 #5 100 # # 1. inner join : 공통 되는 것만 join # A B # 3 30 60 # 4 40 80 # # 2. left join : 왼쪽 기준으로 join # A B # 1 10 NaN # 2 20 NaN # 3 30 60 # 4 40 80 # # 3.right join 오른쪽 기준 # A B # 3 30 60 # 4 20 80 # 5 NaN 100 # # 4.outer join : 전부 합침 # A B # 1 10 NaN # 2 20 NaN # 3 30 60 # 4 40 80 # 5 NaN 100
Concat
#### dataframe_ concat _ merge ###1. concat() : 데이터 연결 # 지정한 DataFrame 을 이어서 연결함 # 4 가지 방식 연결 # join = 'inner' 'outer' 'left' 'right' # 기본값 axis = 0 으로 지정되어있음 : 행이 기본 ## 행 방향으로 연결 : # 같은 column을 알아서 찾아서 데이터 연결함 # 연결시 index를 무시하고 연결 # pd.concat([컬럼1, 컬럼2], ignore_index=True) # 일부 컬럼이 누락되거나 순서가 바뀌어도 알아서병합됨 pd.concat([df1, df2], axis=0, join='inner') ## 열 방향으로 연결 # axis = 1 ;지정하지 않으면 기본값이 행으로 합쳐집 # pd.concat([컬럼1, 컬럼2], axis=1)
Merge
### 2. merge() : 데이터 병합 # 서로다른 구성의 DF지만 공통된 key값(컬럼)이 있으면 병합가능 # 기준 컬럼이 있으면 합칠 수 있다. # 4 가지 방식으로 병합 # how = 'left' 'right' 'outer' 'inner' # default는 inner => 공통 부분들을 기준으로 병합 # pd.merge(df1, df2, how='left') ## 병합하려는 컬럼명이 다른 경우 # left_on과 right_on을 지정. # 컬럼A와 컬럼B가 이름 성함 이런식으로 되어있음 # pd.merge(df1, df2, left_on='컬럼A', right_on='컬럼B') # 특정 컬럼명을 기준으로 on='컬럼명' pd.merge(df1, df2, on="ID") pd.merge(df1,df2, how='inner', on='ID') # 인덱스 기준으로 pd.merge(df1, df2, left_index=True, right_index=True)
'DATA_CERTIFICATES' 카테고리의 다른 글
AICE Associate 자격증 합격 후기& 팁 (0) 2023.11.17 빅데이터 분석 기사 실기 작업형 2유형 대비 : 한장만 외우기 : 꿀팁 (1) 2023.10.30 데이터 자격증 시험 자료 모음(ADSP,SQLD,빅데이터분석기사) (0) 2023.09.09 SQLD- SQL개발자 자격증 합격 후기 & 팁 (2) 2023.09.09 ADSP 데이터분석 준 전문가 합격 후기 & 팁 (0) 2023.09.09