2016년 7월 29일 금요일

MCU SW 공부 1 - Clock, Timer, Counter, Prescaler 개념 비교


Micro Controller Unit(이하 MCU) 을 분석하는 과정은 다음과 같다(알고 있는 수준에서)

1. MCU를 선택 한다.
    - 어떤 기능을 수행해야 하는지
    - 거기에 맞는 Spec을 가진 MCU는 무엇이 있는지
    - 사용가능 MCU 중 가장 저렴한 것은 무엇인지

2. 실행 주기 선택 한다.
    - MCU는 혼자 실행 될 수도 있고, 다른 MCU와 연동해서 사용할 수도 있다.
    - 그리고 외부 ECU 와 연동될 수도 있다.
    - 그렇게 때문에 최소 실행주기 및 특정 기능들의 실행 주기를 선택해야 한다.

3. 기능을 구현하여 실행 시킨다.
    - 2번에서 정한 특정 주기마다 실행 될 함수를 구현한다.
    - 특정 주기마다 실행 되는 함수는 Call Back Function, Interrupt Service Routine, Task 등 여러가지로 불릴 수 있다..


아직 1번 어떤 MCU를 선택해야 하는지는 시스템 전체를 볼 수 있는 눈이 없기 때문에 보류하고,
3번 실행되는 기능은 요구사항에 맞추어 세부적으로 구현이 들어가는 것인데 이 세부를 보기 전에 주기적으로 꼭 실행되어야 하는 함수들이 무엇인지 결정되어야 한다.
그것이 2번 실행 주기를 선택하는 것이다.

Clock은 MCU 동작의 기준이 되는 시계이다.
일정한 시간 간격으로 0과 1의 값이 번갈아 나타난다.

그 Clock 의 개수를 세어 주는 것이 Counter 이다.
8bit Counter 는 8개 bit 만큼 셀 수 있다.
2^8 = 256 이므로 8bit Counter 는 0~255 까지 셀 수 있다.
이 Counter의 값과 비교하여 특정 조건이 되면 Interrupt를 실행시킬 수 있는데
이 방법에 따라

오버플로우 인터럽트: 카운터의 값이 오버플로우 되는 겨우 발생
출력비교 인터럽트: 카운터 값이 출력비교 레지스터의 값과 같게 되는 순간에 발생
입력 캡쳐 인터럽트: 입력이 들어올 경우 발생, 그리고 그때의 시간을 저장

등의 방식으로 동작할 수 있다. 각 인터럽트가 걸렸을 때 이미 등록해 놓은 특정 함수가 실행될 수 있는 것이다.

Counter 라는 단어의 의미를 보았지만 비슷한 의미로 Timer 도 쓰인다.
이 둘의 차이는

Timer: MCU 내부 클럭을 세는 장치
Counter: MCU 외부에서 입력되는 클럭을 세는 장치

Timer/Counter라고 같이 사용되는곳이 많은(검색 시 다수가 그렇게 표현) 같은 의미라고 이해해될 될 것이라고 생각.

-- Prescaler 추가 --
개발자는 필요한 시간 단위가 있는데 MCU 의 clock 주파수가 높아 그 시간을 못맞출 수 있다.
8MHz 의 system clock 을 가지고 있다면 timer 의 clock 기본 주기는 0.125us 이 된다.
(1 Second * 1000 * 1000 / 8,000,000Hz = 0.125us)
실제 필요한 동작단위가 1us 라면 8 이라는 prescaler 값이 필요한 것이다.

-- hertz(hz) 추가 --
진동 현상이 있을 때 1초에 몇 번의 왕복 운동이 있는지 나타내는 단위
주기적으로 반복되는 모든 현상에 일반적으로 쓰일 수 있다.

보통 가정집에 들어오는 교류 전원은 220V, 60Hz 인데 교류 전압을 1초 동안 60번 0V를 기준으로 (-110~+110 까지) 오르락 내리락 하며 사인 진동을 반복한다.

컴퓨터 CPU 클럭을 얘기할 때 헤르츠 단위를 쓰는 이유는 무엇일까? CPU가 일정한 속도로 동작하기 위해서는 일정한 간격으로 전기적 펄스를 공급 받아야 하는데 이 전기적 펄스가 초당 CPU에 공급되는 횟수라는 개념에서 Hz라는 단위를 쓴다.

2016년 7월 24일 일요일

(E,K)소프트웨어 개발자로 자신을 홍보할 수 있는 편리한 3가지 방법 - 3 Easy Ways To Market Yourself as a Software Developer

