2015년 10월 20일 화요일

(K)의미를 찾아내는 것은 어떤 어려움도 이겨낼 수 있게 해준다. - 삶의 의미를 찾아서(빅터 프랭클)

 각각의 정신치료 학파를 창시한 사람들을 보면 결국은 자기가 만들어낸 체계 안에서 자기가 직접 겪은 신경증에 대해 얘기하고, 자기 책에 자신의 개인사에 대해 쓰고 있다는 주장에 대해서 어떻게 생각하는가?

 물론 이 상황에서 내가 프로이트나 아들러에 대해 말할 자격은 없다고 생각한다. 하지만 로고테라피와 관련되는 한 나는 내가 젊은이로서 삶의 명백한 무의미함에 대한 좌절과 같은 지옥을 직접 경험했으며, 허무에 대항하는 면역체를 만들어내기 전까지 총체적이고 궁극적인 허무주의를 경험했다는 것을 진심으로 고백한다. 그래서 나는 로고테라피를 창안했다. 

 다른 학자들이 독자들에게 허무주의에 대항할 수 있는 면역력을 심어주는 대신 자신들의 냉소주의를 심어주었다는 것은 슬픈 일이다.

「삶의 의미를 찾아서」 빅터 프랭클

---

내가 무엇 때문에 이렇게 행동하고, 살고 있는지에 대한 의미를 찾아내는 것은 어떤 어려움이든 이겨낼 수 있게 해준다. 

프로이트 처럼 왜 내가 이렇게 되었는지에 대해 과거의 일들을 꺼내려고 하는 것도 분명 의미 있고, 맞는 방향 일 테지만 개인적으로 지난 몇년간 고민해 본 결과 앞으로 나아갈 수 있도록 하고, 내 에너지를 채워줄 수 있도록 하는 방법이 나에게 더 맞다고 생각한다.

그런 의미에서 빅터 프랭클의 "로고 테라피"는 어렵지 않으면서 완벽한 방법이다.

Logo Therapy 기본 방식
1. 자유 의지를 가진다.
2. 그 자유의지로 삶의 의미를 찾는다.
3. 의미 있는 삶을 산다.





2015년 10월 18일 일요일

(K)'삶의 호흡이 깊어지는 공부'를 하라 - 내가 공부하는 이유(사이토 다카시)

 안타깝게도 요즘 사람들은 일단 학교를 졸업하고 사회에 나오면 도통 공부를 하지 않는 것 같다. 즉각적으로 이익을 얻을 수 있는 공부만 하지, 재밌어서 혹은 호기심이 생겨서 책을 읽거나 공부를 하지 않는다. 그런 건 죽기 전에 여행해야 할 100곳처럼 언젠가 시간이 많을 때 해야 할 목록에 담겨 있는 일일 뿐이다.

그러나 당장 급한 일에 매달릴수록 삶의 호흡은 얕아질 수밖에 없다. 가쁜 호흡이 심장을 자극해 호흡 곤란을 일으키는 것처럼 삶의 호흡이 얕은 사람들은 작은 스트레스에도 인생이 끝난 것처럼 힘들어한다. 그럴 때는 잠시 멈춰 깊은 숨을 들이쉬며 정상적인 호흡을 되찾는 시간이 필요하다.

 나는 뭔가 즐기며 배우는 것이 바로 그런 '깊은 호흡'이라고 생각한다. 몸이 신선한 산소를 받아들이며 새로운 활력을 심장에 불어넣듯이, '호흡이 깊은 공부'는 새로운 지식으로 마음의 세포를 재생시켜 지친 마음을 치유하고 더 나은 사람이 될 수 있다는 자신감을 불어넣어 준다.

「내가 공부하는 이유」 사이토 다카시

---

학생 때 알지 못했고, 지금은 조금 알겠는 것은,
'공부는 평소에 하는 것!' 이라고 하는 명제 이다.

남들이 어떻게 하던, 멋있어 보이건 나는 나에게 맞는 방식으로 매일 공부하면 된다.
그래야만 긴급한 일이 사라지고, '긴 호흡' 으로 안정적으로 살 수 있게 된다.






2015년 10월 17일 토요일

(K)업무의 전체를 보지 못할 Risk를 인식하고 노력하자 - 실패를 감추는 사람, 실패를 살리는 사람(하타무라 요타로)

맹아기(사업초기)에 입사하여 조직의 전체상을 파악하고 있는 사람들은 도중에 부분적인 개량이 이루어져도 전체를 볼 수 있는 입장에서 그 개량을 이해하여 다양한 문제에 대응할 수 있다.

