파이썬 판다스 라이브러리에서  데이터프레임 생성하기, 판다스 공식문서 참조, pandas_cheat_sheet, pd.DataFrame()

 

안녕하세요 !

오늘의 주제는 기본적으로 행과 열을 갖고 있는 형태를 만들어볼거에요.

우리가 기본적으로 수학시간에는 매트릭스(행렬)이라고 배웠는데요.

파이썬에서 지원하는 라이브러리 중에서 pandas 패키지가 그와 동일한 기능을 하죠.

 

우선 기본적으로 import pandas as pd 를 통해서 패키지를 불러옵니다.

import pandas as pd

 

이후에 데이터 프레임을 생성할건데,

리스트로 반환하는 방법이 있고, 딕셔너리로 만드는 방법이 있어요.

또한 위의 것들을 객체로 반환시켜서 만드는 방법들도 있고요.

그래도 가장 기본이 되는 방법부터 살펴볼게요.

df = pd.DataFrame(
{'a' : [4, 5, 6],
'b' : [7, 8, 9],
'c' : [10, 11, 12]},
index = [1, 2, 3])

위의 방식은 판다스 치트 시트라고해서 공식문서에 제공되는 가장 첫번째 내용이기도 합니다.

여기서 a, b, c는 각각 column을 의미합니다.

그러면 가로의 row는 어떻게 지정할까요?

여기서 잠깐 !

기본적으로 판다스는 column은 columns라고 보고, row는 index를 의미합니다. 

그래서 index라는 리스트를 따로 파라미터로 넣어줘야 됩니다. 리스트 형태로요!

데이터프레임 생성 결과화면

위의 경우는 방금 설명한 것의 결과화면 입니다.

위처럼 딕셔너리 형태가 불편하다 싶으면 리스트 안에 리스트 형태로 값을 넣어준 뒤에,

index와 columns를 반환시켜줘도 됩니다.

df = pd.DataFrame(
[[4, 7, 10],
[5, 8, 11],
[6, 9, 12]],
index = [1, 2, 3],
columns = ['a', 'b', 'c'])

위와 같은 형태로 할 수 있습니다.

만약 여기서 index와 columns를 별도로 지정해주지 않으면 어떻게 될까요?

위와 같이 인덱스는 0부터 시작되어 n-1까지 나타나게 됩니다. 행이든 열이든 동일한 규칙입니다.

그래서 딕셔너리 형태로 만들면 이미 column_name이 들어간 상태이고(키:밸류 형태니까요)

리스트 형태는 사용자 옵션(인덱스와 컬럼을 설정 등)에 따라 바뀝니다.

표본평균을 통계량이라고도 하지만, 추정할때에는 모평균의 추정량이라고도 한다.

 

추정량과 추정치의 비교 

추정량 = 다양한 숫자를 가질 수 있는 공식(함수) (대문자X바)

추정치 = 특정한 샘플의 (소문자x바)

 

추정량 특성 - 모수를 제대로 추정하는지?

  • 불편성: 추정량(X바)의 기대치가 모수(M)와 같은 추정(E(X) - M = 0인가?)
  • 일치성: n이 커지게되면, 추정량과 모수의 차이가 확률적으로 더욱 작아진다는 것.
  • 상대적 효율성: 분산이 더 작은 것이 효율적이다.

 

불편추정량

모수를 추정하는 방법은 여러가지가 있다. 그것들의 특성을 보고 올바르게 모수를 추정하는지 알 수 있어야 한다.

ex)표본평균은 모평균의 불편추정량이다. 그래서 표본평균의 기대값은 모평균어야 한다.

- 그러나 추정량은 실제로 모수에 비해 매우 많이 떨어진 것들이 있을 수 있다.(차이가 매우 클 수도 있음; 평균이 뮤 일뿐)

 

일치성(probability limit를 알아야 하는데 이건 생략이므로 개념적으로만 접근)

확률적으로 추정량과 모수의 차이가 줄어드는 개념.

표본평균의 분산은 분산/n으로 나타낼 수 있는데, 여기서 n이 매우 커지면 분산이 매우 작아진다.

이러한 특성이 있을 때 일치성이 있다고 본다.

- 불편추정량은 평균만 알기 때문에, 얼마나 가까운지를 알 수 없다. 일치성은 n이 클수록 그 갭이 좁아지는 것.

