출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리] '분석' 태그의 글 목록 :: 하나둘셋넷
728x90

[메타코드 강의 후기] SQL과 Python 연결하고 데이터분석 실습 - "데이터분석 마무리"

메타코드M (metacodes.co.kr)

 

SQL과 Python 연결하고 데이터분석 실습 - [ 데이터 전처리 / 시각화 ]

 

www.metacodes.co.kr

안녕하세요 메타코드 5기 서포터즈 송주영입니다

저번 강의을 들으며, Python과 SQL 질의문을 둘 다 공부할 수 있어서 유용한 수업이라고 느껴졌습니다

특히 인사이트를 뽑아내는 과정을 알려주셔서 데이터를 바라보는 능력을 키울 수 있었다고 생각했어요

이 강의에서 배운 내용들을 잘 정리해두고 참고하며 새로운 데이터를 마주하게 되었을 때 의미있는 분석을 하고자 합니다

 

"SQL과 Python 연결하고 데이터분석 실습" 수업 리뷰 진행하겠습니다.

 

수량과 금액으로 나누어 제품 판매 분석

제품 판매를 분석함에 있어서는 판매 수량, 판매 금액을 모두 확인할 필요가 있습니다.

좌측은 판매수량에 대한 시각화 정보이고, 우측은 판매 금액에 대한 시각화 정보입니다.

페라리를 보면 판매수량도 많고, 판매 금액 또한 높은 모습을 보입니다.

Lincoln을 확인해보면 판매 수량에서는 높은 비중을 차지하였으나, 판매 금액에서는 높은 비중을 나타내지는 않습니다.

 

지역별 매출 비교

지역에 따라 총 매출액과 평균 매출액의 차이가 어떠한지 시각화하였습니다.

총 매출액에서는 미국이 압도적으로 높은 위치를 차지하였으나, 평균 매출에서는 가장 높은 비중을 차지하지는 않습니다.

그래프를 보면 홍콩은 총 매출이 가장 적은 모습을 보입니다.

따라서, 홍콩에서의 매출을 높이기 위해서는 어떠한 요소들이 필요할 지 알아볼 필요가 있습니다.

 

전략 수립

위의 결과를 살펴보았을 때, 매출이 높은 국가와 매우 낮은 국가를 대상으로 어떤 전략을 취해야 하는 지 나누어 볼 필요가 있습니다.

하나의 국가에 지나치게 의존도가 높다면 그 국가의 상황에 따라 회사의 매출이 좌우될 위험이 존재합니다.

매출이 낮은 국가에게서 매출액을 높일 수 있다면 이러한 위험성을 분산시킬 수 있을 것입니다.

해당 국가의 문화적 특성, 시장 특성들을 고려하여 마케팅 전략을 수립한다면 보다 다양한 국가에게서 높은 매출을 기록할 수 있을 것입니다.

 

제품 카테고리별 분석

제품 카테고리별로 분석을 진행하였습니다.

총 매출과 평균 매출을 비교하였고, 총 매출이 높다고 해서 반드시 평균 매출이 높지는 않음을 확인했습니다.

카테고리에 대해서는 매출이 높은 경우와 낮은 경우로 나누어서 전략을 수립합니다.

매출이 높은 카테고리에 대해서 꾸준히 높은 매출을 얻을 수 있도록 하며, 매출이 낮은 카테고리의 매출을 늘려 보다 위험성을 분산시킬 수 있도록 합니다.

 

제품군의 연도별 매출 분석

제품별 매출을 연도별로 구분하여 분석하였습니다.

이러한 시각화 정보를 통해 매출액의 절대적 수치도 확인할 수 있지만, 이들의 변화가 어떤지 또한 확인할 수 있습니다.

전년대비 큰 상승을 기록하는 제품들도 존재하고, 상대적으로 변동폭이 적은 제품들도 존재합니다.

급격하게 증가한 경우, 급격하게 감소한 경우가 주요 분석 대상이 될 수 있습니다.

 

분석에 따른 전략 수립

연도별 매출 분석 결과의 예시입니다.

