220402 Hadoop과 친해지기 그 세 번째 이야기

하둡의 생태계(Hadoop Ecosystem) - Core part

이번 포스팅에서는 하둡의 생태계에 대한 전반적인 구성에 대해서 정리해보려고 한다. 하둡은 다양한 기술들의 집합체로, 총 3개의 세션으로 구분할 수 있다.
우선 첫 번째 Query Engine 5개의 기술스택, 두 번째 Core Hadoop Ecosystem으로 16개의 기술스택, 세 번째 External Data Storage로 3개의 기술스택, 도 합 24개의 기술들로 구성이 되어있다.

아직 막 하둡의 개념정도만 공부하고 있는 이 시점에 이렇게 방대한 하둡의 생태계에 대해서 정리하는 이유는 하둡의 전체적인 생태계를 이해하고 숲을 그려놓은 상태에서 부분 기술들을 학습하게 되면, 나중에 해당 기술스택이 왜 쓰이는지, 어떤 기술스택이 어떤 기술 스택의 대체로 사용이 될 수 있고 어떤 상황에서 어떤 기술스택 간의 조합이 적절한지에 대한 판단을 할 수 있기 때문이다.

아직은 다 알지도 알 수도 없지만, 지금은 하둡의 생김새에 대해서 알아보자.

우선, 하둡의 가장 핵심적인 부분부터 살펴볼겠다.

Core Hadoop Ecosystem

[STEP1 - STEP10]

[STEP 1]
하둡의 가장 핵심적인 생태계의 구성을 살펴보면, 가장 바닥에 HDFS(Hadoop Distribution File System)이 기반을 잡고 있다. 이 부분은 이전에 하둡의 역사에 대해서 알아봤듯이, 구글이 만든 GFS(Google File System)이라는 기술을 기반으로 만든 하둡의 버전의 기술이다.
HDFS는 빅데이터를 클러스터의 컴퓨터들에 분산 저장하는 시스템이다. 클러스터의 하드 드라이브들이 하나의 거대한 파일 시스템을 사용하고, 그 데이터의 여분 복사본까지 만들어서 혹여나 컴퓨터가 불에 타서 녹아버리면, 백업 복사본을 사용해서 자동으로 손실을 회복하도록 한다.
(HDFS = 분산 데이터 저장소 역할)

Read More

220402 Mini project 회고 및 정리 - 타이타닉 생존자 예측 데이터 분석

타이타닉

이번 포스팅에서는 학습 16일차에 Kaggle에 있는 타이타닉 생존자예측 dataset을 분석하고, 분석한 dataset을 시각화하는 연습한 내용을 정리하려고 한다.
이번 미니 프로젝트를 통해 얻었던 나 자신에 대한 피드백은 우선 첫 번째 dataset에 대한 사전 분석이 부족했다는 것이다. 그리고 두 번째, DataFrame과 시각화 작업에 대해 연습이 부족하여 작업함에 있어 미숙한 부분이 많았다.

이 피드백을 통해 알게된 개선해야 될 부분에 대해서는 앞으로 차근차근 채워가도록 해야겠다.

타이타닉 생존자 예측 dataset

주어진 dataset은 총 12개의 칼럼과 891개의 행으로 구성되어있다. 즉, 한 사람당 총 12 종류의 정보를 포함하고 있다.
특정 승객의 새존 여부를 알아보려면 survived 항목의 값을 살펴보면 된다. (1:생존)
주어진 test.csv 파일의 구조는 train.csv 파일과 거의 동일하지만, survived 항목이 없다.

1
2
3
4
5
6
7
8
import pandas as pd
import numpy as np # 데이터 분석을 위한 NumPy
import matplotlib.pyplot as plt # 데이터 시각화 라이브러리
import seaborn as sns # 데이터 시각화 라이브러리

train_df = pd.read_csv('train.csv')

print(train_df)
타이타닉

타이타닉 dataset 분석

