Machine Learning/[Kaggle Course] Data Visualization

[Kaggle Course] Bar Charts, Heatmaps

WakaraNai 2020. 11. 13. 00:15
728x90
반응형

이번 튜토리얼에서는 미국 교통부에서 제공하는 비행기 지연시간에 대한 dataset을 사용할 예정입니다.

Excel에서 이 CSV 파일을 열면 매월(1 = 1월, 2 = 2월 등) 행과 각 항공사 코드에 대한 열이 표시됩니다.

 

각 cell은 항공사, 그리고 월별 분 단위의 평균 비행 지연 시간을 의미합니다.

음수로된 cell은, 일찍 도착한 경우가 많았음을 의미합니다.

예로, 1월에 American Airlines flight 항공사(AA)는대략 7분 정도 지연되었고,

4월에 Alaska Airline 항공사(AS)는 대략 3분 이르게 도착했습니다.

 

 

Load the data

# Path of the file to read
flight_filepath = "../input/flight_delays.csv"

# Read the file into a variable flight_data
flight_data = pd.read_csv(flight_filepath, index_col="Month")

# Print the data
flight_data
#dataset이 작다면 그냥 다 출력해보는 것도 괜찮아요

 

'Month' column의 내용을 row의 label로 쓰겠다고 했네요.

월별 숫자만 들어가 있기에 숫자 데이터 그 상태로 이용하겠습니다. 여기선 'parse_dates=True'를 사용하지 않을게요.

상세한 일별날짜까지 꼭 알아야 하는 것은 아니니, 굳이 날짜 데이터형으로 바꿔서 크기를 잡아먹을 필요가 없으니깐요.

 

 

 

Bar chart >> 하나의 column에 대해서만 알고 싶을 때

Spirit Airlines 항공사(NK)의 평균 도착 지연 시간을 bar chart로 월별로 그려보고 싶다고 합시다.

 

  • sns.barplot 
    • x=flight_data.index : 가로축에 사용할 데이터를 결정. 각각의 row마다 index들을 가진 column(월별)을 선택함.
    • y=flight_data['NK'] : 세로축에 사용할 column을 결정. 
      • data.index는 indexing column을 선택해줌
      • data['column_name']은 반드시 사용해야 함.
      • We always have to use this special notation to select the indexing column
# Set the width and height of the figure
plt.figure(figsize=(10,6))

# Add title
plt.title("Average Arrival Delay for Spirit Airlines Flights, by Month")

# Bar chart showing average arrival delay for Spirit Airlines flights by month
# customizing text (title과 vertical axis label), and size of figure
sns.barplot(x=flight_data.index, y=flight_data['NK'])

# Add label for vertical axis
plt.ylabel("Arrival delay (in minutes)")

 

 

Heatmap > 두 개의 조건 중 최고의 조합, 최악의 조합에 대해 알고 싶을 때

sns.heatmap : 각각의 cell에 입혀진 색은 수치와 일치

  • data=flight_data : 각 cell을 채워넣어줄 data를 선택
  • annot=True :각 cell에 정확한 숫자값도 나오게 해줌.
  • data.index는 indexing column을 선택해줌
# Set the width and height of the figure
plt.figure(figsize=(14,7))

# Add title
plt.title("Average Arrival Delay for Each Airline, by Month")

# Heatmap showing average arrival delay for each airline by month
sns.heatmap(data=flight_data, annot=True)

# Add label for horizontal axis
plt.xlabel("Airline")

위의 차트를 자세히 보시면, 연말에 모든 항공사가 대부분 검은색을 띄네요.

이를 통해 각 항공사는 특히 9~11월에 스케줄을 잘 지키는/유지하는 것이 좋겠다고 제안해줄 수 있겠지요.

 


Example

 

Scenario