매출이 증가하는 제품에 대해서는 추가 마케팅 자원 투입, 생산 확대를 고려할 수 있고 매출이 감소하는 추세를 보인다면 고 시장 조사, 고객 피드백 수집이 필요할 것입니다.

연도별 분석을 진행하며 특정 시기마다 수요가 증가하는 제품이 있다면 이를 분석하여 새로운 시장을 발굴할 수 있도록 합니다.

재고 관리의 최적화를 위해서 또한 제품들의 매출이 증가하는지 감소하는지를 면밀하게 확인해야 합니다.

 

이상으로 "SQL과 Python 연결하고 데이터분석" 강의 마무리하도록 하겠습니다.

짧은 시간 동안 핵심 내용들을 잘 짚어준 강의라 몰입감 있게 수업을 들을 수 있었습니다.

강의 수강생들을 대상으로 강의자료, 코드 파일을 주셔서 실제 프로젝트에 활용해보려 합니다.

 

글 읽어주셔서 감사합니다!!

728x90
728x90

[메타코드 강의 후기] SQL과 Python 연결하고 데이터분석 실습 - "Python과 MySQL 연결, 데이터베이스 생성"

메타코드M (metacodes.co.kr)

 

SQL과 Python 연결하고 데이터분석 실습 - [ 데이터 전처리 / 시각화 ]

 

www.metacodes.co.kr

안녕하세요

메타코드 5기 서포터즈 송주영입니다.

 

저번 주에 통계 기초 올인원 강의를 모두 수강하여 이번에는 "SQL과 Python 연결하고 데이터 분석 실습" 강의를 수강하게 되었습니다.

이 강의는 SQL과 Python을 다룰 수 있는 분들에게 적합한 강의이므로 혹시 이 강의에 관심 있으시면 참고하시면 좋을거 같아요!!

 

강의 리뷰 시작하겠습니다.

 

Mysql.connector

먼저 이 수업을 시작하기에 앞서 Python에서 mysql을 사용할 수 있도록 라이브러리를 설치해야 합니다.

사용할 라이브러리는 Mysql.connector입니다.

"pip install mysql-connector-python" 명령어를 사용하여 라이브러리를 설치할 수 있습니다.

프롬프트 창에서 입력할 수도 있고, 저의 경우에는 VS code에서 설치했습니다.

 

데이터베이스 연결

위에서 라이브러리를 설치했으니 이제 데이터베이스를 연결할 순서입니다.

데이터베이스를 연결하기에 앞서 mysql.connector 를 import 합니다.

기본 코드 구조는 사진에서 확인이 가능합니다.

자신이 사용하던 MySQL의 주소, 이름, 비밀번호를 확인하여 입력하면 됩니다.

 

Python 환경에서의 SQL

Python 환경에서 SQL 질의를 사용하는 방법입니다.

SQL에서와 똑같은 문법을 작성하고 query 변수에 할당했습니다.

Python 환경에서는 데이터프레임을 통해 데이터를 다루었습니다.

데이터베이스의 데이터 또한 유사하게 다룰 것이기 때문에 df 변수에 할당했습니다.

 

데이터베이스 생성

수업에서 사용할 데이터베이스입니다. 주소는 아래와 같습니다.

https://www.mysqltutorial.org/getting-started-with-mysql/mysql-sample-database/

이전에 SQL 수업을 수강하신 분들은 익숙하실 것입니다.

이 수업을 처음으로 선생님을 뵙게 되셨다면 본격적인 수업에 앞서 데이터베이스를 세팅해야 합니다.

 

실행 전 쿼리 체크

Python 환경에서 SQL 질의를 통해 데이터프레임을 생성하기 전에는 항상 SQL 환경에서 쿼리문이 올바르게 동작하는지 확인한 이후에 실행하도록합니다.

Python 환경에서 코드 실행 이후에 확인하는 것보다 SQL 환경에서 점검하는 것이 보다 간편합니다.

쿼리문에서는 세 개의 컬럼을 출력합니다.

count, sum 집계 함수를 사용하여 customerNumber에 따른 원하는 집계 결과를 출력하였습니다.

 

VIP 고객 데이터 분석

