99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀數(shù)據(jù)告訴你:遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?
數(shù)據(jù)告訴你:遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?
2020-07-07
收藏

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?

CDA數(shù)據(jù)分析師 出品

作者:澤龍、Mika

數(shù)據(jù):真達(dá)

后期:澤龍

【導(dǎo)讀】

CBA重啟開賽,遼寧為什么從冠軍隊變成魚腩隊?是侄子坑叔,還是亞洲第一控衛(wèi)變身綜藝咖,本期我們用全面的數(shù)據(jù)證明到底誰害了遼寧隊!

Python技術(shù)分析請看第六部分。

Show me data,用數(shù)據(jù)說話

今天我們聊一聊 遼寧隊

CBA做為中國職業(yè)體育最先重啟的聯(lián)賽,真的是萬眾矚目,在第一階段最后一場比賽廣東對江蘇的比賽中,鐘南山鐘老親臨現(xiàn)場,做為中國籃球界的女婿,鐘老真的為CBA重啟操碎了心。CBA這次復(fù)賽重啟結(jié)果也很不錯,堪稱模范。

而本期我們要聊的是遼寧隊,用數(shù)據(jù)解讀一支爭冠隊如何變成了魚腩隊?

文章要點:

遼寧隊勝負(fù)場得分和命中率

不同球員的平均出場時間

遼寧隊勝負(fù)場失誤情況

外援與國內(nèi)球員平均得分對比

用Python分析遼寧隊比賽數(shù)據(jù)

01志在衛(wèi)冕的遼寧隊

從爭冠隊到魚腩隊

遼寧隊在賽季剛開始還算順風(fēng)順?biāo)?,但是?fù)賽重啟后,遼寧隊?wèi)?zhàn)績可謂是糟糕透頂,連敗北京、廣州、浙江后,郭士強(qiáng)成為背鍋的那個人,黯然下課。真是大侄子坑老叔,一個愿打一個愿挨。

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?

之后,遼寧虐兩個不強(qiáng)的隊后,遇到強(qiáng)隊又比賽落敗,真的很難聯(lián)想到這是一支爭冠的球隊,這次我們結(jié)合數(shù)據(jù),聊一聊遼寧變成這樣到底誰應(yīng)該背鍋?

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?

賽季剛開始的遼寧隊算是頂級強(qiáng)隊,我們來看下當(dāng)初那只遼寧隊,先看到分情況:

全部比賽-勝場得分曲線圖

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?

全部比賽-負(fù)場得分曲線圖

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?

折線圖來看,遼寧勝場得分都是100分以上,負(fù)場也幾乎過100了,證明遼寧隊進(jìn)攻完全沒有問題,當(dāng)時還有師弟這樣的CBA詹姆斯, 一個人可以解決很多問題,當(dāng)時的遼寧真的強(qiáng)。

復(fù)賽后的遼寧隊的得分下降到什么程度?焦灼的比賽得分剛到100.被虐得體無完膚的比賽得分都是在垃圾時間刷分,整體效率下降太多。

02命中率不穩(wěn)定

郭士強(qiáng)為此下課

再看到整體命中率,我們分別統(tǒng)計了勝負(fù)場次,拉了折線圖出來:

全部比賽-勝場命中率曲線圖

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?

全部比賽-負(fù)場命中率曲線圖

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?

罰球數(shù)據(jù)方面,復(fù)賽后所有球隊都有下滑,這個可以理解,畢竟很久沒有打比賽了。

三分球遼寧隊數(shù)據(jù)真的慘不忍睹,尤其是復(fù)賽后的輸球的幾場,命中率只有30%多,這和廣東新疆等目標(biāo)球隊差距太大了。復(fù)賽后和浙江的比賽二分命中率跌破50%,在以前根本不敢相信,這也是郭士強(qiáng)下課的主要原因。二分命中率低只能說明訓(xùn)練不到位,要不就是場上球員太累了。

大家一直在詬病遼寧隊的輪換,所以我們也分析了球員出場時間,制作了餅圖。

