Python의 Visualization Library Dash를 사용한 2Callback
Callback 보기 전(Dash 버전 향상)
Callback의 기능을 보기 전에 버전이 너무 오래된 문제를 해결할 방법을 생각해 보겠습니다. (Pythn의 버전은 향상되지 않습니다. Dashw만 있습니다.)
$ pip install --upgrade dash
---中略
Successfully installed dash-0.39.0 dash-core-components-0.44.0 dash-html-components-0.14.0 dash-renderer-0.20.0 dash-table-3.6.0
대시만 업그레이드하고 다른 것도 업그레이드됐어요.라이브러리의 버전 정보 사용
Python 3.6.5
Dash 0.39.0
dash-core-components 0.44.0
dash-html-components 0.14.0
plotly 3.7.0
pandas 0.24.1
Callback을 보세요. 앞의 2(읽을 데이터의 모양,long-form 데이터, 정연한 데이터)
최근의 시각화 라이브러리를 보니 읽은 데이터의 형상이 좀 이상하다고 느꼈다.주최피겨 스케이팅도 (매달 교토에서 파이톤의 학습회를 개최합니다! 꼭 참가해 주십시오.)화제가 됐는데, 누군가 쉽게 읽을 수 있는 모양과 기계가 쉽게 읽을 수 있는 모양이라고 한다.기계가 쉽게 읽을 수 있는 데이터는long-form 데이터 또는 정연한 데이터라고 불리며 이 모양의 데이터를 사용한다.
나는 이 일이 대시의 손잡이를 만들 때 문서 속의 샘플 작품의 데이터가 내가 이전에 처리한 것과 다르다고 느꼈을 때라는 것을 안다.이후 다른 좋은 시각화 라이브러리 Altair 문서를 읽고 Long-form Data와 Wide-Form Data 두 항목에서 차이점을 설명했다.
@ishida330 선생의 글은 가지런한 데이터라는 단어로 설명되었다.
그럼, 실제 어떤 모양이냐면 먼저 알타리 페이지에서 떼어내.
wide-form
long-form
이렇게 사용하는 데이터 형식은 시각화할 때도 약간 다르다.
카드를 보다
그럼 본론으로 들어갈 차례가 많지 않다.
지난번부터 연속해서 캘백에 올렸는데 그게 무슨 의문이 있는 것 같아.Callback은 애플리케이션에 특정 요소를 반영하는 기능입니다.
여기서부터 저는 다음과 같은 각 도도부현의 GDP(GDP), 각 도도부현의 1인당 GDP(pergdp), 도도부현의 인구(popu)의 csv를 사용하여 샘플을 만들고 싶습니다.
요소가 많으면 곤란하기 때문에 우선 홋카이도 데이터만 사용해 어느 요소를 줄일지 선택할 수 있는 도표를 만든다.
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objs as go
import pandas as pd
# ①データ読み込み
df = pd.read_csv('./data/longform.csv', index_col=0)
dfhokkaido = df[df['area']=='北海道']
app = dash.Dash(__name__)
# ②表示作成
app.layout = html.Div(children=[
html.Div(
html.H1('北海道のGDP、人口、一人あたりGDPの推移',
style = {'textAlign': 'center'})
),
dcc.Dropdown(
id = 'dropdown-for-hokkaido',
options = [{'label': i, 'value': i} for i in dfhokkaido.item.unique()],
value = 'GDP'
),
dcc.Graph(
id="hokkaidoGraph",
)
])
# ③コールバック作成
@app.callback(
dash.dependencies.Output('hokkaidoGraph', 'figure'),
[dash.dependencies.Input('dropdown-for-hokkaido', 'value')]
)
def update_graph(factor):
dff = dfhokkaido[dfhokkaido['item'] == factor]
return {
'data': [go.Scatter(
x = dff['year'],
y = dff['value']
)]
}
if __name__ == '__main__':
app.run_server(debug=True)
이 코드는 아래의 물건을 만들 수 있다.드롭 다운 시 선택하면 선 그래프가 전환됩니다.
②의 드롭다운과 ③의 호출 부분을 담당한다.
내리다
dash_core_components에는 요소를 선택하는 도구가 많다.
드롭다운 외에도 슬라이더, 버튼, 문자 입력 등이 많다.
또한 ID를 추가하면 콜백 시 여기서 선택한 요소로 전환할 수 있습니다.여기는 id = "dropdown-for-hokkaido"입니다.
지금 당김이 하나밖에 없다고 생각하더라도 조금만 바꾸면 다른 도구를 사용할 수 있다.
이를테면 이번 것도 버튼으로 만들고 싶으니까 해봐.
②의 dcc.Dropdown () 섹션, dcc.RadioItems()로만 변경
원소를 보면서 단추로 선택할 수 있는 도표가 되었다.
Callback
그럼 저는 콜백입니다.장식 앱.나중에 얻은 데이터와 가공한 후에 되돌아오는 데이터의 발송 목적지를 표시하는 '콜백 ()' 을 적으십시오.그리고 얻은 데이터로 처리하는 함수.
app.layout에서 dcc.그래프가 있습니다.
앱에서 도표를 위해 쓴 것은 이것뿐이다.
그럼 앱은layouts 바깥에 쓴 것은 아래의 내용입니다.
@app.callback(
dash.dependencies.Output('hokkaidoGraph', 'figure'),
[dash.dependencies.Input('dropdown-for-hokkaido', 'value')]
)
def update_graph(factor):
dff = dfhokkaido[dfhokkaido['item'] == factor]
return {
'data': [go.Scatter(
x = dff['year'],
y = dff['value']
)]
}
우선,dash가 이용한 데이터(이번 상황은 하락하거나 방송 프로젝트에서 얻은 값).dependencies.Input()로 가져옵니다.하나만 있어도 열거하지 않으면 오류가 발생할 수 있으니 주의해야 한다.원하는 데이터가 있는 ID를 지정하고 데이터 유형을 지정합니다.그리고 아래의 "def"에서 도표 데이터를 만듭니다.
이때, 대시.dependencies.Input()에서 지정한 데이터를 매개변수로 사용할 수 있습니다.이름은 무엇이든지 좋습니다. 이번에는factor입니다.
dfhokkaido의 프로젝트 부분에서 지정한 데이터를 추출하여 dff라는 데이터 프레임을 만듭니다.
그리고return{}에서 도표를 만들 데이터를 만듭니다.
{}의 데이터는dash입니다.dependencies.Output()에서 지정한 ID를 반환합니다.이 경우 아까 앱에서 만든 dcc입니다.Graph에 데이터를 돌려주고 싶어서dash.dependencies.Output(id='hokkaidoGraph','figure')를 미리 지정합니다.
이때 처음에 아이디를 지정하는 것은 알겠지만, 두 번째 안에 무엇을 넣을까요?이렇게 말하기는 좀 어렵다.그래프에'figure'같은 걸 넣어서 조금 알 수 있는 부분이 있지만 전부 모르기 때문에 틀리면 후보의 느낌을 줄 수 있어서 지금 만들고 있어요.
총결산
이번에는 캘백을 사용해 도표를 그리는 샘플을 만들어 보았다.
이어서 나는 마우스의 동작으로 데이터를 더욱 상세하게 볼 수 있는 것을 만들고 싶다.
세 번째는 마우스를 사용하여 좀 복잡한 데이터를 보십시오:.
https://qiita.com/OgawaHideyuki/items/b4e0c4f134c94037fd4f
Reference
이 문제에 관하여(Python의 Visualization Library Dash를 사용한 2Callback), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/OgawaHideyuki/items/1eea435b3f7c90375848텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)