320x100
import pandas as pd
titanic = pd.read_csv('titanic.csv')
titanic
# 표현에 유의 하자
age.to_frame().info()
## Analyzing Numerical Series
# 결측치를 제외한 원소의 수를 세준다.
age.count()
# 714
# 전체길이는 891이다.
age.sum(skipna = True)
# 21205.17
# skipna = True 는 "결측치를 제외하고"라는 의미를 담고 있다.
# 즉, 결측치를 제외한 값에 대하여 sum 을 해줘라. 가 되겠다.
# 하지만 기본적으로 ()처럼 공백으로 하여도 다음과 같은 결과가 나오는 것을 보니 굳이 써줄 필요는 없을 것으로 보이기도 한다.
age.sum()
# 21205.17
# age 열에 들어있는 모든 원소의 합을 구한다.
sum(age)
# nan
# 하지만 내장함수인 sum()으로 age를 감싸주면 age의 결측치를 어떻게 처리할지 몰라서 nan값을 리턴한다.
# 이건 사소하다고 볼 수 있겠지만 중요한 부분 같다.
age.unique()
# 중복된 값을 제거하고 고유한 값 만을 순서대로 보여준다.
# 결측값인 nan도 하나의 고유한 값으로 포함된다.
# 따라서 길이는 89가 된다.
age.nunique()
# 88
# 위에서 unique로는 결측치를 포함하는 값이기 때문에 길이가 89가 나왔지만
# nunique는 결측치를 배제하고 고유한 값을 출력하는 것이기 때문에 88이 출력된다.
age.nunique(dropna = True)
# 위의 skipna와 같은 기능이다.
# 결측치를 버리고 갈지, 함께 포함하여 갈지를 정하는 것이다.
# 그렇기에 dropna가 False라면 값은 89가 나오게 된다.
age.value_counts()
# 각 고유 값들에 대한 절대도수를 가장 높은 도수부터 가장 낮은 순서대로 배열해준다.
# 절대도수는 해당 값에 대하여 몇개의 값이 있는지를 표현해주는 것으로 오른쪽에 표현되는 숫자이다.
'''
24.00 30
22.00 27
18.00 26
19.00 25
28.00 25
..
36.50 1
55.50 1
0.92 1
23.50 1
74.00 1
Name: age, Length: 88, dtype: int64
'''
# 맨위의 데이터를 해석하자면 24살의 승객이 30명이다.
# ***** 중요 *******
age.value_counts(normalize = True)
# 이렇게 하면 아래와 같은 값이 출력된다.
'''
24.00 0.042017
22.00 0.037815
18.00 0.036415
19.00 0.035014
28.00 0.035014
...
36.50 0.001401
55.50 0.001401
0.92 0.001401
23.50 0.001401
74.00 0.001401
Name: age, Length: 88, dtype: float64
'''
# 아래와 같은 값은 "절대도수"가 아닌 "상대도수"로써
# 전체중에서 어느정도의 비율을 차지하고 있는지를 표현해주고 있는 것이다.
# 1이 100%라고 보면 된다.
30/age.size
# 0.03367003367003367
# 이런식으로 age의 사이즈를 30으로 나누어 줄 수도있다.
# ***** 매우매우매우매우 중요 *******
age.value_counts(ascending=True ,bins = 5)
# ascending 은 절대도수 혹은 상대도수의 위치에 해당하는 오른쪽 끝에 위치한 것을 기준으로 해서 True의 경우는 오름차순, False의 경우에는 내림차순
# 으로 진행되며
# bins 는 binary로써 각구간의 갯수를 말한다. 전체 구간을 여기서는 5개로 나누어 준다고 입력한 것이다.
# 따라서
# 64~ 80, 48~64, 0~ 16, 32~48, 16~32 처럼 지저분해보일 수 있겠지만, 절대도수의 갯수 배열대로 정렬이 되는것이기 때문에 결과값의 지저분함은
# 어쩔 수 없지만 구간이 5개로 나뉘었음을 볼 수 있다.
'''
(64.084, 80.0] 11
(48.168, 64.084] 69
(0.339, 16.336] 100
(32.252, 48.168] 188
(16.336, 32.252] 346
Name: age, dtype: int64
'''
## Analyzing non-numerical Series
summer = pd.read_csv('summer.csv')
summer
athlete.shape
# (31165,)
# 이것의 의미는 1차원 이라는 뜻이다.
athlete.describe
'''
<bound method NDFrame.describe of 0 HAJOS, Alfred
1 HERSCHMANN, Otto
2 DRIVAS, Dimitrios
3 MALOKINIS, Ioannis
4 CHASAPIS, Spiridon
...
31160 JANIKOWSKI, Damian
31161 REZAEI, Ghasem Gholamreza
31162 TOTROV, Rustam
31163 ALEKSANYAN, Artur
31164 LIDBERG, Jimmy
Name: Athlete, Length: 31165, dtype: object>
'''
# 전체적으로 이렇게 나열 형식이다.
# 정말 미세한 차이 같지만, 인사이트에 있어서 큰 차이를 만들어낸다.
athlete.describe()
'''
count 31165
unique 22762
top PHELPS, Michael
freq 22
Name: Athlete, dtype: object
'''
# freq는 Frequency의 약자이며, Frequency는 "빈도"를 뜻한다.
# 여기서는 Top 다음에 나왔기 때문에 가장 많이 "메달"을 수여한 사람은 PEHLPS, Michael 이 된다. 그리고 그가 수상한 횟수는 22회다.
# ****** 중요 *********
# 전체적으로 결측값이 있는지 없는지 확인할때
athlete.size
# 31165
# 결측치를 포함하여 athlete가 가지고 있는 모든 행과 열의 수를 리턴한다.
athlete.count()
# 31165
# 결측치를 배제하고 athlete가 가지고 있는 모든 행의 수를 리턴한다.
# 따라서 이렇게 2개를 두고 비교해서 결측치가 있는지 없는지 구별할 수가 있다.
athlete.value_counts()
# 가장 많이 등장하는 선수의 순서대로.
athlete.value_counts(normalize=True, bins = 6)
# TypeError: bins argument only works with numeric data.
# 숫자로 다루었을때, 구간 설정이 가능하다고 한다.
# 절대도수, 상대도수는 아무래도 숫자다. 그런데 numeric이 아니라서 에러가 발생했다는 것은
# 그 구간의 기준이 될 필드가 string이면 안된다는 뜻. 숫자나 float여야 가능한것같다.
300x250
'개발일지 > Pandas' 카테고리의 다른 글
pandas 판다스 기초 5 (0) | 2022.07.15 |
---|---|
pandas 판다스 기초 4 (0) | 2022.07.15 |
pandas(판다스) 기초 2 (0) | 2022.07.14 |
pandas 기초1 (0) | 2022.07.14 |
pymssql 설치에러 해결! (0) | 2022.07.08 |