写本文章的原因是因为自己实训的时候做这个实在是太头疼,网上关于此项目的资料实在太少,既然那么少,那就由我来分享一份把,我实训自己是制作的10份图,可以任意进行修改。如有需要,项目文件也可以直接共享,请私聊或者评论区回复。
这是一份比赛足球的数据集,老师让我们在这个网站找的,我们选中了这一个数据集。我主要使用的是result.csv,可以自行使用别的。
这是我们的任务要求
代码开始(有些代码注释不正确,谅解)
import csv # 导入csv模块
from datetime import datetime
import matplotlib.pyplot as plt
%matplotlib inline
filename = 'results.csv'
#文本中出现的一些特殊符号超出了gbk的编码范围,可以选择编码范围更广的‘gb18030’
with open(filename,encoding='gb18030') as f:
reader = csv.reader(f)
header_row = next(reader) # 返回文件的下一行,在这便是首行,即文件头
dates, home_scores = [], []
for row in reader:
#for循环加载日期和主场分数
current_date = datetime.strptime(row[0], '%Y-%m-%d')
#主场分数为第三列的数值
home_score = int(row[3])
#将数值添加进去空数组中
dates.append(current_date)
home_scores.append(home_score)
# 根据主场分数绘制图形
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, home_scores, c='red')
# 设置图形的格式
ax.set_title("从1872年到2022年的国际足球比赛结果", fontproperties="SimHei", fontsize=24)
ax.set_xlabel('', fontproperties="SimHei", fontsize=14)
fig.autofmt_xdate()
ax.set_ylabel("主场得分", fontproperties="SimHei", fontsize=14)
ax.tick_params(axis='both', which='major', labelsize=14)
plt.show()
效果:
第二份:客场得分
import csv # 导入csv模块
from datetime import datetime
import matplotlib.pyplot as plt
%matplotlib inline
filename = 'results.csv'
with open(filename,encoding='gb18030') as f:
reader = csv.reader(f)
header_row = next(reader) # 返回文件的下一行,在这便是首行,即文件头
# 从文件中获取得分
dates, away_scores = [], []
for row in reader:
current_date = datetime.strptime(row[0], '%Y-%m-%d')
away_score = int(row[4])
dates.append(current_date)
away_scores.append(away_score)
# 根据客场分数绘制图形
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, away_scores, c='red')
# 设置图形的格式
ax.set_title("从1872年到2022年的国际足球比赛结果", fontproperties="SimHei", fontsize=24)
ax.set_xlabel('', fontproperties="SimHei", fontsize=14)
fig.autofmt_xdate()
ax.set_ylabel("客场得分", fontproperties="SimHei", fontsize=14)
ax.tick_params(axis='both', which='major', labelsize=14)
plt.show()
效果:
第三份:主客场对比
import csv # 导入csv模块
from datetime import datetime
import matplotlib.pyplot as plt
filename = 'results.csv'
with open(filename,encoding='gb18030') as f:
reader = csv.reader(f)
header_row = next(reader) # 返回文件的下一行,在这便是首行,即文件头
# 从文件中获取日期、主场得分和客场得分
dates, highs, lows = [], [], []
for row in reader:
current_date = datetime.strptime(row[0], '%Y-%m-%d')
#主场客场得分都要算进去,转int类型
high = int(row[3])
low = int(row[4])
dates.append(current_date)
highs.append(high)
lows.append(low)
# 根据主场和客场的得分绘制图形
plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.plot(dates, highs, c='red', alpha=0.5) # alpha指定颜色的透明度,0为完全透明
ax.plot(dates, lows, c='blue', alpha=0.5)
ax.fill_between(dates, highs, lows, facecolor='blue',alpha=0.1)
# 设置图形的格式
ax.set_title("从1872年到2022年的国际足球比赛主客场分数对比", fontproperties="SimHei", fontsize=24)
ax.set_xlabel('', fontproperties="SimHei", fontsize=16)
fig.autofmt_xdate()
ax.set_ylabel("分数(S)", fontproperties="SimHei", fontsize=16)
ax.tick_params(axis='both', which='major', labelsize=16)
plt.show()
效果图:
后面的代码是从数据集的网站上复制的,比较好理解:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import os
data=pd.read_csv("results.csv",encoding='gb18030')
plt.rcParams["font.sans-serif"] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#对比主客场分数然后判断胜利或者平局
away_team_won=data[data.away_score > data.home_score]
home_team_won=data[data.home_score > data.away_score]
draw=data[data.home_score == data.away_score]
#分别为客场、主场和平局创建数据
y=np.array([away_team_won.shape[0],home_team_won.shape[0],draw.shape[0]])
#列出生成的数据框维度的第一个元素
x=["客场胜利场次","主场胜利场次","平均场次"]
plt.bar(x,y)
plt.title("世界足球赛成绩")
plt.show()
效果图:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt=reload(plt)
pd.options.mode.chained_assignment = None
plt.rcParams["font.sans-serif"] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data=pd.read_csv("results.csv",encoding='gb18030')
labels = data.country.value_counts()[:6].index
explode = [0,0,0,0,0,0]
sizes = data.country.value_counts()[:6].values
colors = ["pink","purple","blue","lime","red","green"]
plt.figure(figsize = (7,7))
plt.pie(sizes,explode = explode ,labels = labels,colors = colors,autopct="%1.1f%%")
plt.title("锦标赛前六国",color = "red",fontsize = 15)
plt.show()
效果图:
然后后面开始是用vscode运行的,写的echarts图形:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>从1872年到2022年的国际足球比赛结果</title>
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.2.2/echarts.js"></script>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>
<body>
<div id="main" style="height: 600px;width:900px;"></div>
<script>
var nameset=[];//数组初始化
var numset1=[];
//var numset2=[];
var numset3=[];
var numset4=[];
//获取csv对象
let csv = d3.dsv(",", "text/csv;charset=gb2312"); // 逗号分割,设置编码,这样就可以正常显示中文了
// 获取数据
csv("results.csv",function(error,csvdata){
if(error){
console.log(error);
}else{
console.log(csvdata)
for( var i=0; i<csvdata.length; i++ ){
nameset.push(csvdata[i]['date']); //对象转数组
//获取主场分数
numset3.push(parseFloat(csvdata[i]['home_score']));
}
var myChart = echarts.init(document.getElementById("main"));
var option = {
title:{
text:'从1872年到2022年的国际足球比赛结果'
},
legend: {}, // 在头部显示每个折线的名称和颜色
xAxis: [
{
type: 'category',
data: nameset,
axisPointer: {
type: 'shadow'
}
}
],
yAxis: [
{
type: 'value',
}
],
series: [
{
name: '主场得分',
type: 'line',
data: numset3,
}
]
};
myChart.setOption(option);
}
});
</script>
</body>
</html>
点击这里运行:
效果图:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>从1872年到2022年的国际足球比赛结果</title>
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.2.2/echarts.js"></script>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>
<body>
<div id="main" style="height: 600px;width:900px;"></div>
<script>
var nameset=[];//数组初始化
var numset1=[];
var numset2=[];
var numset3=[];
var numset4=[];
//获取csv对象
let csv = d3.dsv(",", "text/csv;charset=gb2312"); // 逗号分割,设置编码,这样就可以正常显示中文了
// 获取数据
csv("results.csv",function(error,csvdata){
if(error){
console.log(error);
}else{
console.log(csvdata)
for( var i=0; i<csvdata.length; i++ ){
nameset.push(csvdata[i]['date']); //对象转数组
numset3.push(parseFloat(csvdata[i]['home_score']));
//获取客场分数
numset4.push(parseFloat(csvdata[i]['away_score']));
}
var myChart = echarts.init(document.getElementById("main"));
var option = {
title:{
text:'从1872年到2022年的国际足球比赛结果'
},
legend: {}, // 在头部显示每个折线的名称和颜色
xAxis: [
{
type: 'category',
data: nameset,
axisPointer: {
type: 'shadow'
}
}
],
yAxis: [
{
type: 'value',
}
],
series: [
{
name: '客场得分',
type: 'line',
data: numset4,
}
]
};
myChart.setOption(option);
}
});
</script>
</body>
</html>
效果图:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>比赛结果主客场得分对比</title>
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.2.2/echarts.js"></script>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>
<body>
<div id="main" style="height: 600px;width:900px;"></div>
<script>
var nameset=[];//数组初始化
var numset1=[];
var numset2=[];
var numset3=[];
var numset4=[];
//获取csv对象
let csv = d3.dsv(",", "text/csv;charset=gb2312"); // 逗号分割,设置编码,这样就可以正常显示中文了
// 获取数据
csv("results.csv",function(error,csvdata){
if(error){
console.log(error);
}else{
console.log(csvdata)
for( var i=0; i<csvdata.length; i++ ){
nameset.push(csvdata[i]['date']); //对象转数组
numset3.push(parseFloat(csvdata[i]['home_score']));
numset4.push(parseFloat(csvdata[i]['away_score']));
}
var myChart = echarts.init(document.getElementById("main"));
var option = {
title:{
text:'比赛结果主客场得分对比'
},
legend: {}, // 在头部显示每个折线的名称和颜色
xAxis: [
{
type: 'category',
data: nameset,
axisPointer: {
type: 'shadow'
}
}
],
yAxis: [
{
type: 'value',
}
],
series: [
{
name: '主场',
type: 'line',
data: numset3,
},
{
name: '客场',
type: 'line',
data: numset4,
}
]
};
myChart.setOption(option);
}
});
</script>
</body>
</html>
效果图:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>主客场分别胜率占比饼图</title>
<script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.2.2/echarts.js"></script>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>
<body>
<div id="main" style="height: 600px;width:900px;"></div>
<script>
var nameset=[];//数组初始化
var numset1=[];
var numset2=[];
var numset3=[];
var numset4=[];
var home_team_won=0,away_team_won=0,draw=0;
//获取csv对象
let csv = d3.dsv(",", "text/csv;charset=gb2312"); // 逗号分割,设置编码,这样就可以正常显示中文了
// 获取数据
csv("results.csv",function(error,csvdata){
if(error){
console.log(error);
}else{
console.log(csvdata)
for(var i=0; i<csvdata.length; i++ ){
nameset.push(csvdata[i]['date']); //对象转数组
numset3.push(parseFloat(csvdata[i]['home_score']));
numset4.push(parseFloat(csvdata[i]['away_score']))
}
//计算客场、主场、平局的场数
for(var j = 0;j < csvdata.length;j++){
if(numset3[j] < numset4[j]){
away_team_won += 1;
}
else if(numset3[j] > numset4[j])
home_team_won += 1;
else
draw += 1;
}
console.log(home_team_won);
console.log(away_team_won);
console.log(draw);
var myChart = echarts.init(document.getElementById("main"));
option = {
title:{
text:'主客场分别胜率占比饼图'
},
series: [
{
type: 'pie',
data: [
{
value: home_team_won,
name: '主场胜'
},
{
value: away_team_won,
name: '客场胜'
},
{
value: draw,
name: '平局'
}
]
}
]
};
myChart.setOption(option);
}
});
</script>
</body>
</html>
效果图:
js读取csv数据,并用Echarts展示 - Happen's Bloghttps://www.glwsq.cn/post/js-echarts-csv/Python3——处理.CSV文件格式的数据并用matplotlib可视化_weixin_34194702的博客-CSDN博客处理CSV文件格式的数据highs_lows.pyimport csvfrom matplotlib import pyplot as pltfrom datetime import datetime#读取CSV文件数据filename='sitka_weather_...https://blog.csdn.net/weixin_34194702/article/details/89693095还有任何问题,欢迎在评论区回复,我看到后会尽可能的帮助你解决问题,谢谢。