2011년 4월 30일 토요일

야구 상식.



퀄리티 스타트(Quality Start, QS)
선발로 등판한 투수가 6이닝 이상 공을 던지고 자책점을 3점 이하로 막는 투구 내용.




포일
투수가 던진공을 포수가 충분히 포구 할 수 있었는데도 불구하고 포구에러를 범했을 때. 이는 폭투와는 차이가 있는데. 폭투는 투수 실책이고, 포일은 포수 실책이다. 패스트볼(Passed Ball)이라고도 한다. 




세이브의 조건

승리투수의 요건을 충족시키지 않고, 승리팀의 마지막 투수로 등판해 마지막까지 앞선 상황을 유지한 채 경기를 종료시킨 상태에서, 이하의 조건을 1개 이상 충족시킨 경우에 그 투수의 세이브가 기록된다.

 - 자기편팀이 3점 이하의 리드를 하고 있을 때 출장하여 최저 1회(回) 투구하였을 경우

 - 루상의 주자 또는 상대하는 타자 또는 그 다음 타자가 득점하면 동점이 되는 상황에서 출장하였을 경우

 - 최저 3회(回) 이상 효과적인 투구를 하였을 경우.

세이브의 기록은 1경기 한 구원투수에게 한하여 부여된다.
 
 

블론세이브(Blown save:세이브를 날려버린 상태)
세이브 기회에 등판한 투수가 상대 팀에 동점, 또는 역전을 허용한 경우. 동점,  또는 역전이 된 실점이 자책점과는 상관이 없다. 그 후 팀이 역전승리한 경우 등에 의해 패전투수가 되지 않았다고 해도(또는 승리 투수가 되어도) 블론세이브 기록은 유지된다. 





KBO가 공식적으로 명시한 홀드 규정

세이브 규정에 준해 해당 조건을 갖추면서 도중에 물러난 투수에게 ‘홀드1’을 준다. 조건만 충족하면 여러 명의 투수에게도‘홀드1’을 준다. 위의 조건만 충족하면, 그 다음의 후속 투수가 점수를 내주어 동점 및 역전이 되었다고 해도 ‘홀드1’을 준다. 그러나 이닝 도중에 주자를 남겨 놓고 물러난 때에는 그 주자가 후속 투수에 의해 동점 및 역전이 되었다면 제외한다. 승리투수, 패전투수에게는 홀드를 주지 않는다.


출처 : 위키피디아

 

WHIP - 이닝당 출루 허용률


WHIP (Walks Plus Hits Divided by Innings Pitched)

이닝당 출루 허용률. 야구에서 투수의 성적 평가 항목 중 하나로서 피안타 수와 사사구 수를 투구 이닝으로 나눈 수치이다. 한 이닝에 몇 명의 주자를 내보냈는지 나타내며, 메이저 리그 야구에서는 공식 기록으로 활용하고 있다. 여기서 Walks Plus Hits라 하는 것은 안타와 볼넷, 고의사구를 포함하며, 몸에 맞는 볼은 포함하지 않는다.

 
출처 : http://ko.wikipedia.org/wiki/WHIP  



 

미각의 제국 - 황교익
































미각의제국

카테고리

역사/문화 > 문화일반 > 음식문화

지은이

황교익 (따비, 2010년)

상세보기





책을 읽고 있자니, 맛있는 것들이 점점 사라져가는 기분이 들어 아쉽다. 어릴때 맛있게 먹던 콩나물과 두부도 그리워 진다. 이제는 맛있는 재료를 구하는것 자체가 힘들어져 버렸다. 

저자는 사라저 가고 있는 음식들에 대한 아쉬움과 온갓 조미료로 물들어가는 요리에 대한 안타까움을 드러낸다. 또한, 맛에 대한 보수적인 태도와 동시에 맛에 대한 사대주의도 버리길 바라고 있다. 

맛있는 음식을 즐기려면 노력과 교육이 필요하다. 그리고, 맛있는 음식을 찾는 일은 동시에 맛이 없는 음식을 많이 먹을 수 밖에 없는 일이 된다는 사실을 잊으면 안된다. 


책의 몇몇 구절들.. 


# 미식
악식과 동의어이다.
어둠이 있어야 빛의 황홀도 있는 것이다.
미식이란, 음식에서 어둠의 맛까지 느끼는 일이다.