03奇葩的4+2輪換

只要主力不累死就不能下

這是本賽季所有比賽的球員出場時間圖:

不同球員的平均出場時間

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?

把外援去除,郭艾倫、趙繼偉、韓德君、李曉旭、劉志軒、賀天舉構(gòu)成了主要輪換,看這還算符合CBA球隊常規(guī)輪換人次。

復(fù)賽后,李曉旭受傷,劉志軒精神游離,賀天舉有復(fù)蘇的跡象,但是遠(yuǎn)遠(yuǎn)達(dá)不到為球隊分憂的狀態(tài),因為防守實在太差了。所以只剩下郭艾倫、韓德君、趙繼偉了,再加上1個外援,組成了奇葩的4人主力+2人輪換陣容。

然后就有了孫銘徽完爆亞洲第一后衛(wèi),那場比賽孫銘徽出場40.3分鐘,郭艾倫出場46.8分鐘,真是只要不累死就要上。

通過上面的數(shù)據(jù)來看,輪換是遼寧隊復(fù)賽后最大的問題,郭士強(qiáng)為此下課也合情合理。但是外教用人比郭士強(qiáng)還狠我們就看不明白了,遼寧隊是真的破罐子破摔了么?郭艾倫場均打滿全場是什么操作?就算是郭艾倫的球隊也不能場場打滿吧。

04沒有超強(qiáng)得分能力的保證

失誤多不可能贏球

在分析遼寧蛻變的同時,也發(fā)現(xiàn)了一些之前球隊的隱患,分享給諸位。

這是遼寧隊勝負(fù)場次分別的失誤次數(shù):

全部比賽-勝場失誤曲線圖

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?

全部比賽-負(fù)場失誤曲線圖

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?

看看這個曲線,要是換我們的杜鋒杜指導(dǎo)帶隊,估計每場都能出好多小視頻,瘋狂輸出,打不了幾場全隊就剩不下什么人了。在沒看到數(shù)據(jù)之前,覺得見誰削誰的遼寧隊場均失誤應(yīng)該會很少,這張圖顛覆了我的認(rèn)知,假如不看隊名,我以為是福建這種只進(jìn)攻不防守的球隊?wèi)?yīng)該有的數(shù)據(jù)表現(xiàn)。

05少了一個外援

誰來分擔(dān)得分壓力?

再看到外援和國內(nèi)球員的平均得分:

外援-國內(nèi)球員平均得分對比

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?

這個比例在CBA倒是很常見,外援占有球隊的一半出手權(quán),剩下一半才是國內(nèi)球員的,也證明了師弟在遼寧隊真的很重要。郭艾倫單核帶隊真的很難,這倒不是說韓德君不是核心,在CBA的FIBA規(guī)則下,內(nèi)線帶隊真的太過艱難了。

這也側(cè)面就說明了復(fù)賽之后遼寧體現(xiàn)的問題,失去了2名外援,就算新外援梅奧和師弟表現(xiàn)的平起平坐,但是國內(nèi)球員的得分并沒有增加,以前得分的還是得分,以前不出場的還是不出場。這算下來就少了將近20分,和CBA復(fù)賽后國內(nèi)球員積極的表現(xiàn)形成了鮮明的對比。


06用Python帶你分析

遼寧隊比賽數(shù)據(jù)


我們使用Python獲取并分析了搜狐體育CBA數(shù)據(jù)中心遼寧隊的比賽和技術(shù)統(tǒng)計數(shù)據(jù),以下為關(guān)鍵部分代碼:

1. 數(shù)據(jù)讀入

首先導(dǎo)入分析所需包,并讀入數(shù)據(jù)集。

# 導(dǎo)入包
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import re 

from pyecharts.charts import Bar, Line, Pie, Page
from pyecharts import options as opts 
from pyecharts.globals import SymbolType, WarningType
WarningType.ShowWarning = False

import warnings
warnings.filterwarnings('ignore')

