출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리] '메타코드M' 태그의 글 목록 (3 Page) :: 하나둘셋넷
728x90

[통계 기초의 모든것 올인원] 메타코드 강의 후기 - t분포/F분포, 점추정/구간추정

https://mcode.co.kr/video/list2?viewMode=view&idx=94

 

메타코드M

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

mcode.co.kr

 

표본분포 - t 분포

 

모집단의 표준편차를 모르면, 모표준편차 대신 표본표준편차를 사용한다?

자유도가 높은 것이 좋은 것이다?

=> 그렇지 않다, 임의로 결정될 수 있는 것이 늘어남에 따라 컨트롤하기 어려워진다.

X가 동일한 분포에서 나온 확률표본인데, 시그마를 모른다면 표본분산을 대신 사용할 수 있다.

이때, 표준정규분포가 아니라 t 분포를 따르게 된다.

 

표본분포 - t 분포 특징 정리

 

t 분포는 그림에서 볼 수 있듯이 정규분포보다 평평하게 나타나게 된다.

표본크기가 크다면, 분포가 중심부근에서 점점 뾰족해지는데 이때 표준크기가 30 이상이 된다면 정규분포에 근사하게 된다.

즉, 표본 30을 기준으로 이상이면 표준정규분포, 미만일 때는 t 분포가 된다.

t 분포는 모표준편차를 모르는 경우에 사용한다는 것이 가장 중요한 내용이다.

 

표본분포 - F 분포

V1을 본인의 모수로 나누어 주고, V2 또한 본인의 모수로 나누어 준다.

F 식에서 분자가 앞에 와야 한다는 것을 기억하자.

분산을 비교한다는 것은 회귀분석, 분산분석에서 중요하게 다루어지는 개념이다.

통계 분석에서 분산 분석은 가장 중요한 내용 중 하나이다.

 

표본분포 - 정리

정규분포는 모분산을 알고 있을 때, 모평균 혹은 두 모평균 차이에 대한 추정/검정을 할 때 사용한다.

이때, 모분산을 모르더라도 표본크기가 크다면 이를 동일하게 수행할 수 있다.

t 분포는 모분산을 모를 때 사용한다.

카이제곱분포는 모분산에 대한 추정/검정을 하고, F 분포는 두 모분산 차이에 대한 추정/검정에 사용한다.

 

점추정/구간추정

점 추정의 경우, 모수를 특정 값으로 추측한다.

신뢰도를 나타낼 수 없고, 오차에 대한 정보가 없다는 특징이 있다.

구간 추정은 점 추정과 달리, 모수를 특정 값이 아닌 구간으로 추정한다.

신뢰도를 나타낼 수 있다는 점이 점 추정과 다르다.

 

추정 - 점 추정

추정량(estimator)와 추정값(estimate)는 말은 비슷하지만 다른 개념이다.

이 강의에서는 추정량(Estimator)를 더 많이 사용할 것이다.

추정에서 사용되는 통계량을 통틀어서 통계량이라고 부른다.

추정값은 실제값을 의미한다. 즉 실제 계산된 결과를 말한다.

728x90
728x90

[통계 기초의 모든것 올인원] 메타코드 강의 후기 - 통계적 추정

https://mcode.co.kr/video/list2?viewMode=view&idx=94

 

메타코드M

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

mcode.co.kr

메타코드의 "통계 기초의 모든 것 올인원[1편, 2편]"에 대한 수업 후기입니다.

메타코드에는 통계 강의를 포함하여 데이터 분석, 인공지능 등 다양한 강의를 제공하니 데이터 분석 혹은 인공지능 분야에 관심이 있다면 이용해보시길 추천드립니다.

 

구간 추정

모수 세타가 a와 b 사이에 있을 확률을 (1 - 알파)라고 한다면,

모수 세타에 대한 신뢰구간은 100 X ( 1 - 알파 )[%]가 된다.

즉, 신뢰구간은 모수를 포함할 것으로 추정한 구간을 의미한다.

신뢰수준은 신뢰구간이 모수를 포함할 확률로 ( 1 - 알파 )가 된다.

 