# 설탕
  단맛은 모든 동물에게 중독을 일으킨다. 개마니 파리 같은 미술에서부터 고등동물이라는 인간에 이르기까지 모두 단맛에 즉각적으로 반응한다. 그러니까, 단 음식을 먹게 되면 이게 어떤 맛을 지닌 음식인지 생각할 겨를도 없이 뇌에서, 아니 거의 말초신경 단위에서 '맛있다'하고 결정해 버린다.

  대박 음식점 주인들은 단맛에 대한 이런 '무뇌아적 반응'을 잘 파악하고 있다. 된장찌게나 김치찌개, 고등어조림에 도 강정을 만들 만큼 설탕을 푼다. 이런 음식점들의 주요 고객은 대부분 젊은이들인데, 미성숙한 미각의 소유자일수록 이 단맛에 쉽게 자극받고 중동도기 때문이다. 

  음식에서 설탕은 당의정의 코팅과 같다. 식재료의 온갖 맛을 설탕으로 감싸 버리면 중독자에게는 환상의 맛이다. 그러니 설탕 중독자들을 위해서는 좋은 식재료와 좋은 맛을 낼 수 있는 기술이 필요 없다. 중독인 줄 모르는 중독자들에게 굳이 비싼 해독제를 투여할 이유가 없으며, 또 자칫하면 돈 들이고도 '맛없다' 욕만 들을 수도 있으니, 나라도 그러기 힘들 것이다. 


# 커피
  커피가 뜨거울 때는 맛 성분의 활동이 심하여 신맛, 단맛, 쓴맛의 밸런스를 짐작하기 어렵다. 커피가 식었을 때에야 그 커피의 맨얼굴을 대할 수 있다. 또 이때면 썩은 원도 냄새, 커피의 탄내, 금속성의 속껍질 냄새까지 맡을 수 있다. 프랜차이즈 업체의 커피가 강배전으로 쓴맛만 내는 것은 커피가 식었을 때에조차 그 잡내들을 숨기기 위한 것이다. 

참고.
  배전은 생두를 볶는 것을 말하고, 배전의 강도는 크게 1~8 단계로 나뉜다. 
이탈리아에서는 에스프레소를 5,6 정도로 먹는데 반해, 스타벅스와 같은 프랜차이즈는 7,8정도의 강배전을 사용한다고 함. 


 # 젖
  젖을 때고 난 다음에도 얼마간 아이는 사랑을 먹는다. 어미는 밥알을 꼭꼭 씹어 입 안에 넣어 주고, 생선 산을 발라 주고, 이것 먹어라 저것 먹어라 밥 위에 반찬을 올려 준다. 그러다가 어느 순간에 이 사랑은 차츰 희미해지고 그냥 영양 덩어리나 맛으로 음식을 먹게 된다. 뭔가를 먹어야만 살 수 있는 인간에게 사랑 없는 음식을 먹는다는 것은 그 자체로 불행이다. 끼니로서의 음식, 살기 위해서 어쩔 수 없이 먹는 음식, 서글프고 처연한.

  결국 사람이 먹어야 하는 것은, 먹고자 하는 것은, 젖과 같은 사랑이다.
 



 

2011년 4월 26일 화요일

나를 부르는 숲 - 빌 브라이슨
































나를부르는숲

카테고리

과학 > 교양과학 > 자연생태기행

지은이

빌 브라이슨 (동아일보사, 2008년)

상세보기





떠나고 싶은 마음이 든다. 


항상 지금은 다음을 위한 과정에 불과하다. 나쁘게 보면 근근이 빚을 가려나가는 빚진 죄인 같다. 철학적으로 말하면 자신의 삶에서 자신이 소외되고 있다. 빚을 다 갚았을 때-아이들이 다 자라고 직장에서 놓여날 나이-에는 이미 자신에게 시험해볼 만한 것들은 남아 있지 않다.  
옮긴이 후기에서.. 


옮긴이는 홍은택.
現 네이버 미디어 담당 이사.  


 

2011년 4월 19일 화요일

Python 제너레이터 재사용. (Reseting generator object)

참고: http://stackoverflow.com/questions/1271320/reseting-generator-object-in-python


# 문제. 

yield로 제너레이터를 만들어서 사용하고, 다시 사용할 필요가 있을때.. 
y = FunctionWithYield()
for x in y: print(x)
#here must be something to reset 'y'
for x in y: print(x)
 


# 해결책

