2024-09-23

간단 요리 - 스테이크 만들기

1. 고기 겉면에 소금(+후추)를 잔뜩 바르고 기름으로 문질러서(생략가능) 상온에 놔둔 상태에서,

2. 스뎅 후라이팬을 3분 이상 센불로 충분히 (고기가 닿았을 때 "치지지직" 소리나도록) 달굽니다. (손에 물을 묻혀서 팬에 살짝 뿌렸을 때 물이 작은 물방울이 되어서 또르르 굴러다니면 딱 좋은 온도로 달궈진 거예요.)

4. 고기의 옆면이 반 높이까지 익었을 때 (불 세기에 따라 다르지만 약 4-5분), 뒤집어서 다른 면도 익힙니다. 불은 계속 쎈불.

5. 나머지 옆면이 다 익은게 보이면 팬에서 꺼내서, 접시에 놓고 호일로 완전히 덮어서 상온에서 10분 놔둡니다 (중요함!).

먹습니다.

2024-09-21

책리뷰 - 월급쟁이 부자로 은퇴하기 (강우신)

월급쟁이가 떼부자로 은퇴할 수는 없겠지만, 은퇴 후에 따박따박 월급 나오는 직장이 없을 때에도 안정적이고 원활한 현금 흐름을 유지하기 위해서, 미리미리 돈/인맥/건강 관리를 하라는 얘기. 

돈을 만들기 위해서 투자도 해서 재산을 불리고. 은퇴 후 제2의 직업도 미리 계획하고. 은퇴 후에는 아무래도 아프기도 쉬우니까 건강 관리도 미리 열심히 하고. 인맥도 다 재산이니까 열심히 관리하고. 이렇게 준비해서 나중에 필요한 돈이 나올 수 있게 해놓으라는 조언들...어떻게 보면 지루하고 평범한 조언들이지만, 결국 이런 기본적인 것들이 중요한 거 아닐까. 

사람들이 흔히들 듣기 좋아하는 것 같은, "누가 얼마를 어떻게 벌었대드라"하는 그런 자극적인 얘기는 안나온다. 하지만, 자산관리가 직업인 저자가 업무를 통해서 수없이 보고 들은 '성공적'으로 은퇴한 케이스들이 있고, 여기서 나오는 공통적 특징을 배우는게, 한 두 가지 특이하고 재밌는 '대성공' 케이스를 듣는 것보다는, 평범한 월급쟁이들에게 도움이 될 것 같다.

2006년 책이라서, 투자에 관한 내용이 조금 옛날 트렌드이지 않을까 예상했는데, 그렇진 않다. 그리고 돈에 관한 얘기 이긴 하지만, 또 어떻게 보면 돈에 관한 얘기 만은 아니라서 읽어 볼만한 책이라고 생각한다.  

2024-09-16

Visual Illusion - Size Constancy

 

It's a visual illusion that is cuased by perceiving the size of objects samely without considering the distance from the viewer. 

In the picture, the fishing people sitting/standing on the rim were, in fact, very close to the camera that took the picture, while the very small fishing man left was sitting far away from the camera. This picture does not provide enough distance cues, so our brain interprets the scene as ordinary size people fishing with a very small, tiny person.

2024-09-15

Learn R - How to clean the "working memory" in R

When you want to delete all the variables and objects in the current workingspace in R for whatever reason, you can use rm().

For me, it happens when I am running lines of code in command lines to do quick, exploratory, pilot types of analyses. Some variables (or objects) defined earlier could create a mess if the existing variables have the same name. The old value previously set could introduce a wrong initial value. Then, the code returns some value without any errors, but it could be just wrong! The worse is that I don't even know what just happened...

How can we fix it quickly? By cleaning the current workspace (which is generally the global environment. If you don't know about "environments" in R, don't worry about them for now).

This is what I usually do:

> rm(list=ls())

It cleans all the objects in the workingspace.

Let's see if there is any previous objects:

> ls()
character(0)

Now it's a clean slate! So no worries about using wrong inital values for variables. It must return errors if the value is not correctly set before using it.

Enjoy coding in R!


2024-09-13

책리뷰 - 오늘의 화학 (조지 자이던)

많이 가공된 음식이 정말 몸에 좋은지 나쁜지, 어떻게 나쁜지에 대한 이야기, 그리고 그와 관련된 과학에 대한 책이다. 

저자의 결론은 신문에서 떠드는 각종 "과학"(이라고 부르는) 기사(사실은 거의 광고)들을 너무 믿지 말라는 것. 대신 FDA나 CDC에서 나쁘다 또는 위험하다고 하면 그건 확실히 알려야할 만큼이나 과학적으로 나쁘다는게 거의 증명된 것이므로 주의해서 들어야한다! 말로만 과학적인 척 하는 수많은 연구 결과(실과제로는, 광고/그냥 흥밋거리 기사)에 흔들리지 말라는 것.  

건강 관련 뉴스는 항상 돈이 되어왔던 것 같다. 예를 들어, 1876년 책인 "톰 소여의 모험"에도 건강 뉴스에 대한 에피소드가 나온다. 작가인 마크 트웨인이 어렸을 적의 이야기라고 하니까, 1800년대 초반의 얘기임에도, 주인공 톰을 길러주는 폴리 이모님이 그 시절 신제품이었던 "진통제"니 "목욕 요법"이니 하는 유행을 열심히 따라가고 이런 것을 알려주는 건강 관련 잡지까지 구독했다는 내용이 나온다. 물론 허구의 소설이긴 하지만, 이렇게 건강 관련 뉴스에 열광하는 독자들은 예나 지금이나 존재했고 그래서 그런 기사도 계속 나오는 듯. 이렇게 유구한 역사의 가짜 과학(적인듯이 보이는) 광고들 때문에 정말 진지하게 과학하는 사람들만 오명을 얻게 되는 것 같다. 