그런데 성장기에 들어온 사람들은 전체상을 전달받는 교육 시스템이 없는 한, 자신이 담당한 부분의 지식밖에 모르기 때문에 전체적인 움직임을 볼 수가 없다.

「실패를 감추는 사람, 실패를 살리는 사람」 하라무라 요타로

---

일본의 경우 현재의 리더들은 많은%가 사업의 맹아기가 아닌 성장기에 들어온 사람들 이며, 그렇게 때문에 사업의 전체를 알지 못하는 전문가가 많다고 한다.(한국도 동일하다고 생각)

신입사원으로 들어온 평범한 사원들은 사업의 전체적인 것을 알지 못한다. 오래 근무했다고 전체를 다 알 수 있는 것이 아니다.

전체를 보지 못했을 때의 문제점은 너무나도 명확하다.

전체를 알지 못한다는 것을 명확히 하고, 다양한 경험은 꼭 필요하다는 마음가짐으로 지내자.

그리고 전체상을 전달 받을 수 있는 교육이 존재하는 지,
만약 존재 한다면 어떻게 교육을 받을 수 있는 것인지 생각해 보고,
존재하지 않는다면 내가 만들 수 있는지 까지도 생각해 보자.

(K)성과를 알아주고 인정해 주는 문화가 필요하다 - 마지막 강의(잭웰치)

 최고 경영자가 '우리에게는 혁신이 필요하다! 혁신은 위대한 것이다! 우리 모두 혁신해야 한다!' 라고 백날 부르짖는 다고 혁신에 필요한 정신이 직원들 마음에 심어지는 것은 아니다. 그런 낭만적인 생각은 잊어라! 직원들은 최고 경영자의 말에 고개를 끄덕이며 박수까지 친다. 하지만 책상으로 돌아가 눈앞에 당면한 일을 시작하는 순간부터 혁신에 대해서는 생각하지 않는다.


이런 마음가짐을 변화시키기 위해서는 성과를 알아주고 인정해 주는 문화가 필요하다.

 콜센터의 샘이 고객 유지율을 5퍼센트 높이는 방법을 생각해 냈다면, 그것을 칭찬하는 파티를 열고 멋진 뮤지컬 입장권 두 장을 선물하는 등 공개적으로 보상해야 한다.

 메리가 모든 직원이 더 좋아하는 방향으로 근무표를 약간 조절함으로써 공장이 정지하는 시간을 피하는 방법을 알아냈다면, 그녀의 가족 모두를 디즈니 월드로 여행을 보내 주어야 한다.

 어떤 성과라도 보상하라. 새부적인 내용은 중요하지 않다. 적절하고 이치에 맞게 축하하고 칭찬하라. 거듭 말하지만, 상관과의 저녁 식사는 보상으로 적절한 방법이 아니다. 상관이 멋지고 재미있는 사람이어도 상관과의 저녁 식사는 당사자에게 업무의 연장일 뿐이다.

「잭 웰치의 마지막 강의」 잭 웰치

---

나를 비롯한 많은 사람들이 보람있는 일을 하고 싶어한다.
동기부여의 방법은 다양 하겠지만, 결국 지속적으로 하려면 내가 속해있는 곳에서 적절하게 알아차리고, 적절하게 보상을 해 주어야 한다.
일을 잘 하는것은 중요하고 필수적이지만, 보상을 하는 것은 필수적이기 아니기 때문에 우선순위에 올라가 있지 않다면, 그건 그 시스템의 성숙도를 보여주는 것이라고 생각한다.


2015년 10월 14일 수요일

(K)경력 기간에 따른 능력의 차이

6개월 경력자와 6년 경력자의 차이는 의외로 작다. 진정한 차이는 지원자의 의지와 인격, 지성에서 나온다. 

「똑바로 일하라」 
제이슨 프라이드, 데이비드 하이네마이어 핸슨



(G)Britain's Got Talent 2015 - Henry Gallagher


2015년 10월 13일 화요일

(K)일에 허둥지둥 하지 않으려면

일에 허둥지둥 하지 않으려면,

1. 우선순위
   - 중요성에 따라 모든 일에 우선순위를 부여하라.
2. 행동에 타당성이 있도록 하라
   - 아래 세부
3. 헌신
   - 마음을 다해서 해라.
   - 그러기 위해서 하고싶은 일을 하라.

* 타당성이 있는 행동을 하려면,
  -  적절한 일을 하라
  -  올바른 동기로 일을 하라
  -  올바른 사람과 함께 일을 하라
  -  제때에 일을 하라
  -  적절한 순서로 일을 진행하라
  -  집중해서 일을 하라
  -  목표에 부합하는 결과를 달성하도록 일을 하라

