즐겁게!! 자신있게!! 살아보세!!

재밌는 인생을 위하여! 영촤!

Language_Study/Python

[Python] 5.문법-자료형

Godwony 2021. 1. 19. 21:16
728x90
반응형

자료형

1. Data의 분류 방법

1) 수정가능 여부

  • 변경가능(mutable) - 변수

  • 변경 불가능(immutable) - 상숭

  • Literal : 사용자가 직접 입력한 데이터

    • 정수 : 10
    • 실수 : 10.3
    • bool : True, False
    • 복소수 : 정수 +(-) 정수j
  • 문자열 : '문자열', "문자열", '''문자열''', """문자열"""

  • list : [데이터, 데이터 , ...]

  • tuple : (데이터, 데이터, ...)

  • set : {데이터, 데이터, ...}

  • dict : {key:데이터, key:데이터, ...}

  • 데이터 없음 : None

  • 변수의 생성 및 수정과 삭제

    • 이름 = literal , 연산식, 함수 등
    • 영역 내에서 이름이 처음 등장하면 생성
    • 영역 내에서 이름이 처음이 아니면 수정
    • 영역은 동일한 들여쓰기이면 같은 영역
  • 변수는 영역이 종료되면 소멸된다.

  • del(변수)를 이용해서 강제로 종료하는 것도 가능

2) 데이터가 가리키고 있는 개수에 따른 분류

  • scala data : 1개의 데이터 - 분석의 대상이 아니다.
  • vector data : 0개 이상의 데이터 - 분석의 대상
  • scala data는 정수, 실수, 복소수, bool, 문자열(scala data가 되기도 하고 vector data), 날짜
  • vector data는 문자열, list(array), tuple, set, dict

3) 형태에 따른 분류 (분석에서 중요시)

  • 정형 데이터 : 테이블로 바로 변환이 가능한 데이터 - 관계형 데이터베이스에 존재 - 기술통계
  • 비정형 데이터 : 테이블로 바로 변환이 되지 않는 문자열, 이미지, 음성데이터 같은 것들로 머신런닝으로 적용하려면 숫자로 변환해서 사용(인코딩) - 거리
  • 반정형 데이터 : 초기상태는 비정형데이터처럼 보이지만 가공을 하면 정형 데이터로 변환할 수 있는 데이터로 json이나 xml 데이터 (web, 스마트 기기로부터 직접 가져오는 데이터)

2.bool

  • True 나 False 1개만 저장하는 자료형
  • 0이 아닌 숫자나 None이 아닌 집단 자료형의 데이터들도 True로 간주하고 0이나 None인 집단 자료형의 데이터는 False로 간주
  • bool을 숫자로 산술연산을 하면 True는 1로 간주하고 False는 0으로 간주해서 연산
  • 강제로 bool로 만들고자 하는 경우에는 bool(데이터)
b = True
result = b + 2  # b를 1로 간주해서 1+2 = 3 
print(result)

3.int

  • 정수 자료형
  • 다른 자료형을 정수로 변환하고자 할 때는 int(데이터)
    • 정수로 된 문자열이면 정수로 변환되고 실수로 만들어진 문자열이면 에러가 발생
    • 실수를 대입하면 소수 버림
f = '10.7'
x = float(f)
n = int(x)     # n 은 10 

4.float

  • 실수 자료형
  • 실수는 표현 못하는 숫자가 있다 (부정확합니다)
  • 실수로 변경하고자 할 때는 float(데이터)
  • 데이터를 읽었을 때 문자열로 읽어진 경우 숫자로 변환해야 하는 경우가 많기 때문에 변환방법을 숙지
# 실수의 부정확성 
f = 0.1
s = 0.0 
for i in range(0, 100, 1) :
    s = s + 0.1
print(s)    #0.1을 100번 더했는데 10이 아니고 9.99999999999998 나옴 

# 위의 경우는 10을 곱해서 1을 만든 후 100번 더하고 10으로 나누면 정확한 결과가 나옴 

5. sequential type

  • 데이터를 순서대로 저장하는 자료형
  • str, bytes, list, tuple

