레이블이 Python.인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Python.인 게시물을 표시합니다. 모든 게시물 표시

2016년 3월 11일 금요일

(E, K) Robot Framework, RIDE 1 - Introduction(소개)

Robot Framework is a generic test automation framework for acceptance testing and acceptance test-driven development (ATDD).
Robot Framework는 인수 테스트와 인수 테스트 기반 개발의 테스트 자동화를 위한 프레임워크이다.

It has easy-to-use tabular test data syntax and it utilizes the keyword-driven testing approach. 
다루기 쉬운 표 형태의 문법을 사용하며, 키워드 기반의 테스트를 가능하도록 한다.

Its testing capabilities can be extended by test libraries implemented either with Python or Java, and users can create new higher-level keywords from existing ones using the same syntax that is used for creating test cases.
파이썬이나 자바로 구현된 테스트 라이브러리 를 사용하며, 테스트 케이스를 만들 때 사용한 문법과 동일한 방법으로 추상성을 높인 키워드(사람이 이해하기 쉬운) 를 만들어 사용할 수도 있다.

Robot Framework project is hosted on GitHub where you can find further documentation, source code, and issue tracker. Downloads are hosted at PyPI. The framework has a rich ecosystem around it consisting of various generic test libraries and tools that are developed as separate projects.
Robot Framework 프로젝트는 GitHub에 위치하고 있으며, GitHub 에서 관련 문서, 소스 코드, 이슈 트래커들을 찾아볼 수 있다. 다운로드는 PyPI(Python Package Index, Python Package들을 다운받을 수 있게 모아놓은 싸이트)에서 가능하다. 이 Robot Framework는 풍부한 라이브러리들과 툴들이 여러 프로젝트들에서 개발되고 있다.

Robot Framework is operating system and application independent. The core framework is implemented using Python and runs also on Jython (JVM) and IronPython (.NET).
Robot Framework는 운영체제, 어플리케이션에 독립적이다. 주요 Framework(뼈대)는 파이썬으로 구현되었으며 Jython (JVM) 이나 IronPython (.NET) 을 사용해서도 실행될 수 있다.

RIDE is a test data editor for Robot Framework test data.
RIDE는 Robot Framework 를 위한 테스트 데이터 에디터 이다.(Robot framework IDE 정도인듯)

Robot Framework itself is open source software released under Apache License 2.0, and most of the libraries and tools in the ecosystem are also open source. The development of the core framework is supported by Nokia Networks.
Robot Framework 는 오픈 소스이며 Apache License 2.0, 라이센스를 따른다. 대부분의 라이브러리와 툴 들이 역시 오픈 소스이다. 중요 뼈대는 Nokia Networks. 에서 진행하였다.



Robot Framework는 크게 3가지 특징이 있는데
Clear, Easy, Modular 이다.

Clear.


Robot Framework has a modular architecture that can be extended with bundled and self-made test libraries.
Test data is defined in files using the syntax shown in the examples below. A file containing test cases creates a test suite and placing these files into directories creates a nested structure of test suites.
Robot Framework는 모듈러 구조이기 때문에 사용자 작성 테스트 라이브러리를 만들 수가 있다.
테스트 데이터는 아래 example 문법을 따라서 작성된 파일 안에 정의되어 있다. 테스트 케이스가 작성된 파일에는  폴더 구조로서 내부적으로 반복되는(트리 구조 같이) 테스트 모음을 구성할 수 있게 된다.

Example
*** Settings ***
Documentation     A test suite with a single test for valid login.
...
...               This test has a workflow that is created using keywords in
...               the imported resource file.
Resource          resource.txt

*** Test Cases ***
Valid Login
    Open Browser To Login Page
    Input Username    demo
    Input Password    mode
    Submit Credentials
    Welcome Page Should Be Open
    [Teardown]    Close Browser
                    
