본문 바로가기
ML 인공지능

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

by 딧피 2021. 11. 11.
728x90
반응형

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


Alice 에서는,

기초학습을 플랫폼 내에서 자체 튜토리얼을 제공하는데,
이는 내가 코포자였다가 해외 사이트 에서 처음으로 코딩을 이해하기 시작한 code academy튜토리얼과 유사했다.

근데,  이 공공데이터 활용부터는 jupyter notebook을 사용하는 구조로 바꾼다. 물론 플랫폼 안에 넣어서.

뭐랄까. 폴더 안의 폴더 같은 이중 중첩 같은 느낌으로 말이다. 그래서 조금 놀랐다.

** 이건 정말.. 이포스팅과 1 도 관련이 없지만!

교육 플랫폼 얘기가 나와서 찾아보다가 엘사를 통해 배우는 코딩교육! 을 찾았다.
비영리단체 code org 에서 스크래치 형태로 제공하는 엘사 프로젝트 : ) 추운 겨울에 반가운 컨텐츠다!

https://studio.code.org/s/frozen/lessons/1/levels/1



[p1]_코로나_데이터_분석_프로젝트


1. 첫번째 과제 : 코로나 데이터 다루기



프로젝트 목차

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

    2. 데이터 정제: 비어 있는 데이터 또는 쓸모 없는 데이터를 삭제
      2.1. 비어있는 column 지우기

    3. 데이터 시각화: 각 변수 별로 추가적인 정제 또는 feature engineering 과정을 거치고 시각화를 통하여 데이터의 특성 파악
      3.1. 확진일 데이터 전처리하기
      3.2. 월별 확진자 수 출력
      3.3. 8월 일별 확진자 수 출력
      3.4. 지역별 확진자 수 출력
      3.5. 8월달 지역별 확진자 수 출력
      3.6. 월별 관악구 확진자 수 출력
      3.7. 서울 지역에서 확진자를 지도에 출력


      목표를 가져온 이유는 데이터 분석의 순서를 머리속에 박제하기 위해서.

       데이터를  1. 읽어오고 > 2. 정제한다(삭제, 특이점처리) > 3. 시각화한다.


데이터 출처

https://www.data.go.kr/tcs/dss/selectFileDataDetailView.do?publicDataPk=15063273



import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt
import seaborn as sns #seaborn 또한 단순 그래프 그리는 라이브러리의 일종.

corona_all=pd.read_csv("./data/서울시 코로나19 확진자 현황.csv")

# 상위 5개 데이터를 출력 후 요약
corona_all.head()

corona_all.info()

#데이터 정제하기
# drop 함수로 데이터를 삭제
corona_del_col = corona_all.drop(columns = ['수정일','상태','등록일'])

#데이터 전처리 
corona_del_col['확진일']

#글자로된 month, day를 숫자 데이터로 column에 int64로 저장하기
month = []  #임시 저장소로 쓸 list 선언
day = []

# split 함수를 사용하여 월/일 나누기
for data in corona_del_col['확진일']:
    month.append(data.split('.')[0])
    day.append(data.split('.')[1])

corona_del_col['month'] = month #데이터 프레임에 column 생성해서 임시list의 데이터를 가져오기.
corona_del_col['day'] = day

corona_del_col['month'].astype('int64')
corona_del_col['day'].astype('int64')

# 그래프에서 x축의 순서정하기 위해, order라는 list 생성.
order = []
for i in range(1,11): 
    order.append(str(i)) #1~10까지 list에 string으로 들어감.

order #출력

plt.figure(figsize=(12,6)) #그래프 전체크기. 가로로 긴 형태가 될듯.

# seaborn의 countplot 함수를 사용하여 출력
sns.set(style="darkgrid") #darkgrid라는 취합된 스타일 가져와 쓰기.
ax = sns.countplot(x="month", data=corona_del_col, palette="Set2", order = order2)

#8월 평균 일별 확진자 수 
quiz_1 = float(corona_del_col[corona_del_col['month'] == '8']['day'].count().mean())


#지역별 데이터 확인
corona_del_col['지역']

#한글 폰트 설정
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")


#지역 이상치 데이터 처리
# replace 함수 - 변경역할
# 처리된 데이터는 새로운 Dataframe으로 저장
# 종랑구를 중랑구로, 한국을 기타로
corona_out_region = corona_del_col.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")

#8월달 지역별 확진자 수 
corona_out_region[corona_del_col['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")


#월별 관악구 확진자 수 
corona_out_region['month'][corona_out_region['지역'] == '관악구'] #series형태,인덱스[세로][가로]값선택

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)


#------------------------------------------------------------------------------------

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

import folium #지도 출력 라이브러리

# Map 함수 - 지도출력하기
map_osm = folium.Map(location=[37.529622, 126.984307], zoom_start=11)

map_osm

#지도에 지역정보를 대입하기 위한 좌표정보 불러오기
CRS=pd.read_csv("./data/서울시 행정구역 시군구 정보 (좌표계_ WGS1984).csv")

#서울의 중심지인 중구 데이터
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)


#서울 지역 정보를 set함수를 사용하여 25개 고유의 지역 추출
for region in set(corona_seoul['지역']):

    # 해당 지역의 데이터 개수를 변수에 저장
    count = len(corona_seoul[corona_seoul['지역'] == region])
    # 해당 지역의 데이터를 CRS에서 뽑아냅니다.
    CRS_region = CRS[CRS['시군구명_한글'] == region]

    # CircleMarker로 원형마커를 생성
    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


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

# 6월에 확진자가 가장 많이 나온 지역 저장
# 문자형 저장
quiz_2 = str(corona_out_region[corona_del_col['month'] == '6']['지역'].value_counts())

 

 

[ 데이터 분석 프로세스]


  - 데이터 분석 : 데이터를 활용하여 원하는 정보를 얻어내기 위한 일련의 과정
  - 데이터 분석 과정 :

문제 정의 → 가설 설정 → 데이터 준비 → 데이터 분석 → 결과 정리   

 

    ① 문제 정의 - 현재 풀고자 하는 문제 정의


    ② 가설 설정 - 데이터 분석의 토대인 가설 설정 (문제와의 관련성 고려)


    ③ 데이터 준비 - 문제에 대한 정보를 담고 있는 데이터셋을 선정 (데이터 수집 및 전처리 과정)

        → 데이터 정제 (Data Cleaning) : 빠진 부분, 중복, 이상값 제거, 형태 변환 등의 초기 데이터(Raw Data)전처리 시행


    ④ 데이터 분석 - 성공여부는 얼마나 데이터를 이해하고 있느냐에 달림.
        → 탐색적 데이터 분석(EDA) : Exploratory Data Analysis. 데이터의 특징을 찾고, 숨겨진 패턴을 발견하는 과정


    ⑤ 결과 정리- 분석 과정에서 알아낸 인사이트(Insight) 정리


- data[ ][ ] 란?
2차원 리스트에서 list [세로][가로]의 인덱스 지정.

>  2차원 리스트 만들기, 접근하기 / 튜플과 복합형태인 경우

https://dojang.io/mod/page/view.php?id=2291 

 

파이썬 코딩 도장: 23.1 2차원 리스트를 만들고 요소에 접근하기

Unit 23. 2차원 리스트 사용하기 리스트를 사용할 때 한 줄로 늘어선 1차원 리스트를 사용했는데 이번에는 평면 구조의 2차원 리스트를 사용해보겠습니다. 2차원 리스트는 다음과 같이 가로×세로

dojang.io

 

728x90
반응형

댓글