출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리] '분류 전체보기' 카테고리의 글 목록 (14 Page) :: 하나둘셋넷
728x90

xml.etree.ElementTree

import xml.etree.ElementTree as et

 

bs4, Beautiful Soup Parsing

import bs4

 

pprint

import pprint

 

728x90
728x90

목적

- 실시간 수질 정보 조회 및 생활 용수와 공업 용수의 상태 파악

- 민간 및 기업에 모두 유용한 데이터를 제공하는 것

 

활용 데이터

한국수자원공사_실시간 수도정보 수질(시간) 조회 서비스(GW)

 

 

사용 라이브러리

from datetime import datetime
from datetime import timedelta
import pandas as pd
import requests
import pprint
from os import name
import pandas as pd
import bs4

 

인증키 확인

서비스 URL

http://apis.data.go.kr/B500001/rwis/waterQuality/list 

 

요청 메시지 명세

항목명(영문) 항목명(국문) 항목크기 항목구분 샘플데이터 항목설명
stDt 조회시작일자 10 1 2015-11-18 조회시작일자
stTm 조회시작시간 2 1 00 조회시작시간
edDt 조회종료일자 10 1 2015-11-18 조회종료일자
edTm 조회종료시간 2 1 24 조회종료시간
fcltyMngNo 시설관리번호 10 0 4824012333 시설관리번호
sujCode 사업장코드 3 0 333 사업장코드
liIndDiv 생활공업구분 1 0 1 생활:1, 공업:2
numOfRows 줄수 10 0 10 줄수
pageNo 페이지번호 10 0 1 페이지번호

 

※ 항목구분 : 필수(1), 옵션(0), 1건 이상 복수건(1..n), 0건 또는 복수건(0..n)

오퍼레이션 목록

1) 1시간 수질정보 조회 waterQualityList

2) 정수장 코드 조회 fcltyList

3) 공급지역 정수장 코드 조회 supplyLgldCodeList

 

서비스와 URL 조합

http://apis.data.go.kr/B500001/rwis/waterQuality/list/waterQualityList

http://apis.data.go.kr/B500001/rwis/waterQuality/list/fcltyList

http://apis.data.go.kr/B500001/rwis/waterQuality/list/supplyLgldCodeList

 

파이썬 샘플 코드

 

import requests

url = 'http://apis.data.go.kr/B500001/rwis/waterQuality/list'
params ={'serviceKey' : '서비스키', 'stDt' : '2015-11-18', 'stTm' : '00', 'edDt' : '2015-11-18', 'edTm' : '24', 'fcltyMngNo' : '4824012333', 'sujCode' : '333', 'liIndDiv' : '1', 'numOfRows' : '10', 'pageNo' : '1' }

response = requests.get(url, params=params)
print(response.content)

 

시간 결정

from datetime import datetime
from datetime import timedelta
print(datetime.today())
print(datetime.today().strftime("%Y-%m-%d %H:%M:%S"))
print(datetime.today().strftime("%Y-%m-%d"))

five_years_ago = datetime.today() - timedelta(days = 5*365)
five_years_ago.strftime("%Y-%m-%d")

 

url, params 설정

import pandas as pd
import requests
import pprint

decoding_key = '디코딩_key'

url = 'http://apis.data.go.kr/B500001/rwis/waterQuality/list'
# params ={'serviceKey' : '서비스키', 
#          'stDt' : '2015-11-18', 
#          'stTm' : '00', 
#          'edDt' : '2015-11-18', 
#          'edTm' : '24', 
#          'fcltyMngNo' : '4824012333', 
#          'sujCode' : '333', 
#          'liIndDiv' : '1', 
#          'numOfRows' : '10', 
#          'pageNo' : '1' }

