AIVLE

Python 라이브러리

민주82 2023. 2. 6. 15:06

<분석을 위한 데이터 구조>

 

CRISP-DM : 데이터 마이닝하는 방법론

Cross-Industry Standard Process for Data Mining

→ 데이터 분석의 큰 그림 

데이터 분석, 머신러닝 하기 전 기본 절차다 !

 

 

분석할 수 있는 데이터 --> 2가지

 

범주형 : 질적 데이터

  1. 명목형 데이터 ex) 성별, 시도, 흡연여부
  2.  순서형 데이터 ex) 연령대, 매출등급

수치형 : 양적 데이터

  1. 이산형 데이터 ex) 판매량, 매출액, 나이
  2. 연속형 데이터 ex) 온도

 

Q. 1월~12월은 어떤 데이터?

A. 범주형!! 1월 x 3 은 3월이 아니기 때문에!!

 

Q. 3개월은?

A. 1개월 X 3 이므로 수치형 데이터다..

 

--> 숫자라고 해서 수치형이 아니고 -월이라서 범주형이 아니다

 

 

기본 2차원 데이터를 가지고 분석

: Table, 2차원 Array, Data Frame

 

    Label        V01       V02       V03       .....       V##
           
           

위의 두가지 종류 정보가 특별한 구조를 가져야 한다.

• 행 : 분석단위, 데이터 한 건, 한 건 (행 하나 하나가 분석 단위!!)

• 열 : 정보, 변수, 요인(x, feature), 결과(y, target, label)

 

 

데이터 구조를 다루는 패키지

numpy 수치데이터 / pandas 비즈니스 데이터

 

<Numpy>

Numerical Python

: 빠른 수치 계산을 위해 C언어로 만들어진 Python 라이브러리

 

리스트

: list = [ ,  ,  ,  ,  ......], 값의 집합

  다른 타입의 데이터도 한번에 저장 가능

  요소 변경, 추가 , 제거 용이

 

데이터 분석에서는 단순히 값의 집합 개념을 넘어선 수학적 계산이 가능해야 한다

-->  대량의 데이터 처리 속도가 빨라야 함

 

 

# 1차원 리스트
a1 = [1, 2, 3, 4, 5]

# 2차원 리스트 
a2 = [[1.5, 2.5, 3.2], 
      [4.2, 5.7, 6.4]]

# 3차원 리스트
a3 = [[[1, 3, 1],
       [4, 7, 6],
       [8, 3, 4]],
      [[6, 2, 4],  
       [8, 1, 5],
       [3, 5, 9]]]

# 배열로 변환
b1 = np.array(a1)
b2 = np.array(a2)
b3 = np.array(a3)

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

리스트를 array함수로 받아 배열 만듦

list를 array로 바꾸는 이유 --> 다양한 연산 가능, 속도도 빠름

 

 

배열 정보 확인

# 차원 확인
print(b1.ndim)

# 형태(크기) 확인
print(b1.shape) 

# 요소 자료형 형식 확인
print(b1.dtype)

 

Reshape

# (2, 3) 형태의 2차원 배열 만들기
a = np.array([[1, 2, 3], 
              [4, 5, 6]])
              
# (3, 2) 형태의 2차원 배열로 Reshape
b = a.reshape(3, 2)

# reshape(m, -1) 형태로 지정하여 Reshape 가능
print(a.reshape(1, -1))
print()

 

※ 항상 헷갈렸던 부분 !

np.mean()

: 리스트, 튜플 모두 입력 가능, np array로 변환해서 평균을 구해줌

변수(데이터).mean()

: np array만 사용가능

 

 

인덱싱

# 첫 번째 행, 두 번째 열 요소 조회
print(a[0, 1])

# 첫 번째, 두 번째 행 조회
# print(a[[0, 1], :])
print(a[[0, 1]])

 

슬라이싱

# 첫 번째 ~ 두 번째 행 조회
# print(a[0:2, :])
print(a[0:2])

# 첫 번째 행, 첫 번째 ~ 두 번째 열 조회
print(a[0, 0:2])

# 첫 번째 행, 첫 번째 ~ 두 번째 열 조회
print(a[0, 0:2])

 

조건 조회

# 요소 중에서 90 이상인 것만 조회
print(score[score >= 90])

# 모든 요소 중에서 90 이상 95 미만인 것만 조회
print(score[(score >= 90) & (score <= 95)])

 