데이터셋을 시각화하고 결론을 도출해내기 전에는 우선적으로 주어진 dataset에 대한 분석이 필요하다. 이번 미니 프로젝트에서 간과했던 부분이었는데, dataset이 주어졌다면, 우선적으로 주어진 dataset의 columns 구성(df.columns.values),데이터 자료 구성 정보(df.info())를 확인해야한다.

Read More

220402 학습 16일차 자기반성

메타인지

2022년 4월 2일, 퇴사한지는 어느덧 42일차가 되었고, 새롭게 학습을 시작한지는 16일차가 되었다. 그리고 추가적으로 건강관리의 일관으로 시작한 식단조절 및 운동을 한지는 27일차가 되었다.

이번 포스팅에서는 나의 내적으로 좀 의미있는 반성의 시간을 갖으며, 글을 작성해보려고 한다.
반성이 없는 계획과 발전은 의미가 없기 때문에 지난 나의 과거를 다시 되새기고 현재 내가 걱정하는 것을 구체화시켜서 현재의 나를 좀 더 발전시켜 나가고자 한다.

현실적으로 해결할 수 있는 문제와 그렇지 않은 문제

최근 오랜만에 공부를 시작하면서 “내가 의욕이 많이 없구나”라는 것을 느꼈다. 이전에는 새로운 것을 배우면 적용시켜보기 위해 따로 만들어보고 만들어보는 과정을 통해 또 추가적으로 공부를 했었다.
그런데 요즘은 처음 배우는 내용임에도 불구하고, 복습과 시뮬레이션해보는 과정을 따로 하지 않았다.
왜 그랬을까?
이 문제부터 생각에 접근해봐야겠다. 우선 의욕이 없는 이유는 내가 아직도 현실적으로 해결할 수 없는 문제에 대해 신경을 쓰고 있다는 것과 아직도 나 자신에 대한 확신이 부족하기 때문이다.

아무리 주변 경력있으신 분께 조언을 얻으면서 좋은 말씀을 들어도 결국은 현실적으로 해결할 수 있는 부분에 집중해서 현실에 최선을 다하는 것은 내 몫이며 어쩌면 그것이 전부이지 않을까 생각이 된다.

사람마다 각기 무언가를 배우거나 적용하는 방법이 다르듯이, 내가 앞으로 나아가고자 하는 방향에 대해 나 자신이 스스로 찾아보고 부딪히고 체득하면서 나만의 루트를 만들어가는 것이 맞는 것 같다.

내가 알고 있는 것과 모르는 것, 메타인지

내가 알고 있는 것과 모르고 있는 것, 메타인지를 높이기 위한 가장 좋은 방법은 시뮬레이션이라고 한다.
무언가 새로 배웠다면, 내가 진짜 이해를 하고, 스스로 응용을 할 수 있는지 확인하는 과정(시뮬레이션)을 거쳐서 메타인지를 높이는 것이 중요하다.
당장 듣고 바로 적용해보면, 마치 내가 다 이해한 것 마냥 착각을 하고 그 다음 그다음 세션으로 넘어가고, 결국 나중에는 이게 누적이 되서 다시 이전으로 돌아가서 다시 학습을 해야되는 최악의 상황이 온다.
이제부터는 무언가를 학습했다면, 그것을 새롭게 적용시켜보는 과정을 거쳐서 완전한 내것으로 만들어야 한다.

단기 성취를 느낄 수 있는 목표 설정

이번에 퇴사를 하고, 새로운 도메인에 대한 학습을 시작하였다. 혼자서 스스로 학습해야되는 부분이 많고, 그 기간도 상대적으로 길기 때문에 단기적으로 성취감을 느끼면서 계속 동기부여를 얻으면서 앞으로 나아갈 수 있는 목표설정이 필요하다.
그래서 자격증 취득이나 짧게는 하루, 일주일, 한달 단위로 해서 계속 자기 피드백을 받을 수 있도록 목표설정을 하고 나 스스로에 대해 피드백을 해야한다.
지금 이 시점에서 16일이라는 시간이 흘렀지만, 지금부터 다시 제대로 교정하고 다잡아야겠다.
지금 이 습관이 나중에 새로운 회사에 입사해서도 새로운 기술을 습득하고 업무를 함에 있어 좋은 원동력이 될 수 있도록 차근차근 준비해야겠다.