「굿바이 허둥지둥」 켄 블랜차드


(E+K)27 languages to improve your Python - Intro

 As a co-designer of one of the world's most popular programming languages, one of the more frustrating behaviours I regularly see (both in the Python community and in others) is influential people trying to tap into fears of "losing" to other open source communities as a motivating force for community contributions. (I'm occasionally guilty of this misbehaviour myself, which makes it even easier to spot when others are falling into the same trap).
세계에서 가장 유명한 프로그래밍언어의 co-designer로서, 주기적으로 (Python community나 다른 프로그래밍 관련된 곳에서) 볼 수 있는 힘빠지는 광경은, 다른 커뮤니티가 더 잘나갈 수 있수도 있다고 겁을 주어 커뮤니티 기여자가 커뮤니티에 기여할 수 있도록 만들려고 하는 것 이다.(때때로 나도 이런짓을 했습니다, 다른사람이 쉽게 기여하지 않을 때 쉽게 사용할 수 있기 때문입니다.)


 While learning from the experiences of other programming language communities is a good thing, fear based approaches to motivating action are seriously problematic, as they encourage community members to see members of those other communities as enemies in a competition for contributor attention, rather than as potential allies in the larger challenge of advancing the state of the art in software development. It also has the effect of telling folks that enjoy those other languages that they're not welcome in a community that views them and their peers as "hostile competitors".
 다른 프로그래밍 언어의 커뮤니티에서의 경험으로 배우는 것은 좋은 것인데,  커뮤니티 멤버들로 하여금 다른 커뮤니티의 사람들을 소프트웨어 개발의 수준을 예술의 수준까지 끌어올리는 발전을 위한 잠재적인동맹의 관계로 생각하는 것이 아니라, 경쟁에서의 적으로 삼고 그 두려움을 기반으로 동기부여로 하는 것은 문제가 있어 보인다.


 In truth, we want there to be a rich smorgasboard of cross platform open source programming languages to choose from, as programming languages are first and foremost tools for thinking - they make it possible for us to convey our ideas in terms so explicit that even a computer can understand them. If someone has found a language to use that fits their brain and solves their immediate problems, that's great, regardless of the specific language (or languages) they choose.
 실제로, 우리는 선택이 풍부한 뷔페와 같이 서로다른 환경에서도 잘 돌아가는 여러가지 언어가 존재하기를 바란다. 프로그래밍 언어는 생각을 도와주는 도구이기 때문이다. - 프로그래밍 언어는 우리가 아이디어를 잘 표현할 수 있도록 하여 결국 컴퓨터 까지도 이해할 수 있도록 해준다. 만약 어떤 사람이 자신에게 주어진 문제를 잘 풀 수 있는, 자신에게 맞는 언어를 찾았다고 한다면 그 언어가 무엇이었든, 그건 엄청난 것이다..


So I have three specific requests for the Python community, and one broader suggestion. First, the specific requests:
 그래서 난 Pyhon 커뮤니티에 구체적인 3가지의 요청사항과 하나의 큰 제안이 있다.
3가지의 구체적인 요청사항은

1. If we find it necessary to appeal to tribal instincts to motivate action, we should avoid using tribal fear, and instead aim to use tribal pride. When we use fear as a motivator, as in phrasings like "If we don't do X, we're going to lose developer mindshare to language Y", we're deliberately creating negative emotions in folks freely contributing the results of their work to the world at large. Relying on tribal pride instead leads to phrasings like "It's currently really unclear how to solve problem X in Python. If we look to ecosystem Y, we can see they have a really nice approach to solving problem X that we can potentially adapt to provide a similarly nice user experience in Python". Actively emphasising taking pride in our own efforts, rather than denigrating the efforts of others, helps promote a culture of continuous learning within the Python community and also encourages the development of ever improving collaborative relationships with other communities.
1. 만약 커뮤니티에 동기부여가 필요하다고 생각되면, 커뮤니티에 대한 두려움을 사용하는 것은 피해야 한다. 대신에 커뮤니티의 자부심을 이용해야 한다. "만약에 우리가 뭘 하지 않는다면 다른 언어인 'y'에 개발자들의 마음을 빼앗기고 말 것이다." 와 같은 말을 통하여 두려움을 자극 한다면, 그것은 부정적인 감정을 유발하게 될 것이다. "지금은 X 라는 Python의 문제를 어떻게 풀 것인지를 모르지만 Y라는 환경을 보면 X 문제 해결을 위한 정말 훌륭한 방법을 발견할 수 있을 것이며 이것은 Python에 그와 비슷한 좋은 경험을 제공할 수 있을 것이다." 와 같이 다른 사람들의 노력을 폄하 하는 것이 아니라 능동적으로 우리의 노력에 자부심을 가지게 된다면, Python 커뮤니티 안에서는 지속적인 배움과 같은 문화를 퍼트리는데 도움이 되고 다른 커뮤니티와의 협업관계도 발전시킬 수 있을 것이다.


