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

 

 

개발자라면 누구나 알고 있을 "혼공" 시리즈.

 

혼자서도 공부할 수 있도록 잘 만들어진 책일 뿐만 아니라,

동영상 강의도 제공해주고 샘플 코드도 제공해주는 정말 혜자와 같은 교과서들이다.

 

그런데, 이제는 "혼공"이 아니라 "혼만" 시리즈가 나오고 있다.

 

"혼자 만들면서" 시리즈 !!!

그것도, "딥러닝" !!!

거기다가, "박해선"님 !!!

 

 

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

 

딥러닝은 CNN 부터 시작하는 것이 국롤이기에,

이 책 역시 '합성곱 신경망(CNN)'으로 Chapter 01 시작이다.

 

 

최근 트렌드는 LLM,

트랜스포머의 디코더 기반으로 만들어진 GPT 모델도 Chapter 05에서 알려주고 있다.

 

 

트랜스포머의 인코더와 디코더를 모두 사용하는 모델인

BART와 T5까지 마지막 챕터에서 언급해주고 있다.

 

 

이론이 아니라 직접 만들어 보면서 공부할 수 있는 책이라서 정말 마음에 들었다.

그렇다고 이론적인 내용이 없는 것도 아니다. 충분히 친절하게 이론에 대한 설명도 해주고 있다.

 

더더욱 이 책이 마음에 드는 것은 컬러 인쇄이다!!!

눈이 안아프게 빛 반사도 적은 종이 재질이다!!!

 

 

이와같은 "혼공/혼만" 시리즈 책을 정말 제대로 공부하기 위해서는

"혼공학습단"에 지원해서 맛있는 간식을 먹으며 많은 사람들과 함께 공부하는 것이다.

 

 

이번 14기 참여 기회를 놓쳤다면.... 다음 15기에 지원하면 된다 ^^

종종 있으니 꼭 기억했다가 참여하길 바란다.

 

"혼공/혼만" 시리즈 책들은 많이 있으니 관심있는 다른 책도 구매해서~~~ ^^

 

 

혼공학습단 활동을 열심히 하면 많은 것들이 생긴다 !!!

 

 

혼자 공부할 수 있는 책이지만,

혼자 하다 보면 의욕이 떨어지거나 작심삼일이 되기 쉬운 분들은

이런 활동을 통해서 동기부여를 받으면 좋지 않을까 한다.

 

 

화이팅!!!

반응형

 

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

 

"박해선"님의 명작 도서, "혼자 공부하는 머신러닝+딥러닝"의 "개정판"이 나왔다 !!!

 

AI 관련하여 공부를 했던 사람들이라면 아마도 모두 가지고 있을 책이 아닐까 싶은데,

물론 나도 기존 도서를 가지고 있어서 비교 사진을 찍어봤다.

 

동그라미도 하나 추가되었고, 페이지도 더 많아진 새로운 개정판이다.

그래서인지 정가도 2.6만원에서 3.2만원으로 인상되었다. ㅋㅋㅋ

 

 

초판 발행 뒤, 4-5년 정도가 지났으니 물가 인상을 고려하면 정가 인상에 대해서도 충분히 이해가 간다!

벌써 4-5년이 흘렀다니... 처음 이 책으로 공부했던 때가 어제 같은데... 

 

이 책의 장점은 머신러닝에서부터 딥러닝까지 전반적인 사항을 모두 담고 있다는 것이다.

 

 

책에서도 말해주다 싶이, 반드시 순차적으로 공부해야하는 것은 아니다.

 

머신러닝에 대해서 공부하고 딥러닝을 살펴보는 것이 도움이 되기는 하지만,

필수는 아니기에 과감히 점프하고 딥러닝을 공부하는 것도 나쁘지는 않다.

 

 

이 책의 초판이 나오는 시점에서는 Tensorflow가 많이 사용될 때라 괜찮았지만,

최근에는 대부분 Pytorch를 많이 사용하기에 개정판에서 파이토치에 대한 내용을 추가해 준 것은 정말 반갑다.

 

혼공 시리즈의 책답게 동영상 강의도 멋지게 제공을 해준다.

- https://www.youtube.com/playlist?list=PLJN246lAkhQihHwcbrZp9uuwgxQen5HS-

 

 

큰 변화가 없는 챕터의 경우에는 기존 동영상 강의를 재활용하셨을거라 생각했는데, 전부 새로 등록하신 것 같다! 와우!

 

깃허브에 친절하게도 주피터노트북 파일들을 모두 등록해주셨다.

- https://github.com/rickiepark/hg-mldl2

 

"박해선"님의 블로그를 참고하면 좋다. 정오표도 확인할 수 있다.

- https://tensorflow.blog/hg-mldl2/

 

 

개인적으로 처음에 공부할 때에 이 책을 보고선 좀 당황한 적이 있었다.

다른 곳에서 설명하는 것들과는 조금 다른식으로 접근하거나 설명하는 것들이 있어서였다.

 

그래서 잠시 이 책을 끊고(?) 이렇게 저렇게 시간이 흘러

"혼공학습단"을 통해 다시 이 책을 공부해 보고자 시작하게 되었는데 !!!

 

머신러닝이나 딥러닝을 조금 공부하고 다시 이 책을 봤더니 감탄을 할 수 밖에 없었다.

아! 이래서 박해선님이 이 부분을 이렇게 설명을 하셨구나!

 

혼자 공부할 수 있도록 잘 정리되고 친절한 설명이 되어 있는 책이지만,

사실 이 책의 일부 챕터만 가지고도 책 한권이 나올 수가 있을만큼

크고 방대한 내용을 다루는 책이 바로 이 "혼공머신"이다.

 

그렇기에 이 책을 제대로 공부하기 위해서는 좀 더 꼼꼼하게 살펴보는 것을 권해본다.

 

이 책에 대해서 서평을 한 마디로 남겨 본다면,

"머신러닝, 딥러닝"을 공부해보고 싶다면 무조건 추천해드립니다!!!

반응형

가족 여행 및 대학원 MT로 인해... 엄청난 지각 공부를 한다.

미리 하지 못했음에 대해 반성 !!!! 무릎 꿇고 반성 !!!

 

05-1 결정 트리 (Decision Tree)

- 로지스틱 회귀 (Logistic Regression)

- 결정 트리 (Decision Tree Classifier), 가지 치기(Prunning)

 

05-2 교차 검증과 그리드 서치

- 검증 세트 (validation)

- 교차 검증 (Cross Validation)

  . 분할기(Splitter)를 사용한 교차 검증 : StratifiedKFold

- 하이퍼파라미터 튜닝 (Hyperparameter Optimization)

  . 그리드 서치 (GridSearchCV)

  . 확률 분포 선택 : uniform, randint

  . 랜덤 서치 (RandomizedSearchCV)

 

05-3 트리의 앙상블 (Ensemble)

- 정형 데이터와 비정형 데이터

  . 텍스트/오디오/이미지/영상 등의 비정형 데이터는 주로 DL 에서 취급

- 랜덤 포레스트 (RandomForest)

- 엑스트라 트리 (ExtraTrees)

- 그래디언트 부스팅 (Gradient Boosting)

- 히스토그램 기반 그래디언트 부스팅 (Histogram Gradient Boosting)

- XGBoost vs LightGBM

 

 

 

 

기본 숙제 : 교차 검증을 그림으로 설명하기

 

추가 숙제 : 앙상블 모델 손 코딩

- 전체를 캡처하는 것은 무의미한 것 같아, 하단부 부분만 캡처 !!!

 

반응형

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

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

 

 

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

반응형

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

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

 

 

 

 

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

반응형

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

 

이번 공부는 여기까지~

반응형

+ Recent posts