params ={'serviceKey' : decoding_key, 
         'stDt' : five_years_ago.strftime("%Y-%m-%d"), # 조회시작일자
         'stTm' : '00',  # 조회시작시간
         'edDt' : datetime.today().strftime("%Y-%m-%d"), # 조회종료일자
         'edTm' : '24', # 조회종료시간
         'fcltyMngNo' : '4824012333' # 시설관리번호
         # 'sujCode' : '333'  # 사업장코드
         # 'liIndDiv' : '1'  # 생활공업구분
         # 'numOfRows' : '10'  # 줄수
         # 'pageNo' : '1'  # 페이지번호
        }
response = requests.get(url, params=params)

# xml 내용
content = response.text
print('content',content)

# 깔끔한 출력 위한 코드
pp = pprint.PrettyPrinter(indent=4)
print('pp', pp)

### xml을 DataFrame으로 변환하기 ###
from os import name
import pandas as pd
import bs4

#bs4 사용하여 item 태그 분리
xml_obj = bs4.BeautifulSoup(content,'lxml-xml')
print('xml_obj', xml_obj)
rows = xml_obj.findAll('item')
print(rows)

# 각 행의 컬럼, 이름, 값을 가지는 리스트 만들기
row_list = [] # 행값
name_list = [] # 열이름값
value_list = [] #데이터값

# xml 안의 데이터 수집
for i in range(0, len(rows)):
    columns = rows[i].find_all()
    #첫째 행 데이터 수집
    for j in range(0,len(columns)):
        if i ==0:
            # 컬럼 이름 값 저장
            name_list.append(columns[j].name)
        # 컬럼의 각 데이터 값 저장
        value_list.append(columns[j].text)
    # 각 행의 value값 전체 저장
    row_list.append(value_list)
    # 데이터 리스트 값 초기화
    value_list=[]
    
#xml값 DataFrame으로 만들기
water_df = pd.DataFrame(row_list, columns=name_list)
print(water_df.head(19))

#xml값 DataFrame으로 만들기
#Assertion Error가 난 경우
water_df = pd.DataFrame(water_df)
# 이후에 컬럼을 설정해 주세요.
water_df

 

제공 기관과 데이터 설명이 일치하지 않음

- 필수 parameter 정보 불일치

- 예제와 다른 경우의 데이터를 추출하기 어렵다.

 

 

결론

공공데이터 포털에서는 활용 많은 순으로 데이터를 활용할 것

728x90
728x90

KT 에이블스쿨 5기 모집

 

https://aivle.kt.co.kr/home/main/indexMain

 

KT 에이블스쿨

KT가 직접 설계, 교육, 코칭, 채용

aivle.kt.co.kr

 

모집일정

 

 

지원자격

 

 

우대사항에 있는 AICE 자격증이란?

AICE 자격증은 KT 개발하고 한국 경제와 함께 주관하는 인공지능 능력시험입니다.

현재, AICE 자격증 없더라도 AIVLE School에서 교육을 받으신다면, ASSOCIATE 자격 응시 기회를 주고, 불합격 시에는 1회 재시험 기회 또한 부여하고 있습니다.

https://aice.study/info/aice

 

AICE

KT가 개발하여 한국경제신문과 함께 주관하는 인공지능 능력시험입니다.

aice.study

 

 

혜택

 

ㆍ KDT 교육비 최대 31.6만원 지급

: 결석 없이 교육에 성실히 참여하실 경우 최대 31.6만원의 지원금을 받으며 공부하실 수 있습니다.

 교육비가 무료인데 추가로 지원금도 받을 수 있으니 좋은 기회라고 생각했어요.

 

 

현재까지 후기

 

ㆍ AIVLE School에 참여하면서 좋았던 점 중에서 하나는 스터디원들을 구하기 쉽다는 것입니다.

 

 

저는 개인적으로 "백준 문제풀이", "SQL 프로그래머스 문제풀이" 스터디장을 맡아서 매주 스터디를 진행하고 있습니다.

에이블스쿨이라는 기회가 없었다면, 이렇게 좋은 스터디원들을 만나기 힘들었을 거라고 생각하고 있어요.

 