모평균의 구간추정

모분산을 아는 경우에는 Z 통계량을 사용한다.

Z 값을 사용하기 위해서는 표준화를 하는 과정이 필요한다.

구간추정을 하기 위해서는 먼저 신뢰수준을 정하는 것이 필요하다.

몇 %로 신뢰수준을 정할 것인지에 따라 Z 값이 달라진다.

 

통계적 추정 예제

모집단은 우리나라 대학생이 해당하며, 샘플 사이즈는 100명이 된다.

샘플 X의 평균 값은 30만원이 되며, 모집단의 표준편차 시그마는 12만원으로 주어졌다.

신뢰수준이 90%이므로 0.05일 때의 Z 값을 사용하면 된다.

Z = 1.64이기 때문에 ( 시그마 / 루트 n ) 식을 곱한 뒤에 X의 평균값에 더하면 된다.

 

모평균의 구간추정 - 모분산을 모르는 경우

모분산을 모르는 경우에는 t 통계량을 사용한다.

Z 통계량을 구하는 것과 유사한 모습을 보인다.

모표준편차 시그마를 사용하는 것과 달리 표본 표준편차 S를 쓰는 대신 t 통계량을 쓰는 것이 차이점이다.

단, 표본 크기가 클 경우에는 Z 통계량을 사용하게 된다.

 

통계적 추정 - 예제

표본의 평균은 30만원, 표본의 숫자는 16명, 표본의 표준편차 S는 10만원으로 주어졌다.

신뢰구간은 90%로 주어졌으므로, t가 0.05인 경우의 값을 확인하면 된다.

식을 계산하기 위하여 t 확률분포표를 확인하는 과정이 필요하다.

해당하는 t 값은 1.71이며, 나머지 값들을 넣어서 계산을 진행하면 답이 된다.

 

통계적 추정 - 예제 2

표본의 숫자는 10명, 표본의 평균 X는 150만원으로 주어졌다.

모집단에 대한 정보인 모표준편차는 10만원으로 주어졌고, 정규분포를 따른다는 조건 또한 주어졌다.

모평균에 대한 신뢰구간을 구할 때, 모분산을 안다면 Z 값을 사용할 수 있게 된다.

신뢰수준은 95%로 설정하였으므로 0.025일 때의 Z 값인 1.96을 사용하면 된다.

728x90
728x90

[통계 기초의 모든것 올인원] 메타코드 강의 후기 - 연속확률분포, 통계적 추정

https://mcode.co.kr/video/list2?viewMode=view&idx=94

 

메타코드M

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

mcode.co.kr

메타코드의 "통계 기초의 모든 것 올인원[1편, 2편]"에 대한 수업 후기입니다.

메타코드에는 통계 강의를 포함하여 데이터 분석, 인공지능 등 다양한 강의를 제공하니 데이터 분석 혹은 인공지능 분야에 관심이 있다면 이용해보시길 추천드립니다.

 

연속확률분포 예제 1

표본평균의 공식은 시그마 X를 n으로 나누는 것이다.

이 공식을 Variance(분산) 식에 대입한다.

이때, n은 상수이므로 Var 공식에서 바깥으로 뺄 수 있다. 이때, n은 제곱의 형태로 나오게 된다.

같은 모집단에서 나왔으므로 X들에 시그마 제곱을 대입할 수 있고 결과적으로 (시그마 제곱) / n 의 형태로 공식을 유도할 수 있다.

 

연속확률분포 예제 2

표본은 100명이고, 표본의 평균이 70, 표본의 표준편차는 10인 상황이다.

중요한 가정 중 하나는 성적이 정규분포를 따른다는 것이다.

이 문제의 경우, 학생 수를 물어본다는 것이 특이한데 결과적으로는 확률을 계산하는 것이 문제이다.

표준화 공식을 적용하면 좌측은 (60-70) / 10 => -1 이 되고 (60-70) / 10 => +1이 된다.

정규분포의 특징은 양측이 종 모양으로 같다는 것이다. 따라서 0.159 X 2 = 0.318이 된다.

최종적으로 정답은 100 X 0.682 = 62.8명이 된다.

 