배열 연산

배열 더하기   np.add()
배열 빼기 np.subtract()
배열 곱하기 np.multiply()
배열 나누기 np.divide()
배열 제곱  np.power()
배열 집계 np.sum()   (axis = 0: 열 기준 집계/ axis = 1: 행 기준 집계)
배열 최댓값 np.argmax()
배열 최솟값 np.argmin()

 

 

np.where(조건문, 참일때 값, 거짓일때 값)

 

 

 

 

<Pandas>

 

데이터 프레임(Dataframe)이란?

: 데이터 분석에서 가장 중요한 데이터 구조

  관계형 데이터베이스의 테이블 또는 엑셀 시트와 같은 형태(2차원 구조)

 

시리즈(Series)란?

: 하나의 정보에 대한 데이터들의 집합

  데이터 프레임에서 하나의 열을 떼어낸 것.(1차원)

 

CSV파일 읽어오기

      1. CSV파일로부터 가져오기   
          data = pd.read_csv('파일이름.csv')  

      2. url로 가져오기                                                                                                                                                                          path = 'https://url주소.csv'
          data = pd.read_csv(path)   

 

 

 

상, 하위 일부 데이터, 크기확인

# 상위 10개 행 데이터
data.head(10)

# 하위 3개 행 데이터
data.tail(3)

# 행 수와 열 수 확인
data.shape

 

열, 행, 정보 보기

# 열 확인
print(data.columns)
print(data.columns.values) # np array 형태

# 열 자료형 확인
data.dtypes

# 열 자료형, 값 개수 확인
data.info()

# 기초통계정보
data.describe()

- int64: 정수형 데이터(int)
- float64: 실수형 데이터(float)
- object: 문자열 데이터(string)

 

 

정렬하기

# 단일 열 정렬
data.sort_values(by='column_1', ascending=False)

# 복합 열 정렬
data.sort_values(by=['column_1', 'column_2'], ascending=[True, False])

 

 

기본 집계

# 열 고유값 확인
print(data['column_1'].unique())

# 열 고유값 개수 확인
print(data['column_1'].value_counts())

# 열 합계 조회
print(data['column_1'].sum())

# 열 최댓값 조회
print(data['column_1'].max())

# 열들 평균값 확인
print(data[['column_1', 'column_2']].mean())

# 열들 중앙값 확인
print(data[['column_1', 'column_2']].median())

 

특정 열 조회

 

1차원으로 조회하기

• Dataframe[‘Column’]

• 혹은, Dataframe.Column

 

2차원으로 조회하기

• Dataframe[[‘column’]] --> 대괄호 2개가 아니라, 칼럼이름을 리스트로 입력한 것!

 

 

조건으로 조회

# 조건절(조건문)의 결과는 True, False
data['column_1'] > 10

# column_1 열 값이 10 보다 큰 행 조회
data.loc[data['column_1'] > 10]

# and로 여러 조건 연결
data.loc[(data['column_1'] > 10) & (data['column_2'] == 4)]

# or 조건 : |
data.loc[(data['column_1'] > 10) | (data['column_2'] == 4)]

# 값 나열
data.loc[data['column_1'].isin([1,4])]

# 범위 지정
data.loc[data['column_1'].between(25, 30)]

# 조건에 맞는 하나의 열 조회
data.loc[data['column_1'] >= 10000, ['column_2']]

 

 

데이터 프레임 집계

# column_1 합계
data['column_1'].sum()

# column_1 별 column_2 평균 --> 시리즈
data.groupby('column_1', as_index=True)['column_2'].mean()

# column_1 별 column_2 평균 --> 데이터프레임
data.groupby('column_1', as_index=True)[['column_2']].mean()

# as_index=True를 설정(기본값)하면 집계 기준이 되는 열이 인덱스 열.
# as_index=False를 설정하면 행 번호를 기반으로 한 정수 값이 인덱스로 설정됨.

# 여러 열 집계
data_mean = data.groupby('column_1', as_index=False)[['column_2','column_3']].mean()

'AIVLE' 카테고리의 다른 글

Web Crwaling ② - 네이버 주가 데이터 수집  (1) 2023.02.17
Web Crwaling ① - basic  (0) 2023.02.17
데이터 분석 및 의미 찾기  (0) 2023.02.09
데이터 처리  (0) 2023.02.07
Python 프로그래밍  (0) 2023.02.03