Chapter 06

 

어느덧 6주차까지 왔다. 혼공 완주 !!!

스스로에게 칭찬해줘야지 !!! 쓰담~ 쓰담~

 

▶ 내용 요약

06-1 객체지향 API로 그래프 꾸미기

- pyplot 방식과 객체지향 API 방식

 

 

- 그래프에 한글 출력하기

  . 한글 폰트가 필요하기 때문에, 나눔폰트를 설치해야 한다.

  . 예제에서는 구글 코랩에 대해서만 설명되어 있지만, 일반적인 Ubuntu 환경에서도 적용된다.

 

 

  . 사용할 수 있는 폰트 목록을 확인해볼 수도 있다.

  . 사용할 폰트를 지정할 수도 있고, 크기도 정할 수 있다.

 

 

  . 잘 되는지 확인해보자.

 

 

- 출판사별 발행 도서 개수 산점도 그리기

  . 교재와는 다르게, 내가 이용하는 도서관의 데이터로 진행해봤다.

 

 

  . 모든 데이터가 아닌 Top 30 출판사를 뽑아서 사용한다.

 

 

  . 산점도를 그리면 된다!

 

 

  . Marker 크기를 확인하거나 설정을 할 수도 있다.

  . 그냥 점이 아니라 크기에 따라 의미를 부여해보자. (대출건수)

 

 

- 맷플롯립의 다양한 기능으로 그래프 개선하기

 

 

 

 

06-2 맷플롯립의 고급 기능 배우기

- 실습준비하기

  . 한글 폰트 설치 및 도서관 CSV 파일 읽어오기 (앞에서 진행했던 내용 활용)

 

- 하나의 피겨에 여러 개의 선 그래프 그리기

  . 대출건수 크기가 유사한 출판사 2개를 선택해서 그려보자

 

 

  . 레전드를 표현하거나 모든 출판사 정보를 그려보거나 해보자.

 

 

  . 피봇 테이블을 이용해서 데이터를 만들어서 stackplot으로 그려보자.

 

 

 

- 하나의 피겨에 여러 개의 막대 그래프 그리기

 

 

  . 나란히 나오도록 할 수도 있다.

 

 

  . 2개의 bar 그래프를 합쳐서 그리는 2가지 방법이 있다.

 

 

 

  . 데이터 값 누적한 것을 그려보기 위해서 데이터를 먼저 확인해보자

 

 

  . cumsum()을 이용해서 누적 데이터를 만들 수 있다.

 

 

- 원 그래프 그리기

  . 10개 출판사를 뽑아서 pie를 그리면 된다.

 

 

  . startangle 및 여러 옵션들을 줘서 멋진 원 그래프를 만들 수 있다.

 

 

- 여러 종류의 그래프가 있는 서브플롯 그리기

  . 앞에서 살펴본 것들의 종합판이다!

 

 

  . 한 방에 모두 그려진다!!!

 

 

- 판다스로 여러 개의 그래프 그리기

  . DataFrame에서 바로 그래프를 그릴 수도 있다.

 

 

 

 

▶ 기본 미션

p.344의 손코(맷플롯립의 컬러맵으로 산점도 그리기)를 코랩에서 그래프 출력하고 화면 캡쳐하기

 

→ 코랩이 아닌 로컬 환경에서 실행해봤다 ^^

 

 

 

 

▶ 선택 미션

p.356~359의 스택 영역 그래프를 그리는 과정을 정리하기

 

① 기본 데이터 준비

  - 작업 준비 과정이다.

 

 

② 그래프로 표현할 데이터 만들기

  - Top30 출판사 기준으로 "출판사 / 발행년도 / 대출건수"를 추출하고,

  - "출판사 / 발행년도" 기준으로 그룹핑을 하면서, 대출건수는 sum()을 했다.

  - 전체적으로 reset_index()까지 해줬다.

 

 

③ pivot_table()

  - 발행년도를 X축으로 하고, 출판사를 Y축으로 하고, 대출건수를 데이터로 하는 테이블을 만든다.

 

 

④ get_level_values()

  - pivot_table()을 사용했다보니, column이 다단으로 구성되어 있다.

  - 이런 경우 원하는 레벨의 값만 추출하기 위해 get_level_values()를 사용했다.

 

 

⑤ stackplot()

  - 이제 그래프를 그리면 된다.

 

 

우와~~~ 다했다!!!!

반응형

Chapter04. 데이터 요약하

 

정신없이 달리다보니 어느덧 반환점을 돌고 있다. 앗싸~!!!

 

▶ 내용 요약

