파이썬 기초 문법부터, 데이터 분석을 위한 다양한 실무예제까지 설명합니다!
이 책은 다양한 예제를 바탕으로 기본적인 파이썬 문법에서부터 실무에 필요한 데이터 분석 기법까지 상세히 설명하고 있습니다. 파이썬을 처음 배우는 분들, 파이썬의 기본 문법은 익혔으나 활용 방법을 모르는 분들, 실무에 바로 적용할 수 있는 데이터 처리 방법을 익히고 싶은 분들에게 좋은 기본서가 될 것입니다.
★ 이 책에서 다루는 내용 ★
- 아나콘다(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