파이썬 데이터 분석 프로젝트 | [프로젝트발표영상] 배달 매출 예측 분석 103 개의 베스트 답변

당신은 주제를 찾고 있습니까 “파이썬 데이터 분석 프로젝트 – [프로젝트발표영상] 배달 매출 예측 분석“? 다음 카테고리의 웹사이트 th.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: th.taphoamini.com/wiki. 바로 아래에서 답을 찾을 수 있습니다. 작성자 SKplanet Tacademy 이(가) 작성한 기사에는 조회수 1,760회 및 좋아요 27개 개의 좋아요가 있습니다.

Table of Contents

파이썬 데이터 분석 프로젝트 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [프로젝트발표영상] 배달 매출 예측 분석 – 파이썬 데이터 분석 프로젝트 주제에 대한 세부정보를 참조하세요

배달 매출 데이터를 바탕으로 일주일 간의 매출을 예측하는 서비스를 기획
2020년 1월~5월의 시계열 데이터를 바탕으로 6월 한주의 매출을 예측하는 시스템이며,
배달 매출 예측도 상승을 위해 2가지의 계층 구조를 만들어서 예측 모델링을 수행
팀명 : 웰치스
멤버 : 이범주, 정수경
2021.11.18일 진행된 혁신성장청년인재양성사업 성과발표회 발표 영상입니다.

파이썬 데이터 분석 프로젝트 주제에 대한 자세한 내용은 여기를 참조하세요.

공공 데이터를 활용한 파이썬 데이터 분석 프로젝트(1) – velog

프로젝트 1. 국내 코로나 환자 데이터 분석하기 ‍⚕️ seaborn 으로 countplot, 그리고 folium 으로 지도에 확진자 marker까지.

+ 여기에 표시

Source: velog.io

Date Published: 6/29/2021

View: 9348

[Python] 파이썬을 이용한 공공 데이터 분석 및 활용(2)

이번 프로젝트에서는 서울 열린 데이터 광장에서 제공하는 서울시 지하철 호선별 역별 승하차 인원 정보 데이터를 분석하고 지하철 역 위치 좌표 …

+ 여기에 자세히 보기

Source: smartreporter3.tistory.com

Date Published: 4/6/2022

View: 8449

Python 데이터 분석가의 시작! 프로젝트 모음집 – 엘리스

어떤 것을 배우나요? 거대한 데이터 속에서 원하는 데이터만을 쏙쏙. 데이터 분석을 위한 대표 데이터프레임 Pandas와,Numpy 그리고 파이썬 시각화 라이브러리인 …

+ 자세한 내용은 여기를 클릭하십시오

Source: kdc-demo.elice.io

Date Published: 6/18/2021

View: 930

Python 데이터분석 프로젝트 – 특이한 개발자

이번포스팅은 Python(파이썬)을 이용한 데이터분석 프로젝트이다. 데이터분석, 데이터시각화를 위한 패키지인 pandas, matplotlib, numpy 위주로 …

+ 여기를 클릭

Source: odddevloper.tistory.com

Date Published: 4/18/2021

View: 4401

Top 43 파이썬 데이터 분석 프로젝트 Trust The Answer

파이썬 EDA 탐색적 데이터분석 프로젝트, 마케팅 관점에서 생각하기 :: ✓굿모닝 IT ✓; 04-3. 데이터 전처리 – Python 데이터 분석 실무 …

+ 여기에 더 보기

Source: toplist.xosotanphat.com

Date Published: 2/12/2022

View: 7082

[ 빅데이터의 이해 ] 공공 데이터를 이용하여 지하철 이용객 …

2021년 1학기에 진행한 프로젝트인데, 그동안 다사다난하여 이제야 … 다른 수강생들과 차이점을 두기 위해 python을 이용해서 분석하기로 마음을 …

+ 자세한 내용은 여기를 클릭하십시오

Source: jerrys-ai-lab.tistory.com

Date Published: 3/13/2022

View: 2146

1-1. 파이썬 EDA 탐색적 데이터분석 프로젝트, 마케팅 관점에서 …

파이썬 EDA 데이터분석 팀 프로젝트, 마케팅 관점에서 생각하기 (제주도) – 첫 프로젝트 글 순서 – 1. 파이썬(python) EDA 데이터분석 주제 정하기 2.

+ 여기에 보기

Source: 0goodmorning.tistory.com

Date Published: 6/11/2022

View: 1168

가상 프로젝트로 배우는 비전공자 파이썬 데이터 분석 실무

지루하고 따분한 파이썬 기초 문법을 배우는 수업이 아닙니다. 가상 프로젝트를 진행하며 실제 현업에서. 데이터 분석을 할 수 있는 스킬을 얻을 수 …

+ 더 읽기

Source: comento.kr

Date Published: 3/4/2022

View: 4084

주제와 관련된 이미지 파이썬 데이터 분석 프로젝트

주제와 관련된 더 많은 사진을 참조하십시오 [프로젝트발표영상] 배달 매출 예측 분석. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[프로젝트발표영상] 배달 매출 예측 분석
[프로젝트발표영상] 배달 매출 예측 분석

주제에 대한 기사 평가 파이썬 데이터 분석 프로젝트

  • Author: SKplanet Tacademy
  • Views: 조회수 1,760회
  • Likes: 좋아요 27개
  • Date Published: 2022. 2. 6.
  • Video Url link: https://www.youtube.com/watch?v=ukeIsaagLBI

공공 데이터를 활용한 파이썬 데이터 분석 프로젝트(1)

본 포스팅은 elice의 2021 NIPA AI 온라인 교육을 듣고 개인 공부를 위해 정리한 것입니다.

1. 국내 코로나 환자 데이터를 활용한 데이터 분석

학습방법

파일 목록에 업로드 되어 있는 [p1]_코로나_데이터_분석_프로젝트.ipynb 파일을 클릭 해설 영상과 함께 코드 셀을 실행해보며 코로나 데이터 분석 프로젝트 진행 실행 하는 중간 중간 quiz를 풀고 하단의 채점까지 완료해야 이수 가능

나는 elice에서 제공하는 쥬피터 노트북뿐만아니라 PyCharm을 이용해서 직접 코드를 입력해 볼 계획이다.

프로젝트 목표

서울시 코로나19 확진자 현황 데이터를 분석하여 유의미한 정보 도출

탐색적 데이터 분석을 수행하기 위한 데이터 정제, 특성 엔지니어링, 시각화 방법 학습

프로젝트 목차

데이터 읽기: 코로나 데이터를 불러오고 Dataframe 구조를 확인

1.1. 데이터 불러오기 데이터 정제: 비어 있는 데이터 또는 쓸모 없는 데이터를 삭제

2.1. 비어있는 column 지우기 데이터 시각화: 각 변수 별로 추가적인 정제 또는 feature engineering 과정을 거치고 시각화를 통하여 데이터의 특성 파악

3.1. 확진일 데이터 전처리하기

3.2. 월별 확진자 수 출력

3.3. 8월 일별 확진자 수 출력

3.4. 지역별 확진자 수 출력

3.5. 8월달 지역별 확진자 수 출력

3.6. 월별 관악구 확진자 수 출력

3.7. 서울 지역에서 확진자를 지도에 출력

데이터 출처

프로젝트 개요

2020년 초에 발생한 코로나19 바이러스는 세계적으로 대유행하였고 이에 대한 많은 분석이 이루어지고 있습니다. 유행 초기엔 이를 분석할 데이터가 충분하지 않았지만 6개월 이상 지난 지금은 다양한 데이터 기관에서 코로나 관련 데이터를 공공으로 제공하고 있습니다.

이번 프로젝트에서는 국내 공공데이터 포털에서 제공하는 서울시 코로나19 확진자 현황 데이터를 바탕으로 탐색적 데이터 분석을 수행해보겠습니다. 국내 데이터 중 확진자 비율이 제일 높고 사람이 제일 많은 서울시의 데이터를 선정하였으며, 이를 바탕으로 코로나19의 확진 추이 및 환자 특성에 대해서 데이터를 바탕으로 알아봅시다.

1. 데이터 읽기

1.1 데이터 불러오기

필요한 패키지 설치 및 import한 후 pandas를 사용하여 데이터를 읽고 어떠한 데이터가 저장되어있는지 확인하기

seaborn은 Matplotlib을 기반으로 다양한 색상 테마와 통계용 차트 등의 기능을 추가한 시각화 패키지로 matplotlib 보다 다양하고 다채로운 시각화 모듈이다. seaborn에서만 제공되는 통계 기반 plot

특별하게 꾸미지 않아도 깔끔하게 구현되는 기본 color

더 아름답게 그래프 구현이 가능한 palette 기능

pandas 데이터프레임과 높은 호환성

hue 옵션으로 bar 구분이 가능하며, xtick, ytick, xlabel, ylabel, legend 등이 추가적인 코딩 작업없이 자동으로 세팅된다.

😱😱😱 Error 주의 😱😱😱

elice에서 제공하는 쥬피터 노트북을 사용하면 에러가 없으나 파이참을 이용했더니 Error 발생😂

UnicodeDecodeError: ‘utf-8′ codec can’t decode byte 0xbf in position 1: invalid start byte

pandas에서 read_csv, read_excel 등 파일을 불러올 때, 한글이 포함된다면 위와 같은 에러가 날 때가 있다.

이는 인코딩의 문제로 encoding=’cp949′ 또는 encoding=’eun-kr’ 를 파라미터로 추가하면 해결된다.

👉 corona_all = pd.read_csv(“./data/서울시 코로나19 확진자 현황.csv”, encoding=”cp949″)

그런데! 나는 이게 문제가 아니었다😫!!! 그래서 공공 데이터 csv 파이썬 인코딩을 검색해서 아래와 같은 강같은 포스팅을 찾아 냈다.

https://teddylee777.github.io/pandas/%EA%B3%B5%EA%B3%B5%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%95%9C%EA%B8%80%EA%B9%A8%EC%A7%90%ED%98%84%EC%83%81-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95

그래서 엑셀에서 파일을 연 뒤 다른 이름으로 저장 – 파일 형식을 CSV UTF-8(쉼표로 분리) 로 지정해주었다.

이 과정을 거쳤더니 인코딩 에러는 떠나가고 딱 한 줄의 다른 에러가 등장했다.

