其实也不能完全怪武磊的进攻效率,看看西班牙人的本赛季的进球数,也是惨绝人寰,而且这个不光是西甲,还加入了欧联杯的比赛,要是只看西甲,可以说西班牙人不降级都说不过去,场均也就1个球,再加上后卫线最强的是主力门将,防守常年出问题,可以说西班牙人配的上一个降级名额。
西班牙人队得分走势(2018.8.19-2019.5.18)

西班牙人队得分走势(2019.7.27-至今)

我们对比了上赛季的西班牙人,可以明显看出上赛季的西班牙人进攻好很多,可以达到场均2个球,而且稳定,后防线和本赛季相差不多,但是1个球就可以决定胜负,3分和0分的差距是巨大的。
说到防守,大家可能印象中防守弱的球队都不够凶狠,就是平时说的踢球比较干净,我们统计了犯规走势图,其实大体上看,和西甲平均值相差无几,西甲本身就不是强调身体的联赛。实际看来,西班牙人的丢球主要源于漏人和被人打反击。西班牙人和巴塞罗那同属一个地区,其实踢球的风格也相差无几。在球员能力严重不足的情况下去打全攻全守的足球,去打传控足球无异于自杀,中场丢球被人打反击就是本赛季西班牙人的写照。

西班牙人的降级真的是防守问题大于进攻问题,防守才是定位于小球会的球队立足之本。武磊的确浪费了不少机会,但每场触球都是个位数,也是挺难为武磊的,大家都在说孙兴慜厉害,但是孙兴慜浪费的机会、拿球的机会都要比武磊多很多,只能说他赢得了信任,拿球机会多了,形成了正向循环,武磊还没有真正赢得五大联 赛的最重。
数据分析步骤
我们使用Python获取了球探体育网站上西班牙人的球队数据,地址:
http://zq.win007.com/cn/team/Summary/100.html
以下展示部分分析代码:
首先导入所需包,其中pandas用于数据读入和数据整理,pyecharts用于数据可视化分析。
import pandas as pd
from pyecharts.charts import Bar, Pie, Line, Page
from pyecharts import options as opts
# 筛选时间
df_sel2 = df_4[(df_4['日期'] >= '2019-07-26')]
df_sel2.head()

# 提西班牙人 主队比分
zhudui = df_sel2[df_sel2['主队']=='西班牙人'][['日期', '比分']]
# 分数
zhudui['分数'] = zhudui['比分'].str.split('-').str[0].astype('int')
# 提西班牙人 客队比分
kedui = df_sel2[df_sel2['客队']=='西班牙人'][['日期', '比分']]
# 分数
kedui['分数'] = kedui['比分'].str.split('-').str[1].astype('int')
# 提取日期
riqi = df_sel2[['日期']]
# 合并数据
riqi = pd.merge(riqi, zhudui[['日期', '分数']], on='日期', how='left')
riqi = pd.merge(riqi, kedui[['日期', '分数']], on='日期', how='left')
riqi.columns = ['日期', '主队分数', '客队分数']
# 填补空值
riqi = riqi.fillna(0)
# 分数相加
riqi['分数'] = riqi['主队分数'] + riqi['客队分数']
riqi.head()

# 产生数据
x_data = riqi['日期'].values.tolist()
y_data = riqi['分数'].values.tolist()
# 折线图
line5 = Line(init_opts=opts.InitOpts(width='1350px', height='750px'))
line5.add_xaxis(x_data)
line5.add_yaxis('', y_data,
label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min"),
opts.MarkPointItem(type_="max"),]),
)
line5.set_global_opts(title_opts=opts.TitleOpts(title='西班牙球队得分走势(2019.07.26-至今)'),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate='45'),
axisline_opts=opts.AxisLineOpts(is_on_zero=False),
),
yaxis_opts=opts.AxisOpts(max_=10, min_=-1,
name="",
type_="value",
axislabel_opts=opts.LabelOpts(formatter="{value}"),
splitline_opts=opts.SplitLineOpts(is_show=False),
)
)
line5.set_series_opts(linestyle_opts=opts.LineStyleOpts(width=3, color='#4169E1'))
line5.render()
3.2 赛季 2019-07-26 - 今 西班牙得分分布
# 计算得分
score_num = riqi['分数'].value_counts()
# 产生数据
data_pair = [list(z) for z in zip([str(i) + '分'for i in score_num.index], score_num.values.tolist())]
# 绘制饼图
pie5 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
pie5.add('', data_pair, radius=['35%', '60%'])
pie5.set_global_opts(title_opts=opts.TitleOpts(title='西班牙球队得分分布(2019.07.26-至今)'),
legend_opts=opts.LegendOpts(orient='vertical', pos_top='15%', pos_left='2%'))
pie5.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} \n占比({d}%)"))
pie5.set_colors(['#EF9050',
'#3B7BA9', '#6FB27C', '#FFAF34', '#D8BFD8', '#00BFFF', '#7FFFAA'])
pie5.render()
3.3 赛季 2019-07-26 - 今 西班牙球队犯规 黄牌 红牌
# 筛选时间
df_sel2 = df_4[(df_4['日期'] >= '2019-07-26')]
# 产生数据
x_data = df_sel2['日期'].values.tolist()
y_data1 = df_sel2['犯规'].values.tolist()
y_data2 = df_sel2['黄牌'].values.tolist()
y_data3 = df_sel2['红牌'].values.tolist()
# 折线图
line6 = Line(init_opts=opts.InitOpts(width='1350px', height='750px'))
line6.add_xaxis(x_data)
line6.add_yaxis('犯规', y_data1,
markpoint_opts=opts.MarkPointOpts(data=[
opts.MarkPointItem(type_='max', name='最大值'),
opts.MarkPointItem(type_='min', name='最小值')
]))
line6.add_yaxis('黄牌', y_data2,
markpoint_opts=opts.MarkPointOpts(data=[
opts.MarkPointItem(type_='max', name='最大值'),
opts.MarkPointItem(type_='min', name='最小值')
]))
line6.add_yaxis('红牌', y_data3,
markpoint_opts=opts.MarkPointOpts(data=[
opts.MarkPointItem(type_='max', name='最大值'),
opts.MarkPointItem(type_='min', name='最小值')
]))
line6.set_global_opts(title_opts=opts.TitleOpts(title='西班牙球队犯规-黄牌-红牌走势图(2019.07.26-至今)'),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate='45'),
axisline_opts=opts.AxisLineOpts(is_on_zero=False)),
yaxis_opts=opts.AxisOpts(max_=30, min_=0,
name="",
type_="value",
axislabel_opts=opts.LabelOpts(formatter="{value}"),
splitline_opts=opts.SplitLineOpts(is_show=False),
)
)
line6.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
linestyle_opts=opts.LineStyleOpts(width=3)
)
line6.render()