본문 바로가기

Lecture ML

머신러닝 강좌 #16] 랜덤 포레스트 - 공공데이터 에어코리아 대기오염정보 API 연결 후 머신러닝 실행하기

반응형

이번에는 공공데이터의 대기오염정보 API를 통해 데이터를 가져오고 이를 통해 머신러닝을 통해 데이터를 분석해 보겠습니다. 

 

공공데이터의 "한국환경공단_에어코리아_대기오염정보"를 통해 API를 연결한 후 데이터를 수집합니다.

url ="http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty"
service_key = "KEYIN SERVICEKEY"

base_date = ["종로구"]

for i in range(len(base_date)):
    break;
    payload = "?serviceKey=" + service_key + "&"+"returnType=xml&numOfRows=100000&pageNo=1&dataTerm=3MONTH&&ver=1.0&stationName=" + base_date[i]
    res = requests.get(url + payload).text
    xmlobj = bs4.BeautifulSoup(res, 'lxml-xml')
    rows = xmlobj.findAll('item')
    print(rows)

    # exit()
    rowList = []
    nameList = []
    columnList = []

    rowsLen = len(rows)
    for i in range(0, rowsLen):
        columns = rows[i].find_all()

        columnsLen = len(columns)
        for j in range(0, columnsLen):
            if i == 0:
                nameList.append(columns[j].name)
            eachColumn = columns[j].text
            columnList.append(eachColumn)
        rowList.append(columnList)
        columnList = []

df = pd.DataFrame(rowList, columns=nameList)
df.to_csv("review_aircondition_joongu.csv", encoding='utf-8-sig')
df.to_csv("review_aircondition_jonro.csv", encoding='utf-8-sig')

 

이후 수집된 데이터의 정보를 머신러닝에서 이용하기 위해 전처리 작업을 수행합니다.  전처리 작업은 많은 부분 차지하기 때문에 이 섹션에서는 제외합니다. 본인이 분석하려는 내용으로 전처리 진행합니다.

 

랜덤포레스트를 실행 후 feature Importance를 이용하여 데이터 중요도를 체크합니다.

df = pd.concat([df_joongu, df_jonro])

df = transform_feature(df)

y_air_df = 설정
X_air_df = 설정

X_train, X_test, y_train, y_test = train_test_split(X_air_df, y_air_df, test_size=0.2, random_state=11)
rf_clf = RandomForestClassifier(n_estimators=100, random_state=0, n_jobs=-1)
pred = rf_clf.fit(X_train, y_train).predict(X_test)
print(accuracy_score(y_test, pred))

ftr_importances_values = rf_clf.feature_importances_
ftr_importances = pd.Series(ftr_importances_values)

col_names = df.drop(columns=['pm10Value']).columns
fi_df = pd.DataFrame(ftr_importances_values, index=col_names, columns=["Importance"])
print(fi_df.sort_values("Importance", ascending=False))

 

반응형