220331 데이터 시각화(Seaborn) TIL

데이터 시각화

이번 포스팅에서는 Seaborn에 대해서 학습한 내용에 대해서 작성해보려고 한다.

Seaborn

Seaborn은 강력한 데이터 시각화 라이브러리로, matplotlib의 최상에 속하는 라이브러리이다. 그래서 Seaborn이 matplotlib에 비해 기능을 높이는 것을 볼 수 있다고 한다.

우선 판다스와 Seaborn을 활용해서 데이터를 시각화해보는 연습을 해보겠다.
앞으로 많은 것을 학습하고, 까먹을 수 있기 때문에 기본적인 시각화하는 방법에 대해서 기록을 해두겠다.

시각화를 하는 방법에는 여러 방법이 있지만, 그것들은 방법이지 정말 중요한 것은 가장 기본이 되는 시각화를 통해서 얻고자하는 결과와 어떤 사회적 현상을 해결할 수 있는지에 대한 인식의 전환이 필요한 것 같다.

단순히 parameter값을 뭐를 넣고 빼고 함으로써 그래프를 뽑아내는 것이 중요한 것이 아닌, 실제 시각화를 통해서 머신러닝 모델링하기 전에 해당 데이터셋에 적합한 최적의 알고리즘을 선택하기 위한 직관을 얻기 위한 용도로써 데이터 시각화를 바라봐야 되는 것 같다.

아직은 잘 모르는 단계이지만, 일단 이정도의 이론상 개념을 알고 있는 상태에서 앞으로의 AI, ML에 대한 공부도 확장해가야겠다.

Read More

220330 데이터 시각화(Matplotlib) TIL

데이터 시각화

이번 포스팅에서는 Matplotlib에 대해서 학습한 내용에 대해서 작성해보려고 한다.

Matplotlib

우선 matplotlib를 어떻게 가져와서 사용하는지에 대해서 알아보자.
우선 가장 기본적인 형태의 그래프를 Matplotlib 라이브러리를 사용해서 그려보려고 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import matplotlib.pyplot as plt
import pandas as pd

investment_df = pd.read_csv('crypto_daily_prices.csv')
investment_df

# matplotlib을 사용해서 Pandas DataFrame의 data를 시각화하기
investment_df.plot(x = 'Date', y = 'BTC-USD Price', label = 'Bitcoin Price', linewidth = 3, figsize = (14, 6))
plt.ylabel('Price [$]')
plt.xlabel('Date')
plt.title('가상화폐 시각화 실습 (matplotlib)')

# 기본 범례 위치 변경해보기
plt.legend(loc = 'upper right')
# 그리드 그려주기
plt.grid()
가상화폐 데이터프레임 리스트
가상화폐 matplotlib 그래프

Read More

220330 Hadoop과 친해지기 그 두 번째 이야기

하둡(Hadoop)

이번 포스팅에서는 Hadoop의 기본 원리에 대해서 정리를 해보려고 한다.
하둡의 기본 원리에 대한 정리에 앞서, 현재 실습환경으로 구축한 HDP(Hortonworks Data Platform)가 Cloudera로 인수합병을 되었지만, Cloudera에 의해 개발된 CDP(Cloudera Data Platform)와 HDP 둘 다 내부적으로는 Apache 서비스 계열이며, 같은 방식으로 작동을 한다.
배우는데 사용되는 플랫폼이 조금 다른 것일 뿐이지, 통용되는 내용은 모두 같기 때문에 각 기술들의 개념과 사용법 그리고 동작에 대해 집중해서 학습하도록 하자.

