2016년 7월 23일 토요일

Python으로 Binary 파일을 읽고 Hex 형으로 표현하기

계기: Hardware 팀에서 Sensor Setting 하는 것을 자동화 하고 싶어한다.
방법: 1. Teraterm 의 명령어를 Script로 작성해서 자동 실행 한다.
        2. 1번을 위해 Sensor Setting 해야 하는 메모리 주소, 값의 리스트를 Binary 파일로 받아 TeraTerm Script로 자동 생성한다.


관련 코드
import binascii

binAllString = ""

with open("C:\\Users\\ADMIN\\Downloads\\info-523.bin", "rb") as f:
    byte = f.read(1)
    binAllString = binAllString + binascii.b2a_hex(byte)
    while byte != "":
        # Do stuff with byte.
        byte = f.read(1)
        hex_str = binascii.b2a_hex(byte)
        binAllString = binAllString + " " + hex_str
        
#print binAllString


binStringList = []

for s in range(0, len(binAllString), 48):
    print binAllString[s:s+48] + ""

세부 설명
Convert between binary and ASCII

Open file with "rb" (read binary)

Use b2a_hex function to use hexadecimal representation of the binary data

use String List( binAllString[s:s+48] ) to write script line every 48(16 hex values, 2digits-16bytes-16spaces)





2016년 7월 20일 수요일

python serial library 사용기 - 1

serial port 를 python에서 사용하기 위한 serial library 간단 사용기
천천히라도 원리를 이해하기 위함

import serial
설치 되어 있는 serial library import
ser = serial.Serial('COM5',115200,timeout=1)
port를 사용하기 위한 instance 생성
COM5’ = 사용할 COM port의 이름
115200 = 사용할 baud rate
1 = timeout(반응 없을면 종료) 시간
ser.write("hello")
지정된 port“hello” 문자열 씀
ser.readline()
지정된 port에서 EOL 문자 까지 값 읽음

메모
1. baud rate: 컴퓨터와 통신 장비 간에 직렬 데이터의 전송 속도를 나타내는 단위이고, 1초당 불연속 상태의 데이터 전송의 수를 말한다. [컴퓨터인터넷IT용어대사전]
2. python에서는 각 함수에 인자의 순서가 정해져 있으나 이름(timeout 과 같은)을 명시해서 입력하면 순서에 상관없이 사용할 수 있다.

2016년 7월 14일 목요일

Pandas 다루기 - Dataframe 값 접근/필터

Python에서 데이터 분석을 할 때 가장 편리한 것이 Pandas 라이브러리이고 가장 많이 사용하는 것이 Dataframe(2차원) 객체라고 이야기 하면서,
정작 필요할 때는 인터넷 검색으로 처음부터 다시 시작하고 있다는 것을 느끼고,
필수 적인것을 쓸 때마다 정리

1. Dataframe은 무엇인가: 2차원 배열로 row값(index), column값(header)를 가질 수 있는 자료구조, Pandas 라이브러리에 있다.

2. 어떻게 사용하는가 (  )
     'import pandas as pd' 라고 선언한 후에 사용한다.
     아래와 같이 df 를 만든다.

In [1]:
import pandas as pd
import numpy as np
In [2]:
dates = pd.date_range('7/14/2016', periods=8)
dates
Out[2]:
DatetimeIndex(['2016-07-14', '2016-07-15', '2016-07-16', '2016-07-17',
               '2016-07-18', '2016-07-19', '2016-07-20', '2016-07-21'],
              dtype='datetime64[ns]', freq='D')
In [3]:
df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D'])
df
Out[3]:
ABCD
2016-07-14-0.184950-0.8063921.494103-0.369560
2016-07-150.399724-0.063784-0.056321-0.007364
2016-07-16-0.626461-0.423751-0.0187030.087733
2016-07-171.198658-1.532482-0.2980020.634820
2016-07-180.312076-0.673361-0.141319-1.169763
2016-07-19-0.119623-0.293787-0.592312-1.167606
2016-07-20-0.1581412.5596730.949287-1.461863
2016-07-211.0424770.9689770.0507091.789358

     컬럼 A 에 접근하는 방법은 여러가지가 있다.