匯總數(shù)據(jù)中包含了從2019-11-01至2020-07-02日的交戰(zhàn)匯總數(shù)據(jù),共37場,數(shù)據(jù)格式如下:

# 匯總數(shù)據(jù)
df_all = pd.read_excel('../data/遼寧交戰(zhàn)匯總.xlsx')
df_all.head() 

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?


技術(shù)數(shù)據(jù)中包含了每一場比賽選手的詳細(xì)技術(shù)數(shù)據(jù),數(shù)據(jù)預(yù)覽如下:

# 技術(shù)數(shù)據(jù)
df_skill = pd.read_excel('../data/詳細(xì)技術(shù)數(shù)據(jù)-修改版.xlsx')
df_skill.head()    

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?


2. 數(shù)據(jù)預(yù)處理

此處對首發(fā)數(shù)據(jù)進(jìn)行清洗。

# 循環(huán)
df_skill2 = pd.DataFrame() 

for i in df_skill['場序'].drop_duplicates():
    # 前五行填1
    df_sel = df_skill[df_skill['場序'] == i]
    df_sel.iloc[:5, 0] = 1
    # 后面填0 
    df_sel.iloc[5:-1, 0] = 0
    # 追加
    df_skill2 = df_skill2.append(df_sel, ignore_index=True) 

df_skill2['首發(fā)'] = df_skill2['首發(fā)'].replace('總計', np.nan)
df_skill2.head()   

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?


3. 數(shù)據(jù)可視化

此處我們分析:

  1. 主要球員贏球/輸球的比賽各項數(shù)據(jù)(籃板/助攻/失誤)
  2. 球員出場時間占比
  3. 2020年6月前比賽得分曲線圖
  4. 外援/國內(nèi)球員平均得分曲線圖
  5. 郭艾倫/其他球員平均得分曲線圖
  6. 全部比賽命中率曲線圖
  7. 全部比賽失誤曲線圖
  8. 全部比賽得分曲線圖

代碼部分內(nèi)容較多,以下展示部分分析代碼:


3.1 球員出場時間占比

# 刪除空值
df_time = df_skill2.dropna(axis=0)
df_time.head() 

# 計算時間
time_num = round(df_time.groupby('球員')['出場時間'].mean())
time_num = time_num.sort_values(ascending=False) 
time_num
球員
梅奧         40.0
郭艾倫        35.0
蘭斯-史蒂芬森    35.0
趙繼偉        33.0
韓德君        32.0
布蘭登-巴斯     32.0
高詩巖        24.0
李曉旭        24.0
劉志軒        22.0
賀天舉        17.0
叢明晨        15.0
王化東        11.0
郭旭          9.0
劉雁宇         7.0
鄢手騏         5.0
馬壯          2.0
Name: 出場時間, dtype: float64
data_pair =  [list(z) for z in zip(time_num.index.tolist(), time_num.values.tolist())]

# 繪制餅圖
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
pie1.add('', data_pair, radius=['35%', '60%'])
pie1.set_global_opts(title_opts=opts.TitleOpts(title='不同球員的平均出場時間'), 
                     legend_opts=opts.LegendOpts(is_show=False, orient='vertical', pos_top='15%', pos_left='2%'))
pie1.set_series_opts(label_opts=opts.LabelOpts(formatter=":{c}min"))
pie1.render() 

3.2 外援/國內(nèi)球員 平均得分曲線圖

# 合并數(shù)據(jù)
df_neiwai = pd.merge(df_skill2, df_all[['場序', '勝負(fù)']]) 

# 刪除列
df_neiwai.dropna(inplace=True)

# 添加外援/國內(nèi)球員標(biāo)簽
def tansform_label(x):
    if x == '梅奧' or x == '布蘭登-巴斯' or x == '蘭斯-史蒂芬森':
        return '外援'
    else:
        return '國內(nèi)球員'

df_neiwai['標(biāo)簽1'] = df_neiwai.球員.apply(tansform_label)
df_neiwai.head() 

遼寧為何會跌落神壇,從無敵隊到魚腩隊是郭艾倫的錯?