하둡의 개요

오픈소스 소프트웨어 플랫폼으로, 매우 큰 데이터셋을 컴퓨터 클러스터 상에서 분산 저장과 분할 처리한다. 클러스터상에 PC를 추가해주기만 하면 클러스터내의 컴퓨터들은 동일한 데이터를 서로 복제를 해서 가지고 있으며, 다수의 PC를 활용해서 빅데이터를 다룬다.
이때문에 화재로 인해 클러스터 내 일부 PC가 손상이 되어도 클러스터 내 다른 PC를 통해서 복구가 가능하다.

하둡의 역사

하둡이라는 기술은 대용량 데이터를 분산처리하기 위한 첫 번째 솔루션이 아니었다.
그 조상이 되는 솔루션은 바로 구글이 만든 GFS(Google File System)이라는 기술이다.관련된 논문은 2003-2004년에 출간되었으며, 이것이 Hadoop의 분산 저장 개념의 토대가 되었다. 하둡의 저장 시스템의 방향성을 제공했으며, MapReduce는 Hadoop이 고안해낸 기술적 개념이다.

(1) GFS - 하둡의 분산저장
(2) Map Reduce - 하둡의 분산처리

하둡이라는 기술은 원래 야후가 개발을 했으며, 구글에서 작성한 GFS라는 기술 논문에 영감을 받아서 개발이 되었다고 하는데, Doug Cutting과 Tom White 이 두 사람이 2006년에 주축이 되어 개발이 되었다고 한다.
Doug Cutting의 아들이 가지고 놀던 장난감 코끼리 이름이 하둡(Hadoop)이었는데, 그래서 여타 기술의 이름들과 같이 별 다른 의미 없이 이렇게 이름이 붙여졌다고 한다.

그래서 하둡은 왜 쓰는 거지?

하둡을 쓰는 이유는 아래와 같다.

(1) 요새 데이터의 크기가 무지막지하게 크기 때문이다. 매일매일 테라바이트 이상의 데이터가 생성된다. (DNA/센서/웹 로그/주식시정의 거래 정보)

(2) 수직적 스케일링(Vertical scaling)의 한계

- Disk seek times (디스크 검색 시간이 길다)
- Hardware failures (하드웨어에 문제가 생기는 경우, 복구시에 문제가 될 수 있다)
- Processing times (긴 처리시간 문제)

(3) 수평적 스케일링(Horizontal scaling)
수평적으로 스케일링을 하기 때문에 더 많은 데이터를 다루거나 더 빨리 처리해야 된다면 클러스터에 컴퓨터를 더 추가하면 되고, 추가한 만큼 선형적으로 처리 속도가 빨라진다.

(4) 하둡은 본래 batch processing을 위해 만들어졌지만, 이제는 하둡의 데이터를 노출시켜서 웹 어플리케이션 등과 매우 빠르게 데이터를 교류할 수 있는 시스템도 있으며, 하둡 위에 구축된 다른 어플리케이션을 사용하여 대화식 쿼리의 사용도 가능하다.

220330 Pandas TIL (작성예정...)

판다스 복습하기

이번 포스팅에서는 본격적으로 Pandas 학습한 내용을 나중에 복습하기 위한 목적에서 간단하게 정리해보려고 한다.

Index 설정하고 재설정하기

  • 판다스는 csv파일을 읽거나 데이터를 DataFrame의 형태로 저장하는데 사용된다. (numeric index는 기본적으로 설정된다)
1
2
3
4
5
import pandas as pd

bank_df = pd.read_csv('bank_client_information.csv') # 자동으로 index를 숫자로 지정

bank_df
  • 특정 column을 index column으로 할당
1
bank_df.set_index('First Name', inplace = True) # inplace = True로 원본 데이터 업데이트
  • 다시 numeric index를 index값으로 되돌릴때에는 reset_index메소드를 사용한다.