연속확률분포 예제 3

문제에서 P(X<5) = 0.5 조건을 주었다.

정규분포는 기댓값을 기준으로 하여 좌우 대칭이 된다.

따라서 각각 확률을 의미하는 면적이 0.5이 됨을 의미한다.

따라서 조건으로 준 5가 기대값이 된다.

 

연속확률분포 예제 4

샘플 사이즈가 충분히 크다면 정규분포가 된다. 표본이 20으로 주어졌으므로 이 문제에서는 해당하지 않는 사항이다.

표본평균의 확률분포를 묻는 것이 문제이다.

모집단 자체가 정규분포를 따른다고 했기 때문에 표본평균의 확률분포는 정규분포를 따를 것이다.

표본평균의 기댓값은 모평균(뮤)와 같다. 표본평균의 Variance는 (시그마 제곱) / n 이다.

 

통계적 추정

통계적 추정이란 데이터를 샘플링하여 모집단에 대한 추론을 한다는 것을 의미한다.

모평균은 "대한민국 모든 사람들의 키의 평균을 알고 싶어" 등이 해당한다.

이에 대하여 단일한 값으로 추정한다면 점추정에 해당한다.

만일 구간으로 추정을 한다면 구간 추정에 해당하는 것이다.

 

통계적 추정 : 기준

통계적 추정이 올바른 것인지 판단하기 위한 기준 4가지이다.

불편성에서 "편"이란 편향, bias를 의미한다.

유효성이란 불편성이 보장된 상태에서 확인하는 값이다.

일치성과 충분성은 강의자료에 적힌 그대로 이해하면 된다.

728x90
728x90

[통계 기초의 모든것 올인원] 메타코드 강의 후기 - 연속확률분포

https://mcode.co.kr/video/list2?viewMode=view&idx=94

 

메타코드M

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

mcode.co.kr

표본분포

표본분포는 통계량의 확률분포이다.

통계량에는 평균, 표준편차, 분산, 중위값 등이 있다.

평균의 확률분포와 같은 개념을 의미한다.

전수 조사가 어려울 경우, 샘플링을 한다. 이때, 샘플링 과정을 여러 번( ex 1,000번 )한다.

이러한 과정을 진행하면 샘플링한 값들의 평균에 대한 확률분포를 구할 수 있다.

 

중심극한정리

임의의 모집단 => 내가 그 집단이 어떠한 성질을 가지고 있는지 모른다.

만약 샘플 사이즈 n이 충분히 크다면 근사적으로 정규분포를 따르는 것을 말한다.

어떠한 집단이 정규분포인지 정하는 것이 매우 중요하다.

따라서, 이 중심극한정리를 통하여 집단의 특성을 정하는 것은 매우 유용하게 된다.

 

카이제곱 분포

카이제곱 분포, t 분포는 표본분포에서 나온 개념이다.

통계량에 대한 분포를 의미한다.

카이제곱은 이 통계량 중에서 표본분산에 대한 분포를 말한다.

확률변수가 각각 표준정규분포를 따르고 독립일 때, 이들의 제곱합이 자유도 k인 카이제곱 분포를 따른다.

자유도 k만 알면 카이제곱 분포의 모양을 결정할 수 있게 된다.

카이제곱 분포는 원래 치우친 모양을 나타낸다.

 

카이제곱 분포 특징 정리

단봉분포는 하나의 봉우리만 가진다는 것을 의미한다.

오른쪽에 긴 꼬리를 가지는 Positive Skew 형태를 나타낸다. 즉, 양의 이상치 값을 갖는다.

정규분포를 따르는 각각의 확률변수 Z의 갯수만큼 자유도를 가진다.

이때, 이 자유도가 커질수록 정규분포에 가까워지게 된다.

표본분산만 가지고 있을 때 모분산을 추정하고 싶은 경우에 활용한다.

 

연속확률분포 예제 1

확률변수에 대하여 상수가 붙어있다면 제곱이 붙어서 나오게 되므로 이 경우에는 분모에 n^2이 생기게 된다.

확률표본이므로 X1부터 Xn까지 각각 독립이 된다.