1) itertools.tee()

참조: http://docs.python.org/library/itertools.html#itertools.tee
y, y_backup = tee(FunctionWithYield())
for x in y: print(x)
for x in y_backup: print(x)

This itertool may require significant auxiliary storage (depending on how much temporary data needs to be stored). In general, if one iterator uses most or all of the data before another iterator starts, it is faster to use list() instead of tee().





2) list()

y = list(FunctionWithYield())
for x in y: print(x)
# can iterate again:
for x in y: print(x)


상황에 맞춰서 사용..

2011년 4월 18일 월요일

Python 하둡 스트리밍 (Hadoop Streaming) #1


# 참조
http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/


# 실행


./bin/hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar \


    -file .../mapper.py -mapper .../mapper.py  \


    -file .../reducer.py -reducer .../reducer.py  \


    -input input_data  \


    -output output_data






# 기본 예제 : word count

1. mapper.py


#!/usr/bin/env python


import sys


 


for line in sys.stdin:


        line = line.strip()


        words = line.split()


        for word in words:


                print '%s\t%s' % (word,1)




2. reducer.py


#!/usr/bin/env python


import sys


from operator import itemgetter
 



word2count = {} 


for line in sys.stdin:


        line = line.strip()


        word, count = line.split('\t', 1)


        try:


                count = int(count)


                word2count[word] = word2count.get(word, 0) + count


        except:


                pass


# sort


sorted_word2count = sorted(word2count.items(), key=itemgetter(0))


 


for word, count in sorted_word2count:


        print '%s\t%s' % (word, count)







기본 예제를 조금만 수정하면,
간단한 처리는 대부분 가능하다. 

#
참조 링크에 yield 와 groupby를 이용하는 코드가 나오는데 python 스럽기도 하고,
실제도 돌려보니 속도도 조금 빠르다. 

2011년 4월 17일 일요일

카르멘 - 프로스페르 메리메
































카르멘

카테고리

소설 > 영미소설 > 영미소설문학선

지은이

프로스페르 메리메 (부북스, 2010년)

상세보기





라디오에서 우연히 들었던,
카르멘 오페라의 한 소절 때문인지..
도서관에서 눈에 들어온 책.

소설의 구성은 I, II, III, IV로 나누어져 있는데,
각각의 장이 이질적으로 쓰여졌기에 재미를 더한다. 

I, II 장은 화자가 고고학자이고,
III장에서는 돈 호세가 이야기하는 카르멘과 자신의 이야기.
마지막 IV장은 마치 논문같은 집시들에 대한 이야기.

카르멘은 굉장히 매혹적인 캐릭터이다.
팜므파탈.

영화로 한번 봐야겠다. 

 

소소한 주말.


토요일..

집안청소를 하고,  

콩나물국밥을 먹고, (생계란에 비벼먹는 맛이 너무 좋다..)

시장을 보고,

낮잠을 자고,  

야구를 보며 피클을 담그고.. 



일요일..

오일장에 가서 과일과 화분을 사고,

도립미술관에가서 무료로 영화(바스키아)를 보고,

바닷가에가서 책을 읽다가..

집에와서

야구를 보며 밥을 해먹고

한라봉과 천혜양 한 바구니를 옆에두고

배깔고 누워서 웹서핑..



오랜만에 평화로운 주말..

내일은 월요일! ㅜ.ㅜ 
 

2011년 4월 14일 목요일

R - Special Values

NA (not available)
 - missing value


Inf and -Inf
 - 계산 결과가 아주 크거나 아주 작을때.
 - positive and negative infinity


NaN (not a number)


NULL
 - null object in R

 

2011년 4월 11일 월요일

자코메티의 아틀리에 - 장 주네
































자코메티의아틀리에

카테고리

예술/대중문화

지은이

장 주네 (열화당, 2007년)

상세보기





주말에 '카쉬전'에 가서 자코메티의 모습을 보았다. 

이 조각가가 누군지 몰랐지만, 왠지 이름이 낮익어서 골똘이 생각해 보니,

가방에 '자코메티의 아틀리에'라는 책 때문이었다..


카쉬가 찍은 자코메티와 장 주네가 쓴 자코메티는 같은 사람이었다. 

이런 바보같은... ㅋㅋ 


제주로 오는 길에 다 읽어 버렸다.. 
 

 

2011년 4월 8일 금요일

