python

    [Pandas] csv 파일 읽기 및 쓰기

    [Pandas] csv 파일 읽기 및 쓰기

    MovieLens 영화 데이터 -> ml-latest-small.zip -> movies.csv https://grouplens.org/datasets/movielens/ Read Data csv 파일 읽기 import pandas as pd pd.read_csv('[파일 경로]/movies.csv') Pandas를 통해 해당 경로의 파일을 읽을 수 있다. read_csv가 아닌 read_excel, read_pickle 등 다양한 파일 형식을 읽을 수 있다. csv 파일을 읽으면 기본적으로 1열에 0부터 시작하는 index를 부여한다. movies = pd.read_csv('[파일 경로]/movies.csv') 만약, 파일을 읽을 때 변수에 저장하면, 해당 파일을 변수를 통해 여러 가지 분석을 할 수 ..

    cmp_to_key 정렬

    functools 라이브러리를 사용해서 정렬 시 직접 비교 함수를 만들 수 있다. import functools def comparator(a,b): if a>b: return 1 elif a==b: return 0 else: return -1 data=[5,3,1,2,4] data.sort(key=functools.cmp_to_key(comparator)) print(data) 리스트에서 두 원소 a, b를 비교할 때 a가 b보다 크다면 1, 같다면 0, 작다면 -1을 리턴해서 비교한 값을 기반으로 오름차순으로 정렬하는 방식이다. lambda로 정렬하기 까다로운 조건에 대해서 위 방법을 사용하면 편리하다. cumtom한 comparator를 만들 수 있다는 장점이 있다.

    우선순위 큐

    우선순위 큐

    우선순위 큐 우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조이다. 예를 들어 어러 개의 물건 데이터를 자료구조에 넣었다가 가치가 높은 물건 데이터부터 꺼내서 확인해야 하는 경우에 우선순위 큐를 이용할 수 있다. 우선순위 값을 표현할 때는 일반적으로 정수형 자료형의 변수가 사용된다. 예를 들어, 물건 정보가 있고, 이 물건 정보는 물건의 가치와 물건의 무게로만 구성된다고 가정해보자. 그러면 모든 물건 데이터를 (가치, 물건)으로 묶어서 우선순위 큐 자료구조에 넣을 수 있다. 이후에 우선순위 큐에서 물건을 꺼내게 되면, 항상 가치가 높은 물건이 먼저 나오게 된다.(최대 힙 기준) 대부분의 프로그래밍 언어에서는 우선순위 큐 라이브러리에 데이터의 묶음을 넣으면, 첫 번째 원소를 기준으로 우선순위를 설..

    이진 탐색 트리

    이진 탐색 트리

    이진 탐색 트리 트리 자료구조 중에서 이진 탐색이 동작할 수 있도록 고안된, 효율적인 탐색이 가능한 자료구조이다. 이진 탐색 트리는 다음과 같은 특징을 가진다. 부모 노드보다 왼쪽 자식 노드가 작다. 부모 노드보다 오른쪽 자식 노드가 크다. 실제 코딩 테스트에서 이진 탐색 트리 자료구조를 구현하도록 요구하는 문제는 출제 빈도가 낮다. 이진 탐색 트리가 이미 구현되어 있다고 가정하고 이진 탐색 트리에서 탐색하는 과정만 알아도 충분하다. 탐색은 루트 노드에서부터 자식노드로 내려가면서 찾는 원소값과 비교해가면 된다.

    그래프

    그래프 그래프는 노드(node)와 간선(edge)로 표현되며 이때 노드를 정점(vertex)이라고도 말한다. 또한 두 노드가 간선으로 연결되어 있다면 '두 노드는 인접하다(Adjacent)'라고 표현한다. 프로그래밍에서 그래프는 크게 2가지 방식으로 표현할 수 있다. 인접 행렬(Adjacent Matrix) 인접 리스트(Adjacent Lint) 인접 행렬 2차원 배열에 각 노드가 연결된 형태를 기록하는 방식이다. 파이썬에서는 리스트를 사용한다. 연결되어 있지 않은 노드끼리는 무한의 비용이라고 작성한다. 인접 행렬 방식 예제 INF=999999999 # 무한의 비용 선언 # 2차원 리스트를 이용해 인접 행렬 표현 graph=[ [0,7,5], [7,0,INF], [5,INF,0] ] 인접 리스트 각 노드..

    재귀함수

    재귀함수

    재귀함수 스택을 함수에 적용시킨 개념이다. 자기 자신을 다시 호출하는 함수이다. def recursive_function(): print('재귀 함수를 호출합니다.') recursive_function() recursive_function() 그러나 위 코드처럼 재귀함수를 실행하면 무한 루프에 빠지게 되고 결국 재귀의 최대 깊이를 초과했다는 오류 메시지가 뜬다. 재귀함수는 컴퓨터 내부에서 스택을 통해 적재되기 때문에 메모리 한도치를 초과하게 되면 에러가 뜨는 것이다. 결국 재귀함수를 사용할 때는 다음과 같이 종료조건을 명시해주어야 한다. def recursive_function(i): if i==100: return print('재귀 함수를 호출합니다.') recursive_function(i+1) re..

    스택 & 큐

    스택 stack=[] stack.append(5) stack.append(2) stack.append(3) stack.append(7) stack.pop() stack.append(1) stack.append(4) stack.pop() print(stack) print(stack[::-1]) 결과 [5,2,3,1] [1,3,2,5] 스택은 그냥 리스트의 형태로 사용할 수 있다. 큐 from collections import deque queue=deque() queue.append(5) queue.append(2) queue.append(3) queue.append(7) queue.popleft() queue.append(1) queue.append(4) queue.popleft() print(queue..

    Python 문법

    알고리즘을 위한 기본적인 파이썬 문법(몰랐던 부분만 기록) 자료형 수 자료형 10억 -> 1e9와 같이 거듭제곱 표현 가능 컴퓨터는 실수를 정확히 표현하지 못한다. 그래서 실수 값을 제대로 비교하지 못해서 발생하는 에러들을 방지하기 위해 round()를 사용하는 것을 권장한다. round(실수, 소수점) : 반올림 a = round(765.456, 2) print(a) # 결과 765.46 파이썬은 '/' 연산시 실수형 취급, 몫은 따로 '//' 연산자 사용 '**' : 거듭제곱 연산자 int의 범위 따로 고려x, int(data, radix)로 형변환 가능 ASCII(ord()) 문자(chr()) : 서로 간 형변환 리스트 자료형 빈리스트: list() or [ ], 초기화 : a=[0]*n 슬라이싱 ..