04-1. 통계로 요약하기

- df.describe()
  . 25%/50%/75% 가 아닌 다른 범위를 알고 싶을 때 : df.describe(percentiles=[0.3, 06, 0.9])
  . object 컬럼의 값 통계를 보고 싶을 때 : df.describe(include='object')


- 일반적인 수학 함수
  . df.mean() / df.median() / df.max() / df.min()


- df.quantile() / sr.quantile() : 분위수
  . df.quantile(0.25)
  . df.quantile([0.25, 0.5, 0.75])


- df.var() : 분산
  . 평균을 먼저 구한 뒤, 평균과 각 데이터 차이를 제곱해서 더한 뒤 데이터 갯수로 나눔


- df.std() : 표준 편차
  . 분산에 루트를 씌운 값

 

import numpy as np

diff = df['대출건수'] - df['대출건수'].mean()
np.sqrt( np.sum(diff**2) / (len(df) - 1) )


- df.mode() : 최빈값. 제일 자주 나오는 값


04-2. 분포 요약하기

- 산점도 : plt.scatter(df['column1'], df['column2'], alpha=0.1)


- 히스토그램
  . plt.hist(df['column1'], bins=5) : y축 폭을 5로 해서 그려라
  . plt.historgram_bin_edge(df['column1'], bins=5)

 

- 상자 수염 그림
  . 상자에서부터 1.5배 IQR 거리 안에서 가장 멀리 떨어져 있는 것 까지 표시

 

plt.boxplot( df[ ['column1', 'column2'] ])
plt.yscale('column')
plt.show()

 

 

▶ 기본 미션

p. 279의 확인 문제 5번 풀고 인증하기

 

기본 미션

 

우와 문제 스케일이 좀 크다 ^^

 

① 데이터 확보

  - https://www.data4library.kr/ 접속해서 데이터를 확보하자.

  - '데이터 제공' 탭을 통해서 데이터를 내려 받을 수 있다.

 

도서관 정보나루

 

② 데이터 읽어들이기

  - 다운로드 받은 데이터를 불러들여서 기본 모양을 살펴보자.

  - 특히, encoding을 신경써야 한다 !!! (정부차원에서 이거 그냥 UTF-8 쓰도록 강제해야하는 것 아닌가)

pd.read_csv()

 

③ Column 상태 확인 및 수정

  - '발행년도'를 가지고 통계를 내야 하는데, 수치형이 맞는지 확인하고, 아니아면 변경을 해야한다.

 

astype()

 

  - 그런데, 위와 같이 에러가 발생한다.

  - 이유는 제일 밑에 나와 있다. "2022(2021)"처럼 입력되어 있는 데이터가 있다보니 casting이 안되는 것이다.

 

  - '("를 포함한 데이터가 얼마나 있는지 확인해보고, '(*)' 부분을 삭제하도록 하자.

 

replace()

 

  - 다시 casting 해보자.

 

error

 

  - 또 에러가 나온다. 숫자가 아닌 데이터가 많은 것 같다.

  - 확인해보자.

 

숫자가 아닌 데이터

 

  - 이거.... 쉽게 갈 수 있는 길을 너무 어렵게 가는 것 같은데....

  - 일단 '.'을 포함한 것들이 많아 보이니 이를 먼저 처리해보자.

 

replace()

 

  - 아직도 243개나 남았다.

  - 데이터를 한 번 더 확인해보고 처리해보자.

 

replace()

 

  - 이제 85개 밖에 안남았다.

  - 데이터 확인해보고, 숫자가 아닌 것들을 전부 날려버리자.

replace()

 

  - astype()을 적용하기 위해서는 ''(공백), NaN 값이 있으면 안된다.

  - ''(공백)을 NaN으로 변환하고, NaN을 모두 0으로 변환해 astype()을 돌리자.

 

astype()

 

  - 드디어 int64 dtype으로 변환되었다.

 

④ draw Histogram

  - 이제 Boolean Indexing을 이용해서 원하는 범위를 한정하고, histogram을 그리면 된다.

histogram

 

 

▶ 선택미션

Ch.04(04-1)에서 배운 8가지 기술통계량(평균, 중앙값, 최솟값, 최댓값, 분위수, 분산, 표준편차, 최빈값)의 개념을 정리하기

 

일반적인 개념 정의는 너무나 잘 정리된 내용이 여기 저기 많이 있으므로 ^^

앞에서 만든 데이터를 가지고 직접 확인해보면서 살펴보겠다.

 

발행년도에 따른 대출건수가 어떻게 되는지를 scatter() 로 표현해봤다.

 

