Reading Excel files from R

R이 훌륭한 분석도구임에도 불구하고 R을 자주 사용하지 않는 이유중 하나는 Excel과 VBA 때문이다. 엑셀에 데이터를 저장하는 것이 그리 좋은 것은 아니지만, 나를 포함하여 많은 사람들이 예전부터 그렇게 해왔고 앞으로도 계속 할 것이다. 엑셀에 저장되어 수식과 VBA를 사용하면 굳이 R로 하는 것이 거추장스럽다.

R을 자주 사용하려면 엑셀의 데이터를 쉽게 접근하도록 환경을 만들어 주는 것이 우선 해결해야할 과제이다. R에서 엑셀파일을 다룰 수 있는 여러 방법이 이미 많이 소개된 바 있는데...

1. CSV파일 이용
df = read.table("myfile.csv", header = TRUE)

장점: 네이티브 R함수를 사용할 수 있어 편리하다.
단점: 엑셀로 하나의 시트를 일일이 저장해야 한다.
결론: 그런 기능이 있다는 정도만 알아두지 뭐~

2. 클립보드 이용
df = read.table("clipboard")

장점: 사용하기 전에 큰 준비절차가 없어 신속하다. 급할 때 유용하다.
단점: 엑셀 열고 데이터 선택하고 복사하려면 여전히 귀찮다.
결론: 급할 때만 사용하자~

3. ODBC 이용
require(RODBC)
conn = odbcConnectExcel("myfile.xlsx") # open a connection to the Excel file
sqlTables(conn)$TABLE_NAME # show all sheets
df = sqlFetch(conn, "Sheet1") # read a sheet
df = sqlQuery(conn, "select * from [Sheet1 $]") # read a sheet (alternative SQL sintax)
close(conn) # close the connection to the file

장점: ODBC연결을 한번 만들어 두면 연결한 데이터는 쉽게 접근가능하다.
단점: 쿼리을 알아야 한다. 새 엑셀파일마다 제어판들어가서 ODBC 만들어줘야 한다.
결론: 체계적으로 하나의 엑셀파일에 데이터를 차곡차곡 쌓아둘 일 있는 경우 사용하자.

4. gdata 패키지 이용
require(gdata)
df = read.xls ("myfile.xlsx", sheet = 1, header = TRUE)

장점: 윈도뿐만 아니라 맥과 리눅스에서도 사용가능하다.
단점: Perl 라이브러리를 추가 설치해야 한다.
결론: 우분투 설치한 노트북에서 해봐야지~

5. xlsReadWrite 이용
require(xlsReadWrite)
xls.getshlib()
df = read.xls("myfile.xls", sheet = 1)

장점: 빠르다
단점: xlsx를 지원못한다. 윈도 온리
결론: 사용안하겠~스

6. XLConnect
require(XLConnect)
wb = loadWorkbook("myfile.xlsx")
df = readWorksheet(wb, sheet = "Sheet1", header = TRUE)

장점: 자바기반이라 크로스플랫폼지원
단점: 대용량 데이터앞에선 거북이
결론: 자바 시러~

7. xlsx
require(xlsx)
read.xlsx("myfile.xlsx", sheetName = "Sheet1")
read.xlsx2("myfile.xlsx", sheetName = "Sheet1")

장점: 역시 자바기반이라 크로스플랫폼
단점: read.xlsx() 느림, read.xlsx2() 약간 덜 느림, data.frame()과 궁합에 문제있음
결론: 패쓰


결국 맘에 드는 게 없어~


머리 아픈 eigen value

Eigen value를 보다 보니 머리가 나쁘다는 걸 새삼 절감하여, 복잡한 계산은 일단 접어두고(어차피 계산할 코드를 만들 건 아니므로) 간단히 말해 이게 뭘 의미하냐만 따져 보기로 했다. 다음은 위키백과에 나온 것이다.


[다른 예1]
지구가 자전하면 지구의 중심에서 바깥을 향하는 모든 화살표는 자전축을 향하는 화살표를 제외하고 함께 회전한다. 그러므로 지구가 한시간동안 자전한 결과를 하나의 변환으로 볼 때 지구의 자전축에 평행한 벡터가 고유벡터이다. 또한 자전축이 커지거나 작아지지 않았으므로 그 고유값은 1이다.

[다른 예2]
다른 예로는 얇은 종이를 가운데를 중심으로 하여 모든 방향으로 두 배 늘린 경우를 들 수 있다. 이때 가운데 점으로부터 종이의 모든 점을 향한 벡터들이 모두 고유벡터가 된다. 또한 벡터들의 길이가 모두 두배가 되었으므로 고유벡터들의 고유값은 2이다. 이 경우 고유공간은 모든 고유벡터들의 집합이 될 것이다.

공대 나오신 분들은 '이런 것도 몰라~' 하실지 모르지만
[URL]고유값

재미있는 곰셈 삽질

아들이 수학에 흥미를 잃는 듯 보여 흥미를 돋구려고 재미있는 곱셈방법을 찾아 보았다. 그런데 웬걸~ 아들보다 내가 더 재미있어서 만자리 계산도 해보고, 계산기 두드려 확인해보고 정작 신이 난 건 나다. 젠장~


그런데, 이글루스 이상하네~ 유튜브 비디오를 올릴 수 가 없네.

Swap integers without additional variales?


구글플러스에 가보니 위의 그림과 같이 임시변수없이 두 개의 변수값을 교환할 수 있다는 게시물이 보여,
VBA코딩으로 진짜인지, 농담인지 확인해보았다.
포스팅에선 정수를 교환하는 것인데, 정수말고 실수를 교환할 수 있을까?

Sub SwapTwoVariables()

Dim a, b

a = 1.3
b = 2.5

Debug.Print "a ="; a, "b ="; b

a = a + b
b = a - b
a = a - b

Debug.Print "a ="; a, "b ="; b

End Sub
실험결과 실수도 교환이 가능한데, 뭔가 수학적 논리가 있어 보인다. 더하기와 빼기만으로...
a = 1.3 b = 2.5
a = 2.5 b = 1.3

IE11 릴리즈를 맞이하여...

이사람들~ 정말 웃기는 군요.
우리가 누구? 브라우저
뭘 원하지? 더 빠른 거
언제? 당장
...
...
브라우저!!

1 2 3 4 5 6 7 8 9 10 다음