1
bank_df.reset_index(inplace = True)
  • 열을 판다스 데이터 프레임의 인덱스로 사용하고 싶을 때
1
2
3
bank_df = pd.read_csv('bank_client_information.csv', index_col = 'First Name')

bank_df
  • (CHALLENGE #4) 판다스 데이터 프레임 인덱스 설정하고 재 설정하기
1
2
3
4
5
6
# 방법1
bank_df = pd.read_csv('bank_client_information.csv')
bank_df.set_index('Last Name', inplace = True)

# 방법2
bank_df = pd.read_csv('bank_client_information.csv', index_col = 'Last Name')

Read More

220328 Numpy TIL

Numpy

이번 포스팅에서는 이번에 처음 배워보는 넘파이(Numpy)에 대해서 개념 및 기본 사용법에 대해서 정리해보려고 한다.

넘파이(Numpy)?

1
2
(1) Numpy는 C언어로 구성되었으며, 고성능의 수치계산을 위해 나온 패키지이며, Numerical Python의 약자이다.
(2) Python을 활용한 데이터 분석을 수행할 때, 그리고 데이터 시각화나 전처리를 수행할 때, NumPy는 매우 자주 사용되기 때문에 중요하다.

넘파이의 기본 사용

모듈 Import

1
2
3
import numpy as np

print(np.__version__)

Read More

220328 Python TIL

Python

파이썬 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Movie:

def __init__(self, name, actor, review, score):
self.name = name
self.actor = actor
self.review = review
self.score = score

def update(self, name, actor, review, score):
self.name = name
self.actor = actor
self.review = review
self.score = score

def all(self):
print("제목: {}\n배우: {}\n리뷰: {}\n별점: {}".format(self.name, self.actor, self.review, self.score))

패터슨 = Movie('패터슨', '아담 드라이버', '아하!', 4.5)
지구를지켜라 = Movie('지구를 지켜라', '신하균', '7번 봤다 더 말이 필요한가', 5)
헤드윅 = Movie('헤드윅', '존 카메론 미첼', '위키드 리틀 타운', 4)

for a in (지구를지켜라, 헤드윅, 패터슨):
a.all()
print('-----------')

# update method 이용하여 가장 마지막 영화의 제목 뒤에 2를 넣어 수정
패터슨.update('패터슨2', '아담 드라이버', '아하!', 5)
패터슨.name

인스턴스 변수의 은닉, 클래스 변수 선언, static method 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Movie:

class_name = 'Movie'

def __init__(self, name, actor, review, score):
self._name = name
self.actor = actor
self.review = review
self.score = score

def update(self, name, actor, review, score):
# _name을 숨겨놓고 조회만 하게 하려면 update method에서 제목 자체를 생략한다.
self.actor = actor
self.review = review
self.score = score

def all(self):
print("제목: {}\n배우: {}\n리뷰: {}\n별점: {}".format(self.name, self.actor, self.review, self.score))

# 파이썬에서 은닉성을 만들기 위해 - 함수를 이용해서 변수명인척 숨어있는 변수를 호출하는 능(볼 수만 있고, 해당 변수명은 알 수 없으며 수정도 할 수 없음.)
@property
def out_name(self):
return self._name

@staticmethod
def staticMovie():
print(Movie.class_name)

@classmethod
def staticMovie(cls):
print(cls.class_name)

Read More

220326 Data warehouse vs Data lake (작성중...)

빅데이터 저장소(Data Storage)

이번 포스팅에서는 DW(Data Warehouse)와 DL(Data Lake)에 대한 용어 정리를 해보려고 한다.
요즘 데이터 엔지니어가 되기 위한 요구조건을 찾아보다가 DW, DL이라는 약어가 많이 등장해서 궁금했는데, 이 약어가 바로 Data Warehouse, Data Lake였다.
한국말로 직역하면 데이터 창고데이터 호수인데, 이를 통해 개괄적인 용어의 의미를 파악할 수 있다.

DW(Data Warehouse)

DL(Data Lake)