2015년 11월 22일 일요일

(E+K)A modern guide to getting started with Data Science andPython-korean translation page

For Original Post(원글) see

http://twiecki.github.io/blog/2014/11/18/python-for-data-science/#comment-2369025394


Python으로 데이터 를 다루는 기술들을 배우는데 있어 정말 유용한 블로그가 있어 번역을 해 보았습니다.


"이 분야를 배울 때는 배우려는 목적에 따라서 이 순서대로 배우면 돼! 그리고 제일 중요한 부분은 이 부분이니깐 이 부분만 알아도 문제 없을꺼야" 

저는 개인적으로 새로운 것을 배울 때 위 와 같은 말을 듣고 싶었는데 그렇게 얘기 해주네요. 


영어+한글, 한글 따로 적어 두었습니다.

영어+한글: http://stackrefactoring.blogspot.kr/2015/11/eka-modern-guide-to-getting-started.html
한글: http://stackrefactoring.blogspot.kr/2015/11/ka-modern-guide-to-getting-started-with.html

======

 

A modern guide to getting started with Data Science and Python

데이터 사이언스와 관련된 파이썬을 시작하기 위한 최신 가이드(글 게시일 2014 11/18)

 Python has an extremely rich and healthy ecosystem of data science tools. Unfortunately, to outsiders this ecosystem can look like a jungle (cue snake joke). In this blog post I will provide a step-by-step guide to venturing into this PyData jungle.
 파이썬은 풍부하고 건강한 데이터 사이언스 툴 환경이다. 불행하게도, 이 환경의 밖에서 보는 사람들에게는 정글처럼 보일 수도 있다. 이 블로그에서는 이 PyData(역자주>보통 data management, processing, analytics, and visualization. 을 얘기하는 python을 사용한 데이터를 다루는 것을 의미)에 단계별로 접근할 수 있는 가이드를 제공하려고 한다.

 What's wrong with the many lists of PyData packages out there already you might ask? I think that providing too many options can easily overwhelm someone who is just getting started. So instead, I will keep a very narrow scope and focus on the 10% of tools that allow you to do 90% of the work. After you mastered these essentials you can browse the long lists of PyData packages to decide which to try next.
현존하고 있는 PyData 패키지 들에 무슨 문제가 있는지 물어볼 수 있다. 너무 많은 선택권과 정보를 주는 것은 초보자가 파악하기 어렵게 되기 쉽다고 생각한다. 그래서 나는 10%의 정보를 제공하여 접근이 쉽게 만들되, 그 10%로 90%의 일을 커버할 수 있는 core 를 소개하려고 한다. 이 10%의 기초적이지만 필수적인 것들만 마스터 하고 나면 그 다음은 당신이 가고자 하는 방향(다른 기법들)으로 가면 된다.

 The upside is that the few tools I will introduce already allow you to do most things a data scientist does in his day-to-day (i.e. data i/o, data munging, and data analysis).
 좋은 것은 내가 소개할 10%는 정말 데이터 사이언스의 많은 부분을 할 수 있을거라는 사실이다.

Installation

 It has happened quite a few times that people came up to me and said "I heard Python is amazing for data science so I wanted to start learning it but spent two days installing Python and all the other modules!".
 나에게 종종 사람들이 찾아와서, "파이썬이 데이터 사이언스(역자주>PyData와 같은 의미라고 이해)에 정말 유용하다는걸 많이 들어서 시작해 보았지만 첫 이틀은 파이썬 설치하는데 시간을 보내버렸어요" 라고 한다.

 It's quite reasonable to think that you have to install Python if you want to use it but indeed, installing the full PyData stack manually when you don't know which tools you actually need is quite an undertaking. So I strongly recommend against doing that.
 파이썬을 이용하고 싶으니 파이썬을 직접 설치하는 것은 의미 있는 일이지만,  실제 필요하지 않을 것 까지 포함한 PyData의 full package 를 설치하는 것은 비 효율적인 일이다. 그래서 나는 full package 설치하는 것을 반대한다.

 Fortunately for you, the fine folks at Continuum have created the Anaconda Python distribution that installs most of the PyData stack for you,
 운이 좋게도,  Continuum 의 괜찮은 사람들이 기본적인 PyData가 모두 깔려있는 Anaconda Python distribution 을 만들어 놓았다.

 and the modules it doesn't provide out of the box can easily be installed via a GUI. The distribution is also available for all major platforms so save yourself the two days and just use that!
 그리고 Anaconda Python distribution 에 깔려있지 않은 module 들도 GUI 를 통해서 쉽게 설치할 수 있다. 그리고 모든 platform에 돌아갈 수도 있어서 당신의 이틀을 save 해 줄 것이다.

