분류 전체보기 461

[Pandas - Python] Reshaping with Hierarchical Indexing - stack(), unstack() (계층적 인덱싱의 구조 변환)

data = pd.DataFrame(np.arange(6).reshape((2, 3)), index=pd.Index(['Ohio', 'Colorado'], name='state'), columns=pd.Index(['one', 'two', 'three'], name='number')) data numberonetwothree state Ohio012 Colorado345 result = data.stack() result state number Ohio one 0 two 1 three 2 Colorado one 3 two 4 three 5 dtype: int32 result.unstack() numberonetwothree state Ohio012 Colorado345 여기까지는 지금까지 공부한 내용으로..

[Pandas - Python] Concatenating Along an Axis - concat() (특정 열, 행을 기준으로 연결하는 법)

데이터 프레임, 혹은 시리즈나 numpy object를 사슬처럼 연결하는 메소드인 concatenate()와 concat()에 대해 알아봅시다. arr = np.arange(12).reshape((3, 4)) arr array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) np.concatenate([arr, arr], axis=1) array([[ 0, 1, 2, 3, 0, 1, 2, 3], [ 4, 5, 6, 7, 4, 5, 6, 7], [ 8, 9, 10, 11, 8, 9, 10, 11]]) 보시다시피 axis = 1을 줌으로써, 열을 기준으로 합쳤습니다. 이제 Series에 대해서 연결해봅시다. s1 = pd.Series([0, 1], index=['a',..

[Pandas - Python] Merging on Index - merge(), join()

만약 column을 기준으로 합치려고 하는데, 합치려고 하는 컬럼이 인덱스에 있다면 어떻게 해야할까요? 우선 두 개의 데이터 프레임을 만들었습니다. left1 = pd.DataFrame({'key': ['a', 'b', 'a', 'a', 'b', 'c'], 'value': range(6)}) right1 = pd.DataFrame({'group_val': [3.5, 7]}, index=['a', 'b']) left1 keyvalue 0a0 1b1 2a2 3a3 4b4 5c5 right1 group_val a3.5 b7.0 이때 right1의 인덱스에 a,b라는 key가 들어가있습니다. 이를 해결하기 위해서는 right_index = True를 해주면 됩니다. pd.merge(left1, right1, l..

[Pandas - Python] Database-Style Dataframe Joins - merge() (데이터 베이스 병합하기)

두 개의 데이터 프레임을 생성해봅시다. df1 = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)}) df2 = pd.DataFrame({'key': ['a', 'b', 'd'], 'data2': range(3)}) df1 keydata1 0b0 1b1 2a2 3c3 4a4 5a5 6b6 df2 keydata2 0a0 1b1 2d2 이때 두 개의 데이터 프레임을 병합하는 merge() 함수를 사용해봅시다. pd.merge(df1, df2) keydata1data2 0b01 1b11 2b61 3a20 4a40 5a50 어떤 column을 기준으로 병합할지 명시하지 않았지만, 알아서 두 개의 데이터 프레임에 overlap..

[Pandas - Python] Indexing with a DataFrame's Columns - set_index() (데이터 프레임의 열로 인덱싱 하는 법)

frame = pd.DataFrame({'a': range(7), 'b': range(7, 0, -1), 'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'], 'd': [0, 1, 2, 0, 1, 2, 3]}) frame abcd 007one0 116one1 225one2 334two0 443two1 552two2 661two3 원본 데이터 입니다. 이때 c, d를 인덱스로 설정하고 싶다면, frame.set_index(['c', 'd']) 하면 됩니다. frame2 = frame.set_index(['c', 'd']) frame2 ab cd one007 116 225 two034 143 252 361 보시다시피 c와 d를 기준으로 인덱스가 설정되었습니다. ..

[알고리즘 - 이론] NP-Complete, NP-Hard

P = NP임을 증명하려면 NP에 속한 각각의 문제에 대해 문제를 풀 수 있는 다항 시간 알고리즘을 찾아야 합니다. 하지만 이 작업은 단순화할 수 있습니다. 즉, 많은 문제 중에서 하나만 다항 시간 알고리즘을 찾으면 됩니다. 하나만 다항 시간 알고리즘을 찾으면, 나머지 문제들도 마찬가지로 P에 속하게 되는 NP-Complete에 대해 알아보겠습니다. 우선 알아보기 전에 이론의 기초가 되는 CNF-Satisfiability에 대해 알아봐야 합니다. 그리고 마지막으로 지금까지 결정 문제에 대해서만 NP, P를 따졌는데, 이제는 최적화 문제까지 확장한 NP-Hard에 대해서도 알아보겠습니다. 1. CNF-Satisfiability CNF ~ 는 Conjunctive Normal Form의 약자로, 논리식 사이..

