본문 바로가기

728x90
반응형

배우기

(265)
[복습] Python 파이썬에서의 groupby 연산 그룹연산이 필요한 경우에 대하여 파악하여보자. 예) emp.csv 파일을 읽고 부서별 최대 급여자 이름을 출력해보자. 이런식으로 매 행 돌아가는 과정이 transform 과정이다. SQL로 따지면 상호연관 서브쿼리이기도 하다. 여기까지가 transform의 원리이다. 각 행마다의 그룹 연산 결과를 보장해준다. 즉 각 행마다 그룹연산 결과를 붙여주는 것이다. 여기서 SAL이랑 MAX_SAL이랑 같냐 라는 것을 R에서는 ddply의 subset이 계산을 했다. 이렇게 최종적으로 부서별 최대 급여자를 호출하게 된다. in sql) 상호연관 서브쿼리 SELECT * FROM EMP E1 WHERE SAL = (SELECT MAX(SAL) FROM EMP E2 WHERE E2.DEPTNO = D1.DEPTNO) ..
[복습] Python wide data에서의 최대/최소 index값 추출(idxmax(), idxmin()) - pandas에서 제공하는 idxmax, idxmin 메서드는 axis를 사용하여 각 행별/열별의 최대와 최소를 갖는 index나 column값을 리턴한다. 이에 대한 예시는 아래 링크의 문제 2의 3)에 실려있다. https://metime.tistory.com/279 - numpy 에서 제공하는 argmax, argmin 메서드는 axis를 사용하여 각 행별/열별의 최대와 최소를 갖는 위치값을 리턴한다. R에서 위치를 리턴해주는 which.max(), which.min()과 같다. 예) 위 링크의 2번 문제의 emp3 데이터프레임에서 index(column)을 제외한 값들만 array로 리턴 위치값이 출력된다.
[실습문제] 2024. 1. 17.(수) (2문제) 1. multi_index_ex2.csv 파일을 읽고 1) 멀티 인덱스, 멀티 컬럼 설정 index 설정) Unnamed:0 컬럼을 보면, 1_A, 1_B, 1_C, 2_A, 2_B, 2_C, .... 이렇게 자료가 있다. 이를 1을 상위레벨, A, B, C를 하위레벨로 바꿀 수 있을 것이다. 그렇다면 1과 알파벳을 우선 분리하여보자. 위처럼 분리하면 TypeError: 'float' object is not subscriptable 이라는 에러메시지가 뜬다. 이는 거의 NA 때문에 나오는 오류이다. NA는 float 타입이기 때문이다. if문을 써서 NA일 경우 무시하는 것도 좋지만 어차피 없앨 컬럼이기 때문에 NA도 문자열로 바꿔버린 후 처리하자. 위에서 구분한 a1, a2를 멀티 인덱스로 설정하고 ..
[복습] Python multi-index(1) 파이썬은 여러 레벨의 index, column 설정이 가능 가장 상위 레벨부터 0, 1, 2, ... 레벨 숫자 부여하여 지정 레벨 별로 정렬하며 그룹핑이 가능하고 삭제 또한 가능 1. 생성 멀티 인덱스는 아래와 같은 형식의 index 이다. 멀티 컬럼은 아래처럼 설정된 컬럼이다. 설정은 아래와 같이 할 수 있다. df1.index =[[상위레벨], [하위레벨]] df1.set_index = ([상위레벨], [하위레벨]) df1.columns = [[상위레벨], [하위레벨]] 예) index 직접 전달 위와 같은 데이터 프레임을 생성했다면 다음과 같이 멀티레벨 index를 직접 전달할 수 있다. 예) '병원현황.csv' 의 데이터 멀티 레벨 index 설정 잘려서 보이지 않는 부분은 hos = pd.re..
[실습문제] 2024. 1. 16.(화) (3문제) 1. apply_test2.csv 파일을 읽고 각 지점(a~d)별 평균을 구하되, 각 결측치 값은 해당 기간의 최소값으로 대치 후 처리하여라 해당 파일을 처리하기 위하여 name을 index로 처리하고 index를 지우겠다. (본 문제에서 name은 상관 없는 컬럼이므로) 이런 상태로 만들었다. STEP 1) 천 단위 구분기호 삭제 STEP 2) 숫자 변환 시도(astype) → 결측치 처리 대상 확인 sol1) 결측치 처리할 값을 모를 때 → 하나씩 치환 Value Error : invaild literal for int() with base 10 : ' - ' 라는 에러가 뜬다. - 라는 문자가 삽입되어 있다는 의미이다. 문제에서 결측치는 해당 기간의 최소값으로 지정하라고 했으나 일단 NA로 치환해두..
[복습] Python fillna (NA치환) emp.fillna(value, method, axis = 0) 위와 같은 데이터프레임을 설정하자. 1) 특정 값으로의 치환 모든 NA에 같은 값을 치환하려면 위와 같은 방법을 취하면 된다. 2) 컬럼별 서로 다른 값으로 치환 위와 같은 방법으로 진행하면 각 컬럼별 치환값을 서로 다르게 전달할 수 있다. 3) 이전/이후 값 치환 axis = 0이므로 method = 'ffill' 옵션을 사용하면 이전 행의 값을 가져온다. 즉 이전 행의 값으로 치환된다. method = 'bfill' 옵션을 사용하면 이후 행의 값으로 치환된다. 위 데이터프레임은 이후 값을 가져올 것이 없어서 치환이 되지 않았다. axis = 1 이므로 이후 컬럼의 값으로 치환된다. 연습문제를 풀어보자. subway2.csv 파일을 읽고 ..
[복습] Python dropna 메서드(NA를 포함한 행/컬럼 제거) emp.dropna(axis = 0, # 제거방향(0: 행 제거, 1: 컬럼 제거) how = 'any', # NA 제거 방식 ↔ all thresh, # NA수 제한 subset) # NA 체크할 대상 전달 먼저 dropna 메서드 테스트를 위한 아래와 같은 데이터프레임을 셋팅하여보자. df_na.dropna()를 하면 모든 행이 NA를 포함하고 있으므로 아래와 같이 전체 행이 제거가 된다. how = 'any'로 설정되어 있기 때문에 모든 컬럼을 체크하여 NA가 하나라도 포함되어 있으면 해당 행을 제거해버리기 때문이다. how = 'all' 옵션을 주면 모든 값이 NA로 구성된 행만 제거가 된다. subset = 'E' 옵션을 주게 되면 E 컬럼을 체크하여 E컬럼에 NA가 포함된 행을 제거한다. 여러..
[복습] Python numpy / pandas 수학통계 함수(메서드) 차이 1. 분산/표준편차 기본 수식 차이 다음과 같이 변수가 선언되었다. numpy로 분산을 구한 것과 pandas에서 분산을 구한 값이 다르다. 그 이유는 numpy는 수학적 분산을 구한 것이고 (편차 제곱의 합을 n으로 나눔), pandas는 통계적 분산을 구한 것이다(편차 제곱의 합을 n-1로 나눔). 따라서 분석기사에서 분산을 구하려면 pandas의 값으로 구하여야 한다. 하지만 numpy에서도 통계적 분산을 구하는 방법이 있다. ddof 가 자유도 옵션인데 default가 0으로 되어있다. 따라서 이 옵션을 1로 넣어주면 통계적 분산을 구할 수 있다. 반대로 pandas에서도 수학적 분산을 구할 수 있다. 마찬가지로 자유도 옵션이 1이 default인데 0으로 바꿔주면 수학적 분산을 구할 수 있다. ..
[복습] Python 결측치 확인(isnan, isnull), 수정(fillna), 삭제(dropna) 결측치 - 잘못 입력되거나 연산된 값을 표현 - numpy에서 nan으로 표현 1. 확인 1) np.isnan 이런 데이터가 있다고 하자. s1에 isnan 함수를 사용하면 에러가 난다. s2에 isnan 함수를 사용하면 출력이 잘 된다. 이렇게 되는 이유는 isnan은 문자형 NA는 체크를 하지 못하며 숫자형 NA에 대해서만 체크가 가능하다. 참고로 NA는 Series 에서 실수 타입이지만 문자형과 같이 쓰이면 문자가 된다. 2) pd.isnull / isnull 메서드 pd.isnull은 문자형 NA에 대해서도 체크가 가능하다. 상수 하나에 대해서 NA를 체크하려면 pd.isnull()함수를 사용하여야 한다. NA.isnull은 에러가 난다. 데이터 프레임에 대해서 각 원소별 NA 값을 확인할 수 있..
[복습] Python index / column 삭제(drop 메서드) df1.drop(labels, # 삭제할 이름(위치값 전달은 불가함) axis = 0, # 모든 axis는 0이 default. 삭제 방향 level = 0, # multi index의 level inplace = False) # False가 default. 원본을 대체할 것인지 여부. (원본 즉시 수정 여부) 위에서 level의 의미는 다음과 같다. 선생님 필기인데, A가 level = 0이고 , 2001, 2002가 level =1 이 된다. 글로 설명하기 어려워서 그림 첨부. 예) emp 에서 HIREDATE 컬럼 제거 예) emp에서 SCOTT 행 제거 drop에서 위치값 전달 불가인데 행삭제가 되는 이유는 index가 현재 이름이자 위치값이므로 전달이 가능한 것이다. 또는 아래와 같이 해결할 수..

728x90
반응형