Dash 및 Plantly Express를 통해 BD에서 얻은 차량 데이터를 시각화1

이 글의 내용


· OBD로 차량 데이터를 얻는 방법
• 차량 데이터 성형 사례
• Dash 및 Platly Express를 사용한 차량 데이터의 시각화 방법

운영 환경


macOS Mojave version10.14.5
Python 3.7.2
dash 1.0.0a1
dash-core-components 1.0.0a4
dash-html-components 1.0.0a2
plotly-express 0.3.0
pandas 0.24.2

이른바 BD


onbord Diagnostics는 자동차 각부에 설치된 ECU(Electrical Control Unit)에서 프로그래밍한 자가 진단 기능을 말한다.
예를 들어 엔진을 구성하는 연료 분사 시스템의 각 센서와 각 치동기에 무슨 이상이 발생한 상황에서 엔진의 ECU 저장 이상이 발생하여 계기판의 경고등을 켜고 운전자에게 이상 발생을 통지한다. 
출본: 자유백과사전 위키백과
결론적으로 OBD를 방문하면 ECU에 있는 차량의 각종 데이터를 얻을 수 있다.

Dash


파이톤의 시각 형상 라이브러리 중 하나로 Flash, React, Platly가 조합되어 있습니다.
헤로쿠 등 서버를 활용해 웹 애플리케이션을 쉽게 만들 수 있다는 것이 특징이다.
* 공식 문서
Dash by Plotly - Plotly
★사용법은 여기 참고
Python을 사용한 Visualization Library Dash

Platly Express란


Python의 시각화 라이브러리 Plantly의 wrapper에서 간단하게 jupter notebook에서 데이터를 시각화합니다
네.애니메이션을 사용하여 시간 시퀀스 데이터를 쉽게 이동할 수 있는 것이 특징이다.
* 갤러리
Plotly Express Gallery

OBD를 사용하여 차량 데이터를 얻는 방법


우선 다음과 같은 것을 준비했다.
이름:
설명
가격.
URL
1
ELM 327 WiFi OBDii 커넥터
OBD에서 가져온 데이터를 WiFi로 전송하는 장치
¥1800
https://www.youtube.com/watch?v=8VVkRBo5j1E
2
Stanislav Svistunov Car Scanner ELM OBD2
1에서 건너뛴 데이터를 아이폰에 시각화하여 CSV로 변환하는 프로그램
¥500
https://itunes.apple.com/jp/app/car-scanner-elm-obd2/id1259933623?mt=8
3
iPhone7
설치데이터 표시 모니터

ELM 327 WiFi OBDii 커넥터

Stanislav Svistunov Car Scanner ELM OBD2

OBD 포트는 대부분 손잡이 아래에 있습니다.

여기에 1개의 장치를 삽입하고 아이폰으로 2개의 앱을 시작해 와이파이를 연결한다.
그리고 점화를 켜면 속도, 가속도, 마력 등을 감시할 수 있다.
또한 각 물리량은 시간 순서에 따라 CSV로 저장할 수 있다.
● 차량 데이터 취득 방법은 여기 참조
csv를 통해 OBD2 데이터(차량 정보)를 얻는 방법

데이터 정형


그러면 위에서 설명한 방법으로 얻은 CSV의 내용을 살펴보겠습니다.

상황이 상당히 심각하다(웃음)
물리량(PID)에 따라 기록되는 시간도 다르다(기록 포인트는 물리량에 따라 다르다).
시각화할 때 문제가 있을 것 같아요.
따라서 판다스를 사용하여 '정연한 데이터' 로 변형시킨다.
● 데이터는 다음을 참조하십시오.
데이터 정의
데이터의 성형은 주로 다음과 같다.상세하게 묘사할 수는 없지만 사용 방법을 기재해야 한다.
1."SECOND"열에서 "날짜 시간"열을 선택합니다(1차 행동 2019-05-00413:00)
 (pd.to_datetime)