Let's start with a real-life example from our web demo project. Here we have a test suite with one test case which tests that login is valid. As you can see, test data syntax is based on keywords.
Keywords are composable, meaning you can define new keywords that use pre-existing keywords. This way, you can abstract details of testing to something that makes immediate sense; for example, we don't need to know what exactly the step Submit Credentials actually does, unless we want to. Test cases are therefore clear and readable, with just the right level of abstraction to convey the intent of the test, rather than the nuts and bolts.
See next example for what you're going to get once this example is run!
위의 실제 삶과 관련된 예제(web demo project에 쓰인)를 가지고 생각해 보자. 여기 테스트 모음이 있고 거기에는 하나의 테스트 케이스가 있다. 보이느느 바와 같이 문법은 Keyword를  기본으로 되어있다. 
Keyword 들은 기존에 존재하던 Keyword 들을 사용한 새로운 조합으로 새롭게 만들어낼 수도 있다. 이런 방법으로, 추상화(사람의 언어같이 알아보기 쉽도록) 할 수 있다. 예를 들어, SUBMIT CREDENTALS(자격 증명을 제출한다) 라는 단어가 실제 어떠한 일을 하는지는 알 필요가 없다.  그래서 테스트 케이스들은 의도에 알맞게 추상화가 되었다면, 알아듣기 쉽고, 읽어 이해하기 쉽다.


Easy.


When test execution is started, the framework first parses the test data. It then utilizes keywords provided by the test libraries to interact with the system under test. Libraries can communicate with the system either directly or using other test tools as drivers.

Test execution is started from the command line. As a result you get report and log in HTML format as well as an XML output. These provide extensive look into what your system does.
테스트가 시작되면, framework는 테스트 데이터를 먼저 분석한다. 그리고 키워드 들이 테스트 라이브러리를 바탕으로 실행될 수 있도록 한다. 라이브러리들은 시스템과 직접 혹은 테스트 툴을 통해서 사용될 수가 있다. 
테스트 실행은 명령 라인을 통해서 시작된다. 테스트의 결과로 테스트 리포트와 로그가 HTML 포맷과 XML 포맷으로 얻어진다.  이 것들은 시스템이 어떻게 동작하는지를 큰 틀에서 볼 수 있도록 한다.


Modular.


Robot Framework architecture

위 형태와 같이 모듈화가 되어있다.


History

The basic ideas for the Robot Framework were shaped in the Pekka Klärck's masters thesis[2] in 2005. The first version was developed at Nokia Siemens Networks the same year. Version 2.0 was released as open source software June 24, 2008 and version 2.8.4 was released February 7, 2014.[3]
The framework is written using the Python programming language and has an active community of contributors. It is released under Apache License 2.0 and can be downloaded from robotframework.org
Robot Framework는 가장 기본적인 아이디어는 2005년 Pekka Klärck[2]의 석사 논문에서 만들어 졌다. Nokia Siemens Networks에서는 첫번째 결과물을 같은 년도에 만들어 내었다. 2.0 버전은 오픈소스로 2008년 7월 24일 릴리스 되었고 2.8.4 버전은 2014년 2월 7일에 릴리스 되었다. Framework는 파이썬 언어(열정적인 컨트리뷰터가 많은)로 제작되었다. Apache License 2.0 라이센스이며 다운로드는 robotframework.org 에서 받을 수 있다.




참조

2016년 2월 21일 일요일

(K)Excel 파일의 특정 Sheet 데이터를 python으로 업데이트 하는 법

내용 요약
    1. csv 파일을 읽은 내용을 Excel 파일의 Sheet에 넣는 내용.
    2. Sheet 자체를 Copy 하고 싶었으나 아직 그런 라이브러리는 없는것 같습니다.
    3. 혹시 더 스마트한 방법이 있으면 알려 주세요.

2016년 1월 29일 금요일

(K, E) Python important features(파이썬 중요한 문법들)

요약
    1. 파이썬을 공부하면서 중요하다고 생각되는 항목을 나열한다.
    2. 각 항목들 별로 중요도가 다를 테니 순위를 매긴다.
    3. 중요한 내용은 지속 업데이트 하면서 순위를 바꾼다.
   *. 언어에 대한 숙련도가 달라지고 보는 눈이 넓어질 수 있기 때문