ㆍ 또한, 공모전에 나가고 싶을 때도 사람들을 모집하기 쉽다는 점 또한 있습니다.

 

 

위 사진은 공모전 회의를 할 때 모습입니다. Teams를 통해 자료들을 간편하게 주고 받으니 공모전을 원활하게 할 수 있었어요. 에이블스쿨에서 처음으로 진행했던 공모전이라 기억에 많이 남네요. 이때, 에이블스쿨 수업 중 "데이터 다루기", "데이터 다듬기"에서 배운 내용을 많이 활용하였고 실력을 키울 수 있는 좋은 기회였습니다. 

 

친구 추천 이벤트

 

 

지금 Aivle School 5기 친구 추천 이벤트에 참여하시면 커피 쿠폰도 나눠드리고 있으니 참고해주세요!!

728x90
728x90

DX 의 중요성

 나이키와 포드를 예시로 성공적인 DX를 이루어내는 데에 중요한 요인을 배울 수 있었다.
 나이키는 고객 중심으로 서비스를 기획하며 코로나 시기에도 높은 실적을 기록했다.
 포드는 기술 성장을 위해 많은 돈을 들여 다양한 스타트업을 인수하고 "포드 스마트 모빌리티"를 설립했다.
 하지만, 각 사업부가 독립적으로 일이 진행되면서 기술과 업무가 통합되지 않았고다. 이에 따라 포드 스마트 모빌리티는 기계의 변속기 이상, 안정성 등의 문제가 반복되는 모습을 보여주었다.
 

클라우드 이론 및 AWS 경험

 
 수업 때 클라우드 이론을 배운 뒤, AWS를 통해 실습을 진행하며 VPC, Subnet, 인터넷 게이트웨이, 보안그룹 등을 다루어 보니 클라우드 개념에 대한 이해도를 높이는 데에 도움이 되었다.
 수업에서 받은 계정은 금요일 수업 종료와 동시에 삭제되어 아쉬움이 있었고, AWS 홈페이지를 뒤져보며 무료로 연습을 해볼 방법이 있는지 알아보고 있다.
 

 

돌아오는 주에는 6차 미니 프로젝트 진행

 돌아오는 주 3일 동안은 미니 프로젝트를 진행하게되었다.
 현재까지 미프를 진행해온 결과, 여러 번 같은 조가 된 에이블러들을 볼 수 있었다.
 현재 우리 조 상황은 조원들이 온다면 수요일에 많이 올 것으로 예상되고, 나도 상황을 보면서 대면 교육장을 갈지 결정하려고 한다.

 

SQL 스터디원 모집

 
회사 채용 공고들을 보면서 느낀 결과, SQL은 많은 직무에서 우대 받을 수 있는 역량임을 볼 수 있었고, DX 과정에서는 SQL 수업을 따로 진행하지 않기 때문에 이를 꾸준히 공부하고자 직접 스터디원들을 모집했다.
 

 
 하고 싶은 일이 생겼을 때는 망설이지 않는 스타일이기에 바로 KT 에이블러들 단체 카톡방에 말을 했고, DX 에이블러 스터티그룹원 모집 게시판에도 글을 올렸다.
 이 부분에 비슷한 고민이 있는 사람들이 있어서였는지 생각보다 빠르게 스터디원들을 구하고 마감할 수 있었다.
 

 

스터디에서 활용할 프로그래머스 SQL 고득점 Kit

 

728x90
728x90

Python] 가상환경 만들기, jupyter 설치, kernel 연결

파이썬 버전도 지정하여 가상환경을 생성하고 싶으면 두 번째 줄에 있는 코드를 사용하면 된다.

conda create -n name
conda create -n name_38 python=3.8

 

 

가상환경 목록 확인하기

conda env list

 

가상환경 활성화, 비활성화, 삭제

conda activate name_38
conda deactivate
conda env remove -n name_38

 

 

