2016년 2월 26일 금요일

[데이터 분석] 데이터 준비하기 : 다듬기, 변형, 병합

 미국 농무부는 음식의 영양소 정보 데이터베이스를 제공하고 있습니다. 영국 해커 애슐리 윌리엄스는 이 데이터베이스를 Json 형식으로 웹사이트 (http://ashleyw.co.uk/project/food-nutrient-database)에 제공하고 있습니다.  각 음식에는 수자로 된 고유 ID와 영양소 및 제공량을 담고 있는 두 가지 리스트가 있으나 이 데이터 형식은 분석하기 좋지 않으므로 데이터 형식을 바꿔 보도록 하겠습니다. 
 웹사이트에서 데이터를 내려받은 다음 압축을 해제하고 선호하는 JSON 라이브러리를 사용해서 파이썬에 읽어오도록 하겠습니다.



 db에 있는 각 엔트리는 한 가지 음식에 대한 모든 정보를 담고 있는 사전형입니다. 'nutrients' 필드는 사전의 리스트이며 각 항목은 한 가지 영양소에 대한 정보를 담고 있습니다.


 사전의 리스트를 DataFrame으로 바꿀 때 추출할 필드의 목록을 지정해줄 수 있습니다. 음식의 이름과 그룹, id 그리고 제조사를 추출해 보도록 하겠습니다.



 그리고 value_counts 메서드를 이용해서 음식 그룹의 분포를 확인해 볼 수 있습니다.



 이제 모든 영양소 정보를 분석해 보도록 하겠습니다. 먼저 더 쉽게 분석을 하기 위해 각 음식의 영양소 정보를 하나의 테이블에 담아보겠습니다. 그러기 위해서는 몇 가지 과정을 거쳐야 하는데 먼저 음식의 영양소 리스트를 하나의 DataFrame으로 변환하고 음식의 id를 위한 칼럼을 하나 추가합니다. 그리고 이 DataFrame을 리스트에 추가합니다. 마지막으로 이 리스트를 concat 메서드를 사용해서 하나로 합쳐보겠습니다.


 문제가 없다면 nutrients는 다음과 같을 것입니다.


  총 389355개의 데이터가 있습니다. 하지만 이 DataFrame에는 중복된 데이터가 있으므로 제거하도록 하겠습니다.



 중복된 데이터를 제거하니 14179개로 줄어들었습니다. 중복된 데이터가 굉장히 많았네요. 그리고 'group'과 'description'은 모두 DataFrame 객체이므로 뭐가 뭔지 쉽게 알아볼 수 있도록 이름을 바꾸도록 하겠습니다.


 이 데이터를 음식 그룹과 영양소의 종류별 중간 값을 그래프로 그려 보도록 하겠습니다.


 좀 더 응용하면 각 영양소가 어떤 음식에 가장 많이 들어있는지 찾아볼 수도 있습니다.


위 코드의 실행 결과를 전부 보기에는 너무 방대하므로 여기서는 아미노산에 대한 내용만을 다뤄봤습니다.







2016년 2월 12일 금요일

[책 리뷰] 프로페셔널의 조건




 서평


 노트를 뒤적거리다 작년에 읽은 피터드러커의 프로페셔널의 조건이란 책에 대해 간단하게 메모해 놓은 것을 발견했다. 작년에 들은 어떤 강의에서 자기 개발서의 원조격인 책이라고 이것만 보면 다른 자기 개발서들은 이 책을 보고 저자들이 주석을 달아 놓은 수준이라 굳이 읽을 필요가 없다고 한 강사님의 말을 기억해 두었다가 도서관에서 빌려서 봤었다. 읽어보고 느낀점은 그 분야의 고전에 해당하는 책들은 다르구나라는 느낌과 다른 자기 개발서들은 이 책에서 하는 말들의 일부분을 더 알아듣기 쉽게 설명했구나라는 생각이 들었다. 그리고 항상 명심해두고 있어야할 말들이 있는 것 같아 다시 한번 정리해 봤다.

요약


 효과적인 사람, 지속적인 성장을 할 수 있는 사람, 변화 할 수 있는 사람이 되어라

 그리고 이책에서 내가 제일 인상깊게 보았던 7가지가 있다.

1. 나에겐 분명 한 번더 도전해 볼 의무가 있다.
 - 실패 한다고 해서 포기하지 말라는 의미였던것 같다.

2. 완벽은 나를 피해가겠지만 나는 다시 한 번 완벽을 추구 할 것이다.
 - 내가 생산하는 생산물 중 가장 완벽한 것은 내가 바로 다음에 할 것이다.

3. 항상 '신들이 보고있다.' 라는 생각을 해라.
 - '누가 보는것도 아닌데 대충하지뭐'라는 마음가짐을 버리라는 뜻인것 같다.
4. 잘한일, 잘하고자 한일, 잘하고자 충분히 노력하지않은일, 실패한일에 대한 검토를 하라
 - 피드백을 하라

5. 새로운 일을 할 때에는 그에 걸맞는 사람이 되어라.
 - 자리가 사람을 만든다는 수동적 의미가 아닌 내가 그 자리에 맞는 사람이 스스로 되라는    것 같다.

6. 어떤 일을 할 때에는 예상하는 결과를 기록하고 그 이후에 그 기록과 비교할 것
 - 이것도 피드백과 비슷한 말인것 같다.

7. 음... 내가 기록하면서 누락시킨것 같다..

 그리고 이런 생각을 하면서 살아가라는 이야기도 있었다.

1. 내가 어떤사람으로 기억되기를 원하는가
 - 내 삶의 가치관에 대한 이야기로 기억한다.

2. 그리고 이 생각은 그 나이에 맞게 변해야 한다.
 - 자기 상황에 맞는 가치관을 가지고 있어야 한다는 뜻인거 같다.

3. 사는 동안 다른 사람의 삶에 변화를 일으킬 수 있어야 한다.
 - 다른 사람에게 영향을 주는 사람이 되라는 뜻인가..?

 이러 한 말도 있다.

1. 자신이 한 일의 결과에 대해 스스로 대견하게 생각하라
 - 자신감과 관련된 이야기 같다.

2. 나의 강점은 무엇인가?
 - 피드백 분석을 통해 확인

3. 나는 어떻게 성과를 올리는가?
 - 내가 성공했던 방식에 대한 분석을 해서 그 방법을 인생 전체에 적용하라는 뜻

4. 나의 가치관은 무엇인가

시간 관리에 대한 말도 있었다.

1. 시간이 없을 때는 우선 전혀 할 필요가 없는 일을 제거하라
 - 쓸데없는 일에 에너지를 낭비하지 말라는 것  같다.

2. 다른 사람이 할 수 있는일을 위임하라
 - 아웃소싱의 개념이라고 보면 될거같다.

이 책에서 정의하는 집중이란

진정 의미 있는 일은 무엇인가, 먼저해야 할 것은 무엇인가 라는 관점에서 경우에 따라 스스로 의사결정을 하는 용기라 한다.

 그리고 마지막으로 의사결정의 불일치를 조장하라 라는 말이 있다. 아마 너무 쉽게 결론을 내리지 말고 좀 더 나은 결과를 위해 브레인스토밍과 같은 것들을 더하라는 이야기였던걸로 기억한다.

 내가 정리한 내용은 여기까지다. 아마 더 있을텐데 정리를 하다가 그만 둔 것이 많지 않나 싶다.










2016년 2월 10일 수요일

[Digital Signage] Xibo 설치

 이번에는 Digital Signage용 오픈소스 OS인 Xibo를 설치하는 방법에 대해 알아보겠습니다.
Xibo는 php기반이기 때문이 php가 설치되어 있어야 합니다. php 설치가 필요하신 분들은 http://cd4761.blogspot.kr/2016/02/it-php.html로 가셔서 설치를 하신다음 진행해주시기 바랍니다.


 http://xibo.org.uk/ 에 접속해서 아래 그림과 같이 표시된 것들을 다운로드 받습니다.



 먼저 CMS를 설치해 보도록 하겠습니다.

CMS


CMS란?


 CMS는 Content Management System의 약자로 말그대로 Digital Signage를 통해 보여줄 컨텐츠들을 관리하는 시스템이라 보시면 됩니다. CMS는 PHP/ MySQL 웹 어플리케이션 이며 Apache, nginx 그리고 Microsoft IIS에서 작동 합니다.

CMS설치





다운로드 받은 CMS파일을 압축 푼 다음 C:\Bitnami\wampstack-5.5.31-0\apache2\htdocs에 다음과 같이 위치 시켜줍니다.




Xibo폴더 내부는 다음과 같습니다.




그 다음 브라우저에 localhost/Xibo를 입력하면 다음과 같은 화면이 출력됩니다. 하지만 사진을 보시면 각 항목이 체크 표시가 된 경우도 있고 x표시가 된 경우도 있을 것 입니다. 그럴 경우 C:\Bitnami\wampstack-5.5.31-0\php 폴더에 있는 php.ini 파일을 열면



 위와 같은 부분이 있을 것입니다. 저는 Fileinfo와 SOAP Extension에 문제가 있다고 되어있는데 이럴경우 저 부분에 extension=php_fileinfo.dll과 extension=php_soap.dll을 입력해주시면 해결이 됩니다.

 나머지 설치를 진행해주시고 설치가 완료된 후에 로그인을 하면



 다음과 같은 화면이 나올 것입니다. 그러면 설치가 올바르게 되었다고 보시면 됩니다.






[기타IT] php설치

 이번에는 php 설치하는 법에 대해 알아보겠습니다. 저는 개발할 때 node.js를 사용 하지만 이번에 프로젝트하는데 필요한 xibo가 php기반이라 설치하게 되었습니다.


php란?


 php(약칭 : Hypertext Preprocessor)는 프로그래밍 언어의 일종으로 동적 웹 페이지를 만들기 위해 설계되었습니다. php는 일반적으로 혼자 설치되지 않고 apache와 MySql과 함께 설치되는 것이 일반적입니다.  php는 apache를 통해 브라우저로 정보를 전송하고 MySql을 이용해 사용자의 정보를 저장하기 때문에 일반적으로 함께 사용되고 설치됩니다. 이를 APM이라 하는데 Window에 설치하는 APM을 WAPM이라 합니다. 이걸 각각 설치 할 수도 있지만 난이도가 있기 때문에 Bitnami를 이용해 한번에 설치해 보도록 하겠습니다.

php설치




먼저 https://bitnami.com/stack/wamp에 접속하여 설치파일을 다운로드 받습니다.





 다운로드가 완료되면 설치파일을 실행합니다.






다른 구성요소들은 굳이 필요하지 않으니 체크박스를 해제해줍니다.




php에서 쓰는 MySql의 root사용자 비밀번호를 설정해주는 화면입니다. 6자리 이상의 비밀번호를 입력하시면 됩니다.





설치가 되고 있는 화면입니다. 


설치가 완료되고 브라우저 주소창에 localhost를 쳤을 때 다음과 같은 화면이 출력되면 제대로 설치가 된것입니다.






2016년 2월 8일 월요일

[기타IT] 파싱

 파이썬 공부를 하다가 파싱에 관한 코드를 보고 파싱이 도대체 무엇인지 궁금해져서 파싱에 대해 알아 봤습니다.

 파서(Parser)란?


Compiler의 일부




 즉, Compiler 나 Interpreter에서 원시 프로그램을 읽어 들여, 그 문장의 구조를 알아내는 구문 분석(parsing)을 행하는 프로그램을 파서라고 합니다.

파싱 형태 - DOM, SAX


DOM과 SAX란?


 하나의 API로서, XML 문서를 구조화 - XML문서에 있는 Data를 효과적으로 다루기 위해 필요합니다. 이번에는 DOM방식에 대해서만 알아보도록 하겠습니다.

XML 파서의 분류

  •  DOM(Document Object Model) : 트리 기반의 파서
  •  SAX(Simple API for XML) : 이벤트 기반의 파서
-> DOM과 SAX 방식의 차이점은 문서 접근 방식의 차이라고 합니다. 즉, DOM은 임의적 접근을 하고 SAX는 순차적 접근을 합니다.

DOM - 객체 지향 모델


 DOM 문서의 물리적 구조와 문서가 접근되고 다루어지는 방법을 정의하는 방식 입니다. XML 문서를 하나의 Tree 구조로 본다는 특징이 있고 파서가 모든 이벤트들을 잡아서 그 결과를 메모리 상에 트리 형태로 만들고 application이 그 결과를 이용하도록 합니다.
 DOM의 특징으로는

1. XML 문서를 메모리에 올려놓고 데이터를 찾아 들어가는 방식을 사용
2. 모든 데이터를 다 읽기 때문에 큰 문서일 경우 로딩 시간이 걸리거나 메모리 낭비를 낭비    하게 됨
3. 문서 편집 가능
4. 데이터를 저장된 순서대로 받음

과 같은 것들이 있습니다.

 그리고 DOM의 목적으로는

1. 다양한 환경과 application에서 사용할 수 있는 표준적 프로그래밍 인터페이스 제공
2. 프로그램 이나 스크립트를 통해 HTML이나 XML과 같은 웹 문서의 내용과 구조 그리고 스타일 정보의 검색이나 수정이 가능하게 해주는 플랫폼 또는 언어에 중립적 인터페이스

가 있습니다.

 DOM의 구조와 원리

 DOM은 XML 문서에 노드들의 트리로 표현되는데, 특정 노드의 하위클래스는 요소, 텍스트, 주석이 될 수 있습니다. 그래서 DOM은 Tree 구조로서 XML문서를 다루게 되는 것입니다. 
 다음은 XML 문서와 DOM 트리구조에 대해 알아보도록 하겠습니다.

 <?xml version="1.0" encoding="euc-kr"?>
   <book>
      <title>파싱에 대하여</title>
      <category>IT</category>
   </book>

위와 같은 XML코드가 있을 경우, 아래와 같이 DOM 노드 트리 모델링을 할 수 있습니다.


 마지막으로 SAX 방식과 DOM 방식의 파싱을 비교해 보도록 하겠습니다.



SAXDOM
접근 방법이벤트 기반트리 기반
장 점메모리 효율, 빠른 속도문서의 임의접근
단 점구조에 대한 접근 곤란, 읽기 전용, 브라우저 지원 안됨메모리 사용량 큼, 속도 느림
적용 분야문서 일부분만 읽을 때, 데이터 변환 시 유효성 처리구조적 접근이 필요한 경우, 문서정보를 쉽게 파악할 때