scatter()

 

8가지 기술통계량을 직접 확인해보자.

 

기술통계량

 

① max / ② min : 해당 값의 최댓값 / 최솟값

③ mean / ④ median

    . 평균값은 전체 데이터의 합을 전체 갯수로 나눈값이고,

    . 중앙값은 데이터를 줄 세웠을 때 중간 위치에 해당하는 실제값을 의미한다.

⑤ quantile

    . 분위수를 알려주는 것인데, 일반적으로는 IQR(InterQuartile Range, 사분범위) 사용

    . 명시적으로 원하는 분위수를 확인할 수도 있다.

⑥ var / ⑦ std

    . 분산은 각 데이터와 평균의 차이의 제곱의 총합을 전체 데이터 갯수만큼 나눠준 값이다.

    . 표준편차는 분산에 루트를 씌운 값이다.

⑧ mode

    . 최빈값은 데이터 값 중에서 가장 많은 빈도로 나오는 것을 의미한다.

 

 

우리 모두 파이팅 !!!

반응형

Chapter 03

 

어느덧 3주차 스터디까지 왔다! 와아 ~~~~ !!!

2주차 우수혼공족에 선정되어 간식 선물까지 받았다 ~~~ !!! 꺄아 ~~~~ !!!

 

우수혼공족

 

▶ 요약

3-1. 불필요한 데이터 삭제하기
- *.loc[]
  . slicing(슬라이싱)
    ( *.loc[:, '번호':'등록일자'] )
  . boolean array(불리언 배열)
    ( df.loc[:, df.column != 'map'] )