물론, "과학한다"는 사람들이 다 옳은 것도 아니긴 하지만... 과학적 방법을 적용할 때에 현실적인 여러 문제점들이 있다고 해도, 최소한 "틀림을 증명할 수 있는 것"에 대해서만 얘기한다는 점에서, 현 시점에는 그나마 가장 사실에 가까운 정보를 얻기 위한 가장 유용한 방법이 과학이긴 하다. 

이 "오늘의 화학" 책에서는, 여러 과학적 방법을 해석할 때의 문제점이나 일반적인 과학자들이 publish하려고 할 때 쓰는 "속임수"들 (예를 들어 p-hacking)에 대해서 비교적 쉽게 설명하려고 노력했다. 

책의 결론은, 그렇다고 건강한 생활 습관(예를 들어, 너무 많은 붉은 고기, 당, 포화지방을 적게 먹는 것)이 중요하다는 것을 안 받아들일 필요는 없다는 얘기. 좀 복잡하게 중립적 입장을 취하는게, 작가가 정말 "과학하는" (결론 내기 어려운 증거에 대해서는 왠만하면 결론 내려고 안하는) 사람이라서 그런듯 :) 

이러니까 과학이 어려운 거 아닐까. 증거가 엄청 쌓이기 전에는 과학자들은 쉽게 결론을 내주지 않으니까. 과학 교과서에 나오는 내용들이야 정말 증거가 너무 너무 많아서 이건 거의 참이다 이런 내용들만 나오는 거지만 (교과서에 나오는 실험들은 정말 아무나 붙잡아서 대충 실험하라고 해도 진짜 신기하게도 찰떡같이 p-value가 낮게 나오긴한다) 간단히 말하면, 교과서에 안 실린 내용들은 아직 현재 연구 중인 주제들이고 아직 모르니까 계속 하는 것이기 때문에 알아서 걸러 들어야한다. 

가공 음식이라던가, 자외선 차단제 등의 '화학 제품'이 건강에 미치는 영향에 대해서 여기저기 언론에서 떠드는 내용에 대해서, 그런 기사의 근거가 되는 과학적 방법을 이해하면서 정보를 더욱 정확하게 이해하고 싶은 사람들이 읽어보면 많은 도움이 되는 책인 것 같다.

2024-09-01

R 배우기 - Dedup! 데이터프레임 중복제거

어떤 테이블이건 분석을 할 때 가장 처음 시작은 dedup부터라고 생각합니다. 테이블들을 join하다 보면 어떤 이유로건 중복된 행이 생길 수가 있는데, 중복을 확인하는 과정을 거치지 않고 분석을 해봤자 틀린 분석이 나올 수 밖에 없어요.

R 데이터프레임에서 중복된 행을 제거하는 방법을 알아보겠습니다.

우선 중복이 있는 간단한 데이터프레임을 만들어봅니다.

> df <- data.frame(name=c('Alice', 'Brian', 'Chris', 'Brian'), age=c(10, 20, 30, 20), height=c(5.2, 5.7, 6, 5.7))
> df
   name age height
1 Alice  10    5.2
2 Brian  20    5.7
3 Chris  30    6.0
4 Brian  20    5.7

2번과 4번 행(row)이 중복되어있죠. 이를 제거하기 위해서, 다음의 세 가지 방법을 사용할 수 있습니다.

(1) duplicated 이용 

어떤 열이 중복된 row 인지는 duplicate() 함수를 써서 알 수 있습니다. R의 base함수이기 때문에 별도의 package설치할 필요 없이 바로 사용할 수 있습니다.

> duplicated(df)
[1] FALSE FALSE FALSE  TRUE

4번째 row가 중복되었음(TRUE)을 보여줍니다. 따라서, 중복되지 않은 row는 !(not)을 이용해서 아래와 같이 찾아낼 수 있습니다.

> !duplicated(df)
[1]  TRUE  TRUE  TRUE FALSE

이 결과를 index로 해서 slicing하면 중복되지 않은 행만 선택이 됩니다.

> df[!duplicated(df),]
   name age height
1 Alice  10    5.2
2 Brian  20    5.7
3 Chris  30    6.0


(2) unique 이용

unique()함수는 중복을 없엔 결과를 리턴합니다. unique()역시 R의 base함수이므로, 별도의 설치 없이 바로 사용할 수 있습니다.

> unique(df)
   name age height
1 Alice  10    5.2
2 Brian  20    5.7
3 Chris  30    6.0

이와 같이 중복된 행을 제거하고 unique한 행만 보여줍니다.


(3) dplyr의 distinct()이용

dplyr 팩키지를 설치하고 distinct()함수를 사용하여도 unique()와 같은 결과를 얻을 수 있습니다.

> dplyr::distinct(df)
   name age height
1 Alice  10    5.2
2 Brian  20    5.7
3 Chris  30    6.0

참고로, tidyverse스타일의 파이프를 사용하면 이렇게도 쓸 수 있습니다.

> df %>% distinct()
   name age height
1 Alice  10    5.2
2 Brian  20    5.7
3 Chris  30    6.0

쉽죠? 중요한 점은 잊지말고 dedup!