본인에게는 앞으로 소프트웨어 개발자로 어떻게 살아야 할지가 메인 관심사(고민) 입니다.
그러던 중 소프트웨어 개발자로서 33살에 은퇴하고 프리랜서로 일하는 성공적인 커리어를 진행하고 있는 John Sonmez(Soft Skills 저자) 가 소개하는 소프트웨어 개발자로서의 자세는 그 고민에 대한 답을 해 주네요. 사실 이 글을 보고 블로그를 만들었었습니다.

이해를 잘 하기 위해 번역 해 보았습니다.

---

Do you want to get a better job?
더 좋은 직업을 가지고 싶으세요?
Want to make more money?
더 많은 돈을 벌고 싶으신 가요?
Perhaps you just want to get a promotion at your current job or open more opportunities.
당신은 지금 다니고 있는 직장에서 승진을 하거나, 더 많은 기회들을 가지고 싶을 것 입니다.
Good, you are not alone.  Who doesn’t want to make more money and be more successful or have better opportunities?
좋아요, 당신은 혼자가 아닙니다. 누가 돈을 안벌고 싶고, 성공하거나 많은 기회를 얻고싶지 않을까요?
The problem is most software developers don’t realize that they always need to be actively marketing themselves.
문제는 많은 소프트웨어 개발자들이 자신들을 적극적으로 홍보해야 한다는 사실을 깨닫지 못하는 데 있습니다.
I’ve written before about how you should be selling yourself and how everything is about selling, but part of selling successfully is marketing.
나는 당신이 어떻게 자신의 몸값을 높여야 하고, 모든 것이 몸값과 관련된 것이다 라는것을 이야기 하기 전에, 
몸값을 높이는 중요한 방법이 홍보(Marketing) 라는것을 이야기 하고 싶습니다.

1. Start a blog

1. 블로그를 시작하라.

I’m going to start with the most obvious thing and it really shouldn’t take you much convincing, since you are reading my blog right now.
먼저 명확하기 때문에 당신을 설득할 필요가 없는 방법을 이야기 하려고 합니다. 왜냐하면 당신이 이미 이 블로그를 읽고 있기 때문입니다.

The easiest way to showcase your abilities and knowledge in the software development field is to create a blog.
소프트웨어 개발자인 당신이 능력과 지식을 보여줄 수 있는 가장 쉬운 방법은 블로그를 만드는 것입니다.
A blog allows you to show the depth of your knowledge much better than you could  possibly do in a resume or in a short job interview.
블로그는 당신이 가지고 있는 지식의 깊이를 이력서나 짧은 인터뷰보다 훨씬 더 정확하게 보여줄 수 있습니다.
Hiring software developers is a gamble because anyone can make up some experience or pretend to know how to program.  A candidate for a software development job can even memorize common interview questions or be exceptionally good at interviewing, but it is pretty hard to fake a blog.
소프트웨어 개발자는 고용하는 것은 도박과 비슷합니다. 왜냐하면 누구나 경험을 만들수는 있고, 프로그램을 만들 능력이 있는 것처럼 행동할 수 있기 때문입니다. 소프트웨어 개발 지원자는 일반적인 인터뷰 질문들에 대해서 외워서 올 수 도 있고, 잠깐 동안의 인터뷰때 잘 하는것처럼 꾸밀 수도 있지만, 블로그는 거짓으로 만들기가 어렵습니다.

More importantly though, since this post is about marketing yourself as a software developer, a blog puts your name out there in the search engines for a variety of topics.
더 중요한 것은, 이 포스트에서 소프트웨어 개발자의 자기 홍보에 대한 글을 이야기 하고 있지만, 블로그는 당신의 이름을 다양한 방식으로 노출(검색) 되도록 해 줍니다.

All kinds of opportunities have come my way via my blog.  Almost every major advancement in my career over the last 3-4 years has in some way been a direct result of my blog.
나의 경우에 많은 기회들이 블로그를 통한 것이며, 지난 3~4년간 내 경력에서 거의 모든 큰 경력이 내 블로그로 인한 것입니다.

