본문 바로가기
Stay Hungry Stay Foolish/Data Analysis

Python 프로그래밍 기초 정리

by HANNI하니 2021. 2. 10.

0. Python 프로그래밍 기초_자료형

= 대입연산자

== 비교연산자

# comment(주석)

print(a,b,sep='*',end='!!')  : sep : 구분자. end : 마지막에 출력할 문자열

variable naming(변수 이름 규칙) : reserved keywords(예약어) 사용불가. 영문 대소문자, _ 가능

 

1. 기본 데이터 타입 type(변수)

  • 정수(int)

  • 실수(float)

  • 문자열(str)

  • 불리언(boolean)

  • None

comparison operator (비교 연산자) : <,<=,>,>=,!=,=

-> 결과 bool 타입

 

numbers (숫자형 타입) : 정수, 실수, 연산자 우선순위(기본적인 수학 연산자와 동일)

 

2. string (문자열)

'',"", ''' '''(여러줄)

escape string (이스케이프 문자) : \n(new line) \t(tab)

indexing & slicing string (문자열 인덱스 및 추출) : 파이썬은 0번째부터 시작!!! 다른 언어와 달리, 음수 인덱스 지원.

a[-1] 마지막 인덱스, a[-2] 마지막에서 두번째 인덱스

총 문자열의 길이 범위를 넘어갈 경우 에러 발생.

indexing 하나의 문자 추출 

slicing 부분 문자열 추출 [시작:끝] : 시작~끝-1번째 문자열 추출

 

문자열 함수

- str.upper('a')

- str.replace('a','b') : a를 b로 치환

- str.split() : 문자열을 특정 문자로 구분하여 리스트 만듬

- str.format()

더보기

<format 예시>

A=apple

B=banana

a = 'I like {} and{}.'.format(A, B) 
print(a)

-> l like apple and banana.

 

3. 리스트 & 튜플

- 리스트

복수개의 값을 담을 수 있는 데이터 구조

  • list - mutable 생성된 후에 변경 가능
  • tuple - immutable 생성된 후에 변경 불가능

list() / str.split() : 리스트 변환

리스트 인덱싱 & 슬라이싱 : 문자열과 동일

 

리스트 함수

- list.append() : list 끝에 항목 추가

- list_a.extend(list_b) / list_a += list_b : 리스트를 연장

- list.insert(인덱스, 추가할 항목) : 원하는 위치에 항목추가

- list.remove() : 항목 삭제. 항목 이름이 겹치면 첫번째 항목만 삭제

- list.pop(인덱스) : 아이템 반환 후 삭제

- list.index(값) : 값의 인덱스 반환

- in 키워드 : value in [list] list안에 value있는지 T/F 출력

- list.sort(reverse=T/F) : list 자체를 내부적으로 정렬

- list.sorted() : list 정렬된 복사본 반환

 

- 튜플

생성된 후에 변경이 불가능하다.

tuple unpacking : 튜플의 값을 차례대로 변수에 대입

예) a, b, c, d = 100, 200, 300, 400

 

4. 딕셔너리

키와 값을 갖는 데이터 구조 {'키', 값}

순서(인덱스) X

키는 내부적으로 hash값으로 저장

a = {'Korea : ', 1, 'Seoul:', 2 }

기존에 키가 존재하면 새로운 값으로 없데이트

존재하지 않으면 새로운 키, 값 생성

 

딕셔너리 함수

- dic_a.update(dic_b) : dic_a와 b를 결합. 키가 켭치면 dic_b 값으로 overwrite된다.

- del dic['a'] / dic.pop['a'] : dic에 'a' 키삭제

- dic.clear() : 딕셔너리 모든 값 초기화

- 100 in dic : 딕셔너리 키 값() 존재 확인

- dic['key'] : 키의 값 접근. 키 없으면 에러 발생

- dic.get('key') : 키의 값 접근. 키 없으면 None 반환

- dic.keys() : 키만 반환

- dic.values() : 값만 반환

- dic.items() : 키, 값을 튜플형태로 반환 [('키',값)]

- set(dic) : 딕셔너리의 key만 활용. 집합으로 반환

더보기

<set operations>

a=[1,1,2,3,3,4,1,5]

b=set(a)

print(b)

-> {1,2,3,4,5}

 

a=[1,2,3]

b={2,3,4}

a.union(b) # 합집합

-> {1,2,3,4}

a.intersection(b) # 교집합

-> {2,3}

a.difference(b) # 차집합 a-b

-> {1}

a.issubset(b) # 부분집합

-> False

 

5. if elif else문 / for문 / loop 중첩 / 가변길이 인자 / Lambda 함수

- loop 중첩

더보기

<loop 중첩문 예시>

a = [1, 2, 4] 
for i in a: 
    for j in a: 
        print(i * j)

->1

2

4

2

4

8

4

8

16

 

- variable length argument (가변길이 인자)

전달되는 파라미터의 개수가 고정적이지 않은 경우 사용

  • *args : 파라미터를 튜플의 형태로 전달
  • **kwargs : 파라미터를 딕셔너리 형태로 전달(네임드 파라미터). **가 붙은 경우에는 키워드 파라미터로 인식. 즉, 함수 호출 시, 파라미터의 이름과 값을 함께 전달 가능.