# 分組匯總
defen = df_neiwai.groupby(['場序', '標(biāo)簽1'])['得分'].mean().reset_index() 
defen['得分'] = round(defen['得分'])

# 產(chǎn)生數(shù)據(jù)
x_line1 = defen[defen['標(biāo)簽1']=='國內(nèi)球員']['場序'].astype('str').tolist()
y_line1 = defen[defen['標(biāo)簽1']=='國內(nèi)球員']['得分'].tolist()
y_line2 = defen[defen['標(biāo)簽1']=='外援']['得分'].tolist() 
line9 = Line(init_opts=opts.InitOpts(width='1350px', height='750px'))
line9.add_xaxis(x_line1) 
line9.add_yaxis('國內(nèi)球員', y_line1,
                markpoint_opts=opts.MarkPointOpts(data=[
                    opts.MarkPointItem(type_='max', name='最大值'),
                    opts.MarkPointItem(type_='min', name='最小值')
                ]))
line9.add_yaxis('外援', y_line2,
                markpoint_opts=opts.MarkPointOpts(data=[
                    opts.MarkPointItem(type_='max', name='最大值'),
                    opts.MarkPointItem(type_='min', name='最小值')
                ]))
line9.set_global_opts(title_opts=opts.TitleOpts(title='外援-國內(nèi)球員平均得分對比')) 
line9.set_series_opts(label_opts=opts.LabelOpts(is_show=True), 
                      linestyle_opts=opts.LineStyleOpts(width=3)  
                     ) 
line9.render()   

3.3 全部比賽得分曲線圖

# 定義函數(shù)
def draw_line(xaxis_data, y_axis, title_label, series_name='', min_num=None, label_color=None, line_color=None, formatter=None):
    line = Line(init_opts=opts.InitOpts(width='1350px', height='750px'))
    line.add_xaxis(xaxis_data) 
    line.add_yaxis(series_name, y_axis,
                    markpoint_opts=opts.MarkPointOpts(data=[
                        opts.MarkPointItem(type_='max', name='最大值'),
                        opts.MarkPointItem(type_='min', name='最小值')
                    ])) 
    line.set_global_opts(title_opts=opts.TitleOpts(title=title_label), 
                          yaxis_opts=opts.AxisOpts(min_=min_num) 
                         ) 
    line.set_series_opts(label_opts=opts.LabelOpts(is_show=True, color=label_color, formatter=formatter), 
                          linestyle_opts=opts.LineStyleOpts(width=3, color=line_color)  
                         )
    return line
# 產(chǎn)生數(shù)據(jù)
x_line1 = df_all[df_all['勝負(fù)']=='勝']['場序'].astype('str').tolist()
y_line1 = df_all[df_all['勝負(fù)']=='勝']['得分'].tolist()

x_line2 = df_all[df_all['勝負(fù)']=='敗']['場序'].astype('str').tolist()
y_line2 = df_all[df_all['勝負(fù)']=='敗']['得分'].tolist() 
# 繪圖
line1 = draw_line(xaxis_data=x_line1, y_axis=y_line1, title_label='全部比賽-勝場得分曲線圖', min_num=80,
                 label_color=None, line_color=None)
line2 = draw_line(xaxis_data=x_line2, y_axis=y_line2, title_label='全部比賽-勝場負(fù)場曲線圖', min_num=80, 
                  label_color='blue', line_color='#3B7BA9')

page1 = Page()  
page1.add(line1, line2)
page1.render() 

結(jié)語

遼寧隊本賽季能走多遠(yuǎn),能不能過季后賽首輪 完全取決于李曉旭回歸后的表現(xiàn),需要彌補(bǔ)沒有大外援所損失的得分和籃板,也讓韓德君可以稍微休息一下。


但治根本的良藥還是要培養(yǎng)新人,遼寧青訓(xùn)出了這么多優(yōu)秀人才,人才斷層應(yīng)該不會發(fā)生,希望俱樂部多多啟用新人,遼寧隊也到了破而后立的時刻了。


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時表示是新驗證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }