<분석을 위한 데이터 구조>
CRISP-DM : 데이터 마이닝하는 방법론
Cross-Industry Standard Process for Data Mining
→ 데이터 분석의 큰 그림
데이터 분석, 머신러닝 하기 전 기본 절차다 !
분석할 수 있는 데이터 --> 2가지
① 범주형 : 질적 데이터
- 명목형 데이터 ex) 성별, 시도, 흡연여부
- 순서형 데이터 ex) 연령대, 매출등급
② 수치형 : 양적 데이터
- 이산형 데이터 ex) 판매량, 매출액, 나이
- 연속형 데이터 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 |