1) 인덱싱

  • 데이터[인덱싱] : 인덱싱 번째 데이터가 리턴, 음수를 사용하면 뒤에서부터

2) 슬라이싱

  • *데이터[시작위치:종료다음위치:간격] : 시작위치부터 종료다음위치 앞까지 간격단위로 리턴 *
    • 종료위치를 생략하면 끝까지
    • 간격을 생략하면 1
li = [10, 20, 30, 40, 50]

t = li[0:3:1]   # 슬라이싱은 복제가 됩니다.
# 슬라이싱 데이터와 원본 데이터는 다른 데이터 
print(t)

t[0] = 1000 # 복제된 데이터를 수정해도 원본 데이터에는 아무런 영향이 없음
print(li)

3) 연결하기

  • 동일한 자료형끼리 +를 하면 연결

4) 반복하기

  • 정수와 곱하기 *

5) 데이터 개수

  • len(데이터)

6) 존재 여부 확인

  • in 연산자

6. str(문자열)

  • 한줄 문자열은 작은 따옴표, 큰 따옴표로 묶으면 됨.
  • 여러 줄 문자열은 작은 따옴표, 큰 따옴표 3번으로 묶으면 됨 """ """
  • 문자열은 수정할 수 없습니다.
    • 문자열은 인덱싱이나 슬라이싱으로 데이터를 읽는 것만 가능하지 대입하는 것은 안됩니다.
    • 문자열은 전체 교체만 가능하지 부분 교체는 안됨.

1) 제어문자

  • \다음에 하나의 문자를 입력해서 특수한 기능 부여
  • \n : 줄바꿈
  • \t : 탭
  • \', \''
  • \\ : \
    • 파이썬에서는 윈도우더라도 디렉토리 기호는 / 사용이 가능

2) format 메소드

  • 데이터에 서식을 지정해서 문자열을 생성하는 메소드
  • 서식은 "{데이터의 인덱스:서식}".format(데이터) 로 지정 - 문자열을 보기좋게 하기위해서 지정
  • 데이터의 개수는 제한이 없다.
# 서식을 이용한 파이썬 문자열 만들기 
# 첫번째 데이터를 10칸을 확보해서 출력
# d가 정수, f가 실수, b가 bool, s가 str
msg = "최대값:{0:10d}".format(1000)
print(msg)

7.bytes

  • 바이트 배열
  • 네트워크 나 파일의 내용을 읽거나 전송 할 때 사용
    • 원래 네트워크나 파일의 전송단위는 byte
    • 이 기종 간에 데이터를 주고 받을 때는 byte 단위로 데이터를 전송한 후 복원합니다.
  • 문자열을 bytes로 만들 때는 b'문자열'
  • bytes를 문자열로 만들 때는 decode(byte 배열)

8. list

  • 데이터를 순서대로 저장한 자료 구조
  • 내부 데이터를 읽고 쓰는 것이 가능

1) 생성

  • [데이터나열]
  • list(__iter__가 구현된 객체) : list로 변환

2) list에 연산을 수행해서 새로운 list 만들기

  • [연산식 for 임시변수 in list] : list의 데이터를 임시변수에 대입한 후 연산을 수행해서 새로운 list 생성

3) 조건식을 적용해서 새로운 list 만들기

  • [연산식 for 임시변수 in list if 조건]

4) 함수에 대입할 때는 [ ] 를 붙이지 않는다.

# list에 연산을 해서 새로운 list 만들기

li = [10, 4, 9, 23, 2]

# 데이터를 순차적으로 접근
for imsi in li : 
    print(imsi, end='\t')
print()

#li의 요소들을 k에 하나씩 대입해서 3을 곱해서 새로운 list 생성 
print([k*3 for k in li])

#필터링 - 짝수만 골라내기 - 텍스트마이닝에서 많이 사용하는 문법 
print([k*3 for k in li if k % 2 == 0])

#함수에 사용할 때는 []를 생략
print(sum(k*3 for k in li if k % 2 == 0))
li= ['을', '난', '가자','기억고']

