2016-11-18 4 views
0

나는 Center for Disease Control site에서 1996 년부터 2016 년까지 legionellosis의 사례를 알리고 싶습니다. RSocrata 패키지를 사용하고 2014 년부터 2016 년까지 Socrata와 Open Data Network만을 사용하여 데이터를 검색했습니다.웹 응용 프로그램과 연결된 API를 찾는 방법은 무엇입니까?

2014 년 이전에 나머지 정보를 검색하려면 어떻게해야합니까?

여기에 2014, 2015 및 2016에 사용되는 코드는 다음과 같습니다 어떤 제안이 많이 감사합니다

#Legionellosis data 

    df.leg2014 <- read.socrata("https://data.cdc.gov/resource/cmap-p7au.json")#2014 
    df.leg2015 <- read.socrata("https://data.cdc.gov/resource/haxn-dihy.json") #2015 
    df.leg2016 <- read.socrata("https://data.cdc.gov/resource/wg57-d6dj.json") #2016 

!

+0

그것은 그들이 data.cdc.gov에 게시 한 모든처럼 보인다는 2,014에서 2,016 사이 (https://data.cdc.gov/browse?limitTo=datasets&q=legionellosis&sortBy=relevance&utf8=%E2%9C%입니다 93). 이전 데이터의 경우 wonder.cdc.gov를 통과해야합니다. – chrismetcalf

+0

@chrismetcal 예, 그것이 내 모든 데이터가있는 이상한 앱의 삶입니다. 파일을 하나씩 내보내지 않고 내 데이터를 가져 오는 방법을 알지 못합니다. 어떤 제안. – Meli

답변

0

자신 만의 열 머리글을 추가하고이 함수를 사용하여 몇 년 또는 몇 주 동안 반복해야합니다. return an empty table 또는 데이터가 otherwise unavailable 인 몇 년/주 조합이 있습니다. 또한 다른 수의 열을 반환하는 것으로 보입니다. 일부는 12 개가 있고, 일부는 10 개가 있습니다. 무슨 일이 일어나는지 확실하지 않습니다. 함수에는 모두 NA 인 열을 제거하는 행이 있습니다. 그 라인을 주석 처리하고 싶을 수 있습니다. 나는 그 코드에 대해 설명하려고 노력했다. 나는 그것을 아주 잘 테스트하지 않았다.

read_MMWR_table <- function(year=1997, week=18){ 
    url <- paste0("https://wonder.cdc.gov/mmwr/mmwr_reps.asp?mmwr_year=", 
       year, 
       "&mmwr_week=", 
       week, 
       "&mmwr_table=2B&request=Export&mmwr_location=") 
    tmp <- readLines(url) 
    if(grepl("DOCTYPE html", tmp[1])){ 
    ret <- data.frame() 
    print("No table returned, no data...") 
    }else{ 
    start <- which(tmp=="tab delimited data:") + 1 
    if(grepl("DOCTYPE html", tmp[1])){ 
     ret <- data.frame() 
     print("No records found for this week/year") 
    }else{ 
     end <- min(which(tmp=="")[which(tmp=="") > 20]) 
     df <- read.table(textConnection(tmp[start:end]), sep="\t", skip=19, 
         stringsAsFactors=FALSE, header=FALSE) 
     # remove all NA cols 
     df <- df[,colSums(is.na(df))<nrow(df)] 
     ret <- df 
    } 
    } 
    return(ret) 
} 

df <- read_MMWR_table(year=2001, week=12) 
> head(df) 
      V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 
1 W.N. CENTRAL 2,534 3,688 61 102 11 5 2 11 14 
2  Minn. 411 723 - - 1 1 - 8 6 
3   Iowa 202 224 - - 2 2 - - - 
4   Mo. 1,013 1,803 58 98 5 2 1 3 3 
5  N. Dak.  9 11 - - - - - - - 
6  S. Dak. 47 61 - - - - - - - 
+0

이 솔루션은 동료가 내가 여기 게시 한 것을 시도한 것과 비슷합니다 (http://stackoverflow.com/questions/40616596/requesting-data-from-the-center-for-disease-control-using-rsocrata-or -xml-in-r). 그러나 당신처럼 테이블에서 레지오넬라 병의 위치가 바뀌기 때문에 나는 웹 긁기에 대해 걱정했습니다. 헤더가 변경되어서 헤더 변경으로 인해 웹 스크래핑을 피하는 방법을보고 싶었습니다. – Meli

+0

간단한 대답은 없습니다. 데이터가 있으며 75 %의 결과를 얻는 함수를 제공했습니다. 헤더를 읽는 것은 매우 간단합니다. 각 파일의 맨 위에 나열되어 있습니다. 당신은 어떤 일을해야 할 것입니다 ... – cory

관련 문제