2.날짜 및 시간 열 및 PID 열의 값을 열로 지정하는 데이터 프레임 만들기
3.상기 데이터 프레임을 '날짜 시간' 열의 1s 사이의 평균값으로 설정합니다 (groupby ()
4."PID"열의 각 값에 대한 데이터 프레임 내부 결합 (df1.join (df2,how="inner")))
5."PID"열의 각 값의 이름을 일본어로 변경합니다(df.rename(columns={"A": "B"}, inplace =True).
여기까지는 근무시간의 80%를 사용했다(웃음).
다음은 CSV를 pandas로 읽은 후의 상태입니다.

다음은 성형 후 상태.데이터가 완전하다.
먼저 CSV에 저장한 다음 Dash에서 읽습니다.

Dash 및 Platly Express를 사용한 시각화


드디어 시각화된 코드를 쓸 수 있게 되었다.
Dash에서 Plantly Express를 시작합니다.
콜백 밑에 쓴 make.figure 함수에 x축, y축, 컬러의 물리량(DataFrame의 열에 해당)을 전달합니다.그리고Platly Express로 그린 산포도를 반환했습니다.
왜 Dash와 Plattly Express를 조합했는지 말씀드리자면요.
Platly Express로 애니메이션을 간단하게 만들고 대시로 간단하게 온라인에 올리기 위해서다.그러나 현재 대시에는 Plattly Express를 사용하는 애니메이션 기능이 없습니다.

import plotly_express as px
import dash
import dash_html_components as html
import dash_core_components as dcc
from dash.dependencies import Input, Output
import pandas as pd

OBD2=pd.read_csv("上で整形したCSVのパスを書きます")

col_options = [dict(label=x, value=x) for x in OBD2.columns]
dimensions = ["x", "y", "color"]

app = dash.Dash(__name__, external_stylesheets=["https://codepen.io/chriddyp/pen/bWLwgP.css"])

app.layout = html.Div(
    [
        html.H1("Visualization of OBD by Dash"),
        html.Div(
            [
                html.P([d + ":", dcc.Dropdown(id=d, options=col_options)])
                for d in dimensions
            ],
            style={"width": "25%", "float": "left"},
        ),
        dcc.Graph(id="graph", style={"width": "75%", "display": "inline-block"})
    ])

@app.callback(Output("graph", "figure"), [Input(d, "value") for d in dimensions])
def make_figure(x, y, color):
    return px.scatter(
        OBD2,
        x=x,
        y=y,
        color=color,
        height=700)

#px.scatter()はplotly_expressの描画部分

if __name__ == '__main__':
    app.run_server(debug=True)

위의 코드를 실행하면 브라우저에서 다음 프로그램을 시작합니다.
먼저 x축에서 날짜 시간을, y축에서 속도(km/h)를 선택하고 색깔에서 기름 소모량(km/l)을 선택합니다.

에서는 속도의 시간 시퀀스 데이터를 보여 줍니다.아무래도 속도가 높다는 점에서 기름 소모량이 높아 보인다.
따라서 x축을'속도(km/h)'로, y축을'기름 소모량(km/l)'으로 변경한다.그리하여 아래와 같다.

속도가 매우 작으면(10km/h 이하) 기름 소모량도 매우 낮아 속도와 기름 소모량은 관계가 있다.
하지만 속도가 크면 같은 속도라도 기름 소모량의 편차가 커 명확한 연관성이 없는 것 같다.
여러 가지 일을 해 보았습니다(웃음).x축은'엔진 회전 속도(rmp)', y축은'속도(km/h)', 색깔은'기름 소모량(km/l)'이다.

산포도에는 7개의 경사가 다른 직선이 나타났다.나는 이것이 대략 1속~7속에 해당하는 직선이라고 생각한다.위의 네 직선에서 기름 소모량이 좋은 곳을 볼 수 있다.
1~3속(아래 세 직선)은 기름 소모량이 매우 적은 것 같다.
각양각색의 변수를 바꾸면서 기름 소모량이 좋은 운전을 생각하지만 w를 잘 몰라요.
3 나는 이것이 변수로 처리할 수 없는 복잡한 현상이라고 생각한다.(익숙한 사람이 있으면 알려주세요.)
다음은 앱입니다. 발견하면 만져주세요. 발견하면 연락 주세요.
Visualization of OBD by Dash


1에서는 Dash 및 Plattly Express를 통해 BD에서 얻은 차량 데이터를 시각화합니다.
나는 기름 소모량이 높은 운전을 생각했다.
둘째, 나는 차량 데이터와 GPS 데이터를 연결시켜 지도에 그려보고 싶다.

좋은 웹페이지 즐겨찾기