프로그래밍시 데이터들로부터 빈도를 측정하는 것은 매우 자주 있는 일 입니다. 이런 경우 프로그래밍언어에 따라서 다르 긴 하지만 hash 또는 dictionary 형태의 변수를 활용하여 데이터에 따른 빈도를 Count 할 수 있습니다.

저는 요즘 증권사 API를 사용해 보고 있고 주로 Python 을 많이 활용하는데 아래 주소에서 Counter() 에 대한 설명이 자세히 나와 있더군요.

https://data-flair.training/blogs/python-counter/

아래 코드와 같이 너무나 간단하게 데이터의 빈도를 세고 빈도 횟수에 따라 정렬하는 등의 작업을 할 수 있습니다. for 문 등을 사용하여 iteration 을 하고 싶은 경우 dict() 를 통해 dictionary 로 만든 후에 사용 할 수 있더군요. 아무튼 굉장히 편리 할 것 같습니다.

from collections import Counter


c=Counter(['a','b','c','a','b','a'])

print(c)

print(c['a'])

print(c.most_common())

for key,val in dict(c).items():

    print(key, val)

위 코드의 실행 결과는 아래와 같습니다.

Counter({'a': 3, 'b': 2, 'c': 1})

3

[('a', 3), ('b', 2), ('c', 1)]

('a', 3)

('b', 2)

('c', 1)



Python 사용시 dictionary 안에 dictionary 를 계속 해서 추가하고 싶은 경우가 있습니다.

 

마치 우리가 사용하는 탐색기의 폴더 트리 구조와 같이 말이죠 .

 

Python에는 collections 이라는 모듈에서 deque 를 비롯하여 다양한 데이터 타입을 제공하는데 이중에 defaultdict 이라는 타입을 제공하고 있습니다.

 

이를 활용하면 위에 설명한 Tree 구조도 쉽게 만들 수 있습니다.

 

Tree() 구조에 대해서는 아래 주소에서 소개합니다.

 

https://gist.github.com/hrldcpr/2012250

 

위 주소에서 소개를 하므로 사용법에 대해서는 간단히 예를 들어보죠.

 

위 주소에서는 json.dumps 를 사용하여 사용하는 데이터 타입에 대해 console 에 나타냈는데, for 문을 통해서도 각 값들에 반복적으로 접근 할 수 있습니다.

 

위 코드를 실행해보면 아래와 같은 결과가 나옵니다.

 

{"harold": {"username": "hrldcpr"}, "handler": {"username": "matthandlersux"}}

harold username hrldcpr

handler username matthandlersux




MATLAB 은 보통 수치 분석의 용도로 많이 사용 됩니다. 


비싼 툴이니 만큼 어려운 수학들을 굉장히 쉽게 처리 할 수 있어서 너무나 좋은 툴이라고 생각을 했죠~

 

반면에 MATLAB 을 사용하면서 아쉬웠던 부분도 있었는데~ 


hash 또는 dictionary 형태의 데이터 타입에 대한 지원이었습니다. 그런데.. 비싼놈은 뭔가 다르더군요.

 

있었는데 제가 몰랐던 것이었습니다. ㅡㅡ;

 

2008b 버전부터 Map Data Structure 를 제공해 주고 있더군요. 아~~ 왜 이걸 지금 알았지.. ㅡㅡ;

 

hash 나 dictionary 형태의 데이터 구조는 요즘과 같이 검색이 일반화된 시대에 더욱더 광범위하게 사용되는 데이터 타입이라고 생각이 되는데요~

 

바로 key 와 value 의 형태로 자료를 저장해서 key 만으로 자료를 찾을 수 있게 해주는 데이터 타입입니다.

 


 

각 나라들의 수도를 저장하는 데이터 타입을 예로 해서 설명해 보겠습니다.

 

아래는 예로 설명하기 위한 나라와 수도에 대한 표 입니다. 


 나라

수도 

Korea

Seoul 

USA

Washington  

Japan

Tokyo

China 

Beijing 










위 표에서 key 는 나라로 하겠습니다.

 

위 표에 대한 데이터의 정의는 아래와 같이 합니다.

 

Map_ContCapi= containers.Map({'Korea', 'USA', 'Japan', 'China'}, {'Seoul','Washington','Tokyo', 'Beijing'});

 

이후에 프랑스의 수도 파리를 추가 하고 싶다면 ~ 요렇게 합니다. 굉장히 직관 적이죠~

 

Map_ContCapi('France')='Paris';

 

Map_ContCapi 라는 map objecy 의 키를 알고 싶을 때는 멤버 함수인 keys 라는 함수를 이용합니다.

 

Map_ContCapi.keys 하면 결과는 요렇게 나옵니다.

   

ans =

 

'China' 'France' 'Japan' 'Korea' 'USA'

 

value 를 알고 싶을때는? Map_ContCapi.values 하면 되고요~ 아래와 같이 나오죠~

 

ans =

 

'Beijing' 'Paris' 'Tokyo' 'Seoul' 'Washington'

 

이제 가장 중요한 찾기 인데요~

 

찾기야 너무나 간단하죠~

 

S='USA' ;

if isKey(Map_ContCapi,S)     % Map_ContCapi 에 USA 라는 키가 정의되어 있다면~

    fprintf('%s 의 수도는 %s 입니다. \n',S, Map_ContCapi(S))

end

 

command 창에 결과는 요렇게~~ 나옵니다.

 

USA 의 수도는 Washington 입니다.

 

좀더 자세한 설명은 MATLAB help 문서를 참조 하시길~


+ Recent posts