본문 바로가기
AI, 머신러닝, 딥러닝, 데이터 분석

02_Study Python

by 포로리다 2023. 6. 27.
728x90

01_ 복습

\n 줄바꿈

\t 탭

\\ 진짜 백슬러시(백슬러시 하나 출력)

\'   or   \"  작은 따옴표 하나, 큰 따옴표 하나

 

 

- error

5/0   - >  Zero Division Error

NameError: name 'x' is not defined  변수를 선언한 적 없을 때 발

KeyError: 123      없는 key를 호출하려고 하면 error가 발생

 

문자열

- 문자열 내장 함수 (자연어처리 데이터 전처리 시 많이 활용함)

 * 문자 수 세기:  변수.count('element')   element = 철자, 단어, 문장 가능

 * 변수.find('e')   존재할 때 index 위치 숫자 출력 

                           존재 X  -1(False) 출력

 *  변수.index(e)  존재O index 위치 숫자 출력

                            존재X error 발생, Value Error 

 * 대소문자 확인: 변수.isupper()  대문자인가? True/False

                             변수.islower() 소문자인가?  True/False

 ※ 대소문자 섞여 있을 때, False 출력됨

word = 'true VAlue'
print(word.isupper(), word.islower())

* 대소문자 변경

ㄴ 변수.upper() 대문자로 변경

ㄴ 변수.capitaliza()  앞글자만 대소문자 반대로 변경

ㄴ 변수.lower() 소문자로 변경 

 

* 기타 

isalnum - 숫자 혹은 알파벳으로 구성 여부, 특수문자 포함 시 False 출력
isalpha
isascii - ASCII 아스키

isnumeric  - 숫자 관련

isdecimal - 숫자 관련

isdigit - 숫자 관련


isspace - 공백입니까 ' '.isspace(), ' \n'.isspace() , '\t'.isspace()  >>> True 

 

* 공백 제거 .strip()

 ㄴ .lstrip 문장 왼쪽 공백 제거

 ㄴ .rstrip 문장 오른쪽 공백 제거

 

* 문자열 나누기 .split()  공백 기준으로 나누어 리스트 형태로 만들어 줌, 잘라줌

 ㄴ  .split(' - ') 괄호 안에 문자 입력 시 입력값 기준으로 나눠 줌

 

* 문자열 바꾸기 .replace()

 

 

자료형(data type)의 연산

- 문자열 곱할 때  int형만 사용 가능 float  불가.

 

변수와 자료 구조

- 변수(variable, 변하는 것) = data를 담는 통

-   =   assignment(할당), 선언

- 변수엔 특정 고유한 식별 코드가 있음, 코드는 id를 보고 알 수 있음

   ㄴ 변수에 할당된 값을 바꾸면 변수명은 동일해도 id가 바뀜

- 변수는 한 줄에 여러 개를 동시에 할당할 수 있음
   ㄴ name , height = 'Tom', 178

- 기존에 존재하는 키워드(예약어)를 사용하지 않는게 좋음.

   ㄴ int = something  ->  향후 작업 시 error 발생, 향후 int()함수 사용 불가

   ㄴ 키워드(예약어)일 때, 글자 색상이 변경되므로 구분 필요(단, 모든 예약어가 바뀌진 않음)

- 암묵적 규칙

  ㄴ snake case(snake_case) , camel case(camelCase), pascal case(PascalCase) 등 (카멜, 파스칼 혼용 경우 존재)

  ㄴ 함수나 변수 snake 사용 , class 는 pascal 사용

  ㄴ "_"언더바로 시작하는 변수 사용 X

 

- 자료 구조(data structure): 여러 데이터가 들어있는 큰 창고 (컨테이너)

- 기본적인 네 가지 구조(built-in container/빌트인 컨테이너)

  ㄴ list, dict, set, tuple

 

* 리스트(list)

 - 대괄호 [  ] 사용하여 list 선언. 각 요소를 element, item이라고 지칭

 -  type :  class 'list'

 - 각 element, item 에는 거의 모든 것이 다 들어갈 수 있음

   ㄴ 공백, null, 숫자, 문자열, 혼합, bool, int, function(ex. print)  

          ex. f = [a, b, 34, True, print]
                f[4]

               >>> <function print>

               f[4]("Hello world")

               >>> Hello world

   ㄴ 리스트 안에 리스트 넣을 수 있음 ex. e = [1, 2, ['life', 'is', 0.1]] # item 개수는 3개

- list에 새로운 데이터로 바꾸는 방법: 해당 인덱스에 새로운 데이터를 assign.

- list slicing: a[start:end:step] 같은 형태로 사용

  ㅇ리스트 붙이기

   ㄴ + 를 사용하면 list가 붙어 새로운 list 만들 수 있음

   ㄴ + 대신 .extend() 사용해도 같은 기능함

  ㅇ 리스트에 데이터 추가

   ㄴ  .append(item)사용 시 맨 뒤에 item 추가됨  (자주 사용)

   ㄴ  .insert(위치, item)사용 시 정해진 위치 앞에 item 추가 가능 (알고리즘 공부 시)

  ㅇ 리스트 데이터 삭제

   ㄴ del  위치 알고 있을 때, 위치 기재하여 삭제  >>> del 변수[위치]      del   []

   ㄴ remove  위치 대신 item 기입하여 삭제 >>> 변수.remove('이름')      .remove( )

   ㄴ .pop()  가장 뒤에 있는 아이템을 삭제 >>> 변수.pop() 

        ※ 변수.pop(index위치) >>> 특정 index의 item 숨김/뽑아냄(버리지 않고 다시 돌려줄 수 있음)

 

  ㅇ 리스트 길이(length) 알기 : len(변수          

  ㅇ 리스트 내부에 item 존재 여부 확인 : in     /    not in     >>>  True  / False

       ㄴ print(item in or not in 리스트명)

  ㅇ 리스트 내부 특정 item 의 개수 count : 리스트명.count('item')

    ※  string & list : 1차원적으로 연속적인 성격 시퀀셜sequential하다고 표현, string과 list는 sequential data라고 부름

     * 스트링 특징

      - 스트링도 len 사용 길이 구하기 가능

      - 슬라이싱 가능

      -  append, 추가 불가능, but + 사용하여 붙일 수 있음

      - data 교체 불가   

      - del  사용 삭제 불가

  ㅇ 리스트 정렬(다른 type 데이터 혼재되지 않아야 함)

    ascending 어센딩 = 오름차순

    descending 디센딩 = 내림차순

  - 리스트명.sort()  #원본 바뀜

    ㄴ   리스트명.sort(reverse=True)   reverse를 True로 하면 방향이 반대가 됨

   - 리스트명.sorted()   #원본 유지됨

 

*복습 list 파이썬 기초 300제(51~60)

ㄴ55. 스플릿과 배트맨 삭제하기, del [index] 사용 한번에 삭제,

movie_rank = ['닥터 스트레인지', '슈퍼맨', '스플릿', '배트맨']
del movie_rank[2:]
print(movie_rank)

 

 

* 딕셔너리   Key(단어)  Value(내용/값)

 

dict = {key : value, key : value}

item = Key(단어) and Value(내용)

key : 숫자 or 글자

value : list와 유사, 아무거나 들어감

<class 'dict'>

딕셔너리의 key만 출력 :  .keys()

 

list처럼 [  ]사이에 값을 넣어서 불러올 수 있지만, 

[  ]에 들어가는 것은 index가 아니라 key 다

 

- dict에서 데이터 변경 : key에 새로운 value를 assign해주면 값이 변경됨.

리스트는 인덱스 입력, 딕셔너리는 value할당

 

# 이렇게도 가능, 연산,

d = {'a': 123, 'c': 0}
d['a'] = d['a']/10
print(d)

>>> {'a': 12.3, 'c': 0}

 

- 데이터 새로 추가:  dict[key] = value

- 데이터 삭제: del d['key']

 

- 간단히 표현

score['영희']['국어'] = score['영희']['국어'] + 4

>>> score['미영']['국어'] += 4

 

- dict 뒤에 추가:  score['tom'] = {'영어' : 95, '수학' : 100, '국어' : 47}

 

print(d명칭.keys() #key를 불러옵니다. 뒤에 s와 ()가 붙습니다.
print(d명칭.values()) #value를 불러옵니다. 뒤에 s와 ()가 붙습니다.
print(d명칭.items()) #item(key&value)을 불러옵니다. 뒤에 s와 ()가 붙습니다.

 

-- dict 안에 해당 키가 있는지 확인하는 방법은 in을 쓰면 됨

  >>> print('a' in d.keys())   

       ㄴ print(d.keys() in 'a')  #반대로 쓰지 않게 유의

 

.update()  업데이트 함수 사용 시 딕셔너리에 또다른 딕셔너리 추가 가능

 

* dict 파이썬 기초 300제 복습(80~100)

ㄴ 뒤에 추가해야할 정보를 따로따로 다른 줄에 기재하여 추가함

ice = {"메로나": 1000, "폴라포": 1200, "빵빠레": 1800}
ice["죠스바"] = 1200
ice["월드콘"] = 1500
print(ice)

 

ㄴ 87. dict value 가져오기 print(ice['key'])

ㄴ 88. value 가격 수정하기 

ice['메로나'] += 300

ㄴ 91. 아이스크림명을 키값, (가격, 재고) 리스트를 딕셔너리의 으로 저장하라 라는 것을 놓쳐서 정답과 다르게 기재함.

inventory = {'메로나': {'가격': 300, '재고' : 20},
             '비비빅': {'가격': 400, '재고' : 3},
             '죠스바': {'가격': 250, '재고': 100}}
print(inventory)  

      >>> 정답 

inventory = {'메로나': [300, 20],
             '비비빅': [400, 3],
             '죠스바': [250, 100]}
print(inventory)    

ㄴ 92. 메로나의 가격을 화면에 출력

inventory = {"메로나": [300, 20], "비비빅": [400, 3], "죠스바": [250, 100]}

print(inventory["메로나"][0],"원")

    가격이 출력을 위해 가격 있는 곳의 index 적어줬음

ㄴ 94. 딕셔너리 뒤에 추가

inventory['월드콘'] = [500, 7]

ㄴ (오답) 97. value 의 총합을 구하기

icecream = {'탱크보이': 1200, '폴라포': 1200, '빵빠레': 1800, '월드콘': 1500, '메로나': 1000}

나의 답: 원하는 답은 출력했으나 엄청 복잡하게 풀었음..

prices = icecream.values()
price_li = (list(prices))
print(price_li[0] + price_li[1] + price_li[2] + price_li[3] + price_li[4])

 정답 : sum() 용하기

print(sum(icecream.values()))

 

ㄴ(오답) 99 두 개의 튜플을 하나의 딕셔너리로 변환하기,(zip과 dict)

result = dict(zip(keys, vals))

   ※ 두 개의 리스트를 딕셔너리로 변환할 때도 동일한 방법 사용

 

 

 

 

튜플(tuple)  특성 : read only

리스트와 비슷, 선언한 이후 변경할 수 없는 데이터(immutable)

소괄호 (  ) 사용

t = (3, 5, -1, 'a')

print(len(t))  #길이를 세는 법 >>> 4
print(t[3])    #indexing  >>> a
print(t[1:])   #slicing >>>  (5, -1, 'a')

b = 'a', 'b', 'c'   #괄호를 쓰지 않아도 튜플로 선언
- 새롭게 만들어지는 변수의 이름을 덮어 쓰면 마치 원본이 늘어난 것 처럼 할 수 있음

   (id 조회 시 id가 달라지는 것을 확인할 수 있음)

- 변경 불가능한 데이터 구조라서 데이터를 추가 불가

insert, append, del, extend, remove, pop, clear, ,,,  사용 불가

-언패킹 : 리스트, 튜플, 세트 해체하는 것

 

 

세트 set(집합)

set는 수학의 집합과 같다. 크게 두가지 특징이 있음
1. 중복이 없다.(없어진다)
2. 순서가 없다.(정렬되어 있지 않다, indexing, slicing이 불가)

 

- set의 중복 제거 기능때문에 list에서 set으로 변경 후 다시 list로 바꾸는 식의 방법을 자주 사용

- item 추가 : .update()   '문자열'은 쪼개짐  , [        ]  , boolean 숫자로 변환됨,

   ※ True 1, False 0 으로 인식하여 True와 1 존재 시 먼저 있는 것만 살아남고 뒤에 있는 중복건은 없어짐.(중복 삭제)

- 아이템 삭제 : .remove()

- 주의점 

ㄴ 대소문자 구분, 스페이스 구분 후 중복 제거, 순서 섞임

ㄴ list 나 string 이나  tuple  내부의 중복을 제거 가능

fruits = ['apple','banana','cherry','durian', 'apple', 'cherry', 'cherry']
unique_fruits = list(set(fruits))
print(unique_fruits)

>>> ['cherry', 'durian', 'banana', 'apple']

 

- set 세트 연산자
.Union (합집합/유니언) : | :두 집합의 요소를 더한 것
.Intersection (교집합/인터섹션) : & :두 집합의 요소 중 공통된 것
.Difference (차집합/디프런스) : - :한 집합에서 다른 집합의 요소를 제외한 것

  ㄴ (주의) 순서의 영향 받음

(사용빈도 낮음) Symmetric Difference (대칭차/ 시메트릭 디퍼런스) : ^ :겹치치 않는 요소들

 

- 포함 관계

부분집합(subset 서브셋) : 한 집합이 다른 집합에 완전히 포함되거나 동일한 것

print(jack.issubset(tom))

 

- 리스트[  ], 튜플 (  ), 세트{  } 서로 변경 가능,   모두 일렬 나열된 데이터 구조

※ 딕셔너리는 변경하면 key만 남아버림. --> 그래서 잘 사용하지 않음.

 

 

 

- 코딩용 폰트: d2coding

 

- 향후 STUDY 계획

 

파이썬 기초 

데이터 분석 

머신러닝 : 이론 어려움, 실습 쉬움

추천 시스템 : 머신러닝의 일부(분류/회귀 중 특화된 부분)

------------------

딥러닝

서버 환경 구축(구글 클라우드)

객체 지향

웹 개발

 

- 복습 방법

1. 프로그래머스

코테연습 > 코딩 기초 트레이닝 > 

2. 파이썬 기초 300제 

3. 점프 투 파이썬

728x90