Chapter 05

 

뭔가 내가 대단해진 것 같은 느낌!!! 그 이유는? 책의 절반을 넘겨서?! ^^

 

▶ 내용요약

5-1 맷플롯립 기본 요소 알아보기

  - plt.figure(figsize=(x, y)) : 그래프 크기
  - plt.figure(dpi=d) : DPI
    . plt.figure(figsize=(x/d, y/d)) : 이처럼 계산하면 크기를 계산하면서 조절할 수 있다
  - plt.rcParams[parameter] : 관련 속성값을 확인하거나 설정할 수 있음
  - fig, axs = plt.subplots() : 그래프 묶음 관리. axs 를 통해 각 그래프를 지

 

5-2 선 그래프와 막대 그래프 그리기

  - plt.plot() : 선 그래프

plt.plot(count_by_year.index, count_by_year.values)
plt.title('Books by year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.show()

  - marker='.', linestyle=':', color='red' : 꾸미기 옵션
    . '*-g' : 여러 옵션을 한 방에 해치우기
  - plt.xticks() : 눈금값 설정하기

plt.plot(count_by_year, '*-g')
plt.title('Books by year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.xticks( range(1947, 2030, 10) )
plt.show()

  - plt.annotate() : 값 텍스트 출력
    . xytext : 출력 위치 보정
    . textcoords : 상대값으로 위치 보정

plt.plot(count_by_year, '*-g')
plt.title('Books by year')
plt.xlabel('year')
plt.ylabel('number of books')
plt.xticks( range(1947, 2030, 10) )
for idx, val in count_by_year[::5].items():
  # plt.annotate(val, (idx, val), xytext=(idx+1, val+10))
  plt.annotate(val, (idx, val), xytext=(2, 2), textcoords='offset points')
plt.show()

  - plt.bar() : 막대 그래프

plt.bar(count_by_subject.index, count_by_subject.values)
plt.title('Books by subject')
plt.xlabel('subject')
plt.ylabel('number of books')
plt.xticks( range(1947, 2030, 10) )
for idx, val in count_by_subject.items():
  plt.annotate(val, (idx, val), xytext=(0, 2), textcoords='offset points')
plt.show()

  - plt.annotate() : 값 텍스트 출력
    . fontsize : 폰트 크기
    . ha : 정렬

plt.bar(count_by_subject.index, count_by_subject.values, width=0.7, color='blue' )
plt.title('Books by subject')
plt.xlabel('subject')
plt.ylabel('number of books')
plt.xticks( range(1947, 2030, 10) )
for idx, val in count_by_subject.items():
  plt.annotate(val, (idx, val), xytext=(0, 2), textcoords='offset points',
               fontsize=9, va='center', color='green')
plt.show()

  - plt.barh() : 막대 그래프 (세로)
    . height : 막대의 높
    . plt.annotate(va='center') : 정렬 (세로)

plt.barh(count_by_subject.index, count_by_subject.values, height=0.7, color='blue' )
plt.title('Books by subject')
plt.xlabel('subject')
plt.ylabel('number of books')
plt.xticks( range(1947, 2030, 10) )
for idx, val in count_by_subject.items():
  plt.annotate(val, (val, idx), xytext=(2, 0), textcoords='offset points',
               fontsize=8, ha='center', color='green')
plt.show()

 

 

그래프에 대한 용어 파악을 위해 캡쳐&편집 해봤다.

(이런 정성을 보여야 우수 혼공족이 될 것 같은 욕심이........ 😁)

 

anotion

 

▶ 기본 미션

p. 314의 손코딩(맷플롯립에서 bar()함수로 막대 그래프 그리기)을 코랩에서 그래프 출력하고 화면 캡처하기

 

코랩에서는 다른 분들도 많이 할테니, 나는 나만의 환경에서~ ^^

 

 

① 데이터 불러오기 및 컬럼 정리

  - 지난 번에 '발행년도'를 int64로 만들기 위해 별의별 짓을 다 했는데 ... 간단히 끝냈다. 이런....

 

 

 

② 그래프 그리기

  - 나는 왜 매번 이상한 결과가 나오지!? ㅠ

 

 

 

③ sort_index

  - 'count_by_year' 의 index 값이 제대로 정렬이 되지 않아서 발생한 이슈이다.

  - 그래서, sort_index를 해줘야 한다.

 

 

 

④ graph

  - 이제 다시 그래프를 그려보자.

 

그런데, 미래에 출간된 책들은 정체가 뭘까!?

 

 

▶ 선택 미션

p. 316의 손코딩(텍스트 정렬, 막대 조절 및 색상 바꾸기)을 코랩에서 출력하고 화면 캡처하기

 

① 데이터 불러오기 및 컬럼 정리

  - 책에 있는 내용대로 데이터를 만들었다.

 

 

② graph

  - 이거... 바로 결과가 나오니 뭔가 불안하다. 뭐지 ?!

 

 

 

 

주말에 가족여행이 있어서, 조금 서둘러 공부했다 !!! 아자 !!! 아자 !!!

반응형

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()

 

이번 공부는 여기까지~

반응형

 

매번 타이밍을 놓쳐서 참여하지 못했던 "혼공학습단"인데,

드디어 모집 공고를 제 때 발견(!)하여 바로 신청할 수 있었다.

 

공짜로 참여할 수 있는 것만으로도 감지덕지인데,

열심히 공부하면 상품권도 준다고 그러고 ... 매주 간식도 주신단다 ~~~ !!!

 

정말 리뷰어 활동할 때도 느꼈지만,

한빛미디어는 정말 밝게 빛나는 햇빛이다 !!!

 

 

신청하고선... 뽑히기를 간절히 바라며... 기다리고 있었는데, 선정 메일이 도착을 해버렸다 !!!!

 

혼공학습단으로 선정이 되면 뭘 해야 되냐고?

말 그대로 빡세게 공부하면 된다!!! ^^

 

완주를 목표로 파이팅 !!!

 

반응형

최근 나오는 IT 서적의 상당수는 챗GPT에 대한 것들이다.

순위권들을 전부 씹어먹고 있다는...

 

처음에는 LLM에 대한 역사부터 설명하는 그런 책들이 트렌드였다가

최근에는 프롬프트에 대한 것들로 채워진 책들이 트렌드를 이끌고 있다.

 

이런 책 시장에 또 하나의 챗GPT 서적이 등장했다,

표지

 

다른 챗GPT 책들과의 차별점이 보인다.

 

"개발자"

 

개발자를 위한 챗GPT 가이드인 것이다!!!

지은이

 

글로벌한 인재라는 느낌이 팍!팍! 드는 소개가 보인다.

 

그리고,

"마이크로소프트 본사의 Copilot Applied AI팀에서 Senior Data Scientist"

 

Copilot 활용에 대해서는 전문가일 것이라는 느낌이 팍! 팍!

일러두기

 

바로 이 부분이 다른 챗GPT 서적들과의 차별점이다.

개발자에게 어떤 도움이 되는지에 대해서 설명해주는 책인 것이다.

개발자를 위한

 

이 책의 정체성이기에 계속 강조해본다!

초판

 

7월의 마지막날에 등장한 따끈따끈한 책이다.

 

그런데, 펴낸곳은 "한빛미디어"인데, 책 표지를 보면 "디코딩"이라는 명칭만 보인다.

 

임프린트가 뭔가 해서 위키를 찾아봤다. (https://ko.wikipedia.org/wiki/임프린트)

임프린트(imprint)는 출판 회사에서 유능한 편집자 등에게 별도의 하위 브랜드를 내어주고 기획, 제작, 판매 등 독자적인 운영을 맡기는 방식이다. 단일 출판 회사 아래에 여러 개의 임프린트가 있을 수 있다.

임프린트 브랜드를 사용하면 출판사 등은 각각의 특정 소비자 계층에게 집중적인 마케팅이 가능하다. 출판사 뿐 아니라 게임 회사에서도 독자적인 임프린트 브랜드를 운용할 수 있다.

 

호오.... 유능한 편집자 분의 닉네임이 "디코딩"이신가 보다. 고지연님?

설명서

 

실습을 위한 자료를 받을 수 있는 정확한 경로는 다음과 같다.

- https://github.com/decodingbook/ChatGPTforDev

실습 자료

 

뭔가 여러 파일들이 있을 것 같았는데, PDF 파일 하나만 덩그러니 있다.

그래도 이렇게 GitHub.com을 이용한 실습 자료 제공은 개인적으로 참 좋다!

목차

 

목차를 보다가, 랭체인까지 설명해주는 것을 보고는 깜짝 놀랐다.

 

사실 책 제목만 보고는 챗GPT를 이용한 프롬프트 수준의 내용들일 것이라고 기대했는데,

Copilot을 이용하는 부분과 Colab을 활용하는 부분들, 그리고 랭체인까지 설명해주는 것을 보고는 정말 깜짝 놀랐다.

랭체인

 

지은이가 마이크로스프트 소속이다 보니

Azure 환경을 이용한다던지, 아니면 GitHub의 codespaces를 이용한다던지 할 줄 알았는데

Colab에서 이렇게 예제들을 설명하는 것을 보고 감동 받았다.

duckduckgo

 

거기에다가

Bing 검색이 아니라 구글 검색을 언급하고, 예제는 duckduckgo를 이용하다니...

우와~ 정말 개발자 친화적이다!!!

 

 

그리고, 개인적으로 정말 좋아하는.... 풀컬러 책이다!!!

 

 

결론적으로,

SW개발자들이라면 한 번쯤 구매해서 읽어보면

책 값 이상으로 개발 효율성을 높일 수 있을만한 내용들을 담고있다고 생각한다.

 

 

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

반응형

Python Excel Deep Learning

딥러닝의 알고리즘 원리부터 파악하기

파이썬과 엑셀로 시작하는 딥러닝

표지

 

딥러닝과 파이썬은 쿵짝이 잘맞는 짝꿍같은 느낌인데, 왠지 엑셀은 어울리지 않는 느낌이 든다.

 

하지만, 딥러닝을 잘 생각해보면 테이블 형식의 데이터들과 수학이 바탕이 되어야 하고

그렇게 생각해보면 엑셀은 딥러닝에 잘 어울리는 도구일 수도 있겠다라는 생각이 든다.

 

어!? 이거 가스라이팅인가!? ^^

 

지은이

 

지은이 3명의 소개글을 읽고 공통점을 찾으셨다면~ 센스쟁이 !!!

그렇다!!! 인공지능 대학원 동문 3명이 모여서 책을 썼다!!!

 

초판

 

출간한지 얼마 안되는 따끈따끈한 New 책이다 !!!

 

서문

 

AI를 공부하는 모두가 Model Researcher일 필요는 없다.

하지만, 그렇다고 해서 딥러닝의 기본기를 배울 필요가 없는 것은 아니다.

 

인공지능을 공부했다라고 말하기 위해서는

Scikit-Learn, Tensorflow, Pytorch 등에서 제공하는 것을 그냥 가져다가 쓰기만 하는 것이 아니라

그 기본이 되는 원리에 대해서 한 번쯤은 파고들어본 경험은 있어야 한다고 생각한다.

 

일단, 책의 전체 내용을 간략히 살펴보자.

 

목차

 

크게 보면 "분류 문제 → CNN → RNN" 정도에 대해서 진행을 하게 되고

데이터 정규화 및 분할, 소프트맥스에 대해서도 설명을 해주고 있다.

 

차례

 

왠지 귀여운 느낌의 차례가 등장했다 ^^

 

조금 아쉬운 점은 ...

개인적인 취향일 수도 있지만 자고로 개발환경이라고 하면 리눅스(Linux)가 표준이지 않을까 한다!

특히 시장지배적 위치에 있는 우분투(Ununtu) 기준으로 개발환경 설명을 해줘야 하는데.... 없다!!!

 

어디까지나 개인적인 취향으로... Ubuntu 운영체제에서의 환경 구축은 다음과 같이 하면 된다.

 

1. Python 설치 및 가상 환경

  - 원하는 버전의 Python을 편하게 사용하기 위해서는 다음 링크를 참조해서 pyenv를 설치하자

    . 다양한 버전의 파이썬을 사용하려면 (pyenv)

  - 실습을 진행할 디렉토리로 이동 후 기본 환경을 맞춰보자

 

❯ cd /srv/workspace/excel-dl

pyenv local 3.8.10

❯ python -m venv .venv

❯ source .venv/bin/activate

 

python

 

2. Jupyter 설치

  - Jupyter Notebook 사용을 위해 jupyter 패키지를 설치하자

 

❯ pip install jupyter

 

  - 설치가 잘 되었는지 실행해보자

 

❯ jupyter notebook

 

jupyter notebook

 

  - 새로운 파일 생성은 책과 조금 다르기에 캡쳐한 화면으로 보여주겠다.

 

New - Notebook

 

ipykernel

 

이하 과정은 책을 보면서 따라가면 된다.

사실 위의 내용도 책의 내용과 별 차이 없다 ^^ 괜한 투정~!!!

 

책의 뒷부분에는 재미있는 것들이 부록으로 제공된다.

 

부록

 

Microsoft Excel 뿐만 아니라 `구글 스프레드시트`를 애정하는 분들을 위한 내용도 설명을 해주고 있다.

 

요즘 Pytorch에 비해 인기가 조금 시들해졌지만,

그래도 아직 그 명성을 떨치고 있는 Tensorflow를 사용하는 다양한 예제도 있다.

 

 

이 책의 가장 특징인 엑셀(Excel)을 사용하기 위한 패키지로 여기에서는 `xlwings`를 사용하고 있다.

 

xlwings

 

Jupyter Notebook에서 설치해서 사용하면 된다.

 

 

책을 보다가 깜짝 놀란 이미지가 있어서 잠시 공유 !!! ^^

 

영상 엑셀 출력

 

 

딥러닝을 공부하면서 정말 괴로운 부분이 바로 수학이다.

특히 미분 ... 어렸을 때 잘 공부해뒀어야 했는데 ... 뒤늦게 공부하려면 ... 정말 ... 짜증이 ... ^^

 

그런데, 컴퓨터를 사용하고 있으면서 그것도 프로그래밍을 하고 있으면서

미분을 컴퓨터에게 시키면 되지 왜 그것을 공부를 하고 있을까!?

 

기본적으로 컴퓨터는 ... 프로그래밍적으로 미분을 직접 푸는 것은 안된다.

(물론 불가능은 아니겠지만, 어렵다. 그리고 내가 원하는대로 나오는 것은 더더욱 어렵다)

 

그러면, 기울기를 구하기 위해 미분을 하려면 어떻게 될까!?

미분한 결과를 프로그래밍으로 구현해주면 된다.

 

미분

 

위에서 보이는 함수 중에서 `def f_prime(x):` 부분을 보면 알겠지만,

미분이 된 수식을 구현하고 있다.

 

뭐 그렇다.

 

 

이 책을 훑어보다보면 `응? 왜 굳이 Excel이 필요한거지?`라는 생각을 할 수도 있을 것이다.

사실 많은 강의와 서적에서는 Pandas/Numpy/Matplotlib 등으로 잘 설명해주고 있기 때문이다.

 

하지만, 직접 이 책을 따라하다보면 왜 엑셀을 사용하고 있는지 느낄 수 있을 것이다.

 

특히, Pandas/Numpy/Matplotlib 등을 이용해서 공부를 해보신 분이라면

엑셀을 통해서 중간에 어떻게 값들이 변해가는지 등을 눈으로 보면서 막혔던 것이 뚫리는 기분을 느낄 수도 있을 것이다.

 

 

예제 파일도 제공을 해주고 있으니 편하게 사용해보자.

  - http://infopub.co.kr/new/include/detail.asp?sku=06000248

 

http://infopub.co.kr/new/include/detail.asp?sku=06000248

 

GitHub로 샘플을 제공해주면 좀 더 좋았을 것 같은데

아쉽지만 공식 홈페이지를 통해 압축 파일을 내려받아야 한다.

용량은 2.7MB 정도이다.

 

 

책 제목에서도 나와있지만

딥러닝의 알고리즘 원리를 직접 손으로 하나씩 확인하고픈 사람들에게는 정말 가뭄의 단비같은 책이 될 수도 있다.

 

하지만, 응용 위주로 딥러닝을 공부했거나 하려고 하는 분들에게는 별 도움이 되지 않는 책이 될 것이다.

 

그리고, 나름 친절하게 설명하려고 노력은 했지만

딥러닝에 대해 비기너(Beginner)... 아직 한 번도 공부하지 않으신 분들은 따라하기에도 쉽지 않을 수 있다.

 

많은 공식이 나오는 것은 아니지만,

중간 중간 나오는 공식들이 어떤 의미인지 친절할 정도로 설명은 하지 않고 있기 때문이다.

(설명이 충분치 않은 것이 당연하다! 그걸 다 설명하려면 그것만으로도 책이 나올 것이다 ^^)

 

 

즉, 이 책을 추천하고픈 분들은 다음과 같다.

- 딥러닝 공부를 하고 있지만, 대체 GD는 뭐고 Softmax가 뭔지 원리가 궁금한 사람

- 중간 중간 단계에서 값들이 어떻게 변하는지 눈으로 확인하고 싶은 사람

- Tensorflow나 Pytorch에서 제공해주는 것만 사용하다가, 어떻게 구현된건지 궁금한 사람

 

 

(눈치 채셨겠지만 ... 같은 대학원 공부를 하고 있는 분들이 저자라서 ... 리뷰를 해봅니다만 ... 나름 솔직한 리뷰입니다 ^^)

 

이 포스팅은 제공 받은 서적으로 작성한 리뷰입니다.

 

반응형

+ Recent posts