실제 데이터를 이용한 aggregation 실습 환경 구축

2. 실제 데이터를 이용한 aggregation 실습 환경 구축

2.1. 미국 zip code 데이터 collection

  • 다음과 같은 형태의 JSON 데이터로 구성됨
{
  "_id": "10280",
  "city": "NEW YORK",
  "state": "NY",
  "pop": 5574,
  "loc": [
    -74.016323,
    40.710537
  ]
}
  • The _id field holds the zip code as a string.
  • The city field holds the city name. A city can have more than one zip code associated with it as different sections of the city can each have a different zip code.
  • The state field holds the two letter state abbreviation.
  • The pop field holds the population.
  • The loc field holds the location as a latitude longitude pair.

2.2. 미국 restaurant 데이터 collection

  • 다음과 같은 형태의 JSON 데이터로 구성됨
{
  "address": {
     "building": "1007",
     "coord": [ -73.856077, 40.848447 ],
     "street": "Morris Park Ave",
     "zipcode": "10462"
  },
  "borough": "Bronx",
  "cuisine": "Bakery",
  "grades": [
     { "date": { "$date": 1393804800000 }, "grade": "A", "score": 2 },
     { "date": { "$date": 1378857600000 }, "grade": "A", "score": 6 },
     { "date": { "$date": 1358985600000 }, "grade": "A", "score": 10 },
     { "date": { "$date": 1322006400000 }, "grade": "A", "score": 9 },
     { "date": { "$date": 1299715200000 }, "grade": "B", "score": 14 }
  ],
  "name": "Morris Park Bake Shop",
  "restaurant_id": "30075445"
}

2.3. 파일로 mongodb 데이터베이스/컬렉션 만드는 방법

실습
1. 터미널로 접속
2. wget http://media.mongodb.org/zips.json
3. wget https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json
4. mongoimport -u davelee --db test_db --collection zip --drop --file zips.json --authenticationDatabase admin
5. mongoimport -u davelee --db test_db --collection restaurant --drop --file primer-dataset.json --authenticationDatabase admin

2.4. wget 명령 알아두기

2.5. mongoimport & mongoexport 명령 알아두기

  • mongoimport
    • 파일로부터 db 생성
    • primer-dataset.json 파일을 다운로드 받은 디렉토리에서 실행하거나, primer-dataset.json 파일 경로를 명확히 지정해줄 것
    • mongoimport -u davelee --db test_db --collection zip --drop --file primer-dataset.json --authenticationDatabase admin
      • mongoimport 옵션
        • -u 사용자이름
        • --db 데이터베이스이름
        • --collection 생성할컬렉션이름
        • --drop : 데이터베이스/컬렉션 생성 전에 데이터베이스를 지워라
        • --file 파일명 : 컬렉션 생성할 데이터가 저장된 파일
        • --authenticationDatabase admin : 데이터베이스/컬렉션 생성시 해당 옵션이 없으면 인증 에러가 나는 경우가 있음
이해하고 실습하기
* mongoexport
- db의 데이터를 파일에 백업
- mongoexport -u davelee --db test_db --collection zip -o exported-primer-dataset.json --authenticationDatabase admin
import pymongo
username = 'davelee'
password = 'korea123'
connection = pymongo.MongoClient('mongodb://%s:%s@www.funcoding.xyz' % (username, password))
db = connection.test_db
# test_db 에는 어떤 컬렉션이 있을까?
db.collection_names()
# 컬렉션 객체 
db.zip
db.restaurant

2.6. find() 의 limit 옵션 사용해보기, 옵션 사용하지 않으면 데이터가 많아서 노트북이 다운될 수 있음

result = db.zip.find(limit=5)
for record in result:
    print(record)
result = db.restaurant.find(limit=1)
for record in result:
    print(record)

2.7. pprint 라이브러리 활용하기 - 알아보기 쉽게 출력하기

from pprint import pprint

result = db.restaurant.find(limit=3)
for record in result:
    pprint(record)