파이썬으로 풀어보는 수학 [코드로 통계, 확률, 미적분과 같은 다양한 수학 탐험하기]
- 원서명Doing Math with Python: Use Programming to Explore Algebra, Statistics, Calculus, and More! (ISBN 9781593276409)
- 지은이아미트 사하(Amit Saha)
- 옮긴이정사범
- ISBN : 9788960778689
- 25,000원
- 2016년 06월 28일 펴냄
- 페이퍼백 | 328쪽 | 188*235mm
- 시리즈 : 프로그래밍 언어
책 소개
요약
파이썬을 이용해 고등학교 수준의 다양한 수학 문제를 풀어보는 책이다. 고등학교 수준의 통계, 기하학, 확률, 미적분과 관련된 다양한 수학 문제를 파이썬이라는 프로그래밍 언어를 이용해 해결하는 방법을 살펴본다. 이와 같은 과정을 경험하면서 자연스럽게 수학과 컴퓨터 과학에 대한 공부를 할 수 있다. 데이터에 대한 통계값을 계산하고, 이를 그래프, 막대차트, 산점도로 가시화할 수 있으며, 동전 던지기, 주사위 던지기 등과 같은 놀이를 통해 확률 이론과 프로그램을 이해할 수 있다. 또한, 파이썬의 기호 수학 함수를 사용해 대수학 문제를 풀거나, 기하학 형상을 그려보며 다양한 프랙털을 만들어 볼 수 있고, 미분과 적분함수를 알아내는 프로그램도 만들어 볼 수 있다.
이 책에서 다루는 내용
■ 통계로 데이터를 설명하고 그래프, 막대 그래프, 산점도로 가시화하는 방법
■ 동전 던지기, 주사위 던지기, 확률 게임에 대한 프로그램으로 살펴보는 집합 이론과 확률
■ 파이썬 기호 수학 함수를 이용한 대수학 문제 풀이
■ 기하학적 형상을 그려보고, 반즐리 펀(Barnsley fern), 시어핀스키(Sierpinski) 삼각형, 만델브로집합과 같은 다양한 프랙털 제작
■ 미분과 적분함수 계산 프로그램을 작성
이 책의 대상 독자
프로그래밍을 배우는 사람이라면 이 책에서 컴퓨터로 문제를 해결하기 위한 설명하는 방법을 좋아하게 될 것이다. 이와 같은 방법으로 여러분이 학습자를 가르친다면 이 책은 때로는 추상적인 컴퓨터 과학을 뛰어넘어 프로그래밍 기술의 적용 방법을 설명하는 데 유용하게 사용할 수도 있을 것이다.
이 책은 독자가 파이썬 3을 이용하며 파이썬 프로그래밍의 기초를 알고 있다고 가정한다. 구체적으로 함수와 함수 인자, 파이썬 클래스와 클래스 객체, 루프의 개념을 이해하고 있다고 가정한다. 부록 B는 프로그램에서 이용한 다른 파이썬 주제의 일부를 다룬다. 하지만 이 책은 추가 주제에 대한 지식까지 바라지는 않는다. 만약 파이썬에 대한 많은 내용을 알고 싶다면 『Python for Kids by Jason Briggs』(Nostarch Press, 2013)를 읽어볼 것을 추천한다.
이 책의 구성
1장, ‘숫자 연산’에서는 기초 수학 연산으로 시작해 점차 높은 수학 노하우가 필요한 주제를 설명한다.
2장, ‘그래프로 데이터 가시화’에서는 맷플롯립(matplotlib) 라이브러리를 이용해 데이터 셋에서 그래프를 만드는 방법을 설명한다.
3장, ‘통계값을 이용한 데이터 설명’에서는 데이터 셋을 처리하는 방법을 계속 설명하는데, 기초 통계 개념인 평균, 중위수, 최빈수, 데이터셋의 변수들을 대상으로 상관관계를 알아본다. 여러분은 데이터 셋을 배포하기 위해 잘 알려진 파일 포맷인 csv 파일에서 데이터를 불러와 처리하는 방법을 설명한다.
4장, ‘SYMPY를 이용한 대수와 부호 수학’에서는 SymPy 라이브러리를 이용해 부호 수학 (Symbolic Math)을 살펴본다. 방정식 해결과 같은 좀 더 복잡한 문제를 소개하기 전에 대수(Algebra) 표현식을 표현하고 이를 다루는 기초를 알아본다.
5장, ‘집합과 확률 다루기’에서는 수학 집합을 표현하는 방법과 기초 이산 확률에 대해 설명한다. 일양 및 비일양 랜덤사건을 시뮬레이션하는 방법도 알아본다.
6장, ‘기하학적 형상과 프렉탈 그리기’에서는 맷플롯립을 이용해 기하학적 형상과 프렉탈을 그리고 동영상 그림을 만드는 방법을 알아본다.
7장, ‘미적분 문제 풀기’에서는 파이썬 표준 라이브러리와 SymPy에서 사용 가능한 수학 함수를 설명하고 미분 문제를 해결하는 방법을 알아본다.
부록A, ‘소프트웨어 설치’에서는 마이크로소프트 윈도우, 리눅스, 맥 OS x에서 파이썬 3, 맷플롯립, SymPy를 설치하는 방법을 설명한다.
부록B, ‘파이썬 주제 소개’에서는 초보자에게 도움이 되는 몇 가지 파이썬 주제를 살펴본다.
목차
목차
- 1장 숫자•연산
- 기초•수학 연산
- 라벨: 이름을 숫자에 부착시키기
- 다른 종류의 숫자
- 분수 계산
- 복소수
- 사용자 입력 가져오기
- 예외와 유효하지 않은 입력값 처리
- 입력값으로 분수와 복소수
- 수리적 연산을 수행하는 프로그램 작성
- 정수 팩터 계산
- 곱 테이블 생성
- 이차방정식의 근 구하기
- 프로그래밍 연습
- #1: 짝수-홀수 자판기
- #2: 개선된 곱 테이블 생성
- #3: 개선된 단위 변환
- #4: 분수 계산기
- #5: 사용자에게 Exit(종료하기) 권한 부여
- 2장 그래프로 데이터 가시화
- 카르테지안 좌표평면의 이해
- 리스트와 튜플을 이용한 작업
- 리스트나 튜플에 대한 실행 반복
- 맷플롯립을 이용한 그래프 생성
- 그래프에 점 표시
- 뉴욕시의 연간 평균 온도를 그래프로 표시
- 뉴욕시의 월간 온도 비교
- 그래프 개인화
- 그래프 저장
- 수식으로 그래프 그리기
- 만유인력에 대한 뉴턴의 법칙
- 포물선 운동
- 학습 내용
- 프로그래밍 연습
- #2: 이차방정식을 그림으로 탐색해보기
- #3: 투척 궤적 비교 프로그램 개선
- #4: 비용 가시화
- #5: 피보나치 순열과 황금비 간의 관계 탐색
- 3장 통계값을 이용한 데이터 설명
- 평균 계산
- 중위수 계산
- 최빈수를 계산하고 빈도 테이블 생성
- 가장 공통적인 요소 알아내기
- 최빈값 찾기
- 빈도 테이블 생성
- 산포정도 측정
- 숫자 집합의 범위 알아내기
- 분산과 표준편차 계산
- 두 데이터 집합 간 상관관계 계산
- 상관계수 계산
- 고등학교 성적 등급과 대학입학시험 성적
- 산점도
- 파일에서 데이터 읽기
- 텍스트 파일에서 데이터 읽기
- CSV 파일에서 데이터 읽어오기
- 학습 내용
- 프로그래밍 연습
- #1: 상관계수 계산 문제 개선
- #2: 통계값 계산기
- #3: 다른 csv 데이터로 테스트
- #4: 퍼센트 위치 계산
- #5: 그룹화한 빈도 테이블 생성
- 4장 SYMPY를 이용한 대수(Algebra)와 부호(Symbolic Math) 수학
- 부호와 부호 연산 정의
- 수식 계산
- 수식을 요소화하고 전개
- 보기 좋게 출력
- 값으로 대체
- 문자열을 수식으로 변환
- 수식 곱하기
- 방정식 풀기
- 이차방정식 풀기
- 다른 표시로 되어 있는 한 개 변수에 대한 해 계산
- 선형 방정식 시스템 풀기
- SymPy를 사용해 그래프 그리기
- 사용자가 입력한 수식을 그래프로 그리기
- 여러 함수 그래프 그리기
- 학습 내용
- 프로그래밍 연습
- #1: 팩터 파인더
- #2: 그래픽을 이용한 방정식 풀기
- #3: 수열합 계산
- #4: 단일 변수의 부동식 풀기
- 5장 집합과 확률 다루기
- 집합은 무엇인가?
- 집합 생성
- 부분집합, 초집합, 파워집합
- 집합 연산
- 확률
- 사건A나 사건B의 확률
- 사건A와 사건B의 확률
- 랜덤숫자 생성
- 비일양 랜덤숫자
- 학습 내용
- 프로그래밍 연습
- #1: 집합 간의 관계를 가시화하기 위해 벤다이어그램 사용
- #2: 대수의 법칙
- #3: 돈이 떨어지기 전에 토스 시도 횟수는?
- #4: 카드뭉치 섞기
- #5: 원의 면적 추정
- 집합은 무엇인가?
- 6장 기하학적 형상과 프렉탈 그리기
- 맷플롯립의 패치로 기하학적 형상 그리기
- 원 그리기
- 움직이는 그림 만들기
- 투사물의 포물선 애니메이션
- 프렉탈 그리기
- 평면상의 점 변환
- Barnsley 고사리 그리기
- 학습 내용
- 프로그래밍 연습
- #1 : 사각형내에 원을 포함시키기
- #2 : Sierpinski 삼각형 그리기
- #3 : Henon의 함수 탐색
- #4 : 만델브로트(Mandelbrot) 집합 그리기
- 맷플롯립의 패치로 기하학적 형상 그리기
- 7장 미적분 문제 풀기
- 함수란 무엇인가?
- 함수의 도메인과 범위
- 일반적인 수학 함수에 대한 개요
- SymPy의 가정
- 함수의 극한 계산기
- 연속 복리
- 실시간 변화율
- 함수의 미분 계산
- 미분 계산기
- 편미분의 계산
- 고차 미분과 최대, 최소값 구하기
- 그레디언트 상승을 이용해 전역 최대값 알아내기
- 그레디언트 상승에 대한 제네릭 프로그램
- 초기값에 대한 경고
- 단계 크기와 입실론의 역할
- 함수의 적분 계산
- 확률밀도함수
- 학습 내용
- 프로그래밍 연습
- #1: 한 점에서 함수의 연속 검증
- #2: 그레디언트 하강 구현
- #3: 두 곡선 간 면적
- #4: 곡선 길이 계산
- 함수란 무엇인가?
- 후기
- 다음에 탐색해볼 일들
- 프로젝트 율러
- 파이썬 문서
- 참고 문헌
- 참고 사이트
- 결론
- 다음에 탐색해볼 일들
- 부록A 소프트웨어 설치
- 마이크로 소프트 윈도우
- SymPy업데이트
- matplotlib-venn 설치
- Python Shell 시작
- 리눅스
- SymPy 업데이트
- matplotlib-venn 설치
- 파이썬 셸 시작
- 맥 OS X
- SymPy업데이트
- matplotlib-venn 설치
- 파이썬 셸 시작
- 마이크로 소프트 윈도우
- 부록B 파이썬 주제 소개
- If name ==’ main ’
- 리스트 컴프리헨션
- 딕셔너리 데이터 구조
- 다중 리턴값
- 예외 처리
- 다중 예외 유형 설정
- else블록
- 파이썬에서 파일 읽기
- 한번에 모든 행 읽기
- 입력으로 파일명 설정
- 파일을 읽을 때 오류 다루기
- 코드 재사용
도서 오류 신고
정오표
정오표
[p.26 : 본문 5행]
방금 본 것 처럼 파이썬은 1.0 또는 4.0을 수학적으로 정수('int')로 분류한다. 따라서 이러한 프로그램에서 유효 입력값으로 숫자를 받게 되면 해당 입력값은 부동소수점 숫자에서 정수로 변환된다. 다행스럽게 이러한 함수가 파이썬 내에 구축되어 있다.
->
방금 본 것 처럼 파이썬은 1.0 또는 4.0을 수학적으로 정수('int')로 분류하지 않는다. 따라서 이러한 프로그램에서 유효 입력값으로 숫자를 받게 되면 해당 입력값은 부동소수점 숫자에서 정수로 변환해야 한다. 다행히 이러한 함수가 파이썬 내에 구축되어 있다.
[p.32: 아래에서 8~5행]
>>> try
a = float(input('Enter a number: '))
except ValueError:
print('You entered an invalid number')
->
>>> try:
a = float(input('Enter a number: '))
except ValueError:
print('You entered an invalid number')
[p.35: 아래에서 9~4행]
>>> try
a = Fraction(input('Enter a fraction: '))
except ZeroDivisionError:
print('Invalid fraction')
Enter a fraction: 3/0
Invalid fraction
->
>>> try:
a = Fraction(input('Enter a fraction: '))
except ZeroDivisionError:
print('Invalid fraction')
Enter a fraction: 3/0
Invalid fraction
[P.36 : 아래서 3행]
0이 아닌 정수 a를 또 다른 정수 b로 나눌 때 나머지가 0이라면
->
0이 아닌 정수 a로 또 다른 정수 b를 나눌 때 나머지가 0이라면
[p.51 : #개선된 단위 변환 2행]
이 프로그램을 확장해 무게 단위(킬로미터와 파운드)
->
이 프로그램을 확장해 질량 단위(킬로그램과 파운드)
[p.148 : 두번째 문단 1행]
매번 반복할 때 마다 x*i/i
->
매번 반복할 때 마다 x**i/i
[p. 190 : 코드 마지막 줄]
for num in s:
->
for num in space:
[p.190 : 본문 마지막 행]
나타나는 주요 숫자의 확률
->
나타나는 소수(prime numbers)의 확률
[p.199 : 3문단 1행]
$5 또는 $10의 확률은 1/6의 확률로 배분하고, $20 또는 $40은 1/3의 확률로 배분한다.
->
$5 또는 $10의 확률은 1/6의 확률로 배분하고, $20 또는 $50은 1/3의 확률로 배분한다.
[p. 200 : 코드 11행]
probability = [1/6, 1/6, 1/3, 2/3]
->
probability = [1/6, 1/6, 1/3, 1/3]
[p.202 : 코드 11행]
[p.203 : 마지막 행]
즐겨하는 운동에 대한 설문 응답이 'football'이면 둘째 열이 1이고,
또 다른 운동이거나 아무 운동도 좋아하지 않으면 셋째 열이 1이다.
->
"football"을 좋아하는 스포츠로 표시한 경우 두 번째 열에는 1이 표시되고,
"football"이외의 다른 스포츠를 좋아하거나 모든 운동을 싫어하는 경우 세 번째 열에는 1이 표시된다.
[p. 205 : # 대수의 법칙 5행]
(1) 적분값만을 취하는 이산형 랜덤 변수는 5장에서 본 유일한 랜덤 변수다.
->
(1) 정수값만을 취하는 이산형 랜덤 변수는 5장에서 볼 수 있는 랜덤 변수의 유일한 종류다.
[p.217 : 15행]
internal:
->
interval:
[p.217 : 마지막 행]
FunAnimation 객체
->
FuncAnimation 객체
[p. 229 : 변환1]
y(n+1) = -0.04y(n) + 0.85y(n) + 1.6
->
y(n+1) = -0.04x(n) + 0.85y(n) + 1.6
[p. 229 : 변환2]
y(n+1) = 0.23y(n) + 0.22y(n) + 1.6
->
y(n+1) = 0.23x(n) + 0.22y(n) + 1.6
[p.229 : 변환3]
x(n+1) = -0.15x(n) - 0.28x(n)
->
x(n+1) = -0.15x(n) + 0.28y(n)
[p. 229 : 변환3]
y(n+1) = 0.26y(n) + 0.24y(n) + 0.44
->
y(n+1) = 0.26x(n) + 0.24y(n) + 0.44