一、数据来源与预处理

数据集包含自1872年以来国际男子足球比赛的51225场比赛,共11列(主队、客队、主队进球、客队进球、总进球数数、获胜者、比赛名称、日期、年份、中立场地以及举办比赛国家),分享者已对源数据集进行预处理和翻译。通过Python初步了解数据集的基本情况,明确数据集没有缺失值、重复值,存在一定数量的异常值,但经过复核该异常值符合实际,不需要进行额外处理。

将数据集matchZn.csv导入Power Bi Desktop,将日期列的格式从文本调整为日期,同时新增年代列,总进球数分层列以及赛果列。

列名
DAX表达式
年代

年代 = FLOOR('matchZn'[年份], 10)

总进球数分层

总进球数分层 =

SWITCH(

    TRUE(),

    'matchZn'[总进球数] <= 3, "0-3",

    'matchZn'[总进球数] <= 6, "4-6",

    "7+"

)

赛果

赛果 =

SWITCH(TRUE(),

    'matchZn'[主队进球] > 'matchZn'[客队进球], "主队胜",

    'matchZn'[主队进球] < 'matchZn'[客队进球], "客队胜",

    "平"

)

二、搭建星型架构和度量值

2.1 星型架构

2.1.1 搭建日期表

日期表

日期表 = ADDCOLUMNS(

CALENDAR(FIRSTDATE('matchZn'[日期]),LASTDATE('matchZn'[日期])),

"年", YEAR ( [Date] ),

"季度", ROUNDUP(MONTH([Date])/3,0),

"月", MONTH([Date]),

"周", weeknum([Date]),

"年季度", year([date]) & "Q" & ROUNDUP(MONTH([Date])/3,0),

"年月", year([Date]) * 100 + MONTH([Date]),

"年周", year([Date]) * 100 + weeknum([Date]),

"星期几", WEEKDAY([Date])

)

完成日期表搭建后,并将其标记为日期表

2.1.2 搭建主要赛事表

主要赛事表

MajorTournaments = DATATABLE(

    "比赛名称", STRING,

    {

        {"世界杯"},

        {"欧洲杯"},

        {"美洲杯"},

        {"奥运会"},

        {"非洲杯"},

        {"亚洲杯"},

        {"中北美及加勒比海足球锦标赛"},

        {"联合会杯"},

        {"大洋洲国家杯"},

        {"欧洲国家联赛"}

    }

)

2.1.3 球队表

球队表

Teams = DISTINCT(UNION(SELECTCOLUMNS('matchZn',"球队",'matchZn'[主队]), SELECTCOLUMNS('matchZn',"球队",'matchZn'[客队])))

2.1.4 管理关系

2.2 搭建度量值

度量值
DAX表达式
记录数

记录数 = COUNTROWS('matchZn')

进球数(总)

进球数(总) = SUM('matchZn'[总进球数])

中立场地场次

中立场地场次 =

CALCULATE(

    COUNTROWS('matchZn'),

    'matchZn'[中立场地] = "是"

)

平均进球

平均进球 =

CALCULATE(

    AVERAGE('matchZn'[总进球数]),

    ALLEXCEPT('matchZn', 'matchZn'[年代])

)

中位数进球

中位数进球 =

CALCULATE(

    MEDIAN('matchZn'[总进球数]),

    ALLEXCEPT('matchZn', 'matchZn'[年代])

)

3期移动平均

MA3 =

VAR CurY = SELECTEDVALUE('matchZn'[年代])

VAR vTable =

    ADDCOLUMNS(

        SUMMARIZE(

            FILTER(ALL('matchZn'[年代]), 'matchZn'[年代] <= CurY),

            'matchZn'[年代]

        ),

        "@avg", [平均进球]

    )

VAR Last3 = TOPN(3, vTable, 'matchZn'[年代], DESC)

RETURN

    IF(COUNTROWS(Last3) = 3, AVERAGEX(Last3, [@avg]))

主队获胜数量