Do you know of any “famous” software developers that don’t have a blog?
혹시 당신이 아는 “유명한” 소프트웨어 개발자 중에 블로그를 안하는 사람을 알고 있습니까?
Perhaps you do, but there aren’t many.  So it goes to show you, if you want to get your name out there, it is essential to have a blog.
알 수도 있지만, 그리 많지 않을 겁니다. 이 사실은 당신이 괜찮은 소프트웨어 개발자가 되려면 블로그를 만드는 것은 기본이라는 것을 알 수 있습니다.
Starting a blog is pretty easy.  In fact, if you are reading this post, there is a good chance you’ve already started a blog, but perhaps you haven’t seen much success from it.  That is probably due to the hard part about blogging, which is keeping up with it.
블로그를 시작하는 것은 정말 쉽습니다. 사실 당신이 이 포스트를 읽고 있다면, 블로그 시작에 좋은 기회가 된 것입니다. 하지만 성공하긴 쉽지 않은 것도 사실입니다.
Anyone can start a blog, but to be successful at it and to really see its benefits, you have to be consistent.  This doesn’t mean you have to blog 3 times a week, but it does mean that you have to be blogging at some regular interval and you have to keep it up for a long time.
누구나 블로그를 시작할 수는 있습니다, 하지만 성공적이며 그로 인한 이득도 얻으려고 한다면, 꾸준해야 합니다. 이 말은 블로그를 한 주에 3번은 해야 한다는 식의 이야기는 아닙니다, 하지만 정기적으로 해야 하며 오랜 시간을 해야 한다는 이야기 입니다.
An easy way to get started is to use a shared hosting plan, like the one I am currently using at BlueHost, to create a simple WordPress site very quickly for a very cheap price.  If you get bigger, you eventually might need to scale out, but this is a good and fast cheap way to get started.
시작하기 쉬운 방법은 호스트를 공유 받아서, 내가 지금 쓰고 있는 BlueHost 같은, 간단한 WordPress 싸이트를 싸게 빨리 만들면 됩니다. 나중에 호스트를 키워야 할 수도 있지만, 그것은 그 때 하면됩니다.

2. Build a network

2. 네트워크를 구축하라
Selling is easy if you don’t have to sell.
홍보할 필요가 없다면 홍보는 쉬워집니다.
What I mean by this is that it is much easier to “sell” a product into an existing audience than it is to go out and look for people to buy your product.
내가 의미하는 것은 새로운 고객을 찾는것이 아닌, 이미 존재하고 있는 고객에게 파는 것이 훨씬 쉽다는 것입니다.
No one wants to be sold anything, but people like to find solutions for their problems and help people they like.
아무도 사는 것을 좋아하지는 않지만, 사람들은 자신들의 문제점을 찾아 해결하고, 자신들이 좋아하는 사람의 문제를 해결하는 것을 좋아 합니다.
So what does this have to do with marketing yourself?
그러면 이것이 자신을 홍보하는 것과 무슨 상관이 있느냐?
Well, the next time you need a job or you are looking for a new opportunity, or even if you planning on selling a product or starting your own business, don’t you think it would be great if you could just reach out to people who already know and like you rather than cold calling recruiters or sending out impersonal cover letters en masse?
만약 다음에 새로운 직장이나 기회를 찾거나, 자신의 상품을 가지고 비지니스를 시작한다면, 전혀 모르는 사람보다, 나에게 호감이 있는 사람들과 함께 하는것이 좋지 않겠습니까?
The best jobs I’ve gotten in my career and every good opportunity has been the result of someone from my network either bringing the opportunity to me or helping me get my foot in the door.
내가 지금까지 가졌던 좋은 기회들은 이미 알고있던 사람들로 인한 것이 많았습니다.
I am actually working on a product right now that will help software developers learn to market themselves and when I launch this product I’ll already have a large audience of potential customers from my network.
실제로 나는 지금 소프트웨어 개발자가 자신을 홍보할 수 있도록 해주는 상품을 제작 중이며 많은 잠재 고객들로서 지인들이 기다리고 있습니다.

Building a network isn’t difficult, but it takes time and it does take some effort. Networking is not about finding out what other people can do for you, but finding out what you can do for other people.
네트워크를 만드는 것은 어렵지 않지만, 노력과 시간이 쓰입니다. 네트워킹은 다른사람들이 당신을 위해서 무엇을 할 수 있는지 찾는 것이 아니라, 당신이 다른사람을 위해서 무엇을 할 수 있는지 찾는 것입니다.
The easiest way to build a network is to start helping people and taking an interest in what they are doing.
네트워크를 쌓는 가장 쉬운 방법은 다른사람들을 도우면서 그 사람들이 필요한 것이 무엇인지 알아보는 것입니다.
You should have the mindset of always networking.  Every new person you meet, every person you interact with online is potentially someone who can become part of your network.
당신은 언제나 네트워킹을 위한 마음가짐이 있어야 한다. 새로운 사람을 만나거나, 온라인상에서 피드백을 주고 받을 때 그 사람이 당신의 네트워크에 들어온다고 생각 해야 합니다.
You also have to get out, meet and interact with people, both offline and online.  There are many ways you can do this:
밖으로 나가서, 오프라인 온라인에서 만나고 주고 받아야 합니다. 구체적인 방법을 나열해 보면,
  • Join local user groups
  • 지역 모임에 나가는 것
  • Go to conferences
  • 컨퍼런스에 참가하는 것
  • Blog and comment on other people’s blogs
  • 블로그를 하고, 다른사람의 블로그에 코멘트를 하는 것
  • Ask people in your network to introduce you to people they think you should meet
  • 당신이 이미 알고있는 사람들에게 당신이 만날 필요가 있는 사람들을 소개 받는 것
  • Follow and interact with them people Twitter and other social networks
  • 소셜 네트워크 사람들을 팔로우 하고 메시지 주고 받는 것
  • Host your own dinner or get together about a topic you are interested in
  • 하나의 토픽을 정해서 같이 식사하는 것
And remember networking is all about what you can do for someone else, not what they can do for you; whether you believe in it or not the principle of Karma is real.
그리고 기억하세요, 네트워킹은 다른사람이 당신을 위해 무엇을 할 수 있는지에 관한것이 아니라 당신이 다른사람들을 위해서 무엇을 할 수 있는지 라는 것을, 당신이 믿든 안믿든 카르마는 존재합니다.

3. Build a personal brand (the best way to market yourself as a software developer)

3. 개인 브랜드를 만드세요(소프트웨어 개발자로서의 자신을 홍보하는 최고의 방법)
You hear about personal brands quite a bit these days, but people are often pretty confused about what a personal brand is.
요즘은 개인 브랜드가 중요하단 것을 들었을 것입니다, 하지만 사람들은 개인 브랜드라는 것이 무엇인지 혼란스러워 하는 경향이 있다습니다.
I overheard someone on a HGTV design show talking about how their personal brand was all about industrial looking modern designs or some other hogwash like that.
나는 HGTV의 디자인 쇼에서 출연자들이 자신의 개인 브랜드에 대해서, 개인 브랜드란 산업에서 듣는 현대적인 디자인이나 그 비슷한 헛소리 라고 이야기 하는 것을 들었습니다.
That person, although they were an experienced designer, didn’t understand the key concept about a personal brand: it is no different than corporate branding.
그 사람은, 경험많은 디자이너였지만, 개인 브랜드에 대한 중요한 개념을 이해하고 있지는 않았다고 생각합니다.: 회사 브랜드와 다를바 없습니다.
Branding is all about sending a consistent message that is recognized by some repeated stimulus which when seen instantly reminds the viewer of that message.
브랜딩이라는 것은 보는 사람으로 하여금 지속적으로 같은 메시지를 받아서 자극을 받도록 하는 것입니다.

For example, when you see the famous golden arches, you probably think McDonalds.  And when you think McDonalds, you probably think Big Macs, Quarter Pounders, Happy Meals and Egg McMuffins.
예를 들면, 당신이 금빛의 아크형태를 본다면, 아마 당신은 McDonald를 생각 할 것이고, McDonald를 생각한 당신은 빅맥,  쿼터 파운더, 해피밀, 달걀과 맥버핀 을 생각할 것입니다.
No matter where you go, if you are driving down the highway and pull off an exit to go to a McDonalds, you have a certain set of expectations about that place, which you have come to expect from repeated exposures to a consistent message associated with a distinct set of imagery.
당신이 어디에 있고, 무슨일을 하건 McDonald는 당신에게 지속적인 동일한 이미지를 노출시킵니다.
Building a personal brand is no different than building a brand like McDonalds or Starbucks or any other brand.  Decide what imagery you are going to use, and the message you are going to convey, and do it consistently.
개인 브랜드를 구축하는 것은 McDonald나 Starbucks가 브랜드를 구축하는 것과 다르지 않다. 어떤 이미지를 사용하고, 어떤 메시지를, 지속적으로 사용할 것인지 정하는 것입니다.
For instance, if you come to my blog, you have a certain set of expectations about what kind of posts you will see here.  You know that you won’t see some crap that I threw together in 5 minutes just so I can get a post out.  You know that you are likely to get something technical, like Getting Started with Dart, or something more about developer psychology and principals, like this post.
예를 들어, 당신이 내 블로그에 들어오면, 어떤 종류의 포스트를 볼 것인지 기대하는 것이 있을 것입니다. 5분만에 만든 포스트를 볼 것이라고 생각은 안하지 않겠습니까? 기술적이거나 개발자의 심리, 원리와 관련된 글을 볼 것이라고 생각하지 않나요?
I don’t have the budget of a company like McDonalds, and I’m still learning about personal branding myself, but everywhere I go I try to present a consistent visual image and message.
나는 McDonald와 같은 예산이 많지 않습니다. 그리고 아직 개인 브랜딩에 대해서도 배우는 중이지만 어디를 가든지 지속적인 이미지와 메시지를 주기 위해 노력 중입니다.
I use the same logo for Simple Programmer everywhere, and I include the same headshot, and almost all of my content somehow relates back to the idea of making the complex simple.  That is what I do.  I make the complex simple, whether through creating online courses for Pluralsight, writing articles in my blog, doing YouTube videos or evenpodcasting about Health and Fitness.
나는 항상 같은 Simple Programmer 로고를 사용 합니다. 얼굴이 나온 사진을 사용하고, 메시지는 “복잡한 것을 간단하게 만든다”는 것입니다. 그것이 내가 하는 일입니다. 나는 복잡한 것을 간단하게 만듭니다, Pluralsight를 위한 온라인 강좌를 만든다 던지, 내 블로그에서 사설을 쓴 다던지, 유튜브 비디오를 만들거나 건강과 운동에 관련된 팟캐스트를 하는 방식으로.
I want you to understand that when you see my logo or you see my name, you are going to be dealing with someone who genuinely wants to help you understand things that sometimes seem complex and understand how simple they really are.
나는 당신이 내 로고나 이름을 볼 때, 당신이 겪고 있는 복잡한 것이 사실은 간단하다는 것을 인식할 수 있게 도와주는 사람을 생각했으면 합니다.
So, if you want to get started building a personal brand, decide your message, decide the visualization you want to associate with that message, and start using it consistently everywhere you can.
당신이 개인 브랜드를 만들고 싶어 한다면, 당신의 메시지를 만들고, 그 메시지를 시각화할 수 있는것을 생각하고, 그것을 어느곳에서든 지속적으로 사용하기를 바랍니다.

It is all about changing your mindset

지금까지 이야기한  모든것들은 전부 자신의 마인드셋(사고방식)을 바꾸는 것입니다.
Marketing isn’t easy, but it is an essential skill that most software developers don’t realize they need to have.
마케팅은 쉽지 않습니다, 하지만 소프트웨어 개발자들에게 필수적인 기술이며, 이를 모르는 사람이 너무 많습니다.
Most software developers—myself included, for most of my career—think of career advancement in terms of acquiring new skills and climbing the corporate ladder, but a much more effective way to think about career advancement is to think of yourself as a business and treating your skills and unique talents as an offering that you actively promote.
많은 소프트웨어 개발자들—나도 포함해서, 초반의 내 커리어에서—에게는 새로운 기술을 습득해서 발전을 하거나, 회사에서 승진을 하는 것 만이 목표였습니다. 하지만 더욱 효과적인 커리어 개발은 당신이 가진 기술과 재능을 비즈니스 자체라고 생각하는 것입니다.
This fundamental change in mindset is critical to taking your career to the next level and making a name for yourself in the world of software development.  That is exactly why I am building a product around this idea that will show you exactly step-by-step how to do it.
이런 근본적인 마음가짐의 변화는 당신의 커리어를 다음 레벨로 올리고 소프트웨어 개발 세계에서 당신의 이름을 알리기 위한 것이며,그것이 왜 내가 그와 관련된 교육 프로그램를 만드는 이유 입니다.
The product itself is top secret right now, so I can’t reveal too much about it, but you can be sure in my upcoming blog posts and YouTube videos that I’ll be revealing more information.
이 프로그램은 현재 일급비밀입니다. 그래서 많은 것을 알려주지는 못하지만 다음에 올릴 블로그 포스트와 유튜브 비디오를 통해 조금 더 많은 정보를 공유 하도록 하겠습니다.
If you are really eager to be one of the first to find out what I am doing and want to know about this mysterious product the moment it comes out, you can reserve your spot in line, by signing up here.  I’ll be offering some free goodies and other stuff to some of the first people who sign up as I get closer to the product launch and need to get some early testers.
만약 당신이 내가 하는 프로그램이 무엇인지 아는 첫번째 사람이 되길 원한다면, 여기 등록을 해서 예약할 수 있습니다.

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