2. Refrain from adopting attitudes of contempt towards other open source programming language communities, especially if those communities have empowered people to solve their own problems rather than having to wait for commercial software vendors to design to address them. Most of the important problems in the world aren't profitable to solve (as the folks afflicted by them aren't personally wealthy and don't control institutional funding decisions), so we should be encouraging and applauding the folks stepping up to try to solve them, regardless of what we may think of their technology choices.
2. 다른 언어의 오픈소스 커뮤니티에서 배우는 것을 경멸하는 것을 삼가해 달라, 그리고 그 문제를 푸는것에 대해 상용 소프트웨어를 기다리게 하지 말고 자율권을 주어라. 많은 중요한 문제들은 해결한다고 해서 이익이 주어지는 것이 아니다(그 문제를 겪고 있는 사람들은 부자가 아니다.) 그래서 우리는 어떤 방법을 선택 하든지 간에 직접 해결하고 즐거워 하기를 바란다.


3. If someone we know is learning to program for the first time, and they choose to learn a language we don't personally like, we should support them in their choice anyway. They know what fits their brain better than we do, so the right language for us may not be the right language for them. If they start getting frustrated with their original choice, to the point where it's demotivating them from learning to program at all, then it makes sense to start recommending alternatives. This advice applies even for those of us involved in improving the tragically bad state of network security: the way we solve the problem with inherently insecure languages is by improving operating system sandboxing capabilities, progressively knocking down barriers to adoption for languages with better native security properties, and improving the default behaviours of existing languages, not by confusing beginners with arguments about why their chosen language is a poor choice from an application security perspective. (If folks are deploying unaudited software written by beginners to handle security sensitive tasks, it isn't the folks writing the software that are the problem, it's the folks deploying it without performing appropriate due diligence on the provenance and security properties of that software)

3. 만약에 우리가 아는 누군가가 처음으로 프로그램을 배우려고 한다면, 그리고 그들이 우리가 좋아하지 않는 언어를 선택했다고 할 지라도, 우리는 그들의 선택을 있는 그대로 지지해 주어야 한다. 그들은 그들 자신에게 어떠한 언어가 더 적절한지 더 잘알고 있다. 그러므로 우리에게 적절한 언어는 그들에게는 적절하지 않을 수 있다. 만약 그들이 그들 자신의 선택에 좌절하게 되고 그로 인해 프로그래밍을 배우려는 의지가 꺽이게 된다면, 그 때 다른 적절한 것을 추천하는 것은 의미가 있다. 이런 조언은 네트워크 보안에 적절치 않다는 것을 발견하고 나서 바꾸는 것과 비슷하다. 본질적으로 안전하지 않은 언어를 OS를 가지고 감싼다던가, 안전한 다른 언어를 가지고 온다던가로 해결할 수 있다. (만약 초보자가 사용한 확인되지 않은 소프트웨어가 배포되었다고 하면 사용하는 사람이 문제가 아니라 제대로 확인하지 않고 배포한 사람이 문제이다.)


 My broader suggestion is aimed at folks that are starting to encounter the limits of the core procedural subset of Python and would hence like to start exploring more of Python's own available "tools for thinking".
 나는 사람들이 Python의 한계를 만나도록 하여 Python 을 더 발전시킬 가능성을 찾았으면 한다(?)


 One of the things we do as part of the Python core development process is to look at features we appreciate having available in other languages we have experience with, and see whether or not there is a way to adapt them to be useful in making Python code easier to both read and write. This means that learning another programming language that focuses more specifically on a given style of software development can help improve anyone's understanding of that style of programming in the context of Python.
 Python의 개발에 있어서 중요한 과정의 하나는, 다른 언어들을 배우고 그 특징을 Python 에 적용하여 사용하기 쉽게 만드는 것이다. 이것은 다른 언어를 배운다는 것은 Python 프로그래밍을 더욱 잘 이해하게 만드는 것이다.


To aid in such efforts, I've provided a list below of some possible areas for exploration, and other languages which may provide additional insight into those areas. Where possible, I've linked to Wikipedia pages rather than directly to the relevant home pages, as Wikipedia often provides interesting historical context that's worth exploring when picking up a new programming language as an educational exercise rather than for immediate practical use.
 그런 노력을 돕기 위하여, 탐험해볼 몇가지의 영역들을 리스트 해 보았다, 그리고 그것들은 추가적인 통찰을 제공해 줄 것이다. 가능하면 직접적인 해당 언어의 홈페이지가 아니라 위키피디아의 페이지들을 소개함으로서, 실질적인 프로그래밍에 바로 들어가는 것이 아니라 위키피디아가 제공하는 역사적인 것을 경험해 봄으로 인한 교육적인 효과를 줄 수 있도록 하였다.

While I do know many of these languages personally (and have used several of them in developing production systems), the full list of recommendations includes additional languages that I only know indirectly (usually by either reading tutorials and design documentation, or by talking to folks that I trust to provide good insight into a language's strengths and weaknesses).
 이 언어들을 개인적으로 사용했지만(실제 생산에 참여해 보았다), 간접적으로만 체험해 본것들도 있다. (튜토리얼을 읽었거나 디자인 문서를 읽었거나 통찰을 가졌다고 하는 사람들과 얘기해서 들은것들)


 There are a lot of other languages that could have gone on this list, so the specific ones listed are a somewhat arbitrary subset based on my own interests (for example, I'm mainly interested in the dominant Linux, Android and Windows ecosystems, so I left out the niche-but-profitable Apple-centric Objective-C and Swift programming languages, and I'm not familiar enough with art-focused environments like Processing to even guess at what learning them might teach a Python developer). For a more complete list that takes into account factors beyond what a language might teach you as a developer, IEEE Spectrum's annual ranking of programming language popularity and growth is well worth a look.
 여러 다른 언어들이 여기의 리스트에서 빠져 있다. 여기에 나열되어 있는 것은 내가 관심이 있었던 것들 위주이다.(나는 주로 Linux, Android, Windows 에 관심이 있다. 그래서 애플중심의 C나 Swift언어나 Processing과 같은 것은 잘 모른다.) 도움이 되는 더욱 완벽한 리스트를 찾는다면 IEEE의 연간 프로그래밍 언어 순위를 확인해 보는것도 좋을 것 같다.




* 이 글은 Python 언어의 공동 설계자인

* reference
http://www.curiousefficiency.org/posts/2015/10/languages-to-improve-your-python.html

(K)27 languages to improve your Python - Abstract



많은 경험을 가진 프로그래머가 프로그래밍 언어를 개별 언어가 아닌 숲의 관점에서 구분해 놓은 것을 보는 것은 큰 의미를 가진다고 생각합니다.

3개의 내용으로 구분하였으며,
1. Abstract(이 글)
2. Intro
3. 각 언어별 세부 설명(작성되지 않음)
이며 원글의 링크 공유드립니다.

관련 검색 시 찾은 다른 분류
 - 링크1 System Languages, Architectural Languages, Architectural Languages


27 Languages
절차지향 프로그래밍 언어로서 위에서 아래로 순서대로 실행된다는 의미이며, 함수를 사용하여 함수를 따라서 실행될 수 있다.
 현실세계의 모습을 나타낼 수 있는 객체들의 조합으로 프로그래밍을 하는 언어
  객체지향의 의미를 가지고 있지만 C와 유사한 방식(?)으로 구현
  데이터를 Array형태로 다루는 언어이며 Array에서 Matrix까지 여러 차원의 데이터를 한꺼번에 다루며 이때 숫자형태를 주로 다루기 때문에 계산에 뛰어난 특징을 가진다.
  통계적으로 분석(Analyze)하며 그것을 눈에 보여주는(Visual) 에 특화되어 있는 언어.
  통계에 집중되어 개발된 언어를 살펴보면 Python에서도 통계쪽 강화를 위해서 습득할 수 있는 부분이 있을 것이라고 생각.
 함수형 언어를 의미하며 컴퓨터가 동작하는 방식에 최적화된 언어를 의미한다.
 특정한 이벤트가 들어올 때 까지 지속적으로 프로그램이 돌아가도록 하는 프로그램을 만들도록 특화된 언어. Back Ground에서 프로그램은 계속 켜져있어야 하기 때문에 보통 여러명의 유저를 받을 수 있도록 발전되어 있다.
 변수를 정적이 아니라 동적으로도 만들어서 사용할 수 있는 언어. 파이썬에도 3.5버전부터 이 개념이 적용 되었다.
 Code 자체를 Data로 사용할 수 있는 특징을 가지는 언어(아직 이해 부족)
 실질적인 특정 문제를 해결하기 위하여 발전한 언어
초보자들(그리고 어린이들)에게 컴퓨터가 동작하는 방식을 익힐 수 있도록 고안된 언어

(K)간단하지만 가장 중요한 Python Pandas의내용

Pandas를 공부하기 위하여 검색한 많은 Youtube 비디오 중 가장 실질적인 정보가 있었던 동영상을 반복해서 보면서 정리한 내용.
강연자는 현재 OpenMail 이라는 회사의 CTO로서 전 Google 엔지니어.

* 요약: Pandas 는 데이터 분석을 위한 가장 강력한 Tool 이며, Python을 처음 배우는 사람은 꼭 Pandas를 먼저 배워야 한다.

* 개요
  1. 배포판의 종류
  2. 데이터 읽는 법
  3. 데이터 다루는 법
  4. 그래프(차트) 그리는 법

* 세부 내용
   1. 배포판의 종류
      a. Anaconda - python을 사용할 수 있도록 환경을 구축해 주는 도구
      b. Ipython Notebook - 개별 코드를 실행할 수 있게 하여 설명에 최적화된 도구
   2. Data Reading
      a. DataFrame(2차원) 형식을 사용한다.(Series는 1차원 이며 Panel은 3차원 이다.)
      b. read_csv("file address") 함수를 사용하여 csv 파일을 읽어 들인다. <- 아주 간단
   3. Data Munging - csv 파일의 내용을 2차원의 배열로 저장하여(DataFrame)으로 가지고 있으므로 이 데이터의 일부분을 선택할 수 있다.
      a. 기본적이면서 꼭 필요한 방법들
         i. select(indexing, 선택하는 것)   
            1) .ix[]   - 가장 많이 쓰는 indexing
            2) .loc[] - label 을 사용한 indexing, .ix[] 다음으로 많이 사용
            3) .iloc[] - integer(정수) 주소를 사용한 indexing
            4) .xs()   - multi 로 indexing
            5) .iat[], at[] - 잘 사용하지 않으며 자세한 내용은 업데이트 필요
         ii. filter
            1) 특정 column을 특정 condition으로 filtering 할 수 있다.
            2) boolean indexing(row의 개수와 같은 크기를 가진 참,거짓 array로 선택 가능)
       b. 그 외
          i. update(내용 업데이트 시 사용)
             1) .loc[]
          ii. insert(내용을 추가할 때)
             1) 사용하지 않는 것을 권장, 자세한 내용은 업데이트 필요
          iii.  map(Series), append(concatenate to dataframe)., join(add columns to different dataframe), group(grouping row or column), summarize agg(), sorting, clean na(dropna, fillna) drop duplicates, clean outliers, conform 잘 이해 안가지만 reindex 하거나 resample 하거나 등등, bin, rotate 멀티 인덱스 등 unstack 도 할 수 있다.(테이블로 바꾸어 버리는 것) unstack 두번하면 rotate 된다.

   4. Graph Drawing - 위 3번의 Data Munging으로 필요한 데이터만을 추출한 다음 matplotlib를 사용하여 다양한 그림을 그릴 수 있다.

*추가 - 2016-01-17 더 간단한 Indexing 정리

Different Choices for Indexing
    Selection by Label, Boolean Array
        single, array, slice of label and boolean indexing
         .loc - location
     Selection by Position
          single, array, slice of integer index and boolean indexing
         .iloc - integer location
     Advanced Indexing and Advanced Hierarchical.
.          Label ->(if not) Index Selection but if the label is integer, only   Label Based Selection

Basics
    만약 [] 만을 사용 한다면 그 이전 level(Series->값(scalar), Daraframe->Series, Panel->Dataframe) 의 값을 가져올 수 있다.

      

2015년 10월 10일 토요일

(E)Simple but Core of Python Pandas.

Memo with simplest, and easiest youtube video.
Speaker is formal Google SW engineer, John Fries(He is OpenMail CTO now)


* Summary: Pandas is the most strong data analysis tool, so people should know this first at learning python.


* Abstract
   1. Distribution
   2. Data reading
   3. Data munging
   4. Graph(Chart) drawing


* Details
   1. Tools
      a. Anaconda
      b. Ipython Notebook when explaining
   2. Data Reading
      a. make DataFrame(2 dimension)(Series 1 dimenstion, Panel 3 dimension)
      b. read from csv (dataframe = read_csv(file address) <- simple)
   3. Data munging - manipulating data
      a. basic method
         i. select(indexing)
            1) .ix[]    - basic indexing(mostly, unless row is integer)
            2) .loc[]  - label based indexing, after ix
            3) .iloc[] - positional indexing, integer row based indexing
            4) .xs()   - multi index level selecting
            5) .iat[], at[] - no frequent use
         ii. filter
            1) specific column, specific condition
            2) boolean indexing(same length subset can be retrived)
      b. others
         i. update(update contents)
            1) .loc[]
         ii. insert(add contents)
            1) no recommend, but can be
     iii. map(Series), append(concatenate to dataframe)., join(add columns to different dataframe), group(grouping row or column), summarize agg(), sorting, clean na(dropna, fillna) drop duplicates, clean outliers, conform 잘 이해 안가지만 reindex 하거나 resample 하거나 등등, bin, rotate 멀티 인덱스 등 unstack 도 할 수 있다.(테이블로 바꾸어 버리는 것) unstack 두번하면 rotate 된다.

   4. Graph drawing - use matplotlib, after data munging use the data as a input.


*Add - 2016-01-17 Simplify Indexing
Different Choices for Indexing Selection by Label, Boolean Array single, array, slice of label and boolean indexing .loc - location Selection by Position single, array, slice of integer index and boolean indexing .iloc - integer location Advanced Indexing and Advanced Hierarchical. . Label ->(if not) Index Selection but if the label is integer, only Label Based Selection

Basics Wen Using [] lower level(Series-> scalar vlaue), Daraframe->Series, Panel->Dataframe


(E+K)What Made Lisp Different


What Made Lisp Different

December 2001 (rev. May 2002)

(This article came about in response to some questions on the LL1 mailing list. It is now incorporated in Revenge of the Nerds.)


When McCarthy designed Lisp in the late 1950s, it was a radical departure from existing languages, the most important of which was Fortran.

처음 시작은 기존 언어에 대한 반발로 일어나게 되었다.


Lisp embodied nine new ideas:

1. Conditionals. A conditional is an if-then-else construct. We take these for granted now. They were invented by McCarthy in the course of developing Lisp. (Fortran at that time only had a conditional goto, closely based on the branch instruction in the underlying hardware.) McCarthy, who was on the Algol committee, got conditionals into Algol, whence they spread to most other languages.

2. A function type. In Lisp, functions are first class objects-- they're a data type just like integers, strings, etc, and have a literal representation, can be stored in variables, can be passed as arguments, and so on.

3. Recursion. Recursion existed as a mathematical concept before Lisp of course, but Lisp was the first programming language to support it. (It's arguably implicit in making functions first class objects.)

4. A new concept of variables. In Lisp, all variables are effectively pointers. Values are what have types, not variables, and assigning or binding variables means copying pointers, not what they point to.

5. Garbage-collection.

6. Programs composed of expressions. Lisp programs are trees of expressions, each of which returns a value. (In some Lisps expressions can return multiple values.) This is in contrast to Fortran and most succeeding languages, which distinguish between expressions and statements.

It was natural to have this distinction in Fortran because (not surprisingly in a language where the input format was punched cards) the language was line-oriented. You could not nest statements. And so while you needed expressions for math to work, there was no point in making anything else return a value, because there could not be anything waiting for it.

This limitation went away with the arrival of block-structured languages, but by then it was too late. The distinction between expressions and statements was entrenched. It spread from Fortran into Algol and thence to both their descendants.

When a language is made entirely of expressions, you can compose expressions however you want. You can say either (using Arc syntax)

(if foo (= x 1) (= x 2))

or

(= x (if foo 1 2))

7. A symbol type. Symbols differ from strings in that you can test equality by comparing a pointer.

8. A notation for code using trees of symbols.

9. The whole language always available. There is no real distinction between read-time, compile-time, and runtime. You can compile or run code while reading, read or run code while compiling, and read or compile code at runtime.

Running code at read-time lets users reprogram Lisp's syntax; running code at compile-time is the basis of macros; compiling at runtime is the basis of Lisp's use as an extension language in programs like Emacs; and reading at runtime enables programs to communicate using s-expressions, an idea recently reinvented as XML.

When Lisp was first invented, all these ideas were far removed from ordinary programming practice, which was dictated largely by the hardware available in the late 1950s.

Over time, the default language, embodied in a succession of popular languages, has gradually evolved toward Lisp. 1-5 are now widespread. 6 is starting to appear in the mainstream. Python has a form of 7, though there doesn't seem to be any syntax for it. 8, which (with 9) is what makes Lisp macros possible, is so far still unique to Lisp, perhaps because (a) it requires those parens, or something just as bad, and (b) if you add that final increment of power, you can no longer claim to have invented a new language, but only to have designed a new dialect of Lisp ; -)

Though useful to present-day programmers, it's strange to describe Lisp in terms of its variation from the random expedients other languages adopted. That was not, probably, how McCarthy thought of it. Lisp wasn't designed to fix the mistakes in Fortran; it came about more as the byproduct of an attempt to axiomatize computation.

(E+K)The Roots of Lisp

May 2001

(I wrote this article to help myself understand exactly what McCarthy discovered. You don't need to know this stuff to program in Lisp, but it should be helpful to anyone who wants to understand the essence of Lisp-- both in the sense of its origins and its semantic core. The fact that it has such a core is one of Lisp's distinguishing features, and the reason why, unlike other languages, Lisp has dialects.)

나는  Lisp 을 만든  McCathy 가 Lisp 통해 실현하고자 하는 내용을 명확히 이해하기 위하여 이 사설을 정리한다. Lisp 프로그래밍을 하기위하여 그 내용을 꼭 알 필요는 없다. 하지만 Lisp 의 정수를 이해 한다면 유용할 것이다 -- 기원에 대한 이해와 의미를 이해하는 것. Lisp 만의 특징들과 다른언어와 달리 방언들이 많이 있는 것


In 1960, John McCarthy published a remarkable paper in which he did for programming something like what Euclid did for geometry. He showed how, given a handful of simple operators and a notation for functions, you can build a whole programming language. He called this language Lisp, for "List Processing," because one of his key ideas was to use a simple data structure called a list for both code and data.
1960 에 McCarthy 는 유클리드가 기하학에 한 것과 동일한 수준의 일에 대한 논문을 발표 하였다. 그는 간단한 오퍼래이터와 표기법 들로 새로운 언어를 만들 수 있도록 했다. 그리고 Lisp이라고 불렀는데 이는  List Processing 이라는 뜻이다.왜냐하면 Code 와 Data를 모두 list로 사용하는 것이다.

It's worth understanding what McCarthy discovered, not just as a landmark in the history of computers, but as a model for what programming is tending to become in our own time. It seems to me that there have been two really clean, consistent models of programming so far: the C model and the Lisp model. These two seem points of high ground, with swampy lowlands between them. As computers have grown more powerful, the new languages being developed have been moving steadily toward the Lisp model. A popular recipe for new programming languages in the past 20 years has been to take the C model of computing and add to it, piecemeal, parts taken from the Lisp model, like runtime typing and garbage collection.
McCarthy가 한 일을 이해하는 것은 가치가 있다,  단지 그가 한 것을 확인하는 것 뿐만이 아니라, 프로그래밍이 우리에게 어떤 영향을 주는지도 확인할 수 있다. 지금까지 프로그래밍에는 정말 분명하고, 대표격인 모델이 있다.C와 Lisp 이다. C -> Lisp 방향으로 진화해 가고 있다. runtime typing이나 garbage collection 이 그 예이다.


In this article I'm going to try to explain in the simplest possible terms what McCarthy discovered. The point is not just to learn about an interesting theoretical result someone figured out forty years ago, but to show where languages are heading. The unusual thing about Lisp-- in fact, the defining quality of Lisp-- is that it can be written in itself. To understand what McCarthy meant by this, we're going to retrace his steps, with his mathematical notation translated into running Common Lisp code.
이 사설에서는 McCarthy가 이야기 하고자 하는 것을 정말 간단하게 설명하고자 한다. 40년 전에 누군가가 이론적으로 만들어 놓은 결과물을 배우는 것이 아니라, 컴퓨터 언어 자체가 어디를 향하고 있는 지에 대한 이야기 이다. Lisp의 특이한 점은--Lisp의 수준--그 자신 안에 또 자신을 쓸 수 있다는 것이다. 이 얘기가 무슨 이야기 인지 이해하기 위하여 McCarthy 가 걸어갔던 길을 따라 가 보자, 수학적으로 표기된 것을  Common Lisp 으로 구현하고 실현시켜 보는 것이다.

(E+K)What is Lisp - Table of Contents

understanding the essense of Lisp should be done before actual coding. read, translate, understand at the same time.
Lisp 언어(List Prcessing) 를 익히기 위하여 정리하는 글이며, 프로그래머 폴그레이엄이  Lisp 의 의미를 정리한 글을 읽으면서 개념을 먼저 익히려고 한다.

 

Lisp(전체 목차)

The Roots of Lisp
What Made Lisp Different
A Lisp Startup
Arc: A New Lisp
Lisp Code
Lisp Links
Lisp History
Lisp Quotes
Lisp FAQ