sys:1: DtypeWarning: Columns (10) have mixed types.Specify dtype option on import or set low_memory=False.

dtype option으로 타입을 명시해주거나 low_memory = False로 지정해 주면 경고 메시지가 출력되지 않는다고 하여 나는 후자를 택했더니 드디어 더 이상의 에러는 발생하지 않았다.

corona_all = pd.read_csv(“./data/서울시 코로나19 확진자 현황.csv”, low_memory=False)

PyCharm

import numpy as np import pandas as pd import matplotlib . pyplot as plt import seaborn as sns corona_all = pd . read_csv ( “./data/서울시 코로나19 확진자 현황.csv” , low_memory = False ) print ( corona_all . head ( ) , ”

” ) print ( corona_all . info ( ) , ”

” )

👉 나는 최신 데이터 파일을 다운받아서 elice에서 제공하는 데이터와 내용이 조금 다르다.

👉 non-null을 통해 비어있지 않은 데이터의 개수를 알 수 있고, Dtype으로 데이터타입을 알 수 있다.

👉 여행력 1965는 무슨 뜻일까? 총 144647명 중 해외에서 온 사람이 1965명이라는 것

2. 데이터 정제

결측값(missing data), 이상치(outlier)를 처리해보기

2.1. 비어있는 column 지우기

corona_all.info() 를 통하여 국적, 환자정보, 조치사항 에 해당하는 데이터가 존재하지 않는 것을 알 수 있다. (0 non-null)

.drop() 를 사용하면 column의 데이터를 삭제할 수 있다!

비어있는 국적, 환자정보, 조치사항의 column 데이터를 삭제하고 이 dataframe을 corona_del_col에 저장해보자

필요한 정보만 남기기 위해 데이터를 지울 때는 원본에서 삭제하는 것이 아니라 반드시 새로운 변수로 정의하고 저장하는 것이 좋다!!

corona_del_col = corona_all . drop ( columns = [ “국적” , “환자정보” , “조치사항” ] ) print ( corona_del_col . info ( ) , ”

” )

😢 파이참으로 최신 데이터를 이용해 따라하다보니 다른 부분이 많아 파이참은 개인적으로

실습해보고 포스팅은 elice 쥬피터 노트북에서 한 걸 올려야겠다.

3. 데이터 시각화

데이터 정제를 완료한 corona_del_col 데이터를 바탕으로 각 column의 변수별로 어떠한 데이터 분포를 하고 있는지 시각화하기

3.1. 확진일 데이터 전처리하기

corona_del_col [ ‘확진일’ ]

0 10.21. 1 10.21. 2 10.21. 3 10.21. 4 10.21. … 5743 1.31. 5744 1.30. 5745 1.30. 5746 1.30. 5747 1.24. Name: 확진일, Length: 5748, dtype: object

👉 확진일 데이터가 월.일. 형태의 날짜 형식임을 확인할 수 있다.

월별, 일별 분석을 위해 문자열 형식의 데이터를 숫자로 변환해보자.

확진일 데이터를 month, day 데이터로 나누기

확진일에 저장된 문자열 데이터를 나누어 month, day column에 int64 형태로 저장

month = [ ] day = [ ] for data in corona_del_col [ ‘확진일’ ] : month . append ( data . split ( ‘.’ ) [ 0 ] ) day . append ( data . split ( ‘.’ ) [ 1 ] ) corona_del_col [ ‘month’ ] = month corona_del_col [ ‘day’ ] = day corona_del_col [ ‘month’ ] . astype ( ‘int64’ ) corona_del_col [ ‘day’ ] . astype ( ‘int64’ )

결과 (corona_del_col[‘day’]출력)

0 21 1 21 2 21 3 21 4 21 .. 5743 31 5744 30 5745 30 5746 30 5747 24 Name: day, Length: 5748, dtype: int64

❓ 파이참에서도 corona_del_col[‘month’].astype(‘int64’) 이렇게 데이터 타입을 바꿔줬는데도 dtype: object라고 나온다. 뭐가 문제인걸까? 데이터의 문제일까 싶어서 elice의 csv를 받아서 똑같이 코드를 짰는데도 dtype: object라고 나온다.

❕❕ 해당 컬럼에 저장을 안해서 생긴 문제다!

corona_del_col[‘month’] = corona_del_col[‘month’].astype(‘int64’) 이라고 저장을 해줘야 데이터 타입이 변환된다!!

3.2. 월별 확진자 수 출력

나누어진 month의 데이터를 바탕으로 월별 확진자 수를 막대그래프로 출력

참고로 데이터가 20년도 1월부터 10월까지의 데이터를 담고 있어서 order list는 1~10까지🙄

seaborn의 countplot : sns.countplot(x, data, palette, order)

데이터의 개수를 확인할 수 있다. x축은 month, 월별로 data를 count하는데 이 data가 corona_del_col, palette는 그래프의 색깔 타입, order는 순서!

order = [ ] for i in range ( 1 , 11 ) : order . append ( str ( i ) )

plt . figure ( figsize = ( 10 , 5 ) ) sns . set ( style = “darkgrid” ) ax = sns . countplot ( x = “month” , data = corona_del_col , palette = “Set2” , order = order )

파이참에서 그래프가 안뜨길래 계속 코드를 여기저기 건드려보다 알게된 사실🙄

dtype이 object가 아니면 시각화가 되지 않는 것을 발견했다! 아까 앞에서 month의 dtype을 int64로 저장해줬는데 이렇게 되니 그래프가 그려지지 않고 빈 박스가 나왔다.

이 부분을 다시 원래 dtype = object 로 돌려준 후 plt.show() 를 했더니 그래프가 나왔다.

그러나 그것도 10월에만!! 이건 또 무슨 문제일까 고민을 했더니 x축의 문제였다!

최신 데이터 파일은 2021-03-21 이런식으로 월(month)이 01, 02, 03,… 이렇게 저장되어있어서 for i in range(1,11) 로 얻은 order 리스트 1, 2, 3, … 와 다르다.

그래서 order = [“01”, “02”, “03”, …. ,”12″] 를 하니 내가 원하던 예쁜 그래프가 나왔다.

Pandas 모듈에서 series의 plot 함수를 사용한 출력

corona_del_col [ ‘month’ ] . value_counts ( ) . plot ( kind = ‘bar’ )

👉 내림차순으로 출력되네? value_counts() 가 각 데이터를 세어서 내림차순으로 정리하는 함수!

value_counts()

corona_del_col [ ‘month’ ] . value_counts ( )

8 2416 9 1304 6 460 10 425 3 391 7 281 5 228 4 156 2 80 1 7 Name: month, dtype: int64

👉 dtype : int64 주의하기

3.3. 8월 일별 확진자 수 출력

월별 확진자 수를 살펴보니 8월에 확진자가 가장 많았다!! 8월의 일별 확진자 수를 확인해보자🙄

8월 일별 막대그래프

data=corona_del_col[corona_del_col[“month”]==”8″] 8월 확진자 데이터

order2 = [ ] for i in range ( 1 , 32 ) : order2 . append ( str ( i ) )

plt . figure ( figsize = ( 20 , 10 ) ) sns . set ( style = “darkgrid” ) ax = sns . countplot ( x = “day” , data = corona_del_col [ corona_del_col [ “month” ] == “8” ] , palette = “rocket_r” , order = order2 )

✍ quiz 1. 8월 평균 일별 확진자 수를 구하세요. (8월 총 확진자/31일)

corona_del_col [ corona_del_col [ ‘month’ ] == ‘8’ ] [ ‘day’ ] . count ( ) / 31 corona_del_col [ corona_del_col [ ‘month’ ] == ‘8’ ] [ ‘day’ ] . value_counts ( ) . mean ( )

77.93548387096774

3.4. 지역별 확진자 수 출력

지역 데이터를 간단히 출력해보면 oo구 형태의 문자열 데이터임을 알 수 있다.

이번에는 지역별로 확진자가 얼마나 있는지 막대그래프로 출력해보자🙄

지역별 확진자 수 막대그래프로 출력하기

한글 깨짐 방지를 위한 폰트 지정하기

rc={“axes.unicode_minus”:False} 코드는 축의 값이 마이너스 값이면 마이너스 부호가 깨질 수 있어서 이를 방지하기 위해 False로 설정해주는 것

import matplotlib . font_manager as fm font_dirs = [ ‘/usr/share/fonts/truetype/nanum’ , ] font_files = fm . findSystemFonts ( fontpaths = font_dirs ) for font_file in font_files : fm . fontManager . addfont ( font_file ) plt . figure ( figsize = ( 20 , 10 ) ) sns . set ( font = “NanumBarunGothic” , rc = { “axes.unicode_minus” : False } , style = ‘darkgrid’ ) ax = sns . countplot ( x = “지역” , data = corona_del_col , palette = “Set2” )

파이참에서는 한글 폰트 설정이 아무리해도 안된다… 경로를 다르게 설정해주었는데도… 언젠가는 방법을 찾겠지?

지역 이상치 데이터 처리

위의 출력된 데이터를 보면 종랑구라는 잘못된 데이터와 한국이라는 지역과는 맞지 않는 데이터가 있다. 종랑구 → 중랑구, 한국 → 기타로 데이터를 변경해보자🙄

drop 함수로 삭제하지말고 replace 함수를 사용하여 해당 데이터를 변경하고, 새로운 Dataframe으로 저장하자! (원본은 소중하게..💚)

corona_out_region = corona_del_col . replace ( { ‘종랑구’ : ‘중랑구’ , ‘한국’ : ‘기타’ } )

👉 replace 함수의 ({}) 소괄호, 중괄호 사용한 거 꼭 명심하기!!

plt . figure ( figsize = ( 20 , 10 ) ) sns . set ( font = “NanumBarunGothic” , rc = { “axes.unicode_minus” : False } , style = ‘darkgrid’ ) ax = sns . countplot ( x = “지역” , data = corona_out_region , palette = “Set2” )

3.5. 8월달 지역별 확진자 수 출력

감염자가 가장 많았던 8월에는 지역별로 확진자가 어떻게 분포되어 있는지 확인해보자🙄

논리연산을 이용한 조건에 맞는 데이터 출력

corona_out_region [ corona_del_col [ ‘month’ ] == ‘8’ ]