IPython Notebook

After Python is installed, most people start by launching it.
파이선을 설치하고 난 이후에, 다수의 사람들이 바로 설치를 한다.
Again, very reasonable but unfortunately dead wrong.
아주 당연하지만 불행하게도 완전히 잘못된 것이다.
I don't know a single SciPythonista that uses the Python command shell directly (YMMV).

나는 파이선의 커맨드셸을 바로 이용하는 사람을 한명도(역자주>SciPythonista는 파이썬을 사용하는 사람, 셸은 Interface라고 이해,  command shell은 커맨드 명령 화면) 알지 못한다.
Instead, IPython, and specifically the IPython Notebook are incredibly powerful Python shells that are used ubiquitously in PyData.
대신에 사용할 수 있는,  IPython과 IPython Notebook은 PyData를 다룰 때 쓰는 정말 강력한 파이선 셸이다.

I strongly recommend you directly start using the IPython Notebook (IPyNB) and don't bother with anything else, you won't regret it.
나는 당신에게 IPython Notebook을 바로 사용하라고 얘기하고 싶다. 그와 관련하여 어떤 의문도 품지 않아도 된다, 후회하지 않을 것이다.
In brief, the IPyNB is a Python shell that you access via your web browser.
간략하게 설명하면, IPython Notebook은 웹 브라우저를 통하여 Python Shell이다.
It allows you to mix code, text, and graphics (even interactive ones).
IPyhon Notebook은 코드, 글자 그리고 여러 그림들을 쓸 수 있게 한다.(입출력 까지도 가능하게 한다.)

This blog post was written in an IPyNB and it's rare to go find a talk at a Python conference that does not use the IPython Notebook.
이 블로그는 IPyNB으로 쓰여 졌으며, Python 컨퍼런스에 가 보면 IPython Notebook으로 발표하지 않는 세션은 없을 정도로 널리 사용되고 있다.
It comes preinstalled by Anaconda so you can just start using it. Here's an example of what it looks like:
Anaconda를 깔면 같이 깔리는 것이기 때문에 당신은 사용만 하면 된다. 여기 그 사용 예를 적어 놓았다.

In [1]:
print('Hello World')
Hello World



This thing is a rocket -- every time I hear one of the core devs talk at a conference I am flabbergasted by all the new things they cooked up.
이 것은 rocket 이다 -- 컨퍼런스에서 core devs 들의 새로운 것들에 대한 이야기를 들을 때마다 난 정말 놀란다.

To get an idea for some of the advanced capabilities, check out this short tutorial on IPython widgets.
앞선 기능들에 대한 아이디어를 듣기 위하여, 아래의 IPython Widget 들에 대한 튜토리얼을 들어 보아라.

These allow you to attach sliders to control a plot interactively:
이 튜토리얼은 plot 그리는 것에 대한 능력을 얻을 수 있을 것이다.


In [1]:
from IPython.display import YouTubeVideo
YouTubeVideo('wxVx54ax47s') # Yes, it can also embed youtube videos.
Out[1]:

Pandas



Normally, people recommend you start by learning NumPy (pronounced num-pie, not num-pee!) which is the library that provides multi-dimensional arrays.
보통, 사람들은 당신에게 다차원 배열을 제공해 주는 Numpy부터 배우라고 얘기한다(넘파이 이다. 넘피가 아니라!)

Certainly this was the way to go a few years ago but I hardly use NumPy at all today.
분명히 몇년 전에는 맞는 방법이었지만 요즘에 나는 Numpy를 거의 사용하지 않는다.

The reason is that NumPy became more of a core library that's used by other libraries which provide a much nicer interface.
왜냐하면 Numpy는 더 발전된 인터페이스를 가지는 라이브러리들에서 사용되는 core 라이브러리가 되었기 때문이다.

