분류 전체보기
- 3. DB 조작해보기(UPDATE, DELETE, LIKE %_FILTERING*) 2019.01.23
- 2. 쿼리창 및 간단한 DB조작(SELECT, WHERE, LIMIT*) 2019.01.23 1
- Tistory Blog SyntaxHighliter - 티스토리 코드/신택스 하이라이터 적용과 사용 2019.01.23
- SQL 데이터 분석의 순서 2019.01.23
- 1. PostgreSQL 다운 및 설치 / pgAdmin3 실행 해보기 2019.01.23
- MSSQL 분석연습 2 - 그외 6개 테이블 (2/2) 2019.01.23
- MSSQL 분석 연습 1 - Person (1/7) 2019.01.23
- 1. 통계 - 기술통계와 추론통계 , 표본추출방법들 2019.01.19
- MSSQL JOIN 개념 및 연습 + DELETE, SELECT 팁 2019.01.16 1
- MSSQL INDEX 2019.01.16 1
- MSSQL T-SQL 개념 소개 및 UPDATE 전 BEGIN TRAN 연습 2019.01.16
- MSSQL 기본 쿼리 연습하기 2019.01.16
- MSSQL 설치 및 DB생성 후 CSV파일들 table로 올리기 2019.01.16
- 5. [] barplot with error bar [] 2019.01.15
- 윈도우 10 관리자 권환 얻기 2019.01.15
3. DB 조작해보기(UPDATE, DELETE, LIKE %_FILTERING*)
UPDATE
- UPDATE (테이블명) SET (칼럼) = 대입값 WHERE (특정칼럼 조건) 의 형식이다.
DML(S, U, I, D) 중 하나이며,U,I,D
는 INSERT INTO (테이블) VALUE ()처럼,테이블명이 먼저나오지만 결국 칼럼을 조작
한다.numeric(자리수,소수점자리수)
데이터로 integer로 표현할 수 없는 decimal point(소수점)을 표시한다
.
UPDATE로 칼럼값을 바꿀 때는, WHERE에 primary key인 id 같은 것으로 검색하자.
cf)ALTER
는 PRIMARY KEY를 주는 등의테이블 자체 수정
을 한다. UPDATE로 칼럼 값을 바꾼다.
또한, UPDATE와 DELETE는 반드시 WHERE를 달아줘야 전체 데이터를 보호할 수 있다.
DELETE
- DML(S,U,I,D)정리
SELECT 칼럼 FROM 테이블
UPDATE 테이블 SET 칼럼=값 WHERE 조건
INSERT INTO 테이블 VALUES ( , , )
DELETE FROM 테이블 WHERE 조건
DELETE는 위험하기 때문에 SELECT 먼저 하고, DELETE로 수정하라고 배웠다.
하지만 SQL은 똑똑하기 때문에 아래와 같이 알려준다.
item 테이블의 id = 4는 purchases테이블에서 fk_purchase_item 칼럼으로foreign key로 작용하고 있기 때문에 에러
가 난다해당 테이블을 조회해보자.
맨 처음 purchases테이블을 생성할 때, 아래와 같이 pk, fk를 넣어줬었다.
ALTER TABLE "public"."purchases" ADD CONSTRAINT "fk_purchase_item" FOREIGN KEY ("item_id") **REFERENCES "public"."items" ("id") ON UPDATE NO ACTION ON DELETE NO ACTION NOT DEFERRABLE INITIALLY IMMEDIATE;그럼 items 테이블의 id = 4를 지우려면, 먼저 그 것을 foreign key로 걸어둔 purchases 테이블의 id = 4를 삭제해줘야한다.
Wildcard for filtering unknowns : LIKE 'wildcard';
여기서는 필드 전체가 아니라 필드의 일부분에 근거해서 필터링 하는 방법을 배워보자.
WHERE 칼럼명 IN ('', '');의 경우에는 해당 값 전체가 있어야한다.
여기서는WHERE 칼럼명 **LIKE '패턴'**;
을 이용해 정규표현식처럼 값 일부로 추출할 수 있다.
- customers 테이블의 last_name칼럼에는 t가 들어가는 사람이 2명 있다.
LIKE 칼럼'%'
;에서 %는모든 문자가 줄지어 나타남(any character)
을 의미.
- LIKE 칼럼명
'___'
; 언더스코어는갯수만큼 문자열수를 가지는 값(single character)
을 필터링한다
_ 4개
_ 5개
%
를 응용하면,** 중간에 특정문자가 끼여있는 것을 추출**할 수 있다
예를 들어%t%
- 또 응용하여,
%t_
로 모든문자로 시작하다가 t+1개의 문자로 끝나는 것을 추출할 수 있다.
'한의대 생활 > └ PostgreSQL' 카테고리의 다른 글
CREAT TABLE*(primary key, references) and INSERT INTO (0) | 2019.01.29 |
---|---|
JOIN*(3개 테이블) and GROUP BY*(보이지않더라도 key칼럼으로) and ORDER BY (0) | 2019.01.29 |
4. DB 조작해보기(sp_help과 같은코드, JOIN, *JOIN에 JOIN example) (0) | 2019.01.24 |
2. 쿼리창 및 간단한 DB조작(SELECT, WHERE, LIMIT*) (1) | 2019.01.23 |
1. PostgreSQL 다운 및 설치 / pgAdmin3 실행 해보기 (0) | 2019.01.23 |
2. 쿼리창 및 간단한 DB조작(SELECT, WHERE, LIMIT*)
DB에서 SQL쿼리 창 띄우고, query문으로 table생성 후 command해보기
1. 돋보기 모양을 클릭하면, Query창이 뜬다. 이것으로 db와 상호작용할 것이다.
2. 쿼리창에는 열기 / 복 / 붙 / 실행 / 실행 후 저장 / 현재 상호작용하는 db명 on 서버명 등이 메뉴로 있다.
3. 가운데 화살표를 내리면, 이전에 작성한 쿼리문 또한 활용할 수 있는 history가 있다.
간단한 DB파일 조작해보기
다운로드
select
- 첨부된 파일에서 7_1, 2, 3 파일을 열고 각각을 실행해서 TABLE들을 생성하고-> 다시 열고 다시 실행을 반복하자. 3가지 테이블이 생성될 것이다.
SELECT문으로 customers; 테이블을 가져와보자.
varchar(100)에서 var는 varying의 의미로 글자수를 제한할때 (숫자)와 같이 쓰는 것 같다.
기본적으로 select 뒤에 칼럼을 가져올 때는,테이블명.dot 칼럼
을 찍어주고 가져오는 것을 기 본적으로 해야하는 것 같다. F5키는 먹히나, alt+f1의 sp_help의 기능(mssql)은 없는 것 같다.alias에 빈칸이 들어갈 경우
" " 반드시 쌍따옴표
로 감싸주어야한다. 일반 글자는 쌍따옴표 없이 되는 것을 확인했다.
또한, 그냥 F5를 누르면 전체 실행, 선택+F5시 해당코드만 실행되는 것 같다.
where
- where 문에 들어가는 조건 칼럼도 테이블명. 을 찍어주자.
값에 대해서는' ' 작은 따옴표(single quote mark)
다. alias만 쌍따옴표를 쓰는 것 같다.
sql문만 single equal=
을 쓰는 것도 명심하자.
WHERE문의 조건에는 AND 와 OR 도 쓸 수 있다.
limit ***
LIMIT row개수
는 은 FROM 뒤에서 나타나는 row를 제한하는데,
단독으로는 useful하지 않지만, 첫번째 손님, 첫번째 가입자 등을 볼 때 사용한다고 한다
또한 페이지에 100개만 표시할 때도 사용된 다고 한다.
mssql 등의 TOP 1 * 과 차이점있는지는 모르겠음
'한의대 생활 > └ PostgreSQL' 카테고리의 다른 글
CREAT TABLE*(primary key, references) and INSERT INTO (0) | 2019.01.29 |
---|---|
JOIN*(3개 테이블) and GROUP BY*(보이지않더라도 key칼럼으로) and ORDER BY (0) | 2019.01.29 |
4. DB 조작해보기(sp_help과 같은코드, JOIN, *JOIN에 JOIN example) (0) | 2019.01.24 |
3. DB 조작해보기(UPDATE, DELETE, LIKE %_FILTERING*) (0) | 2019.01.23 |
1. PostgreSQL 다운 및 설치 / pgAdmin3 실행 해보기 (0) | 2019.01.23 |
Tistory Blog SyntaxHighliter - 티스토리 코드/신택스 하이라이터 적용과 사용
티스토리 블로그에 SyntaxHighliter 적용
-
위의 파일을 다운로드 받고 압축을 푼다.
압축파일에서 scripts폴더 안의 파일 + styles폴더 안의 파일을 업로드할 준비 -
블로그에서 [Q]를 눌러 관리자 모드로 진입 > 꾸미기 > 스킨 편집 선택
-
html 편집 선택 > 파일 업로드 선택 > 위에서 언급한 2폴더 다 업로드 후 > 적용
-
다시 HTML 클릭 후, 코드가 끝나는 부분 찾기
-
\head 안쪽에다가
아래 코드들 집어넣기
> 적용
https://gist.github.com/is2js/d12729a9d122b0ae5488276ddf0e467f#file-tistory_syntaxhighliter-js
syntaxhighliter 사용해보기
-
테마 바꾸기
shThemeEclipse.css (default 테마)가 있는 부분을 찾아서 아래 목록 중에 하나로 바꾸면 된다. -
글쓰기 사용법 : html 를 선택한 상태에서 < pre class= brush:언어명>
코드
형식으로 사용한다. 언어명 목록은 아래와 같다.
def class
'개발공통 > IT기본' 카테고리의 다른 글
엑셀 좌우 스크롤 적용하기 (0) | 2019.02.19 |
---|---|
SyntaxHighliter 테마별 스샷 모음 (0) | 2019.01.25 |
윈도우 10 관리자 권환 얻기 (0) | 2019.01.15 |
티스토리 단축키 추가하기 - [글 수정 단축키 m] (0) | 2019.01.02 |
윈도우10 로그인 비밀번호 제거하기 (0) | 2018.03.14 |
SQL 데이터 분석의 순서
MSSQL 단축키
ALT + F1
: 테이블 정보보기CTRL + K + C
: 단번에 주석처리CTRL + K + U
: 단번에 주석제거
DATEDIFF, CONVERT, SUBSTRING()
으로 가공한 칼럼을 다시 처리( COUNT, GROUP BY, MIN, MAX )할 때 :SUBQUERY with alias
- WHERE
LIKE %(any char) or _(single char)
로 필터링 - COUNT(key칼럼)시
중복허용 전체
수(약 처방건수
, 약 code = 약몇개
등)이냐 /유니크한
수(Person테이블의 id와 join되는 해당하는 각 테이블별 id칼럼
->사람
몇명, 약탄사람
몇명 등)냐 고려하기 - 백업을 위한
RENAME TABLE a TO b
- 날짜는 CONVERT 후 SUBSTRING or LEFT / 생일은 DATEDIFF로 ( 나이변경 ) -> DATEDIFF + CASE WHEN( 연령대구간 ) 까지 해당테이블에서 한 뒤, subquery로 groupby
- 집계함수를 적용하는 집계테이블에 대해서는 SELECT로 따로 칼럼 보려면 --> GROUP BY 안에 넣어줘야한다.
- JOIN으로 인해 기준테이이블 + 집계적용할 테이블이 따로 있는 경우는 --> 기준테이블의 id로 GROUP BY하고, 칼럼도 마음대로 SELECT 가능
DB 분석
DB 생성 후 use
Table을 csv로 가져오기(db우클릭>테스크>데이터가져오기) or CREATE TABLE 생성후 BULK INSERT 칼럼명 FROM '파일'
각 Table 정보보기(ALT+F1) -> 엑셀에서 테이블별 칼럼들 시각화 해보기 + 주석으로 칼럼명 나열해놓기
이미 했다면, 칼럼명들 복사해놓기각 테이블의 개수 세기(COUNT(1)) - 여러테이블에 대해 key칼럼을 모르는 상태에서는 1로 count
-중복허용 전체 데이터수각 테이블의 각 칼럼들 분석
- 전체 head보기
- id칼럼이 겹친다면, 각 테이블마다 DISTINCT id칼럼을 count해서 비율 비교하기 ex> 환자수 : 약을 처방받은 환자수
=> 각각cast( as float)
한 다음 나눠서 or분자에 * 1.0
만 곱해서 비율보기
COUNT(key칼럼)
ex> 전체 환자수 vs 약을 받은 환자수
ex> 전체 환자 중 약을 받은 환자의 비율각 칼럼이
범주형
인지 /연속형(숫자,코드)
/시계열
인지 보기
groupby시 항상 key칼럼(id, pk,fk)으로 COUNT하기
범주형
각 칼럼의 head만 보기 (cf. key칼럼 = 사람을 의미)
distinct한 범주 종류보기 -> 종류가 너무 많을 때, distinct한 범주의 수 세기(범주가 너무 많으면 세야함)
범주별groupby를 DISTINCT key칼럼(사람수)으로 count -> DISTINCT key칼럼의 전체 개수와 비교해서
범주안의 null찾기or 서로 교집합이 존재유무확인
orwhere 범주 is null
로 확인하기DISTINCT count하는 GROUPBY(환자, 사람)
인지 /그냥 count하는 GROUPBY(처방된 약의개수, 건수, 빈도)
생각해서 하기
매우많은 범주형 CODE칼럼 : Drug - druglocalcode
각 칼럼의 head만 보기
많은 범주의 갯수 확인하기 (code들은
DISTINCT한 범주의 수 COUNT
하기)
-범주의 종류는 너무 많으므로, count만 해도 된다.코드별 빈도 TOP5 확인
code별로 groupby를 key칼럼 COUNT + code들은 범주의 종류가 너무 많으므로 어떤 약을 많이 썼는지Cnt로 DESC ORDER BY
=> TOP5만 복사해놓기코드로 -> 다른테이블 처방 성분명확인 1)
top 1 code를code해석테이블에서 WHERE 코드명 = top1코드명으로 조회
하고,해석칼럼명 기억
하기코드로 -> 다른테이블 처방
성분명확인한 해석칼럼만 SELECT안의 칼럼으로 가져오기(inlineView) 2)
3.의 조회문장에
1) 해석테이블의 SELECT 문장에 * 를 해석칼럼명으로 바꾼다.( 그것만 가져올 준비)
2) 코드테이블안에 1) 쿼리를 ()괄호로 싸서 inlineview형태의 칼럼처럼 가져온다.
3) 각 테이블에 alias를 주고 -> inlineview 안의 WHERE절에 alias를 달면서 join의 ON처럼 a.코드칼럼 = b.코드칼럼을 조건으로 준다.
4) 코드테이블안의 다른칼럼들도 다 가져온다 *
5) 바깥 SELECT 문에서 필요한 칼럼inlineview(해석칼럼), code칼럼 + COUNT()-groupby
만 챙기기 +ORDER by cnt DESC
넣기
inlineview는 가공칼럼이라 group by에 alias가 못들어간다. 그래서 code칼럼만 넣어준다.코드로 -> 다른테이블
처방 성분명확인 1-2)
JOIN문으로 4번을 대체하기
의미를 내포하는 매우많은 범주형 CODE칼럼 : Drug - atccode
각 칼럼의 head만 보기
많은 범주의 갯수 확인하기 (code들은
DISTINCT한 범주의 수 COUNT
하기)
-범주의 종류는 너무 많으므로, count만 해도 된다.단순코드와 다르게, 먼저 의미 잘라내기
여기서는 첫번째 시작문자만 잘라준다. DATETIME을 자를 때는 CONVERT 후 SUBSTRING or LEFT, 문자열 코드는 바로SUBSTRING or LEFT
로 자르기 =>변형 칼럼 alias + 다시 전체칼럼(*)들과 같이 SELECT하는 subquery
로 필요한 칼럼들만 선택해서 처리 or같은 테이블내 LEFT()등의 1차 처리는 바로 컬럼으로 사용
가능 but GROUPBY 에서도 1차 처리한 문장을 주어야함. alias 안들어감코드별 빈도확인
code별로 groupby를 key칼럼 COUNT + code들은 범주의 종류가 너무 많으므로 어떤 약을 많이 썼는지Cnt로 DESC ORDER BY
=> TOP5만 복사해놓기연도별 + 코드별 빈도확인
1) datetime칼럼에서 연도만 잘라낸 뒤(CONVERT -> SUBSTRING or LEFT)
2)연도칼럼
을 2에서 제작한 subquery(가상테이블)에 alias와 함께 합친다.
3) groupby + order bylong데이터 엑셀 시각화
만약, subquery를 안쓰고 가공한 칼럼을 SELECT문에 그대로 사용한다면, GROUP BY 자리에서는 alias가 안통하고 통째로 옮겨줘야한다.
범주형처럼 문자열 되어있는 연속형(숫자) : Drug - duration
각 칼럼의 head만 보기
만약, 범주의 종류를 확인해보고 싶다면,
CONVERT(int,칼럼명) + alias한 것의 DISTINCT
->ORDER BY alias
int형으로 바꿔준다.문자형에 MIN, MAX를 사용한다면, 맨앞의 숫자를 기준으로 정렬되기 때문에,
int나 datetime에서만 MIN, MAX를 사용
하자 UPDATE는 값에 대한 것들이다. 컬럼자체의 정보는 table 단위로 해석해서 DDL인ALTER
를 사용한다.ALTER TABLE drug ALTER COLUMN duration int
연속형은
MIN, MAX, AVG
로 처리.3개의 통계함수로 한번에 SELECT 후 => 평균 보고 min,max에서 아웃라이어 판단하기
생년월일(시계열,날짜형1) : Person-birthday**
각 칼럼의 head만 보기 (cf. key칼럼 = 사람을 의미)
(만약, string타입이면DATETIME
타입으로 바꾸기)ALTER TABLE drug ALTER COLUMN drugdate DATETIME
시계열별groupby를 key칼럼으로 count 하기
order by까지 완료 후 -> 엑셀로 시각화하기(셀서식-날짜-피벗)
DATEDIFF
( year/day , 시작날짜, 현재날짜(GETDATE())를 이용하여 생년월일 ->나이( 해 나이 / 만 나이 )
로 변형된 컬럼 보기DATEDIFF문을 그대로 이용해서 CASE WHEN THEN END로
만 나이를 연령대별 구간으로 짤라 범주형으로 만들고 난뒤 + * 와 같이보기변형 칼럼인 연령대별(범주별) key칼럼으로 개수(사람수) 세기 위해
4번에서 SELECT ~ FROM 사이에 INTO 새 테이블명
으로 테이블 만들기 orSubquery를 이용해 테이블로 취급하여 칼럼 SELEC하기
연령대별 사람수를 엑셀로 시각화하기
subquery로 만든 연령대별 + 범주별(sex) 카운트해보기
연령대별+성별별 count를 엑셀에서 종모양으로 시각화해보기
날짜(시계열,날짜형2) : Drug-drugdate**
각 칼럼의 head만 보기 (cf. key칼럼 = 사람을 의미)
(만약, string타입이면DATETIME
타입으로 바꾸기)ALTER TABLE drug ALTER COLUMN drugdate DATETIME
MIN, MAX
로 데이터의 시작과 끝날짜 확인하여 데이터 구성날짜 알기CONVERT(type,칼럼명,style)
로 datetime style 바꿔주기 + TOP 100 붙혀서 조금만 조회하기- style
10 = mm-dd-yy <- char(8)
12 = yymmdd <- char(8)
112 = yyyymmdd <- char(8)
20 = yyyy-mm-dd <- char(10) - (필요시)연도만 잘라내기 위해
SUBSTRING(칼럼명,시작index,그 뒤로 개수)
- style
연도별 drug처방빈도
확인하기날짜CONVERT칼럼 with alias
+원본(*)칼럼들
합해서 subquery로 FROM 뒤에 가상테이블화하는subquery(변형칼럼 alias필수)
를 이용하여 (TOP 100 지우기)
-SELECT 날짜alias 선택후 COUNT, MIN, MAX, GROUP BY 등 FROMSUBQUERY
로 가상테이블order by까지 완료 후 -> 엑셀로 시각화하기(셀서식-날짜-추천 피벗-피벗차트)
def class
'한의대 생활 > └ MySQL & MSSQL' 카테고리의 다른 글
SELECT문에 '문자열' AS 칼럼명 + UNION을 활용해 -> 새로운 범주칼럼 만들기, csv파일로 쓰기 (0) | 2019.01.29 |
---|---|
SQL 전체 복습 쿼리문 (private 파일) (0) | 2019.01.25 |
MSSQL 분석연습 2 - 그외 6개 테이블 (2/2) (0) | 2019.01.23 |
MSSQL 분석 연습 1 - Person (1/7) (0) | 2019.01.23 |
MSSQL JOIN 개념 및 연습 + DELETE, SELECT 팁 (1) | 2019.01.16 |
1. PostgreSQL 다운 및 설치 / pgAdmin3 실행 해보기
PosgreSQL 다운 및 설치
Windwos 클릭 > Download installer 클릭 > x86-64비트 클릭
인스톨러 다운받고 설치
- 이 때, 폴더위치나 PORT는 default로 지정하는 것을 추천한다. 마지막에 Builder는 설치해제한다
- C:\Program Files\PostgreSQL\9.5
- C:\Program Files\PostgreSQL\9.5\data
- Port : 5432
- 이제 설치폴더 > bin 폴더에 가서 실행파일들을 보자.
이 가운데 pgAdmin 을 실행시키면, sql서버와 유저에 관한 정보를 쉽게 다룰 수 있다.
- C:\Program Files\PostgreSQL\9.5\bin
pgAdmin3 - Login Role 만들고 DB 생성하기
SQL 서버를 먼저 연결해주자. 우리 컴퓨터가 하나의의 로컬 서버가 된 것이다.
마지막의 Login Roles에 등록된 postgres는 절대 관리자에 관한 규칙이니,, 사용하지 않은 편이 좋다.
Login Roles에서 우클릭을 통해 새로운 유저의룰을 추가해주자.definition 탭에서는 비밀번호를 입력해주자.
Connection Limit을 설정하면, 그 횟수만큼만 접속할 수 있다.Role privileges 에서는 기본적으로 부모 역할을 상속받는다고 되어있다.
이 때, create databases를 선택해서 DB를 생성할 수 있게 끔 해주자.•SQL탭에서 보면, 방금 만든 룰이 적용되어있다. 비밀번호는 MD5라는 알고리즘에 의해 암호화 되어있다고 한다.
우클릭으로 새 DB 생성
Definition탭에서,
Encoding은 default로 UTF8로 지정해놓은 상태에서,
Collation은 아래와 같이 Korea관련된 것으로 했다. 만약 변경이 필요하면 변경해야지..
그 외의 것들은 default로 생성해보자.생성한 DB에서는 여러 기본 메뉴들이 있다. 여기서 가장 중요한 것은
Schema > Public > Tables 일 것이다.
'한의대 생활 > └ PostgreSQL' 카테고리의 다른 글
CREAT TABLE*(primary key, references) and INSERT INTO (0) | 2019.01.29 |
---|---|
JOIN*(3개 테이블) and GROUP BY*(보이지않더라도 key칼럼으로) and ORDER BY (0) | 2019.01.29 |
4. DB 조작해보기(sp_help과 같은코드, JOIN, *JOIN에 JOIN example) (0) | 2019.01.24 |
3. DB 조작해보기(UPDATE, DELETE, LIKE %_FILTERING*) (0) | 2019.01.23 |
2. 쿼리창 및 간단한 DB조작(SELECT, WHERE, LIMIT*) (1) | 2019.01.23 |
MSSQL 분석연습 2 - 그외 6개 테이블 (2/2)
'한의대 생활 > └ MySQL & MSSQL' 카테고리의 다른 글
SQL 전체 복습 쿼리문 (private 파일) (0) | 2019.01.25 |
---|---|
SQL 데이터 분석의 순서 (0) | 2019.01.23 |
MSSQL 분석 연습 1 - Person (1/7) (0) | 2019.01.23 |
MSSQL JOIN 개념 및 연습 + DELETE, SELECT 팁 (1) | 2019.01.16 |
MSSQL INDEX (1) | 2019.01.16 |
MSSQL 분석 연습 1 - Person (1/7)
DB를 가져와서 엑셀로 시각화하기
각 칼럼 분석하기
'한의대 생활 > └ MySQL & MSSQL' 카테고리의 다른 글
SQL 데이터 분석의 순서 (0) | 2019.01.23 |
---|---|
MSSQL 분석연습 2 - 그외 6개 테이블 (2/2) (0) | 2019.01.23 |
MSSQL JOIN 개념 및 연습 + DELETE, SELECT 팁 (1) | 2019.01.16 |
MSSQL INDEX (1) | 2019.01.16 |
MSSQL T-SQL 개념 소개 및 UPDATE 전 BEGIN TRAN 연습 (0) | 2019.01.16 |
1. 통계 - 기술통계와 추론통계 , 표본추출방법들
통계를 배우는 이유
- 통계 : 실험으로 발견한 차이가 우연에 의한 것이 아니다(우연에 의하여 예측된 차이보다 크다)를 밝힘(증명)
- 앞뒤가 동일한 동전을 100번 던져, 48:52 49:51은 우연일 수 있지만, 40:60쯤 되면 우연에 의한 것이 아니라는 것을 의심
- 인터넷광고로 판매량이 늘어날까요? => 차이를 우연에 의한것 인지/아닌지를 통계로 밝힌다(평균차이 T-test)
- 인터넷광고 하고/안하고가 차이가 있을까요? => 차이를 우연에 의한 것인지/아닌지를 통계로 밝힌다.
- 쌓여있는 데이터가 너무 없어서 근거가 부족할 것 같아요. 어떻게 해야하죠?=> *근거가 부족할 시 비모수 검정
- 추천 강의 : K-MOOC 류\*
**
전통적인 통계학 vs 현대의 통계학
- 전통적인 통계학은
- n수가 작았다.
- 농업 분야의 데이터가 실험계획법이 많았다.
- 수식적인 증명과 수리적인 알고리즘으로 소통
- 현대의 통계학
- 빅데이터( n수가 많다 )
- Location(위도, 경도), TimeStamp(mm-dd-yyyy hh:MM:ss) 등의 데이터가 많음.
- 통계 Tool이 많다.
데이터 분석시 고려해야할 4가지
- 보정 : Expect(기대되는 차이)가 target변수 때문에 생긴 것인지 알기 위해서, 다른 변수들을 control(통제)
- Faceting : 전체(수술)을 더 쪼개서 (성형수술/외과수술)나누어 보면, 다른 insight가 있을 수 있다.
- 아웃라이어와 지대값 : y의 값(outlier)와 x의 값(지대값)이 평균에 너무 떨어져 있어서 -> 평균이나 회귀계수에 영향을 준다.
- cf) 영향점 : 회귀에서 결정계수를 낮추진 않지만, 회귀 직선의 기울기에 영향을 주는 것 - 결측치(NA) : R에서는 하나의 NA가 있더라도, 기초통계량을 NA로 반환하므로 없애야한다.
- R에서는 기초통계함수()의 인자로 na.rm=TRUE를 줘야한다.
통계학의 영역 : 기술통계와 추론통계
- 기술 통계(Descriptive Statistics) : 평균, 분산 등의 숫자와 그래픽으로 기술
- Numerically
- Centering(중심) 척도 : 평균 / 중앙값, 절삭평균 / 최빈값
- 자유도 1일 때, 데이터를 가장 잘 나타내는 것
- 중앙값(median) : Outlier에 의해 극값을 가질 수 있는 평균의 현상을 막기 위한 것
- Outlier가 있는 경우 쓰는 중심척도
1) 중앙값(Median) : 데이터를 크기순으로 정렬한 후 가운데 값 (홀수개면 가운데, 짝수개면 가운데2개의 평균)
2) 절삭평균(Truncated mean) : 10% truncated mean이라면, 양 끝값 10%제거 후 가운데 80%로 평균
cf) 가중 평균 : 각 요소별로 가중치를 곱해서 구하는 평균 ex> 수능 점수 -> 대학별 유리하게 반영
- Spread 척도 : 분산 / 표준편차 / IQR
- 자유도 2일 때, 중심척도(자유도 1)만으로 부족한 내용을 설명하는 것
- 분산 : <평균으로 부터> 얼마나 떨어졌는지를 ( 실제값 - 평균) 제곱의 평균
- 그외 : 왜도 / 첨도
- 왜도(Skewness) : 치우친 정도 자료의 대칭성을 알아보는 척도,
- 분포 그래프에서 좌우대칭에 비해 꼬리가 긴쪽이 해당 skewed
- 첨도(kurtosis) : 정규분포에서 그래프이 봉우리가 뾰족한 정도
- Graphically : 그래프
- 추론 통계(Inference Statistics) : 알 수 없는 모집단을 잘 대표할 수 있는 sample(표본)을 뽑고 -> 그것으로 모집단 추정
- 1) 모집단을 잘 대표할 수 있는 데이터를 sampling 하고
- 2) 수집한 데이터(표본, sample)을 가지고 모집단(Population)을 추정하는 것
-3) 추정시에는 항상 얼마나 믿음직한지 신뢰구간도 같이 제시한다.
다양한 표본 추출 방법들 ( sampling의 단계 )
Proportional to Population Size(PPS) : 가장 많이 이용되는 샘플링
- 모집단 속 여러 집단들(서울대병원, 연세대병원, ... , 서울성모병원) 중 Size큰 곳에 높은 확률 배정해서 샘플링층화 : 모집단 속 여러집단들(남자, 여자)에서 몇번 뽑을 것인지 미리 할당하고 샘플링
Simple Random Sampling(SRS) : 무작위로 뽑는 것
집락 : 층화와 비슷
계통 : k계통법이라고 하여, k= 5 지나가는 사람들 중 5번째만 뽑음. k=1 전수조사
- 보통 sampling의 단계 : PPS -> 층화 -> SRS
- sample로 모집단을 추정하는 2가지 방법
- 점 추정 : 170 or 170 이하 or 170 이상 ( 특정 점 or 이상 or 이하)
- 구간 추정 : 160 ~ 180 사이 ( 특정 구간 사이)
- 추정시 제시하는 신뢰구간은 좁을수록 명사수
코딩시 참고 프로그램
'한의대 생활 > └ 통계에 대한 나의 정리' 카테고리의 다른 글
2-2 R markdown ggplot2 ( plotly 올릴시 에러 ) (0) | 2019.02.01 |
---|---|
2. R markdown( 변수별 EDA 및 abline 2가지 사용) (0) | 2019.02.01 |
2. 전처리시 체크2가지 및 EDA시 변수의 성격에 따른 분류 (0) | 2019.01.25 |
1. R markdown(데이터경로, 불러오기, 5가지확인, summarizeColumns, mytable, mycsv) (0) | 2019.01.25 |
R 검정 방법에 대한 나의 정리 (0) | 2019.01.03 |
MSSQL JOIN 개념 및 연습 + DELETE, SELECT 팁
JOIN의 핵심
key 칼럼을 잘 설정했느냐
JOIN의 종류
- (INNER) JOIN : 교집합
- (LEFT/RIGHT/FULL) OUTER JOIN : 차집합, 여집합
- CROSS JOIN : 곱집합
for문은 DB에서 크게 의미없다. 오히려 파이썬 for문이 더 빠르다고 한다.
JOIN 연습하기
CREATE TABLE A (
Letter_U CHAR(1), --문자1개
Number smallint --126까지 허용
)
INSERT A VALUES ('A', 1)
INSERT A VALUES ('A', 2)
INSERT A VALUES ('B', 1)
INSERT A VALUES ('C', 2)
SELECT * FROM A
CREATE TABLE B (
Letter_U CHAR(1), -- A테이블과 연결 key칼럼
Letter_S CHAR(1)
)
INSERT B VALUES ('A', 'a')
INSERT B VALUES ('D', 'd')
SELECT * FROM A
SELECT * FROM B
--- JOIN 해보기 ---***
-- WHERE가 일반 조건문이라면, JOIN문의 JOIN의 WHERE는 ON이다.! JOIN ON 테이블.key칼럼!***
-- SELECT FROM A AS - JOIN B AS - ON -.key칼럼 = -.key칼럼
--1. INNER JOIN = JOIN : 교집합이라 선후관계가 상관없다.
SELECT * FROM A
JOIN B ON A.Letter_U = B.Letter_U
--2. alias를 이용해서, 해보기
SELECT * FROM A AS a
JOIN B AS b ON a.Letter_U = b.Letter_S
--3. OUTER JOIN -LEFT JOIN : 한쪽 테이블을 다 살리면서 붙힌다.***---
-- 실전에서는 잘 안쓰긴 하나, 쓰는 경우는
-- A 진단이 없었던 환자를 찾아줘 -> A 진단 있는 것을 LEFT JOIN 으로 붙힌 다음, B테이블이 NULL인 환자를 찾기
-- 1) LEFT JOIN
SELECT * FROM A AS ta
LEFT JOIN B tb ON ta.Letter_U = tb.Letter_U
-- 연습. JOIN된 것 중에 칼럼 IS NULL 인것만 뽑아보기
SELECT * FROM A ta
LEFT JOIN B tb ON ta.Letter_U = tb.Letter_U
WHERE tb.Letter_U IS NULL
--***참고 DELETE를 할 때는, 먼저 SELECT를 한 뒤 하자.***--
INSERT B VALUES ('C', 'c');
SELECT * FROM B WHERE Letter_S = 'C'
DELETE FROM B WHERE Letter_S = 'C'
-- 2) RIGHT JOIN
-- RIGHT 테이블인 B보다 갯수가 늘었다 = Key칼럼자체가 Unique하지 않은 상태로, 서로 빼먹은 것이 존재해서 늘어남***
SELECT * FROM A ta
RIGHT JOIN B tb ON ta.Letter_U = tb.Letter_U
-- 3) FULL OUTER JOIN ***
-- 교집합 뿐만 아니라 각각의 테이블이 가지는 여집합(차집합)까지 모두 포함해서(NULL이 한곳에서 뜬 상태)나온다.
SELECT * FROM A ta
FULL OUTER JOIN B tb ON ta.Letter_U = tb.Letter_U
--- CROSS JOIN (곱집합)---
-- 쓸일 진짜 없다. 데이터 뿔릴 때 씀
-- 예를 들어, 학년 X 반의 모든 콤비네이션을 만들 때,
CREATE TABLE 학년
( 학년 CHAR(1) )
CREATE TABLE 반
( 반 CHAR(1) )
INSERT 학년 VALUES (1)
INSERT 학년 VALUES (2)
INSERT 학년 VALUES (3)
INSERT 학년 VALUES (4)
INSERT 학년 VALUES (5)
INSERT 학년 VALUES (6)
INSERT 반 VALUES (1)
INSERT 반 VALUES (2)
INSERT 반 VALUES (3)
INSERT 반 VALUES (4)
SELECT * FROM 학년
SELECT * FROM 반
SELECT 학년, 반 FROM 학년 ta
CROSS JOIN 반 tb
-- 2번째 칼럼인 반을 기준으로 정렬되길래 ORDER BY 1로 첫번째 칼럼을 기준으로 정렬시켜보기***
SELECT 학년, 반 FROM 학년 ta
CROSS JOIN 반 tb
ORDER BY 1
-- SELECT뒤에 나올 칼럼을 + 연산할 수 있으며, 문자열이 들어가면, 문자열로 연결해준다 ****
-- 이쁘게 만들기 위해, SELECT 부분에 학년 + 반 칼럼을 '-'로 문자열로 이어주면, MSSQL이 알아서 문자열로 취급해준다.
SELECT 학년 + '-' + 반 FROM 학년 ta
CROSS JOIN 반 tb
-- 연습용 Table 삭제하기
DROP TABLE A
DROP TABLE B
DROP TABLE 학년
DROP TABLE 반
'한의대 생활 > └ MySQL & MSSQL' 카테고리의 다른 글
MSSQL 분석연습 2 - 그외 6개 테이블 (2/2) (0) | 2019.01.23 |
---|---|
MSSQL 분석 연습 1 - Person (1/7) (0) | 2019.01.23 |
MSSQL INDEX (1) | 2019.01.16 |
MSSQL T-SQL 개념 소개 및 UPDATE 전 BEGIN TRAN 연습 (0) | 2019.01.16 |
MSSQL 기본 쿼리 연습하기 (0) | 2019.01.16 |
MSSQL INDEX
index
인덱스를 해야하는 이유는 쿼리 속도를 늘리기 위해서,
- 원래 50개의 데이터 -> 기계어 -> 메모리 or 하드에 01010101 로 데이터+주소를 파일형태로 저장
- 하나의 쿼리 -> where를 이용해서 특정칼럼을 뽑아오는데, 파일시스템은 전체 데이터를 검색한다.
- 특정칼럼을 인덱스로 지정해놓으면 (여러개 칼럼 중 자주 사용하는 특정칼럼(자주 변하는 체중))
-> 컴퓨터가 인덱스 칼럼를 뽑아서 새로운 파일로 만들어 놓는다.
-> 쿼리날릴 때 WHERE조건에 인덱스를 주면, 아주 빠르게 검색해온다. - 인덱스의 종류는 2가지가 있는데, Clustered / NonClustered가 있는데 Clustered가 더 빠르다.
- MSSQL에서는 1개의 Clustered 밖에 못 만들고, 보통은 PRIMARY KEY를 인덱스로 지정한다.
- 이름- 주민번호 / 주민번호-학번 의 2개의 테이블이 있다면,
주민번호가 한 테이블의 PRIMARY KEY가 되고 -> 다른 테이블의 FOREIGN KEY가 되며 -> 각 KEY는 index로 잡혀 있는게 일반적인 RDB의 기본 index형태이다. - T-SQL에서는 1개의 CLUSTERED INDEX를 지정할 수 있으니
WHERE절이나, JOIN절에 가장 많이 넣는 칼럼을 index로 지정하자.
가진 Table의 index 확인
sp_help 테이블네임 -> index가 있을 경우, index_name이 보인다.
sp_help BANK_A -> index 지정 안해줬으니 안나옴.
--★ Index 예시 ★--------
CREATE CLUSTERED INDEX personid ON Person (personid);
CREATE NONCLUSTERED INDEX birthday ON Person (birthday);
SET SHOWPLAN_ALL { ON | OFF }
SET SHOWPLAN_TEXT { ON | OFF }
SET STATISTICS IO { ON | OFF }
SET STATISTICS TIME { ON | OFF }
SET STATISTICS PROFILE { ON | OFF }
'한의대 생활 > └ MySQL & MSSQL' 카테고리의 다른 글
MSSQL 분석 연습 1 - Person (1/7) (0) | 2019.01.23 |
---|---|
MSSQL JOIN 개념 및 연습 + DELETE, SELECT 팁 (1) | 2019.01.16 |
MSSQL T-SQL 개념 소개 및 UPDATE 전 BEGIN TRAN 연습 (0) | 2019.01.16 |
MSSQL 기본 쿼리 연습하기 (0) | 2019.01.16 |
MSSQL 설치 및 DB생성 후 CSV파일들 table로 올리기 (0) | 2019.01.16 |
MSSQL T-SQL 개념 소개 및 UPDATE 전 BEGIN TRAN 연습
Data Science Life Cyle에서의 SQL
- Business Understanding
- Data Mining
- Data Cleaning
- Data Exploration
- Feature Engineering
- Predictive Modeling
- Data Visualizing
위의 진한 부분에서 SQL은 강력한 툴이 된다.
Data에 대한 이해
- 빈 값(0)과 Null의 차이 -> Survivalship Bias(생존자 편향의 오류)
- 빈 값 = 0 = 정보량이 0이라는 말
- Null 정보량이 아예 없다는 말
- 0을 빠트리지 말자 - 각 부분에 대한 평균이 크다고 해서 전체의 평균이 크지 않다 -> Simpson's Padadox(심슨의 역설)
- 전체에 대한 이해 = 주요 변수, 주요 차원(한 단계 아래 차원의 변수)에 대한 이해가 없다면 결과를 왜곡
- 수술 성공률만 보지말고, 무슨 수술인지도 봐야한다.
SQL(Structured Query Language) = 언어의 그룹이다.
BASE : Standard SQL 위에 4가지 종류가 있다.
- PL/SQL(Procedural Language for SQL)
- T-SQL(Transaction SQL)
- Extended SQL/PSM(SQL/Persistent Stored Modules)
- PL/pgSQL(Procedural Language/PostgreSQL)
DBMS(Database Mnangement System)
데이터를 저장하기 위한 [ 데이터 + 스크립트 + 저장장치 ]를 잘 다루기 위해 기능을 제공하는 시스템
SQL의 구조
- DML(데이터 조작 어) : SELECT, INSERT ,UPDATE, DELETE ( S U I D)
- DDL(데이터 정의 어) : CREATE DROP TRUNCATE(메모리절약) ALTER(수정, TSQL용) RENAME(MySQL용) ( C D T A R )
- DCL(데이터 제어 어) : GRANT REVOKE ( G R )
- TCL(트랜젝선 제어 어) : COMMIT ROLLBACK - data의 퀄리티를 높힐 수 있다.
Transacation
data가 양방향에서 깨지지 않게, 한 묶음으로 한번에 실행하는 것
- 이것을 활용하여 UPDATE 전/후의 비교를 통해 쿼리문을 확인할 수 있다.
- data 백업이 어려운 상황에서수정을 해야할 때 활용할 수 있다.
연습 쿼리문
--DDL(CREATE)--
--계좌 1--
CREATE TABLE BANK_A (
이름 CHAR(20), -- 이름은 조금 크게 잡을 수 있다.
계좌 TEXT, -- 20글자보다 이상 들어간다.
잔고 INT
)
--계좌 2--
CREATE TABLE BANK_B (
이름 CHAR(20),
계좌 TEXT,
잔고 INT
)
--DML--
--돈 미리 넣어놓기--***
INSERT BANK_A VALUES ('조재성', '1', '500000');
INSERT BANK_B VALUES ('김석영', '2', '0');
--계좌 확인--
SELECT * FROM BANK_A
SELECT * FROM BANK_B
--TRANSACTION으로 송금해보기--***
--UPDATE 테이블 SET 바꾸고 싶은 칼럼 = 가지고 계산 WHERE ***
--DELETE와 UPDATE시 WHERE 조건 꼭 달아줄 것***
-- 1. 먼저 한쪽에서 보낸 것만 해보고 ROLLBACK 해보기
BEGIN TRAN
UPDATE BANK_A SET 잔고 = 잔고 - 50000 WHERE 이름 = '조재성'
SELECT * FROM BANK_A
SELECT * FROM BANK_B
--여기 전까지 한꺼번에 선택해서 F5
ROLLBACK --TRAN이 맘에 안들어서 취소
-- 2. 한쪽에서 보내고, 한쪽은 받는 로직까지
BEGIN TRAN
UPDATE BANK_A SET 잔고 = 잔고 - 50000 WHERE 이름 = '조재성'
UPDATE BANK_B SET 잔고 = 잔고 + 50000 WHERE 이름 = '김석영'
SELECT * FROM BANK_A
SELECT * FROM BANK_B
--여기 전까지 한꺼번에 선택해서 F5
COMMIT --TRAN이 맘에 든 것을 저장
'한의대 생활 > └ MySQL & MSSQL' 카테고리의 다른 글
MSSQL JOIN 개념 및 연습 + DELETE, SELECT 팁 (1) | 2019.01.16 |
---|---|
MSSQL INDEX (1) | 2019.01.16 |
MSSQL 기본 쿼리 연습하기 (0) | 2019.01.16 |
MSSQL 설치 및 DB생성 후 CSV파일들 table로 올리기 (0) | 2019.01.16 |
8. 인터넷과 Database client, server / 2번째 database Client Workbench (0) | 2019.01.05 |
MSSQL 기본 쿼리 연습하기
--- SELECT FROM 구성
-- SELECT ALL | DISTINCT 칼럼명 | *
-- FROM 테이블명
-- WHERE
-- GROUP BY
-- HAVING
-- ORDER BY
--- 데이터 조회---
SELECT * FROM Person;
SELECT * FROM Drug;
--- 필터링 ---
SELECT * FROM Person WHERE sex = 1; --9307
SELECT * FROM Person WHERE sex = 0; --9263
--- 카운팅 ---
SELECT COUNT(*) FROM Person; -- 18570 -- 전체 row개수만
SELECT COUNT(*) FROM Person -- 9263, 9307 -- sex칼럼별로 <sex값 없이 row개수만>***
GROUP BY Sex;
SELECT Sex, COUNT(*) FROM Person -- 9263, 9307 -- sex칼럼별로 + <SEX칼럼표시> + <row개수>***
GROUP BY Sex;
--- GROUP BY with 집계함수---
SELECT * FROM Person GROUP BY Sex; -- GROUP BY 는 항상 집계함수가 포함되어있어야 된다. 안그러면 오류
SELECT COUNT(*) FROM Person GROUP BY Sex; --칼럼자리에 GROUP BY한 칼럼명을 입력하지 않으면, 해당 칼럼의 요소가 보이질 않음
--- 칼럼별 DISTINCT(유니크한 값) 보기 --- ****
SELECT DISTINCT personid FROM Drug; --- SELECT 다음에 DISTINCT 칼럼명
--- 상위 TOP 몇개만 보기 --- ***
SELECT TOP 3 * FROM Drug;
SELECT TOP 10 * FROM Person;
--- WHERE 조건에 칼럼명 BETWEEN AND 넣어보기---***
SELECT * FROM DRUG;
SELECT * FROM Drug WHERE duration BETWEEN 3 AND 5
SELECT * FROM Electrocardiogram;
SELECT * FROM Electrocardiogram WHERE QTc BETWEEN 400 AND 500;
--- WHERE 조건에 칼럼명 = OR , 칼럼명 = OR ---
SELECT TOP 15 * FROM Drug;
SELECT * FROM Drug WHERE atccode = 'N01BB02' OR atccode = 'N07AA02'; --- ***문자열에 쌍따옴표 x 그냥 따옴표
--- WHERE 조건에 칼럼명 IN ( '', '', '') 써보기 ---***
SELECT * FROM Drug WHERE atccode IN ( 'N01BB02', 'N07AA02');
--- WHERE 조건에 칼럼명 LIKE '% , [A-Z] 정규식' 사용하기 ---***
--- %는 앞뒤로 모든 문자가 줄지어 나타남
--- [A-Z]는 한글자에 대해서 매칭
SELECT * FROM Drug WHERE atccode LIKE 'J01%' --*** J01로 시작하는 모든 것
SELECT * FROM Drug WHERE atccode LIKE 'J01[A-Z][A-Z}10' ---*** J01[?][?]10 가운데 2개 아무거나
--- FROM > WHERE GROUP BY HAVING ORDER BY에서 ---
--- ORDER BY 칼럼명 DESC/ASC ---***
SELECT TOP 15 * FROM Drug;
SELECT * FROM Drug ORDER BY personid DESC;
SELECT * FROM Drug ORDER BY personid, drugdate ASC;
SELECT * FROM Drug WHERE duration > 90
ORDER BY personid ASC,drugdate DESC -- WHERE (g) (h) ORDER BY 순
--- 집계함수 후 AS 새로운 칼럼명 ---***
-- cast()해주고 계산하기
-- AVG, SUM, COUNT, MAX, MIN
SELECT AVG(duration) AS avg_duration FROM Drug -- 7 : 문자열로 입력되어있을 시, cast( as float)를 안해주면 소수점 다 짤려나온다.
SELECT AVG( cast(duration AS float)) as avg_duration FROM Drug -- 7.48
SELECT COUNT(*) AS row_cnt FROM Drug;
SELECT drugdept FROM Drug GROUP BY drugdept; -- 그룹별로, 집계없이 해당 칼럼만 보면, 그 종류만 나온다
SELECT drugdept, COUNT(*) FROM Drug GROUP BY drugdept; -- 그룹별로 종류 + cnt
SELECT drugdept, COUNT(*) AS drugdept_cnt FROM Drug GROUP BY drugdept;
-- route의 그룹별, duration의 최대값 구하기
SELECT DISTINCT route FROM Drug;
SELECT route, MAX(duration) AS max_duration FROM Drug
GROUP BY route
'한의대 생활 > └ MySQL & MSSQL' 카테고리의 다른 글
MSSQL INDEX (1) | 2019.01.16 |
---|---|
MSSQL T-SQL 개념 소개 및 UPDATE 전 BEGIN TRAN 연습 (0) | 2019.01.16 |
MSSQL 설치 및 DB생성 후 CSV파일들 table로 올리기 (0) | 2019.01.16 |
8. 인터넷과 Database client, server / 2번째 database Client Workbench (0) | 2019.01.05 |
7. JOIN을 통해 분리된 테이블을, 하나의 테이블형태로 보기 (0) | 2019.01.05 |
MSSQL 설치 및 DB생성 후 CSV파일들 table로 올리기
설치
- 구글에서 sql exress 2017 검색
- MSSQL 설치 완료시 뜨는 SSMS( SQL Server Managemnet Studio) 설치
- 데이터(private) : https://github.com/is2js/SQL-study
단축키들
- F5 : 선택쿼리 실행
- F8 : 개체탐색기로 이동( 새로고침시 )
- ALT+F1 : 선택칼럼 도움말(index 등 정보) = sp_help 칼럼명
MSSQL - SSMS로 csv파일 7개 연습하기
- csv파일을 DB로 가져오기 위해선
*DB 우클릭 > 테스트 > 데이터 가져오기 >
- 데이터 원본 선택에서 txt, csv, tsv 등 은 플랫 파일 원본을 선택 >
- 이 때, 파일 이름으로 찾을 때, txt파일만 볼 수 있으니, 우측하단에서 csv 선택해서 하나씩 가져오기 >
- 미리보기로 데이터 확인하기
- 대상선택에서는 Microsoft OLE DB Provider for SQL Server 선택 ! MSSQL 깐 순간
대상이 내 노트북이 SQL server가 된 것임. 이 때, window 인증을 사용해서 sql도 자동인증 되게 하자.
sql인증을 사용하면 아뒤 비번 따로 사용해서 강력하게 인증함.
*
DB를 선택한 상태에서, 쿼리문으로 한번에 table(BULK INSERT 테이블 from '경로') 다 올리기 ( 쿼리 실행 F5 )
- DB를 클릭한 상태 > 우클릭 새쿼리 or Ctrl + N 으로 쿼리창 띄우기
- 미리 빈 테이블(csv와 칼럼명 + 데이터타입 기)을 만들어놔야한다.
- 만든 뒤, 개체탐색기(F8)에서 새로고침(F5)를 몇번 해야 생긴다.
- 생긴 table에 BULK INSERT 테이블 '경로' WITH (firstrow = 2, format='CSV')를 이용한다.bulk insert Laboratory from 'C:\Users\is2js\Desktop\인턴활동\0111 DB세미나\sql_loading_sample\sample_Laboratory.csv'
with (firstrow=2, KEEPNULLS, format='CSV')
- 이제부터는 귀찮아서, DB -> 테스트 -> 데이터 가져오기로 table들을 다 만들었다.
'한의대 생활 > └ MySQL & MSSQL' 카테고리의 다른 글
MSSQL T-SQL 개념 소개 및 UPDATE 전 BEGIN TRAN 연습 (0) | 2019.01.16 |
---|---|
MSSQL 기본 쿼리 연습하기 (0) | 2019.01.16 |
8. 인터넷과 Database client, server / 2번째 database Client Workbench (0) | 2019.01.05 |
7. JOIN을 통해 분리된 테이블을, 하나의 테이블형태로 보기 (0) | 2019.01.05 |
6. 관계형 데이터베이스(relational database) / table명 변경(백업-RENAME TABLE)한 뒤, 기존 테이블 2개로 분리시키기 (0) | 2019.01.05 |
5. [] barplot with error bar []
R mark down으로 작성
bar plot with error bar
bar plot
par(mfrow = c(1,1))
barplot(c(1, 2, 3, 4)) # y값만 입력한 경우
barplot(c(1, 2, 3, 4), names.arg = c("A", "B", "C", "D")) # y값과 x축이름을 지정한 경우
데이터 가져와서, 각 칼럼들의 기준별 통계구하기
attach(iris)
head(iris)
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# bar의 높이(y값)으로 쓰일 각 칼럼의 <종별> 평균 계산하기
# aggregate( 통계구할 칼럼, 기준칼럼(list(col1, col2), 통계함수)
# -> 종을 기준으로 4개의 칼럼의 평균값 구하기
iris.mean <- aggregate(iris[, 1:4], iris["Species"], mean)
iris.mean
# bar의 error bar로 쓰일 각 칼럼 <종별> 표준편차 구하기
iris.sd <- aggregate(iris[,1:4], iris["Species"], sd)
iris.sd
표준편차와 평균df를 가지고, error bar의 위쪽, 아래쪽 좌표 계산해놓기
# df + aggregate로 구한 표준편차 df는 첫칼럼이 기준(종별)이다.
iris.sd
# 기준칼럼 말고, 수치가 있는 [,2:5]칼럼만 가져와서
# error bar의 위쪽값과 아래쪽값을 구하자.
iris.sd.upper <- iris.mean[, 2:5] + iris.sd[, 2:5]
iris.sd.lower <- iris.mean[, 2:5] - iris.sd[, 2:5]
iris.sd.upper
iris.mean[, 2:5]
iris.sd.lower
평균을 좌표로 만들어서 barplot을 먼저 그려놓서 객체에 넣어두기(화살표의 기준점)
barplot( as.matrix(iris.mean[,2:5]),
col=c("red", "blue", "purple"))
# beside = TRUE 를 넣어주면, 좌표로 그린 df의 row별로
# barplot이 옆으로 그려지고,
# beside = FALSE는 stacked로 그려진다.
barplot( as.matrix(iris.mean[,2:5]),
beside = TRUE,
col=c("red", "blue", "purple"))
b <-barplot( as.matrix(iris.mean[,2:5]),
beside = TRUE,
col=c("red", "blue", "purple"),
ylim=c(0,8))
barplot을 그린 객체를 arrow()의 첫번째인자-화살표가 나가는 기준 으로 넣어서, barplot+arrow 동시에 그리기
# arrows는 이미 그려진곳에 그리는 것 같다. 안 그려놓으면 knit시 오류난다.
barplot( as.matrix(iris.mean[,2:5]),
beside = TRUE,
col=c("red", "blue", "purple"),
ylim=c(0,8))
arrows(b, as.matrix(iris.sd.upper), #기준, 화살표 끝의 좌표
b, as.matrix(iris.sd.lower), #기준, 화살표 끝의 좌표
angle = 90, # 몸통에서 나가는 화살표촉의 각도
length = 0.05, # 화살표 촉의 길이
code = 3) # 화살표의 갯수 : 1시작점에 화살표 2끝점에 화살표 3 양쪽에 화살표
'한의대 생활 > └ R studio 시각화' 카테고리의 다른 글
윈도우 10 관리자 권환 얻기
'개발공통 > IT기본' 카테고리의 다른 글
SyntaxHighliter 테마별 스샷 모음 (0) | 2019.01.25 |
---|---|
Tistory Blog SyntaxHighliter - 티스토리 코드/신택스 하이라이터 적용과 사용 (0) | 2019.01.23 |
티스토리 단축키 추가하기 - [글 수정 단축키 m] (0) | 2019.01.02 |
윈도우10 로그인 비밀번호 제거하기 (0) | 2018.03.14 |
윈도우10에서 윈도우7 시작메뉴 사용하기–Classic Shell (0) | 2018.03.10 |