티스토리 뷰


처음으로 파이썬을 만져본다....콘솔창에서 틱틱 적는게 불편해서
에딧플러스에서 설정해서 사용하고 있다. 흠 이렇게 하는게 맞나;;;--;;;아무튼

엔트로피를 계산하라...상당히 막연한 개념이다 왜하는지는...솔직히 잘모르겠다..ㅠ(난..공학도가아니다..)

아무튼 시작해보자.
간단하게 엔트로피란 것이 무엇인지 알고가자.

열역학적 엔트로피(entropy)는 열역학적 계 상태 함수 가운데 하나로 독일의 물리학자 루돌프 클라우지우스 1850년대 초에 엔트로피의 수학적 개념을 도입했다. 자연계는 엔트로피가 낮은 상태에서 높은 상태인 무질서로 변화한다.

음...그래...간단하게 무질서도를 나타낸다고 생각하면 될 듯하다.
무질서한 확율을 계산한다고 보면 될듯하다..... 친절하게 이렇게 공식도 나와 있다.


간단하게 동전을 던질때 엔트로피를 계산해보자면 앞면 0.5 뒷면 0.5 이렇게 동등하게 나올 확율이 있다.
p(x)에 확율을 넣어서 계산해보면  0.5(log0.5)+ 0.5(log0.5) = -log0.5 = log2 가 된다.

그럼 밑이 볼츠만상수(통계적 현상과 실제 자연 현상 사이의 어떤 관계가 성립할 때, 그 관계를 수치적으로 잘 맞도록 해 주는 역할, 즉 로그의 밑 같은 것에 해당한다.)일때 로그2는 1이라는 수치가 나오게 된다. 결국 엔트로피는 1이다. 아래 도표를 보면 더 이해하기가 쉽다. 동전의 엔트로피를 예로 든다면 0.5일때 확율이 반반이니 가장 엔트로피가 높다고 할 수 있다.

 


.........잘못 이해하고 있었다............
단순히 엔트로피 ( 0~ 1) 사이의 혼잡도라고 생각했는데 그게아니라.;;
정보엔트로피는 해당 문자열을 몇비트에 날릴 수 있는지 알려주는 것이다 ㅠ

이제 본론으로 들어와서 파이썬으로 짜보도록 하자.
내가 계산할 엔트로피는 오바마대통령의 연설문을 받아와서 각 문자의 아스키코드값을 이용 계산해서 전체 문자열의 엔트로피를 계산하려고 한다.
1. txt 파일에 있는 문자열을 가져와야 한다.
2. 가져온 문자를 가지고 각 아스키코드 값에 맞춰서 카운트 한다.
3. 총 갯수에서 각 아스키코드값을 계산해서 더한 후
4. 엔트로피를 출력한다.


import math
f = open('test.txt', 'r') #오바마연설문이 든 파일을 읽어온다 씨랑똑같네 -_-;
data = f.read()  #데이타를 읽어온다음~
size = len(data) * 1.0  #문자열의 크기를 알아오는데 형변환을 위해 1.0을 곱하고
result = 0  #엔트로피를 받을 변수
arr = []  #각 문자 갯수를 받을 배열
for i in range (0, 128):  #0~127개의 아스키코드값 돌아라
 arr.append(data.count(chr(i)))  #배열에 추가하는데 각 문자 아스키값더해가면서 자동 카운트 해라
 str = "%c %d"%(chr(i), arr[i])  #한번찍어보자~printf라고 생각하면 될듯
 print str  #뿌려보고
 if arr[i] != 0:  #카운트값이 0이면 계산안해도되고~
  result += arr[i]/size * math.log(arr[i]/size,2)  #확율 계산하고 밑수는 볼츠만 상수로써 전체 수를 나타냄
result = result * -1.0  #마지막으로 식에서 -1* 안해준거 해주면 끝 ~!
print result
#결과는 0.3이 나온다 각문자의 엔트로피를 계산한것이다 크게 높지않은 것으로 봐서 특정 알파벳 이 자주 사용된다는 것을 알 수 있다. 뭐 당연히 아스키코드값에 잘안쓰는 것들이 들어있을 테니까 `ㅡ`;;

처음 파이썬을 다뤄봤는데 크게 불편한점은 없었다 물론-_-;;;씨하다가 갑자기 하려니..난감하기도 했지만
곧 익숙해지겠지뭐 ㅠ






 

댓글