print([k for k in li if len(k) > 1])
# 글자수 한개 초과만 골라내기 - 텍스트마이닝

5) 메소드

  • append, insert, delete, reverse, sort, count(매개변수로 대입된 데이터의 개수를 구해주는 메소드)

6) 2차원 list

  • list 안에 list 생성 가능
  • 이미지나 문자열 데이터를 읽어서 변형하면 이 구조

[[데이터], [데이터], ...]

  • 이미지는 바로 numpy 의 ndarray로 바로 변환해서 사용하기 때문에 실제로 2차원 list가 만들어지는 경우가 드물지만 알아는 둬야 한다.
    • 머신런닝은 순수한 데이터만 가지고 작업을 수행한다.
국어 영어
10  20 
30  70
  • 아래처럼 벼경해야만 머신런닝에서 사용 가능
10  20 
30  70
안녕하세요 반갑습니다
어서오세요 환영합니다
  • 위와 같은 문장을 단어 별로 분해 해주세요
    [[안녕하세요 반갑습니다], [어서오세요 환영합니다]]
# 2차원 list 인 경우 접근

li = [[100, 300], [400, 200]]

# 행단위 접근 - 필수 연습
for imsi in li : 
    for temp in imsi : 
        print(temp, end='\t')
    print()

print()

# 열단위 접근 - numpy 나 pandas에는 T라는 속성을 이용해서 행과 열을 switch 
for i in range(0, len(li), 1) : 
    for j in range(0, len(li), 1) : 
        print(li[j][i]) 

7. tuple

  • 내부 데이터를 수정할 수 없도록 하고 순서대로 배치하는 데이터의 모임

1) 생성

(데이터 나열)
1개일 때는 (데이터,) - , 안찍으면 scala 데이터가 됨

2) 각각의 데이터는 인덱싱을 이용해서 접근

3) tuple의 데이터는 분할해서 변수에 저장 가능

  • 변수1, 변수2 .... = 튜플
    • 튜플의 값들을 순서대로 변수1, 변수2에 대입

4) 함수가 여러 개의 데이터를 리턴해야 할 때 각각의 데이터가 서로 다른 의미를 갖고 모여서 하나를 이뤄야 하는 경우 파이썬은 class와 tuple을 이용

  • tuple은 데이터를 각각의 의미를 갖는 변수에 대입해서 사용하는 경우가 많습니다.
# 회귀분석을 하게되면 결과로 기울기와 절편의 값을 리턴합니다. 
result = (4, 7) # 이런 상태면 result[0]이 기울기, result[1]이 절편 

slope, intercept = result # 0번 데이터가 slope에, 1번 데이터가 intercept에 대입

print('기울기', slope)
print('절편', intercept)

8.dict

  • key와 value를 같이 저장

1) 생성

{key:data, key:data, ... }

  • data가 scala 데이터면 하나의 행(Serise)을 만드는 것입니다.
  • data가 list 이면 테이블(DataFrame)을 만드는 것입니다.

2) 데이터 접근

  • dict[key] 를 이용해서 하나 하나의 데이터 접근
  • 없는 key를 사용하면 에러가 발생함.
  • 파이썬의 매개변수를 만들때 **args 이런 형태로 만들면 내부적으로 dict 가 된다.
  • 우리가 대입할 때는 이름=값, 이름=값, ...
  • 실수로 필수 입력 내용을 주지 않으면 에러가 발생합니다. (어떤 속성이 빠졌는지 알아야한다)
# key Error : 없는 key를 사용 

dictionary = {'name':'park', 'num':1}
print(dictionary ['num'])
print(dictionary ['age'])

3) 2개의 list를 가지고 생성

zip(key의 list, data의 list)

728x90
반응형

'Language_Study > Python' 카테고리의 다른 글

[Python] 7.numpy  (0) 2021.01.19
[Python] 6. parsing  (0) 2021.01.19
[Python] 4.문법-클래스  (0) 2021.01.19
[Python] 3.문법-Function  (0) 2021.01.19
[Python] 2.문법 - 제어문  (0) 2021.01.19