[1부 빅데이터의 기초 지식]
1-3 [속성 학습] 스크립트 언어에 의한 특별 분석과 데이터 프레임
1) 데이터 처리와 스크립트 언어 ― 인기 언어인 파이썬과 데이터 프레임
2) 데이터 프레임, 기초 중의 기초 ― ‘배열 안의 배열’로부터 작성
3) 웹 서버의 액세스 로그의 예 ― pandas의 데이터 프레임으로 간단히 처리
4) 시계열 데이터를 대화식으로 집계하기 ― 데이터 프레임을 그대로 사용한 데이터 집계
5) SQL의 결과를 데이터 프레임으로 활용하기
1-4 BI 도구와 모니터링
1) 스프레드시트에 의한 모니터링 ― 프로젝트의 현재 상황 파악하기
2) 데이터에 근거한 의사 결정 ― KPI 모니터링
3) 변화를 파악하고 세부 사항을 이해하기 ― BI 도구의 활용
4) 수작업과 자동화해야 할 것의 경계를 판별하기1-5 요약
1부 빅데이터의 기초 지식
1-3 [속성 학습] 스크립트 언어에 의한 특별 분석과 데이터 프레임
1) 데이터 처리와 스크립트 언어 ― 인기 언어인 파이썬과 데이터 프레임
- 데이터 분석 이전에 데이터 수집이 필요한데 BI 도구로 읽을 수 있도록 원시 데이터를 전처리(preprocessing)해야 함
=> 이를 위해 R, 파이썬 등 '스크립트 언어'를 사용
2) 데이터 프레임, 기초 중의 기초 ― ‘배열 안의 배열’로부터 작성
- 데이터 프레임
=> 표 형식의 데이터를 추상화한 객체
=> 데이터 프레임을 사용해 스크립트 언어에서 데이터 가공/집계를 할 수 있음
- [보리] 데이터 프레임?
import pandas as pd
# 데이터 생성
data = {
'이름': ['홍길동', '김철수', '이영희'],
'나이': [25, 30, 22],
'도시': ['서울', '부산', '대구']
}
# 데이터 프레임 생성
df = pd.DataFrame(data)
print(df)
# 출력값
이름 나이 도시
0 홍길동 25 서울
1 김철수 30 부산
2 이영희 22 대구
3) 웹 서버의 액세스 로그의 예 ― pandas의 데이터 프레임으로 간단히 처리
- 데이터 전처리에 사용할 수 있는 pandas 함수
1) ix: 조건에 일치하는 데이터만 검색 => [보리] 현재 ix는 deprecated 상태로, loc와 iloc로 대체 됨
2) drop: 지정 행/칼럼 삭제
3) rename: 인덱스값/칼럼명 변경
4) dropna: 값이 없는 행/칼럼명 제외
5) fillna: 값이 없는 셀을 지정한 값으로 치환
6) apply: 각 칼럼/행에 함수 적용
- [보리] pandas? 왜 빅데이터에는 적합하지 않을까?
- Pandas? 파이썬에서 데이터 조작 및 분석을 위한 라이브러리
- pandas가 빅데이터에는 적합하지 않은 이유?
1. 메모리 사용
=> 메모리 내(in-memory)에서 데이터를 처리
=> 모든 데이터를 RAM에 올려서 작업을 수행하므로, 데이터 크기가 컴퓨터의 메모리 용량을 초과하면 처리할 수 없음2. 단일 프로세스 처리
=> 기본적으로 단일 프로세스로 동작
=> 여러 CPU 코어를 효과적으로 활용하지 못하고, 병렬 처리가 불가능
3. 속도 한계
=> 대량의 데이터를 처리할 때 최적화된 구조가 아니므로 복잡한 데이터 조작(그룹화, 병합 등)에서 속도 저하가 발생4. 분산 처리 지원 부족
=> 기본적으로 단일 머신에서만 동작하므로, 수평 확장이 불가능
=> (비교) 반면 Apache Spark와 같은 도구는 데이터를 여러 노드에 나누어 병렬로 처리할 수 있음
- [보리] pandas 함수 예시
1. ix: 조건에 일치하는 데이터만 검색 => [보리] 현재 ix는 deprecated 상태로, loc와 iloc로 대체 됨
df.loc[df['나이'] > 25]
# loc: 조건에 맞는 행 선택
# 출력값?
이름 나이 도시
1 김철수 30 부산
df.iloc[0:2, 1:3]
# iloc: 정수 인덱스를 기반으로 행과 열 선택
# 첫 번째 인덱스는 선택할 행을 지정하며, 0부터 2 이전까지의 행을 선택
# 두 번째 인덱스는 열을 선택하며, 콜론(:)은 모든 행을 의미하고, 1:3은 1번째 열부터 3번째 열 이전까지를 선택
# 출력값?
나이 도시
0 25 서울
1 30 부산
2. drop: 지정 행/칼럼 삭제
df.drop([0], axis=0)
# axis=0는 행 삭제
# 출력값?
이름 나이 도시
1 김철수 30 부산
2 이영희 22 대구
df.drop(['나이'], axis=1)
# axis=1는 열 삭제
# 출력값?
이름 도시
0 홍길동 서울
1 김철수 부산
2 이영희 대구
3. rename: 인덱스값/칼럼명 변경
df.rename(columns={'이름': '성명', '나이': '연령'}, inplace=True)
# 칼럼명 변경
# 출력값?
성명 연령 도시
0 홍길동 25 서울
1 김철수 30 부산
2 이영희 22 대구
df.rename(index={0: 'a', 1: 'b'}, inplace=True)
# 인덱스명 변경
# 출력값?
성명 연령 도시
a 홍길동 25 서울
b 김철수 30 부산
2 이영희 22 대구
4. dropna: 값이 없는 행/칼럼명 제외
이름 나이 도시
0 홍길동 25.0 서울
1 김철수 30.0 NaN
2 이영희 NaN 대구
# NaN 데이터가 있는 데이터 프레임 예시
df.dropna(axis=0, how='any')
# NaN이 하나라도 있으면 해당 행을 삭제
# 출력값?
이름 나이 도시
0 홍길동 25.0 서울
df.dropna(axis=1, how='all')
# 모든 값이 NaN인 열을 삭제
# 출력값?
이름 나이 도시
0 홍길동 25.0 서울
1 김철수 30.0 NaN
2 이영희 NaN 대구
5. fillna: 값이 없는 셀을 지정한 값으로 치환
df.fillna(0)
# NaN 값을 0으로 대체
# 출력값?
이름 나이 도시
0 홍길동 25.0 서울
1 김철수 30.0 0
2 이영희 0.0 대구
df.fillna(df.mean())
# NaN 값을 각 열의 평균값으로 대체
# 출력값?
이름 나이 도시
0 홍길동 25.0 서울
1 김철수 30.0 NaN
2 이영희 27.5 대구
6. apply: 각 칼럼/행에 함수 적용
df.apply(lambda x: x**2 if x.name == '나이' else x)
# 각 열에 대해 제곱 계산
# '나이' 열의 값들을 제곱
# 출력값?
이름 나이 도시
0 홍길동 625.0 서울
1 김철수 900.0 NaN
2 이영희 NaN 대구
df.apply(lambda row: row['나이'] * 2 if row['도시'] == '서울' else row['나이'], axis=1)
# 각 행에 대해 특정 계산
# '도시' 값이 '서울'인 행의 '나이' 값을 두 배
# axis=1: 각 행에 대해 적용
# 출력값?
이름 나이 도시
0 홍길동 50.0 서울
1 김철수 30.0 NaN
2 이영희 NaN 대구
4) 시계열 데이터를 대화식으로 집계하기 ― 데이터 프레임을 그대로 사용한 데이터 집계
- 데이터 프레임을 사용해 데이터를 있는 그대로 집계하는 것도 가능
=> pandas에는 시계열 데이터를 취급하기 위한 다양한 기능이 있음
=> 시간을 인덱스로 지정해 시계열 데이터를 분석할 수 있음
- 스몰 데이터의 기술 잘 사용하기
- pandas는 분산 시스템이 아니기 때문에 빅데이터를 대응할 수는 없음
=> 어느 정도 데이터양을 감소시킨 후, 스몰 데이터로 처리하는 것이 하나의 방법
=> pandas를 사용하면 여러 데이터 소스로부터 데이터를 읽어 들여 결합하거나, SQL과 스크립트 엄어를 구분해 사용하는 처리를 이용하는 것이 쉽게 가능
=> 스몰 데이터에는 스몰 데이터 기술을 사용하는 것이 효율적이므로 빅데이터 기술을 사용할 필요는 없음
5) SQL의 결과를 데이터 프레임으로 활용하기
- 데이터 프레임은 실행한 결과로도 만들 수 있음
=> 복잡한 데이터의 집계에는 SQL을 사용하면서 데이터 프레임에 의한 대화형 데이터 처리의 혜택을 받을 수 있음
=> 데이터 집계 부분에서는 웨어하우스나 데이터 레이크를 이용하고, 그 결과를 데이터 프레임으로 변환해 대화형 데이터를 확인하고 가공
1-4 BI 도구와 모니터링
1) 스프레드시트에 의한 모니터링 ― 프로젝트의 현재 상황 파악하기
- 모니터링(monitoring)
=> 보다 계획적으로 데이터의 변화를 추적해 나가는 것
=> 데이터는 현재 상황을 파악하기 위한 도구로 사용할 수 있음
- 데이터 변화 모니터링 후 예상과 다른 움직임이 있는 경우 사람의 판단이 필요
=> 데이터의 의미를 제대로 이해하기 위해서는 사전 지식이 필요
2) 데이터에 근거한 의사 결정 ― KPI 모니터링
- 데이터 기반(data-driven) 의사 결정
=> 객관적인 데이터에 근거해 판단
- 스프레드시트 통한 보고서 작성과 한계
=> 스프레드시트는 보고서에 입력하는 숫자를 어디선가 계산해야 한다는 한계가 있음
=> 이를 위해 준비된 '데이터 웨어하우스'에서 '배치 처리'를 실행
3) 변화를 파악하고 세부 사항을 이해하기 ― BI 도구의 활용
- BI 도구
=> Tableau 등이 있음
=> 고속의 집계 엔진을 내장하고 있어 수백만 레코드 정도의 스몰 데이터는 순식간에 그래프를 그려줌
=> BI 도구로 읽어 들일 정보를 늘려 시각화할 범위를 넓힘
- 모니터링의 기본 전략 및 BI 도구
=> 데이터의 움직임을 모니터링하기 위한 기본 전략은 정기적인 보고를 통해 중요한 변화를 파악하는 것임
=> 원인을 알고 싶다면 원이 되는 데이터로 돌아와 재집계를 반복하면서 자세히 살펴보기
- 원하는 대로 집계 결과를 얻기 위해서는 '시각화하기 쉬운 데이터'를 만들어야 함
4) 수작업과 자동화해야 할 것의 경계를 판별하기
- 제대로 설계된 데이터가 없다면 BI 도구를 통해 원하는 시각화 데이터를 만들 수 없음
=> 수작업으로 할 수 있는 것은 수작업으로 해야 함
- 자동화하려는 경우에는 데이터 마트 만들기
=> 중요성이 높은(자주 업데이트되고, 다수의 사람에게 공유되는 등) 순으로 자동화
- 데이터를 SQL/스크립트를 사용해 생성하고 BI 도구를 통해 읽는 방법 3가지
=> 가장 범용성이 높은 방법은 2번
1) BI 도구에서 직접 데이터 소스에 접속하기
* 장점: 시스템 구성이 간단
* 단점: BI 도구 측에서 지원하지 않는 데이터 소스에는 접속할 수 없음
2) 데이터 마트를 준비하고, BI 도구에서 열기
* 장점: 어떤 테이블이라도 자유롭게 만들 수 있음
* 단점: 데이터 마트의 설치/운영에 시간이 걸림
3) 웹 방식의 BI 도구를 도입해 CSV 파일 업로드하기
* 장점: 스크립트로 자유롭게 데이터를 가공할 수 있음
* 단점: 데이터 생성/업로드에 프로그래밍이 필요
'개발독서 > 데이터' 카테고리의 다른 글
빅데이터를 지탱하는 기술 (5.2~5.3 배치/스트리밍 형의 데이터 플로우) (0) | 2024.12.21 |
---|---|
빅데이터를 지탱하는 기술 (3.3~4.2 데이터 마트의 구축 & 벌크 형과 스트리밍 형의 데이터 수집 & 메시지 배송의 트레이드 오프) (0) | 2024.11.08 |
데이터 중심 애플리케이션 설계 (7장 트랜잭션) (0) | 2024.06.24 |
데이터 중심 애플리케이션 설계 (6장 파티셔닝) (0) | 2024.06.09 |
데이터 중심 애플리케이션 설계 (5장 복제) (0) | 2024.06.03 |