데이터사이언스

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) 은 다음 게시글에 이어서!