데이터시각화 중간고사
작성 완료
-
문제에 대한 나의 풀이(틀릴 수 있음)
import pandas as pd
import numpy as np
from plotnine import *
import matplotlib.pyplot as plt
import seaborn as sns
-
(a)-(c)
-
(b)-(d)
x = [1, 2, 3, 4]
y = [1, 2, 4, 3]
fig, axs = plt.subplots(2,2)
(ax1, ax2), (ax3, ax4) = axs
ax1.plot(x, y, 'o:r')
ax2.plot(x, y, 'Xb')
ax3.plot(x, y, 'xm')
ax4.plot(x, y, '.--k')
fig
-
하니, 홍두깨, 고은애, 이창수
-
하니, 홍두깨, 고은애
df = pd.read_csv('https://raw.githubusercontent.com/guebin/2021DV/master/_notebooks/2021-10-25-FIFA22_official_data.csv')
df.head()
df['Loaned From']
df['Loaned From'].isnull().sum()
df['Marking']
df['Marking'].isnull().sum()
-
결측치가 많다
df = df.drop(['Loaned From', 'Marking'], axis = 1)
df.isnull().sum().sum()
df = df.dropna()
df.isnull().sum().sum()
-
5404개의 결측치가 제거되었다
def convert_currency(value):
floatvalue = 0.0
strvalue=""
if "M" in value:
strvalue=value.replace("M","").replace("€","")
floatvalue=float(float(strvalue)*1000000)
elif "K" in value:
strvalue=value.replace("K","").replace("€","")
floatvalue=float(float(strvalue)*1000)
else:
floatvalue=value.replace("€","")
return floatvalue
df['Wage'] = list(map(convert_currency, df['Wage']))
df['Wage']
df['Value'] = list(map(convert_currency, df['Value']))
df2 = df.groupby(by = 'Best Position').agg({'Value':np.mean})
-
신기한점 : 컴퓨터마다(?) 'Value'가 object 타입인지 float 타입인지가 다른것같다
-
나의 경우는 자료형을 변환하지 않아도 위와 같이 잘되는데 안되는 경우도 있나봄
df2
df2 = df2.stack().reset_index()
df2 = df2.rename(columns={'level_1':'group1', 0:'mean(Value)'})
df2
df2 = df2.sort_values(by = ['mean(Value)'], axis = 0, ascending = False)
df2 = df2.reset_index(drop = True)
df2
cnt = 0
def z(x):
global cnt
cnt += 1
if cnt <= 3:
return 'True'
else:
return 'False'
df2['Highlight'] = list(map(z, df2['mean(Value)']))
df2
ggplot(df2) + geom_bar(aes(x = 'Best Position', y = 'mean(Value)', fill = 'Highlight'), stat = 'identity')
-
문제는 alpha = 0.5로 하라고 했는데 시각화 예시는 alpha = 0.2임...
ggplot(df) + geom_point(aes(x = 'Dribbling', y = 'SlidingTackle', color = 'Age'), alpha = 0.5, size = 0.5) + facet_wrap('Best Position')
-
하니, 홍두깨, 고은애
df3 = df.loc[lambda df:(df['Best Position'] =='CAM') | (df['Best Position'] =='CB')]
-
이유는 모르겠는데 query로는 안되서 위와 같이 했음
-
문제에는 CB가 아니라 CM인데 plot은 CB로 되어있어서 CB로 했음 + (i)문제에서도 CB라고 언급함
ggplot(df3) + geom_point(aes(x = 'Dribbling', y = 'SlidingTackle', color = 'Age', size = 'Value'), alpha = 0.2 ) + facet_wrap('Best Position')
-
홍두깨
x = [0, 1, 4, 5]
y = [0, 2, 3, 5]
x2 = [5, 4.1, 1, 0]
y2 = [5, 3, 0.5, 0]
df_ = pd.DataFrame({'x':x ,'y':y})
df_['course'] = 'A'
df_
df2_ = pd.DataFrame({'x':x2 ,'y':y2})
df2_['course'] = 'B'
df2_
stamina = 100 ## 집에서 출발시 체력
x_ = 0
y_ = 0
def f(x,y):
global x_
global y_
global stamina
stamina = stamina - (((x-x_)**2 + (y-y_)**2)**0.5) ## 두 점 사이의 거리
x_ = x
y_ = y
return stamina
df_['stamina'] = list(map(f, df_['x'], df_['y']))
df_
stamina -= 70 ## A지점 도착지점에서 B지점 출발지점까지 가는데 70이 소모됨
df2_['stamina'] = list(map(f, df2_['x'], df2_['y']))
df2_
df3_ = pd.concat([df_, df2_]) ## 두 데이터프레임 합치기
df3_
ggplot(df3_) + geom_point(aes(x = 'x', y = 'y')) + geom_line(aes(x = 'x', y = 'y', size = 'stamina', color = 'course'), alpha = 0.5)
-
문제 풀고나니 느낀건데 국어를 너무 못함 ---> 문제를 제대로 파악을 못함
p = ['A'] * 2 + ['B'] * 2
s1 = [10, 20, 30, 4]
s2 = [7, 19, 23, 4]
s3 = ['one', 'two'] * 2
data = pd.DataFrame({'person':p, 'count':s1, 'goal':s2, 'season':s3})
data
data['prob'] = data['goal'] / data['count']
data
data2 = data.groupby(['person']).agg({'count':np.sum, 'goal':np.sum}).reset_index().rename(columns = {'count':'sum', 'goal':'goal_sum'})
data2
td = pd.merge(data, data2)
td
td['prob2'] = (td['goal_sum'] / td['sum']) / 2 ## 시즌이 2개라 값이 2번 들어가서 2로 나눠줌
td
ggplot(data)\
+ geom_bar(aes(x = 'person', y = 'prob', fill = 'person'), stat = 'identity')\
+ facet_wrap('season')
-
시즌별 성공확률은 B가 더 높다
-
하지만 전체 성공확률을 보면?
ggplot(td)\
+ geom_bar(aes(x = 'person', y = 'prob2', fill = 'person'), stat = 'identity')
-
A가 더 높은것을 확인할수있다
-
B가 100%확률을 기록했을 때 전체횟수가 모종의 이유(부상 치료 등)로 인해 4회밖에 되지않아 전체에 끼치는 영향력이 작아져 위와같은 결과가 발생했다