데이터ㆍAI 시스템 아키텍트를 위한 실무 가이드
42,000원
중급
도서 소개
파이썬 기초 문법부터, 데이터 분석을 위한 다양한 실무예제까지 설명합니다!
이 책은 다양한 예제를 바탕으로 기본적인 파이썬 문법에서부터 실무에 필요한 데이터 분석 기법까지 상세히 설명하고 있습니다. 파이썬을 처음 배우는 분들, 파이썬의 기본 문법은 익혔으나 활용 방법을 모르는 분들, 실무에 바로 적용할 수 있는 데이터 처리 방법을 익히고 싶은 분들에게 좋은 기본서가 될 것입니다.
★ 이 책에서 다루는 내용 ★
- 아나콘다(Anaconda)를 활용한 파이썬 개발 환경 설치 및 기본 문법
- 문자열 데이터 처리(분리, 삭제, 연결, 찾기, 바꾸기)
- 객체와 클래스, 자주 사용하는 내장 모듈(난수, 날짜, 달력)
- NumPy와 Pandas를 이용한 구조적 데이터 처리 및 분석
- Matplotlib을 이용한 데이터 시각화(다양한 그래프 출력, 꾸미기, 한글 폰트 사용)
- 엑셀 파일 다루기(데이터 읽기, 쓰기, 통합, 계산, 시각화)
- Requests와 Beautiful Soup를 이용한 웹 데이터(HTML 파일) 수집 및 처리(웹 스크레이핑)
- 웹 API를 이용한 데이터 요청 및 응답 데이터(JSON 및 XML 형식) 처리
- 트위터에 트윗을 작성하고 메시지 가져오기, 정부의 공개 데이터 획득을 위한 Open API 활용
도서 상세 이미지

저자 소개
최은석
GIST에서 박사학위를 받고 삼성전자에서 센서 기반 인터랙션 설계, 센서 신호 처리, 임베디드 시스템 S/W 관련 업무를 하고 있다. 항상 좀 더 좋은 방법이 없을까 고민하며 새로운 아이디어를 제시하고 구현하는 과정을 즐긴다. 파이썬을 이용한 업무 자동화, 데이터 처리 및 분석, 마이크로컨트롤러 응용에 관심이 많으며 주변 사람들에게 파이썬의 편리함을 알리고 있다.
목차
- ▣ 01장: 파이썬 프로그래밍 언어
- 1.1 왜 프로그래밍 언어를 배워야 하나요?
- 1.2 프로그래밍 언어란?
- 1.3 왜 파이썬인가요?
- ▣ 02장: 파이썬 시작하기
- 2.1 파이썬 개발 환경 설치
- 아나콘다 배포판 내려받기
- 아나콘다 설치
- 2.2 첫 번째 코드 작성하기
- 2.3 코드 저장 및 실행
- 파이썬 코드 저장
- 파이썬 코드 실행
- 2.4 통합 개발 환경에서 코딩하기
- 통합 개발 환경의 필요성
- Spyder 실행 및 설정
- Spyder 에디터에서 코드 작성
- 2.5 주피터 노트북에서 코딩하기
- 주피터 노트북 실행
- 주피터 노트북 사용법
- 주피터 노트북에서 코드 작성
- 2.6 정리
- 2.1 파이썬 개발 환경 설치
- ▣ 03장: 파이썬을 계산기처럼 이용하기
- 3.1 간단한 사칙 연산
- 3.2 거듭 제곱과 나머지
- 3.3 과학적 표기법
- 3.4 진수 표현과 변환
- 3.5 논리 연산 및 비교 연산
- 3.6 정리
- ▣ 04장: 변수와 자료형
- 4.1 변수
- 4.2 문자열
- 문자열 만들기
- 문자열 다루기
- 4.3 리스트
- 리스트 만들기
- 리스트 다루기
- 4.4 튜플
- 튜플 만들기
- 튜플 다루기
- 4.5 세트
- 세트 만들기
- 세트의 교집합, 합집합, 차집합 구하기
- 리스트, 튜플, 세트 간 타입 변환
- 4.6 딕셔너리
- 딕셔너리 만들기
- 딕셔너리 다루기
- 4.7 정리
- ▣ 05장: 제어문
- 5.1 조건에 따라 분기하는 if 문
- 단일 조건에 따른 분기(if)
- 단일 조건 및 그 외 조건에 따른 분기(i f ~ else)
- 여러 조건에 따른 분기(if ~ elif ~ else)
- 중첩 조건에 따른 분기
- 5.2 지정된 범위만큼 반복하는 for 문
- 반복문의 필요성
- for 문의 구조
- 반복 범위 지정
- 중첩 for 문
- 여러 개의 리스트 다루기
- 5.3 조건에 따라 반복하는 while 문
- while 문의 구조
- 무한 반복 while 문
- 5.4 반복문을 제어하는 break와 continue
- 반복문을 빠져나오는 break
- 다음 반복을 실행하는 continue
- 5.5 간단하게 반복하는 한 줄 for 문
- 리스트 컴프리헨션의 기본 구조
- 조건문을 포함한 리스트 컴프리헨션
- 5.6 정리
- 5.1 조건에 따라 분기하는 if 문
- ▣ 06장: 입력과 출력
- 6.1 화면 출력
- 기본 출력
- 형식 지정 출력
- 6.2 키보드 입력
- 6.3 파일 읽고 쓰기
- 파일 열기
- 파일 쓰기
- 파일 읽기
- 6.4 반복문을 이용해 파일 읽고 쓰기
- 파일에 문자열 한 줄씩 쓰기
- 파일에서 문자열 한 줄씩 읽기
- 6.5 with 문을 활용해 파일 읽고 쓰기
- with 문의 구조
- with 문의 활용
- 6.6 정리
- 6.1 화면 출력
- ▣ 07장: 함수
- 7.1 함수 정의와 호출
- 함수의 기본 구조
- 인자도 반환 값도 없는 함수
- 인자는 있으나 반환 값이 없는 함수
- 인자도 있고 반환 값도 있는 함수
- 7.2 변수의 유효 범위
- 7.3 람다(lambda) 함수
- 7.4 유용한 내장 함수
- 형 변환 함수
- bool 함수
- 최솟값과 최댓값을 구하는 함수
- 절댓값과 전체 합을 구하는 함수
- 항목의 개수를 구하는 함수
- 내장 함수의 활용
- 7.5 정리
- 7.1 함수 정의와 호출
- ▣ 08장: 객체와 클래스
- 8.1 클래스 선언과 객체 생성
- 객체란?
- 클래스 선언
- 객체 생성 및 활용
- 객체 초기화
- 8.2 클래스를 구성하는 변수와 함수
- 클래스에서 사용하는 변수
- 클래스에서 사용하는 함수
- 8.3 객체와 클래스를 사용하는 이유
- 8.4 클래스 상속
- 8.5 정리
- 8.1 클래스 선언과 객체 생성
- ▣ 09장: 문자열과 텍스트 파일 데이터 다루기
- 9.1 문자열 다루기
- 문자열 분리하기
- 필요없는 문자열 삭제하기
- 문자열 연결하기
- 문자열 찾기
- 문자열 바꾸기
- 문자열의 구성 확인하기
- 대소문자로 변경하기
- 데이터 파일 준비 및 읽기
- 9.2 텍스트 파일의 데이터를 읽고 처리하기
- 파일에서 읽은 문자열 데이터 처리
- 9.3 정리
- 9.1 문자열 다루기
- ▣ 10장: 모듈
- 10.1 모듈을 사용하는 이유
- 10.2 모듈 생성 및 호출
- 모듈 만들기
- 모듈 불러오기
- 모듈을 불러오는 다른 형식
- 10.3 모듈을 직접 실행하는 경우와 임포트한 후 실행하는 경우 구분하기
- 10.4 내장 모듈
- 난수 발생 모듈
- 날짜 및 시간 관련 처리 모듈
- 달력 생성 및 처리 모듈
- 10.5 패키지
- 패키지의 구조
- 패키지 만들기
- 패키지 사용하기
- 10.6 정리
- ▣ 11장: 데이터 분석을 위한 패키지
- 11.1 배열 데이터를 효과적으로 다루는 NumPy
- 배열 생성하기
- 배열의 연산
- 배열의 인덱싱과 슬라이싱
- 11.2 구조적 데이터 표시와 처리에 강한 pandas
- 구조적 데이터 생성하기
- 데이터 연산
- 데이터를 원하는 대로 출력하기
- 데이터 통합하기
- 데이터 파일을 읽고 쓰기
- 11.3 정리
- 11.1 배열 데이터를 효과적으로 다루는 NumPy
- ▣ 12장: 데이터 시각화
- 12.1 matplotlib로 그래프 그리기
- 선 그래프
- 그래프 꾸미기
- 산점도
- 막대 그래프
- 히스토그램
- 파이 그래프
- 그래프 저장하기
- 12.2 pandas로 그래프 그리기
- pandas의 그래프 구조
- pandas의 선 그래프
- pandas의 산점도
- pandas의 막대 그래프
- pandas의 히스토그램
- pandas의 파이 그래프
- 12.3 정리
- 12.1 matplotlib로 그래프 그리기
- ▣ 13장: 엑셀 파일 다루기
- 13.1 엑셀 파일을 읽고 쓰기
- 엑셀 파일의 데이터 읽기
- 데이터를 엑셀 파일로 쓰기
- 13.2 엑셀 파일 통합하기
- 효율적인 데이터 처리를 위한 엑셀 데이터 구조
- 여러 개의 엑셀 파일 데이터를 통합하기
- 통합 결과를 엑셀 파일로 저장하기
- 13.3 엑셀 파일로 읽어온 데이터 다루기
- 데이터를 추가하고 변경하기
- 여러 개의 엑셀 파일에서 데이터 수정하기
- 엑셀의 필터 기능 수행하기
- 조건을 설정해 원하는 행만 선택하기
- 원하는 열만 선택하기
- 엑셀 데이터 계산하기
- 13.4 엑셀 데이터의 시각화
- 그래프를 엑셀 파일에 넣기
- 엑셀 차트 만들기
- 13.5 정리
- 13.1 엑셀 파일을 읽고 쓰기
- ▣ 14장: 웹 스크레이핑
- 14.1 웹 브라우저로 웹 사이트 접속하기
- 하나의 웹 사이트에 접속하기
- 여러 개의 웹 사이트에 접속하기
- 14.2 웹 스크레이핑을 위한 기본 지식
- 데이터의 요청과 응답 과정
- HTML의 기본 구조
- 웹 페이지의 HTML 소스 갖고 오기
- HTML 소스코드를 분석하고 처리하기
- 14.3 웹 사이트에서 데이터 가져오기
- 웹 스크레이핑 시 주의 사항
- 순위 데이터를 가져오기
- 웹 페이지에서 이미지 가져오기
- 14.4 정리
- 14.1 웹 브라우저로 웹 사이트 접속하기
- ▣ 15장: 웹 API
- 15.1 웹 API의 이해
- 웹 API의 데이터 획득 과정
- 웹 API의 인증 방식
- 응답 데이터의 형식 및 처리
- 웹 사이트 주소에 부가 정보 추가하기
- 15.2 API 키를 사용하지 않고 데이터 가져오기
- 국제 우주 정거장의 정보 가져오기
- 국가 정보 가져오기
- 15.3 트위터에 메시지 작성하고 가져오기
- API 키 및 접속 토큰 생성
- Tweepy 설치 및 인증
- 트윗 작성하기
- 타임라인에서 메시지 가져오기
- 키워드를 지정해 데이터 가져오기
- 15.4 정부의 공공 데이터 가져오기
- 회원 가입 및 서비스 신청
- 주소 및 우편번호 가져오기
- 날씨 정보 가져오기
- 대기 오염 정보 가져오기
- 15.5 정리
- 15.1 웹 API의 이해
예제 코드
정오표
아나콘다 다운로드 안내
본문에서 안내하는 아나콘다 다운로드 페이지 URL(http://continuum.io/downloads)이 아래 URL로 변경됐습니다. 또한 현재(2019년 2월) 아나콘다를 내려받으면 파이썬 3.7 버전이 설치됩니다.
-
5쪽, 본문 밑에서 4번째 줄
아나콘다 다운로드 페이지(
http://continuum.io/downloads)를==>
아나콘다 다운로드 페이지(
https://www.anaconda.com/distribution/#download-section)를 -
145쪽, 페이지 상단 예제 코드의 2번째 줄
count = 0; # 클래스 변수 생성 및 초기화==>
count = 0 # 클래스 변수 생성 및 초기화 -
148쪽, 4번째 줄
클래스나 클래스 변수에
==>
인스턴스 메서드나 인스턴스 변수에
-
156쪽, 본문 4번째 줄
초기화 함수인 'Bicycle.init(self,
size, numWheel, color)'를 이용했고==>
초기화 함수인 'Bicycle.init(self,
wheel_size, color)'를 이용했고 -
166쪽, 본문 2번째 줄
여기서 시퀀스는 리스트,
튜플, 세트와같이 여러 데이터를 담고 있는 나열형 데이터입니다.==>
여기서 시퀀스는 리스트나
튜플과같이 여러 데이터를순서대로담고 있는 나열형 데이터입니다. -
196쪽, 본문 밑에서 8번째 줄
다음은 시퀀스(
리스트, 튜플, 세트) 데이터에서==>
다음은 시퀀스(
리스트, 튜플) 데이터에서 -
196쪽, 본문 밑에서 3번째 줄
이 함수는 시퀀스(
리스트, 튜플, 세트)로==>
이 함수는 시퀀스(
리스트, 튜플)로 -
197쪽, 본문 6번째 줄
먼저 'import
datatime'으로datatime모듈을 불러와야 합니다.==>
먼저 'import
datetime'으로datetime모듈을 불러와야 합니다. -
197쪽, 본문 7번째 줄
datatime모듈을 불러온 후에는==>
datetime모듈을 불러온 후에는 -
197쪽, 하단 예제 코드
import datatime ... datetime_obj = datetime.datatime(year, month, day, hour, minute, second)==>
import datetime ... datetime_obj = datetime.datetime(year, month, day, hour, minute, second) -
198쪽, 상단 예제 첫 번째 줄
import datatime==>
import datetime -
199쪽, 본문 밑에서 4번째 줄
datatime모듈의 date 클래스에는==>
datetime모듈의 date 클래스에는 -
202쪽, 본문 2번째 줄
앞에서는
datatime모듈의 객체를==>
앞에서는
datetime모듈의 객체를 -
220쪽, 10번째 줄
모두
1을 갖는 1차원 배열을 만들려면 np.zeros(n)을, 모든 원소가1인==>
모두
0을 갖는 1차원 배열을 만들려면 np.zeros(n)을, 모든 원소가0인 -
223쪽, 페이지 하단 마지막 예제(맨 마지막 줄 변경)
In: num_f1 = np.array([10, 21, 0.549, 4.75, 5.98]) num_i1 = num_f1.astype(int) num_f1==>
In: num_f1 = np.array([10, 21, 0.549, 4.75, 5.98]) num_i1 = num_f1.astype(int) num_i1 -
230쪽, '배열의 인덱싱과 슬라이싱' 항의 3번째 줄
배열의 위치나 조건을 지정해 배열의
원소선택하는 것을==>
배열의 위치나 조건을 지정해 배열의
원소를선택하는 것을 -
231쪽, 본문 4번째 줄
1차원 배열에서
여려개의 원소를==>
1차원 배열에서
여러개의 원소를 -
239쪽, 페이지 하단 마지막 예제(들여쓰기 수정)
In: import numpy as np s3 = pd.Series([np.nan,10,30]) s3==>
In: import numpy as np s3 = pd.Series([np.nan,10,30]) s3 -
267쪽, 페이지 중간 두 번째 예제(들여쓰기 수정)
In: df2 = pd.DataFrame({'Class1': [87, 89], 'Class2': [85, 90]}) df2==>
In: df2 = pd.DataFrame({'Class1': [87, 89], 'Class2': [85, 90]}) df2 -
280쪽, 두 번째 예제(들여쓰기 수정)
In: df_WH['BMI'] = bmi df_WH==>
In: df_WH['BMI'] = bmi df_WH -
303쪽, 페이지 중간 예제(들여쓰기 수정)
In: plt.plot(x,y) plt.xlabel('X-axis') plt.ylabel('Y-axis') plt.title('Graph title') plt.grid(True) # 'plt.grid()'도 가능==>
In: plt.plot(x,y) plt.xlabel('X-axis') plt.ylabel('Y-axis') plt.title('Graph title') plt.grid(True) # 'plt.grid()'도 가능 -
304쪽, 페이지 중간 예제(들여쓰기 수정)
In: import numpy as np x = np.arange(0, 5, 1) y1 = x y2 = x + 1 y3 = x + 2 y4 = x + 3 plt.plot(x, y1, '>--r', x, y2, 's-g', x, y3, 'd:b', x, y4, '-.Xc') plt.legend(['data1', 'data2', 'data3', 'data4']) plt.show()==>
In: import numpy as np x = np.arange(0, 5, 1) y1 = x y2 = x + 1 y3 = x + 2 y4 = x + 3 plt.plot(x, y1, '>--r', x, y2, 's-g', x, y3, 'd:b', x, y4, '-.Xc') plt.legend(['data1', 'data2', 'data3', 'data4']) plt.show() -
400쪽, 페이지 중간 예제(들여쓰기 수정)
In: %%writefile C:/myPyCode/HTML_example2.html <!doctype html> <html> <head> <meta charset="utf-8"> <title>이것은 HTML 예제</title> </head> <body> <h1>출간된 책 정보</h1> <p>이해가 쏙쏙 되는 파이썬</p> <p>홍길동</p> <p>위키북스 출판사</p> <p>2018</p> </body> </html>==>
In: %%writefile C:/myPyCode/HTML_example2.html <!doctype html> <html> <head> <meta charset="utf-8"> <title>이것은 HTML 예제</title> </head> <body> <h1>출간된 책 정보</h1> <p>이해가 쏙쏙 되는 파이썬</p> <p>홍길동</p> <p>위키북스 출판사</p> <p>2018</p> </body> </html> -
406쪽, 페이지 하단 예제(들여쓰기 수정)
In: from bs4 import BeautifulSoup # 테스트용 HTML 코드 html2 = """ <html> <head> <title>작품과 작가 모음</title> </head> <body> <h1>책 정보</h1> <p id="book_title">토지</p> <p id="author">박경리</p> <p id="book_title">태백산맥</p> <p id="author">조정래</p> <p id="book_title">감옥으로부터의 사색</p> <p id="author">신영복</p> </body>==>
In: from bs4 import BeautifulSoup # 테스트용 HTML 코드 html2 = """ <html> <head> <title>작품과 작가 모음</title> </head> <body> <h1>책 정보</h1> <p id="book_title">토지</p> <p id="author">박경리</p> <p id="book_title">태백산맥</p> <p id="author">조정래</p> <p id="book_title">감옥으로부터의 사색</p> <p id="author">신영복</p> </body> -
411쪽, 페이지 중앙 예제 코드의 밑에서 4번째 줄
<a href="http://www.daum.net" class="portal" id="danum">다음</a> <br>==>
<a href="http://www.daum.net" class="portal" id="daum">다음</a> <br> -
412쪽, 첫 번째 예제 코드 출력 결과의 3번째 줄
<a class="portal" href="http://www.daum.net" id="danum">다음</a>,==>
<a class="portal" href="http://www.daum.net" id="daum">다음</a>, -
412쪽, 두 번째 예제 코드 출력 결과의 2번째 줄
<a class="portal" href="http://www.daum.net" id="danum">다음</a>]==>
<a class="portal" href="http://www.daum.net" id="daum">다음</a>] -
414쪽, 첫 번째 예제 코드 출력 결과의 3번째 줄
<a class="portal" href="http://www.daum.net" id="danum">다음</a>,==>
<a class="portal" href="http://www.daum.net" id="daum">다음</a>, -
414쪽, 두 번째 예제 코드 출력 결과의 2번째 줄
<a class="portal" href="http://www.daum.net" id="danum">다음</a>]==>
<a class="portal" href="http://www.daum.net" id="daum">다음</a>] -
415쪽, 페이지 하단 예제(들여쓰기 수정)
In: %%writefile C:/myPyCode/br_example_constitution.html <!doctype html> <html> <head> <meta charset="utf-8"> <title>줄 바꿈 테스트 예제</title> </head> <body> <p id="title"><b>대한민국헌법</b></p> <p id="content">제1조 <br/>①대한민국은 민주공화국이다.<br/>②대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다.</p> <p id="content">제2조 <br/>①대한민국의 국민이 되는 요건은 법률로 정한다.<br/>②국가는 법률이 정하는 바에 의하여 재외국민을 보호할 의무를 진다.</p> </body> </html>==>
In: %%writefile C:/myPyCode/br_example_constitution.html <!doctype html> <html> <head> <meta charset="utf-8"> <title>줄 바꿈 테스트 예제</title> </head> <body> <p id="title"><b>대한민국헌법</b></p> <p id="content">제1조 <br/>①대한민국은 민주공화국이다.<br/>②대한민국의 주권은 국민에게 있고, 모든 권력은 국민으로부터 나온다.</p> <p id="content">제2조 <br/>①대한민국의 국민이 되는 요건은 법률로 정한다.<br/>②국가는 법률이 정하는 바에 의하여 재외국민을 보호할 의무를 진다.</p> </body> </html> -
437쪽, 페이지 상단 예제 코드를 다음 코드로 수정
return music_titles, music_artists # 노래 제목과 아티스트를 저장할 파일 이름을 폴더와 함께 지정 file_name = 'C:/myPyCode/data/NaverMusicTop100.txt' f = open(file_name,'w') # 파일 열기 # 각 page에는 50개의 노래 제목과 아티스트가 추출됨 for page in range(2): naver_music_url_page = naver_music_url + str(page+1) # page URL naver_music_titles, naver_music_artists = naver_music(naver_music_url_page) # 추출된 노래 제목과 아티스트를 파일에 저장 for k in range(len(naver_music_titles)): f.write("{0:2d}: {1}/{2}\n".format(page*50 + k+1, naver_music_titles[k], naver_music_artists[k])) f.close() # 파일 닫기 glob.glob(file_name) # 생성된 파일 확인 -
442쪽, 페이지 상단 예제 코드의 1번째 줄
In: # 이미지 데이터를 100000바이트씩 나눠서 내려받고 파일에 순차적으로 저장==>
In: # 이미지 데이터를 1000000바이트씩 나눠서 내려받고 파일에 순차적으로 저장 -
443쪽, 예제 코드의 1~2번째 줄
url = 'https://www.python.org/static/img/python-logo.png' image_file_name = os.path.basename(url)==>
url = 'https://www.python.org/static/img/python-logo.png' html_image = requests.get(url) image_file_name = os.path.basename(url) -
443쪽, 예제 코드의 밑에서 5번째 줄
# 이미지 데이터를 100000 바이트씩 나눠서 저장==>
# 이미지 데이터를 1000000 바이트씩 나눠서 저장 -
447쪽, 페이지 상단 예제 코드의 밑에서 5번째 줄
# 이미지 데이터를 100000 바이트씩 나눠서 저장하는 방법==>
# 이미지 데이터를 1000000 바이트씩 나눠서 저장하는 방법 -
448쪽, 예제 코드의 19번째 줄
chunk_size = 1000000 # 이미지 데이터를 100000바이트씩 나눠서 저장==>
chunk_size = 1000000 # 이미지 데이터를 1000000바이트씩 나눠서 저장 -
450쪽, 페이지 상단 예제(들여쓰기 수정)
In: num_of_download_image = len(pixabay_image_urls) num_of_download_image==>
In: num_of_download_image = len(pixabay_image_urls) num_of_download_image