Summary
    1. List important features, when my study goes.
    2. Each features has different weight, rank those list
    3. Contents and its ranks should be updated
   * because  I may get different insights.

Lists

import pandas
    read_csv()
이 함수만 쓰면, csv 파일의 내용을 2차원(Dataframe) 구조로 가져와서 행, 열에 대해 접근해서 사용하기만 하면 된다. 아주 심플하다.
with this function, get csv file contents as 2 Dimensional(Dataframe) Structure and access it with row, column index

② df.loc[a:b], df.iloc[1:2], df.ix[a:b] or df.ix[1:2]
Dataframe 에 접근하는 index는 크게 3가지 종류로 볼 수 있다.
Dataframe has 3 main indexer
loc(location), iloc(integer location), ix(index)
라벨의 이름으로 하는 것이 loc, 위치로 하는 것이 iloc, 라벨이나 위치 둘 다 가능한 ix
access with label name 'loc', access with data location(integer numer) 'iloc', both ix

 import openpyxl
    workbook1 = openpyxl.load_workbook('ExcelPowerQueryConsumePredict.xlsx')
    sheet = workbook1.get_sheet_by_name('AAA')
excel 파일의 WorkBook을 가져오고 특정 Sheet를 가져와서 수정할 수 있다.
We can get WorkBook, Sheet contents and modify it.
구현된 Code link
actual Code link

 w[2:5] - slicing
list 의 일부분 만을 발최할 때 ':' 와 위치를 사용하여 자를 수 있다.
when extracting subset of structire ':' and location will be used
w = "Hello World"
print w[2:4] -> "llo"

 a, b = 1, 3
out[]:  a: 1, b: 3
쉼표를 쓰면 = 앞뒤로 여러개가 있어도 된다, 단 r value, l value 수는 같아야 한다.
If we use comma, we can assign multiple values. the numbers should be same.
이 형식은 함수형 프로그래밍을 할 때 유용할 것이라고 이해했다.
I understand this syntax is useful for the functional programming

 import re
    phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
    mo = phoneNumRegex.search('My number is 415-555-4242.')
    mo.group(1)
   out[]: '415'
    레귤러 익스프레션을 사용하면 특정한 포맷의 데이터에서 특정 부분만을 뽑아낼 수 있다.
    using regular expression , we can extract specific format data from fixed format.

 "a" in ["a", "b", "c", "d"] and "a" in ("a", "b", "c", "d")
out[]: True
속해있다는 것을 in 이라는 키워드로 직관적으로 사용할 수 있었다.
intuitive keyword "in"
추가로 () 는 tuple 이고 []는 List 이다.
additionally () mean Tuple, [] means List

 print "Hello" + "World" 와 print "Hello", "World" 의 차이점
둘 다 print 가 가능하다는 공통점이 있지만
'+' 는 두 스트링을 이어주는 역할이고, ',' 는 두 개의 문자열을 가진 리스트를 만들어 준 것이기 때문에 다르다.
each expression could print but + makes one string, , make list of 2 string.

⑨ if 0 < x < 20:
        print "Number \'x\' is between 0 and 20
    직관적으로 조건문을 만들 수 있다.(일반적으로 프로그래밍 에서는 0 < x and x < 20) 







⑩ print """ 여러줄에 

        걸쳐서
        표현하고 싶을 경우
         \" 혹은 \' 3개로 표현 """


super() 함수는  class 상속 시에 부모의 객체를 불러온다.
* next items: import, keywords
Reference

그래서 자식  class 에서 __init__  시에 특정 동작을 추가하고 싶으면 추가한 다음 뒤에  super().__init__()  함수를 수행하면 부모의 동작을 그대로 하여 의도에 맞게 사용할 수 있다.

    a, b = 1, 3
    함수형 프로그래밍이란 어떤 것인가?
    What is Functional Programming
    Tuple and List
    https://automatetheboringstuff.com/



