- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
데이터분석 & 데이터사이언스 [데이터분석][데이터 사이언스][python][Dash] Python, Dash 및 Plotly를 사용하여 COVID-19 사례 데이터 시각화
2021.03.28 17:53
[데이터분석][데이터 사이언스][python][Dash]
Python, Dash 및 Plotly를 사용하여 COVID-19 사례 데이터 시각화
Python, Dash 및 Plotly를 사용하여 COVID-19 사례 데이터 시각화
나만의 대시 보드 웹 응용 프로그램 만들기 — 오늘!
이 기사는 COVID-19에 대한 것이 아니라 Python & Dash를 사용하여 유용한 웹 애플리케이션 을 만드는 방법에 대해 자세히 설명합니다 . 이 기술을 시작하고 실행하기위한 간단한 가이드로 만들어 졌으며 혼자서 쉽게 수행 할 수 있습니다 !
R & Shiny를 사용하여이 작업을 수행하는 방법에 대해 거의 동일한 기사를 작성 했으며 의도적으로이 두 소프트웨어 스택을 비교하고 싶었습니다. 여기에서는 Python-Dash 방식에 대해 설명하지만 솔루션에 대한 전용 비교 를 수행하는 다른 기사를 작성할 계획입니다 .

최종 앱이 어떻게 생겼는지 알아 보려면 앱을 테스트하세요.
다음 단계별 가이드 에서는 대화 형 플롯을 포함하여이 웹 애플리케이션을 만드는 방법을 설명합니다. 소프트웨어 스택은 Python & Dash를 기반으로 하며 오픈 소스입니다. 모두 약 130 줄의 코드입니다.
Btw, 다운로드를위한 GitHub 코드 저장소에 대한 링크 는 기사 하단에 제공됩니다.
골
목표는 앱 실행시 COVID-19 사례 데이터를 업데이트하고 대시 보드에 데이터를 표시 하는 웹 애플리케이션 을 만드는 것입니다 . 풍모:
- 코로나 바이러스에 대해 공식적으로 사용 가능한 데이터를 다운로드하고 파싱합니다.
- 국가 및 주를 선택할 수있는 드롭 다운 메뉴.
- 선택한 국가의 신규 및 누적 사례 통계를 보여주는 두 개의 플롯. 확인 된 사례, 회복 된 사례 및 사망자를 선택할 수 있습니다.
- Python 및 Visual Studio Code를 설정합니다.
- Python 프로젝트 및 폴더 구조를 설정합니다.
- 데이터를로드하고 전처리하는 논리를 구현합니다.
- Dash & Plotly를 사용하여 사용자 인터페이스를 만듭니다.
- 서버 로직을 추가하십시오.
- [선택 사항] 애플리케이션을 클라우드에 업로드합니다.
먼저 https://www.python.org/downloads/ 에서 최신 안정 버전의 Python 을 다운로드하고 설치 프로그램을 시작하고 진행합니다.
코드 편집기 선택에는 많은 가능성이 있습니다. Visual Studio Code 는 유효한 옵션입니다. 설치하려면 https://code.visualstudio.com/download 에서 설치 프로그램을 다운로드하고 실행 한 후 설치를 완료하세요.
Python 프로젝트 및 폴더 구조 설정
Python에는 pip , pipenv , (ana) conda , 가상 환경 등 여러 패키지 관리 솔루션이 있습니다 . 빠른 설명은이 매체 게시물을 참조하십시오 . 여기서는 가상 환경을 사용 합니다 .
여전히 명령 줄에서 앱이 있어야하는 디렉터리로 이동합니다. 그런 다음 새 앱 디렉터리와 가상 환경을 만듭니다 .
cd <folder-with-my-apps> # Put here the folder of your choice.
mkdir corona-app # Create a dedicated app directory.
cd corona-app
virtualenv venv # Create the virtual environment 'venv'.
source venv/bin/activate
venv\Scripts\activate
pip install dash # Installs <plotly>, too.
pip install pandas

시작 화면에서 왼쪽에있는 " 폴더 열기…"를 클릭 하고 이전에 만든 폴더 ( corona-app )를 선택합니다.

VS Code 설정 및 사용자 지정에 대한 자세한 내용은이 전용 자습서를 참조하십시오 . 다음 단계는 필요한 모든 앱 코드를 포함 할 app.py 파일을 만드는 것입니다. 파일 탐색기에서 더하기 버튼을 클릭하고 파일 이름을 입력합니다.