따라서, 각각이 Var이 붙어서 연결된다.

동일한 모집단에서 나왔으므로 각각 시그마 제곱이므로 nσ^2이 되고 최종적으로 계산하면 σ^2/n이 된다.

 

연속확률분포 예제 2

이전 문제까지는 확률에 대해서 계산을 하다가 이번 문제는 학생 숫자에 대해서 물어보고 있다.

x가 60점에서 80점 사이에 있을 확률을 구한다.

(60-70) / 70 = -1이 되고, (80-70) / 70 = 1이다.

파란색 부분이 0.159에 해당하는 정규분포이므로 양쪽이 Bell 모양에 해당한다.

따라서 0.159 X 2 = 0.318이 된다.

100 * ( 1 - 0.318 )을 계산하면 정답에 해당한다.

 

728x90
728x90

[통계 기초의 모든것 올인원] 메타코드 강의 후기 - 이산확률분포

https://mcode.co.kr/video/list2?viewMode=view&idx=94

 

메타코드M

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

mcode.co.kr

이산확률 분포 : 이항분포, 베르누이 시행

베르누이 시행은 성공아니면 실패로 판변이 되는 것을 말한다.

동전 던지기를 한 번 하면 베르누이 시행, 여러 번 반복하면 이항분포에 해당한다.

사상이 두 개만 있으므로 1-pp만 있게 된다.

확률변수 X의 평균(기댓값)은 p, 확률변수 X의 분산은 p(1-p)이다.

 

이항확률분포

베르누이 시행을 반복하여 특정한 횟수의 성공/실패가 나타날 확률이 이항확률분포에 해당한다.

어떤 사건이 a 아니면 b에만 해당한다면 이 분포에 해당한다.

x에는 성공 횟수, n에는 시행 횟수를 대입한다.

앞에 n이 곱해져 있는 것을 제외하면 베르누이 시행과 식이 유사한 모습을 볼 수 있다.

 

이산확률분포 예제 풀이 1번

앞에서 배운 베르누이 시행에 대한 개념이다.

앞에서 확률과 확률변수에 대해 공부할 때, E(x^2 )- μ^2 형태로 정의한 공식이 있다.

x의 제곱을 했을 때 0이면 0, 1이면 1로 나온다.

즉 차이가 없으므로 E(x^2)은 p에 해당한다.

따라서 X의 분산이 p(1-p) 임을 확인할 수 있다.

 

이산확률분포 예제 풀이 2번

4 이상의 눈이 나올 확률은 p이다.

주사위를 5번 던지므로 n = 5에 해당한다.

눈이 두 번 나오는 경우가 궁금하므로 n = 2에 해당한다.

p의 경우 4 이상인 경우는 4, 5, 6이므로 확률은 1/2에 해당한다.

 

이산확률분포 예제 풀이 3번

동전을 5번 던지므로 n = 5 이다.앞면과 뒷면이므로 p = 1/2 이다.

기댓값에 대한 공식은 np이다.

분산에 대한 공식은 np(1-p)이다.

기본 공식을 적용하면 정답을 구할 수 있는 문제이다.

 

이산확률 예제 풀이 4번

3회 청구될 확률이므로 우선 x=3에 해당한다.

한 해에, 어떤 한 해에 조건이 붙어 있어 단위 시간을 나타낸다. 따라서 이 문제는 포아송 분포에 해당한다.

포아송 분포에서는 람다를 구해야 한다.

1000명의 보험자 X (1/2000) = 0.5회 청구된다. 따라서 람다는 0.5에 해당한다.

공식에서 x와 람다를 대입하면 정답을 구할 수 있다.

728x90
728x90

[통계 기초의 모든것 올인원] 메타코드 강의 후기 - "2강 확률과 확률변수"

 

 

메타코드M

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

mcode.co.kr

 

조건부 확률

모집단의 20%가 A이므로, P(A) = 0.2로 설정하고, 이에 따라 나머지 집단인 B에 대해서는 P(B)로 설정하였습니다.

A 고객에 대하여 사고가 날 확률을 정의하면 P(C|A) = 0.3으로 계산할 수 있습니다.