고객 데이터를 분석함에 있어서는, 전체 데이터를 통째로 보는 것도 필요하지만 구간별로 나누어서 확인할 필요도 있습니다.

2004년에는 매우 큰 금액을 소비하고, 2005년에는 매우 적은 금액을 소비하였지만 전체 년도를 기준으로 집계를 수행하면 이러한 변화를 알아차리기 힘들게 됩니다.

전년 대비 구매 금액이 큰 구매 고객에게는 이들이 꾸준히 관심을 유지할 수 있도록 해야합니다.

전년 대비 구매 금액이 크게 감소한 고객들을 대상으로는, 이들이 다시 소비를 할 수 있도록 마케팅 전략을 수립해야 합니다.

 

MySQL을 Python에 연결하여 데이터베이스의 데이터를 가져와 분석을 진행하니 흥미로운 경험이었습니다.

Python에서 매번 csv 파일을 읽으면 시간이 오래 걸리는 경우가 생길 거 같기도 한데, 이러한 방법을 알아둔다면 상황에 맞게 보다 유연한 방법으로 데이터를 다룰 수 있을 거라 느꼈습니다.

 

이상으로 강의 리뷰를 마치도록 하겠습니다.

읽어주셔서 감사합니다!!

 

728x90
728x90

[메타코드 강의 후기] 통계 기초의 모든것 올인원 - 이원배치 분산분석_240623

메타코드M (metacodes.co.kr)

 

통계 기초의 모든것 올인원 [ 1편, 2편 ]ㅣ18만 조회수 검증

 

www.metacodes.co.kr

안녕하세요 메타코드 서포터즈로 활동하고 있는 송주영입니다.

저는 작년 하반기부터 데이터 분석가의 꿈을 꾸고 이 분야를 공부하기 시작했어요.

 

메타코드는 데이터 분석, 인공지능 등 다양한 분야의 강의를 제공하고 있는 강의 사이트입니다. 이 분야의 입문자들에게는 어떤 강의가 좋을지 직관적으로 안내해주는 것이 메타코드 사이트의 장점이라고 생각합니다. 꾸준히 이벤트도 진행하고 있으니 가벼운 마음으로 방문해보셔도 좋을거 같아요

 

요새 꾸준히 공부하기가 어려워서ㅠ 서포터즈 활동을 하면 보다 몰입감을 가지고 강의를 들을 수 있을거 같아서 시작했고, 메타코드가 성장하는 모습을 보니 간접적으로나마 기여했다는 생각이 들어서 뿌듯함 또한 느끼고 있습니다.

 

"통계 기초의 모든 것 올인원" 강의 중 이원배치 분산분석에 대한 강의 후기 작성해봤습니다.

 

반복이 없는 경우 이원배치 분산분석 Table

왼쪽이 인자 A에 대한 treatment이다.

MBTI라고 생각하면 위에서부터 ISFJ, ENFP 이렇게 내려온다고 생각하자

B에 대해서는 성격, 혈액형을 예시로 생각해보자

각 열에 대하여 B에 대한 number는 고정되어 있고, A에 대한 number가 변화함을 확인하자

. (점)이 찍혀있는 것은 어떤 인자를 평균으로 바꾸었는지를 나타낸다.

 

반복이 없는 경우 이원배치 분산분석 관찰모형

 

큰 틀에서는 일원 분산분석과 비슷하고, 교호작용이 추가되었다.

신경 써야할 부분은 Notation이 더 추가되었기 때문에 이에 대해 정확히 파악하는 것이다.

관찰값 모형의 역할은 큰 가이드라인이다. 이 모형에 따라서 각각의 항들을 찾아가야 한다.

관찰값 모형을 간단하게 만듦으로써 이미 연구가 되어있는 값들을 가져올 수 있게 된다.

 

반복이 없는 경우 이원배치 분산분석 제곱합 분해

제곱합 공식을 보면, 앞 부분은 처리에 의한 효과(집단 간 변동)을 말하고, 뒷 부분은 잔차에 대한 값을 표현한다.

SST는 일원 분산분석과 같고,

뒤의 두 항은 각각 A에 의한 처리효과와 B에 의한 처리효과를 나타낸다.