이제 코딩을 시작할 수 있습니다!
데이터를로드하고 전처리하는 로직 구현
Visual Studio Code에서 파일이 아직 열려 있지 않은 경우 파일 이름 "app.py"를 클릭합니다. 필요한 라이브러리를로드하려면 다음 줄을 입력하십시오.
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objects as go
from dash.dependencies import Input, Output
import pandas as pd
baseURL = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/"
def loadData(fileName, columnName):
data = pd.read_csv(baseURL + fileName) \
.drop(['Lat', 'Long'], axis=1) \
.melt(id_vars=['Province/State', 'Country/Region'],
var_name='date', value_name=columnName) \
.astype({'date':'datetime64[ns]', columnName:'Int64'},
errors='ignore')
data['Province/State'].fillna('<all>', inplace=True)
data[columnName].fillna(0, inplace=True)
return data
마지막 변환은 해당 열에 대한 날짜 유형 으로의 변환 입니다.
함수 호출하여 loadData를 여러 번 우리는 정화 된 dataframe로드 의 확인 된 사례 , 복구 사례, 그리고 죽음을 . merge 함수 는이 3 개의 데이터 세트를 결합하여 모든 데이터를 포함하는 하나의 데이터 세트를 얻습니다.
allData =
loadData(
"time_series_covid19_confirmed_global.csv", "CumConfirmed") \
.merge(loadData(
"time_series_covid19_deaths_global.csv", "CumDeaths")) \
.merge(loadData(
"time_series_covid19_recovered_global.csv", "CumRecovered"))
countries = allData['Country/Region'].unique()
countries.sort()
[2020 년 3 월 27 일 업데이트] : 서버에서 3 월 23 일 파일 이름이 변경 되었기 때문에 여기서도 업데이트해야했습니다.
Dash & Plotly를 사용하여 사용자 인터페이스 만들기
먼저 외부 스타일 시트의 경로와 사용자 지정 글꼴 ( 이 앱 의 R-Shiny 버전과 일치)을 초기화합니다 .
external_stylesheets=['https://codepen.io/chriddyp/pen/bWLwgP.css']
tickFont = {'size':12, 'color':"rgb(30,30,30)", \
'family':"Courier New, monospace"}
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div(
style={ 'font-family':"Courier New, monospace" }, children=[
## ...
]
])

