Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

BASEMENT

Python 5주차 본문

Programming/Python

Python 5주차

2_34 2020. 7. 26. 19:06

 

데이터 구조

 

1. 자료구조

 

1) 자료구조

 

데이터와 그들의 관계를 구조화 한 것. 데이터를 효율적으로 조직, 저장하는 방법

  • 선형형태 : 리스트(List), 스택(Stack), 큐(Queue)
  • 비선형형태 : 트리(Tree), 그래프(Graph)

 

2. 배열

 

같은 데이터형을 가지는 변수들의 집합

각 배열의 원소는 [ ] 안에 index를 이용하여 참조함

배열 원소의 시작번호는 0

배열의 각 원소는 메모리에 연속적으로 저장

배열의 이름은 메모리상에서 인덱스번호 0을 가지는 원소의 주소를 나타냄

 

  • 1차원 배열 : [ ] 한개로 구성
  • 2차원 배열 : [ ][ ] 두개로 구성. 첫번째는 행(row) 인덱스, 두번째는 열(column) 인덱스를 나타냄

 

3. List

 

자료를 순서대로 저장하는 자료구조, 즉 순서를 가진 항목들의 모임

 

1) List 구현 방법

 

1-1) 배열을 이용하는 방법

  • 구현이 간단함
  • 삽입, 삭제시 오버헤드
  • 항목의 개수 제한

1-2) 연결리스트를 이용하는 방법

  • 배열에 비해 구현이 복잡함
  • 삽입, 삭제가 효율적
  • 크기가 제한되지 않음

2) 연결리스트(Linked List)

  • 리스트의 항목들을 노드(node)라는 곳에 분산하여 저장
  • 항목 + 다음 항목을 가리키는 주소로 구성
  • 노드 : 데이터 필드 + 링크 필드
  • 노드의 물리적 순서와 논리적 순서가 일치하지 않을 수 있음
  • 헤드 포인터 : 리스트의 첫번째 노드를 가리키는 변수
  • 노드의 생성 : 필요할때마다 동적 메모리 생성을 이용하여 노드 생성
  • 종류 : 단순연결리스트, 이중연결리스트, 원형연결리스트

연결리스트 구현 코드

class Node:
    size = 0
    def __init__(self,item,link):
        self.item = item
        self.next = link
        Node.size += 1

def insert_front(item):
    global head
    if Node.size != 0:
        head = Node(item,head)
    else:
        head = Node(item,None)

def print_list():
    p = head
    while p:
        if p.next != None:
            print(f'{p.item} --> ', end='')
        else:
            print(p.item)
        p = p.next

if __name__ == "__main__":
    insert_front('apple')
    insert_front('cherry')
    insert_front('banana')
    print_list()

 

4. 스택 (Stack)

 

  • 의미 : 쌓아놓은 더미
  • 후입선출 (LIFO : Last-In First-Out, FILO : First-In Last-Out) : 가장 최근 들어온 데이터가 가장 먼저 나감
  • 스택의 연산 : 삽입(push), 삭제(pop)
  • 스택의 용도 : 입력과 역순의 출력이 필요한 경우 (ex: 에디터에서 되둘리기 기능, 함수호출에서 복귀주소 기억)

5. 큐 (Queue)

 

  • 선입선출 (FIFO : Frist-In First-Out) : 먼저 들어온 데이터가 먼저 나가는 자료구조
  • 삽입과 삭제는 FIFO순서를 따르며, 삽입은 큐의 후단에서, 삭제는 전단에서 이루어짐
  • 선형큐 : 배열을 선형으로 사용하여 큐를 구현함 -> 문제점이 많아 사용 x
def enqueue(que,item):
    que.append(item)

def dequeue(que):
    if len(que) != 0:
        que.pop()
    else:
        print("Empty Queue")

def queue_print(que):
    print("front --> ", end='')
    for i in range(len(que)):
        print(f'{que[i]}', end='\t')
    print("<--rear")

if __name__ == "__main__":
    q = []
    enqueue(q, 'apple')
    enqueue(q, 'banana')
    enqueue(q, 'grape')
    queue_print(q)
    dequeue(q)
    dequeue(q)
    queue_print(q)   

cf) 덱 (Deque)

  • double-ended queue의 줄임말로써 큐의 전단과 후단에서 모두 삽입과 삭제가 가능한 큐
  • 스택과 큐를 동시에 구현하는데 사용
from collections import deque