In [4]:
df['A']
Out[4]:
2016-07-14   -0.184950
2016-07-15    0.399724
2016-07-16   -0.626461
2016-07-17    1.198658
2016-07-18    0.312076
2016-07-19   -0.119623
2016-07-20   -0.158141
2016-07-21    1.042477
Freq: D, Name: A, dtype: float64
In [5]:
df.A
Out[5]:
2016-07-14   -0.184950
2016-07-15    0.399724
2016-07-16   -0.626461
2016-07-17    1.198658
2016-07-18    0.312076
2016-07-19   -0.119623
2016-07-20   -0.158141
2016-07-21    1.042477
Freq: D, Name: A, dtype: float64
In [6]:
df.ix[:, 0]
Out[6]:
2016-07-14   -0.184950
2016-07-15    0.399724
2016-07-16   -0.626461
2016-07-17    1.198658
2016-07-18    0.312076
2016-07-19   -0.119623
2016-07-20   -0.158141
2016-07-21    1.042477
Freq: D, Name: A, dtype: float64

     컬럼의 값으로 필터를 하려면 df 에 boolean(true, false) array를 주면 true만 볼 수 있다.
       아래 코드는 A 컬럼의 값이 0 보다 작을 경우만을 필터하여 보여준다.
In [7]:
df['A'] < 0
Out[7]:
2016-07-14     True
2016-07-15    False
2016-07-16     True
2016-07-17    False
2016-07-18    False
2016-07-19     True
2016-07-20     True
2016-07-21    False
Freq: D, Name: A, dtype: bool
In [8]:
df [ df['A'] < 0 ]
Out[8]:
ABCD
2016-07-14-0.184950-0.8063921.494103-0.369560
2016-07-16-0.626461-0.423751-0.0187030.087733
2016-07-19-0.119623-0.293787-0.592312-1.167606
2016-07-20-0.1581412.5596730.949287-1.461863





wxPython으로 여러개 파일 경로 가져오기(extract file paths with wxPython)

파일 여러개 가져오는 코드

The wx.App object must be created first!

배경: Anaconda 의 Spider IDE 에서 wxPython 코드 연습

연습 코드:
import wx

class Frame(wx.Frame):
    def __init__(self, title):
        wx.Frame.__init__(self, None, title=title, size=(350,200))

app = wx.App(redirect=True)
top = Frame("Hello World")
top.Show()
app.MainLoop()

에러 메시지: "The wx.App object must be created first!"

StackOverflow 에서 찾은 이유:
I suspect it's because you are attempting to run the example in an interactive interpreter session. The example is really a GUI application with an event loop, and it's not going to behave well when you repeatedly execute it in the same interactive session since cleanup of the previous app from the last run won't happen completely. Like you experienced, it will run once, but subsequent attempts fail. Such an example should definitely be run in its own dedicated interpreter that can completely exit when the GUI closes.
In Spyder, you can configure your script to run in a dedicated stand-alone interpreter without having to manually run in a separate external console. Open the file in the Spyder editor, hit F6 to open the Run Settings dialog, and then select the radio button for "Execute in a new dedicated Python interpreter". Now hit Run. Subsequent runs by using F5 will remember this configuration setting, and you'll get your example running in it's own interpreter with each repeated execution.

