데이터에서 특정 컬럼을 추출해야 하는 경우

  • 기본으로 awk를 사용하면 seperator는 " "(공백)으로 들어가기 때문에 -F오션을 사용해서 내가원하는 delimter를 설정할 수 있다.
  • print $를 사용하면 되는데, index는 1부터 시작이다

$ awk -F "\t" '{print $5}' data.txt.sample

  • reference
    • https://stackoverflow.com/questions/2609552/how-to-use-as-awk-field-separator

외장하드가 읽기만 가능할때, 외장하드가 쓰기가 불가능?

삼성 외장하드 P3을 사용하고 있는데, macOS에서 read-only라는 ...? 폴더도 생성을 할 수 없었다
문제 해결을 위해서 별도의 추가 앱이 필요하다. (다른 사람들은 극단적으로 포매을 해야 한다고... 따라하지마셔요)
Mounty는 윈도우에서 NTFS로 포맷된 외장하드를 읽기/쓰기를 지원 가능하도록 해준다.

  • 다운로드
    • http://enjoygineering.com/mounty/#

다운을 받고 설치하면, 추후에 외장하드가 mount가 되면 읽으시겠냐고 물어보면 '응'이라고 눌러주면 끝
그리고 위쪽에 Mounty의 아이콘을 통해서 Finderd에서 오픈이 가능하다.

하지만 여기서 Finder에서가 아닌 다른곳에서 열기 위해서 경로를 찾으면 Mount된 외장하드가 보이지 않는다.
이럴때는 간단하게 symbolic link를 사용하면 문제 해결

보통 macOS에서 mount된 storage는 /Volumes 하위에 존재한다.

$ ln -s /Volumes/<마운트 디스크 이름> ~/Desktop/Mount

위와 같이 명령을 치고 나면, ~/Desktop에 Mount라는 폴더가 보이고,
그 폴더가 이제 마운트된 디스크를 가리키기 때문에 바로 사용이 가능하다 :)

Kubernetes

  • open-source
  • features
    • automatic binpacking
    • horizontal scaling
    • automated rollouts and rollbacks
    • self-healing
    • service discovery and load balancing
    • secret and configuration management
    • storage orchestration
    • batch execution

Kubernetes

features

  • 멀티플 호스트 전체에서 컨테이너를 오케스트레이션
  • 하드웨어를 더 효과적으로 활용하여 엔터프라이즈 애플리케이션을 실행하는 데 필요한 리소스를 극대화
  • 애플리케이션 배포 및 업데이트를 제어하고 자동화
  • 스토리지를 장착 및 추가해 스테이트풀(stateful) 애플리케이션을 실행
  • 컨테이너화된 애플리케이션과 해당 리소스를 즉시 확장
  • 선언적으로(Declaratively) 서비스를 관리함으로써, 배포한 애플리케이션이 항상 배포 목적대로 실행
  • 자동 배치, 자동 재시작, 자동 복제, 자동 확장을 사용해 애플리케이션 상태 확인과 셀프 복구를 수행

kubernetes 필요한 이유

  • 실제 프로덕션 애플리케이션은 멀티플 컨테이너에 걸쳐 있으며 이러한 컨테이너는 멀티플 서버 호스트에 배포
  • Kubernetes는 이러한 워크로드를 위해 규모에 맞는 컨테이너를 배포하는 데 필요한 오케스트레이션 및 관리 기능을 제공
  • Kubernetes 오케스트레이션을 사용하면 멀티플 컨테이너를 포괄하고, 클러스터 전체에서 컨테이너를 스케줄링하고, 컨테이너를 확장하고, 시간 경과에 따라 컨테이너의 상태를 관리할 수 있는 애플리케이션 서비스를 구축할 수 있습니다.
  • Kubernetes는 종합적인 컨테이너 인프라를 제공할 수 있도록 네트워킹, 스토리지, 보안, 텔레메트리, 기타 서비스와 통합

kubernetes architecture kubernetes architecture