dq = deque()
print()
item = ['berry', 'banana']
dq.append('apple')
dq.appendleft('pear')
dq.appendleft(item)
print(dq)
dq.pop()
dq.popleft()
print(dq)
item = ['cherry', 'mango']
dq.extend(item)
print(dq)

 

7. 트리 (Tree)

 

  • 노드(node) + 간선(edge)
  • 계층적인 구조를 나타내는 자료구조
  • 비선형 구조
  • 트리는 부모-자식 관계의 노드들로 이루어짐

1) 트리에서의 위치에 따라

  • 루트노드 : 부모가 없는 노드. 트리의 첫 노드
  • 단말노드 : 자식 노드가 없는 노드
  • 내부노드 : 자식노드가 있는 노드

2) 노드 사이의 관계에 따라

  • 부모노드
  • 자식노드
  • 선조노드 : 루트노드부터 부모노드까지의 경로상에 있는 모든 노드
  • 후손,자손노드 : 특정 노드의 아래에 있는 모든 노드
  • 형제노드 : 같은 부모노드의 자식노드

3) 노드의 속성

  • 레벨 : 루트노드로부터의 거리
  • 높이 : 루트노드부터 가장 먼 거리에 있는 자식노드의 높이
  • 차수(degree) : 한 노드가 가지는 자식노드의 개수

cf) 포레스트(forset) : 트리의 집합. 루트노드가 여러개 일 수 있음

 

4) 트리의 성질

  • 한 노드에서 다른 노드로 가는 경로는 유일
  • N개의 노드를 갖는 나무는 N-1개의 간선을 가짐
  • 순환(cycle)이 존재하지 않음
  • 모든 노드는 연결되어 있음
  • 간선을 하나 자르면 두개의 트리로 분리됨

5) 이진트리(binary tree)

  • 모든 노드가 최대 2개의 서브트리를 가지고 있는 트리
  • 모든 노드의 차수가 2이하 -> 구현하기가 편리함
  • 이진트리에는 서브트리간의 순서가 존재함
  • 높이가 h인 이진트리인 경우, 최소 h개의 노드를 가지며 최대 2^h-1개의 노드를 가짐
  • n개의 노드를 가지는 이진트리의 높이는 최대 n이거나 최소 log2(n+1)
  • 류 : 포화 이진 트리, 완전 이진 트리, 편향 이진 트리

 

 

파이썬 데이터 처리 및 분석

 

시작 전에, Anaconda 설치

www.anaconda.com/download  

 

Anaconda | Individual Edition

Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.

www.anaconda.com

window/macOS/Linux 중 본인의 컴퓨터 OS에 맞는 설치파일 선택

OS선택 후, 32 또는 64bit 선택 (tensorflow등의 기계 또는 딥러닝 라이브러리 사용목적이라면 64bit 선택)

주의) tensorflow등의 AI모듈 사용 시 Anaconda3 설치 시 파이썬 3.7 설정

 

 

1. Anaconda

 

수학, 과학분야의 패키지로 튜닝한 파이썬

Jupiter notebook, python이 자동으로 설치됨

 

Anaconda prompt 사용

conda create 가상환경이름 python=파이썬버전  ->  Anaconda 설치 후, 가상환경 만들기

conda activate 가상환경이름  ->  가상환경 activate

conda install jupyter notebook  -> jupyter notebook 설치해주기 

conda install numpy  ->  numpy 모듈 설치

conda install nb_conda -> 주피터 노트북에서 python의 패키지를 관리할 수 있도록 해주는 명령어. 가상환경에서 필요한 패키지를 주피터 노트북의 conda에서 관리 가능

 

* Anaconda navigator : 가상환경에 모듈 설치가 쉬움

 

 

2. Jupyter notebook

 

코드 실행 : ctrl + enter

코드 실행 후 셀 생성 : shift + enter

셀 생성 : b

kernel - restart and clear output -> 코드 결과 지워줌 (kernel idle 상태가 검은색일 경우 비워줘야 함)

 

* 주피터 노트북 실행 시 시작 위치 변경 방법

anaconda prompt 열기

jupyter notebook -generate-config 명령을 통해 jupyter_notebook_config.py 생성하기

생성된 위치로 이동 후 문서편집기를 사용하여 파일 열기

문서찾기로 notebook_dir 찾기

c.NotebookApp.notebook_dir = '원하는 폴더 위치'

 

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

Python 6주차 - 2  (0) 2020.07.26
Python 6주차 - 1  (0) 2020.07.26
Python 4주차 - 2  (0) 2020.07.12
Python 4주차 - 1  (0) 2020.07.12
Python 3주차 - 2  (0) 2020.07.12
Comments