마지막 항은 잔차에 대한 값이다.

 

반복이 없는 경우 이원배치 분산분석 ANOVA Table

Table을 작성해보면 A와 B의 자유도는 각각 ( p - 1 ), ( q - 1 )이 된다.

각각의 요인이 가질 수 있는 레벨의 갯수에서 1을 뺀 값을 말한다.

F 통계량은 MSE를 분모로 둔 상태에서 내가 검증하고 싶은 요인을 분자에 넣으면 구할 수 있다.

F 분포를 사용하는데, 단측 검정이기 때문에 일원 분산분석에서와 마찬가지로 통계량 값을 그대로 사용해야 한다.

 

반복이 있는 경우의 이원배치 분산분석

이원배치 분산분석에서 반복이 있는 경우에 대한 내용이다.

주효과 분석은 일원배치 분산분석에서와 마찬가지로 각각의 인자에 의한 효과를 말한다.

상호작용 효과는 주 효과들 간에 교호작용을 말한다.

예를 들면, 인자 A(성적)에 의해 종속변수(독서시간)가 변화를 나타내는데 인자 B(혈액형) 또한 영향을 주는 상황을 말한다.

 

반복이 있는 경우의 이원배치 분산분석 관찰모형

이원배치 분산분석에서 반복이 있는 경우의 관찰값 모형이다.

반복이 없는 경우의 식과 비교하면, 감마값이 추가되었다는 차이가 있다.

감마는 인자들 간에 교호작용에 대한 값을 말한다.

오차항의 경우, 일원배치 분산분석에서 배웠던 오차항에 대한 기본 가정을 따르고 있어야 한다.

 

강의후기

 

저번 일원배치 분산분석 강의보다 식에 Notation이 많아져서 힘들게 느껴졌네요ㅠ

강의를 들으면서 중간중간에 정지를 하고 정리하는 시간을 많이 가졌어요

저번 강의에서처럼 MBTI, 성적 등을 예시로 들며 설명해주셔서 그래도 이해할 수 있었던거 같아요

좀 더 난이도가 높아졌지만, 더 어려웠던 만큼 다 듣고 정리하니 성취감이 더 크게 다가오네요

 

데이터 분석을 하다보면 코딩 스킬에 그치지 않고, 통계 지식을 체계적으로 쌓는 것이 중요한데 메타코드에서 이러한 강의를 들으니 큰 도움이 된다고 느껴집니다

 

 

728x90
728x90

[메타코드 강의 후기] 통계 기초의 모든것 올인원 - 일원분산분석_240623

메타코드M (metacodes.co.kr)

 

통계 기초의 모든것 올인원 [ 1편, 2편 ]ㅣ18만 조회수 검증

 

www.metacodes.co.kr

안녕하세요 메타코드 서포터즈로 활동하고 있는 송주영입니다.

저는 작년 하반기부터 데이터 분석가의 꿈을 꾸고 이 분야를 공부하기 시작했어요.

 

메타코드는 데이터 분석, 인공지능 등 다양한 분야의 강의를 제공하고 있는 강의 사이트입니다. 이 분야의 입문자들에게는 어떤 강의가 좋을지 직관적으로 안내해주는 것이 메타코드 사이트의 장점이라고 생각합니다. 꾸준히 이벤트도 진행하고 있으니 가벼운 마음으로 방문해보셔도 좋을거 같아요

 

요새 꾸준히 공부하기가 어려워서ㅠ 서포터즈 활동을 하면 보다 몰입감을 가지고 강의를 들을 수 있을거 같아서 시작했고, 메타코드가 성장하는 모습을 보니 간접적으로나마 기여했다는 생각이 들어서 뿌듯함 또한 느끼고 있습니다.

 

"통계 기초의 모든 것 올인원" 강의 중 일원배치 분산분석에 대한 강의 후기 작성해봤습니다.

 

분산분석, 기본가정

반응변수는 종속변수와 같은 개념이다.

인자의 경우 독립변수의 개념이며, 반응변수에 어떠한 영향을 주는지 알아보는 것이 목표이다.

MBTI를 예시로 들면, MBTI 하나하나의 특성이 “처리(treatment)” 개념의 수준의 개념이다. 즉 16가지의 수준이 존재

