@21.03.25
Pandas(Panels Data)
@NaN -> null과 비슷한 개념. 비어있는 값 (결측치)
@notnull & isnull
notnull과 isnull은 각각 Series의 Value값이 NaN(Null)인 값을 혹은 아닌 값을 반환한다.
단순 명령어만 실행하면 bool값으로 반환하며, 해당 Series 안에 bool값을 대입하면 True인 index와 Value만 반환한다.
@Series 값 추가,업뎃, 삭제
Series의 Value값을 삭제, 업뎃, 추가 하는 방법이다. 기존의 LIST 자료구조를 다루는것과 비슷.
@Data Frame
2차원 배열을 만들 수 있는 DataFrame이다. 기본적으로 딕셔너리를 대입하여 만들며, Key값이 Column의 이름표가 되며, Value값이 해당 열의 값이 된다. index 또한 기존의 Series와 같이 부여할 수 있다. 해당 사진은 부여하지 않았기 때문에 숫자로 표기되는 모습이다.
@DF - 슬라이싱
DataFrame을 슬라이싱하는 방법이다. 사진을 참고하면 알 수 있듯, 숫자로써 인덱스를 지정하여 슬라이싱할 수 있고, 인덱스의 값을 지정하여 슬라이싱할 수 있다.
두 방법의 차이는 보는바와 같이 숫자의 경우 내가 알던 범위 지정의 형식을 따르나, 인덱스의 값을 지정한 경우 두 값을 포함시키고 사이값을 더해 반환한다.
@DF - LOC & iLOC
LOC와 iLOC의 차이는 실 인덱스와 column 값을 사용하고, 숫자를 이용한 (numpy array방식)방식이냐의 차이이다.
두 개의 명령어 모두 Series, DataFrame 형식으로 반환시킬 수 있다.
@DF - CSV 파일 불러오기 & Encoding
Pandas의 내장 명령어를 통해 엑셀 파일을 불러오는 법이다. 위의 사진처럼 " encoding " 사용하지 않으면 엑셀 파일이 깨져 반환되거나, 에러가 뜨기 때문에 encoding이 필요.
또한 위의 " index_col "이란 명령어를 통해 index를 하나의 column을 지정하여 부여할 수 있다. (원레는 숫자로써 index가 지정되어 있었다.)
@DF - Value_counts
해당 명령어를 통해 데이터의 Value값이 몇개가 존재하는지 count해준다.
@DF - sort(정렬) - index, Values
index와 Values를 sort하는 방법이다.
Values 부분을 보면 ascending에 False를 주어 오름차순으로 정렬한 보습을 볼 수 있다.
%만일 Column을 기준으로 (지역, 2015,..,2000) 정렬하고 싶다면 .T (전치)를 이용하면 됨(sort_column은 없다.)
또한 " by "라는 표현을 통해 특정한 " 열 " 자체를 기준으로 잡고 정렬 시킬 수도 있다.
위와 같이 2개의 값을 기준으로 정렬 시키고 싶다면 대괄호 안에 감싸서 값을 부여하면 된다.
@DF - sum
sum 명령어의 경우 내가 갖고있는 data의 Values 합계를 구하게 해준다.
%AXIS 라는 부분의 경우 Default값이 0인데, 0의 경우 세로 / 1의 경우는 가로 기준으로 합계를 구한다.
axis의 값을 1로 부여(가로기준)했기 때문에 각 반별 과목 합계 점수를 구할 수 있다.
평균과 합계의 경우 내가 필요한건 각 반별 과목 합계 점수이기 때문에, " LOC " 를 사용하여 구분짓고 합계를 구했다.
@DF - 행 추가하기(index추가하기)
Column(열)을 추가하는 방식은 그냥 " DF[열 이름] = data "로 집어 넣으면 되나, 하나의 Row(행)을 추가하는 작업은 따로 있지 않는다.
위와 같이 " Loc " 명령어를 통해 하나의 행( ' 반평균 ' )을 집어 넣어준 모습이다.
%나의 경우는 전치 행렬을 통해 행을 집어 넣어줬는데... 위와 같은게 당연히 더 효율적이겠지??...
@DF - MIN / MAX
MIN과 MAX는 직설적으로 해석해 최소값과 최대값을 구하는 구문이다.위의 사진의 경우 각 과목별 중 가장 작은 값, 큰 값을 구한 모습이며, 합계나 평균 등이 섞이지 않기 위해 특정 부위의 DF만을 따와서 값을 구한 모습이다.
과목(파이썬~Web)만을 따오기 위해 " :5 ", 각 반별만 따오기 위해 " :4 "로 집어 넣었고,각 반 중에서 해당 과목의 최대점, 최소점을 찾기 위함이기 때문에 " 가로 " 중에서 구하는것 이기 때문에 " axis = 1 "이라는 값을 넣어줬다.
파이썬_Pandas의 주피터 노트북
오라클 SQL
@SQL 연습문제
28. 시애틀에 근무하는 사람 중 커미션을 받지않는 모든 사람들의 이름, 부서 명, 지역 ID를 출력하시오
우선 시애틀의 스펠링은 ' Seattle '이다. 시애틀이란 이름의 column은 ' locations ' 라는 table에 있으며 해당 city가 시애틀인 행의 location_id가 departments table의 location_id와 같은 조건으로 SQ를 만들었다.
그리고 커미션을 받지 않는 사람이기 때문에 commission_pct가 null값을 갖는 where절을 찾아줬으며부서명을 출력하기 위해서는 departments table을 조인해야하기 때문에 해당 조건을 위해 where절을 추가해줬다.
29 이름이 DAVIES 인 사람보다 후에 고용된 사원들의 이름 및 고용일자를 출력하시오. 고용일자를 역순으로 출력하시오
문제 설명을 보면 DAVIES라고 있는데.. 내가 갖고 있는 table에서 이름이 저래 대문자로 되어있는건 없다. 때문에 실제 값이 대문자인지 확인하는 작업은 해볼것.
이름이 Davies인 사람의 고용일을 모르기 때문에 SQ를 통해 확인할 수 있다.
%!!!!여기서 내가 성능을 더 저하시키게 만든 구문 하나!!!!
사진을 보며 확인할 수 있는것과 같이 8일차에 " ALL "이란 명령어를 배웠다.
때문에 " hire_date >all (Davies의 고용일) "라고 쓰면. 굳이 그룹함수를 한번 더 쓰지 않고 성능을 좀 더 올릴 수 있다.
아래는 수정한 코드이다.
select last_name, hire_date
from employees
where hire_date >all (select hire_date
from employees
where last_name = 'Davies')
30. King을 매니저로 두고 있는 모든 사원들의 이름 및 급여를 출력하시오.
King을 매니저로 두고있다. 사원의 manager_id가 King의 employee_id이다.때문에 SQ를 통해 King의 employee_id를 찾아줬다.여기서 King이 다수일 수 있는데(실제로 2명이다.) 때문에 in 연산자를 통해 manager_id가 다수개일 수 있는 가능성 또한 열어 놓았다.
%SQ부분에서 where절에서까지 in 연산자를 쓸 필요는 없었던것 같다.
31. 회사 전체 평균급여보다 더 많이 받는 사원들 중 이름에 u가 있는 사원들이 근무하는 부서에서 근무하는 사원들의 사번, 이름 및 급여를 출력하시오.
해석을 잘해야 한다.
1. 회사 전체 평균 급여보다 많은 그룹 중에서
2. 이름에 u가 있는 사원들이 근무하는 부서.
3. 에서 근무하는 사원
이에 해당하는 결과값을 구하기 위해서 적은 조건의 역순으로 프로그램 코드를 적어나가면 될 것.
일단 평균 급여는 내가 반환한 모든 값에 대한 평균이기 때문에 첫번째 SQ를 만들어 비교한다.
그리고 그러한 사원 중 이름에 u가 들어있는 그룹을 찾아줘야하기 때문에 where절에 추가로 조건을 넣고
그러한 사원이 근무하는 부서번호를 찾는거기 때문에 두번째 SQ를 만들어 in 연산자와 함께 해당 사원을 뽑는다.
%!!! 그런데 틀렸다 ㅎ !!!
위의 코드 구문을 아래부터 천천히 읽어보자. 1. 이름에 u가 들어가면서, 2. 급여가 평균급여보다 많은 사원들의, 3. 부서번호
즉, 지문에 대한 다이어그램을 생각해보면 1. 회사전체평균 보다 많이 받는 사람이 바깥 원, 2. 이름에 u가 들어있는 그룹이 그 안의 원인데, 내가 작성한건 이름에 u가 들어있고 평균급여보다 많다는게 같은 원이 되어버린다.
때문에 회사평균보다 많은 그룹 안에 집어 넣어주기 위해 where절만 아래와 같이 바꾸면 된다.
select employee_id, last_name, salary
from employees
where department_id in (select department_id
from employees
where last_name like '%u%'
and salary > (select avg(salary)
from employees))
=======================================================
오라클 질문에 의한 재수업
@JOIN
만일 2개의 table이 있다면, JOIN이란건 Primary Key와 Foreign Key를 한개의 열로 합치고 이를 기준 삼아
" 두 개의 Table을 연결 및 확장하는 것. "
일단 무조건 Pri키와 Fore키는 같은 이름을 가질 수 밖에 없으니, 이를 where절을 통해 묶고 연결만 하면 그게 전부다.
( 만일 회사에서 사용한다고 가정할 때 부서번호와 사원번호라고 이름지은게 Pri키와 Fore키라면 누가 알겠는가. -> 거의 짜장 짬뽕 이라 표기해 놓곤 시켜보니 둘다 짜장인 격. )
=======================================================
8. 데이터조작(DML)
@INSERT INTO - Table에 새로운 행(Row) 추가
- 항상 마지막에 추가가 됨. => Table의 사이에 추가할 수 없다.
- 한번에 한개의 행만 삽입할 수 있다.
아래는 INSERT문의 사용 문법이다.
insert into --Table의 이름을 적는다.
values --삽입열 -> data(값)
여기서 values의 경우 무조건 " inser into "와 하나의 세트이다. -> values만 여러개 쓸 수 없다는 소리다.
into의 경우 사용법이 2개가 있다.
1). table의 이름만 명시 => table의 모든 column에 data를 삽입한다는 뜻.
2). table과 column의 이름 명시 => 명시된 coulmn에 data를 삽입한다는 뜻.
%주의
--into에 명시된 table의 column의 순서, 갯수, data type, 길이는 values절의 data와 반드시 일치하여야 한다.
(data type의 경우 desc 명령어를 통해 table을 보면 type과 길이가 같이 나온다.)
(into절에 순서가 명시되지 않은경우 desc를 통해 볼 수 있는 column의 순서를 따른다.)
위는 " INSERT - INTO "절을 실행시켜본 결과이다.
%추가한 사항에 대해서 취소하고 싶다면 " rollback; "을 실행시키면 된다.
무결성 검증
Column 무결성 - Column의 data type 및 길이가 같아야한다.
제약조건 무결성 - Frimary 및 Foreign Key가 같아야 한다.
@INSERT INTO - 특정 열만 추가해보기
즉, 특정 Column에 대해서는 " null "값으로 둔다는 얘기이다.
이에 대해서는 두가지의 방법이 있다.
1). 열을 명시하는 방법
2). Values에 null을 입력하는 방법.
1의 경우 null 값으로 둘 column에 대해서는 INSERT 구문에서 명시하지 않았다.
2의 경우 VALUES 구문에서 해당 열에 대한 값을 null로 주었다.
더 선호, 통용되는 방법은 null을 입력하는 방법이다.
@dual - 가상 Table
- dual이란 Table은 일종의 가상 table을 말한다.
- dual table을 select하여 뽑아보면 X란 값이 나오는데 이는 ' 변수 '를 말한다.
- 때문에 해당 변수를 통해 연산또한 가능하다 (위 사진을 보면여러 숫자를 곱한 연산이 행해짐을 볼 수 있다.)
%sysdate
dual table에서 sysdate라는 값을 뽑으면 금일 날짜를 출력할 수 있다.
@UPDATE - Column단위 작업
UPDATE - SET 구문은 위와 같이 Column단위로 추가를 할 수 있다.
- 첫번째 사진을 보면 사원번호가 206번인 사원만 봉급을 20000으로 만들었다.
- 두번째의 경우 위와 다르게 where절 없이 실행시킨것으로, 모든 행의 salary값이 20000으로 변경됨.
@DELETE
- departments table의 경우 employees table의 부모 레코드로서 존재하므로 삭제할 수 없다.
-> 정확히는 department_id라는 Key가 employees table에서 Foreign Key로 존재하므로 삭제할 수 없다.
- Delete 명령어는 rollback이 된다.
- 이와 다르게 DROP이란 명령어는 특정 백업이 있지 않는 이상은 절대되지 않는다.
- rollback은 commit된 data를 지울 수 없다.
@MERGE
MERGE 명령어는 DML 명령어를 동시에 여러개의 Table에 수행할 수 있도록 도와준다.
%단, 해당 기능은 Java나 Python 언어를 통해 실행하는게 가장 효율이 좋다고 한다.
'국비교육기관 > 수업' 카테고리의 다른 글
11일차_파이썬_Matplotlib / 오라클_DDL_제약조건 (0) | 2021.03.29 |
---|---|
10일차_파이썬_Pandas / 오라클_DDL_CREATE_ALTER (0) | 2021.03.26 |
08일차_파이썬_Numpy_Pandas / 오라클 SQL_서브쿼리 (0) | 2021.03.24 |
07일차_파이썬_Library_Numpy / 오라클 SQL_JOIN (0) | 2021.03.23 |
06일차_파이썬_함수 / 오라클 SQL_ORDERBY_논리조건 (0) | 2021.03.22 |
댓글