Thus, the main library to use for working with data is Pandas.
그래서 그 최신 라이브러리는 Pandas이다.

It can input and output data from all kinds of formats (including databases), do joins and other SQL-like functions for shaping the data, handle missing values with ease, support time series, has basic plotting capabilities and basic statistical functionality and much more.
Pandas는 거의 모든 종류의 인풋 아웃풋(데이터 베이스 포함)을 지원한다.SQL-like 함수들, 없는 값들을 다루는 것들, 시간순서데이터, 기본 plot그리기, 기본 통계 기능들 등등.

There is certainly a learning curve to all its features but I strongly suggest you go through most of the documentation as a first step.
이 기능들을 배우려고 하면 시간이 꽤 걸리긴 한다. 나는 다음 문서들을 먼저 배우라고 권하고 싶다.

Trust me, the time you invest will be set off a thousand fold by being more efficient in your data munging. Here are a few quick tricks to what your appetite:
이 것들에 시간투자를 하면 데이터를 다루는데 있어 훨씬 효율적이 될 것이다. 나를 믿어도 좋다! 여기 몇가지 트릭들이 있다.
In [18]:
import pandas as pd

df = pd.DataFrame({ 'A' : 1.,
                    'B' : pd.Timestamp('20130102'),
                    'C' : pd.Series(1, index=list(range(4)), dtype='float32'),
                    'D' : pd.Series([1, 2, 1, 2], dtype='int32'),
                    'E' : pd.Categorical(["test", "train", "test", "train"]),
                    'F' : 'foo' })

In [19]:
df
Out[19]:
ABCDEF
012013-01-0211testfoo
112013-01-0212trainfoo
212013-01-0211testfoo
312013-01-0212trainfoo
Columns can be accessed by name:
컬럼들은 그 컬럼 이름으로 접근:
In [17]:
df.B
Out[17]:
0   2013-01-02
1   2013-01-02
2   2013-01-02
3   2013-01-02
Name: B, dtype: datetime64[ns]
Compute the sum of D for each category in E:
E 라는 그룹에 있는 D 컬럼의 값들을 더할 때:

In [21]:
df.groupby('E').sum().D
Out[21]:
E
test     2
train    4
Name: D, dtype: int32
Doing this is in NumPy (or *gasp* Matlab!) would be much more clunky.
이와 동일한 것을 Numpy(아니면 gasp 나 matlab)로 하려면 정말 고생할 것이다.

There's a ton more. If you're not convinced, check out 10 minutes to pandas where I borrowed this from.
이와 비슷한 예제들이 정말 많다. 그래도 확신을 가지지 못하겠다면, 이 문서를 또 보아라.

Seaborn


The main plotting library of Python is Matplotlib.
파이썬에서 그림 그리는 main 라이브러리는 Matplotlib 이다.

However, I don't recommend using it directly for the same reason I don't recommend spending time learning NumPy initially.
하지만 Numpy를 권장하지 않았던 동일한 이유로 Matplotlib를 권장하지 않는다.

While Matplotlib is very powerful, it is its own jungle and requires lots of tweaking to make your plots look shiny.
Matplotlib는 정말 파워풀 하지만 꽤나 복잡하고 까다로운 것이 있어 plot이 깔끔하게 보이기 어렵다.

So instead, I recommend to start using Seaborn.
그래서 나는 Seaborn을 사용하라고 권장한다.

Seaborn essentially treats Matplotlib as a core library (just like Pandas does with NumPy).
Seaborn은 Matplotlib를 core library로 사용한다.(pandas가 Numpy에게 했던 것처럼)

I will briefly illustrate the main benefits of seaborn. Specifically, it:

Seaborn의 장점을 간략하게 적어 보면:
  1. creates aesthetically pleasing plots by default (for one thing, it does not default to the jet colormap),
  2. creates statistically meaningful plots, and
  3. understands the pandas DataFrame so the two work well together.

1. 기본 plot이 아름답다.(jet colormap 의 경우는 그렇지 않다.)
2. 통계적으로 의미있는 그림들을 그려낼 수 있다.
3. Pandas 를 잘 이해하면 두 library를 잘 조합해서 사용할 수 있다.