[알고리즘 - 이론] The Theory of NP (NP 이론)

이전 글의 Halting Problem을 기억하시나요? 이처럼 진위 판별을 불가능한 문제가 있고, 진위 판별이 불가능한 문제가 있습니다. 간단하게 진위 판별 문제(결정 문제)로 NP를 제한하면 이론을 전개하기가 쉬워집니다. 우선 결정 문제를 한 번 알아봅시다. 1. Decision Problem 그러기 위해선 우선 지금까지 해온 모든 알고리즘들, Decision Problem과 Optimization Problem에 대해 생각해봐야 합니다. 최적화 문제란 답이 최적해라는 말입니다. 하지만 최적화 문제는 결정 문제로 만들 수 있습니다. 참고로 결정 문제는 yes or no 두 가지 정답만 내놓습니다. 예를 들어서, TSP 문제를 생각해봅시다. 우리는 최소 거리를 구하는 알고리즘을 구현했지만, 만약 특정 거..

[알고리즘 - 이론] Intractability Algorithm (다루기 힘든 알고리즘)

새로운 알고리즘을 개발할 때, 이 알고리즘이 다루기 어렵다는 것은 무엇을 의미할까요? 현실에서 다루기 어렵다는 것은 취급하기 또는 작업하기 어렵다로 정의하지만, 컴퓨터 과학에서 다루기 어렵다는 것은 "해당 문제를 다항시간(Polynomial-time)에 풀 수 없다"를 의미합니다. 즉 알고리즘의 Worst Case W(n) = O(p(n)) 만족하는 다항식 p(n)이 없다는 뜻입니다. 다항 시간안에 풀 수 있는 알고리즘은 2n, 3n^3, n lg n등이 있습니다. n lg n은 n에 대한 다항식은 아니지만, n lg n < n^2에 의하여 다항시간 알고리즘으로 분류합니다. 따라서 컴퓨터 과학에서 문제가 다루가 힘들다는 것은 특정 알고리즘의 성질이 아니라 문제의 성질이 되어야 합니다. 사실 최악 시간 복..

[Pandas - Python] Hierarchical Indexing (계층적 인덱싱)

Hierarchical Indexing 계층적 인덱싱이란, a라는 인덱스 안에 1, 2, 3이라는 인덱스가 있고, c라는 인덱스 안에 또 1, 2, 3가 있는 그런 형태입니다. 예를 들어 홍길동이라는 이름이 있다고 가정해봅시다. 물론 남자 같은 이름이지만 여자가 있을 수도 있습니다. 남자 인덱스 안에 [홍길동, 24] 이런 식으로 넣고, 여자 인덱스 안에 [홍길동, 23] 이런 식으로 넣을 수 있습니다. 이때 사용하는 것이 Hierarchical Indexing 입니다. data = pd.Series(np.random.randn(9), index=[['a', 'a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'], [1, 2, 3, 1, 3, 1, 2, 2, 3]]) data a 1 -0..

[Pandas - Python] Computing Indicator/Dummy Variables - get_dummies() (더미 데이터 만들기)

Computing Indicator/Dummy Variables - get_dummies() 왜 더미 데이터를 만들까요? 머신러닝에 데이터를 넣기 위해서는 수치화가 필수입니다. 머신러닝은 월요일, 화요일 같은 문자열을 모르기 때문입니다. 만약에 월요일이 1이고, 화요일이 2, 수요일이 3이라고 가정해봅시다. 월요일과 화요일, 수요일은 그 어떤 연관성도 없지만, 이를 수치화하면 1 + 2 = 3이라는 연관성이 생기게 됩니다. 월요일 + 화요일 = 수요일? 원래 데이터는 전혀 연관성이 없는데도 불구하고, 이를 수치화 시키면 연관성이 생겨버리게 됩니다. 이때 더미 데이터를 만듬으로써 그러한 문제를 방지해줍니다. 즉 One-Hot Encoding을 하는 것과 마찬가지라고 보면 될 것 같습니다. df = pd.D..