파이썬에서 데이터를 읽을때, 보통은 모든 데이터를 메모리에 올리고 사용하는 경우가 많다.
하지만, 작은 사이즈의 데이터는 가능하지만 큰 사이즈의 데이터를 메모리에 올리고 사용하는게 가능하다면?
피시에 감사하자. 큰 데이터셋을 사용하는 경우인 데이터 학습 시킬 학습 데이터, 통계를 낼때 데이터 등등..
이때는 데이터를 built-in 함수인 iterator, generator를 이용을 해야만 한다. MUST!!

Iterator, Generator

자 interation을 어떻게 쓰는게 좋은가?

python for x in range(10): print x

range(10)은 리스트를 생성하는것과 동일하다. [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] list를 iteration object로 생성이 가능한데,

iteration = iter(range(10))

만약 위의 값을 for문으로 돌리면 아래와 같이 사용이 가능하다.

으로 FIFO으로 출력이 가능하다.

여기서 중요한게 있는데, 파일입출력을 예로 들어보겠다. 만약에 파일입출력을 해서 간단한 for-loop을 돌리는 프로그램을 작성한다고 가정할때, 위의 range를 통해서는 모든 파일의 내용을 메모리에 올려야하기 때문에 OOM이 날 가능성이 높다.

보통 large dataset을 사용하는 Tensorflow나 Keras와 같은 플랫폼에서도 데이터를 iteration을 통해 읽는 경우가 많다. (학습하는 데이터의 양이 매우 많은 경우)

그렇다면 range를 사용하지 않고, 어떻게 모든 파일을 처리할수 있을까? 그 답은 generator를 사용하면 된다.

위에서 사용한것처럼 g의 object를 사용하면 되는데, next(g)를 통해서 큐형식으로 데이터를 뺄수도 있다.

위에서 사용한 yield는 데이터를 주고, 받는 역할을 한다고 생각하면 된다. 하나의 통로가 있고 그 통로에 데이터를 밀어넣어주고 받아주는 역할 위에서 for문 내부에 있는 yield를 통해서 i+3의 값을 어딘가 버퍼에 넣어주고, generator를 통해서 하나씩 값을 던져준다.

위 예제에서 만약 for-loopwhile-loop으로 교체하면 어떻게 될까? 위에서 언급하듯이 yield는 값을 가져다 주기도 하지만, 넣기도 가능하다. 하지만 사용시에 주의해야할 점이 있는데 일단 아래와 같이 작성하면 결과는 잘 나온다.

위에서 만약 next(g)를 사용하지 않고 g.send(2)를 바로 사용하면 어떻게 될까? TypeError: can't send non-None value to a just-started generator 이런 에러가 난다. 그 이유는 yield에 이미 1이라는 값이 들어있고, 그 값을 내보내기 위해서 대기하고 있습니다. 근데 그 상태에서 g.send(2)를 해버리면, 이미 yield의 1이 들어있기 때문에 에러가 난다. 그렇기 때문에 next(g)를 한번 수행하고, 그 이후에 While-loop을 사용하기 때문에 g.send(2)를 무수히 수행이 가능!

파일 읽기

보통 작은 파일은 아래와 같이 데이터를 읽을 수 있다. 간단하게 읽기가 가능한데, 극단적으로 나의 메모리 사이즈가 4GB라고 할때, 1GB의 데이터를 읽을때 아마도 OOM이 날것이다.

```python f_in = file('text.txt', 'r')

for line in f_in.readlines(): print line[:-1] # 강제개행이 들어가니까... ```

위 문제를 해결하기 위해서는 generator를 이용해서 파일을 읽으면 OOM없이 파일을 쉽게 읽을 수 가 있다. large dataset을 읽을때도 거의 모든 방법이 아래와 같다. 전체의 데이터를 메모리에 올리지 않고, 한줄 씩 읽는 방법이니, 큰 데이터는 아래와 같이 사용하자.

오늘의 부동산 주제는 "시군구별 규모 거래량"에 대해서 알아보도록 하겠습니다.

그 중에서도 "해운대" 지역에 대해서 알아볼까합니다.

차트

아래 차트는 "해운대의 시군구별 규모 거래량" 를 나타낸 내용입니다.

image

  • 차트설명
    • x축의 값은 시군구
    • y축의 값은 전월세 거래량을 의미
    • 왼쪽 위에는 범례(legend)

부동산 관련 데이터 문의는 "direcision@gmail.com"

관련 데이터 분석은 유투브 채널

image

+ Recent posts