2015년 11월 22일 일요일

(K)A modern guide to getting started with Data Science and Python-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)

 파이썬은 풍부하고 건강한 데이터 사이언스 툴 환경이다. 불행하게도, 이 환경의 밖에서 보는 사람들에게는 정글처럼 보일 수도 있다. 이 블로그에서는 이 PyData(역자주>보통 data management, processing, analytics, and visualization. 을 얘기하는 python을 사용한 데이터를 다루는 것을 의미)에 단계별로 접근할 수 있는 가이드를 제공하려고 한다.

현존하고 있는 PyData 패키지 들에 무슨 문제가 있는지 물어볼 수 있다. 너무 많은 선택권과 정보를 주는 것은 초보자가 파악하기 어렵게 되기 쉽다고 생각한다. 그래서 나는 10%의 정보를 제공하여 접근이 쉽게 만들되, 그 10%로 90%의 일을 커버할 수 있는 core 를 소개하려고 한다. 이 10%의 기초적이지만 필수적인 것들만 마스터 하고 나면 그 다음은 당신이 가고자 하는 방향(다른 기법들)으로 가면 된다.

 좋은 것은 내가 소개할 10%는 정말 데이터 사이언스의 많은 부분을 할 수 있을거라는 사실이다.

Installation

 나에게 종종 사람들이 찾아와서, "파이썬이 데이터 사이언스(역자주>PyData와 같은 의미라고 이해)에 정말 유용하다는걸 많이 들어서 시작해 보았지만 첫 이틀은 파이썬 설치하는데 시간을 보내버렸어요" 라고 한다.

 파이썬을 이용하고 싶으니 파이썬을 직접 설치하는 것은 의미 있는 일이지만,  실제 필요하지 않을 것 까지 포함한 PyData의 full package 를 설치하는 것은 비 효율적인 일이다. 그래서 나는 full package 설치하는 것을 반대한다.

 운이 좋게도,  Continuum 의 괜찮은 사람들이 기본적인 PyData가 모두 깔려있는 Anaconda Python distribution 을 만들어 놓았다.

 그리고 Anaconda Python distribution 에 깔려있지 않은 module 들도 GUI 를 통해서 쉽게 설치할 수 있다. 그리고 모든 platform에 돌아갈 수도 있어서 당신의 이틀을 save 해 줄 것이다.

IPython Notebook

파이썬을 설치하고 난 이후에, 다수의 사람들이 바로 설치를 한다.
아주 당연하지만 불행하게도 완전히 잘못된 것이다.

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

나는 당신에게 IPython Notebook을 바로 사용하라고 얘기하고 싶다. 그와 관련하여 어떤 의문도 품지 않아도 된다, 후회하지 않을 것이다.
간략하게 설명하면, IPython Notebook은 웹 브라우저를 통하여 Python Shell이다.
IPyhon Notebook은 코드, 글자 그리고 여러 그림들을 쓸 수 있게 한다.(입출력 까지도 가능하게 한다.)

이 블로그는 IPyNB으로 쓰여 졌으며, Python 컨퍼런스에 가 보면 IPython Notebook으로 발표하지 않는 세션은 없을 정도로 널리 사용되고 있다.
Anaconda를 깔면 같이 깔리는 것이기 때문에 당신은 사용만 하면 된다. 여기 그 사용 예를 적어 놓았다.

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


이 것은 rocket 이다 -- 컨퍼런스에서 core devs 들의 새로운 것들에 대한 이야기를 들을 때마다 난 정말 놀란다.

앞선 기능들에 대한 아이디어를 듣기 위하여, 아래의 IPython Widget 들에 대한 튜토리얼을 들어 보아라.

이 튜토리얼은 plot 그리는 것에 대한 능력을 얻을 수 있을 것이다.

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

Pandas


보통, 사람들은 당신에게 다차원 배열을 제공해 주는 Numpy부터 배우라고 얘기한다(넘파이 이다. 넘피가 아니라!)