B 고객에 대하여 사고가 날 확률을 정의하면 P(C|B) = 0.1로 계산할 수 있습니다.

조건부 확률에 대한 식을 생각하면, P(C∩B) / P(B) 이므로 P(C∩B) 값을 구할 수 있고 A에 대해서도 같은 과정을 수행할 수 있습니다. 따라서 구한 값들을 더한다면 새 고객에 대한 사고 확률을 계산할 수 있습니다.

 

베이즈 정리

사전 확률을 사후 확률로 전환할 수 있다는 것이 베이즈 정리에서의 가장 중요한 점입니다.

데이터가 추가됨에 따라 확률을 업데이트 할 수 있습니다.

예시로서, 성적이 얼마나 오를지에 대해 예측하는 것을 들어주셨습니다.

대상에 대하여, "책을 몇 개 샀다", "이번 모의고사에서 몇 점 맞았다"의 정보가 추가됨에 따라 사후 확률을 추정할 수 있게됩니다.

 

확률변수

확률 변수는 이름은 변수로 되어있지만, 함수를 의미합니다.

사건의 실수값을 맵핑하는 개념으로 생각하면 된다고 설명을 해주셨습니다.

확률분포는 확률변수를 설명해주는 개념입니다.

밑의 예시를 통하여 보다 확률 변수를 쉽게 이해할 수 있도록 돕는 것입니다.

 

이산확률변수, 연속확률변수

이산확률의 경우 정의된 확률의 값을 셀 수 있습니다.

따라서 확률질량 함수의 경우 특정 값에 대해 각 확률이 대응됩니다.

연속확률 변수의 경우 이산확률변수와는 다르게, 특정 값으로 정해지지 않는다는 특성을 갖습니다.

연속형이므로, 취할 수 있는 값이 무한대에 해당한다는 특징이 있습니다.

 

기대값 - 이산확률변수, 연속확률변수

이산확률 변수의 경우, 각 변수에 대하여 일어날 확률을 곱하는 과정을 수행합니다.

이후에 해당 값들을 모두 더해주면 이산확률변수에서의 기대값인 E(X) 값을 계산할 수 있습니다.

연속확률 변수의 경우, 위에서와 마찬가지로 변수에 확률을 곱하는 과정을 수행합니다.

연속형 값이므로 더해주는 것이 아닌 적분을 수행한다는 것이 위의 과정과 차이가 있습니다.

 

기대값에 대한 공식

위 식들은 기대값에 대하여 외워두면 좋은 공식들입니다.

가장 위의 E(a)의 경우 상수 a에 대한 기대값은 상수 a라는 것을 의미합니다.

E(X + b)의 경우, 우리나라 선수들의 평균 키보다 A 국가대표팀들의 평균 키가 3cm 큰 상황을 예시로 들어주셨습니다.

이 경우 A 국가대표팀에 대하여 평균을 구하는 것이 아닌 우리나라 선수들의 평균 키에서 3cm를 더하면 됩니다.

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

메타코드 강의 후기

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

 

메타코드M

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

mcode.co.kr

Javascript로 만든 페이지에 대응하는 방법을 배울 것입니다.

 

개발자 모드로 박스 컨텐츠의 정보를 확인합니다.

 

박스컨텐츠에 대한 정보는 <a></a> 태그로 되어있는 경우가 많습니다.

클래스 부분의 정보를 복사하여 가져옵니다.

 

box_contents = soup.find_all('a', class_='box-content flex-style')
box_contents

 

가져온 클래스 정보를 코드에 위와 같이 입력합니다.

여러 개의 정보를 가져와야 하므로 "soup.find_all"을 사용했습니다.

 

크롤링이 되지 않는 경우 -> selenium의 webdriver 사용

 

 

크롤링이 되지 않는 경우에는 selenium으로부터 webdriver를 가져와서 크롤링을 진행합니다.

필요한 라이브러리들은 위 사진에서 확인할 수 있습니다.

정적인 페이지의 경우는 Requests와 Beautifulsoup으로 크롤링이 가능하며,

