반응형
자료형
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)
반응형
'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 |