본문 바로가기

Data Analysis/기타 데이터

[기타 데이터] Starwars 케릭터 분석 3 (EDA / 시각화 / 리뷰)

728x90

이전 내용은 아래에서 확인 하실 수 있습니다.

 

 

 

[기타 데이터] Starwars 케릭터 분석 1 (데이터 확인)

Starwars Character 분석 데이터 출처 : https://dplyr.tidyverse.org/reference/starwars.html < 질문 > - 스타워즈 캐릭터의 성별 비율 - 성별에 따른 캐릭터 신장의 분포 - 가장 무거운 캐릭..

sks8410.tistory.com

 

 

[기타 데이터] Starwars 케릭터 분석 2 (데이터 전처리)

이전 내용은 아래에서 확인 하실 수 있습니다. - 스타워즈 캐릭터의 성별 비율 - 성별에 따른 캐릭터 신장의 분포 - 가장 무거운 캐릭.." data-og-host="sks8410.tistory.com" data-og-source-url="ht..

sks8410.tistory.com


3. EDA & Visualization

3-1 스타워즈 케릭터 성별 비율

# 스타워즈 케릭터의 성별(생물학적, 사회적) 비율

print(sw["gender"].value_counts())
print(sw["sex"].value_counts())

 

# 스타워즈 케릭터의 성별 비율 시각화

f, ax = plt.subplots(1, 2, figsize = [18, 8]) # 그래프 틀 치수

sw["gender"].value_counts().plot.pie(ax = ax[0], autopct = "%1.0f%%", shadow = True) # 파이 차트 그리기
ax[0].set_title("Starwars Gender", size = 18) # 그래프 제목
ax[0].set_ylabel("") # y 라벨 없애기

sns.countplot(data = sw, x = "sex", ax = ax[1]) # 카운터 차트 그리기
ax[1].set_title("Starwars Sex", size = 18) # 그래프 제목

plt.show()

- 남성성과 여성성의 비율이 8:2 이며 남자가 가장 많다는 것을 알 수 있습니다.

3-2 스타워즈 캐릭터 성별에 따른 신장 분포

# 캐릭터 신장 통계치 확인

sw["height"].describe()

 

 

# skewness, kurtosis 확인

print("Skewness: %f" % sw["height"].skew())
print("Kurtosis: %f" % sw["height"].kurt())

 

 

# 성별이 hermaphroditic 인 캐릭터가 하나 뿐이므로 확률 분포를 구하는 것이 불가능

sw[sw["sex"] == "hermaphroditic"]

 

 

# 성별에 따른 스타워즈 캐릭터의 신장 분포 그래프

f, ax = plt.subplots(1, 2, figsize = (16, 5))

# distplot 그리기

sns.distplot(sw[sw["sex"] == "male"]["height"], ax = ax[0])
sns.distplot(sw[sw["sex"] == "female"]["height"], ax = ax[0])
sns.distplot(sw[sw["sex"] == "robot"]["height"], ax = ax[0])
ax[0].legend(["male", "female", "robot"])

# kdeplot 그리기

sns.kdeplot(sw[sw["gender"] == "masculine"]["height"], ax = ax[1])
sns.kdeplot(sw[sw["gender"] == "feminine"]["height"], ax = ax[1])
ax[1].legend(["masculine", "feminine"])

plt.show()

- 남자 케릭터의 키가 여자 케릭터의 키보다 대체적으로 크며, 로봇의 경우 매우 작은 키를 가지고 있다는 것을 알 수 있습니다.

3-3 가장 무거운 캐릭터와 가장 가벼운 캐릭터

# 몸무게가 0인 캐릭터를 빼고 데이터 프레임 생성

sw_mass = sw[sw["mass"] != 0]

sw_mass[sw_mass["mass"] == 0]
print("몸무게가 가장 무거운 캐릭터는:", sw_mass[sw_mass["mass"] == max(sw_mass["mass"])]["name"].values, max(sw_mass["mass"]))
print("몸무게가 가장 가벼운 캐릭터는:", sw_mass[sw_mass["mass"] == min(sw_mass["mass"])]["name"].values, min(sw_mass["mass"]))

3-4 스타워즈 캐릭터의 종족 간 몸무게 비교

# 종족별 평균 몸무게 확인

weight = sw[["species", "mass"]].groupby("species").mean()

weight.head()

 

 

# 몸무게가 많은 순으로 상위 10개 종족 시각화

weight["mass"].sort_values(ascending = False).head(10).iplot(kind = "bar")

- Hutt 종족이 압도적으로 몸무게가 많이 나가며, 나머지 종족은 서로 차이는 있지만 그 편차가 크지 않은 것으로 확인 할 수 있습니다.

3-5 스타워즈 캐릭터의 몸무게와 키의 상관관계

# 몸무게 분포 확인

sw["mass"].iplot(kind = "scatter", mode = "markers")

print(max(sw["mass"]))

sw[sw["mass"] == 1358]

- 몸무게가 1358 인 Hutt 종족은 다른 데이터와 값의 차이가 너무 크므로 삭제 후 상관관계를 확인 하도록 하겠습니다.

- 몸무게가 0 인 데이터도 삭제 하도록 하겠습니다.

 

 

drop_index = sw[(sw["mass"] == 1358) | (sw["mass"] == 0)].index
sw_drop_mass = sw.drop(drop_index)

print(sw.shape)
print(sw_drop_mass.shape)

 

 

# 몸무게-키 상관관계 그래프로 그리기

fig = px.scatter(sw_drop_mass, x = "height", y = "mass", trendline = "ols", template = "plotly_white")

fig.show()

- 몸무게와 키는 양의 상관관계를 가지고 있다고 볼 수 있습니다.

5. Review

- 스타워즈 데이터는 :    
     -> 총 데이터 개수 957  
     -> 총 결측치 수 105 = 전체 데이터의 10.97%   
     -> 스타워즈에 등장하는 등장인물 수 87  
     -> 스타워즈에 등장하는 종족 수 37  

- 스타워즈 캐릭터의 성별 비율은?  
     -> 남성이고 남성 Gender를 가진 캐릭터가 80% 가량을 차지한다.

 

- 성별에 따른 캐릭터 신장의 분포는?  
     -> 남성 캐릭터의 키가 대체로 여성보다 크며, 로봇은 키가 매우 작다.

 

- 가장 무거운 캐릭터와 가장 가벼운 캐릭터는?  
     -> ['Ratts Tyerell']의 몸무게가 15.0 (으)로 가장 가볍다   
     -> ['Jabba Desilijic Tiure']의 몸무게가 1358.0 (으)로 가장 가볍다 

 

- 스타워즈 캐릭터의 키와 몸무게는 상관관계를 가질까?  
    -> 그렇다. 인간과 다른 행성에 사는 종족이지만, 키와 몸무게는 대체로 비례 관계를 보인다.

 

 

감사합니다.

728x90