분명히 몇년 전에는 맞는 방법이었지만 요즘에 나는 Numpy를 거의 사용하지 않는다.

왜냐하면 Numpy는 더 발전된 인터페이스를 가지는 라이브러리들에서 사용되는 core 라이브러리가 되었기 때문이다.

그래서 그 최신 라이브러리는 Pandas이다.

Pandas는 거의 모든 종류의 인풋 아웃풋(데이터 베이스 포함)을 지원한다.SQL-like 함수들, 없는 값들을 다루는 것들, 시간순서데이터, 기본 plot그리기, 기본 통계 기능들 등등.

이 기능들을 배우려고 하면 시간이 꽤 걸리긴 한다. 나는 다음 문서들을 먼저 배우라고 권하고 싶다.

이 것들에 시간투자를 하면 데이터를 다루는데 있어 훨씬 효율적이 될 것이다. 나를 믿어도 좋다! 여기 몇가지 트릭들이 있다.
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
컬럼들은 그 컬럼 이름으로 접근:
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]
E 라는 그룹에 있는 D 컬럼의 값들을 더할 때:

In [21]:
df.groupby('E').sum().D
Out[21]:
E
test     2
train    4
Name: D, dtype: int32
이와 동일한 것을 Numpy(아니면 gasp 나 matlab)로 하려면 정말 고생할 것이다.

이와 비슷한 예제들이 정말 많다. 그래도 확신을 가지지 못하겠다면, 이 문서를 또 보아라.

Seaborn


파이썬에서 그림 그리는 main 라이브러리는 Matplotlib 이다.

하지만 Numpy를 권장하지 않았던 동일한 이유로 Matplotlib를 권장하지 않는다.

Matplotlib는 정말 파워풀 하지만 꽤나 복잡하고 까다로운 것이 있어 plot이 깔끔하게 보이기 어렵다.

그래서 나는 Seaborn을 사용하라고 권장한다.

Seaborn은 Matplotlib를 core library로 사용한다.(pandas가 Numpy에게 했던 것처럼)

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를 잘 조합해서 사용할 수 있다.

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');
보여지는 것처럼, 하나의 라인을 사용했을 뿐인데 꽤나 복잡한 통계적인 plot이 선형회귀선과 신뢰구간, 한계, 상관계수를 나타내었다.

이런 plot을 matplotlib를 사용해서 재현해 내려면 선형회귀 관련 scipy를 불러내는 등 (어지러운)코드가 꽤나 필요할 것이다. 이 것과 다음 예시는 the tutorial on quantitative linear models 에서 가지고 왔다.

Works well with Pandas DataFrame

데이터는 구조를 가지고 있다. 종종 데이터들 자체는 그룹이나 카테고리같은 구조를 지니고 있다.(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
담배를 피는 사람들은 담배를 안피는 사람들에 비교해서 팁을 다르게 요구하게 됩니다. seaborn 을 사용하지 않는다면 pandas 에서도 groupby 함수도 사용하고 그 외에도 복잡한 코드를 적어서(선형회귀 등) 표현하게 될 것입니다.
In [11]:
sns.lmplot("total_bill", "tip", tips, col="smoker");
정말 간단하지 않나요?

더 깊이 들어가면 어떤 특정한 상황에서 더 세부적인 plot을 그리고 싶을 것이다. seaborn 라이브러리는 matlablib 를 불러서 추가적인 작업을 더 해줄 뿐이지만 대부분의 경우에 나는 seaborn이 제공해 주는것에 꽤나 만족할 수 있었다.

Conclusions

이 블로그 포스트는 Python 으로 Data Science 를 시작하려고 할 때 가장 효율적으로 공부할 수 있도록 최소한의 package를 제공하는 것을 목적으로 하였다.

Further reading

Acknowledgements

이 포스트의 초기 버전에 대한 좋은 피드백을 주었던 Katie Green and Andreas Dietzel 에게 감사 드립니다.