[데이터분석/크롤링] (1) 데이터분석 프로젝트 라임 스쿠터/킥보드(lime scooter) 데이터수집

2019. 12. 5. 08:20Data Science/Data Analysis

데이터를 수집해서 라임 스쿠터/킥보드(lime scooter)의 데이터분석 프로젝트를 진행해보겠습니다.

 

라임에 대해서 간단하게 설명하자면 글로벌 전동킥보드 강자로서 2017년 미국 캘리포니아에 설립된 라임은 현재 스타트업 기업이지만 기업

가치가 1조원이 넘는 대표적인 ‘유니콘 기업’입니다.

 

http://www.greenpostkorea.co.kr/news/articleView.html?idxno=109689

 

글로벌 전동킥보드 강자 '라임', 한국 상륙

[그린포스트코리아 이재형 기자] 올해 서울시내에서만 1만대까지 확대되는 국내 전동킥보드 공유서비스 시장에 새로운 강자가 나타났다. 누적 탑승 1억 회를 기록한 글로벌 마이크로모빌리티(소형 이동수단) 기업...

www.greenpostkorea.co.kr

 

그리고 전동킥보드 데이터를 분석해보자는 이유는

 

1. 전동 킥보드의 사용하는 패턴을 분석해 사용 동기 요인 및 수요예측을 해보자는 목적

2. 신도시 교통난의 해결 방법을 위한 모색

3. 쥬서(킥보드 충전을 위한 사람)들에게 배터리 사용 패턴을 보고 어떤 도움을 줄 수 있는 앱을 만들 수 있을지

4. 대학원 논문에 활용해보자

 

위와 같은 4가지 이유로 시작했지만 결과는 데이터 수집 후 분석을 해보아야 하는 문제이니만큼 재밌게 분석해볼려고 합니다.

Open API가 있으면 좋겠지만 공식적으로 전동 스쿠터 업체들이 Open API를 열어두진 않은 상태라 아래 github를 참고하여 데이터를 수집해보았습니다.

 

일딴 git에 나왔있는대로 쭈욱 한번 살펴봅시다.

 

https://github.com/ubahnverleih/WoBike/blob/master/Lime.md

 

ubahnverleih/WoBike

Documentation of Bike Sharing APIs 🚴🛴🛵. Contribute to ubahnverleih/WoBike development by creating an account on GitHub.

github.com

 

Methods를 살펴보며 간단하게 login 할 수 있는 방법이 2개가 있는데요. 우선 저는 SMS 로 진행했습니다.

 

1. 가장 먼저 해야 할 일은 Lime 앱을 설치하고 회원 가입부터 해서 계정을 가지고 있어야 합니다.

 

 

아래 cURL 커맨드를 실행해서 본인의 핸드폰 번호로 OTP code를 받습니다.

1
2
3
4
5
curl --request POST \
  --cookie-jar - \
  --header 'Content-Type: application/json' \
  --data '{"login_code": "123456", "phone": "+821012345678"}'

 

문자로 OTP code를 다 받았으면  아래처럼 받았는 6자리 코드를 넣고 cURL을 실행합니다. 

 

1
2
3
4
5
curl --request POST \
  --cookie-jar - \
  --header 'Content-Type: application/json' \
  --data '{"login_code": "123456", "phone": "+821012345678"}'

 

 

 

 

자 그럼 받은 토큰 값과, 쿠키 값을 바탕으로 아래에 Mandatory를 아래와 같이 넣고 cURL을 실행합니다.

 

 

 

 

[여기가 실행하는 cURL] 

1
2
3
4
curl --request GET \
  --header 'authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX3Rva2VdfdfdfdfdfdfdfuIjoiSzM0WlVPRlFCWDdOMiIsImxvZ2luX2NvdW50IjoyfQ.x6QRERZ9S0KITzHI8wXFhITlXb4cWs_MXttRWX2ZO4o' \
  --cookie '_limebike-web_session=Z2RnYWZlUi9Ybzd1cUpBRC9UcnBadfdfdfdfdfdfdfelFsVjV5aE9MYnV4QldLL1p0ZzNKNmxQL3A1dTRLb3hXUXBmMzlzM2NQU3FmVXI2M1BWQmlEb1VWTm1yWmRaYkVsTVZ3Yjg2MnB1dXh3QWp5TDRYb1puL0ZrQmg2TDFzbThabUZoYUFQNlNHbHN6Y2l1bVR0YXZOSmFvalVDWHI4SFk1dVpUbVY5TDVmb3BvUGR3L3ZBbndNcXQzV2htQi9rUHBWODFDV2VTZnk5OG5peHFMclhkVVlUeTBXajRxT05aYnBWckFTcGxZZ1haeWtOcW9zNHhLY3FjYUhnTk1xL09CU0tBOGJmRkF3WWpHU1FmZTdlSCtEQlM4VlQ4T0l3RVZ5UWJma1lQY0V5cDRBN1YwMXkyZEhOSy9TU0RSdUZiYUlrYTdkdWh5aVNlL211V3hMbmszMk90bEQwZ3RnPT0tLUF4N3dzRG9xT0xXZnZreVlOR1NaL3c9PQ%3D%3D--21a30cf41170d4da4501b4cf0382ae53d8ee1ba7'

 

