Google Takeout이 내뿜는 'JSON이라는 기분 나쁜 확장자'에 대해 알아 보았습니다.

모처럼 화제가 되었기 때문에 Google Takeout의 json 파일 구조의 검증을 해 보았습니다.

우선 데이터를 얻는다



이것은 매우 간단합니다.
  • 다음 이상한 사이트로 이동.
    h tps // 타케오 t. 오, ぇ. 코 m / 세팅 gs / 타케오 t
  • 데이터를 원하는 서비스에 체크하고 다음을 클릭
    ※이번은 위치 이력만 선택합니다.
    모두 선택하면 상당한 시간이 걸리는 경우가 있으므로 임의로 부탁드립니다.
  • 출력 방법과 출력처를 선택하고 「아카이브 작성」을 클릭
    특히 문제가 없으면 기본적으로 괜찮습니다.
    대상은 Google 드라이브 및 기타 클라우드 스토리지를 선택할 수 있습니다.
  • 작성 완료를 기다린다
    위치 기록만 있으면 즉시 완료됩니다.
    커피도 마시고 기다리자.
  • 다운로드
    다운로드를 클릭하기만 하면 됩니다.

  • 다운로드한 데이터의 구조



    아카이브를 확장하면 다음과 유사한 파일을 볼 수 있습니다.


    index.html: 아카이브 내용의 설명. 풍부한 readme.


    위치 기록: 원하는 "위치 기록.json"이 들어 있는 폴더입니다.

    "기분이 나쁜 로케이션 이력.json"의 정체



    다음과 같은 느낌. (위치와 시간은 가면입니다)
    {
      "locations" : [ {
        "timestampMs" : "xxxxxxxxxxxxx",
        "latitudeE7" : xxxxxxxxx,
        "longitudeE7" : xxxxxxxxxx,
        "accuracy" : 2893
      }, {
        "timestampMs" : "xxxxxxxxxxxxx",
        "latitudeE7" : xxxxxxxxx,
        "longitudeE7" : xxxxxxxxxx,
        "accuracy" : 2803,
        "activity" : [ {
          "timestampMs" : "xxxxxxxxxxxxx",
          "activity" : [ {
            "type" : "STILL",
            "confidence" : 100
          } ]
        } ]
      }, {
        "timestampMs" : "xxxxxxxxxxxxx",
        "latitudeE7" : xxxxxxxxx,
        "longitudeE7" : xxxxxxxxxx,
        "accuracy" : 186,
        "activity" : [ {
          "timestampMs" : "xxxxxxxxxxxxx",
          "activity" : [ {
            "type" : "UNKNOWN",
            "confidence" : 48
          }, {
            "type" : "IN_VEHICLE",
            "confidence" : 34
          }, {
            "type" : "STILL",
            "confidence" : 17
          }, {
            "type" : "ON_BICYCLE",
            "confidence" : 2
          } ]
        } ]
      }, {
        "timestampMs" : "xxxxxxxxxxxxx",
        "latitudeE7" : xxxxxxxxx,
        "longitudeE7" : xxxxxxxxxx,
        "accuracy" : 37,
        "velocity" : 0,
        "heading" : 327,
        "altitude" : 65,
        "activity" : [ {
          "timestampMs" : "1421017596205",
          "activity" : [ {
            "type" : "STILL",
            "confidence" : 100
          } ]
        } ]
      },
    
    ...
    
    {
        "timestampMs" : "xxxxxxxxxxxxx",
        "latitudeE7" : xxxxxxxxx,
        "longitudeE7" : xxxxxxxxx,
        "accuracy" : 1414,
        "velocity" : -1,
        "heading" : -1,
        "altitude" : 0
      } ]
    }
    

    구조



    첫 번째 계층은 locations 전용입니다.
    locations 의 value 로서 배열로 실제의 계측 데이터가 저장되고 있습니다.
    측정 데이터의 키는 다음과 같습니다.

  • accuracy
    측정값의 정확도를 나타내는 값.
    이 값은 Google Maps Geolocation API와 같으면
    「미터 단위의 추정 위치의 정밀도」의 「추정 위치로부터의 반경」의 것.

  • 활동
    「무엇을 하고 있는가」를 추측한 것.
    내부에서 더 배열 구조를 가지고,
    각 배열내의 「type」은 추측되는 행동을,
    "confidence"는 확증의 정도를 100분율로 저장하고 있다.
    「type」에는 다음과 같은 것이 있다.
    다만 「UNKNOWN」이 복수회 출현하기 때문에 내부에서는 좀 더 세밀할지도 모른다.
  • IN_VEHICLE
  • ON_BICYCLE
  • ON_FOOT
  • TILTING
  • STILL
  • UNKNOWN

  • altitude
    고도.
  • heading
    방향.
  • latitudeE7
    위도.
    E7의 7은 소수점 이하의 자리수. (e의 마이너스 7승)
    즉 오른쪽에서 7자리는 쉼표 이하.
  • longitudeE7
    위도.
    E7의 의미는 동일하다.
  • timestampMs
    UNIX 시간.
    다만 초가 아니라 밀리 세컨드인 점에 주의.
  • velocity
    속도.

  • 결론



    역시 Google 대단하다.
    json 1개 매우 데이터로서 정연하게 하고, 수치가 Float가 되지 않는 궁리도 하고 있다.
    보기 쉽도록 json이 들여 쓰기된 것도 조금 깜짝 놀랐네요. (데이터 사이즈 늘리는 분을 선택한 점)
    엔지니어 시점이라면, 이상하게 커녕 각 부처에 견습해 주었으면 하는 데이터 설계가 아닐까라고 생각합니다.
    덧붙여서 「유저 자신이 이해하기 쉬운 포맷으로 하는 것도 중요하지 않은 것인가」
    라고 쓰여진 것 같습니다만, Google에는 위치 기록 라고 하는 서비스가 있군요.
    아마도 이것이 비 엔지니어에게 가장 알기 쉬운 "포맷"이라고 생각합니다.
    켜거나 하지 않아도 정보가 수집되므로,
    신경이 쓰이면 과감히 서비스를 켜 버리는 것도 좋지 않을까요! ?

    좋은 웹페이지 즐겨찾기