Core Mission¶
다음 질문에 답하라.
- 캐릭터는 저마다 지능, 힘 등 다양한 수치를 지니고 있다. 이러한 수치의 합이 가장 큰 캐릭터는 누구인가? 이를 보이기 위한 과정을 보여라.
- 좋은 캐릭터와 나쁜 캐릭터의 수치 분포를 알고 싶다. 이를 표현하기 위한 적절한 그래프를 선택하여 이를 위한 전처리를 진행하고, 시각화하라.
In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
In [213]:
abengers = pd.read_csv('D:/workspaces/WinterStudy2022/datasetAvengers/charcters_stats.csv')
abengers.head()
Out[213]:
Name | Alignment | Intelligence | Strength | Speed | Durability | Power | Combat | Total | |
---|---|---|---|---|---|---|---|---|---|
0 | 3-D Man | good | 50 | 31 | 43 | 32 | 25 | 52 | 233 |
1 | A-Bomb | good | 38 | 100 | 17 | 80 | 17 | 64 | 316 |
2 | Abe Sapien | good | 88 | 14 | 35 | 42 | 35 | 85 | 299 |
3 | Abin Sur | good | 50 | 90 | 53 | 64 | 84 | 65 | 406 |
4 | Abomination | bad | 63 | 80 | 53 | 90 | 55 | 95 | 436 |
In [3]:
abengers.tail()
Out[3]:
Name | Alignment | Intelligence | Strength | Speed | Durability | Power | Combat | Total | |
---|---|---|---|---|---|---|---|---|---|
606 | Yellowjacket | good | 88 | 10 | 12 | 28 | 12 | 14 | 164 |
607 | Yellowjacket II | good | 50 | 10 | 35 | 28 | 31 | 28 | 182 |
608 | Ymir | good | 50 | 100 | 27 | 100 | 83 | 28 | 388 |
609 | Zatanna | good | 75 | 10 | 23 | 28 | 100 | 56 | 292 |
610 | Zoom | bad | 50 | 10 | 100 | 28 | 72 | 28 | 288 |
In [4]:
abengers.describe()
Out[4]:
Intelligence | Strength | Speed | Durability | Power | Combat | Total | |
---|---|---|---|---|---|---|---|
count | 611.000000 | 611.000000 | 611.000000 | 611.000000 | 611.000000 | 611.000000 | 611.000000 |
mean | 44.502455 | 29.083470 | 27.306056 | 41.839607 | 40.312602 | 43.206219 | 226.250409 |
std | 32.924722 | 32.610939 | 25.760173 | 36.543849 | 34.539910 | 33.270329 | 167.324034 |
min | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 0.000000 | 1.000000 | 5.000000 |
25% | 1.000000 | 1.000000 | 1.000000 | 1.000000 | 0.000000 | 1.000000 | 5.000000 |
50% | 50.000000 | 10.000000 | 23.000000 | 32.000000 | 37.000000 | 50.000000 | 255.000000 |
75% | 75.000000 | 53.000000 | 42.000000 | 80.000000 | 67.000000 | 70.000000 | 351.500000 |
max | 113.000000 | 100.000000 | 100.000000 | 120.000000 | 100.000000 | 101.000000 | 581.000000 |
- 캐릭터는 저마다 지능, 힘 등 다양한 수치를 지니고 있다. 이러한 수치의 합이 가장 큰 캐릭터는 누구인가? 이를 보이기 위한 과정을 보여라.
- Column을 잘 살펴보면 Total이라는 속성이 있는데, 이 속성은 캐릭터의 각 수치(Intelligence, Strength, Speed, Durability, Power, Combat)의 합을 나타낸 것이다.
- 따라서 Total이 가장 높은 캐릭터를 찾으면 된다.
In [5]:
# Total이 가장 큰 값을 지니고 있는 인덱스 번호 추출
index_num = abengers['Total'].idxmax()
# iloc을 이용하여 가장 큰 값이 존재하는 행의 이름만 추출
abengers.iloc[index_num]['Name']
Out[5]:
'Martian Manhunter'
In [6]:
# Total = 581이 나오는지 확인
abengers.iloc[index_num]
Out[6]:
Name Martian Manhunter Alignment good Intelligence 100 Strength 100 Speed 96 Durability 100 Power 100 Combat 85 Total 581 Name: 361, dtype: object
- 따라서 종합 수치가 가장 높은 캐릭터는 "Martian Manhunter"이다.
- 좋은 캐릭터와 나쁜 캐릭터의 수치 분포를 알고 싶다. 이를 표현하기 위한 적절한 그래프를 선택하여 이를 위한 전처리를 진행하고, 시각화하라.
- (1) good 캐릭터와 bad 캐릭터 둘로 나눈 후
- (2) 각 캐릭터의 히트맵분포를 통해서 good과 bad의 수치가 어떻게 분포되어 있는지 대략적으로 파악한다.
In [7]:
abengers_good = abengers[abengers['Alignment'] == 'good']
abengers_good
Out[7]:
Name | Alignment | Intelligence | Strength | Speed | Durability | Power | Combat | Total | |
---|---|---|---|---|---|---|---|---|---|
0 | 3-D Man | good | 50 | 31 | 43 | 32 | 25 | 52 | 233 |
1 | A-Bomb | good | 38 | 100 | 17 | 80 | 17 | 64 | 316 |
2 | Abe Sapien | good | 88 | 14 | 35 | 42 | 35 | 85 | 299 |
3 | Abin Sur | good | 50 | 90 | 53 | 64 | 84 | 65 | 406 |
6 | Adam Monroe | good | 63 | 10 | 12 | 100 | 71 | 64 | 320 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
604 | X-Man | good | 88 | 53 | 53 | 95 | 92 | 84 | 465 |
606 | Yellowjacket | good | 88 | 10 | 12 | 28 | 12 | 14 | 164 |
607 | Yellowjacket II | good | 50 | 10 | 35 | 28 | 31 | 28 | 182 |
608 | Ymir | good | 50 | 100 | 27 | 100 | 83 | 28 | 388 |
609 | Zatanna | good | 75 | 10 | 23 | 28 | 100 | 56 | 292 |
432 rows × 9 columns
In [8]:
abengers_bad = abengers[abengers['Alignment'] == 'bad']
abengers_bad
Out[8]:
Name | Alignment | Intelligence | Strength | Speed | Durability | Power | Combat | Total | |
---|---|---|---|---|---|---|---|---|---|
4 | Abomination | bad | 63 | 80 | 53 | 90 | 55 | 95 | 436 |
5 | Abraxas | bad | 88 | 100 | 83 | 99 | 100 | 56 | 526 |
11 | Air-Walker | bad | 50 | 85 | 100 | 85 | 100 | 40 | 460 |
16 | Amazo | bad | 75 | 100 | 100 | 100 | 100 | 100 | 575 |
17 | Ammo | bad | 1 | 1 | 1 | 1 | 0 | 1 | 5 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
586 | Warp | bad | 38 | 10 | 23 | 28 | 63 | 50 | 212 |
590 | Weapon XI | bad | 1 | 1 | 1 | 1 | 0 | 1 | 5 |
593 | Willis Stryker | bad | 38 | 16 | 23 | 28 | 41 | 60 | 206 |
605 | Yellow Claw | bad | 1 | 1 | 1 | 1 | 0 | 1 | 5 |
610 | Zoom | bad | 50 | 10 | 100 | 28 | 72 | 28 | 288 |
165 rows × 9 columns
In [9]:
abengers_good = abengers_good.drop(['Alignment', 'Total'], axis = 1)
In [10]:
abengers_good
Out[10]:
Name | Intelligence | Strength | Speed | Durability | Power | Combat | |
---|---|---|---|---|---|---|---|
0 | 3-D Man | 50 | 31 | 43 | 32 | 25 | 52 |
1 | A-Bomb | 38 | 100 | 17 | 80 | 17 | 64 |
2 | Abe Sapien | 88 | 14 | 35 | 42 | 35 | 85 |
3 | Abin Sur | 50 | 90 | 53 | 64 | 84 | 65 |
6 | Adam Monroe | 63 | 10 | 12 | 100 | 71 | 64 |
... | ... | ... | ... | ... | ... | ... | ... |
604 | X-Man | 88 | 53 | 53 | 95 | 92 | 84 |
606 | Yellowjacket | 88 | 10 | 12 | 28 | 12 | 14 |
607 | Yellowjacket II | 50 | 10 | 35 | 28 | 31 | 28 |
608 | Ymir | 50 | 100 | 27 | 100 | 83 | 28 |
609 | Zatanna | 75 | 10 | 23 | 28 | 100 | 56 |
432 rows × 7 columns
In [11]:
abengers_bad = abengers_bad.drop(['Alignment', 'Total'], axis = 1)
abengers_bad
Out[11]:
Name | Intelligence | Strength | Speed | Durability | Power | Combat | |
---|---|---|---|---|---|---|---|
4 | Abomination | 63 | 80 | 53 | 90 | 55 | 95 |
5 | Abraxas | 88 | 100 | 83 | 99 | 100 | 56 |
11 | Air-Walker | 50 | 85 | 100 | 85 | 100 | 40 |
16 | Amazo | 75 | 100 | 100 | 100 | 100 | 100 |
17 | Ammo | 1 | 1 | 1 | 1 | 0 | 1 |
... | ... | ... | ... | ... | ... | ... | ... |
586 | Warp | 38 | 10 | 23 | 28 | 63 | 50 |
590 | Weapon XI | 1 | 1 | 1 | 1 | 0 | 1 |
593 | Willis Stryker | 38 | 16 | 23 | 28 | 41 | 60 |
605 | Yellow Claw | 1 | 1 | 1 | 1 | 0 | 1 |
610 | Zoom | 50 | 10 | 100 | 28 | 72 | 28 |
165 rows × 7 columns
In [12]:
# abengers의 Name을 모두 인덱스로 바꾼 후, Name 열 삭제
abengers_good.index = abengers_good['Name']
abengers_good = abengers_good.drop(['Name'], axis = 1)
In [13]:
abengers_bad.index = abengers_bad['Name']
abengers_bed = abengers_bad.drop(['Name'], axis = 1)
In [14]:
# abengers_good을 기준으로 heatmap 생성
# 중간값을 40으로 설정
plt.figure(figsize = (20, 20))
sns.heatmap(
abengers_good,
center = 40,
cbar = True,
)
plt.show()
In [15]:
# abengers_good을 기준으로 heatmap 생성
# 중간값을 40으로 설정
plt.figure(figsize = (20, 20))
sns.heatmap(
abengers_bed,
center = 40,
cbar = True,
)
plt.show()
In [16]:
# 파란색으로 인해 능력치 분포가 잘 보이지 않으므로
# 능력치가 1이여서 전투에 쓸모가 없을 것 같은 친구들은
# 모두 제외한다.
abengers_not_weak = abengers[abengers['Total'] != 5]
abengers_not_weak
Out[16]:
Name | Alignment | Intelligence | Strength | Speed | Durability | Power | Combat | Total | |
---|---|---|---|---|---|---|---|---|---|
0 | 3-D Man | good | 50 | 31 | 43 | 32 | 25 | 52 | 233 |
1 | A-Bomb | good | 38 | 100 | 17 | 80 | 17 | 64 | 316 |
2 | Abe Sapien | good | 88 | 14 | 35 | 42 | 35 | 85 | 299 |
3 | Abin Sur | good | 50 | 90 | 53 | 64 | 84 | 65 | 406 |
4 | Abomination | bad | 63 | 80 | 53 | 90 | 55 | 95 | 436 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
606 | Yellowjacket | good | 88 | 10 | 12 | 28 | 12 | 14 | 164 |
607 | Yellowjacket II | good | 50 | 10 | 35 | 28 | 31 | 28 | 182 |
608 | Ymir | good | 50 | 100 | 27 | 100 | 83 | 28 | 388 |
609 | Zatanna | good | 75 | 10 | 23 | 28 | 100 | 56 | 292 |
610 | Zoom | bad | 50 | 10 | 100 | 28 | 72 | 28 | 288 |
434 rows × 9 columns
In [17]:
abengers_good_not_weak = abengers_not_weak[abengers_not_weak['Alignment'] == 'good']
abengers_bad_not_weak = abengers_not_weak[abengers_not_weak['Alignment'] == 'bad']
In [18]:
abengers_good_not_weak.index = abengers_good_not_weak['Name']
abengers_bad_not_weak.index = abengers_bad_not_weak['Name']
In [19]:
abengers_good_not_weak = abengers_good_not_weak.drop(
['Name', 'Total', 'Alignment'],
axis = 1)
In [20]:
abengers_good_not_weak
Out[20]:
Intelligence | Strength | Speed | Durability | Power | Combat | |
---|---|---|---|---|---|---|
Name | ||||||
3-D Man | 50 | 31 | 43 | 32 | 25 | 52 |
A-Bomb | 38 | 100 | 17 | 80 | 17 | 64 |
Abe Sapien | 88 | 14 | 35 | 42 | 35 | 85 |
Abin Sur | 50 | 90 | 53 | 64 | 84 | 65 |
Adam Monroe | 63 | 10 | 12 | 100 | 71 | 64 |
... | ... | ... | ... | ... | ... | ... |
X-Man | 88 | 53 | 53 | 95 | 92 | 84 |
Yellowjacket | 88 | 10 | 12 | 28 | 12 | 14 |
Yellowjacket II | 50 | 10 | 35 | 28 | 31 | 28 |
Ymir | 50 | 100 | 27 | 100 | 83 | 28 |
Zatanna | 75 | 10 | 23 | 28 | 100 | 56 |
299 rows × 6 columns
In [21]:
abengers_bad_not_weak= abengers_bad_not_weak.drop(
['Name', 'Total', 'Alignment'],
axis = 1)
In [22]:
abengers_bad_not_weak
Out[22]:
Intelligence | Strength | Speed | Durability | Power | Combat | |
---|---|---|---|---|---|---|
Name | ||||||
Abomination | 63 | 80 | 53 | 90 | 55 | 95 |
Abraxas | 88 | 100 | 83 | 99 | 100 | 56 |
Air-Walker | 50 | 85 | 100 | 85 | 100 | 40 |
Amazo | 75 | 100 | 100 | 100 | 100 | 100 |
Annihilus | 75 | 80 | 47 | 56 | 59 | 64 |
... | ... | ... | ... | ... | ... | ... |
Vulture | 63 | 22 | 47 | 56 | 40 | 56 |
Walrus | 50 | 28 | 8 | 50 | 11 | 20 |
Warp | 38 | 10 | 23 | 28 | 63 | 50 |
Willis Stryker | 38 | 16 | 23 | 28 | 41 | 60 |
Zoom | 50 | 10 | 100 | 28 | 72 | 28 |
122 rows × 6 columns
In [23]:
# abengers_good_not_weak 기준으로 heatmap 생성
# 중간값을 40으로 설정
plt.figure(figsize = (20, 20))
sns.heatmap(
abengers_good_not_weak,
center = 40,
cbar = True,
)
plt.show()
In [24]:
# abengers_bad_not_weak 기준으로 heatmap 생성
# 중간값을 40으로 설정
plt.figure(figsize = (20, 20))
sns.heatmap(
abengers_bad_not_weak,
center = 40,
cbar = True,
)
plt.show()
- heatmap을 통해서 그래프를 그린 결과, good 진영과 bad 진영의 능력치 분포는 매우 유사한 것을 확인할 수 있었다.
Extra Mission¶
- 다음 질문에 답하시오
- 캐릭터는 저마다 지능, 힘, ... 등 다양한 수치를 지니고 있다. 또한 각 캐릭터는 DC, 마블 등 다양한 코믹스 회사를 바탕으로 하고 있다. 어떤 코믹스 회사의 캐릭터들이 능력치 합의 평균이 가장 큰가? 과정을 상세히 보여라.
- 좋은 캐릭터와 나쁜 캐릭터가 격돌한다고 한다. 격돌하는 경우 능력치의 합의 평균이 큰 팀이 이긴다고 한다. 단 불의를 못참는 중립 캐릭터들은 good과 bad 중 열세인 팀에 가담한다. 이러한 상황일 때 결과적으로 어떤 캐릭터 진영이 승리할 것인가?
- 이 데이터를 이용해 진행하고 싶은 EDA 및 시각화가 있다면 자유롭게 진행하여라.
- 캐릭터는 저마다 지능, 힘, ... 등 다양한 수치를 지니고 있다. 또한 각 캐릭터는 DC, 마블 등 다양한 코믹스 회사를 바탕으로 하고 있다. 어떤 코믹스 회사의 캐릭터들이 능력치 합의 평균이 가장 큰가? 과정을 상세히 보여라.
In [64]:
# 먼저, 캐릭터의 출처를 갖고 있는 csv를 찾아 호출
hero_id = pd.read_csv('D:/workspaces/WinterStudy2022/datasetAvengers/characters.csv')
hero_id.head()
Out[64]:
characterID | name | |
---|---|---|
0 | 1009220 | Captain America |
1 | 1010740 | Winter Soldier |
2 | 1009471 | Nick Fury |
3 | 1009552 | S.H.I.E.L.D. |
4 | 1009228 | Sharon Carter |
In [26]:
abengers_col = abengers['Name']
abengers_col
Out[26]:
0 3-D Man 1 A-Bomb 2 Abe Sapien 3 Abin Sur 4 Abomination ... 606 Yellowjacket 607 Yellowjacket II 608 Ymir 609 Zatanna 610 Zoom Name: Name, Length: 611, dtype: object
In [249]:
hero_id = pd.read_csv('D:/workspaces/WinterStudy2022/datasetAvengers/marvel_characters_info.csv')
id_card = []
# abengers_col을 기준으로 for문을 진행한다.
for i in range(len(abengers_col)):
# 만약, hero_id와 i번째 abengers_col이 같다면
if (hero_id['Name'] == abengers_col[i]).any() == True:
# i번째 abengers_col과 같은 이름값을 hero_id에서 찾아 인덱스를 반환한다.
temp = hero_id.index[hero_id['Name'] == abengers_col[i]]
# hero_id에서 'Publisher'를 찾아서 반환한다. (타입 : Series)
id = hero_id['Publisher'][temp]
# 같은 이름의 존재로 인해 publisher가 두 개 이상 검색된 경우가 있으므로
# drop_duplicates()를 이용하여 중복값을 제거하고
# values를 통해 값만 추출한다.
# (결과타입 : list)
id = id.drop_duplicates().values
# id의 [0]번째 값을 추출하여 append한다.
id_card.append(id[0])
else:
id = "NONE"
id_card.append(id)
In [248]:
id_card
Out[248]:
['NONE', 'Marvel Comics', 'Dark Horse Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'NBC - Heroes', 'DC Comics', 'NONE', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'NBC - Heroes', 'DC Comics', 'Wildstorm', 'DC Comics', 'Marvel Comics', 'NBC - Heroes', 'Marvel Comics', 'Marvel Comics', 'Image Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Image Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', nan, 'Marvel Comics', 'DC Comics', 'DC Comics', 'NONE', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'NONE', 'NONE', 'DC Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Icon Comics', 'Marvel Comics', 'SyFy', 'Image Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Hanna-Barbera', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'NONE', 'NONE', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'NONE', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'NONE', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Image Comics', 'NONE', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'SyFy', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Team Epic TV', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'NONE', 'DC Comics', 'DC Comics', 'Team Epic TV', nan, 'NBC - Heroes', 'Marvel Comics', 'Marvel Comics', 'Image Comics', 'HarperCollins', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'NONE', 'Marvel Comics', 'Image Comics', 'Image Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'HarperCollins', 'ABC Studios', 'Marvel Comics', 'Marvel Comics', 'Universal Studios', 'DC Comics', nan, 'Marvel Comics', 'Dark Horse Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'NBC - Heroes', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Dark Horse Comics', 'Marvel Comics', 'Marvel Comics', 'NBC - Heroes', 'DC Comics', 'Marvel Comics', 'HarperCollins', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', nan, 'NONE', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'SyFy', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Shueisha', 'Marvel Comics', 'NONE', 'NONE', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'Sony Pictures', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'NONE', 'DC Comics', 'DC Comics', 'Dark Horse Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'NBC - Heroes', 'Icon Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'NONE', 'DC Comics', nan, 'Marvel Comics', 'NONE', 'Marvel Comics', 'Marvel Comics', 'NBC - Heroes', 'Marvel Comics', 'ABC Studios', 'ABC Studios', 'Dark Horse Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Icon Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', nan, 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Dark Horse Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'NBC - Heroes', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Team Epic TV', 'Microsoft', 'DC Comics', 'NBC - Heroes', 'Marvel Comics', 'DC Comics', 'NBC - Heroes', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'NBC - Heroes', 'DC Comics', 'Marvel Comics', 'Wildstorm', 'DC Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'NBC - Heroes', 'DC Comics', 'Marvel Comics', 'DC Comics', 'NBC - Heroes', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Dark Horse Comics', 'NONE', 'Marvel Comics', 'Marvel Comics', 'NONE', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Shueisha', 'NBC - Heroes', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'NBC - Heroes', 'SyFy', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Team Epic TV', 'Marvel Comics', 'NONE', 'DC Comics', 'Image Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'NBC - Heroes', 'DC Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'HarperCollins', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'SyFy', 'DC Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Icon Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Image Comics', 'Image Comics', 'HarperCollins', 'Marvel Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'NONE', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Image Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'NONE', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Image Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'NONE', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'ABC Studios', 'Marvel Comics', 'NONE', 'Marvel Comics', 'NONE', 'DC Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'DC Comics', 'NBC - Heroes', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', nan, 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'HarperCollins', 'Marvel Comics', 'Marvel Comics', 'NBC - Heroes', 'DC Comics', 'DC Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Team Epic TV', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'NONE', 'Image Comics', 'NONE', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'NONE', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'DC Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'Marvel Comics', 'DC Comics', 'DC Comics']
In [250]:
hero_id['Publisher'][2]
Out[250]:
'DC Comics'
In [251]:
len(id_card)
Out[251]:
611
In [252]:
len(abengers)
Out[252]:
611
In [253]:
abengers['Publisher'] = id_card
In [254]:
# 위의 복잡한 과정을 거쳐 깔끔하게 publisher가 출력된 것을 확인할 수 있다.
abengers
Out[254]:
Name | Alignment | Intelligence | Strength | Speed | Durability | Power | Combat | Total | Publisher | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 3-D Man | good | 50 | 31 | 43 | 32 | 25 | 52 | 233 | NONE |
1 | A-Bomb | good | 38 | 100 | 17 | 80 | 17 | 64 | 316 | Marvel Comics |
2 | Abe Sapien | good | 88 | 14 | 35 | 42 | 35 | 85 | 299 | Dark Horse Comics |
3 | Abin Sur | good | 50 | 90 | 53 | 64 | 84 | 65 | 406 | DC Comics |
4 | Abomination | bad | 63 | 80 | 53 | 90 | 55 | 95 | 436 | Marvel Comics |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
606 | Yellowjacket | good | 88 | 10 | 12 | 28 | 12 | 14 | 164 | Marvel Comics |
607 | Yellowjacket II | good | 50 | 10 | 35 | 28 | 31 | 28 | 182 | Marvel Comics |
608 | Ymir | good | 50 | 100 | 27 | 100 | 83 | 28 | 388 | Marvel Comics |
609 | Zatanna | good | 75 | 10 | 23 | 28 | 100 | 56 | 292 | DC Comics |
610 | Zoom | bad | 50 | 10 | 100 | 28 | 72 | 28 | 288 | DC Comics |
611 rows × 10 columns
In [258]:
# Publisher가 검색되지 않았거나 Marvel Comics, DC Comics가 아닌 값은 모두 삭제한다.
abengers_MD = abengers[(abengers['Publisher'] == 'Marvel Comics') | (abengers['Publisher'] == 'DC Comics')]
abengers_MD
Out[258]:
Name | Alignment | Intelligence | Strength | Speed | Durability | Power | Combat | Total | Publisher | |
---|---|---|---|---|---|---|---|---|---|---|
1 | A-Bomb | good | 38 | 100 | 17 | 80 | 17 | 64 | 316 | Marvel Comics |
3 | Abin Sur | good | 50 | 90 | 53 | 64 | 84 | 65 | 406 | DC Comics |
4 | Abomination | bad | 63 | 80 | 53 | 90 | 55 | 95 | 436 | Marvel Comics |
5 | Abraxas | bad | 88 | 100 | 83 | 99 | 100 | 56 | 526 | Marvel Comics |
7 | Adam Strange | good | 1 | 1 | 1 | 1 | 0 | 1 | 5 | DC Comics |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
606 | Yellowjacket | good | 88 | 10 | 12 | 28 | 12 | 14 | 164 | Marvel Comics |
607 | Yellowjacket II | good | 50 | 10 | 35 | 28 | 31 | 28 | 182 | Marvel Comics |
608 | Ymir | good | 50 | 100 | 27 | 100 | 83 | 28 | 388 | Marvel Comics |
609 | Zatanna | good | 75 | 10 | 23 | 28 | 100 | 56 | 292 | DC Comics |
610 | Zoom | bad | 50 | 10 | 100 | 28 | 72 | 28 | 288 | DC Comics |
504 rows × 10 columns
In [275]:
# publisher를 기준으로 groupby 실시
abengers_group = abengers_MD[['Total','Publisher']].groupby(['Publisher']).mean()
abengers_group
Out[275]:
Total | |
---|---|
Publisher | |
DC Comics | 254.848485 |
Marvel Comics | 244.395280 |
In [296]:
chart1 = sns.barplot(x = abengers_group['Total'].keys(), y = abengers_group['Total'])
chart1.set_title("DC vs Marvel", size = 20)
plt.show()
- DC Comics = 254.848485, Marvel Comics = 244.395280 으로, DC 캐릭터의 능력치 합 평균이 근소하게 높은 것을 확인할 수 있다.
- 좋은 캐릭터와 나쁜 캐릭터가 격돌한다고 한다. 격돌하는 경우 능력치의 합의 평균이 큰 팀이 이긴다고 한다. 단 불의를 못참는 중립 캐릭터들은 good과 bad 중 열세인 팀에 가담한다. 이러한 상황일 때 결과적으로 어떤 캐릭터 진영이 승리할 것인가?
In [292]:
abengers_ali = abengers[['Alignment', 'Total']].groupby(['Alignment']).mean()
abengers_ali
Out[292]:
Total | |
---|---|
Alignment | |
bad | 247.212121 |
good | 214.990741 |
neutral | 355.363636 |
In [295]:
chart2 = sns.barplot(x = abengers_ali['Total'].keys(), y = abengers_ali['Total'])
chart2.set_title('Alignment Stat Total', size = 20)
plt.show()
- good의 능력치 합 평균은 214.990741이고, bad는 247.212121로 good의 능력치 합 평균이 근소하게 낮아서 neutral이 good에 가담할 것이다.
- 따라서 good진영의 능력치는 214.990741+355.363636 = 570.354377이며, bad진영의 능력치는 247.212121로 good 진영이 승리할 것이다.
'전문지식 함양 > TIL' 카테고리의 다른 글
[프로그래머스 겨울방학 인공지능 과정] numpy 복습 2 (0) | 2022.01.18 |
---|---|
[프로그래머스 겨울방학 인공지능 과정] numpy 복습 (0) | 2022.01.17 |
[프로그래머스 겨울방학 인공지능 과정] EDA Project1 (0) | 2022.01.14 |
[프로그래머스 겨울방학 인공지능 과정] EDA example (0) | 2022.01.13 |
[프로그래머스 겨울방학 인공지능 과정] FLASK 실습 (0) | 2022.01.13 |