While pandas comes prepackaged with anaconda, seaborn is not directly included but can easily be installed with conda install seaborn.
Pandas는 anaconda package 에 포함되어 있는 반면에 Seaborn은 들어있지 않다. 하지만 conda install seaborn. 명령을 통해서 쉽게 설치할 수 있다.

Statistically meaningful plots

In [5]:
%matplotlib inline # IPython magic to create plots within cells
In [7]:
import seaborn as sns

# Load one of the data sets that come with seaborn
tips = sns.load_dataset("tips")

sns.jointplot("total_bill", "tip", tips, kind='reg');
As you can see, with just one line we create a pretty complex statistical plot including the best fitting linear regression line along with confidence intervals, marginals and the correlation coefficients.
보여지는 것처럼, 하나의 라인을 사용했을 뿐인데 꽤나 복잡한 통계적인 plot이 선형회귀선과 신뢰구간, 한계, 상관계수를 나타내었다.

Recreating this plot in matplotlib would take quite a bit of (ugly) code, including calls to scipy to run the linear regression and manually applying the linear regression formula to draw the line (and I don't even know how to do the marginal plots and confidence intervals from the top of my head). This and the next example are taken from the tutorial on quantitative linear models.
이런 plot을 matplotlib를 사용해서 재현해 내려면 선형회귀 관련 scipy를 불러내는 등 (어지러운)코드가 꽤나 필요할 것이다. 이 것과 다음 예시는 the tutorial on quantitative linear models 에서 가지고 왔다.

Works well with Pandas DataFrame


Data has structure. Often, there are different groups or categories we are interested in (pandas' groupby functionality is amazing in this case). For example, the tipsdata set looks like this:
데이터는 구조를 가지고 있다. 종종 데이터들 자체는 그룹이나 카테고리같은 구조를 지니고 있다.(pandas 의 groupby 함수가 여기에 딱 맞는 기능을 가지고 있습니다). 예를 들자면, tip 관련된 데이터가 있는데
In [9]:
tips.head()
Out[9]:
total_billtipsexsmokerdaytimesize
016.991.01FemaleNoSunDinner2
110.341.66MaleNoSunDinner3
221.013.50MaleNoSunDinner3
323.683.31MaleNoSunDinner2
424.593.61FemaleNoSunDinner4
We might ask if smokers tip differently than non-smokers. Without seaborn, this would require a pandas groupby together with the complex code for plotting a linear regression. With seaborn, we can provide the column name we wish to split by as a keyword argument to col:
담배를 피는 사람들은 담배를 안피는 사람들에 비교해서 팁을 다르게 요구하게 됩니다. seaborn 을 사용하지 않는다면 pandas 에서도 groupby 함수도 사용하고 그 외에도 복잡한 코드를 적어서(선형회귀 등) 표현하게 될 것입니다.
In [11]:
sns.lmplot("total_bill", "tip", tips, col="smoker");
Pretty neat, eh?
정말 간단하지 않나요?

As you dive deeper you might want to control certain details of these plots at a more fine grained level. Because seaborn is just calling into matplotlib you probably will want to start learning this library at that point. For most things I'm pretty happy with what seaborn provides, however.
더 깊이 들어가면 어떤 특정한 상황에서 더 세부적인 plot을 그리고 싶을 것이다. seaborn 라이브러리는 matlablib 를 불러서 추가적인 작업을 더 해줄 뿐이지만 대부분의 경우에 나는 seaborn이 제공해 주는것에 꽤나 만족할 수 있었다.

Conclusions


The idea of this blog post was to provide a very select number of packages which maximize your efficiency when starting with data science in Python.
이 블로그 포스트는 Python 으로 Data Science 를 시작하려고 할 때 가장 효율적으로 공부할 수 있도록 최소한의 package를 제공하는 것을 목적으로 하였다.

Further reading

Acknowledgements


Thanks to Katie Green and Andreas Dietzel for helpful feedback on an earlier draft.
이 포스트의 초기 버전에 대한 좋은 피드백을 주었던 Katie Green and Andreas Dietzel 에게 감사 드립니다.

2015년 10월 20일 화요일

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

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

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

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

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

---

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

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

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

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





2015년 10월 18일 일요일

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

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

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

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

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

---

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

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






2015년 10월 17일 토요일

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

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

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

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

---

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

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

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

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

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

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

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


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

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

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

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

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

---

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