파이썬
-
데이터 사이언스: Pandas 시리즈(Series)와 데이터 프레임(Data Frame) 공부하기!데이터 사이언스 2020. 7. 21. 00:52
Pandas에서 제공하는 라이브러리인 시리즈(Series)와 데이터프레임(DataFrame)을 공부하겠습니다. 판다스에는 일차원 데이터를 위한 시리즈(Series)와 고차원 배열을 다루기 위한 데이터프레임(Data Frame)이 있습니다. 그리고 이 판다스를 통해서 SQL, 엑셀파일, csv파일을 가져와 데이터를 활용할 수 있죠 시리즈는 1차원 배열의 데이터를 다루는 자료구조입니다. 시리즈와 1차원 넘파이(numpy)배열은 유사하지만 판다스에서 더 많은 기능을 제공합니다. 시리즈는 파이썬의 딕셔너리와 유사해서 이와 연관지으면 이해하기 쉽습니다. 예를 들어 딕셔너리에서 key와 value가 있다면 시리즈에서는 index와 data가 있습니다. 다만 시리즈의 경우에는 행렬로 표현..
-
데이터 사이언스: numpy 연산과 통계 값들 구하기(표준편차, 분산, 평균, 중앙값...)데이터 사이언스 2020. 7. 18. 19:45
기존 파이썬 리스트의 연산과는 달리 numpy 배열의 연산은 배열 원소들간의 사칙 연산입니다. 각 위치마다 정해진 값을 따로 연산하기 때문에 numpy배열의 모양(shape)이 다른 경우에는 연산이 되지 않아 오류가 뜹니다. 따라서 numpy배열끼리의 사칙연산을 코딩하기 위해서는 우선적으로 각 배열의 shape을 확인하여야 합니다. import numpy as np x = np.arange(10) y = np.arange(10,20) print(x) print(y) [0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19] numpy 라이브러리를 추가해주고 리스트 x와 y를 만들어줍시다. x + 2 array([ 2, 3, 4, 5, 6,..
-
데이터 사이언스: numpy 기본사용법과 인덱싱(Indexing) 공부하기!데이터 사이언스 2020. 7. 18. 04:13
numpy란? numpy는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리할 수 있도록 지원을 해주는 파이썬의 라이브러리이다. import numpy as np np_array = np.array([1, 2, 3, 4, 5, 6]) np_array array([1, 2, 3, 4, 5, 6]) numpy를 사용하기 위해서 import numpy as np를 해줍니다. 주로 numpy를 매번 쓰기 힘드니까 편하게 np라고 선언해줍니다. (국룰입니다) np_array.shape = (2, 3) np_array array([[1, 2, 3], [4, 5, 6]]) (2, 3)의 크기로 행렬을 재배치해서 나타냅니다. np_array.shape = (m,n)이라 할 때, np_a..
-
알고리즘: 그리디 알고리즘(Greedy Algorithm) 공부하고 예제 한번 풀어보자!알고리즘 2020. 7. 13. 13:51
그리디 알고리즘이란(Greedy Algorithm)이란? 뜻 그대로 탐욕스런 알고리즘이라고 생각하면 쉽다. 미래를 내다 보지 않고 당장 눈 앞에 보이는 최적의 선택을 하는 방식이다. 그리디 알고리즘은 간단하고 빠르지만, 항상 최적의 답이 보장되지는 않는다. 그래서 보통 최적의 답이 필요 없는 경우에 사용하지만 그리디 알고리즘이 최적의 답을 보장해 주는 문제도 있다. 그리디 알고리즘은 다음과 같은 조건을 만족할때 최적의 답을 보장한다. (다음과 같은 조건이 없어도 그리디 알고리즘을 사용할 수는 있다.) → 최적 부분 구조가 있을 때 문제를 부분 문제로 나누어 해결하여 기존 문제의 답을 찾아낼 수 있는 경우 → 탐욕적 선택 속성을 갖고 있을 때 다이나믹 프로그래밍처럼 답의 모든 부분을 고려하지 않고 탐욕적 ..
-
알고리즘: 분할 정복(Divide And Conquer) 예제 공부하기! (합병 정렬, 퀵 정렬)알고리즘 2020. 7. 10. 17:39
분할 정복(Divide and conquer)이란? 어떤 문제를 해결하는 알고리즘에서 원래 문제를 성질이 똑같은 여러 개의 부분 문제로 나누어 해결하여 원래 문제의 해를 구하는 방식. 분할 정복은 다음과 같은 절차를 거친다. 1. Divide 2개 이상의 작은 문제들로 쪼갠다. 2. Conquer 나누어진 작은 문제들을 푼다. 3. Combine 나누어 해결한 문제들을 합친다. 1. 1부터 n까지의 합 (1 + 2 + 3 + ... + n) def consecutive_sum(start, end): if start == end: return start mid = (start + end) // 2 return consecutive_sum(start, mid) + consecutive_sum(mid + 1,..
-
알고리즘: 시간 복잡도(Time complexity)와 공간 복잡도(Space complexity)알고리즘 2020. 7. 1. 21:53
1. 시간 복잡도란? 시간 복잡도란 문제를 해결하는데 걸리는 시간과 입력함수의 관계를 나타내는 것입니다. 쉽게 말해서 문제 해결에 시간이 얼마나 걸리냐? 를 정량적으로 나타낸것입니다. 그래서 보통 시간 복잡도가 적은 알고리즘을 빠른 알고리즘 시간 복잡도가 큰 알고리즘을 느린 알고리즘이라고 합니다. 알고리즘의 시간복잡도 표기법은 점근표기법(Big-O)을 통해서 나타내는데 오늘 여러가지 경우의 시간 복잡도과 공간 복잡도를 알아보겠습니다. 주로 O(1), O(lgn), O(n), O(nlgn), O(n2^2), O(n^3) 정도가 많이 사용되고, 나머지는 흔치 않습니다. def my_print(my_list): print(my_list) my_print([2, 3]) my_print([2..
-
알고리즘: 선형탐색 알고리즘(Linear search algorithm)과 이진탐색 알고리즘(binary search algorithm)알고리즘 2020. 7. 1. 15:26
탐색 알고리즘이란 방대한 데이터에서 목적에 맞는 데이터를 찾아내기 위한 알고리즘입니다. 여러가지 탐색 알고리즘이 있지만 대표적으로 선형탐색 알고리즘과 이진탐색 알고리즘에 대해서 공부하겠습니다. 두 알고리즘 다 정렬되어있다는 가정하에 알아보겠습니다. 1. 선형탐색 알고리즘(Linear search algorithm) 순서대로 하나씩 값을 찾아보는 알고리즘입니다. 원하는 값을 발견하면 더이상 탐색하지 않습니다. def linear_search(element, some_list): # some_list의 안에 element가 있으면 인덱스를 리턴 for i in range(0, len(some_list)): if some_list[i] == element: return i # 왼쪽 값부터 시작해서 하나씩 비교..