세 개의 점 (마지막 코드 블록 참조) 대신 다음 코드 블록을 입력하여 컨트롤이 포함 된 열을 정의합니다.
html.H1('Case History of the Coronavirus (COVID-19)'),
html.Div(className="row", children=[
html.Div(className="four columns", children=
html.H5('Country'),
dcc.Dropdown(
id='country',
options=[{'label':c, 'value':c} \
for c in countries],
value='Italy'
)
]),
html.Div(className="four columns", children=[
html.H5('State / Province'),
dcc.Dropdown(
id='state'
)
]),
html.Div(className="four columns", children=[
html.H5('Selected Metrics'),
dcc.Checklist(
id='metrics',
options=[{'label':m, 'value':m} for m in \
['Confirmed', 'Deaths', 'Recovered']],
value=['Confirmed', 'Deaths']
)
])
]),
- 고유 한 국가로 채워진 국가 드롭 다운
- 주 /도 드롭 다운 . 지금까지 초기화되지 않았습니다.
- 3 개의 메트릭 이름으로 채워진 Metrics Checklist .
dcc.Graph(
id="plot_new_metrics",
config={ 'displayModeBar': False }
),
dcc.Graph(
id="plot_cum_metrics",
config={ 'displayModeBar': False }
)
R-Shiny 소프트웨어 스택 과 달리 Python-Dash에는 표현식 (= data!)을 반응 형으로 만드는 간단한 솔루션이 없습니다. 다음 함수는 지정된 국가 및 주에 대한 모든 데이터를 반환합니다. 이 함수는 코드에서 두 번 (플롯 당 하나) 사용되므로 계산이 두 번 발생하지 않으면 이점이 될 것입니다.
def nonreactive_data(country, state):
data = allData.loc[allData['Country/Region'] == country] \
.drop('Country/Region', axis=1)
if state == '<all>':
data = data.drop('Province/State', axis=1) \
.groupby("date") \
.sum() \
.reset_index()
else:
data = data.loc[data['Province/State'] == state]
newCases = data.select_dtypes(include='Int64').diff().fillna(0)
newCases.columns = [column.replace('Cum', 'New')
for column in newCases.columns]
data = data.join(newCases)
data['dateStr'] = data['date'].dt.strftime('%b %d, %Y')
return data
다음 블록은 두 플롯에 사용되는 barchart를 생성 하는 함수를 정의합니다 .
colors = { 'Deaths':'rgb(200,30,30)', \
'Recovered':'rgb(30,200,30)', \
'Confirmed':'rgb(100,140,240)' }
def barchart(data, metrics, prefix="", yaxisTitle=""):
figure = go.Figure(data=[
go.Bar(
name=metric, x=data.date, y=data[prefix + metric],
marker_line_color='rgb(0,0,0)', marker_line_width=1,
marker_color=colors[metric]
) for metric in metrics
])
figure.update_layout(
barmode='group', legend=dict(x=.05, y=0.95),
plot_bgcolor='#FFFFFF', font=tickFont) \
.update_xaxes(
title="", tickangle=-90, type='category',
showgrid=True, gridcolor='#DDDDDD',
tickfont=tickFont, ticktext=data.dateStr,
tickvals=data.date) \
.update_yaxes(
title=yaxisTitle, showgrid=True, gridcolor='#DDDDDD')
return figure
반응 플롯
반응식은 지금까지 대시에서 지원되지 않지만 반응 형 UI 요소는 지원됩니다. 입력 값 중 하나가 변경 되면 ( country , state 또는 metrics ) 다음 콜백 이 실행 됩니다 . 이 경우 후속 함수가 호출되고 출력에 정의 된 변수를 업데이트합니다 ( 그림 ).
이 작업을 수행하기 위해 함수는 정리 된 데이터를로드하고 적절한 함수“ barchart ”를 호출하여 차트를 렌더링합니다 .
@app.callback(
Output('plot_new_metrics', 'figure'),
[Input('country', 'value'), Input('state', 'value'),
Input('metrics', 'value')]
)
def update_plot_new_metrics(country, state, metrics):
data = nonreactive_data(country, state)
return barchart(data, metrics, prefix="New",
yaxisTitle="New Cases per Day")
@app.callback(
Output('plot_cum_metrics', 'figure'),
[Input('country', 'value'), Input('state', 'value'),
Input('metrics', 'value')]
)
def update_plot_cum_metrics(country, state, metrics):
data = nonreactive_data(country, state)
return barchart(data, metrics, prefix="Cum",
yaxisTitle="Cumulated Cases")
마지막으로 드롭 다운 메뉴에 표시되는 주 / 도는 사용자가 선택한 국가를 변경할 때 적응해야합니다 . update_states 는 고유 상태 목록을 추출하고 <all>을 추가 하고 전체 목록을 반환하고 선택한 값을 업데이트합니다.
@app.callback(
[Output('state', 'options'), Output('state', 'value')],
[Input('country', 'value')]
)
def update_states(country):
states = list(allData.loc[allData['Country/Region'] == country]
['Province/State'].unique()
)
states.insert(0, '<all>')
states.sort()
state_options = [{'label':s, 'value':s} for s in states]
state_value = state_options[0]['value']
return state_options, state_value
이제 VS Code의 오른쪽 상단에있는 녹색 "실행"버튼을 누르기 만하면 앱을 실행할 수 있습니다. 재미있게 보내세요 :)
GitHub 코드
위의 모든 코드는 GitHub 에서 찾을 수 있습니다 : https://github.com/ploner/coronavirus-py
[선택 사항] 클라우드에 애플리케이션 업로드
특히 Heroku 와 같은 무료 서비스를 사용하면 웹 서버에 앱을 게시하는 것이 매우 쉽습니다 .
단계가 있습니다 :
- app.py 파일에 다음 줄을 추가 합니다.
server = app.server
Heroku CLI (명령 줄 인터페이스)를 설치합니다. https://dash.plot.ly/deployment — "Heroku 예제"섹션 의 지침을 따르십시오 . 기본적으로, 당신은 설치 gunicorn 에 의해 핍 생성, .gitignore , ProcFile 및 requirements.txt , 그리고에 모두 커밋 Heroku가 사용하는 자식을 .
이것은 Medium에 대한 두 번째 게시물이며 첫 번째 게시물과 매우 관련이 있습니다.
R, Shiny & Plotly를 사용하여 눈 깜짝 할 사이에 COVID-19 사례 데이터 시각화
당신은 선도적 인 경우 데이터 과학 팀 과 회원으로 가입하고 있으며, R 및 Python으로 숙련 뿐만 아니라 대쉬 반짝 비교 할 일 목록에있을 수 있습니다. 어떻게 결정하는지 알려주세요.
이 이야기가 마음에 드 셨다면 COVID-19, 분석 및 기계 학습에 대해 데이터 과학을 향하여 게시 한 다음 두 가지 Medium Stories 중 하나를 좋아할 수도 있습니다.
[출처] https://ichi.pro/ko/python-dash-mich-plotlyleul-sayonghayeo-covid-19-salye-deiteo-sigaghwa-252406289200911
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86113 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78624 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95338 |