분석에 앞서서 정규분포, 등분산, 오차가 독립이다는 기본 가정을 확인해야 한다.

 

분산분석의 식과 종류

그룹 간 변동이 우리가 검정하고 싶은 내용이다.

즉 MBTI가 그룹별로 어떻게 나눠지는지 등의 내용을 말한다.

그룹내 변동은 말 그대로 같은 집단 안에서 어느 정도의 차이가 있는지를 말한다.

인자가 몇 개인지에 따라 “일원배치분산분석”인지 “이원배치분산분석”인지로 나뉜다.

“이원배치분산분석”의 경우 인자가 두 개이므로 이들의 교호 작용 또한 생각해야 한다.

 

일원배치 분산분석

일원배치 분산분석에서 k개의 모집단의 개념을 보면, k는 요인이 취할 수 있는 값의 개수를 말한다.

Unique한 값의 개수를 말한다.

앞서 배웠던 기본 가정대로 각 집단은 독립이고 정규분포를 따라야 한다.

분산은 같아야 하지만, 평균은 다를 수 있음을 유의해야 한다.(*MBTI를 예시로 생각하면 이해가 쉽다)

 

반복수가 같은 경우의 일원배치 분산분석 표

반복수 : 특정 처치를 가할 때 그 안에 그룹이 몇 개가 있는가?

예시로는 “MBTI 별로 그 집단 안에 몇 명이 있는지”를 들 수 있다.

처리별로 본다면 각 처리별로는 크기가 n으로 동일하다.

y11에서 앞 부분이 k에 해당하고 뒷 부분의 숫자가 샘플의 숫자를 의미한다.

입실론은 개별 관측값이 가질 수 있는 오차를 말한다.

 

일원배치의 관찰값 모형

알파 i 가 우리가 관심을 가져야 하는 대상이다.

알파 i는 MBTI라고 한다면, 그 안의 특성이 어느 정도의 영향을 주는 지를 말한다.

모평균과 전체 모평균과의 차이가 얼마나 나는지를 확인하면 영향력을 파악할 수 있다.

수식을 관찰하면, 위 식에서 ( 뮤 i - 뮤 ) = ( 알파 i )가 된다.

 

일원배치 분산분석에서 오차항 가정의 중요성

분산분석을 진행한 이후에는 오차항에 대해 집중적으로 검증을 한다.(=잔차 진단)

오차항이 아래의 4가지 조건을 모두 만족하는 지를 확인하는 과정을 말한다.

오차가 있어야 분석이 의미있는 것이기 때문에, 오차항 검증이 중요성을 갖는다.

귀무가설 식에서 ( 뮤 i )와 ( 알파 i )가 같은 것은 관찰값 모형식에서 보면 ( 뮤 )는 하나의 상수값으로 볼 수 있기 때문이다.

 

제곱합 분해

식의 각 부분을 구분하자면 앞 부분은 처리 효과에 대한 값이고 뒷 부분은 잔차에 대한 값이다.

식에서 SST는 Sum of Squares Total로 잔차들의 총합을 말하고,

처리간 분산 SSt는 Sum of Squares Treatment로 처리 효과의 합,

처리 내 분산 SSE는 Sum of Squares Error로 잔차에 대한 값이다.

 

평균 제곱

평균제곱은 Mean Squares total로 제곱합에서의 값을 자유도로 나눈 값을 의미한다.

평균제곱은 뷴산의 추정량(분산 estimator)에 해당한다.

목표는 집단 내 효과가 집단 간 효과보다 큰 것인가를 알아내는 것이다.

처리에 의한 효과가 더 커야 분산분석이 의미를 갖는다.

 

강의후기

 

이번 강의에서는 수식과 각 수식에 대한 Notation이 많아서 집중을 하지 않으면 흐름을 놓치지 쉬웠어요

공식에 대한 증명을 해주시고, 이해하기 쉽게 MBI를 예시로 들어주신 것이 큰 도움이 되었어요!!

비전공자에게 어려운 부분이 있기도 했지만, 설명이 자세하여 그래도 들을만 했던 거 같아요

 

