데이터 출처:

https://www.data.go.kr/data/15013192/standard.do

 

전국금연구역표준데이터

금연구역 정보(금연구역 지역, 면적, 위반과태료 등)를 제공합니다. 공공데이터 개방 표준데이터 속성정보(표현형식/단위 등)는 [공공데이터 개방 표준]고시를 참고하시기 바랍니다.(정보공유>

www.data.go.kr

 

 

위 링크의 데이터 목록처럼 데이터 컬럼 형식은 같지만 방대한 데이터의 양 때문에 데이터를 끊어서 제공하는 경우가 있다.

일일이 데이터를 읽고 concat하기에는 시간이 오래 걸리기에 for문과 os, pandas 모듈을 사용하여 concat하는 방법이다.

 

1. os 모듈로 작업위치 확인 및 변경

 

import os
import pandas as pd

os.getcwd()
'C:\\Users\\user'

os.getcwd()는 현재 작업중인 파이썬 폴더를 알려준다.

 

os.chdir("C:\\Users\\user\\Desktop\\티스토리데이터\\os")
os.getcwd()
'C:\\Users\\user\\Desktop\\티스토리데이터\\os'

os.chdir()를 활용하면 폴더를 옮길 수 있다. 

 

폴더의 경로는 폴더내의 빈공간을 마우스 우클릭 후 속성탭에 들어가면 위치를 확인 가능하다.

 

그리고 주피터 노트북내에서 원하는 셀을 누른뒤에 esc를 누르고 f를 누르면 일괄바꾸기 기능이 작동되는데 \를  \\로 바꿔주면 파이썬에서 인식하는 경로의 형식으로 바꾸는게 손쉽게 가능하다.

print(os.listdir())
['chim_df.xlsx', 'corr.csv', 'tb_hb_ind_egnin_m.csv', 'test.csv', 'test_.csv', 'test_cnt.csv', '경기도_가평군_금연구역_20211012_1634033497993_29131.csv', '경기도_고양시_금연구역_20210920_1634617775511_649377.csv', '경기도_남양주시_금연구역_20210930_1634027480812_2270079.csv', '경기도_포천시_금연구역_20210930_1634790042474_958431.csv', '계산을해보자.csv', '상권분석_final.twbx', '성연령별매출 추출_Extract.csv', '청년상권 클러스터링.ipynb']

os.listdir() 을 활용하면 현재 폴더안에 있는 파일들의 이름을 불러와준다.

 

여기서 우리가 가져와야할 데이터는 

경기도_xxx_금연구역_xxxx.csv 

이런 형식의 데이터만 불러와 concat하고자 한다.

 

print(os.listdir())
csv_list = list(filter(lambda x : x.split('.')[-1] == 'csv', os.listdir()))
print(csv_list)
csv_list2 = list(filter(lambda x : '금연구역'in x, csv_list))
print(csv_list2)
['chim_df.xlsx', 'corr.csv', 'tb_hb_ind_egnin_m.csv', 'test.csv', 'test_.csv', 'test_cnt.csv', '경기도_가평군_금연구역_20211012_1634033497993_29131.csv', '경기도_고양시_금연구역_20210920_1634617775511_649377.csv', '경기도_남양주시_금연구역_20210930_1634027480812_2270079.csv', '경기도_포천시_금연구역_20210930_1634790042474_958431.csv', '계산을해보자.csv', '상권분석_final.twbx', '성연령별매출 추출_Extract.csv', '청년상권 클러스터링.ipynb']
['corr.csv', 'tb_hb_ind_egnin_m.csv', 'test.csv', 'test_.csv', 'test_cnt.csv', '경기도_가평군_금연구역_20211012_1634033497993_29131.csv', '경기도_고양시_금연구역_20210920_1634617775511_649377.csv', '경기도_남양주시_금연구역_20210930_1634027480812_2270079.csv', '경기도_포천시_금연구역_20210930_1634790042474_958431.csv', '계산을해보자.csv', '성연령별매출 추출_Extract.csv']
['경기도_가평군_금연구역_20211012_1634033497993_29131.csv', '경기도_고양시_금연구역_20210920_1634617775511_649377.csv', '경기도_남양주시_금연구역_20210930_1634027480812_2270079.csv', '경기도_포천시_금연구역_20210930_1634790042474_958431.csv']

이렇게 파이썬의 내장함수 filter를 활용하면 리스트 중 조건에 만족하는 리스트만을 생성할 수 있다.

https://gwoolab.tistory.com/13

 

[ python 기초 ] lambda, map, filter

lambda 함수를 한줄에 정의하고 사용만 한다.코드의 간결함 메모리의 절약 람다 함수는 정의와 동시에 사용할 수 있음 lambda 매개변수 : 리턴값 print((lambda x : x**2)(2)) 4 제곱을 해주는 함수를 정의하

gwoolab.tistory.com

 

이렇게 타겟하는 파일만을 확인하고 포문으로 빈데이터 프레임에 하나씩 쌀으면 된다

 

df = pd.DataFrame()

for file in csv_list2:
    tmp_df = pd.read_csv(file, encoding = 'euc-kr')
    print(tmp_df.shape)
    df = pd.concat([df,tmp_df])
    print(df.shape)
(131, 15)
(131, 15)
(2572, 15)
(2703, 15)
(10496, 15)
(13199, 15)
(3393, 15)
(16592, 15)

데이터 들이 df라는 데이터에 차례로 쌓이는 것을 확인할 수 있다.

 

 

 

 

+ Recent posts