R - Import data (SAS to R, DB to R)


1) SAS to R
참고 : http://www.statmethods.net/input/importingdata.html

# Quick-R 에 나와있는 방법.

FROM SAS

# save SAS dataset in trasport format
libname out xport 'c:/mydata.xpt';
data out.mydata;
set sasuser.mydata;
run;

# in R 
library(Hmisc)
mydata <- sasxport.get("c:/mydata.xpt")
# character variables are converted to R factors


- SAS 데이터셋을 xpt 파일로 export 하고, 이걸 R에서 읽는 방법인데..
- xpt 파일로 export 할때는.. SAS의 컬럼명의 길이가 6이상이 될수 없어서, SAS 7 이상을 사용할때는 아주 불편하다.. (처음부터 이름을 짧게 하던지, rename을 해서 export하던지..)


# CSV로 export 하고, R에서 읽는 법.

SAS -> .csv -> R

* SAS에서 csv로 export;
proc export data=mydata
    outfile = "c:\mydata.csv"
    dbms=csv
    replace;
run; 

# R에서 csv 읽기  
mydata <- read.csv("c:/mydata.csv", header=TRUE, sep=",")





2) DB to R
참고: http://www.statmethods.net/input/dbinterface.html

- odbc 설정후 사용하는 방법. 

library(RODBC)
myconn <-odbcConnect("mydsn", uid="id", pwd="passwd")
pundat <- sqlQuery(myconn, "select * from Punishment")
close(myconn)













2011년 4월 7일 목요일

R - 데이터 타입 (Data Types)

참고: http://www.statmethods.net/input/datatypes.html

심플하게 정리하면.. 

1) vectors (numerical, character, logical)
  - 그냥 벡터.
  - 벡터안의 모든 값은 같은 종류여야 한다. 

a <- c(1,2,5.3,6,-2,4) # numeric vector
b <- c("one","two","three") # character vector
c <- c(TRUE,TRUE,TRUE,FALSE,TRUE,FALSE) #logical vector




2) matrices
  - 2차원 메트릭스 
  - 메트릭스의 모든 컬럼은 같은 종류(mode)이여야 하고, 길이가 같아야 한다. 

# generates 5 x 4 numeric matrix 
y<-matrix(1:20, nrow=5,ncol=4)

# another example
cells <- c(1,26,24,68)
rnames <- c("R1", "R2")
cnames <- c("C1", "C2") 
mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE,
  dimnames=list(rnames, cnames))




3) arrays
  - 메트릭스랑 비슷한데, 2차원(dimensions)이상을 가질수 있다. 


4) dataframe
  - SAS에서 dataset과 비슷
  - 그냥 DB table이라고 생각하면 편할듯.
  - dataframe의 각 컬럼은 다른 종류(mode)의 값을 가질수 있다. 

d <- c(1,2,3,4)
e <- c("red", "white", "red", NA)
f <- c(TRUE,TRUE,TRUE,FALSE)
mydata <- data.frame(d,e,f)
names(mydata) <- c("ID","Color","Passed") # variable names




4) lists
  - an ordered collection of objects
  - python의 dictionary와 거의 유사
  - list(a="Fred", ...) 라고 하면, a가 key가 아니라 이름이고, 이름은 안써도 되고, 이름이 있건없건 간에 위치로 참조 가능하다...

# example of a list with 4 components - 
# a string, a numeric vector, a matrix, and a scaler 
w <- list(name="Fred", mynumbers=a, mymatrix=y, age=5.3)

# example of a list containing two lists 
v <- c(list1,list2)




5) fators
  - 변수를 nominal 형태로 만들때.. 

# variable gender with 20 "male" entries and 
# 30 "female" entries 
gender <- c(rep("male",20), rep("female", 30)) 
gender <- factor(gender) 
# stores gender as 20 1s and 30 2s and associates
# 1=female, 2=male internally (alphabetically)
# R now treats gender as a nominal variable 
summary(gender)



기타.

Useful Functions

length(object) # number of elements or components
str(object)    # structure of an object 
class(object)  # class or type of an object
names(object)  # names

c(object,object,...)       # combine objects into a vector
cbind(object, object, ...) # combine objects as columns
rbind(object, object, ...) # combine objects as rows 

object     # prints the object

ls()       # list current objects
rm(object) # delete an object

newobject <- edit(object) # edit copy and save as newobject 
fix(object)               # edit in place