동적인 페이지의 경우는 Selenium을 사용하는 경우에 해당합니다.

 

Selenium을 통한 크롤링 준비

 

 

Selenium의 webdriver를 통하여 웹 드라이버를 실행하는 코드입니다.

해당 코드를 실행하면 새로운 브라우저를 통하여 url 주소에 해당하는 페이지가 실행됨을 확인할 수 있습니다.

wait의 경우 브라우저의 안정적인 실행을 위해 설정하며, 이 경우에는 10초로 설정했습니다.

html 변수에 페이지 소스를 담아 이후 크롤링에 사용할 것입니다.

 

크롤링 시도

 

 

soup = BeautifulSoup(html, 'html.parser')를 통해 soup 변수에 selenium을 통하여 얻은 페이지 소스를 대입하여 크롤링을 시도한 결과 출력에서 볼 수 있듯이 정보를 가져오는 것에 성공했음을 확인할 수 있습니다.

박스 컨텐츠를 가져오는 것이 목적이기 때문에 F12 개발자 모드에서 확인한 클래스 이름인 "box_content flex-style"을 형식에 맞게 입력하였습니다.

태그의 종류는 "a 태그"에 해당합니다.

 

불러온 정보 다루기

 

 

len 함수를 통해 확인할 수 있듯이 현재 box_contents는 리스트 형식이며, 그 안에 값들은 12개가 담겨있습니다.

box_contents[0] 등으로 숫자를 입력하며 각 위치에 어떤 값들이 담겨 있는지 쉽게 확인할 수 있습니다.

태그 정보와 클래스 이름도 확인할 수 있습니다.

리스트 구조이므로 후에 for문 등 다양한 방법으로 데이터를 다루기에 용이한 상태가 되었습니다.

 

원하는 정보 선택 출력

 

 

위의 방식을 통하여 컨텐츠에서 원하는 정보만 출력할 수 있습니다.

box_contents는 리스트 구조이므로 먼저 인덱스 번호를 통해 어떤 정보를 가져올 것인지 정합니다.

해당 요소의 태그와 class 정보는 쉽게 확인할 수 있습니다.

".find()" 안에 확인한 태그 정보와 class 이름을 넣으면 위에서 볼 수 있듯이 필요한 정보를 출력할 수 있습니다.

 

리스트에 정보 담기

 

리스트 구조를 활용하면 페이지에서 원하는 정보들을 편하게 추출하고 관리할 수 있습니다.

url 변수에 기본 주소 + href 정보를 통해 페이지에 대한 주소 정보를 담습니다.

title, body, date 변수에 개발자 모드에서 확인한 태그 정보와 클래스 정보를 활용하여 정보를 담습니다.

반복문의 각 변수들을 해당 리스트에 append하여 정보를 추가합니다.

box_contents의 길이만큼 반복문이 진행됩니다.

 

csv 파일로 저장

 

리스트 구조를 딕셔너리 구조로 변환한 뒤에,

pd.DataFrame() 함수를 사용하여 데이터프레임 변환합니다.

df.to_csv() 함수를 사용하면 데이터프레임 구조의 정보를 csv 파일 형태로 저장할 수 있습니다.

pd.read_csv() 함수를 사용하면 저장된 csv 파일 내용을 확인할 수 있습니다.

728x90
728x90

메타코드 강의

"웹 크롤링 기초 강의ㅣ뉴스, 기차 예매, 여행 사이트 실습"

https://mcode.co.kr/video/list2?viewMode=view&idx=92

 

각각의 뉴스에서 정보 수집

KBS 뉴스탭에서 전체 카테고리를 선택하고 일자별 뉴스 항목에 접근합니다.
먼저, 한 항목을 선택하여 페이지로 이동합니다. F12 버튼을 통해 개발자 모드에 접근하면 각 element들에 대한 자세한 정보를 얻을 수 있으며 이는 뒤에서 바로 진행할 것입니다.

하나의 요소에서 정보를 수집하는 것으로 시작하여, 추후에 여러 뉴스에서 정보를 수집하는 실습을 진행할 것입니다.

 

개발자 모드 F12를 통한 요소 분석

