728x90

• Numpy 패키지

 - C언어롤 구현된 파이썬 라이브러리

 - 고성능의 수치계산을 위해 제작 (난수생성 가능, 선형대수 가능)

 - Numerical Python의 줄임말로, 벡터 및 행렬 연산에 있어 매우 편리한 기능을 제공

 - array라는 단위로 데이터를 관리, 및 연산

 - 각 열의 데이터 타입이 동일해야 함

 

• Array 구조

 - 스칼라 (Scalar) : 하나의 숫자로 이루어진 데이터

 - 벡터 (Vector) : 여러개의 숫자들을 특정한 순서대로 모아놓은 데이터 모음 / 1D Array (1차원 배열)

 - 행렬 (Matrix) : 벡터들을 모아놓은 데이터 집합 / 2D Array (2차원 배열)

 - 텐서 (Tensor) : 같은 크기의 행렬들을 모아놓은 데이터 집합 / ND Array (다차원 배열)

 

• Numpy 패키지 사용법

import numpy as np   #numpy를 np라는 별칭으로 사용

 

• Array 구조

- np.array

data1 = [1,2,3,4,5]
data1

 [1,2,3,4,5]   # list 구조

arr1 = np.array(data1)
arr1

 array([1,2,3,4,5])    #list가 이제 array로 들어감

type(data1)

 list

type(arr1)

 array

 

- ndim : 축의 개수

arr1.ndim   #1차원 배열

 1

 

- shape : array의 크기 및 형태

arr1.shape

 (5, )

 

- dtype : 데이터유형 확인

arr1.dtype

 dtype('int64')

 

arr2 = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
arr2

 array([[  1,  2,  3],

            [  4,  5,  6],

            [  7,  8,  9],

            [10, 11, 12]])

 

arr2.ndim

  2

 

arr2.shape

 ( 4, 3)

 

• Array 연산

 - 기본적으로 numpy에서 연산을 할때는 크기가 서로 동일한 array끼리 연산이 진행.

 - 같은 위치에 있는 요소들끼리 연산이 진행.

arr1 = np.array([[1,2,3],[4,5,6]])
arr1

 array([1, 2, 3],

           [4, 5, 6])

 

arr1.shape

 ( 2, 3)

 

arr2 = np.array([[10,11,12],[13,14,15]])
arr2

 array([10, 11, 12],

           [13, 14, 15])

 

arr2.shape

 ( 2, 3)

 

arr1 + arr2

 array([11, 13, 15],

           [17, 19, 21])

 

arr1 - arr2

 array([-9, -9, -9],

           [-9, -9, -9])

 

arr1 * arr2

 array([10, 22, 36],

           [52, 70, 90])

 

• Array의 브로드캐스트

 - 브로드캐스트란 서로 크기가 다른 array가 연산이 가능하게끔 하는 것

arr3 = np.array([10,11,12])
arr3

 array([10, 11, 12])

 

arr1 + arr3

 array([[11, 13, 15],

            [14, 16, 18]])

 

arr1 * arr3

 array([[10, 22, 36],

            [40, 55, 72]])

 

- 연산 결과를 살펴보면 arr3이 [10,11,12]에서 [[10,11,12],[10,11,12]]로 확장되어 계산되었음을 알 수 있음.

- array 형태끼리 뿐만 아니라 스칼라도 연산이 가능

 

arr1 * 10

 array([[10, 20, 30],

            [40, 50, 160]])

 

• random 모듈

함수 내용
np.random.seed Seed를 통한 난수 생성
np.random.rand 균일 분포의 정수 난수 1개 생성
np.random.randint 0~1 사이의 균일 분포에서 난수 생성
np.random.randn 가우시안 표준 정규분포에서 난수 생성
np.random.shuffle 기존의 데이터 순서 바꾸기
np.random.choice 기존의 데이터에서 샘플링
np.unique 데이터에서 중복된 값 제거

 

- np.random.randint()

np.random.randint(6)   # 0-5사이의 숫자 랜덤추출

 

np.random.randint(1,20)   # 1-19사이의 숫자 랜덤추출

 

np.random.randint(1,20,size=10)

- np.random.rand(): 0~1의 균일분포

np.random.rand(6)

- np.random.rand(): 0~1의 균일분포

- np.random.randn(): 평균 0, 표준편차 1인 표준정규분포에서 랜덤 추출

- np.random.seed(): 동일한 랜덤추출된 숫자를 사용

- np.random.suffle(): 데이터 순서를 랜덤하게 바꿈

- np.random.choice(): 기존 데이터에서 랜덤하게 추출

- np.unique(): 중복제거

'Studying > Data Analysis' 카테고리의 다른 글

데이터 분석  (0) 2022.12.06
728x90

• 데이터 분석 과정

데이터 확인 → 결측값 확인 → 데이터 가공 → 데이터 분석 

(데이터 확인 / 결측값 확인 / 데이터 가공 까지의 과정을 전처리라고 함)

 

