ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 빅데이터 분석 기사 실기 대비 : 파이썬 필수 함수 모음
    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)

     

     

     

Designed by Tistory.