그래프 출력

data=corona_out_region[corona_del_col[‘month’] == ‘8’] 로 했지만 data=corona_out_region[corona_out_region[‘month’] == ‘8’] 도 상관없을 듯

plt . figure ( figsize = ( 20 , 10 ) ) sns . set ( font = “NanumBarunGothic” , rc = { “axes.unicode_minus” : False } , style = ‘darkgrid’ ) ax = sns . countplot ( x = “지역” , data = corona_out_region [ corona_del_col [ ‘month’ ] == ‘8’ ] , palette = “Set2” )

3.6. 월별 관악구 확진자 수 출력

확진자가 가장 많았던 관악구 내의 확진자 수가 월별로 어떻게 증가했는지 확인해보자🙄

corona_out_region [ ‘month’ ] [ corona_out_region [ ‘지역’ ] == ‘관악구’ ]

3 10 4 10 6 10 7 10 8 10 .. 5630 3 5661 2 5674 2 5695 2 5711 2 Name: month, Length: 452, dtype: object

👉 관악구의 총 확진자는 452명임을 알 수 있다.

plt . figure ( figsize = ( 10 , 5 ) ) sns . set ( style = “darkgrid” ) ax = sns . countplot ( x = “month” , data = corona_out_region [ corona_out_region [ ‘지역’ ] == ‘관악구’ ] , palette = “Set2” , order = order )

3.7. 서울 지역에서 확진자를 지도에 출력

지도를 출력하기 위한 라이브러리로 folium을 사용해보자🙄

folium : open street map(osm)과 같은 지도 데이터에 ‘Leaflet.js’를 이용하여 위치정보를 시각화하는 파이썬 라이브러리

folium.map 을 이용한 지도 출력

import folium map_osm = folium . Map ( location = [ 37.529622 , 126.984307 ] , zoom_start = 11 ) map_osm

지역마다 지도에 정보를 출력하기 위해서는 각 지역의 좌표정보가 필요하다.

이를 해결하기 위해서 서울시 행정구역 시군 정보 데이터를 불러와 사용할 것이다.

데이터 출처: https://data.seoul.go.kr/dataList/OA-11677/S/1/datasetView.do

데이터 저장

CRS = pd . read_csv ( “./data/서울시 행정구역 시군구 정보 (좌표계_ WGS1984).csv” ) CRS

“중구” 데이터 찾기

CRS [ CRS [ ‘시군구명_한글’ ] == ‘중구’ ]

for 문을 사용하여 지역마다 확진자를 원형 마커로 지도에 출력