가상환경에 jupyter notebook 설치, kernel 연결

conda activate name_38
pip install jupyter notebook
python -m ipykernel install --user --name name_38 --display-name "name_38"

 

 

가상환경에 jupyter notebook 설치, kernel 연결

conda list

 

가상환경에 pip show 라이브러리

pip show tensorflow

 

conda search 라이브러리

conda search 라이브러리

 

 

라이브러리 삭제

pip uninstall 라이브러리
728x90

'Python - 기초 설정' 카테고리의 다른 글

Python] 버전 변경  (0) 2023.11.14
728x90

버전 변경

python -V
conda search python
conda install python=x.x.x

 

 

728x90
728x90

기본 차트 그리기 plt.plot(1차원 값)

 

 

# 차트 그리기
plt.plot(data['Temp'])

# 화면에 보여주기
plt.show()

 

x축, y축 지정하고 그래프 그리기

 

import pandas as pd
import matplotlib.pyplot as plt
plt.rc('font', family = 'Malgun Gothic')
plt.rcParams['font.family']

plt.plot(df['timestamp'], df['price(원/kg)])
plt.xticks(rotation=70)

plt.ylabel('price(원/kg)')
plt.show()

 

# 방법 2
plt.plot('Date', 'Temp', data = data)
plt.show()

 

 

시각화 axhline

train.groupby('hour').mean()['hour_bef_temperature'].plot()
plt.axhline(train.groupby('hour').mean()['hour_bef_temperature'].mean())

 

차트 꾸미기

plt.plot(data['Date'], data['Ozone'])

plt.xticks(rotation = 30)       # x축 값 꾸미기 : 방향을 30도 틀어서
plt.xlabel('Date')              # x축 이름 지정
plt.ylabel('Ozone')             # y축 이름 지정
plt.title('Daily Airquality')   # 타이틀

plt.show()

 

 

라인스타일 조정

 

plt.plot(data['Date'], data['Ozone']
         ,color='green'                # 칼러
         , linestyle='dotted'          # 라인스타일
         , marker='o')                 # 값 마커(모양)

plt.xlabel('Date') 
plt.ylabel('Ozone')
plt.title('Daily Airquality')
plt.xticks(rotation=45)

plt.show()

 

 

그래프 겹쳐서 그리기

 

# 첫번째 그래프
plt.plot(data['Date'], data['Ozone'], color='green', linestyle='dotted', marker='o')
# 두번째 그래프
plt.plot(data['Date'], data['Temp'], color='r', linestyle='-', marker='s')

plt.xlabel('Date') 
plt.ylabel('Ozone')
plt.title('Daily Airquality')
plt.xticks(rotation=45)

# 위 그래프와 설정 한꺼번에 보여주기
plt.show()

 

 

범례, 그리드 추가

 

plt.plot(data['Date'], data['Ozone'], label = 'Ozone')  # label = : 범례추가를 위한 레이블값
plt.plot(data['Date'], data['Temp'], label = 'Temp')

plt.legend(loc = 'upper right')    # 레이블 표시하기. loc = : 위치
plt.grid()
plt.xticks(rotation=45)
plt.show()

 

 

여러 개 차트 그리기, 방식 2

 

data.plot(x = 'Date', y = ['Temp','Ozone']
          , title = 'Daily Airquality')
plt.grid()
plt.show()

 

 

축 범위 조정

 

plt.plot(data['Ozone'])

# plt.ylim(0, 100)
# plt.xlim(0, 10)
plt.grid()
plt.show()

 

 

그래프 수직선, 수평선 추가

 

plt.plot(data['Ozone'])

plt.axhline(40, color = 'grey', linestyle = '--')
plt.axvline(10, color = 'red', linestyle = '--')
plt.show()

 

 

 

그래프에 텍스트 추가

 

plt.plot(data['Ozone'])

plt.axhline(40, color = 'grey', linestyle = '--')
plt.axvline(10, color = 'red', linestyle = '--')

plt.text(5, 41, '40')
plt.text(10.1, 20, '10')

plt.show()

 

 

여러 그래프 나눠서 그리기

 

plt.figure(figsize = (12,8))
plt.subplot(3,1,1)
plt.plot('Date', 'Temp', data = data)
plt.grid()

plt.subplot(3,1,2)
plt.plot('Date', 'Wind', data = data)

plt.subplot(3,1,3)
plt.plot('Date', 'Ozone', data = data)
plt.grid()
plt.ylabel('Ozone')

plt.tight_layout() # 그래프간 간격을 적절히 맞추기
plt.show()

 

 

 

 

하나의 데이터프레임에서 여러 개의 차트 그리기

 

# 남녀 인구 변화
plt.plot(pop_test[['male','female']])
plt.show()

 

728x90
728x90

한글 입력, 경고문구 무시, 경로, 목록

import matplotlib.pyplot as plt

plt.rc('font', family = 'Malgun Gothic')
plt.rcParams['font.family']

 

import warnings
warnings.filterwarnings(action='ignore')

 

import os
os.getcwd()
os.listdir()

 

728x90
728x90

house price 예측하기

 

라이브러리 불러오기

import pandas as pd

 

데이터 읽기

df = pd.read_csv('kc_houseprice.csv')
display(df.columns)
df.head()

 

컬럼 이름과 데이터 정보를 확인하였다.

 

df.info()

현재 데이터에서 date는 object 타입이다.

 

# 현재 date의 데이터만 object 타입임을 확인할 수 있다.

 

데이터 전처리

# 위에서 date 열을 보면 20141209T~~~~ 형식으로 되어있어서 활용하기 어렵다.

# 따라서 분석에 유효한 앞에 4글자만 가져오도록 한다.

# 이후에는 float 타입으로 변환

버릴 데이터를 찾아보자

df['date'] = df.loc[:,'date'].str[:4]
df['date'] = df.loc['date'].astype(float)
display(df.info())
display(df)

데이터에서 object 형이 없음을 확인했다.
문제 조건에 따라서 sqft_living15, sqft_lot15 열을 삭제하였고 확인

 

타겟 데이터 분리

target = 'price'
x = df.drop(['sqft_living15', 'sqft_lot15' ,target], axis = 1)
y = df[target]

display(x)
display(x.columns)
display(y)

 

훈련용 데이터 분리하기

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state = 2023)

 

데이터 스케일링

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_val = scaler.transform(x_val)

 

모델 설계

nfeatures = x_train.shape[1]

from keras.backend import clear_session
clear_session()

from keras.layers import Dense, Dropout
from keras.models import Sequential

model_DNN = Sequential()
model_DNN.add(Dense(18, input_shape = (nfeatures, ), activation = 'relu') )
model_DNN.add(Dropout(0.3) )
model_DNN.add(Dense(4, activation = 'relu'))
model_DNN.add(Dense(1) )

model_DNN.summary()

 

Param # 

출력 노드 * ( 입력노드 + 1 ) = Param

 

18 * ( 입력차원 + 1 ) = 18 * 19 = 342

4 * ( 입력차원 + 1 ) = 4 * 19 = 76

1 * ( 입력차원 + 1 ) = 1 * 5 = 5

 

따라서, 342 + 76 + 5 = 423

Total params : 423과 일치한다.

 

모델 컴파일 및 학습

from keras.optimizers import Adam

model_DNN.compile(optimizer = Adam(learning_rate = 0.01), loss = 'mse')
hist = model_DNN.fit(x_train, y_train, epochs = 50, validation_split = 0.2).history

 

 

검증

from sklearn.metrics import *

pred = model_DNN.predict(x_val)

print(mean_squared_error(y_val, pred, squared = False) ) # RMSE
print(mean_absolute_error(y_val, pred)

 

 

 

728x90

+ Recent posts