서포터즈로서 글을 작성하다보니 수업 때 배운 내용을 정리할 수 있어서 좋았어요

728x90
728x90

[통계 기초의 모든것 올인원] 메타코드 강의 후기 - "1강 통계량"

 

메타코드M

빅데이터 , AI 강의 플랫폼 & IT 현직자 모임 플랫폼ㅣ메타코드 커뮤니티 일원이 되시기 바랍니다.

mcode.co.kr

 

평균의 종류

산술 평균이란 모든 자료의 값을 더한 뒤에, 자료의 수로 나누어 준 값을 의미하며 평상 시에 자주 다루는 평균의 개념에 해당합니다.

산술 평균은 극단값에 영향을 받는다는 특징이 있고 이 부분은 데이터를 분석함에 있어 주의해야 할 부분입니다.

가중평균은 자료의 중요성이 다를 경우, 중요도에 따라 가중치를 부여한 평균을 의미합니다.

가중평균의 경우 분모를 보면, 자료의 갯수가 아닌 가중치의 합인 것을 볼 수 있으며 이 부분이 산술평균과 차이가 있습니다.

 

기하평균의 개념

기하평균의 경우, 비율에 대한 값을 다룰 때 사용하는 평균의 개념을 말합니다.

수업 때, 예시로서 내가 주식에서 100%의 수익을 달성하고 다음 날에 -100%의 손해를 발생했을 때, 이 비율에 대하여 산술평균으로 접근하면 오류가 생긴다는 상황을 들어주셨습니다.

이 예시를 통해, 보다 쉽게 이 개념을 받아들일 수 있었습니다.

위에서의 평균 개념들과 다르게 곱하고 제곱근을 한다는 특징이 있습니다.

 

분산, 표본분산

분산의 경우 편차 제곱의 합을 자료의 수로 나눈 값을 의미합니다.

여기에서 편차란 평균과 자료값의 차이를 의미합니다.

강의자료에서는 분모에 (n-1)이 적혀있는데 이는 표본분산인 경우를 의미합니다.

모분산의 경우는 n으로 나누며 시그마로 표시하고, 표본분산의 경우 (n-1)로 나누며 s로 표기합니다.

 

 

표준 편차에 식의 두 가지 형태

표준 편차 계산을 위한 수식을 2가지 배웠습니다.

저 두 수식이 왜 같은지에 대해 증명을 하는 과정을 보며, 이해도를 높일 수 있었습니다.

예제를 풀며 왜 두 가지 수식을 알고 있어야 하는지 느낄 수 있었습니다.

다양한 상황에서 데이터를 분석함에 있어서는 같은 개념에 대해서도 여러 가지 형태의 수식을 배워두면 유용할 것임을 배웠습니다.

 

왜도, 첨도

왜도의 경우 분포의 비대칭도가 어느정도 되는지 나타내는 수치로 영어로는 Skewness라고 합니다.

오른쪽으로 긴 꼬리가 있는 경우를 Positive Skew라고 합니다.

이 때는 양의 값으로 이상치가 있는 경우를 의미하기 때문에 평균이 이에 영향을 받아 중앙값보다 우측으로 위치하는 특징을 보입니다.

반대로 음의 값으로 이상치가 있는 경우는 Negative Skew라고 하며 Positive Skew와는 반대의 상황을 보입니다.

 

상관성 분석

상관성에 대한 개념과 공분산, 상관계수에 대한 개념을 배웠습니다.

상관계수는 확률변수 간의 변화가 서로 어느 정도로 관계가 있는 정도를 나타내는 값입니다.

절대값이 1에 가까울수록 상관관계가 강함을 의미하며, +1에 가까운 경우는 양의 상관 관계에 해당하고, -1에 가까울 경우에는 음의 상관관계에 해당합니다.

단, 특정 구간을 기준으로 양의 선형관계와 음의 선형관계가 달라지는 자료라면 상관계수 값으로는 0에 가깝게 나오겠지만 제대로 된 분석을 하지는 않을 것이므로 이 수치만을 보고 판단해서는 안된다고 배웠습니다.

 

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

+ Recent posts