corona_seoul = corona_out_region . drop ( corona_out_region [ corona_out_region [ ‘지역’ ] == ‘타시도’ ] . index ) corona_seoul = corona_seoul . drop ( corona_out_region [ corona_out_region [ ‘지역’ ] == ‘기타’ ] . index ) map_osm = folium . Map ( location = [ 37.557945 , 126.99419 ] , zoom_start = 11 ) for region in set ( corona_seoul [ ‘지역’ ] ) : count = len ( corona_seoul [ corona_seoul [ ‘지역’ ] == region ] ) CRS_region = CRS [ CRS [ ‘시군구명_한글’ ] == region ] marker = folium . CircleMarker ( [ CRS_region [ ‘위도’ ] , CRS_region [ ‘경도’ ] ] , radius = count / 10 + 10 , color = ‘#3186cc’ , fill_color = ‘#3186cc’ , popup = ‘ ‘ . join ( ( region , str ( count ) , ‘명’ ) ) ) marker . add_to ( map_osm ) map_osm

👉 radius = count/10 + 10 → 해당 지역의 확진자 수(count)에 비례해서 원의 크기를 만들어 줌, +10은 원의 크기가 너무 작을까봐 더해준 것!

👉 각 지역구의 확진자 인원을 가시적으로 나타내기 위해 popup 설정!

✍ quiz 2. 6월에 확진자가 가장 많이 나온 지역을 구하세요.

corona_out_region [ corona_del_col [ ‘month’ ] == ‘6’ ] [ ‘지역’ ] . value_counts ( )

관악구 59 구로구 45 도봉구 43 양천구 43 강서구 33 영등포구 29 타시도 23 은평구 18 금천구 17 서초구 15 중랑구 14 노원구 13 동작구 13 용산구 12 마포구 12 강동구 11 강북구 10 성동구 9 서대문구 8 강남구 7 송파구 7 성북구 4 동대문구 4 광진구 3 종로구 3 중구 3 기타 2 Name: 지역, dtype: int64

답안

[Python] 파이썬을 이용한 공공 데이터 분석 및 활용(2)

728×90

반응형

**본 내용은 Alice 의 데이터 분석을 위한 라이브러리 과정을 수강하면서 , 직접 궁금한 것을 찾아보고 공부하며 정리한 내용임을 밝힙니다.

앞번 포스팅이 너무 지저분 하여서.. 출처를 명시했으니 좀더 깔끔하게 정리를 해보려한다.

프로젝트2. 지하철_승하차_인원_분석_프로젝트

jupyter 를 여세요. 시작합니다.

프로젝트 목표 :

– 승차 또는 하차 시 해당 시간, 해당 역의 승객 수를 확인하기 위해 개찰구 통과 승객 수 데이터와 지하철 위치좌표 데이터를 활용

– 탐색적 데이터 분석을 수행하기 위한 데이터 정제, 특성 엔지니어링, 시각화 방법 학습

[ 프로젝트 목차]

1. 데이터 읽기:

승하차 인원 정보 데이터를 불러오고 DataFrame 구조를 확인

1.1. 데이터 불러오기

1.2. 데이터 확인하기

2. 데이터 정제:

데이터 확인 후 형 변환 및 이상치 데이터 처리

2.1. 2021년 6월 승하차 인원만 추출

3. 데이터 시각화:

각 변수별로 추가적인 정제 또는 feature engineering 과정을 거치고 시각화를 총해 데이터 특성 파악

3.1. 호선 별 이용객 수 출력

3.2. 특정 호선에서 역별 평균 승하차 인원 데이터 추출

3.3. 평균 승하차 인원 수 내림차순으로 막대그래프 출력

3.4. 특정 호선의 혼잡 정도와 위치좌표 데이터 병합

3.5. 특정 호선의 혼잡 정도를 지도에 출력

데이터 출처

서울시 지하철 호선별 역별 승하차 인원 정보 데이터:

http://data.seoul.go.kr/dataList/OA-12252/S/1/datasetView.do

여기서 데이터를 가져와서 설치합니다.

프로젝트 개요

코로나 시국에 익숙해졌다고는 하지만 가끔 밖으로 나갈 때 사람 많은 곳은 피하고 싶은 생각에 어떤 장소를 피해야 하는지 알아보고 싶을 때가 있을 겁니다. 지하철 이용 승객 수를 확인해보면 혼잡도가 높은 지역을 확인해볼 수 있을 것 같습니다.

이번 프로젝트에서는 서울 열린 데이터 광장에서 제공하는 서울시 지하철 호선별 역별 승하차 인원 정보 데이터를 분석하고 지하철 역 위치 좌표 데이터를 활용해 특정 호선에서 어떤 역이 가장 혼잡한지 직관적으로 확인해봅시다.

1. 데이터 읽기

mport numpy as np import pandas as pd import matplotlib.pyplot as plt #서울시 지하철 호선별 역별 승하차 인원 정보 데이터를 불러와 metro_all에 저장 # pd.read_csv를 통하여 승하차 인원 정보 데이터를 데이터프레임 형태로 읽어옵니다. metro_all = pd.read_csv(“./data/서울시 지하철 호선별 역별 시간대별 승하차 인원 정보_20210705.csv”, encoding = ‘cp949’) # 승하차 인원 정보 상위 5개 데이터를 출력합니다. metro_all.head() # 승하차 인원 정보 데이터프레임 정보를 요약하여 출력합니다. metro_all.info() #불러온 두 데이터프레임의 특정 컬럼 데이터를 중복없이 오름차순 정렬하여 확인 # metro_all DataFrame 사용월 데이터 확인 sorted(list(set(metro_all[‘사용월’]))) # metro_all DataFrame 호선명 데이터 확인 sorted(list(set(metro_all[‘호선명’]))) # DataFrame 지하철역 데이터 확인 sorted(list(set(metro_all[‘지하철역’]))) # DataFrame 지하철역 데이터 개수 확인 len(list(set(metro_all[‘지하철역’])))

2. 데이터 정제

앞서, 데이터를 확인해보니 2015년 1월부터 2021년 6월까지 수집된 데이터인 것을 확인

이번 프로젝트에서는 가장 최근 한달간 수집된 데이터를 기준으로 특정 호선에서 어떤 역이 가장 혼잡한지 확인하고자 함.

2.1. 2021년 6월 승하차 인원만 추출

수집된 데이터 중 가장 최근인 6월에 수집한 데이터만 추출하고 불필요한 컬럼을 제거해봅시다.

# 2021년 6월 총 승객수만 추출 metro_recent = metro_all[metro_all[‘사용월’]==202106] metro_recent

# 불필요한 작업일자 컬럼 제거 metro_recent = metro_recent.drop(columns={‘작업일자’}) metro_recent

3. 데이터 시각화

2021년 6월 데이터만 추출한 metro_recent를 활용하여 다양한 데이터 시각화 및 혼잡도 분석을 진행해봅시다.

3.1. 호선 별 이용객 수 출력

추출한 metro_recent 데이터를 활용해 이용객 수가 가장 많은 호선 순으로 막대그래프를 출력해 보겠습니다. #groupby는 그룹화할것 선택 #mean은 평균값 #reset_index는 set_index와 반대로 초기화해 인덱스를 컬럼화 시킨다. #set_index는 컬럼을 인덱스화. groupby하면 series형태로 되있는데, 그것을 어떻게 쓸건지에 따라서 사용. #drop으로 필요없는 행/열 을 삭제해준다. #sort_values는 정렬 방법중 하나인데 True면 오름차순 / False면 내림차순 * 참고할 정렬의 4가지 방법 1. 데이터프레임 정렬(특정 컬럼 기준으로) > df.sort_values(‘a’) 2. 시리즈로 정렬하는 방법(하나의 열에 대해) > df[‘a’].sort_values() 3. 내림차순 정렬 (True면 오름차순 / False면 내림차순) > df.sort_values(‘a’, ascending=False) 4. 여러 컬럼을 리스트로 묶는 방법 > df.sort_values([‘b’,’c’], ascending=False)

import matplotlib.font_manager as fm #공식적으로 알려진 한글 사용방법 , 폰트 관련용도 font_dirs = [‘/usr/share/fonts/truetype/nanum’, ] font_files = fm.findSystemFonts(fontpaths=font_dirs) for font_file in font_files: fm.fontManager.addfont(font_file) metro_line = metro_recent.groupby([‘호선명’]).mean().reset_index() metro_line = metro_line.drop(columns=’사용월’).set_index(‘호선명’)#drop 선택한 행,열을 삭제한 새로운 객체 생ㅇ성 metro_line = metro_line.mean(axis=1).sort_values(ascending=False) plt.figure(figsize=(20,10)) plt.rc(‘font’, family=”NanumBarunGothic”) plt.rcParams[‘axes.unicode_minus’] = False metro_line.plot(kind=(‘bar’)) plt.show()

3.2. 특정 호선에서 역별 평균 승하차 인원 데이터 추출¶

다양한 호선에서 역별 평균 승하차 인원이 많은 역은 어디일까요? 이용객이 가장 많은 2호선 기준으로 확인해봅시다. line = ‘2호선’ metro_st = metro_recent.groupby([‘호선명’,’지하철역’]).mean().reset_index() metro_st_line2 = metro_st[metro_st[‘호선명’]==line] metro_st_line2

여기서 부터 쬐끔 생각해야한다!

승하차 인원은 홀/짝수를 반복하며 나와있다. 이것을 분리해야한다.

for문에서

len다음으로 오는 부분을보자.

왜 -3 이냐 하면, 맨앞의 호선명/지하철역/사용월 의 3개 칼럼을 제외한 갯수의 홀/짝의 각각의 수를 구해야한다.

그래서 ! 나누기 2를 해준것.

그리고

3+2*i 는 3,5,7,9 식으로가고

4+2*i 는 4,6,8,10 식으로 간다.

# 승차 인원 컬럼만 추출 metro_get_on = pd.DataFrame() metro_get_on[‘지하철역’] = metro_st_line2[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_on[metro_st_line2.columns[3+2*i]] = metro_st_line2[metro_st_line2.columns[3+2*i]] metro_get_on = metro_get_on.set_index(‘지하철역’) metro_get_on

# 하차 인원 컬럼만 추출 metro_get_off = pd.DataFrame() metro_get_off[‘지하철역’] = metro_st_line2[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_off[metro_st_line2.columns[4+2*i]] = metro_st_line2[metro_st_line2.columns[4+2*i]] metro_get_off = metro_get_off.set_index(‘지하철역’) metro_get_off

# 역 별 평균 승하차 인원을 구한 후 정수로 형 변환하여 데이터프레임으로 저장 df = pd.DataFrame(index = metro_st_line2[‘지하철역’]) df[‘평균 승차 인원 수’] = metro_get_on.mean(axis=1).astype(int) df[‘평균 하차 인원 수’] = metro_get_off.mean(axis=1).astype(int) df

3.3. 평균 승하차 인원 수 내림차순으로 막대그래프 출력

2호선 기준 6월 한 달간 강남 > 잠실 > 신림 > 구로디지털단지 > 홍대입구 > 선릉 순으로 평균 승차 인원이 많았습니다. # 승차 인원 수 Top10 top10_on = df.sort_values(by=’평균 승차 인원 수’, ascending=False).head(10) plt.figure(figsize=(20,10)) plt.rc(‘font’, family=”NanumBarunGothic”) plt.rcParams[‘axes.unicode_minus’] = False plt.bar(top10_on.index, top10_on[‘평균 승차 인원 수’]) for x, y in enumerate(list(top10_on[‘평균 승차 인원 수’])): if x == 0: plt.annotate(y, (x-0.15, y), color = ‘red’) else: plt.annotate(y, (x-0.15, y)) plt.title(‘2021년 6월 평균 승차 인원 수 Top10′) plt.show()

평균 하차 인원은 거의 동일하게 강남 > 잠실 > 신림 > 구로디지털단지 > 홍대입구 > 역삼 순으로 많았습니다.

# 하차 인원 수 Top10 top10_off = df.sort_values(by=’평균 하차 인원 수’, ascending=False).head(10) plt.figure(figsize=(20,10)) plt.rc(‘font’, family=”NanumBarunGothic”) plt.rcParams[‘axes.unicode_minus’] = False plt.bar(top10_off.index, top10_off[‘평균 하차 인원 수’]) for x, y in enumerate(list(top10_off[‘평균 하차 인원 수’])): if x == 0: plt.annotate(y, (x-0.15, y), color = ‘red’) else: plt.annotate(y, (x-0.15, y)) plt.title(‘2021년 6월 평균 하차 인원 수 Top10’) plt.show()

퀴즈1.

6호선의 지하철 역 중에서 승차 인원수가 가장 많은 역명을 구하세요.

# 3.2.의 첫 번째 셀에서 line값만 수정한 후 # 3.2.와 3.3. 코드를 순서대로 다시 실행해보면 답을 구할 수 있습니다. line = ‘6호선’ metro_st = metro_recent.groupby([‘호선명’,’지하철역’]).mean().reset_index() metro_st_line2 = metro_st[metro_st[‘호선명’]==line] metro_st_line2 # 승차 인원 컬럼만 추출 metro_get_on = pd.DataFrame() metro_get_on[‘지하철역’] = metro_st_line2[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_on[metro_st_line2.columns[3+2*i]] = metro_st_line2[metro_st_line2.columns[3+2*i]] metro_get_on = metro_get_on.set_index(‘지하철역’) metro_get_on # 하차 인원 컬럼만 추출 metro_get_off = pd.DataFrame() metro_get_off[‘지하철역’] = metro_st_line2[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_off[metro_st_line2.columns[4+2*i]] = metro_st_line2[metro_st_line2.columns[4+2*i]] metro_get_off = metro_get_off.set_index(‘지하철역’) metro_get_off # 역 별 평균 승하차 인원을 구한 후 정수로 형 변환하여 데이터프레임으로 저장 df = pd.DataFrame(index = metro_st_line2[‘지하철역’]) df[‘평균 승차 인원 수’] = metro_get_on.mean(axis=1).astype(int) df[‘평균 하차 인원 수’] = metro_get_off.mean(axis=1).astype(int) df top10_on = df.sort_values(by=’평균 승차 인원 수’, ascending=False).head(1) top10_on.index[0]

# 6호선 지하철 역 중 승차 인원 수가 가장 많은 역명을 quiz_1 변수에 저장합니다. # ‘~~역’에서 역을 제외한 ~~을 문자형으로 저장합니다. quiz_1 = top10_on.index[0]

3.4. 특정 호선의 혼잡 정도와 위치좌표 데이터 병합

먼저 특정 호선의 역별 평균 승하차 인원 수와 지하철 역별 위치좌표 데이터를 병합하여 데이터프레임을 생성해봅시다.

# 특정 호선의 역별 평균 승하차 인원 수와 지하철 역 위치 좌표를 데이터프레임으로 반환하는 함수입니다. def get_nums_and_location(line, metro_st): # 특정 호선의 데이터만 추출합니다. metro_line_n = metro_st[metro_st[‘호선명’]==line] # 승차 인원 컬럼만 추출합니다. metro_get_on = pd.DataFrame() metro_get_on[‘지하철역’] = metro_line_n[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_on[metro_line_n.columns[3+2*i]] = metro_line_n[metro_line_n.columns[3+2*i]] metro_get_on = metro_get_on.set_index(‘지하철역’) # 하차 인원 컬럼만 추출합니다. metro_get_off = pd.DataFrame() metro_get_off[‘지하철역’] = metro_line_n[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_off[metro_line_n.columns[4+2*i]] = metro_line_n[metro_line_n.columns[4+2*i]] metro_get_off = metro_get_off.set_index(‘지하철역’) # 역 별 평균 승하차 인원을 구한 후 정수로 형 변환하여 데이터프레임으로 저장합니다. df = pd.DataFrame(index = metro_line_n[‘지하철역’]) df[‘평균 승차 인원 수’] = metro_get_on.mean(axis=1).astype(int) df[‘평균 하차 인원 수’] = metro_get_off.mean(axis=1).astype(int) # 지하철역 명 동일하도록 설정합니다. temp = [] df = df.reset_index() for name in df[‘지하철역’]: temp.append(name.split(‘(‘)[0]+’역’) df[‘지하철역’] = temp # 지하철역 명을 기준으로 두 데이터프레임 병합합니다. df = df.merge(subway_location, left_on=’지하철역’, right_on=’지하철역’) return df

3.5. 특정 호선의 혼잡 정도를 지도에 출력

지도를 출력하기 위한 라이브러리로 folium을 사용해 봅시다.

# 특정 호선의 역별 평균 승하차 인원 수와 지하철 역 위치 좌표를 데이터프레임으로 반환하는 함수입니다. def get_nums_and_location(line, metro_st): # 특정 호선의 데이터만 추출합니다. metro_line_n = metro_st[metro_st[‘호선명’]==line] # 승차 인원 컬럼만 추출합니다. metro_get_on = pd.DataFrame() metro_get_on[‘지하철역’] = metro_line_n[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_on[metro_line_n.columns[3+2*i]] = metro_line_n[metro_line_n.columns[3+2*i]] metro_get_on = metro_get_on.set_index(‘지하철역’) # 하차 인원 컬럼만 추출합니다. metro_get_off = pd.DataFrame() metro_get_off[‘지하철역’] = metro_line_n[‘지하철역’] for i in range(int((len(metro_recent.columns)-3)/2)): metro_get_off[metro_line_n.columns[4+2*i]] = metro_line_n[metro_line_n.columns[4+2*i]] metro_get_off = metro_get_off.set_index(‘지하철역’) # 역 별 평균 승하차 인원을 구한 후 정수로 형 변환하여 데이터프레임으로 저장합니다. df = pd.DataFrame(index = metro_line_n[‘지하철역’]) df[‘평균 승차 인원 수’] = metro_get_on.mean(axis=1).astype(int) df[‘평균 하차 인원 수’] = metro_get_off.mean(axis=1).astype(int) # 지하철역 명 동일하도록 설정합니다. temp = [] df = df.reset_index() for name in df[‘지하철역’]: temp.append(name.split(‘(‘)[0]+’역’) df[‘지하철역’] = temp # 지하철역 명을 기준으로 두 데이터프레임 병합합니다. df = df.merge(subway_location, left_on=’지하철역’, right_on=’지하철역’) return df

이제 특정 호선의 역별 평균 승차 인원 수를 원형마커를 통해 지도에 출력해봅시다

#color – 선색

#fill_color -면색

# 특정 호선의 역별 평균 승하차 인원 수와 위치좌표 데이터만 추출합니다. rail = ‘6호선’ df = get_nums_and_location(rail, metro_st) # 서울의 중심에 위치하는 명동역의 위도와 경도를 중심으로 지도 출력합니다. latitude = subway_location[subway_location[‘지하철역’]==’명동역’][‘x좌표’] #위도 longitude = subway_location[subway_location[‘지하철역’]==’명동역’][‘y좌표’]#경도 map_osm = folium.Map(location = [latitude, longitude], zoom_start = 12) #지도출력 # 각 지하철 역의 위치별로 원형마커를 지도에 추가합니다. for i in df.index: marker = folium.CircleMarker([df[‘x좌표’][i],df[‘y좌표’][i]], radius = (df[‘평균 승차 인원 수’][i]+1)/3000, # 인원 수가 0일 때 계산오류 보정 popup = [df[‘지하철역’][i],df[‘평균 승차 인원 수’][i]], color = ‘blue’, fill_color = ‘blue’) marker.add_to(map_osm) map_osm

퀴즈2. 강남역의 x좌표(위도)를 구하세요.

# get_nums_and_location() 함수를 활용하면 쉽게 구할 수 있습니다. # 강남역은 2호선이기 때문에 df = get_nums_and_location(‘2호선’, metro_st)으로 데이터프레임을 추출합니다. # df[df[‘지하철역’]==’강남역’][‘x좌표’]을 통해 컬럼 ‘지하철역’이 ‘강남역’인 행을 추출하고 ‘x좌표’값을 구해보세요. df = get_nums_and_location(‘2호선’, metro_st) x = df[df[‘지하철역’]==’강남역’][‘x좌표’] x[0]

# float형으로 좌표값만 저장합니다. 예시: 37.123456 quiz_2 = x[0]

728×90

반응형

Top 43 파이썬 데이터 분석 프로젝트 Trust The Answer

[1/5] 파이썬 데이터 분석 – 전국 도시 공원 표준 데이터 불러오기, 요약하기

[1/5] 파이썬 데이터 분석 – 전국 도시 공원 표준 데이터 불러오기, 요약하기

Python 데이터분석 프로젝트 :: 특이한 개발자

Article author: odddevloper.tistory.com

Reviews from users: 14616 Ratings

Ratings Top rated: 3.3

Lowest rated: 1

Summary of article content: Articles about Python 데이터분석 프로젝트 :: 특이한 개발자 이번포스팅은 Python(파이썬)을 이용한 데이터분석 프로젝트이다. 데이터분석, 데이터시각화를 위한 패키지인 pandas, matplotlib, numpy 위주로 … …

Most searched keywords: Whether you are looking for Python 데이터분석 프로젝트 :: 특이한 개발자 이번포스팅은 Python(파이썬)을 이용한 데이터분석 프로젝트이다. 데이터분석, 데이터시각화를 위한 패키지인 pandas, matplotlib, numpy 위주로 … 이번포스팅은 Python(파이썬)을 이용한 데이터분석 프로젝트이다. 데이터분석, 데이터시각화를 위한 패키지인 pandas, matplotlib, numpy 위주로 사용해보았다. 컴공에 열중이지만 체대 출신인만큼 난 운동을 사랑..개인 개발 경험 / 유익한 개발 참고자료 공유 / 썰풀기

Table of Contents:

Python 데이터분석 프로젝트

티스토리툴바

Python 데이터분석 프로젝트 :: 특이한 개발자

Read More

1-1. 파이썬 EDA 탐색적 데이터분석 프로젝트, 마케팅 관점에서 생각하기 :: ✔굿모닝 IT ✔

Article author: 0goodmorning.tistory.com

Reviews from users: 26858 Ratings

Ratings Top rated: 3.9

Lowest rated: 1

Summary of article content: Articles about 1-1. 파이썬 EDA 탐색적 데이터분석 프로젝트, 마케팅 관점에서 생각하기 :: ✔굿모닝 IT ✔ 파이썬 EDA 데이터분석 팀 프로젝트, 마케팅 관점에서 생각하기 (제주도) – 첫 프로젝트 글 순서 – 1. 파이썬(python) EDA 데이터분석 주제 정하기 2. …

Most searched keywords: Whether you are looking for 1-1. 파이썬 EDA 탐색적 데이터분석 프로젝트, 마케팅 관점에서 생각하기 :: ✔굿모닝 IT ✔ 파이썬 EDA 데이터분석 팀 프로젝트, 마케팅 관점에서 생각하기 (제주도) – 첫 프로젝트 글 순서 – 1. 파이썬(python) EDA 데이터분석 주제 정하기 2. 파이썬 EDA 데이터분석 팀 프로젝트, 마케팅 관점에서 생각하기 (제주도) – 첫 프로젝트 글 순서 – 1. 파이썬(python) EDA 데이터분석 주제 정하기 2. 실패한 여기어때 후기 웹스크래핑(web scraping) 3. 데이터..

Table of Contents:

1-1. 파이썬 EDA 탐색적 데이터분석 프로젝트, 마케팅 관점에서 생각하기 :: ✔굿모닝 IT ✔

Read More

04-3. 데이터 전처리 – Python 데이터 분석 실무

Article author: wikidocs.net

Reviews from users: 15447 Ratings

Ratings Top rated: 4.0

Lowest rated: 1

Summary of article content: Articles about 04-3. 데이터 전처리 – Python 데이터 분석 실무 모든 데이터 분석 프로젝트에서 데이터 전처리는 반드시 거쳐야 하는 과정이다. 대부분의 데이터 분석가가 좋아하지 않는 과정이지만, 분석 결과/인사이트와 모델 성능 … …

Most searched keywords: Whether you are looking for 04-3. 데이터 전처리 – Python 데이터 분석 실무 모든 데이터 분석 프로젝트에서 데이터 전처리는 반드시 거쳐야 하는 과정이다. 대부분의 데이터 분석가가 좋아하지 않는 과정이지만, 분석 결과/인사이트와 모델 성능 … 온라인 책을 제작 공유하는 플랫폼 서비스

Table of Contents:

데이터 불러오기 및 인덱스 지정

결측치 처리

이상치 처리

실습 데이터 전처리

04-3. 데이터 전처리 – Python 데이터 분석 실무

Read More

더북(TheBook): 모두의 데이터 분석 with 파이썬

Article author: thebook.io

Reviews from users: 37440 Ratings

Ratings Top rated: 4.7

Lowest rated: 1

Summary of article content: Articles about 더북(TheBook): 모두의 데이터 분석 with 파이썬 이 책은 기온, 인구, 대중교통 같은 공공데이터를 활용한 데이터 분석 프로젝트를 진행한다. 데이터 다운로드부터 정제, 문제 해결 방법 구상, 파이썬 코드로 구현까지 … …

Most searched keywords: Whether you are looking for 더북(TheBook): 모두의 데이터 분석 with 파이썬 이 책은 기온, 인구, 대중교통 같은 공공데이터를 활용한 데이터 분석 프로젝트를 진행한다. 데이터 다운로드부터 정제, 문제 해결 방법 구상, 파이썬 코드로 구현까지 … 더북, TheBook, 모두의 데이터 분석 with 파이썬더북(TheBook): (주)도서출판 길벗에서 ì œê³µí•˜ëŠ” IT 도서 열람 ì„œë¹„ìŠ¤ìž ë‹ˆë‹¤.

Table of Contents:

더북(TheBook): 모두의 데이터 분석 with 파이썬

Read More

See more articles in the same category here: https://toplist.xosotanphat.com/blog.

1-1. 파이썬 EDA 탐색적 데이터분석 프로젝트, 마케팅 관점에서 생각하기

파이썬 EDA 데이터분석 팀 프로젝트, 마케팅 관점에서 생각하기 (제주도) – 첫 프로젝트 글 순서 – 1. 파이썬(python) EDA 데이터분석 주제 정하기 2. 실패한 여기어때 후기 웹스크래핑(web scraping) 3. 데이터 수집 방법 & 데이터 추출, 정제 4. 판다스(pandas) 데이터 처리 / Matplotlib, Json 시각화 5. 정리 3월 중순에 교육을 시작해서 단 몇 주만에 파이썬을 배웠다. 6개월 뒤에 이 글을 다시 보게 되면 참 답답하게 코딩을 했구나라고 생각을 했으면 좋겠다는 심정으로.. 열심히 코딩을 할 생각이다. * 코딩 부분은 다음 편부터 나옵니다. 일련의 과정이니 참고만 해주세요 EDA 란? 데이터를 수집하고 수집된 데이터를 다양한 각도에서 관찰하고 이해하는 과정으로 보면 된다. 데이터를 분석하기 전에 그래프나 통계적인(matplotlip, seaborn) 방법으로 시각화해, 더욱 직관적으로 데이터를 처리해서 분석한다. 출처 : blog.naver.com/hrd04/221135900560 이렇게 복잡한 과정을 거쳐야할 수도 있지만… 간단하게 보면 데이터 수집 => 시각화 탐색 => 패턴 도출 => 인사이트 발견 순으로 보면 좀 할만하네?라고 생각이 든다. 주제 선정 모르면 일단 친구한테 물어보는게 마음 편하다. 생각보다 간단한 주제를 해서 별거 아닐거라고 생각했는데 큰 오산… [마케팅적인 관점으로 접근] 1. 검색수, 관심, 날씨 등의 키워드 분석으로 6개월 후에 팔릴 제품 예상 – 날씨는 기상청 공공데이터, 검색 수는 구글 트렌드, 네이버 datalab으로 어느 정도 데이터를 뽑을 수 있지만, 개인의 관심과 개인이 구매했던 제품들을 보려면 개인 정보가 필요한데 데이터를 구하기 힘들 것으로 판단해서 포기 2. 드라마에 나오는 제품(협찬)이 실제 검색량과 구매에 얼마나 영향을 미치는지 – 커뮤니티에 홍보글들이 올라와서, 조회수 당 실질적으로 구매에 얼마나 많은 영향을 미칠까.. 인플루언서 마케팅의 효율이 얼마나 될지를 객관적인 데이터 자료로 생각을 하려고 했지만, 이것 또한 구매까지 파악이 안 돼서 pass 3. 네이버 view 상위 검색 분석 – 네이버에도 알고리즘이 있다고 하지만 어느정도 상관관계가 있을 수 있으니 for 구문으로 지역별 + 맛집 돌려서 상위 5~10개의 글에서 키워드, 그림 개수, 영상 길이, 블로그 전체 글 수 등을 웹 스크래핑으로 통계를 내서 진행하려고 했으나… 말로는 쉽지 실제 하기는 어려웠다. [팀 회의] – 지역별, 성별, 연령 등으로 정리 할 수 있는 코로나 감염자 현황 – 서울 지하철 역 별로 승/하차 인원 및 현재 열차의 위치 – 서귀포시 와 제주시로 나누어 토지 비교 / 상업용 비교 – 연도별 토지값 변동, 각 동별로 차이가 있는가 – 동일 생활권내 각동별로 같은가 [EDA 과정] 간단한 주제 밖에 나오지 않아서 ‘ 제주도 예비 창업자를 위한 업종 서비스 추천 ‘이라는 EDA 팀 프로젝트 주제를 정했다 => 데이터를 찾아보니 너무 주제가 광범위해서, 숙박업으로 좁혔다(숙박업 서비스 개선을 위한 방안) => 그래도 데이터가 많은 것 같아서 에어비앤비, 야놀자, 여기어때 등의 숙박업체 중 탑 2 (야놀자, 여기어때 점유율이 1, 2위라는 걸 처음 알았음)에서도 제주시, 게스트하우스로 줄여나갔다. * 머릿속 생각은 숙박업체 등에서 좋은 평점, 또는 많이 방문하는 업체들의 리스트를 뽑는다. 어떤 점에서 방문을 하는지 주위 상권 분석을 한다. 추가로 있으면 좋을 서비스나 경쟁력 갖추기 위한 것들을 제시한다. 제주도뿐만 아니라 타 여행도시랑 비교해본다. 오만했다. 처음 프로젝트면 욕심을 버리자 다음 편은 후기를 웹 스크래핑으로 뽑아오기

04-3. 데이터 전처리

모든 데이터 분석 프로젝트에서 데이터 전처리는 반드시 거쳐야 하는 과정이다. 대부분의 데이터 분석가가 좋아하지 않는 과정이지만, 분석 결과/인사이트와 모델 성능에 직접적인 영향을 미치는 과정이기 때문에 중요하게 다루어지는 과정이다. 한 설문조사에 의하면, 분석가의 80% 시간을 데이터 수집 및 전처리에 사용한다고 하니, 얼마나 중요한 과정인지 짐작할 수 있다. 물론 지루하고 반복 작업의 연속이기 때문에 시간이 많이 들어가는 측면도 있을 것이다. Source: Forbes 지난 시간에 간단히 언급한 대로, 실무에 사용되는 데이터셋은 바로 분석이 불가능할 정도로 지저분(messy)하다. 분석이 가능한 상태로 만들기 위해 아래와 같은 전처리 방식이 자주 사용된다. 모든 강의에 걸쳐서 전처리 단계는 중요하게 그리고 반복적으로 다루어질 예정이다. 데이터 불러오기 및 인덱스 지정 데이터를 읽어 오고 가장 먼저 할일은 첫 행 몇개와 마지막 행을 살펴보는 것이다. 그리고 유니크 식별값을 인덱스로 지정하고 dataframe 각 컬럼의 타입과 결측치 등을 파악하는 것이다. # 데이터프레임 읽고 초반, 후반 행 확인하기 df = pd.read_csv(“testset.csv”, index_col=0) df.head() df.tail() # 인덱스 지정 df.set_index(“iduser”, inplace=True) # 컬럼별 type 확인 및 결측치 확인 df.info() df.isnull().sum() 결측치 처리 결측치 처리는 1) 결측치 사례 제거 2) 수치형의 경우 평균이나 중앙치로 대체(imputation)하거나 범주형인 경우 mode 값으로 대체 3) 간단한 예측 모델로 대체하는 방식이 일반적으로 이용된다. 가장 쉬운 방법은 Null이 포함 행 혹은 일부 행을 제거하는 것이다. 수집된 사례(observation)이 많다면 이 방법을 사용하는 것이 가능하다. 만약 샘플수가 충분하지 않을 경우, Pandas의 fillna() 명령어로 Null 값을 채우는 것이 가능하다. 연속형인 경우 Mean이나 Median을 이용하고 명목형인 경우 Mode(최빈치)나 예측 모형을 통해 Null 값을 대체할 수 있다. 데이터셋을 읽었다면, Missing Value 파악을 위해 df.info() 가장 처음에 이용하는 것을 추천한다. 만약 np.nan으로 적절히 missing value로 불러왔다면 info() 이용 가능하다. 만약 ”, ‘ ‘ 이런식의 공백이나 다른 방식으로 처리되어 있다면, 모두 repalce 처리해줘야 한다. info()를 실행했을 때, 누가봐도 float or int 인데 object(string)으로 되어 있다면 이런 사레가 포함될 가능성이 높다. 결측치를 처리할 때 고려할 점 결측치를 처리할 경우에도 도메인 지식은 유용하게 사용된다. 인적, 기계적 원인임이 판명되면, 협업자와 지속적으로 노력해 결측치를 사전에 발생하지 않도록 조치하는 것이 좋다. 수치형인 경우 의미상으로 0으로 메꾸는 것이 맞는지 아니면 평균이나 중앙치가 맞는지 등은 데이터에 대한 배경지식이 있는 경우, 보다 적절한 의사결정을 할 수 있다. 예를 들어 viewCount가 1이상인데, edit, export가 missing인 경우 (도메인 지식을 통해) 0으로 메꾸는 것이 가능하다. View 가 다른 행동에 선행하는 개념이기 때문에 위와 같은 의사결정이 가능하다. NA 와 Null 차이점 (R에서만 구분되는 개념, 파이썬에서는 numpy의 NaN만 이용, 가끔 pure python에서 None을 볼 수 있음, None = empty) NA: Not Available (does not exist, missing) Null: empty(null) object NaN: Not a Number (python) reference: https://www.r-bloggers.com/r-na-vs-null/ 특히 숫자 0과 null 과 같은 결측치는 완전히 다른 개념이니 유의해야 한다. 만약 target(group)에 결측치가 있다면 imputation이 아닌 drop 으로 처리하도록 한다. 0: -1과 1 사이의 가운데 숫자(정수) null: 미지의 값 # 결측치 부분을 메꾸는 방법 test[‘viewCount’] = test[‘viewCount’].fillna(test.viewCount.mean()) # 만약 결측치가 문자열 스페이스(‘ ‘)로 되어 있다면, np.nan으로 바꾸어 Pandas 라이브러리가 인식할수 있도록 변환 test.viewCount = test.viewCount.replace(”, np.nan) # 결측치를 제거하는 방법 test.dropna(how=’all’).head() # 한 행이 모두 missing value이면 제거 test.dropna(how=’any’).head() # 한 행에서 하나라도 missing value가 있으면 제거 이상치 처리 일반적으로 1) 표준점수로 변환 후 -3 이하 및 +3 제거 2) IQR 방식 3) 도메인 지식 이용하거나 Binning 처리하는 방식이 이용된다. 표준점수 이용할 경우 평균이 0, 표준편차가 1인 분포로 변환한후 +3 이상이거나 -3 이하인 경우 극단치로 처리한다. Source: Wikipedia # 표준점수 기반 예제 코드 def std_based_outlier(df): for i in range(0, len(df.iloc[1])): df.iloc[:,i] = df.iloc[:,i].replace(0, np.NaN) # optional df = df[~(np.abs(df.iloc[:,i] – df.iloc[:,i].mean()) > (3*df.iloc[:,i].std()))].fillna(0) IQR 방식은 75% percentile + 1.5 * IQR 이상이거나 25 percentile – 1.5 * IQR 이하인 경우 극단치로 처리하는 방식이다. 이해하기 쉽고 적용하기 쉬운 편이지만, 경우에 따라 너무 많은 사례들이 극단치로 고려되는 경우가 있다. Source: statisticshowto # IQR 기반 예제 코드 def outliers_iqr(ys): quartile_1, quartile_3 = np.percentile(ys, [25, 75]) iqr = quartile_3 – quartile_1 lower_bound = quartile_1 – (iqr * 1.5) upper_bound = quartile_3 + (iqr * 1.5) return np.where((ys > upper_bound) | (ys < lower_bound)) 데이터 분포 변환 대부분의 모델은 변수가 특정 분포를 따른다는 가정을 기반으로 한다. 예를 들어 선형 모델의 경우, 설명 및 종속변수 모두가 정규분포와 유사할 경우 성능이 높아지는 것으로 알려져 있다. 자주 쓰이는 방법은 Log, Exp, Sqrt 등 함수를 이용해 데이터 분포를 변환하는 것이다. import math from sklearn import preprocessing # 특정 변수에만 함수 적용 df['X_log'] = preprocessing.scale(np.log(df['X']+1)) # 로그 df['X_sqrt'] = preprocessing.scale(np.sqrt(df['X']+1)) # 제곱근 # 데이터 프레임 전체에 함수 적용 (단, 숫자형 변수만 있어야 함) df_log = df.apply(lambda x: np.log(x+1)) 위 방법 외에도 분포의 특성에 따라 제곱, 자연로그, 지수 등 다양한 함수가 사용될 수 있다. 가이드는 아래와 같다. left_distribution: X^3 mild_left: X^2 mild_right: sqrt(X) right: ln(X) servere right: 1/X 데이터 단위 변환 데이터의 스케일(측정단위)이 다를 경우 특히 거리를 기반으로 분류하는 모델(KNN 등)에 부정적인 영향을 미치므로, 스케일링을 통해 단위를 일정하게 맞추는 작업을 진행해야 한다. 아래 방식이 주로 스케일링을 위해 쓰이는 방법이다. 대부분의 통계 분석 방법이 정규성 가정을 기반으로 하므로 완벽하지 않더라도 최대한 정규분포로 변환하는 노력이 필요하다. Scaling: 평균이 0, 분산이 1인 분포로 변환 MinMax Scaling: 특정 범위 (예, 0~1)로 모든 데이터를 변환 Box-Cox: 여러 k 값중 가장 작은 SSE 선택 Robust_scale: median, interquartile range 사용(outlier 영향 최소화) So you have finished reading the 파이썬 데이터 분석 프로젝트 topic article, if you find this article useful, please share it. Thank you very much. See more: 파이썬 데이터분석 예제, 파이썬 데이터분석 프로젝트 주제, 파이썬 빅데이터 분석 예제, 파이썬 공공데이터 분석, 파이썬 데이터분석 책 추천, 파이썬 데이터 분석 입문 PDF, 파이썬 데이터 분석 알고리즘, 파이썬 데이터 분석 코드

[ 빅데이터의 이해 ] 공공 데이터를 이용하여 지하철 이용객 데이터 분석

제리

2021년 1학기에 진행한 프로젝트인데, 그동안 다사다난하여 이제야 프로젝트 로그를 적는다.

이 프로젝트는 학교 기말과제로 제출하였고, 제목에도 있듯이 ‘빅데이터의 이해’라는 과목이었다.

해당 기말과제는 자유로운 주제로 데이터를 분석하는 것이었다.

단, 공공데이터를 이용해야 된다.

이 과목은 프로그래밍 언어를 가르치는 것은 아니다.

주로 빅데이터 이론에 대해서 배웠고, 분석 방법도 이론만 배웠다.

교양 과목이었지만, python 언어를 활용할 수 있기 때문에

다른 수강생들과 차이점을 두기 위해 python을 이용해서 분석하기로 마음을 먹었다.

참고문헌 포함하여 10페이지 안으로 보고서를 작성해야 되기 때문에

많은 내용을 담지는 못하지만, 대충 하는 성격은 못되어서 보고서에 담지 못한 내용까지 포함하여

블로그에 정리를 하려고 한다.

결과부터 말하자면 기말과제는 만점을 받았고, 학점은 A+을 받았다.

보고서에 적은 순서로 포스팅을 할 예정이다.

1. Project 목적

2. 배경 및 필요성

3. 데이터 수집 및 전처리

4. 데이터 분석

5. 결론

언어 : Python

사용 라이브러리 : pandas, folium, googlemaps

# 필요 라이브러리 import import pandas as pd import folium import folium.plugins as plugins import googlemaps

참고로 해당 프로젝트는 2021년 6~7월에 진행한 것이라서 지금이랑 코로나 상황이 많이 다르다.

500~1500명 정도로 지금보다는 확연히 적은 수이지만, 물론 이때도 심각하였고 거리두기를 강화해서 저녁 10시 제한이 걸려있는 상황이다.

[ Project 목적 ]

중학생 때부터 지겹도록 서울 지하철을 많이 타고 다녔다. 물론 지금도 지겹도록 타고 있다.

아침 출근시간, 저녁 퇴근시간을 보면 유동인구가 많은 역에는 역무원들이 추가로 배치되어 있는 것을 볼 수 있다.

구토나 음식물로 인하여 전철이 오염되거나 갑작스러운 상황을 미리 대비하기 위해 적은 직원들을 효율적으로 배치하고 집중 분배를 시킬 필요가 있다.

집중분배를 하기 위해 승·하차 인원 정보 데이터를 이용하여 언제, 어디에 사람들이 제일 많이 모이는지 확인한다.

특히 거리두기 강화로 저녁 10시에 승·하차인원이 급증하게 되는데 이때 어느 지하철역의 사람이 제일 많이 모이는지 확인한다.

이 프로젝트를 통해서 서울 지하철의 직원을 효율적으로 배치하기 위해 데이터 분석을 통하여 언제, 어디에 승객들이 가장 많이 모이는지 미리 예측할 수 있도록 도움을 주고자 한다.

(물론, 이미 데이터 분석을 통해서 효율적으로 배치하고 있을 것이다.)

[ Project 배경 및 필요성 ]

옛날에도 자주 겪었고, 최근에 또 겪었던 일이 있다.

학교를 다닐 때 지하철 마지막 차를 많이 탔었는데 술을 먹고 타는 사람들이 굉장히 많았다.

그래서 마지막 차를 타면 높은 확률로 구토를 자주 본다.🤮🤮

이제는 사회적 거리두기 강화로 인하여 저녁 10시가 되면 식당 문을 닫아서 저녁 10시까지 빠르게 먹고 지하철을 타는 사람들이 많다. (이때는 저녁 10시였다.)

마지막 차처럼 술에 취한 사람도 많지만, 사람도 많아서 구토를 발견하면 너무 큰 피해를 준다.

지하철 안에서 구토를 하거나 음식물을 흘린 사람들은 휴지 같은 닦을 것이 없어서 못 치워서 주변 사람들에게 휴지가 있는지 물어봐서 치우는 게 정상이지만, 대부분은 다른 칸으로 가던가 그냥 나가버린다.

객실 내부의 청소는 보통 종착역에 도착했을 때 하기 때문에, 종착역 도착하기 전에 오염이 되면 좌석에 앉지도 못하고 냄새로 인하여 주변에 여러모로 피해가 많기 때문에 신속한 처리가 필요하다고 본다.

목적에도 말하였듯이 출퇴근 시간에 사람들이 많이 몰리는 지하철역에는 직원이 앞뒤로 1명씩 배치가 되어있는 것을 종종 본다. 하지만, 그렇지 않은 역이 대부분이고 지하철 운행하는 기관사분이 마이크를 통해 말을 하여도 통제가 전혀 되지 않는다. 이러면 다음 열차부터 계속 지연되어서 몇 백에서 몇 천이 피해를 보는 것이다.

이런 피해를 자주 당해서 언제 어디에 승객들이 많이 몰리는지 알려주어야겠다는 필요성을 느꼈다.

해결하기 위해서 직원을 더 뽑는 방안도 있다.

하지만 2021년 코로나19와 우대권 등의 관한 문제로 인하여 서울교통공사의 예상 적자가 1조 넘게 발생하였고, 적자는 점점 늘어나고 있다.

관련 뉴스 : https://www.news1.kr/articles/?4332941

큰 폭으로 적자가 증가하고 있다.

덩달이 직원도 감축하기 때문에 더 채용하거나 근무시간을 늘리는 것은 불가능하다.

그래서 남은 직원을 이용하여 효율적으로 운영시키는 것이 필요하다.

이것에 대해서 여러 조사를 하다가 서울교통공사가 적자라는 것에 대해 크게 와닿은 영상이 있었다.

인형을 팔았다는 사실을 이 영상 보고 알았지만, 적자가 심각하다는 것을 각인시킨 영상이었다.

[ 데이터 수집 및 전처리 ]

데이터 수집

데이터는 [서울시 지하철 호선별 역별 시간대별 승·하차 인원 정보]를 이용하였고, [서울 열린 데이터 광장]에서 수집하였다.

이 데이터는 티머니로부터 제공받았다고 한다.

http://data.seoul.go.kr/dataList/OA-12252/S/1/datasetView.do

2015.01부터 2021.05까지의 승·하차 인원 수가 적혀 있는 데이터이다.

데이터는 정형 데이터로 되어있고, 속성은 [사용 월, 호선명, 지하철역, 시간별 승·하차인원]으로 총 52개로 구성되어있다.

# 승하차 인원정보 (2021.05~2015.01) station_people = pd.read_csv(‘서울시 지하철 호선별 역별 시간대별 승하차 인원 정보.csv’,encoding=’EUC-KR’) # info station_people.info()

컬럼이 너무 많아서 짤렸지만 03시~04시까지 있다.

# size station_people.shape

행은 44730개가 있고 총 52개의 열로 구성되어있다.

데이터 전처리 1 – 지하철역 위치

역 위치를 파악하여 지도를 통해 시각화를 하기 위해 folium라이브러리를 사용하였고, 지하철역 위경도를 뽑기 위해 googlemaps 라이브러리를 사용했다.

후에 설명을 하겠지만, 이런 식으로 시각화를 도와주는 라이브러리들이다.

시각화를 위해서는 우선적으로 지하철역의 위경도를 알아야 한다.

해당 데이터셋에 위경도 관련 정보를 없기 때문에 위경도가 있는 데이터셋을 찾아보려고 했으나, 마땅한 데이터가 없어서 포기하고 googlemaps 라이브러리를 이용해 위경도를 추가하였다.

※ 관련 내용은 밑 블로그 게시글을 참고

https://eunjin3786.tistory.com/304

# data read address_station = pd.read_csv(‘서울시 지하철 호선별 역별 시간대별 승하차 인원 정보.csv’,encoding=’EUC-KR’) # 호선명이랑 지하철 역 정보만 추출 address_station=address_station.loc[address_station[‘사용월’]==202105,:] address_station=address_station[[‘호선명’,’지하철역’]]

서울 지하철역이 새로 생기는 것도 있고, 없어지는 것도 있기 때문에 제일 최근 값인 21년 5월에 승·하차 데이터가 발생한 지하철역을 가지고 왔다.

호선명은 역 이름이 같은 경우 구분하기 위해서 가져왔다. (양평 – 중앙선, 5호선)

# 정확한 위도와 경도를 얻기위해 역 추가 for i in address_station.index: station=”.join(list(address_station.loc[i,[‘지하철역’]])) if station[-1] != ‘역’: address_station.loc[i,[‘지하철역’]] = station+’역’

구글맵에서 위경도 값을 가져오기 때문에 검색을 위해서 정확한 지하철역 이름으로 했다.

my_key = “******************************************” maps = googlemaps.Client(key=my_key) lat = [] #위도 lng = [] #경도 # 위치를 찾을 장소나 주소를 넣어준다. places = list(address_station[‘지하철역’]) i=0 for place in places: i = i + 1 try: geo_location = maps.geocode(place)[0].get(‘geometry’) lat.append(geo_location[‘location’][‘lat’]) lng.append(geo_location[‘location’][‘lng’]) except: lat.append(”) lng.append(”) print(“%d번 인덱스 위치를 찾는데 실패했습니다.”%(i)) # 데이터프레임만들어 출력하기 df = pd.DataFrame({‘위도’:lat, ‘경도’:lng}, index=places) print(df)

위 코드 결과

208번 인덱스를 제외하고 나머지의 위·경도는 잘 찾은 모습이다.

address_station[‘위도’]=lat address_station[‘경도’]=lng # 동일한 역 처리 address_station.loc[(address_station[‘지하철역’]==’양평역’)&(address_station[‘호선명’]==’5호선’),[‘위도’]]= 37.526226 address_station.loc[(address_station[‘지하철역’]==’양평역’)&(address_station[‘호선명’]==’5호선’),[‘경도’]]= 126.8844202 address_station.loc[(address_station[‘지하철역’]==’양평역’)&(address_station[‘호선명’]==’중앙선’),[‘위도’]]= 37.4927357 address_station.loc[(address_station[‘지하철역’]==’양평역’)&(address_station[‘호선명’]==’중앙선’),[‘경도’]]= 127.4896358 # 위도 경도 못찾는 역 삽입 address_station.loc[(address_station[‘지하철역’]==’증산(명지대앞)역’),[‘위도’]]= 37.5819884 address_station.loc[(address_station[‘지하철역’]==’증산(명지대앞)역’),[‘경도’]]= 126.9101305

이름이 동일한 역의 위·경도를 수정하고 208번 인덱스(‘증산(명지대앞)역’) 위·경도를 추가했다.

# 서울시 중심부의 위도, 경도 입니다. center = [37.541, 126.986] # 맵이 center 에 위치하고, zoom 레벨은 11로 시작하는 맵 m을 만듭니다. m = folium.Map(location=center, zoom_start=10) # 컬러 딕셔너리 (6호선 색깔이 없어서 검정으로 대체) c_dic = {‘1호선’:’darkblue’,’2호선’:’green’,’3호선’:’orange’,’4호선’:’lightblue’,’5호선’:’darkpurple’,’6호선’:’black’,’7호선’:’darkgreen’,’8호선’:’pink’,’9호선’:’beige’,’중앙선’:’blue’, ‘9호선2~3단계’:’beige’,’경강선’:’cadetblue’,’경부선’:’cadetblue’,’경원선’:’cadetblue’,’경의선’:’cadetblue’,’경인선’:’cadetblue’,’경춘선’:’blue’,’공항철도 1호선’:’cadetblue’,’과천선’:’cadetblue’,’분당선’:’lightred’ ,’수인선’:’lightred’,’안산선’:’red’,’우이신설선’:’cadetblue’,’일산선’:’red’,’장항선’:’cadetblue’} # Choropleth 레이어를 만들고, 맵 m에 추가합니다. for i in address_station.index: folium.Marker( location = list(address_station.loc[i,[‘위도’, ‘경도’]]), popup = address_station.loc[i, ‘지하철역’], icon=folium.Icon(color=c_dic[address_station.loc[i, ‘호선명’]],icon=’star’) ).add_to(m) # 맵 m을 저장 m.save(‘map.html’)

folium 라이브러리를 이용해서 지하철역마다 위·경도가 제대로 들어갔는지 확인했다.

호선 색깔을 최대한 현실 반영해서 만들었다.

지하철역위치.html 0.61MB

결괏값은 이런 식으로 나오고 확대·축소도 가능하다.

서울 지하철이 얼마나 많은지 한눈에 확인이 가능하다.

앞으로 위·경도 정보는 시각화할 때마다 사용하기 때문에 저장

# csv 저장 address_station.to_csv(“서울교통공사_역주소_위경도.csv”,index=False)

데이터 전처리 2 – 날짜 지정

해당 데이터는 2015.01부터 2021.05까지의 승하차 인원수가 있다.

그래서 코로나 상황이랑 그전에 있었던 상황이 많이 다르기 때문에,

코로나가 급격히 유행이 되면서 사회적 거리두기가 2단계로 격상된 2020년 8월부터 2021년 5월까지의 데이터만 가지고 왔다.

# 2020.08 그 전 데이터는 제외 for i in station_people.index: if int(station_people.loc[i,[‘사용월’]])==202007: break station_people = station_people.loc[:6041,:] station_people.shape # csv 저장 station_people.to_csv(“서울시 지하철 호선별 역별 시간대별 승하차 인원 정보_202008까지.csv”,index=False)

공공데이터라서 null값도 없고, 정형이기 때문에 전처리는 여기까지 했다.

이제 승차인원이 많은 곳은 어디인지, 하차인원이 많은 곳은 어디인지, 시각화를 통해서 분석을 할 예정이다.

다음 포스팅에서 이어짐..

1-1. 파이썬 EDA 탐색적 데이터분석 프로젝트, 마케팅 관점에서 생각하기

파이썬 EDA 데이터분석 팀 프로젝트, 마케팅 관점에서 생각하기 (제주도)

– 첫 프로젝트 글 순서 –

1. 파이썬(python) EDA 데이터분석 주제 정하기

2. 실패한 여기어때 후기 웹스크래핑(web scraping)

3. 데이터 수집 방법 & 데이터 추출, 정제

4. 판다스(pandas) 데이터 처리 / Matplotlib, Json 시각화

5. 정리

3월 중순에 교육을 시작해서 단 몇 주만에 파이썬을 배웠다. 6개월 뒤에 이 글을 다시 보게 되면 참 답답하게 코딩을 했구나라고 생각을 했으면 좋겠다는 심정으로.. 열심히 코딩을 할 생각이다.

* 코딩 부분은 다음 편부터 나옵니다. 일련의 과정이니 참고만 해주세요

EDA 란?

데이터를 수집하고 수집된 데이터를 다양한 각도에서 관찰하고 이해하는 과정으로 보면 된다. 데이터를 분석하기 전에 그래프나 통계적인(matplotlip, seaborn) 방법으로 시각화해, 더욱 직관적으로 데이터를 처리해서 분석한다.

출처 : blog.naver.com/hrd04/221135900560

이렇게 복잡한 과정을 거쳐야할 수도 있지만… 간단하게 보면

데이터 수집 => 시각화 탐색 => 패턴 도출 => 인사이트 발견 순으로 보면 좀 할만하네?라고 생각이 든다.

주제 선정

모르면 일단 친구한테 물어보는게 마음 편하다. 생각보다 간단한 주제를 해서 별거 아닐거라고 생각했는데 큰 오산…

[마케팅적인 관점으로 접근]

1. 검색수, 관심, 날씨 등의 키워드 분석으로 6개월 후에 팔릴 제품 예상

– 날씨는 기상청 공공데이터, 검색 수는 구글 트렌드, 네이버 datalab으로 어느 정도 데이터를 뽑을 수 있지만, 개인의 관심과 개인이 구매했던 제품들을 보려면 개인 정보가 필요한데 데이터를 구하기 힘들 것으로 판단해서 포기

2. 드라마에 나오는 제품(협찬)이 실제 검색량과 구매에 얼마나 영향을 미치는지

– 커뮤니티에 홍보글들이 올라와서, 조회수 당 실질적으로 구매에 얼마나 많은 영향을 미칠까.. 인플루언서 마케팅의 효율이 얼마나 될지를 객관적인 데이터 자료로 생각을 하려고 했지만, 이것 또한 구매까지 파악이 안 돼서 pass

3. 네이버 view 상위 검색 분석

– 네이버에도 알고리즘이 있다고 하지만 어느정도 상관관계가 있을 수 있으니 for 구문으로 지역별 + 맛집 돌려서 상위 5~10개의 글에서 키워드, 그림 개수, 영상 길이, 블로그 전체 글 수 등을 웹 스크래핑으로 통계를 내서 진행하려고 했으나… 말로는 쉽지 실제 하기는 어려웠다.

[팀 회의]

– 지역별, 성별, 연령 등으로 정리 할 수 있는 코로나 감염자 현황

– 서울 지하철 역 별로 승/하차 인원 및 현재 열차의 위치

– 서귀포시 와 제주시로 나누어 토지 비교 / 상업용 비교

– 연도별 토지값 변동, 각 동별로 차이가 있는가

– 동일 생활권내 각동별로 같은가

[EDA 과정]

간단한 주제 밖에 나오지 않아서 ‘ 제주도 예비 창업자를 위한 업종 서비스 추천 ‘이라는 EDA 팀 프로젝트 주제를 정했다 => 데이터를 찾아보니 너무 주제가 광범위해서, 숙박업으로 좁혔다(숙박업 서비스 개선을 위한 방안) => 그래도 데이터가 많은 것 같아서 에어비앤비, 야놀자, 여기어때 등의 숙박업체 중 탑 2 (야놀자, 여기어때 점유율이 1, 2위라는 걸 처음 알았음)에서도 제주시, 게스트하우스로 줄여나갔다.

* 머릿속 생각은 숙박업체 등에서 좋은 평점, 또는 많이 방문하는 업체들의 리스트를 뽑는다. 어떤 점에서 방문을 하는지 주위 상권 분석을 한다. 추가로 있으면 좋을 서비스나 경쟁력 갖추기 위한 것들을 제시한다. 제주도뿐만 아니라 타 여행도시랑 비교해본다.

오만했다. 처음 프로젝트면 욕심을 버리자

다음 편은 후기를 웹 스크래핑으로 뽑아오기

키워드에 대한 정보 파이썬 데이터 분석 프로젝트

다음은 Bing에서 파이썬 데이터 분석 프로젝트 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [프로젝트발표영상] 배달 매출 예측 분석

  • 동영상
  • 공유
  • 카메라폰
  • 동영상폰
  • 무료
  • 올리기
[프로젝트발표영상] #배달 #매출 #예측 #분석


YouTube에서 파이썬 데이터 분석 프로젝트 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [프로젝트발표영상] 배달 매출 예측 분석 | 파이썬 데이터 분석 프로젝트, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  5 월 꽃 축제 | 5월에 가기 좋은 국내 꽃축제 9 168 개의 베스트 답변

Leave a Comment