정상적으로 Request를 했다면 아래와 같이 결과 값이 보이고 쭈욱 아래로 내려보면

 

 

여기 처럼 bikes의 정보를 실시간으로 확인 할 수 있습니다. 

 

 

 

자 중요한건 여기 입니다. Auth 정보가 필요합니다. Auth 정보가 필요하고 해당 위치에 lat, lng 에 해당하는 위도와 경도가 필요합니다. 어렵게 느껴지시나요? 아닙니다. 천천히 하나하나 살펴보도록 합시다. 우선 아래 Mandatory라고 적혀져 있는 부분은 쓱 눈여겨 봅시다.

 

자 이렇게 라임 스쿠터/킥보드(lime scooter) 데이터수집을 실시간으로 할 수 있었습니다. 그렇다면 이렇게 실시간으로 모은 데이터를 어떻게 깔끔하게 Pandas(판다스)를 써서 전처리를 할지는 다음 시간에 알아보도록 하겠습니다. 

  • 프로필사진
    rap2020.05.03 14:46

    안녕하세요 글 너무 잘 봤습니다 "아래 cURL 커맨드를 실행해서 본인의 핸드폰 번호로 OTP code를 받습니다." 부분에서 코드가 겹치는 것 같아서요 위의 사진 처럼 입력하면 되는거죠??

    • 프로필사진
      젼 StopHyun2020.05.05 22:59 신고

      안녕하세요,
      혹시 위 블로그 처럼 했는데 OTP code가 안올 경우 해당 주소의 cURL을 사용하시면 됩니다. https://github.com/jihyunjeongme/lime-scooter-data-analysis

  • 프로필사진
    test12020.05.03 16:28

    오 제가 찾던 정보였는데 감사합니다. OTP 코드를 받아오는 과정에서 질문이 있어서요
    curl --request GET \
    --url 'https://web-production.lime.bike/api/rider/v1/login?phone=%2B33612345678'
    이부분에서 phone에 대한민국 전화번호를 넣을려면 어떻게 해야하나요??
    01012341234와 같은 형태로 입력했을때 국가 코드를 같이 포함시키라고 하여
    +821012341234 와 같은 형태로 입력했는데 sms가 오지 않아서요
    글쓴이님은 어떠한 방식으로 하셨는지 알 수 있을까요??

    • 프로필사진
      젼 StopHyun2020.05.05 22:59 신고

      안녕하세요,
      혹시 위 블로그 처럼 했는데 OTP code가 안올 경우 해당 주소의 cURL을 사용하시면 됩니다. https://github.com/jihyunjeongme/lime-scooter-data-analysis

  • 프로필사진
    student2020.05.11 13:56

    안녕하세요 잘봤습니다. 그런데 auth 정보와 token 값은 어떻게 얻을 수 있을까요?
    그리고 블로그 글 순서가 중간에 잘못된 것 같은데 제 착각일까요...
    (뒤에서 두번째 문단 순서가 잘못된 것 같네요)

    • 프로필사진
      젼 StopHyun2020.07.27 12:43 신고

      curl login 실행 후 sms 폰으로 6자리의 코드를 받을수 있습니다.

      curl --request GET \
      --url 'https://web-production.lime.bike/api/rider/v1/login?phone=%2B821012345678'

      그리고 해당 token은 받았던 6자리 코드를 사용해서 curl을 날리면 됩니다.
      curl --request POST \
      --cookie-jar - \
      --url 'https://web-production.lime.bike/api/rider/v1/login' \
      --header 'Content-Type: application/json' \
      --data '{"login_code": "123456", "phone": "+821012345678"}'

  • 프로필사진
    stu2020.07.26 19:24

    이 방법은 가입자(본인) 데이터만 수집할 수 있는 방법인가요? 혹은 다른 사람들 데이터도 수집가능한가요?

    • 프로필사진
      젼 StopHyun2020.07.27 12:44 신고

      기본적으로 라임스쿠터에 핸드폰번호로 가입이 되어 있어야 합니다. 수집 방법은 lat,lng 원하는 경도를 기준으로 실시간 이용가능한 라임스쿠터 데이터를 보여줍니다.

  • 프로필사진
    ㅜㅜ2021.01.27 01:37

    일단 좋은 글 감사합니다!
    잘 따라 해봤는데 토큰값 받는 곳에서 6자리 코드 입력 후 curl 전송하면 쿠키는 날라 오는데 토큰은 어디서 확인하나요?? ㅠㅠ

    • 프로필사진
      젼 StopHyun2021.01.27 09:53 신고

      안녕하세요, 아래 명령어 request 합니다.
      curl --request POST \
      --cookie-jar - \
      --url 'https://web-production.lime.bike/api/rider/v1/login' \
      --header 'Content-Type: application/json' \
      --data '{"login_code": "123456", "phone": "+33612345678"}'

      response 값으로 토큰 값이 리턴됩니다. 혹시 그래도 잘 안되신다면 해당 GHE(https://github.com/ubahnverleih/WoBike/blob/master/Lime.md)을 참고 부탁드립니다.

      {
      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX3Rva2VuIjoiRk9PQkFSRUlSWkhBMiIsImxvZ2luX2NvdW50IjoyfQ.K5nmvUu92hYXQyeYG6O0rqo0ef2mkp7PMdtp9NrgwOE",
      "user": {
      "id": "FOOBAREIRZHA2",
      "type": "users",
      "attributes": {
      "token": "FOOBAREIRZHA2",
      "phone_number": "33612345678",
      "email_address": null,
      "has_verified_email_address": false,
      "name": "Lime Rider",
      "given_name": "Lime",
      "surname": "Rider",
      "default_payment_method": null,
      "referral_code": "REZHETH",
      "num_trips": 0,
      "edu": false,
      "subscription_item_states": [],
      "juicer_profile_status": null,
      "juicer_profile_initial_activated_at": null,
      "balance_cents": 0,
      "pending_balance_cents": 0,
      "currency": "USD"
      }
      }
      }

  • 프로필사진
    ..2021.03.21 19:10

    안녕하세요 데이터분석 초보학생입니다
    첫번째부터 잘 안되어서 질문드려요ㅜㅜ
    'http://web-production.lime,bike/api/rider/v1/login' 이 url에 접속할 수 있어야 코드를 받을 수 있는거 아닌가요..?
    계속 사이트 not found라고 해서 접속 할 수가 없어요ㅠㅠ

    • 프로필사진
      젼 StopHyun2021.03.24 09:27 신고

      안녕하세요,
      해당 URL로 바로 접속 할 수 없습니다.

      따라서 위에 설명한 것 처럼 curl 명령어를 실행 단계부터 해야 합니다. 사전에 회원가입은 되어 있어야 합니다.

      curl --request POST \
      --cookie-jar - \
      --url 'https://web-production.lime.bike/api/rider/v1/login' \
      --header 'Content-Type: application/json' \
      --data '{"login_code": "123456", "phone": "+821012345678"}'

  • 프로필사진
    sunny city_analyst2021.04.14 16:17 신고

    안녕하세요. 해당 명렁어를 설명하신 curl 명령어 실행을 어떤 툴에서 해야하는지 문의 드려요ㅠㅠ
    첫 줄부터 파이썬에서 실행하는것인지 어디에서 커맨드가 가능한지 가늠이 오지 않네요ㅠㅠㅠ

    • 프로필사진
      젼 StopHyun2021.04.16 10:27 신고

      안녕하세요, 운영체제가 Windows 이신 경우 구글에 "curl 명렁어 windows" 라고 검색 해보시면 상세하게 실행 방법이 나와 있습니다. Mac 인 경우는 터미널을 통해서 curl 명령어를 실행할 수 있습니다. 감사합니다.

  • 프로필사진
    korea36112021.07.12 15:03 신고

    안녕하세요 혹시 위치를 서울로 변경은 불가능할까요??

    • 프로필사진
      젼 StopHyun2021.07.15 11:16 신고

      안녕하세요, 가능합니다.

      아래의 값에서 위도, 경도 값을 바꾸면 됩니다.

      --url 'https://web-production.lime.bike/api/rider/v1/views/map?ne_lat=37.5&ne_lng=127.1&sw_lat=37.4&sw_lng=127.0&user_latitude=37.5172&user_longitude=127.0473&zoom=16' \

      강남역의 경우는 아래와 같이 사용할 수 있습니다.
      'user_latitude': 37.4979375, 'user_longitude': 127.0276875, 'ne_lat': 37.4992864802915,
      "ne_lng": 127.0290364802915,
      'sw_lat': 37.4965885197085, "sw_lng": 127.0263385197085

    • 프로필사진
      korea36112021.07.15 16:53 신고

      감사합니다!!