主队获胜数量 =

CALCULATE(

    COUNTROWS('matchZn'),

    'matchZn'[赛果] = "主队胜"

)

客队获胜数量

客队获胜数量 =

CALCULATE(

    COUNTROWS('matchZn'),

    'matchZn'[赛果] = "客队胜"

)

平均主队进球

平均主队进球 =

CALCULATE(

    AVERAGE('matchZn'[主队进球]),

    ALLEXCEPT('matchZn', 'matchZn'[年代])

)

平均客队进球

平均客队进球 =

CALCULATE(

    AVERAGE('matchZn'[客队进球]),

    ALLEXCEPT('matchZn', 'matchZn'[年代])

)

主场优势

主场优势 = [平均主队进球] - [平均客队进球]

有效赛事数量

有效赛事数量 =

CALCULATE(

    COUNTROWS('matchZn'),

    KEEPFILTERS('matchZn'[比赛名称] <> "友谊赛"),

    KEEPFILTERS(NOT CONTAINSSTRING('matchZn'[比赛名称], "预选赛"))

)

总参赛次数

主队参赛次数 =

CALCULATE(

    COUNTROWS('matchZn'),                         

    TREATAS(VALUES(MajorTournaments[比赛名称]), 'matchZn'[比赛名称]),

    'matchZn'[主队] = SELECTEDVALUE('Teams'[球队])

)

客队参赛次数 =

CALCULATE(

    COUNTROWS('matchZn'),

    TREATAS(VALUES(MajorTournaments[比赛名称]), 'matchZn'[比赛名称]),

    'matchZn'[客队] = SELECTEDVALUE('Teams'[球队])

)

总参赛次数 = [主队参赛次数] + [客队参赛次数]

场均进球

总进球 =

VAR t = SELECTEDVALUE('Teams'[球队])

RETURN

CALCULATE(

    SUM('matchZn'[主队进球]), 'matchZn'[主队] = t

) +

CALCULATE(

    SUM('matchZn'[客队进球]), 'matchZn'[客队] = t

)

总场次 =

CALCULATE(

    COUNTROWS('matchZn'),

    ('matchZn'[主队] = SELECTEDVALUE('Teams'[球队]) ||

     'matchZn'[客队] = SELECTEDVALUE('Teams'[球队]))

)

场均进球 = DIVIDE([总进球], [总场次])

场均失球

总失球 =

VAR t = SELECTEDVALUE('Teams'[球队])

RETURN

CALCULATE(

    SUM('matchZn'[客队进球]), 'matchZn'[主队] = t

) +

CALCULATE(

    SUM('matchZn'[主队进球]), 'matchZn'[客队] = t

)

场均失球 = DIVIDE([总失球], [总场次])

攻防效率比

攻防效率比 = DIVIDE([场均进球], [场均失球])

三、可视化看板设计

3.1 总进球数

左上角:总进球数频数分布图

选择簇状柱形图,X轴选择matchZn表格里的总进球数,Y轴选择记录数度量值

右上角:总进球数分层饼图

选择饼图,X轴选择matchZn表格里的总进球数分层,Y轴选择记录数度量值

底部:各年代平均进球数变化趋势图

选择折线图,X轴选择matchZn表格里的年代,Y轴选择平均进球、中位数进球、MA3这三个度量值,然后细调每根折线以便于区分。

3.2 比赛数量

左上角:中立场地分布饼图

右上角:不同比赛中立场地排行
底部:每年比赛数目变化趋势图

3.3 主客队获胜数量

左上角:不同比赛主客队获胜数量分布条形图

右上角:各年代主客队获胜数量分布柱形图
底部:各年代主客队平均进球及主场优势变化趋势图

3.4 主要赛事参赛次数

3.5 综合能力排行榜

总体上还是选择条形图展示不同球队的场均进球、场均失球以及攻防效率比,同时增加主要赛事比赛名称的切片器,以进一步比对重要赛事不同球队的综合能力。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