2023. 9. 19. 16:27ㆍ개발/💠 Alchemist
🔹 머신러닝의 개념
https://sosoeunii.tistory.com/86
💠 머신러닝 기초 개념 💠
1. 인공지능 vs 머신러닝 vs 딥러닝 1-1. 각각의 상관관계와 정의 인공지능 : 인간의 지적 능력을 컴퓨터를 통해 구현한 기술 머신러닝 : 데이터를 기반으로 스스로 패턴을 학습하고 결과를 예측하
sosoeunii.tistory.com
🔹 S / W 설치
ANACONDA ✅
Visual Studio ✅
🔹 넘파이( NumPy )
1. 넘파이의 정의와 특징
넘파이(NumPy : Numerical Python) : Python에서 선형대수 기반의 프로그램을 만들 수 있도록 지원하는 패키지
- 빠른 배열 연산 속도
- C/C++ 호환 API 제공
- 데이터 핸들링 기능 제공 (판다스가 편리하기 때문에 거의 사용하지 않음)
2. 넘파이 ndarray
ndarray를 통해 다차원 배열을 쉽게 생성하고 다양한 연산을 수행할 수 있다
ndarray의 데이터값은 숫자 값, 문자열 값, 불 값이 모두 가능하다
숫자형으로는 int형, unsigned int형, float형, complex형이 있다
1 ) import
import numpy as np
2 ) ndarray 속성 검색
shape() : ndarray의 차원(row, column) 출력
ndim() : ndarray의 차원(row만) 출력
dtype() : ndarray의 데이터 타입 출력
3 ) ndarray 생성
array() 함수
np.array(리스트 삽입)
ndarray 초기화 함수 : arrange() zeros(), ones()
np.arrange(n) # 0 ~ (n-1)
np.arrange(a, b) # a ~ (b-1)
np.arrange(start = p, stop = q) # p ~ (q-1)
np.zeros((row, column), dtype = 데이터 타입) # zero 행렬(row x column) 생성
np.ones((row, column)) # one 행렬(row x column) 생성
4 ) ndarray 변환
reshape() : ndarray를 특정 차원 및 크기로 변환
array1 = np.range(10)
array2 = array1.reshape(2, 5)
array3 = array1.reshape(5, 2)
arrya4 = array1.reshape(4, 3) # error
array5 = array1.reshape(-1, 2) # row 자동으로 5로 설정됨
array6 = array1.reshape(5, -1) # column 자동으로 2로 설정됨
array7 = array1.reshape(4, -1) # error
5 ) 특정 데이터 세트 선택 - indexing
( 1 ) ndarray의 특정 위치 데이터 반환
파이썬의 인덱스와 동일
예를 들어 ndarray의 3번째 데이터를 반환하고자 하면
np[2] 를 사용하면 된다
* ndarray의 인덱스는 0부터 시작
( 2 ) ndarray 슬라이싱
슬라이싱(slicing) : 연속된 인덱스상의 ndarray 추출 방식
np[a:b] # a ~ (b-1) 범위의 데이터
( 3 ) 팬시 인덱싱(Fancy Indexing)
팬시 인덱싱(Fancy Indexing) : ndarray의 일정한 인덱싱 집합 반환
array1 = np.arrange(start=1, stop=10)
array2 = array1.reshape(3, 3)
# 팬시 인덱싱
array3 = array2[[a, b]]
array4 = array2[[a, b], c]
array5 = array2[[a, b], c:d]
( 4 ) 불린 인덱싱(Boolean Indexing)
불린 인덱싱(Boolean Indexing) : 조건 필터링을 통해 특정 조건에 해당하는 데이터 집합 반환
array1 = np.arrange(start=1, stop=10)
array2 = array1[array1 > 5] # array1의 데이터 중 [] 안의 조건에 해당하는 데이터 집합
6 ) 행렬 정렬 - sort(), argsort()
sort() : 원 행렬 유지하면서 정렬된 행렬 반환
argsort() : 원 행렬 정렬하면서 정렬 행렬의 원본 행렬 인덱스 반환
7 ) 선형대수 연산
dot(a, b) : a 행렬과 b행렬의 곱 연산
transpose() : 행렬의 전치 행렬 반환
🔹 판다스( Pandas )
1. 판다스의 정의와 특성
판다스 (Pandas) : Python에서 데이터 핸들링을 위해 제공하는 라이브러리
- 핵심 객체 : DataFrame / Index, Series
- 고수준 API 제공
- 파이썬 내부 데이터뿐만 아니라 CSV 등의 파일을 쉽게 DataFrame으로 변경 가능
1 ) import
import pandas as pd
2. DataFrame
Index : 식별성 데이터
Series : Index(key)와 칼럼 한 개로 이루어진 데이터 구조체
DataFrame : 2차원 데이터를 담는 데이터 구조체 ( Index-key와 여러개의 Series로 구성됨 )
1 ) 파일을 DataFrame으로 로딩
2 ) DataFrame 속성 확인
3 ) DataFrame과 리스트, 딕셔너리, ndarray 상호 변환
- 리스트, ndarray, 딕셔너리 -> DataFrame
리스트, ndarray, 딕셔너리와 DataFrame의 차이점은 칼럼명의 유무이기 때문에
DataFrame으로 변환하기 위해선 칼럼명을 추가해줘야 한다
이때 딕셔너리는 key값이 칼럼명으로 작용한다
col_name1 = ['col']
list1 = [1,2,3]
df_list1 = pd.DataFrame(list1, columns = col_name1)
array1 = np.array(list1)
df_array1 = pd.DataFrame(array1, columns = col_name1)
dic1 = {'col1' : [1,11], 'col2' : [2,22], 'col3' : [3,33]}
df_dic1 = pd.DataFrame(dic1)
- DataFrame -> 리스트, ndarray, 딕셔너리
array2 = df_array1.values
list2 = array2.tolist()
dic2 = df_dic1.to_dict()
4 ) DataFrame 데이터 세트 생성, 수정 : [ ] 연산자
- 데이터 세트 생성
DataFrame['칼럼명'] = 초기화값
기존의 DataFrame의 새로운 Series를 추가하는 방식으로 생성
- 데이터 세트 수정
DataFrame['칼럼명'] = 수정값 or 수정식
titanic_df['Age_0'] = 0 # 초기화
titanic_df['Age_by_10'] = titanic['Age_0'] * 10 # 수정
5 ) DataFrame 데이터 삭제 : drop()
drop()의 파라미터 : labels, axis, inplace
labels : 삭제할 row index / column 명
axis : 0(row 삭제), 1(column 삭제)
inplace : False(원형 유지, 삭제된 결과 DataFrame 반환) - default, True(원형 유지 안 함, None 반환)
titanic_df.drop('Age_0', axis = 1, inplace = True)
6 ) Index 객체
Index 객체 : 식별성 데이터를 1차원 배열로 가짐
- 단일값 반환 및 슬라이싱 가능
- 함부로 변경 못 함
reset_index() : 새롭게 인덱스를 연속 숫자 형으로 할당
- 파라미터 : drop(True : 기존 인덱스 삭제, False : 기존 인덱스 유지)
7 ) 데이터 셀렉션 및 필터링
( 1 ) 데이터 셀렉션
- [ ] 연산자 : 칼럼명, 슬라이싱, 불린 인덱싱
- iloc[] : 위치 기반 인덱싱 방식 - 정수값, 정수형의 슬라이싱, 팬시 슬라이싱
- loc[] : 명칭 기반 인덱싱 방식 - [인덱스 값, 칼럼명] 형식 / 슬라이싱, 불린 인덱싱
( 2 ) 필터링 - 불린 인덱싱
불린 인덱싱은 [ ]연산자, loc[]연산자에서 사용 가능하다
연산자 내에 연산자의 특징에 맞게 조건 삽입
* ndarray와 DataFrame의 데이터 셀렉션
DataFrame 바로 뒤의 [ ] 내 입력값 : 칼럼명(또는 칼럼 리스트), 불린 인덱스 용도
(슬라이싱도 가능하지만 사용하지 않는 것이 좋음)
ndarray 바로 뒤의 [ ] 내 입력값 : 위치 인덱싱, 불린 인덱스, 슬라이싱, 팬시 인덱스 등등
8 ) 정렬, Aggregation 함수, GroupBy
( 1 ) 정렬 - sort_values()
파라미터 : by, ascending, inplace
- by : 정렬할 칼럼명, 칼럼 리스트
- ascending : True - 오름차순, default / False - 내림차순
- inplace : True( 원형 유지 안 함 ) / False ( 원형 유지, default )
( 2 ) Aggregation 함수
Aggregation 함수는 기본 연산을 도와주는 함수들의 집합을 의미한다
min(), max(), sum(), count()
- DataFrame 전체 혹은 특정 칼럼에 함수 적용 가능
- 파라미터 - axis( 0 : row 방향, 1 : column 방향 )
( 3 ) GroupBy
groupby는 아래의 과정대로 수행된다
split(유형별로 split) -> apply(유형별로 특정 함수 실행) -> combine(split된 거 하나의 데이터 구조체로 합체)
apply 과정에 aggregation 함수 적용
파라미터 - by : groupby 진행할 대상 칼럼 입력
titanic_groupby = titanic_df.groupby('Pclass')[['PassengerId', 'Survived']].count()
9 ) 결손 데이터 처리 - insa(), fillna()
insa() : 모든 칼럼 값에 대해 NaN(Null)인지 아닌지 True/False로 반환
fillna() : 결손 데이터(NaN)를 다른 값으로 대체
10 ) 데이터 가공 - apply lambda 식
lambda식 : 함수의 선언과 함수 내의 처리를 한 줄로 변환한 식
lambda (입력 인자) : 반환식
df[열].apply(lambda 식)
titanic_df['Name_len'] = titanic_df['Name'].apply(lambda x : len(x))
헷갈리는 개념 정리✅
예시 코드 추가✅
'개발 > 💠 Alchemist' 카테고리의 다른 글
💠 평가 💠 (0) | 2023.09.26 |
---|---|
💠 AIchemist 1주차 💠 (0) | 2023.09.25 |
💠 사이킷런 ( scikit-learn )💠 (0) | 2023.09.19 |
💠 AIchemist 1기 모집 & OT 💠 (0) | 2023.09.18 |
💠 머신러닝 기초 개념 💠 (0) | 2023.09.12 |