더보기

<**kwargs 예시>

def test2(**kwargs) : # key word arguments

 for key, value in kwargs.items():

  print('key:' , key, ', value : ', value)

 

test2(a=1)

-> key: a , value : 1

 

- lambda 함수

단일문으로 표현되는 익명함수

1회성으로 만들어서 쓸 때 사용

더보기

<lambda 함수 예시>

square = lambda x:x**2 
square(5)

->25

 

add2 = lambda x,y:x+y 
add2(10, 20)

->30

 

strings = ['bob', 'charies', 'alexander3', 'teddy']

strings.sort(key = lambda s:len(s))

print(strings)

->['bob', 'teddy', 'charles', 'alexander3']

 

*** lambda가 유용하게 사용되는 3가지 대표적 함수

1. filter : 특정 조건을 만족하는 요소만 남기고 필터링

2. map : 각 원소를 주어진 수식에 따라 변형하여 새로운 리스트를 반환

3. reduce : 차례대로 앞 2개의 원소를 가지고 연산. 연산의 결과가 또 다음 연산의 입력으로 진행됨. 따라서 마지막까지 진행되면 최종 출력은 한 개의 값만 남게 됨

더보기

<filter / map / reduce 예시>

nums = [1, 2, 3, 6, 8, 9, 10, 11, 13, 15] 
list(filter(lambda n:n%2==0, nums))

->[2, 6, 8, 10]

 

list(map(lambda n:n**2, nums))

->[1, 4, 9, 36, 64, 81, 100, 121, 169, 225]

 

list(map(lambda n:n%2==0, nums))

->[False, True, False, True, True, False, True, False, False, False]

 

6. 모듈 임포트 import 

import :  해당 모듈 전체를 import

 

from import : 해당 모듈에서 특정한 타입만 import

 

as : 모듈 import시, alias (별명) 지정가능

더보기

<import 예시>

import math

math.cos(100)

->0.8623188722876839

 

from math import cos

cos(100)

->0.8623188722876839

 

import math as m

m.cos(100)

->0.8623188722876839

 

대표적 모듈

1. requests : HTTP 요청/응답 모듈

2. numpy : 수치해석 모듈

3. pandas : 데이터 분석 모듈

더보기

<requests 모듈>

import requests

resp = requests.get('http://naver.com')

resp.text

 

7. class 선언하기

객체를 생성하기 위해선 객체의 모체가 되는 class를 미리 선언해야한다.

더보기

<class 예시>

# Person class 선언

class Person:
    pass

# Person class 사용

bob = Person()
cathy = Person()
print(type(bob), type(cathy))

-><class '__main__.Person'> <class '__main__.Person'>

 

a = list() 
b = list() 

print(type(a), type(b))

-><class 'list'> <class 'list'>

__init__(self)

생성자, 클래스 인스턴스가 생성될 때 호출됨

self인자는 항상 첫번째에 오며 자기 자신을 가리킴

이름이 꼭 self일 필요는 없지만, 관례적으로 self로 사용

생성자에서는 해당 클래스가 다루는 데이터(멤버 변수 또는 속성)를 정의

method 정의

멤버함수. 해당 클래스의 object에서만 호출가능

객체 레벨에서 호출되며, 해당 객체의 속성에 대한 연산을 행한다.

class inheritance 상속

기존에 정의해둔 클래스의 기능을 그대로 물려받을 수 있다.

기존 클래스에 기능 일부 추가/변경하여 새로운 클래스 정의

기존 클래스 Parent, Super, Base class

상속받는 새 클래스 Child, Sub, Derived class

더보기

<__init__ method 예시>

class Person: 

# __init__ 정의
    def __init__(self, name, age):

     print('self: ', self)

     self.name = name

     self.age = age

# method 정의

    def sleep(self):

     print('self:' , self)

     print(self.name, '은 잠을 잡니다.')

 

a = Person('Aaron', 20)

b = Person('Bob', 30)

 

print(a)

print(b)

->

self: <__main__.Person object at 0x000002B033085700>

self: <__main__.Person object at 0x000002B0330D6820>

<__main__.Person object at 0x000002B033085700>

<__main__.Person object at 0x000002B0330D6820>

 

a.sleep()

b.sleep()

->

self: <__main__.Person object at 0x000002B033085700>

Aaron 은 잠을 잡니다.

self: <__main__.Person object at 0x000002B0330D6820>

Bob 은 잠을 잡니다.

 

# class inheritance 상속

class Employee(Person): 

    def __init__(self, name, age):

     self.name = name

     self.age = age

 

bob = Employee('Bob', 25)

bob.sleep()

->

self: <__main__.Employee object at 0x000001E0D8D81780>

Bob 은 잠을 잡니다.

 

 

 

 

'Stay Hungry Stay Foolish > Data Analysis' 카테고리의 다른 글

R studio cloud  (2) 2021.08.19
Python packages - Numpy & Pandas  (2) 2021.02.13

댓글