2011-12-10 3 views
4

5700 만 개의 행과 23 개의 열을 가진 데이터 세트가 있습니다. 서로 다른 종 (약 2000 개의 고유 한 이름)의 종명이있는 열이 있으며 각 고유 종의 이름에 대한 두 개의 데이터 열 (위도, 경도)을 꺼내고 각각에 대한 위도/경도 데이터를 작성합니다. 종, 파일 이름으로 종명. 이것은 내가 아는 유일한 언어 인 R에서 너무 오래 걸립니다. 이 작업에 적합한 코드는 무엇입니까? 제가 OSX에 터미널에 이런 종류의 작업을 수행 할 수 있습니다 상상SQL 루프를 읽고 파일에 데이터를 쓰십시오.

FOR i IN 1:unique(species_name) 
    SELECT latitude,longitude WHERE species_name=[i] 
    WRITE [some code that writes a text file with species name as the file name] 
LOOP END; 

을 :

이 나는 ​​약, 코드처럼 보일 수 있습니다 추측하고 무엇을 보여주기 위해 여기에 몇 가지 의사 코드를 시도하고있다?

편집 20111211 : 다음은 R에서 내 흐름이다 : 당신이 할 수있는 최선의 일은에서 파일 이름과 쿼리를 스크립트 언어 (파이썬, 펄, PHP, 쉘)을 사용하여 생성입니다 이럴

require(RMySQL); 
require(plyr) 
drv <- dbDriver("MySQL") 
con <- dbConnect(drv, user = "asdfaf", dbname = "test", host = "localhost") 
splist <- read.csv("splist_use.csv") 
sqlwrite <- function(spname) { 
    cat(spname) g1 <- dbGetQuery(con 
    , paste("SELECT col_16,col_18 FROM dat WHERE col_11='" 
    , spname, "'", sep="") 
    ) 
    write.csv(g1, paste(spname, ".csv", sep="")) 
    rm("g1") } 
l_ply(splist, sqlwrite, .progress="text") 
+0

어떤 SQL Server를 사용하고 있습니까? 대부분의 경우 사용자의 특정 상황에서 훨씬 더 빨라질 수있는 내보내기 기능을 제공합니다. – UnhandledExcepSean

+0

MySQL. 내가 가진 유일한 GUI 인터페이스는 SequelPro입니다. – sckott

+0

맞아요. 내보낼 수는 있었지만, 종을 걸러 내고 수출 한 다음 2000 시간을해야합니다. – sckott

답변

1

그곳에. 너무 어렵지는 않지만 다른 언어를 배워야합니다. SQL은 명령형 프로그래밍에 적합하지 않습니다.

+0

오케이. R에서 MySQL을 호출하는 R 솔루션을 기대했지만이 특정 문제에 대해 적절한 언어를 배워야합니다. – sckott

+0

R에 익숙하다면 R을 사용하십시오. R에 postgres 인터페이스가 있다는 것을 알고 있습니다. mysql 인터페이스도있을 수 있습니다. 당신이 가지고있는 것을 게시하고 사람들은 R 부분이나 SQL 부분 또는 인터페이스 부분으로 당신을 도울 수 있습니다. 당신의 온건함을 위해서 : 데이터베이스를 "읽기 전용"으로 접근하거나, 데이터베이스의 사본으로 작업하거나, 백업을 가지고 있는지 확인하십시오. – wildplasser

+0

다음은 Rrequire (RMySQL)의 내 워크 플로입니다. (plyr) drv <- dbDriver ("MySQL") con <- dbConnect (drv, 사용자 = "asdfaf", dbname = "테스트", 호스트 = "로컬 호스트") splist <- read.csv splist_use.CSV ") sqlwrite <- 기능 (spname) { 고양이 (spname) G1 <- dbGetQuery (사기꾼 페이스트 ("FROM col_16을 선택 col_18 DAT WHERE col_11 = ' "spname,"' "9 월 = (splist, sqlwrite, .progress = "text") write_csv (g1, paste (spname, ".csv", sep = "")) rm ("g1") l_ply – sckott

0

은 Excel 파일 출력이 가능하며 Excel이 있습니까? 그렇다면 Excel을 사용하여 데이터베이스에 연결하고 쿼리를 실행하여 데이터를 추출 할 수 있습니다. 그것은 .xls 또는 csv에 있습니다. 체재. 그러나 이것은 결과가 1,000,000 미만이라고 가정합니다.

엑셀 에서 테이블이나 실행 쿼리를 정의 할 수 있습니다 여기에서 연결 의 바람직한 방법을 선택하고 입력 다른 소스에서 데이터를 선택 탭 로 이동합니다. (결과가 Excel 버전의 시트에서 지원되는 행 수보다 적 으면 선택한 방법을 사용하면 파일이 추출됩니다. 현재 수행중인 IO보다 빠름.

+0

흥미 롭습니다. 나는 이것이 가능하다는 것을 몰랐다. 이미 PHP/MySQL 솔루션을 사용했지만이 방법은 좋은 대안입니다. – sckott

1

MySQL outfile 기능을 사용해 보셨습니까? 고유 csv 파일에 약간의 당신은 MySQL은 각각의 고유 한 종의 이름을 골라 만들 수있는 작품의 비트, 루프 결과를 통해 출력으로

SELECT col_16,col_18 
FROM 
dat 
WHERE col_11= spiecesname 
INTO OUTFILE '/tmp/spiecesname.csb' 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 

.

쿼리에 order by 절이 있어야합니다.

+0

아, 끝내 주셔서 고마워. 친구로부터 PHP와 MySQL을 사용하여 잠시 동안 해결책을 찾았지만 좋았습니다. – sckott

관련 문제