데이터사이언스
191111 [Python] data type & data structure 1
프로젝트미냉이
2019. 11. 11. 11:19
https://programmers.co.kr/skill_checks
Python 학습 계획
- data type & data structure & 로직
- Numpy & Pandas를 이용한 EDA
- 통계 개념, Python에서 처리, R에서 처리
- 통계적 데이터 분석(통계적 가설검정)
- Tensorflow를 이용한 machine learning
- 지도학습, 비지도학습, 강화학습
- Deep Learning (CNN)
- R에서는 어떻게 하는지
- PythonFlask를 이용한 Web based ML Service 실습
Python 기본
python의 장점
- 상대적으로 쉬운 언어
- 강력한 데이터 분석 library (현재 가장인기가 좋다)
- Open Source
- R에 비해 범용적인 사용이 가능
- 데이터 분석 결과를 다른 시스템과 연동시킬 때
- 하위 호환성은 없다(2.x버전과 3.x버전 다름)
- 일반적으로 PyCharm 혹은 jupyter Notebook으로 작업
Jupiter Notebook의 기본적인 활용 (셀, 단축키)
셀
- 셀은 jupiter notebook의 명령어 처리 기본 단위이다
단축키
- hotkey(단축키) 를 알아두자
- A: 현재 Cell 위쪽에 셀 추가
- B: 현재 Cell 아래쪽에 셀 추가
- DD: 현재 Cell 삭제
- Control + Enter : 현재 Cell 실행
- Alt + Enter : 현재 Cell 실행, 아래쪽에 Cell 삽입
- L : 라인번호 토글화
- O: output 영역을 토글화 하는 것
- Shift + Enter : 현재 Cell 실행, 아래쪽 Cell 선택
주석처리
- 한줄 주석: #
- 여러줄 주석 : """ """ 또는 ''' '''
Python 기본 키워드 종류 확인하기
keyword를 사용하려면 keyword module을 로딩해야 한다
- 사용 함수
- import : 모듈 불러오기 (≒ library)
- print : output 영역에 출력하기
# module을 불러오는 함수:import
# output 영역에 출력할 때 사용하는 함수: print()
import keyword
print(keyword.kwlist)
명령어를 입력후 ctl + Enter를 누르면 셀 하단에 output영역이 나타나게 된다
Python 변수 생성 및 출력
- 변수할당 기호: =
- ; 은 생략 가능
- 변수 값 출력 결과를 두 개줬을 때, 결과값이 output에 교체되어 마지막 라인만 산출 됨
- 여러 변수나 여러 계산 값을 모두 출력하기 위해서는 print함수를 사용해야 함
Python Data Type & Data Structure
Python의 Built-in Type (내장 데이터 타입)
임의로 아래와 같이 두 종류로 구분했지만,
실제로는 자료형과 자료구조가 명확히 구분되는 개념은 아니다.
1. 데이터 타입
- Numeric
- int : 정수(integer)
- float 또는 double : 실수
- complex : 복소수
- Text Sequence Type : 문자열(str)
- Bool : True, False (bool)
2. 자료구조
- Sequence (list, tuple)
- Mapping (dict)
- Set (set)
cf. 데이터 타입 확인 함수 : type() (≒R의 Mode)
1. 숫자형 데이터 타입
1) 종류: int (정수) / float (실수) / complex (복소수)
2) 숫자형 종류 확인하기
3) 숫자형 기본 연산 기호
- /
- 나누기 연산
- 특징: 정수/정수 -> 실수로 산출 (3.x버전 부터)
- **
- 지수표현
- %
- 나눗셈 나머지 (R의 %%)
- //
- 나눗셈 몫 (R의 %/%)
python 코드 열기▽
더보기
a = 123 #정수
b = 3.1415926535 #실수
c = 3.14E10 # 지수표현 (실수)
d = 1 + 2j #복소수
e = 0o37 # 앞에 있는 0(숫자0
# 뒤에있는 o(영문자) => 8진수
f = 0xFF # 16진수
print(type(a)) # a의 data type을 알려줌
# R의 mode와 같음
div = 3/4 #0.75 (3.x버전. 2.x버전 : 정수로 인식 => 정수0으로 처리)
print(div) # 3.x버전은 정수정수 연산결과가 실수로
result = 3 ** 4 # 지수표현
print(result)
result = 100 % 3 # 나머지연산
print(result)
result = 10 //3 #나눗셈의 몫
print(result)
2. 문자형 데이터 타입
1) 문자열 입력하기
우리가 일반적으로 사용하는 문자열
파이선의 문자열 제어가 조금 복잡하다
더보기
# text Sequence Type (str)
# 우리가 일반적으로 사용하는 문자열
# 파이선의 문자열 제어가 조금 복잡하다
# 문자열 생성 방법
a = "Hello" # ""를 이용 (한줄짜리)
b = 'Hello' # ''를 이용 (한줄짜리)
# double 과 single을 동일하게 인식
c = """이것은
소리없는
아우성""" # 문자열의 줄바꿈이 가능함 (여러줄)
print(c)
d = '''이것은
소리없는
아우성''' # 문자열의 줄바꿈이 가능함 (여러줄)
print(d)
2) 문자열 연산, Indexing, Slicing
- 연산자 Overloading
- 다른 프로그래밍 언어처럼 연산자 overloading이 가능하여, 문자열을 + 과 * 연산자로 결합이 가능하다
- + 연산자는 연결
- * 연산자는 횟수만큼 연결Indexing
- 문자열을 생성하면, 문자 하나마다 위치가 할당되어 활용 가능
- Slicing
- in, not in
- formatting: 일반적으로 출력양식을 지정할 때 사용
- 자릿수 지정
- 정수 (decimal) -> %d
- 실수 -> %f
- 문자열 (string) -> %s
- format 문자열 함수 --> 프로그래밍 시 문자열을 포함하는데 사용도가 매우 높음
############ 문자열 연산, Indexing, Slicing ##############
first = "이것은"
last = "소리없는 아우성!!"
# 두 문자열을 연결
# 프로그래밍 언어에서는 문자열 연결을 +로 한다
result = first + last # 연산자 overloading 이 가능
print(result)
# 문자열의 곱
text = "python"
print(text * 3) # 문자열을 3번 연결함
a = "this is a sample text!!, show me the money!"
# Indexing ( 0 부터 시작, 공백도 문자)
print(a[0]) # t
print(a[8]) # s
print(a[-1]) # -는 뒤부터 indexing
# 마지막 글자(-0은 X음) , 다른언어에선 불가
# slicing(일부분을 발췌)
a = "this is a sample text!!, show me the money!"
print(a[0:3]) # 결과: thi
# 시작은 inclusive, 끝은 exclusive
print(a[:3]) # 시작부분이 없으면 처음부터(0)
print(a[3:]) # 마지막이 없으면 끝까지
print(a[:]) # 문자열의 처음부터 끝까지
# in, not in 연산자 (R의 %in%) => 논리연산자
a = "this is a Sample Text";
print("this" in a) # True
print("this" not in a ) # False
print("sample" in a) # False # 대소문자 구별
print("sample" in a.lower() ) # True
# 문자열 formatting
# apple = 10;
# # a = "사과가 10개 있어요!!"
# a = "사과가 " + apple + "개 있어요!" # error남
# print(a) # 숫자와 문자의 혼용이 불가 # java는 가능
# 대신 숫자열을 문자열로 변경
apple = 10;
a = "사과가 " + str(apple) + "개 있어요!"
print(a)
# 가능은 하나 너무 복잡하다
# 정수 포멧팅 방식 (%d: decimal) => 훨씬 간단함
a = "사과가 %d개 있어요!!" %apple
print(a)
a = "사과가 %d개, 바나나가 %d개 있어요!!" %(apple,5)
print(a)
# 실수 포멧팅 %f)
a = "원주율은 %d입니다." %3.141592
b = "원주율은 %f입니다." %3.141592
print(a)
print(b)
# 실수 자릿수 지정 포멧팅
a= "원주율은 %10.4f" %3.141592 # 정수 10자리, 소수점 넷째
# 5에서 반올림
print(a)
# 포멧에서 문자열 활용
a = "이것은 소리없는 %s!!" %"아우성" # 문자열
b = "이것은 소리없는 %10s!!" %"아우성" # 오른쪽정렬
c = "이것은 소리없는 %-10s!!" %"아우성" # 왼쪽정렬
print(a)
print(b)
print(c)
##### 자주 사용되는 문자열 함수
a = "cocacola"
# 문자열 길이
result = len(a); print(result)
result = a.count("c") ;print(result) # 문자열의 개수
result = a.count("co");print(result)
result = a.find("o");print(result) #index 반환
a = ":";
b = "abcd"
result = a.join(b); print(result) #사이사이에 삽입
a= ["이것은", "소리없는", "아우성"];
b = " ";
result = b.join(a); print(result)
a = " hoBBy "
print(a.upper())
print(a.lower())
print(a.strip()) # 앞과 뒤의 공백을 제거. 다른언어의 trim
print(a.lower().strip())
# 포멧팅은 출력양식을 설정할 때 사용하는 것이 일반적
############################
#프로그래밍은 format()이라는 문자열 함수 사용
#{}안에 새로운 값이 mapping됨
a = "나는 사과를 {0}개 가지고 있어요!".format(3);
print(a);
a = "나는 사과를 {0}개 가지고 있어요!".format("Three");
print(a)
a = "나는 사과를 {0}개, 바나나{1}개 가지고 있어요!".format(3,5);
print(a)
a = "나는 사과를 {var1}개, 바나나{var2}개 가지고 있어요!".format(var1=3,var2=5);
print(a)
a = "나는 사과를 {}개, 바나나{}개 가지고 있어요!".format(3,5);
print(a)
####지금까지
# Numeric(정수, 실수), str
시퀀스 타입 (list, tuple) 은 다음 게시글에 이어서!