아마 당신은 연습코드를 interactive interpreter session(대화형 인터프리터 세션, 상호작용이 가능한 상태) 에서 실행한 것 같다. 예제는 루프문을 도는 GUI 응용 프로그램이고, 재 시작을 했을 때는 이전 실행 했던 것들이 아직 남아있는 상태 였을 것이다. 경험했던 대로, 한번을 잘 돌지만 다시 돌릴 때는 실패한다. 이런 프로그램을 실행할 때는 그 프로그램 만을 위한 인터프리터를 사용해야 한다.
스파이더 에서는, 하나의 프로그램만을 위한 인터프리터에서 실행할 수 있다. 스파이더 에디터에서, F6를 누르면 셋팅 다이얼로그가 열린다. 그리고 거기서  "Execute in a new dedicated Python interpreter" 라디오 버튼을 선택하면 된다. 이제부터 실행하는 것들은 그 프로그램만을 위한 인터프리터를 실행할 수 있는 것이다.

※ 기본 설정

※ dedicated Python interpreter 설정 후


2016년 7월 12일 화요일

일본 여행 계획시 필요한 것들


여름 휴가 때 와이프와 일본을 다녀 왔습니다.
준비는 와이프가 다 했지만; 준비 과정을 함께 했기 때문에 무엇이 필요하다는 걸 느낄 수 있었고, 앞으로 효율적으로 준비하기 위해서 정리 해 보았습니다.

큐슈의 사가현과 오이타 현을 다녀왔으니, 일부 지역이긴 하지만 일본 안에서는 어딜가든 비슷한 스타일일 것이라고 생각 됩니다.


일본 여행준비에 필요 한 것들
    1. 무엇을 볼 것인지(여행지)
    2. 잠은 어디서 잘 것인지(숙소)
    3. 어떻게 이동할 것인지(교통)


1. 여행지
    끌리는 것 나열해 보기

2. 숙소
    끌렸던 곳들과 가깝고, 숙소 자체의 수준은 어땠으면 좋겠는지 생각하기
    보통 편리한 비지니스 호텔(컴포트 호텔 등)이나 일본을 깊게 느낄 수 있는 료칸.
    비지니스 호텔 싸이트 - 칩티켓닷컴, 호텔닷컴
    료칸 - 료칸클럽, 호텔온센닷컴

3. 교통
    크게 JR(Japan Rail, 기차 & 전철) 과 Bus(고속, 시내)
    외국인을 위해서 3일에 어떤 지역 얼마 라고 하는 각종 Pass(승차권)들이 있는데,
  이번 여행한 북부 규슈 지역은 JR - 큐슈 JR pass, Bus - 산큐 Pass 가 있었습니다.
    JR 일지 Bus 일지, 아니면 둘 다 일지는 가고 싶은 곳들과 JR역, 버스 정류장의 위치를 보고 선택하면 됩니다.. 이번 여행 결과, 기본 JR Pass 를 선택하고 필요할 때만 버스표를 사는 것이 편하겠다는 것입니다.
    그리고 일본은 Google Map으로 위치, 거리, 대중교통(JR, Bus 둘 다)을 사용 했을 때 걸리는 시간 등이 정확하게 나오기 때문에 익숙하게 사용하면 됩니다.

4. 기타
   - 구글 맵 길찾기 예시


    - 큐슈 레일 패스: 공식, 블로그
    - 큐슈 산큐 패스: 공식, 블로그
                           

2016년 6월 26일 일요일

직접 만들어본 음식 간단 정리

직접 만들어본 음식들.
어떻게 만들었는지 기억.

개요
1. 비빔면
2. 크림 스파게티
3. 부타동


1. 비빔면
   - 재료: 면, 김치, 설탕, 멸치액젓, 고춧가루, 고추장, 간장

2. 크림 스파게티
  - 재료: 면, 베이컨, 소금, 버터, 양파, 브로콜리, 우유, 파마산 치즈

 
3. 부타동
    - 재료: 소스(설탕:간장:물 = 1:2:3~ + 양파와 파 불에 굽기, 생강 얇게 썰기->모두 섞어 20분 조리기), 얇은 삼겹살, 양파, 파, 매운 고추->소스와 함께 볶기, 밥, 달걀 노른자->먹기