Pandas 내의 시간 데이터를 다루는 방법에 대해 알아보겠습니다. 시간데이터(datatime64) 타입으로 변경하기 시간데이터로 바꿔야만 되는 것들이 있습니다. 리샘플링을 할 경우에 시간데이터가 반드시 필요합니다. 그런데 보통 데이터를 받아오면 시간을 나타나는 데이터가 object로 표현되어 있습니다. 이럴 때 시간데이터로 타입으로 변경할 수 있습니다. 먼저 데이터를 불러오겠습니다. import pandas as pd df 다음과 같은 데이터를 가져와 보겠습니다. df.dtypes 타입을 보면 object 입니다. 이 object를 시간데이터인 datatime64 타입으로 변경하겠습니다. df['Data'] = pd.to_datetime(df['Data'],format='%Y-%m-%d %H:%M:%S..
시간 데이터를 DataFrame으로 처리할 때 날짜 단위를 바꿔가면서 분석하고 싶을 때가 있습니다. 다행이도 판다스를 이용하면 주기를 연(Yearly), 월(Monthly), 주(Weekly), 일(Daily) 단위로 축약해서 할 수가 있습니다. 바로 resample() 함수를 사용해서 시간 간격을 재조정합니다. resample() 함수를 사용해 데이터를 가공하는 과정을 리샘플링(Resampling)이라 하는데요. 크게 두가지 부류로 나뉩니다. 업 샘플링 : 분 단위, 초 단위로 샘플양을 증가시키는 리샘플링 다운 샘플링 : 몇 일, 몇 달 단위로 샘플양을 감소시키는 리샘플링 샘플양을 증가시키는 방향으로 가면 업 샘플링이고 감소시키면 다운 샘플링입니다. 보통 일 단위 자료를 많이 쓰기 때문에 분 단위로 간..
데이터를 수집하면 전산오류나 사람의 실수로 결측치가 발생하게 됩니다. 특히 외부에서 데이터를 가져오면 더욱 그럴 수 밖에 없는데 결측치를 방치하고 알고리즘에 데이터셋을 넣게 되면 아무리 좋은 알고리즘이라도 성능이 떨어지고 엉뚱한 결론에 도달할 수도 있습니다. 돈과 관련된 것이라면 아주 치명적인 결과를 만들수도 있습니다. 따라서 본격적인 분석을 하기 전에 결측치를 먼저 처리하는 과정이 필요합니다. 결측치를 처리하는 방법을 몇 가지 소개하겠습니다. 먼저 간단한 DataFrame을 만들겠습니다. import numpy as np import pandas as pd r1 = [1,np.nan,2,3] r2 = [4,5,np.nan,6] r3 = [7,8,9,np.inf] df = pd.DataFrame({'r1..
링크드 리스트를 업그레이드한 더블 링크드 리스트를 살펴보겠습니다. 더블 링크드 리스트는 양방향으로 포인터를 연결한 이중 구조로 이루어져 있습니다. 하나의 데이터당 Prev pointer, Next pointer를 가지게 됩니다. 구조상 양쪽으로 데이터를 연결하게 되어서 양방향으로 탐색하기가 좋습니다. 즉, 탐색이 좀 더 쉬워집니다. 다만, 기본적인 링크드 리스트보다 데이터당 한자리를 더 써야 하므로 좀 더 무겁습니다. 구현도 링크드 리스트보다 좀 더 복잡합니다. 그렇지만 양방향으로 탐색이 가능하다는 장점과 큰 틀로 구현 해놓으면 관리를 할 수 있는 수준이기에 많이 쓰입니다. 달라지는 점은 prev pointer 가 있다는 것이고 그에 따른 코드가 추가된다는 것 빼고는 링크드 리스트와 다를 게 없습니다. ..
링크드 리스트에 대해서 살펴보겠습니다. 링크드 리스트는 연결 리스트라고도 하는데요. 데이터의 연결을 링크로 하는 방식으로 쉽게 구현할 수 있는 배열 같은 경우 연결된 공간에 순차적으로 데이터를 나열했다면 링크드 리스트는 데이터를 화살표로 연결해서 이어나가는 구조를 가집니다. 따라서 데이터가 떨어져 있어도 화살표로 연결이 가능합니다. 각 데이터의 구성은 다음과 같습니다. 노드(Node) : 데이터 저장 단위(데이터값, 포인터) 포인터(Pointer) : 각 노드에서 다음이나 이전의 노드의 연결 정보를 넣은 공간 그림으로 보면 A,B,C 가 데이터값, 점이 그려진 공간이 포인터가 됩니다. 구조 형성을 위해 공간을 미리 확보하지 않아도 되고 중간 지점에 추가 삭제가 가능하고 빠르다는 장점이 있지만 각 노드마다..
파이썬 내장 함수 iter,next 에 대해 알아보겠습니다. 그에 앞서 이터레이터에 대해 살짝 설명하고 파이썬으로 구현을 해보겠습니다. 이터레이터(Iterator) 반복을 이용해 어떤 처리를 수행하는 객체를 이터레이터(Iterator)라고 합니다. 여기서 파이썬에서 반복을 사용하는 모든 툴을 Iteration Tool/Context라 합니다. 대표적으로 for, comprehesion, map 등이 있습니다. 툴만 가지고는 구현이 어렵겠죠? 실제 이터레이션을 수행할 공간의 객체를 뜻하는 Iterable Object(file, list, generator,..) 와 수행처리 객체인 Iterator Object(__next__)가 있습니다. Iterable Object는 모든 객체가 다 되는것이 아니고 반복..
스택은 큐(Queue)에 반대되는 정책으로 가장 나중에 쌓은 데이터를 가장 먼저 빼내는 데이터 구조이고 한쪽에서만 데이터를 넣고 뺄 수 있는 구조입니다. 큐 : FIFO(First-In, Last-Out) or LILO(Last-In, Last-Out) 스택 : LIFO(Last-In, First-Out) or FILO(First-In, Last-Out) 큐(Quene)가 생소하다면 다음 포스팅을 보시기 바랍니다. [자료구조] 큐(Queue) 큐(Queue) 구조에 대해서 포스팅하겠습니다. 큐의 기본구조는 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 구조를 뜻합니다. 예를 들어, 만약 그림처럼 알파벳을 순서대로 넣는다고 하면 순서대로 seong6496.tistory.com 스택구조는 상자를 쌓는 것과 비슷..
큐(Queue) 구조에 대해서 포스팅하겠습니다. 큐의 기본구조는 가장 먼저 넣은 데이터를 가장 먼저 꺼내는 구조를 뜻합니다. 예를 들어, 만약 그림처럼 알파벳을 순서대로 넣는다고 하면 순서대로 데이터를 넣고 데이터를 꺼낼때 순서대로 나오게 됩니다. 그림에선 데이터를 처음 꺼내면 A가 나오게 되고 A는 꺼냈으니깐 데이터 내에 없고 다시 데이터를 꺼내면 B가 다음 순서로 나오게 됩니다. 이를 FIFO(First-In, First-Out) 또는 LILO(Last-In,Last-Out) 라 합니다. 제가 그림에 Enqueue, Dequeue를 써 넣었는데 큐 구조에서 쓰이는 용어로 의미는 아래와 같습니다. Enqueue : 큐에 데이터를 넣는 기능(Put) Dequeue : 큐에서 데이터를 꺼내는 기능(Get)..
요즘 구조에 대해 공부하고 있는데 파이썬을 가지고 자료구조에 대해 정리를 하고 있습니다. 그 중에 가장 쉬운 배열부터 정리하려 합니다. 배열(Array)은 데이터를 나열하고, 각 데이터를 인덱스에 대응하도록 구성한 데이터 구조로 파이썬에서는 리스트 타입이 배열로 이루어져 있습니다. 주로 데이터를 효율적으로 관리하기 위해서 사용되는데요. 저장을 할때 순차적으로 저장을 해서 인덱스가 존재합니다. 인덱스는 첫위치를 0으로 시작해서 순차적으로 번호를 매기게 됩니다. 그래서 모든 데이터에 번호가 매겨져 인덱스로 단번에 데이터에 접근을 할 수 있는 장점을 가지고 있습니다. 데이터 d a t a 인덱스(index) 0 1 2 3 표에서처럼 'data'라는 데이터를 넣으면 배당된 자리에 순차적으로 한개씩 데이터가 들어..
대체로 컴퓨터 언어를 쓰면 기본적으로 제공하는 데이터 타입이 있습니다. 이를 built-in type이라고 합니다. 파이썬에도 마찬가지로 built-in type이 있습니다. 직접 데이터 타입을 만들어서 쓸 수도 있지만, 기본적으로 제공하는 데이터 타입을 쓰는 게 좋은 것은 효율적으로 쓸수 있게 구조를 만들어 놓아서 프로그램을 설계할때 편하게 코딩할 수 있습니다. 그리고 다른 언어들도 비슷하게 built-in type 이 구성되어 있어서 협업을 할 때 효율적입니다. 다음 표에 핵심 데이터 타입을 정리했습니다.('Learning python'에 있는 표를 다시 적어보았습니다) Data type Example Numbers 1234, 3.1415, 3+4j, 0b111, Decimal(), Fraction(..
다들 그러는지 잘 모르겠지만 저는.. 단순하게 pandas.read_excel으로 xlsx를 불러오면 다음과 같은 오류가 뜹니다. import pandas as pd pd.read_excel('./area.xlsx') 그래서 방법을 찾다 알게 된 것이 engine을 바꾸면 된다해서 한 번 바꿔봤습니다. xlrd 가 업데이트 되면서 xlsx 지원을 하지 않는다고 하니 판다스의 기본 engine이 xlrd로 설정되어 있나봅니다. 이유가 분명해서 그런지 생각보다 간단히 해결이 되었습니다. 그냥 engine을 openpyxl로 바꾸면 됩니다. 먼저 openpyxl 모듈이 설치되어 있어야 합니다. 설치가 안 되있다면 다음과 같이 입력해 설치를 합시다.(주피터가 아닐경우 !는 빼야 실행이 됩니다) !pip inst..
이번 포스팅에서는 DataFrame 에서 row를 선택하는 방법에 대해 살펴볼까 합니다. 크게 두가지 방법이 있는데요. 둘 다 인덱스를 사용하는 것은 같지만 DataFrame 에서 사용하는 인덱스를 우리가 설정할 수 있기 때문에 설정을 한 것으로 찾느냐 아니면 DataFrame 에 저장되어 있는 인덱스 번호로 찾느냐는 차이입니다. 데이터 상황에 맞춰서 두가지를 혼용해서 쓸 수 있습니다. 살펴볼 것은 다음과 같습니다. 1. loc 2. iloc 아래와 같은 DataFrame을 가져왔습니다. 2019년 1월 기준 코스피 200 종목입니다. 현재 인덱스가 정해지지 않아서 숫자로 표기되어 있습니다. '종목명' 으로 인덱스를 설정하겠습니다. df = df.set_index('종목명') 1. loc loc를 사용해..
DataFrame 에서는 원하는 인덱스를 설정하거나 리셋시킬 수 있습니다. 총 설정방법은 2가지와 리셋 1가지를 정리할 예정인데요. 다음과 같습니다. 1. 직접 배정 해주는 방법 2. set_index를 이용해 원래 있는 열을 인덱스로 배정하는 방법 3. reset_index를 이용해 인덱스 리셋 1. 직접 배정해 주는 방법 직접 배정해주려면 data와 갯수가 맞아야 합니다. 다음과 같은 메소드를 씁니다. DataFrame.index= list DataFrame.columns = list list로 설정된 값이 인덱스로 들어가게 됩니다. import numpy as np import pandas as pd ddf = pd.Dataframe(np.arange(0,16).reshape(4,4)) ddf dd..
딕셔너리는 key : value 값으로 되어있습니다. key값을 넣어주면 value 값이 나오는 구조입니다. 그런데 value 값으로 key 값을 찾아야 할 경우가 종종 생기지만 dict 명령으로는 불러올 수가 없습니다. 코드로써 해결해야 합니다. 그럴 때 쓰는 방법입니다. 저는 두가지 방법을 알고 있습니다. 1. dict을 뒤집어서 key 와 value 자리를 바꾼다. 2. for 문을 활용한다. 1. dict을 뒤집어서 key와 value 자리를 바꾼다. 첫번째 방법은 map을 활용해 dict을 뒤집어 새로운 dict으로 생성하는 방법입니다. 먼저 pratice_dict을 만들겠습니다. 종목명이 key, 종목코드가 value 입니다. >>> pratice_dict = {} >>> pratice_dic..
아나콘다를 설치하게 되면 Navigator라는 아이콘이 생깁니다. Navigator를 이용하면 가상환경을 보다 쉽게 관리할 수 있습니다. Navigator를 실행시키면 Environments 라는 탭을 볼 수 있습니다. Environments 를 누르면 현재 만들어진 가상환경을 볼 수 있습니다. ① Create를 선택하면 가상환경을 만들 수 있습니다. Create 버튼을 누르면 다음과 같이 나옵니다. 새 가상환경의 이름을 입력하고 파이썬 버젼을 선택하고 'Create' 를 누르면 가상환경이 생성됩니다. ② Clone은 기존 가상환경을 복제합니다. 다른 가상환경은 다 복제가 가능하지만 base(root)는 안됩니다. ③ Remove 는 가상환경을 제거합니다. ④ Navigator에서는 각 모듈을 업데이트 ..