Skip to content

Commit 29ce7ee

Browse files
committed
add football code
1 parent 0749563 commit 29ce7ee

File tree

5 files changed

+908
-15
lines changed

5 files changed

+908
-15
lines changed

.idea/workspace.xml

Lines changed: 15 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

football/yingchao/analyse.py

Lines changed: 244 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
# coding = utf-8
2+
"""
3+
@author: zhou
4+
@time:2019/10/8 9:58
5+
@File: analyse.py
6+
"""
7+
8+
import pandas as pd
9+
from pyecharts import options as opts
10+
from pyecharts.charts import Bar, Scatter, Radar
11+
from pyecharts.commons.utils import JsCode
12+
13+
14+
# 球队分析
15+
team_df = pd.read_csv('yingchao_data.csv')
16+
17+
goal_data = team_df[['team', 'goal', 'goal_diff']]
18+
data_goal = goal_data.sort_values(by='goal', ascending=False)
19+
goal_data_name = data_goal['team'].values.tolist()
20+
goal_data_num = data_goal['goal'].values.tolist()
21+
goal_data_diff = data_goal['goal_diff'].values.tolist()
22+
23+
bar = Bar()
24+
bar.add_xaxis(goal_data_name)
25+
bar.add_yaxis('', goal_data_num)
26+
bar.add_yaxis('', goal_data_diff)
27+
bar.set_global_opts(
28+
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)),
29+
title_opts=opts.TitleOpts(title="各球队进球数据", subtitle="进球和净胜球"),
30+
datazoom_opts=opts.DataZoomOpts(),
31+
)
32+
bar.render_notebook()
33+
34+
# 球员数据分析
35+
36+
# 综合得分
37+
player_df = pd.read_csv('player_data.csv')
38+
39+
score_data = player_df[['club', 'score']]
40+
score_mean = score_data.groupby(by = 'club').mean().sort_values(by = 'score', ascending = False)
41+
score_mean.reset_index(inplace = True)
42+
score_name = score_mean['club'].values.tolist()
43+
score_num = score_mean['score'].values.tolist()
44+
45+
bar = Bar()
46+
bar.add_xaxis(score_name)
47+
bar.add_yaxis('', score_num)
48+
bar.set_global_opts(
49+
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)),
50+
title_opts=opts.TitleOpts(title="各球队综合得分", subtitle="各球员综合得分均值"),
51+
datazoom_opts=opts.DataZoomOpts(),
52+
)
53+
bar.set_series_opts(itemstyle_opts={
54+
"normal": {
55+
"color": JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
56+
offset: 0,
57+
color: 'rgba(0, 244, 255, 1)'
58+
}, {
59+
offset: 1,
60+
color: 'rgba(0, 77, 167, 1)'
61+
}], false)"""),
62+
"barBorderRadius": [30, 30, 30, 30],
63+
"shadowColor": 'rgb(0, 160, 221)',
64+
}},
65+
label_opts=opts.LabelOpts(is_show=False))
66+
bar.render_notebook()
67+
68+
# 前锋分析
69+
df_vanguard = player_df[player_df['staff'] == '前锋'][['staff', 'club', 'shot', 'speed', 'power']]
70+
df_vanguard = df_vanguard.groupby(by = 'club').mean()[['shot', 'speed', 'power']]
71+
df_vanguard['size'] = ((df_vanguard['shot'] - df_vanguard['shot'].min()) / (df_vanguard['shot'].max() - df_vanguard['shot'].min()) + 1) * 10
72+
df_vanguard.reset_index(inplace = True)
73+
df_vanguard.sort_values(by = 'shot', ascending = False, inplace = True)
74+
vanguard_shot = df_vanguard['shot'].values.tolist()
75+
vanguard_speed = df_vanguard['speed'].values.tolist()
76+
vanguard_power = df_vanguard['power'].values.tolist()
77+
vanguard_club = df_vanguard['club'].values.tolist()
78+
vanguard_size = df_vanguard['size'].values.tolist()
79+
80+
bar = Bar()
81+
bar.add_xaxis(vanguard_club)
82+
bar.add_yaxis('', vanguard_shot, gap="0%")
83+
bar.add_yaxis('', vanguard_speed, gap="0%")
84+
bar.add_yaxis('', vanguard_power, gap="0%")
85+
bar.set_global_opts(
86+
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)),
87+
title_opts=opts.TitleOpts(title="各球队前锋数据", subtitle="射术、速度和力量"),
88+
datazoom_opts=opts.DataZoomOpts(),
89+
)
90+
bar.set_series_opts(
91+
label_opts=opts.LabelOpts(is_show=False))
92+
bar.render_notebook()
93+
94+
# 锋线散点图
95+
scatter = Scatter()
96+
scatter.add_xaxis(vanguard_club)
97+
scatter.add_yaxis("shot", vanguard_shot, symbol='pin')
98+
scatter.add_yaxis("speed", vanguard_speed, symbol='triangle')
99+
scatter.add_yaxis("power", vanguard_power, symbol='diamond')
100+
scatter.set_global_opts(
101+
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)),
102+
title_opts=opts.TitleOpts(title="各球队前锋数据"),
103+
visualmap_opts=opts.VisualMapOpts(type_='size', max_=90, min_=60),
104+
)
105+
scatter.set_series_opts(
106+
label_opts=opts.LabelOpts(is_show=False))
107+
scatter.render_notebook()
108+
109+
# 中场
110+
df_midfield = player_df[player_df['staff'] == '中场'][['staff', 'club', 'pass', 'speed', 'tape']]
111+
df_midfield = df_midfield.groupby(by = 'club').mean()[['pass', 'speed', 'tape']]
112+
df_midfield['size'] = ((df_midfield['tape'] - df_midfield['tape'].min()) / (df_midfield['tape'].max() - df_midfield['tape'].min()) + 1) * 10
113+
df_midfield.reset_index(inplace = True)
114+
df_midfield.sort_values(by = 'pass', ascending = False, inplace = True)
115+
midfield_pass = df_midfield['pass'].values.tolist()
116+
midfield_speed = df_midfield['speed'].values.tolist()
117+
midfield_tape = df_midfield['tape'].values.tolist()
118+
midfield_club = df_midfield['club'].values.tolist()
119+
midfield_size = df_midfield['size'].values.tolist()
120+
121+
bar = Bar()
122+
bar.add_xaxis(midfield_club)
123+
bar.add_yaxis('', midfield_pass, gap="0%")
124+
bar.add_yaxis('', midfield_speed, gap="0%")
125+
bar.add_yaxis('', midfield_tape, gap="0%")
126+
bar.set_global_opts(
127+
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)),
128+
title_opts=opts.TitleOpts(title="各球队中场数据", subtitle="传球、速度和盘带"),
129+
datazoom_opts=opts.DataZoomOpts(),
130+
)
131+
bar.set_series_opts(
132+
label_opts=opts.LabelOpts(is_show=False))
133+
bar.render_notebook()
134+
135+
# 后卫
136+
df_guard = player_df[player_df['staff'] == '后卫'][['staff', 'club', 'pass', 'defend', 'power']]
137+
df_guard = df_guard.groupby(by = 'club').mean()[['pass', 'defend', 'power']]
138+
df_guard['size'] = ((df_guard['defend'] - df_guard['defend'].min()) / (df_guard['defend'].max() - df_guard['defend'].min()) + 1) * 10
139+
df_guard.reset_index(inplace = True)
140+
df_guard.sort_values(by = 'defend', ascending = False, inplace = True)
141+
guard_pass = df_guard['pass'].values.tolist()
142+
guard_defend = df_guard['defend'].values.tolist()
143+
guard_power = df_guard['power'].values.tolist()
144+
guard_club = df_guard['club'].values.tolist()
145+
guard_size = df_guard['size'].values.tolist()
146+
147+
bar = Bar()
148+
bar.add_xaxis(midfield_club)
149+
bar.add_yaxis('', midfield_pass, gap="0%")
150+
bar.add_yaxis('', midfield_speed, gap="0%")
151+
bar.add_yaxis('', midfield_tape, gap="0%")
152+
bar.set_global_opts(
153+
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-30)),
154+
title_opts=opts.TitleOpts(title="各球队后卫数据", subtitle="传球、防守和力量"),
155+
datazoom_opts=opts.DataZoomOpts(),
156+
)
157+
bar.set_series_opts(
158+
label_opts=opts.LabelOpts(is_show=False))
159+
bar.render_notebook()
160+
161+
# 英超五强
162+
team = player_df.groupby(by='club').mean()
163+
team.reset_index(inplace = True)
164+
165+
liwupu_score = team[team['club'] == '利物浦']['score'].values.tolist()
166+
liwupu_speed = team[team['club'] == '利物浦']['speed'].values.tolist()
167+
liwupu_power = team[team['club'] == '利物浦']['power'].values.tolist()
168+
liwupu_defend = team[team['club'] == '利物浦']['defend'].values.tolist()
169+
liwupu_tape = team[team['club'] == '利物浦']['tape'].values.tolist()
170+
liwupu_pass = team[team['club'] == '利物浦']['pass'].values.tolist()
171+
liwupu_shot = team[team['club'] == '利物浦']['shot'].values.tolist()
172+
liwupu_data = []
173+
liwupu_tmp_data = [int(liwupu_score[0]), int(liwupu_speed[0]), int(liwupu_power[0]), int(liwupu_defend[0]), int(liwupu_tape[0]),
174+
int(liwupu_pass[0]), int(liwupu_shot[0])]
175+
liwupu_data.append(liwupu_tmp_data)
176+
177+
mancheng_score = team[team['club'] == '曼城']['score'].values.tolist()
178+
mancheng_speed = team[team['club'] == '曼城']['speed'].values.tolist()
179+
mancheng_power = team[team['club'] == '曼城']['power'].values.tolist()
180+
mancheng_defend = team[team['club'] == '曼城']['defend'].values.tolist()
181+
mancheng_tape = team[team['club'] == '曼城']['tape'].values.tolist()
182+
mancheng_pass = team[team['club'] == '曼城']['pass'].values.tolist()
183+
mancheng_shot = team[team['club'] == '曼城']['shot'].values.tolist()
184+
mancheng_data = []
185+
mancheng_tmp_data = [int(mancheng_score[0]), int(mancheng_speed[0]), int(mancheng_power[0]), int(mancheng_defend[0]), int(mancheng_tape[0]),
186+
int(mancheng_pass[0]), int(mancheng_shot[0])]
187+
mancheng_data.append(mancheng_tmp_data)
188+
189+
asenna_score = team[team['club'] == '阿森纳']['score'].values.tolist()
190+
asenna_speed = team[team['club'] == '阿森纳']['speed'].values.tolist()
191+
asenna_power = team[team['club'] == '阿森纳']['power'].values.tolist()
192+
asenna_defend = team[team['club'] == '阿森纳']['defend'].values.tolist()
193+
asenna_tape = team[team['club'] == '阿森纳']['tape'].values.tolist()
194+
asenna_pass = team[team['club'] == '阿森纳']['pass'].values.tolist()
195+
asenna_shot = team[team['club'] == '阿森纳']['shot'].values.tolist()
196+
asenna_data = []
197+
asenna_tmp_data = [int(asenna_score[0]), int(asenna_speed[0]), int(asenna_power[0]), int(asenna_defend[0]), int(asenna_tape[0]),
198+
int(asenna_pass[0]), int(asenna_shot[0])]
199+
asenna_data.append(asenna_tmp_data)
200+
201+
manlian_score = team[team['club'] == '曼联']['score'].values.tolist()
202+
manlian_speed = team[team['club'] == '曼联']['speed'].values.tolist()
203+
manlian_power = team[team['club'] == '曼联']['power'].values.tolist()
204+
manlian_defend = team[team['club'] == '曼联']['defend'].values.tolist()
205+
manlian_tape = team[team['club'] == '曼联']['tape'].values.tolist()
206+
manlian_pass = team[team['club'] == '曼联']['pass'].values.tolist()
207+
manlian_shot = team[team['club'] == '曼联']['shot'].values.tolist()
208+
manlian_data = []
209+
manlian_tmp_data = [int(manlian_score[0]), int(manlian_speed[0]), int(manlian_power[0]), int(manlian_defend[0]), int(manlian_tape[0]),
210+
int(manlian_pass[0]), int(manlian_shot[0])]
211+
manlian_data.append(manlian_tmp_data)
212+
213+
qieerxi_score = team[team['club'] == '切尔西']['score'].values.tolist()
214+
qieerxi_speed = team[team['club'] == '切尔西']['speed'].values.tolist()
215+
qieerxi_power = team[team['club'] == '切尔西']['power'].values.tolist()
216+
qieerxi_defend = team[team['club'] == '切尔西']['defend'].values.tolist()
217+
qieerxi_tape = team[team['club'] == '切尔西']['tape'].values.tolist()
218+
qieerxi_pass = team[team['club'] == '切尔西']['pass'].values.tolist()
219+
qieerxi_shot = team[team['club'] == '切尔西']['shot'].values.tolist()
220+
qieerxi_data = []
221+
qieerxi_tmp_data = [int(qieerxi_score[0]), int(qieerxi_speed[0]), int(qieerxi_power[0]), int(qieerxi_defend[0]), int(qieerxi_tape[0]),
222+
int(qieerxi_pass[0]), int(qieerxi_shot[0])]
223+
qieerxi_data.append(qieerxi_tmp_data)
224+
225+
radar = Radar()
226+
radar.add_schema(
227+
schema=[
228+
opts.RadarIndicatorItem(name='综合得分', max_=100),
229+
opts.RadarIndicatorItem(name='速度', max_=100),
230+
opts.RadarIndicatorItem(name='力量', max_=100),
231+
opts.RadarIndicatorItem(name='防守', max_=100),
232+
opts.RadarIndicatorItem(name='盘带', max_=100),
233+
opts.RadarIndicatorItem(name='传球', max_=100),
234+
opts.RadarIndicatorItem(name='射术', max_=100)
235+
]
236+
)
237+
radar.add('利物浦', liwupu_data, color="#f9713c")
238+
radar.add('曼城', mancheng_data, color="#30ff00")
239+
radar.add('阿森纳', asenna_data, color="#9400D3")
240+
radar.add('曼联', manlian_data, color="#141414")
241+
radar.add('切尔西', qieerxi_data, color="#00F5FF")
242+
radar.render_notebook()
243+
244+

0 commit comments

Comments
 (0)