Chapter3 Computing with Numbers (p.57~ p.82)
- 데이터 (Data)
- 컴퓨터 프로그램에 의해 저장, 조작되는 정보 (본문)
- 일반적인 의미에서의 데이터 (데이터 분석 전문가 가이드, 한국데이터진흥원)
- 추론과 추정의 근거를 이루는 사실 (옥스포드 대사전)
- 존재적 특성 (객관적 사실)
- 당위적 특성 (추론, 예측, 전망, 추정을 위한 근거)
- 추론과 추정의 근거를 이루는 사실 (옥스포드 대사전)
- 숫자 자료형 (Numeric Data Type)
- 숫자 자료형 관련 연산자 (Numeric Operations)
- 정수와 정수 연산 시 정수 반환 (예외
/) - 실수와 실수 연산 시 실수 반환 (예외
/) - 정수와 실수 연산 시 정수를 실수로 변환한 뒤 실수 반환
- 정수와 정수 연산 시 정수 반환 (예외
| 연산자 | 기능 |
|---|---|
+ |
덧셈 |
- |
나눗셈 |
* |
곱셈 |
/ |
나눗셈 자동으로 실수형으로 형변환 (python3에서 변경)6 |
** |
지수 |
abs() |
절대값 |
// |
정수 나눗셈 |
% |
나머지 |
- 형변환 (Type Conversions)과 반올림 (Rounding)
- 정수를 실수로 변환 시 원래 값에 .0이 됨
- 실수를 정수로 변환 시 소수점 이하 절삭
- 반올림은
round(floating_number, number_of_digits_after_decimal_point)이용- 두 번째 인자 값이
-n일 경우 소수점 이전 n번째에서 반올림
- 두 번째 인자 값이
import math를 통해 연산 관련 기능을 제공하는 math 라이브러리 사용 가능
- 부동 소수점으로 실수를 표현해 실수값이 정확하지 않음7
- 큰 정수 연산이 어려움
- 정수 자료형의 크기가 고정되었기 때문
- python 2.2에서
int와long이 통합되며,int의 크기가 임의적으로 증가하기 때문에 python에서 현재 이와 같은 문제 없음
- 지수표기법과 유사
- 수와 자리수로 나뉨
- 연산 시 비트를 줄일 수 있음
- 단 값이 대략적으로 표시되기 떄문에 연산이 부정확
- 실제 값을 저장하는 범위가 고정되어 그 이후 값을 0으로 처리
- 이를 이용해서 미분하는 메소드가 존재
- 앱실론을 이를 이용해 지정
- 딥러닝 등에서 수치가 정확한 연산이 필요하지는 않음
- 모바일 쪽에서도 이슈
- oracle RDBMS에서
numbertype의 크기를 지정해줄 때도 이와 관련 됨- 예시)
Number(실제 수를 표시할 범위, 소수점 범위)
- 예시)
- 정확한 연산을 위해 필요
- bit는 CPU가 처리하는 데이터의 최소 단위인 레지스터의 크기를 뜻함8
- 이하 출처
- 컴퓨터의 프로세서 내에서 자료를 보관하는 아주 빠른 기억 장소
- 현재 계산을 수행 중인 값을 저장하는 데 사용
- 현재 로드-스토어 설계를 사용해, 메인 메모리에서 레지스터로 데이터를 옮겨와 데이터를 처리하고 그 후 그 내용을 다시 레지스터에서 메인 메모리로 저장함
- 비트의 차이는 CPU (안과 밖을 연결하는) 파이프라인 수의 차이
- 램 크기가 핵심적으로 차이남
- 램 크기가 커지면서 표기할 수 있는 주소의 범위가 넓어짐
- CPU로 오갈 수 있는 데이터가 많아짐
- 32bit의 경우 처리할 수 가상 메모리가 4GB임
- 실무적으로 메모리를 얼마나 다채롭게 사용할 수 있는가
- 가용 공간이 넓어지면서 명령어 집합이 늘어남
- 텐서플로우의 warning은 해당 명령어가 달라 발생하는 메시지
- Hz로 표시되는 부분은 연산이 수행될 수 있는 횟수
- 오실레이터 (oscillator)
- 연산마다 전선의 길이가 달라 여러 연산을 한 번에 수행할 경우 흐름의 역전이 발생
- 마디를 나누어 검증을 수행하는데 오실레이터가 이에 활용됨
- 오실레이터 (oscillator)
- chunk 단위로 병렬 처리 시 딕셔너리, 리스트 등 자료구조 많이 사용
- 메모리 상 차이로 구분할 수 있음
- container sequence
- 서로 다른 자료형의 항목을 담을 수 있는 자료 구조
- 객체에 대한 참조를 담고 있음
- [Question] 참조를 담고 있다면 주소값이 들어가는데 왜 연속적인 공간 확보가 어려운가?
- linked list
- 포인터로써 다음 자료의 위치를 가리키는 자료 구조
- 읽기가 느림
- python의 리스트
- 유연하게 모든 것을 담을 수 있다는 게 최대 장점
- 단 위처럼 모든 것을 담을 수 있는 경우 어떤 게 들어갈지 모르므로 메모리에 연속적으로 공간을 확보하기 어려움
- flat sequence
- 단 하나의 자료형만 담을 수 있는 자료 구조
- 값을 직접 저장하는 자료 구조
- array
- 메모리상 여러 자료를 연속적으로 올리는 자료 구조
- named tuple
- tuple
- 해시 구조
- 순서를 활용하고 싶을 때 사용
- ordered dictionary로 바로 바꿈
- Hashable
- 처음 만들 때 오버헤드가 있으나 검색 시간이 짧은 장점이 있음
- 일반적으로 def__init__이나 Hashable은 def__hash__ 구조
- __ 내장 메소드
- equal로 비교하고, 포인터 주소가 아니고 hash값으로써 동일한지 판단
- iteration 도는 중에 바꿀 경우 오류가 발생
- set 연산이 가능
- 데이터 존재 여부를 편하게 확인할 수 있음
- dictionary
- hash 값 때문에 커짐
- ordered dictionary
- order가 들어가 dictionary보다도 커짐
- 위의 자료 구조로써 pandas 사용
- dictionary, tuple comprehension도 가능
- CRUD를 목적으로 함
- 디스크 IO일 경우 네트워크에서 시간이 많이 소요
- 이전에는 RDBMS를 사용했으나, 좀더 유연한 구조를 위해 NoSQL 사용
- wrtiing 비용이 크기 때문에 lazy하게 함
-
둘다 SQL과 같이 NoSQL를 접근할 수 있다는 특징을 가짐
-
Hbase
- 인덱스를 사용해 RDBMS와 유사
-
Hive
- Read에 중점을 둔 데이터베이스
- 파티션을 사용한다는 게 특징
- 파티션은 가상 CPU를 사용해, 한 CPU가 하나의 파티션을 담당
- 파티션을 사용하면 파티션 단위로 검색
- 파티션을 사용하지 않을 경우 full scan
- 하지만 파티션을 잘못 지정할 경우 full scan과 다를 바 없음
- 파티션은 일반적으로
id끝 1-2자리로 분리
-
test code는 vim보다 ide에서 적합
- python Testcase 기본으로 제공
- 테스트 코드 Testcase 상속받아야 함
- 함수는 test로 시작해야 하며 문제 발생 시 빠르게 파악하기 위해서 함수명을 길게 작성해줘야 함
- 자동화가 되어야 함
- 이떄 Mock 사용
- Mock
- input 자동화
- 데코레이터
@mock.patch("__main__.__builtin__.input")추가
- 데코레이터
- 데이터베이스 부하 때문에도 Mock 사용
- input 자동화