타이틀 부분은 h4로 싸여 있고 class는 "headline-title"임을 확인할 수 있습니다.
본문 부분은 "detail-body font-size"라는 클래스로 되어있음을 확인할 수 있습니다.
개발자 모드에서 접근한 뒤, 화살표 버튼을 통해 내가 원하는 요소에 대한 정보를 쉽게 얻을 수 있습니다.
< br > 태그는 엔터 기능에 해당합니다.

 

라이브러리 호출

기본적인 라이브러리들을 호출하기 위하여 아래 코드를 실행합니다.

import requests
from bs4 import BeautifulSoup

위에서 호출한 requests 라이브러리를 통하여 url의 텍스트 정보를 가져올 수 있습니다.

url = 'https://news.kbs.co.kr/news/pc/view/view.do?ncd=7936381'
html_doc = requests.get(url).text
html_doc

url의 정보의 경우 현재 접속한 페이지의 상단에서 "복사"를 통해 가져오도록 합니다.

위에서 가져온 url 정보를 읽을 때에는 뒤에 .text를 통해 읽도록 합니다.

 

class 정보 수집

title1 = soup.find('h4', class_ = 'headline-title')
title1

이 코드를 실행하여 제목 정보를 가져옵니다.
개발자 모드의 정보에서 title의 class가 어떻게 되는지 쉽게 확인할 수 있으며, 복사 붙여넣기를 통해 'headline-title'을 가져옵니다.

개발자 모드의 좌측 상단의 마우스를 통해 해당 요소의 클래스 정보를 쉽게 찾을 수 있으며, 해당 코드 부분에 마우스 부분을 올려 해당 컨텐츠의 코드 부분이 맞는지 한 번 더 확인하도록 합니다.

 

리스트를 통한 여러 뉴스 데이터 크롤링

아래 코드를 통하여 여러 뉴스들을 하나의 리스트로 담고 데이터프레임으로 만든 뒤에 최종적으로는 csv 파일 형태로 저장합니다.

url_list = []
title_list = []
body_list = []

url1 = 'https://news.kbs.co.kr/news/pc/view/view.do?ncd=7937463'
html_doc1 = requests.get(url1).text
soup1 = BeautifulSoup(html_doc1, 'html.parser')
title1 = soup1.find('h4', class_ = 'headline-title').text
body1 = soup1.find('div', class_='detail-body font-size').text

url_list.append(url1)
title_list.append(title1)
body_list.append(body1)

url2 = 'https://news.kbs.co.kr/news/pc/view/view.do?ncd=7937458'
html_doc2 = requests.get(url2).text
soup2 = BeautifulSoup(html_doc2, 'html.parser')
title2 = soup2.find('h4', class_ = 'headline-title').text
body2 = soup2.find('div', class_ = 'detail-body font-size').text

url_list.append(url2)
title_list.append(title2)
body_list.append(body2)

data12 = {'뉴스url':url_list, '제목':title_list, '내용': body_list}

df12 = pd.DataFrame(data12)
df12.to_csv('new12_kbs.csv', index = False)
pd.read_csv('./news12_kbs.csv')

 

현재는 2개의 뉴스 정보를 추출하는 것이 목적입니다. 따라서, url1, url2의 변수에 각각의 사이트에서 가져온 url 주소를 입력합니다.

list.append()를 활용하여 url, title, body에 대한 정보를 담은 리스트를 생성합니다..

생성된 리스트를 통해 딕셔너리 구조를 변환한 뒤 데이터프레임 구조로 변환하고 이를 csv 형식으로 저장합니다.

 

위에서 저장한 CSV 파일을 확인합니다.

 

화면에서 볼 수 있듯이 url_list에 두 개의 뉴스를 담았기 때문에,

2개의 행으로 구성된 데이터프레임 구조가 CSV로 잘 저장되었음을 확인할 수 있습니다.

Jupyter lab에서 아래에서 볼 수 있듯이 Pandas 라이브러리를 활용하여 읽어볼 수도 있습니다.

컬럼 정보 또한 잘 설정이 되었는지도 확인합니다.

 

 

728x90

+ Recent posts