airbnb의 데이터를 MongoDB로 가져오고 검색 데이터를 브라우저에서 표시

11744 단어 MongoDBairbnb

개요



airbnb가 게시하는 데이터를 MongoDB로 가져오고 해당 데이터를 mongo 쉘에서 검색합니다. 그 결과를 Browser를 사용하여 표시합니다.

실행 환경


  • Windows 10
  • MongoDB 4.0.9

  • airbnb 데이터 다운로드



    이번에는 상기 URL로부터 시드니(Sydney)의 2019/3/7분의 데이터
  • listings.csv.gz
  • reviews.csv.gz

  • 을 다운로드합니다. 도쿄(Tokyo)는 에러가 되어 다운로드할 수 없었습니다.

    MongoDB로 가져오기



    다운로드한 데이터의 압축을 풀고 mongoimport 도구를 사용하여 가져옵니다.


    파일 이름
    데이터베이스 이름
    컬렉션 이름


    listings.csv
    test
    listings

    reviews.csv
    test
    리뷰


    CSV 데이터 가져오기


    mongoimport -d test -c listings --type csv --headerline listings.csv
    mongoimport -d test -c reviews --type csv --headerline reviews.csv
    

    reviews에서 일본어 코멘트를 검색하여 listings에서 데이터를 추가합니다.


  • reviews의 comments에서 일본어의 판정에는 히라가나의 てにをは가 들어가 있다고 합니다.
  • comments:/[테|에|을|은]/은 정규 표현으로, てにをは 의 어느쪽이든이 포함되어 있으면 대상이 됩니다.
  • 기타 히라가나나 良かった , おすすめ 등을 포함해도 OK입니다. 한자를 사용하면 중국어도 대상이 되어 버립니다.

  • listings에서 추가할 필드
  • listing_url
  • price
  • latitude (위도)
  • longitude (경도)


  • 검색하기 전에 listings 에 인덱스를 만듭니다.
    db.listings.createIndex({id:1})
    

    다음 자바 스크립트를 find.js로 만듭니다.

    find.js
    var docs=[]
    db.reviews.find({comments:/[て|に|を|は]/}).forEach(doc=>{
       listing = db.listings.findOne({id:doc.listing_id})
       if (listing == null) return;
       data = {id:doc.listing_id, price:listing.price, url:listing.listing_url}
       data.latitude = listing.latitude
       data.longitude = listing.longitude
       data.comments = doc.comments
       docs.push(data)
    })
    print("var airbnbdata =")
    printjson(docs)
    
    print("var aribnbdata=") 는 자바 스크립트 변수로 정의되기 때문입니다. _id 는 데이터에 포함되지 않도록 합니다. _idObjectId() 의 함수로 표현됩니다만, Browser 의 Javascript 에서는 정의되어 있지 않기 때문에 에러가 되기 때문입니다. 그 외에는 ISODate 이나 NumberLong 등이 에러가 됩니다. 직접 함수를 정의하면 오류가 발생하지 않습니다.

    위의 자바 스크립트를 mongo 쉘을 사용하여 실행하십시오.
    mongo --quiet find.js
    

    오류가 없는지 확인한 후 실행 결과를 comments.js로 저장합니다.
    mongo --quiet find.js  > comments.js
    

    검색 데이터를 브라우저에서 표시



    다음 html 파일을 airbnb.html로 만들고 Browser에서 로컬 파일로 표시합니다.
    comments.js 를 먼저 기술해 주세요. listings 의 위도 경도를 사용하여 GoogleMap에서 표시하도록 합니다. GoogleMap을 보려면 h tp // w w. 슈레 y. 이 m / HTML / 굿 gps ps. HTML을 참조했습니다. 둘러싸는 CSS는 h tps://사루와카군. 코 m / HTML-c s / 레후 렌세 / 보 x 를 참고로 했습니다.

    airbnb.html
    <html>
    <head>
        <meta charset="UTF-8">
        <style type="text/css">
            .innerbox {
                width: 600px;
                padding: 0.5em 1em;
                margin: 2em 0;
                border: solid 2px #6091d3;
                white-space: pre-wrap;
            }
    
            .outerbox {
                width: 640px;
                padding: 0.5em 1em;
                margin: 2em 0;
                border: double 5px #4ec4d3
            }
        </style>
    </head>
    <body>
        <div id="airbnb" align="center"></div>
        <script src="comments.js"></script>
        <script>
            let htmldata = []
            airbnbdata.forEach(doc => {
                htmldata.push(`<div class="outerbox" align="left">
                <p>${doc.id}<br>price:${doc.price}</p><a href="${doc.url}" target="_blank">${doc.url}</a><br>
                <a href="http://maps.google.co.jp/maps?q=loc:${doc.latitude},${doc.longitude}&iwloc=J" target="_blank">
                google map</a><pre class="innerbox">${doc.comments}</pre></div>`)
            })
            document.getElementById("airbnb").innerHTML = htmldata.join('\n')
        </script>
    </body>
    </html>
    

    Browser 이미지



    실제 데이터가 아닙니다.


    참조 URL


  • htp:// いしあい rb b. 이 m/게 t-테-이었다. HTML
  • h tp // w w. 슈레 y. 이 m/HTML/오오 g㎇마 ps. HTML
  • h tps://사루와카군. 코 m / HTML-c s / 레후 렌세 / 보 x
  • 좋은 웹페이지 즐겨찾기