- *.drop()
  . 지칭하는 column을 삭제
    ( *.drop(column_name, axis=1) )
  . 지칭하는 row를 삭제
    ( *.drop([0,1]) # 0행, 1행을 삭제 )
- *.dropna()
  . NaN 값을 1개라도 갖고 있으면 column 삭제
    ( *.dropna(axis=1) )
  . NaN 값을 모두 갖고 있으면 column 삭제
    ( *.dropna(axis=1, how='all') )
- *.duplicated()
  . 지정한 columns의 값이 동일하면 중복된 행의 값을 리턴
    ( *.duplicated(subset=['도서명','저자','ISBN'], keep=False) )
- *.groupby()
  . 지정한 columns의 값이 동일한 것들을 묶어줌
    ( *.groupby(by=['도서명', '저자', 'ISBN', '권'], dropna=False).sum() )

3-2. 잘못된 데이터 수정하기
- *.info()
  . DataFrame의 다양한 통계를 보여주는 유용한 method
- *.isna()
  . NaN 값을 갖고 있는 column을 보여줌
    ( *.isna().sum() )
- Nan
  . None
  . np.nan
- *.fillna()
  . NaN 값을 갖고 있는 columns에 지정한 값을 채움
    ( *.fillna('없음') )
    ( *['부가기호'].fillna('없음') )
    ( *.fillna( {'부가기호':'없음'} ) )
- *.replace()
  . 값 exchange
    ( *.replace(np.nan, '없음') )
    ( *.replace( [np.nan, '2021'], ['없음', '21']) )
    ( *.replace( {np.nan: '없음', '2021' : '21']) )
    ( *.replace( {'부가기호': np.nan}, '없음') )
    ( *.replace( {'부가기호': {np.nan : '없음'}, '발행년도': {'2021' : '21'}} ) )
  . 정규표현식
    ( *.replace( {'발행년도': {r'\d{2}(\d{2})' : r'\1'}}, regex=True) )

 

 

▶ 기본 미션

p. 182의 확인 문제 2번 풀고 인증하기

 

[문제]

1번 문제의 df1 데이터프레임에서 'col1' 열의 합을 계산하는 명령으로 올바르지 않은 것은 무엇인가요?

 

 

df1['col1'].sum()

df1[['col1']].sum()

df1.loc[:, df1.columns == 'col1'].sum()

df1.loc[:, [False,False,True]].sum()

 

 

※ 위 문제에서 bold 표기한 부분은 책에서 잘못된 부분을 수정한 내용입니다.

    - 문제에서 "것은" 부분이 빠져있었습니다.

    - 보기에서 "df"가 아니라 "df1"이라고 해야합니다.

 

[풀이]

④ 에서 boolean으로 표기된 내역을 보면 [False,False,True]로 되어있기에 'col1'이 아니라 'col3'의 합계가 출력된다.

 

그러면, 이것을 검증해보자.

 

일단, 데이터를 준비해봤다.

NaN 값을 처리하기 위해 Numpy의 np.nan을 사용했다.

 

 

각 보기의 값을 확인해보자.

 

 

확인 끝~

 

 

▶ 선택 미션

p. 219의 확인 문제 5번 풀고 인증하기

 

[문제]

다음과 같은 df 데이터프레임에서 df.replace(r'ba.*', 'new', regex=True)의 결과는 무엇인가요?

 

보기는 생략.

 

※ 위 문제에서 bold 표기한 부분은 책에서 잘못된 부분을 수정한 내용입니다.

    - 문제에서 "같은" 부분이 빠져있었습니다.

 

[풀이]

정규식을 이용한 replace() 문제이다.

정규식을 보면 r'ba.*' 부분을 살펴보면 'ba'로 시작하는 문자열을 지칭하고 있다.

그래서 'ba'로 시작하는 문자열을 'new'로 바꿔치기하면 된다.

 

교재(책) 보기로 보면 ③ 번에 해당하는 결과가 정답이 된다.

 

이것을 검증해보자.

 

 

 

이번 Chapter는 비교적 수월했다.

남은 기간 스스로에게 파이팅 !!!

 

반응형

Chapter 02

 

▶ 요약

2-1 API 사용하기
https://www.youtube.com/watch?v=s_-VvTLb3gs&ab_channel=한빛미디어

JSON (Javascript Object Notation)
- JSON ≒ Dictionay + List
- import json
  . json.dumps()
  . json.loads()
- import pandas as pd
  . pd.read_json()

XML (eXtensible Markup Language)
- import xml.etree.ElementTree as et
  . et.fromstring()
  . *.findtext()
  . *.findall()

API (Application Programming Interface)
- import requests
  . r = requests.get(url)
  . data = r.json()

2-2 웹 스크래핑 사용하기
https://www.youtube.com/watch?v=Il6L8OtNFpc&ab_channel=한빛미디어

BeautifulSoup()
- find()
- find_all()

DataFrame의 행과 열
- loc()
  . *.loc[[0,1], ['bookname':'authors']]
  . *.loc[0:1, 'bookname':'authors']
    : DataFrame에서의 slicing은 마지막 값을 포함한다. (일반적으로는 포함하지 않는다)

 

 

▶ 기본 미션

p150의 확인 문제 1번 풀고 인증하기

 

□ 다음과 같은 데이터  프레임 df가 있을 때 loc 메서드의 결과가 다른 하나는 무엇인가요?

 

 

① df.loc[[0, 1, 2], ['col1', 'col2']]

② df.loc[0:2, 'col1':'col2']

③ df.loc[:2, [True, True]]

④ df.loc[::2, 'col1':'col2']

 

 

보기를 잘 살펴보면 ①, ②는 그냥 보면(?) 되고 ^^ 답은 ③, ④ 중 하나가 될 것이라는 것을 직감적으로 알 수 있다 !!!

③번을 실제 해보면 다음과 같이 출력이 된다.

 

 

응?! 'True' 가 도대체 어떻게 반응한다는 거지!? 해당 Column을 포함할지 안할지를 지정하는 것인가!?

그러면 조금 다른 사례를 확인해보자 !!!

 

 

그렇다!!! 가설이 맞았다. 3개의 Columns에 대해서 [참, 거짓, 참]으로 했더니 정말로 그렇게 출력이 되었다.

 

그러면, 정답은 ④이어야 하는데, 한 번 살펴보자.

 

 

'::2'라고 했기 때문에 하나씩 건너뛰라고 했기 때문에 0번행, 2번행만 출력이 되고 있다.

 

 

▶ 선택 미션

p. 137 ~ 138 손코딩 실습으로 원하는 도서의 페이지 수를 추출하고 화면 캡쳐하기.

 

① 온라인 서점의 검색 결과 페이지 URL을 만듭니다.

② requests.get() 함수로 검색 결과 페이지의 HTML을 가져옵니다.

③ BeautifulSoup로 HTML을 파싱합니다.

BeautifulSoup의 find() 메서드로 <a> 태그를 찾아 상세 페이지 URL을 추출합니다.

⑤ requests.get() 함수로 다시 도서 상세 페이지의 HTML을 가져옵니다.

⑥ BeautifulSoup로 HTML을 파싱합니다.

⑦ BeautifulSoup의 find() 메서드로 '품목정보' <div> 태그를 찾습니다.

⑧ BeautifulSoup의 find_all() 메서드로 '쪽수'가 들어있는 <tr> 태그를 찾습니다.

⑨ 앞에서 찾은 테이블의 행에서 get_text() 메서드로 <td> 태그에 들어있는 '쪽수'를 가져옵니다.

 

 

개인적으로 최근에 주로 사용하는 온라인서점이 알라딘이라서 이번 미션을 알라딘으로 해보고자 한다 ^^

 

 

URL 부분을 더 자세히 살펴보자.

 

 

응?! isbn이 아니라 Item-ID 으로 구성이 되네!?

혹시... isbn으로도 되지 않을까!?

 

 

된다 !!! ^^

어!? 그런데, 책을 다시 한 번 잘 살펴보니... 검색으로 조회 후에 상세 페이지 주소를 얻어서 진행하는 것이네...

다시 !!!

 

 

어짜피 검색에 isbn을 사용한다면

실무에서는 바로 상세페이지로 접근을 하겠지만, 우리는 공부중이니 일단 검색부터 진행해보겠다.

 

앞에서 확인한 URL을 가지고 시작했다.

 

상세 페이지 링크가 책 제목 부분에 붙어 있으므로 아래와 같은 HTML Tag 부분을 잡아내면 된다.

 

<a href="https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=329721455" class="bo3"><b>재미있는 게임 제작 프로세스</b></a>

 

아래와 같이 코딩해봤다.

 

 

여기에 있는 href 값을 이용해서 다음 웹페이지를 읽어오면 된다.

 

 

여기에서 잡아내야 하는 것은 페이지 정보이니 아래와 같은 HTML Tag 부분을 잡아내면 된다.

 

<div class="conts_info_list1"><ul><li>432쪽</li><li>188*257mm (B5)</li><li>821g</li><li>ISBN : 9788931469721</li></ul></div>

 

 

잘 살펴보면 <li> 태그 부분이 보일 것이다.

 

 

쪽 정보까지 잘 뽑아냈다~!!!

 

우리 모두 파이팅 !!!

반응형

 

▶ 요약

  ● 데이터 과학 vs 데이터 분석

    - 데이터 분석은 데이터 과학에 포함되는 one of them

    - 데이터 과학 = 데이터 분석 + 머신 러닝

 

  ● '데이터 분석'의 정의
    - 광의적 정의 : 데이터 수집/처리/정제 및 모델링을 포함한 전체 영역
    - 협의적 정의 : 기술통계, 탐색적 데이터 분석, 가설 검정

 

  이번 공부에서 사용하는 Python Package

    - Numpy
    - pandas
    - matplotlib
    - SciPy
    - scikit-learn

 

  ● 데이터 파일 확보하기

    - 이번 공부에서는 '도서관별로 공개된 장서/대출 데이터'를 사용

      . https://www.data4library.kr/openDataL
    - 한글 데이터의 경우에는 특히 인코딩에 대한 처리가 필요할 수 있음

 

  ● pandas dataframe
    - 하나의 행은 여러 데이터 타입의 열을 갖을 수 있다.
    - 하나의 열은 한 종류의 데이터타입으로만 구성된다.

 

 

▶ 기본 미션

p. 81의 확인 문제 4번 풀고 인증하기

 

4. 판다스 read_csv() 함수의 매개변수 설명이 옳은 것은 무엇인가요?

    ① header 매개변수의 기본값은 1로 CSV 파일의 첫 번째 행을 열 이름으로 사용합니다.

    ② names 매개변수에 행 이름을 리스트로 지정할 수 있습니다.

    ③ encoding 매개변수에 CSV 파일의 인코딩 방식을 지정할 수 있습니다.

    ④ dtype 매개변수를 사용하려면 모든 열의 데이터 타입을 지정해야 합니다.

 

매뉴얼을 찾아보자.

[출처]&nbsp;https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

 

① header 매개변수의 기본값은 1로 CSV 파일의 첫 번째 행을 열 이름으로 사용합니다. (X)

 

header 매개변수의 기본값은 "infer"이고, 자동으로 header를 추론하게 된다.

header가 없는 경우 "None"으로 명시해줘야 한다.

[출처]&nbsp;https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

 

② names 매개변수에 행 이름을 리스트로 지정할 수 있습니다. (X)

 

names 매개변수는 column 이름을 지정하기 위한 것이다.

[출처]&nbsp;https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

 

③ encoding 매개변수에 CSV 파일의 인코딩 방식을 지정할 수 있습니다. (O)

[출처]&nbsp;https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

 

④ dtype 매개변수를 사용하려면 모든 열의 데이터 타입을 지정해야 합니다.

 

전체 dataset의 데이터 타입을 지정할 수도 있지만, 개별 column의 데이터 타입을 지정할 수도 있다.

[출처]&nbsp;https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

 

▶ 선택 미션

p. 71 ~ 73 남산 도서관 데이터를 코랩에서 데이터프레임으로 출력하고 화면 캡처하기

 

→ 다음 순서대로 진행해보겠다.

  ① 도서관 데이터 다운로드 받기

  ② 구글 드라이브에 업로드 하기

  ③ Colab 실행해서 코드 작성하기

 

차근 차근 진행해보자.

 

① 도서관 데이터 다운로드 받기

  - https://www.data4library.kr/

https://www.data4library.kr/

 

상단 탭 메뉴에서 "데이터 제공"을 선택하고 받고자 하는 도서관을 선택해보자.

나는 ... 우리 동네 도서관을 골라봤다 ^^

데이터 제공 - 도서관 선택

 

"도서관명"을 클릭하면 상세 화면이 나온다.

상세 화면

 

하단에 있는 리스트 중에서 마음에 드는 것을 하나 고르고,

다운로드에서 "Text"를 선택하면 CSV 파일을 다운로드 받을 수 있다.

 

② 구글 드라이브에 업로드 하기

구글 드라이브에 들어가서 이번 공부에서 사용할 폴더를 하나 새로 만들자.

https://drive.google.com/

 

앞에서 다운로드 받은 파일을 업로드 하자.

파일 업로드

 

③ Colab 실행해서 코드 작성하기

이번 공부를 위한 새 노트를 하나 만들자.

https://colab.research.google.com/

 

교재를 보면 'gdown' 패키지를 통해서 구글 드라이브에 있는 파일을 다운로드 받을 수 있다고 하는데,

내가 멍청해서인지.... 성공하지 못했다.

 

이유는 아마도 인증 관련해서 처리가 안되어서인 것 같은데,

구글 드라이브에 있는 파일을 누구나 다운로드 받을 수 있도록(인증 없이 다운로드 되도록)

권한을 처리해주면 될 것 같기는 하지만.... 여하튼, 그냥 사용하기에는 이슈가 있었다.

 

하지만, 우리의 Colab은 구글 드라이브를 편하게 사용할 수 있도록 기능을 제공해준다!!!

Drive Mount

 

왼쪽 위의 저 메뉴를 누르면 된다.

액세스 허용

 

Google Drive 연결을 진행하면 된다.

mount

 

drive라는 폴더에 Google Drive가 마운트 되어있는 것을 확인할 수 있다.

우리는 이제 그냥 사용하면 된다.

 

파일 경로를 일일이 타이핑하려면 힘드니까 편하게 복사하자.

경로 복사

 

이번 숙제의 소스코드는 정말 심플하다.

code

 

실행 결과는 다음과 같다.

pd.read_csv()

 

이번 공부는 여기까지~

반응형

요즘 어떤 서비스의 아키텍처를 설계한다고 하면

당연히 "마이크로서비스 아키텍처(MSA)"를 떠올리게 될 정도로 MSA는 이제 거의 표준처럼 되어 버렸다.

 

그렇기에 당연히 우리는 "마이크로서비스 아키텍처(MSA)"를 공부해야 하고,

아마존에서 설계/아키텍처 부분 베스트셀러인 이 책을 살펴보는 것은 자연스러운 수순일 것이다 ^^

 

표지

 

2017년도에 초판으로 출간된 책인데,

빠른 변화와 신기술의 등장에 발맞춰서 얼마전에 전면 개정판으로 새로운 책으로 거듭났다!

 

전면 개정판

 

이 책의 저자는 특정 회사에 속하지 않고 프리랜서로 활동하시는 것 같고,

옮긴이는 포동 서비스를 언급하신 것으로 봐서 LG유플러스에서 근무하시는 것이 아닌가 싶다 ^^

 

지은이/옮긴이

 

책 제목에 "아키텍처"가 들어가있다보니

이 책의 대상독자로 제일 먼저 떠오르는 것이 "어?! 이 책은 Architect를 위한 책인가?"였다.

 

하지만, 뒤에 설명할 목차 등을 보면 알겠지만

이 책은 개발자부터 PL 및 C-level에게도 도움이 될 수 있는

"마이크로서비스 아키텍처(MSA)"에 대한 모든 것을 담고 있는 책이다.

 

대상 독자

 

이 책은 크게 "기초/구현/사람"이라는 3개의 부로 나뉘어져 있다.

 

응?

 

사람?

 

1부 기초

 

개인적으로는 2부 구현 부분에 가장 관심이 많이 간다.

 

2부 구현

 

정말 의외인 "3부 사람" ...

 

뭐 세상 모든 일은 다 사람하기 나름이니.... 가장 중요한 것이 사람인 것 맞지만.... 호오....!

 

3부 사람

 

회사를 다니고 있다면

처음부터 아무 것도 없는 상태에서 새롭게 설계하는 일 보다는

이미 모놀리스 아키텍처로 구성되어 있는 기존의 서비스를

마이크로 서비스 아키텍처로 마이그레이션하는 일이 더 많을 것이다.

 

그래서 "Chapter3. 모놀리스 분해" 부분에 관심이 많이 갔다.

 

CH3 - 모놀리스 분해

 

아마존에서 괜히 베스트셀러가 된 것은 아니기에

책 구성과 내용은 정말 훌륭한 것 같다.

 

다만, 개인적인 취향으로 아쉬운 것은...... 풀컬러가 아니라는 점!?

ㅋㅋ 사실 책 주제 자체가 굳이 풀컬러일 필요가 전혀 없기에 이마저도 단점이 아닌 것 같다 ^^

 

CH1

 

책 내용이 훌륭하다는 예시를 들어보자면,

모놀리스의 유형 중 하나인 "모듈식 모놀리스"에 대한 설명을 한 번 살펴보자.

 

모듈식 모놀리스

 

당연하게 보일 수도 있겠지만

개인적으로는 저렇게 모듈로 나눠서 구성하면

그것을 가지고 마치 마이크로 서비스인 것처럼 착각하는 경우가 종종 있다.

그런 부분에 대한 설명이 차분하게 잘 서술되어 있는 것을 보면 이 책의 내공이 정말 탄탄한 것 같다.

 

그리고 또, 개인적으로 애정하는 쿠버네티스...

 

K8s

 

마이크로서비스 아키텍처(MSA)하면 빼놓을 수 없는 짝꿍 쿠버네티스(Kubernetes) !!!

 

 

전반적으로 이 책은 정말 "마이크로서비스 아키텍처(MSA)"의 교과서라고 불리워도 무방할만큼

탄탄한 내공이 가득차 있는 정말 좋은 책이다.

 

쿠버네티스(Kubernetes)를 공부하는 분들도 필수 도서로 같이 공부하면 정말 많은 도움이 될 것이다!!!

 

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

반응형

IaC라는 말은 인프라스트럭처(Infrastructure)를 코드(Code)로 관리를 하겠다라는 것이다.

 

Infrastructure as Code

 

이것을 가능하게 만들어주는 도구 중에서

최근 가장 유명한 도구가 바로 해시코프(HashiCorp)에서 만든 테라폼(Terraform)이다.

 

바로 이 도구에 대해서 친절히 알려주는 책이 바로 이 책이다.

 

 

5월말에 출간된 따끈따끈한 책이다.

 

 

이 책의 구성은 개인 사용자를 위한 내용부터 단일팀, 다수팀을 넘어 조직 단위에서 필요한 내용까지 담고 있다.

 

 

다만, 이 책은 초보자들을 위한 책은 아니다.

본업이 Infrastructure와 관련된 분들을 위한 책이다.

 

 

이 부분이 조금 아쉬운 부분일 수도 있겠지만,

이 분야를 조금이라도 아시는 분들은 어쩔 수 없다는 것에 동의하실 것이라고 생각한다.

 

사실 Infrastructure 라는 용어에 대한 명확한 정의조차 어려움이 있긴한데,

단순히 서버(Server)라는 hardware라고 생각할 수도 있지만

지금 실제 필드에서 infrastructure라는 용어는 대단히 광의적으로 쓰이고 있다.

 

이 분야에서 업무를 하기 위해 알아야할 것들은 정말 많다.

CPU, Memory 등의 실제 hardware에 대한 지식도 알아야 하고

Windows Server나 Linux 등의 운영체제에 대해서도 알아야 하고

서버에 설치되는 MySQL, PostgreSQL,Oracle 등과 같은 데이터베이스도 알아야 하고

NginX나 Apache, Tomcat과 같은 WAS에 대한 지식 뿐만 아니라

그 외 다양한 HW에 대한 지식 + SW에 대한 지식들을 모두 알아야 한다.

 

최근에는 심지어 AWS, Azure, GCP, OCI 등 Cloud에 대한 지식은 물론이고

Container, Kubernetes 등에 대한 지식까지 모두 알아야만 한다.

 

또한 보안 관련된 지식 뿐만 아니라 네트워크에 대한 지식까지도 필요하다.

 

 

위에서 언급한 모든 것들을 전부 잘 알아야 하는 것은 아니지만

최소한 무엇인지 알고는 있어야 테라폼에 대해서 공부할만할 것이다.

 

그러면, 테라폼 외에 다른 IaC 도구들은 없는 것일까!?

 

 

비교표를 보면 알겠지만... 뭐 결국은 Terraform 짱!!!

 

 

설치 과정이 단순하기에... 사실 경로 설정만 신경쓰면 된다.

 

 

책은 전반적으로 많은 노력을 기울인 잘 만들어졌다라는 것이 느껴진다.

다만, 아쉬운 점은 ... 위 이미지와 같이 ... 컬러가 아니다보니, 몇 몇 그림은 아쉬움이 남는다.

 

 

서버 관리 및 DevOps 등을 담당하는 분들이라면,

서버 및 클라우드 등을 code로 관리하고픈 분들이라면 필독서로 옆에 비치해놓아야 할 책이라고 생각한다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

반응형

IT 관련 직업에 있는 사람이 아니더라도

최근 대부분의 사람들이 모두 알고 있을 ChatGPT !!!

 

그냥 심심풀이로 사용해보는 것에서 그치지 않고

본인의 업무에 실제로 도움이 되도록 사용하려면 어떻게 해야하는지를 알려주는 책이 나왔다.

 

 

ChatGPT는 이름 그대로 Chatting 방식을 통해서 인터페이스(interface)를 하는 도구이다.

그렇기에 어떻게 대화를 해야하는지가 대단히 중요하고

이러한 대화법을 바로 "프롬프트(prompt)"라고 한다.

 

이 책은

원하는 결과를 얻기 위한 프롬프트 작성 방법을 알려주는 책이다.

 

 

따끈따끈한 ChatGPT와 관련된 책이기에 번역본이 아니라 생각했는데 (시간이 좀 걸리는 것이 일반적이기에)

"이안 클레이턴"이라는 분이 쓴 책을 "김상규"님이 옮기셨다.

 

 

2023년 5월 12일에 초판 1쇄가 발행된 따끈따끈한 신간이다.

 

크게 3부로 구성된 책이다.

 

 

1부에서는 프롬프트에 대해서 알아야할 것들을 소개해준다.

 

 

2부에서는 본격적으로 산업별로 어떻게 프론프트를 작성해야하는지를 알려준다.

 

 

3분에서는 자기 계발을 위해 어떻게 ChatGPT를 활용할 수 있는지를 알려준다.

 

 

메인이 되는 내용은 2부에 있는 산업별 프롬프트 부분인데,

여기에서 소개해주는 산업 분야를 보면 엄청나게 세분화 되어 있다.

자신이 속한 산업 분야를 찾아보면 되는 것이다.

 

 

책의 내용을 보면 다양한 상황과 조건에 대해서 Example 형식으로 보여준다.

 

 

책을 보다보면 좀... 왠지 성의 없어보이는 페이지도 보이긴 하지만,

자세히 살펴보면 조금씩 미묘하게 차이가 있는 모두 필요한 내용들이다.

 

 

글을 쓰고자 할 때 알아야할 내용들을 설명해주는 페이지를 살펴보자.

 

쓰고자 하는 글의 분류가 어떻게 되는지

글의 핵심 요소가 무엇인지를 잘 설명해주고 있다.

이런 내용들을 파악하고 있어야 ChatGPT를 제대로 활용할 수 있는 것이다.

 

그냥 무조건 글을 써달라고 하면

ChatGPT는 그냥 그저그런 내용만 답변할 뿐이다.

 

구체적으로 무엇을 어떻게 해야하는지,

지금 필요로 하는 내용이 어떤 것인지 명확히 전달을 해줘야

그에 걸맞는 내용을 답변한다.

 

 

뉴스에서 새로 생긴 프롬프트 개발자의 연봉이 엄청 높다는 이야기가 나오면

고작 ChatGPT와 대화하는 것이 왜 그런 연봉을 받는지 의아해하는 사람이 많다.

 

ChatGPT를 효과적으로 사용하기 위해서는

필요한 도메인에 대한 충분한 지식과 분석적이며 논리적인 접근을 통해

제대로된 대화를 할 줄 알아야 하는 것이고

그런 능력을 갖고 있는 사람이 흔하지는 않기에 몸값이 비싼 것이다.

 

최근 다양한 생성형 AI가 쏟아지고 있고

이러한 생성형 AI를 효과적으로 다루기 위해서는 어떻게 해야하는지

이 책을 통해 충분히 느끼고 배우기를 바란다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

반응형

+ Recent posts