당신은 video game을 만드려고 합니다. IGN Game Reviews 게임 회사의 열렬한 독자로서 가장 최근에 출시된 대부분의 게임을 들었습니다. 전문가로부터 그 게임들의 랭킹도 함께 받았는데요 0점(Disaster)부터 10점(Masterpiece까지 있네요.

 

www.ign.com/reviews/games 를 이용하여 출시될 게임의 설계에 도움을 주려 합니다. 당해히도, 누군가 CSV 파일로 랭킹 내용을 요약해두었네요.

 

 

Setup

import pandas as pd
pd.plotting.register_matplotlib_converters()
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
print("Setup Complete")

# Set up code checking
import os
if not os.path.exists("../input/ign_scores.csv"):
    os.symlink("../input/data-for-datavis/ign_scores.csv", "../input/ign_scores.csv") 
from learntools.core import binder
binder.bind(globals())
from learntools.data_viz_to_coder.ex3 import *
print("Setup Complete")

 

 

1. Load the data

IGN data에서 "Platform" column을 index로 쓰려 합니다.

# Path of the file to read
ign_filepath = "../input/ign_scores.csv"

# Fill in the line below to read the file into a variable ign_data
ign_data = pd.read_csv(ign_filepath, index_col="Platform")

 

 

2. Review the data

#print the entire dataset
print(ign_data)

# Fill in the line below: What is the highest average score received by PC games,
# for any platform?
high_score = max(ign_data.loc['PC'])
#7.759930

# Fill in the line below: On the Playstation Vita platform, which genre has the 
# lowest average score? Please provide the name of the column, and put your answer 
# in single quotes (e.g., 'Action', 'Adventure', 'Fighting', etc.)
worst_genre = 'Simulation'

맨 윗줄 코드를 실행하면 전체 데이터가 보이며, 각 플랫폼마다 장르에 따른 평균 점수들이 적혀 있습니다.

그걸 세세히 보면서 아래의 두 질문에 답해봅시다.

 

 

 

3. Which platform is best?

당신의 최애 비디오 게임은 Wii의 Mario Kart이었습니다. IGN도 그것은 대단한 게임이라고 인정했죠. 

rating이 8.9를 기록했으니까요!

이 게임의 성공에 자극을 받아 Wii 플랫폼에서 당신만의 레이싱 게임을 만들어보려 합니다.

 

Part A

각 platform마다, 각 racing games마다의 평균 점수를 보여주는 bar chart를 그려봅시다.

#ign_data.columns : to check column name related racing game
# Bar chart showing average score for racing games by platform
plt.figure(figsize=(20,4))
sns.barplot(x=ign_data.index, y=ign_data['Racing'])

 

Part B

bar chart를 보면서 Wii 플랫폼은 racing game에서 높은 점수를 받을 수 있을지 예측해보세요.

아니라면 어떤 플랫폼이 최고인 것처럼 보이나요?

 

>>>Xbox One 플랫폼이 가장 높은 점수를 차지하네요.

그러니 Wii 플랫폼이 아닌 Xbox one 플랫폼에서 레이싱게임을 만들어보세요.

 

 

4. All possible combinations!

결국, Wii에서 레이싱 게임을 만들지 않기로 결정했지만, 비디오 게임을 만들고자 하는 의지는 여전하다고 합시다.

당신의 게임 관심사는 상당히 광범위하기에 꼭 레이싱 외 장르도 보자구요.

당신은 IGN data를 사용하여 그 장르와 플랫폼을 새롭게 선택하려 합니다.

 

Part A

각 platform과 genre마다 평균 점수를 heatmap으로 그려봅시다.

# Heatmap showing average game score by platform and genre
plt.figure(figsize=(14,14))
sns.heatmap(data=ign_data, annot=True)

Part B

어떤 장르와 플랫폼을 선택했을 때 가장 높은 평균 점수를 얻을 수 있나요?  >>>  'Simulation' and 'PS4' (9.2)

 

어떤 조합은 가장 낮은 점수를 받고요?  >>>  Shooting and Fighting genre for Game Boy Color (4.5)

 

728x90
반응형