Carpe diem

NLP 관련 석사 과정 재학 중 (2022.03 ~ )

Python/lecture of python 14

내가 보려고 만든 Pandas & Numpy

※ 내가 보려고 만들었기 때문에 설명이 친절하지 않을 수 있음 ※ 가끔가다 업데이트 진행 (최종 업데이트: 2022.10.04) 0. 파일 읽기, 변환, 저장 import pandas as pd ''' csv 파일 읽기 ''' pd.read_csv('filepath.csv') # [option] # sep(','), header(None, 0), names(['col', ..]), na_values('?'), nrows(num), index_col('col') # skiprows(num), skipfooter(num), low_memory(True, False), encoding('utf-8', 'cp949') # ''' excel 파일 읽기 ''' pd.read_csv('filepath.xlsx', e..

[Data Structure] 연결리스트와 트리 구조

1. 연결리스트 0) 정의 -> 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 데이터를 저장하는 자료 구조 1) 구현 · 노드 구현 class Node(): def __init__(self, data): self.data = data self.next = None · 연결리스트 구현 class LinkedList(): def __init__(self): self.head = None self.count = 0 # 맨 앞에 데이터 추가 def appendHead(self, Node): if self.head == None: # 연결리스트에 아무것도 없다면 self.head = node self.count = 1 else: self.count += 1 currentHead = self.Head sel..

[Data Structure] 최단 경로

1. 플로이드 와샬 알고리즘 0) 정의 -> 노드와 경로가 있을 때, 모든 노드를 최단 거리 (최소 비용)으로 연결하는 알고리즘 1) 작동 원리 -> 플로이드 와샬 알고리즘의 경우는 어떤 노드에서 시작해도 상관 x (모든 노드를 연결하는 것이 목적) · 가장 먼저 비용 배열과 방문 배열을 선언한다. · 0번 노드에서 시작 · 0번 노드에서 갈 수 있는 노드들: 1, 4, 5번 노드들 -> 비용 배열 갱신 · 방문하지 않은 노드들 중에서 최소값을 갖는 노드 (4번 노드)를 선택하여 시작 노드와 연결 · 새로 추가된 4번 노드에서 탐색 작업 실시 · 기존 값들과 비교하여 새로 연결될 경우의 필요 비용 계산, 최소값을 갖는 값으로 갱신 · 방문하지 않는 노드들 중 최소 비용을 갖는 1번 노드 방문, 4번 노드..

[Data Structure] 동적계획법

1. 동적계획법 0) 정의 -> 다이나믹 프로그래밍 (Dynami Programming, DP) 라고도 불리며, 하나의 큰 문제를 여러 개의 공통되는 작은 문제로 나누어서 작은 문제의 정답들을 결합하여 알고리즘을 푸는 과정 * 동적계획법을 풀어나감에 있어, 점화식의 공식을 찾아나가야 함 1) Bottom Up 방법 -> 작은 문제에서 큰 문제로 반복문 호출 def fib(n): fibList = [1, 1] for i in range(2, n + 1): fibList.append(fibList[i-2] + fibList[i-1]) return fibList[-1] 2) Top Down 방법 -> 큰 문제에서 작은 문제로 재귀 호출 def fib(n): if n == 0 or n == 1: return 1..

[Data Structure] 재귀함수

1. 재귀함수 0) 정의 -> 메소드 혹은 함수의 내부에서 자기자신의 메소드 혹은 함수를 다시 호출하는 함수 1) 구조 def solution(trump, loc): if 종료조건: pass return solution(trump, loc + 1) * 재귀함수 사용시에는 조건문을 활용하여 재귀함수 종료조건을 삽입해야 함 2) 사용 이유 -> 코드의 간결화 및 변수 사용 최소화 3) 재귀함수 깊이 * 재귀함수의 최대 깊이 기본값은 1,000이지만, 다음과 같이 옵션을 설정해주면 최대 깊이 제한을 변경 할 수 있다. import sys sys.setrecursionlimit(2500) 4) 활용 예시 Q. data = [3, 5, 8] 성분들의 합으로 표현할 수 있는 숫자의 경우의 수는 ? · 반복문을 활용..

[Data Structure] 해시

1. 해시 0) 정의 -> 데이터를 다루는 기법 중 하나로, 검색과 저장에 아주 유용한 구조이다. key-value 쌍으로 데이터를 저장함 1) 해시함수란 ? -> 임의의 길이를 갖는 메시지를 입력받아 고정된 길이의 해시값을 출력하는 함수 2) 해시 구현 방법 · 딕셔너리에 삽입 hash = dict() hash[1] = 'apple' hash['banana'] = 3 hash[(4, 5)] = [1, 2, 3] hash[10] = dict({1: 'a', 2: 'b'}) 위와 같은 형태로 해시 함수를 사용할 수 있지만, 집합과 배열은 해시 함수의 키 값으로 사용할 수 없다. (인덱스로 변환 불가) ex) hash({3, 5}), hash([3, 5]) -> 사용 x · 딕셔너리 값 추출 hash.pop..

[Data Structure] 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)

1. 깊이우선탐색 (DFS) 0) 정의 -> Depth First Search의 약자로, 하나의 경우의 수에 대해 모든 경우의 수를 조사하고 다음 경우의 수를 조사하며 해를 찾는 과정 1) 구조 2) 깊이우선탐색(DFS)과 스택 · 시작점: A, A부터 검사 · A가 정답이 아니므로, A 아래 가능한 경우의 수들을 모두 스택에 put · 스택에서 가장 위에 있는 B를 꺼내 (pop), B를 검사 · B가 정답이 아니므로, B 아래 가능한 경우의 수들을 모두 스택에 put ... · 이 과정을 반복하며 정답 데이터를 찾음 · 재귀를 통한 구현 graph = {1:[2, 3, 4]. 2:[5], 3:[5], 4: [], 5:[6, 7], 6:[], 7: [3]} def recursive_dfs(v, disc..