- 일치추정량인지 아닌지? n이 무한대로 갔을 때, 이 추정량의 분산이 0으로 가는지 안가는지를 보면 된다. 예를들어 X바10 의 경우는 평균이 M이고, 분산이 시그마제곱/10 이기 때문에 아무리 n을 키워봤자 분산이 작아지는 형태가 아니므로 분산이 변하지 않는다(분모인 n이 이미 10이 되어버렸으므로) - 이 경우에는 일치추정량이 아니라고 보는 것.

- X바(n/2)는 불편추정량이다. 일치추정량인가? 일치추정량이다. (평균은 M이고, 분산은 시그마제곱/n 대신, 2시그마제곱/n이 될테니까)

 

상대적 효율성

두가지의 불편추정량이 존재할 때, 분산이 더 작은 것을 효율적으로 본다.

ex)표본평균과 표본중앙값은 모두 불편추정량이지만, 표본중앙값의 분산이 더 크다. 그래서 표본평균이 더욱 상대적으로 효율적이라고 볼 수 있다.

test: Xn바, Xn/2바 모두 불편추정량인지 물어볼 수 있다. 그리고 둘 중 무엇이 상대적 효율적인지에 대해 물을 수 있다. 분산만 계산하면 된다.

test2

표본의분산은 모분산의 불편추정량이다.

MLE라고 하는 시그마제곱햇 형태는 변형하면 표본분산과의 관계로 나타낼 수 있다.

1) 표본분산은 불편추정량인데, 그러면 이것과 연결된 시그마제곱햇 또한 불편추정량인가?

2) 시그마제곱햇 이라는 MLE가 일치추정량인가 아닌가? - 맞는 것 같다. n을 무한대로 보내면 n-1/n은 1로 되고, s^2부분이 0으로 되기 때문에, 시그마제곱햇 또한 0으로 수렴할 것 같다.

 

어떤 불편추정량을 가져와도 표본평균(엑스바)보다 분산이 적을 수 없다. 즉 표본평균은 상대적 효율성이 아닌 '효율 추정량' 그 자체라고 이해. (전제: X가 정규분포)

 

모표준편차가 알려져 있을 때 모평균의 추정

모표준편차가 알려져 있지 않은 경우에는 t분포를 쓰면 된다.

 

컴퓨터 회사가 25리드타임 동안의 컴퓨터 구매의 수요를 측정한 데이터들은 표본이 되며, 실제 구매하고자 하는 사람들의 수요는 모수가 된다. (그래서 모수를 알 수 없다는 것; 신의 영역)

 

신뢰구간추정치

리드타임의 평균수요가 340과 399사이가 신뢰구간 95%안에 든다고 가정했을 때,

신뢰구간을 통해 340과 399사이에 모평균이 존재할 확률이 95%이다 라고 해석해서는 안된다.

모평균은 딱 A이다 라고 말할 수 있어야 한다. (모평균은 확률이 부여되는 변수가 아니라, 고정된 값이다)

 

이 구간이 실제로 모평균을 포함하지 않고 있을 수도 있다.

표본을 100개를 뽑았을 때, 340과 399사이에 모평균이든 모분산이든 이런 값들이 

실제 모집단과 같을 확률이 95개 정도가 되고 나머지 5개가 불일치한다(모평균을 포함하지 않는다)고 보는 것.

 

우리가 추정한 구간이 실제 모수의 값을 가질 확률이 95%라는 것이다.

100번으로 추정하면 95번은 모수를 포함하고 있다는 개념.

다른 예로는 주사위가 있다.

주사위의 실제 모평균은 3.5이다.

학생 1명당 주사위 100번을 던지게 하고 평균을 구해오라고 한 뒤에

40명의 학생의 데이터를 가지고 90%의 신뢰구간을 구해보면

약 4명의 학생들의 추정치(본인들의 결과)에 모평균3.5를 포함하고 있지 않은 결과가 생긴다.

 

신뢰구간 길이에 영향을 미치는 것

z값, n, 표준편차이다.

여기서 n이 커질수록 신뢰구간의 길이가 감소할 것

감소할수록 점추정치에 근접해지기 때문에 좋은 결과가 나올 것이다. (신뢰구간이 좁아질수록 정확해진다)

하지만, n이 늘어나면 그만큼 비용이 발생하는 문제.

신뢰구간이 넓다고 신뢰도가 올라가는 것이 아니다. 오히려 정확성이 떨어진다.

ex) 회계사의 연봉 예상은 0~100억일 확률이 100%이다.

 

표본오차

추정량과 모수의 차이( E(X) - M = 이게 0이면 불편추정량)

추정오차의 허용크기(B)는 우리가 정하는 것.

모평균을 추정하기 위해 필요한 표본크기를 계산하는 공식.

 

 

+ Recent posts