• 데이터 전처리의 중요성

- 모든 데이터 분석 프로젝트에서 전처리는 반드시 필요.

- 분석 결과/인사이트와 모델 성능에 직접적인 영향을 미치므로 가장 중요.

- 데이터 분석가들이 80% 이상의 시간을 데이터 수집 및 전처리에 사용.

 

• 데이터 전처리 및 시각화 활용 패키지

- Python의 패키지란 기능을 모아놓은 큰 상자

- 타인이 만들언 놓은 기능을 다운로드하여 사용함.

- 패키지를 불러와서 패키지 안에 있는 함수 사용

import random    #import 패키지명

random.random    #패키지명.함수

 

-  데이터 처리 : 판다스 (Pandas) / 넘파이 (Numpy)

-  데이터 시각화 : 맷플로립 (Matplotlib) / 씨본 (Seaborn)

 

 

728x90

데이터 조회(SELECT) : 데이터 조작어(DML)이며, 데이터 분서게서 가장 많이 사용되는 명령어

  - 여러 절들과 함꼐 사용됨

     절 : FROM, WHERE, GROUP BY, HAVING, ORDER BY

회원테이블을 FROM 절 테이블 확인
성별이 남성 조건으로 필터링하여 WHERE 절 FROM절 테이블을 특정 조건으로 필터링
거주지역별로 회원수 집계 GROUP BY 절 열 별로 그룹화
집계 회원수 100명 미만 조건으로 필터링 HAVING 절 그룹화된 새로운 테이블을 특정 조건으로 필터링
모든 열 조회 SELECT 절 선택
집계 회원수가 높은 순으로 ORDER BY 절 정렬

• GROUP BY 절이 사용되게 되면 기존 테이블이 새로운 테이블이 만들어짐

 

• FROM -> WHERE -> GROUP BY 순으로 실행

  - FROM -> GROUP BY 순으로 작성해도 됨

• GROUP BY는 집계함수와 주로 사용되는 명령어

  - 여러 열별로 그룹화가 가능

  - GROUP BY에 있는 열들을 SELECT에도 작성해야 원하는 분석 결과를 확인할 수 있음

 

• 실습

USE Practice;

/************FROM************/

/* Customer 테이블 모든 열 조회 */
SELECT *
   FROM CUSTOMER;
   
   
/************WHERE****************/

/* 성별이 남성 조건으로 필터링 */
SELECT *
  FROM CUSTOMER
WHERE GENDER = 'MAN';

/************GROUP BY**************/

/* 지역별로 회원 수 집계 */
SELECT 
    ADDR, COUNT(MEM_NO) AS 회원수
FROM
    CUSTOMER
WHERE
    GENDER = 'MAN'
GROUP BY ADDR;
/* COUNT : 행들의 개수를 구하는 집계함수 */

/************HAVING*************/

/* 집계 회원수 100명 미만 조건으로 필터링 */
SELECT 
    ADDR, COUNT(MEM_NO) AS 회원수
FROM
    CUSTOMER
WHERE
    GENDER = 'MAN'
GROUP BY ADDR
HAVING COUNT(MEM_NO) < 100;
/* < : 비교 연산자 / ~보다 작은 */

/**************ORDER BY*****************/
SELECT 
    ADDR, COUNT(MEM_NO) AS 회원수
FROM
    CUSTOMER
WHERE
    GENDER = 'MAN'
GROUP BY ADDR
HAVING COUNT(MEM_NO) < 100
ORDER BY COUNT(MEM_NO) DESC;
/* DESC : 내림차순 / ASC : 오름차순 */

/************FROM->(WHERE)->GROUP BY***********/
/* FROM->GROUP BY 순으로 작성해도 됨*/
SELECT ADDR, COUNT(MEM_NO) AS 회원수
FROM CUSTOMER
/* WHERE GENDER = 'MAN' */
GROUP BY ADDR; 

/************GROUP BY + 집계함수 ***********/
/* 거주지역을 서울, 인천 조건으로 필터링 */
/* 거지지역 및 성별로 회원수 집계 */
SELECT 
    ADDR, GENDER, COUNT(MEM_NO) AS 회원수
FROM
    CUSTOMER
WHERE
    ADDR IN ('SEOUL' , 'INCHEON')
GROUP BY ADDR , GENDER;

/***************SQL 명령어 작성법***************/
/* 회원테이블(Customer)을 */
/* 성별이 남성 조건으로 필터링하여 */
/* 거주지역별로 회원수 집계 */
/* 집계 회원수 100명 미만 조건으로 필터링 */
/* 모든 열 조회 */
/* 집계 회원수가 높은 순으로 */

SELECT  ADDR
				,COUNT(MEM_NO) AS 회원수
   FROM  CUSTOMER
WHERE  GENDER = 'MAN' 
GROUP
        BY   ADDR
HAVING  COUNT(MEM_NO) < 100
ORDER
		BY  COUNT(MEM_NO) DESC;

 

+ Recent posts