导入数据集、对数据集处理、生成matplotlib图形和Echarts图形

写本文章的原因是因为自己实训的时候做这个实在是太头疼,网上关于此项目的资料实在太少,既然那么少,那就由我来分享一份把,我实训自己是制作的10份图,可以任意进行修改。如有需要,项目文件也可以直接共享,请私聊或者评论区回复。

首先数据集的由来:​​​​​​International football results from 1872 to 2022 | KaggleAn up-to-date dataset of over 40,000 international football resultshttps://www.kaggle.com/datasets/martj42/international-football-results-from-1872-to-2017

这是一份比赛足球的数据集,老师让我们在这个网站找的,我们选中了这一个数据集。我主要使用的是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>

效果图:

 代码参考:导入外部数据使用echarts绘图 | 程序员灯塔icon-default.png?t=M5H6https://www.wangt.cc/2020/10/%E5%AF%BC%E5%85%A5%E5%A4%96%E9%83%A8%E6%95%B0%E6%8D%AE%E4%BD%BF%E7%94%A8echarts%E7%BB%98%E5%9B%BE/

js读取csv数据,并用Echarts展示 - Happen's Blogicon-default.png?t=M5H6https://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还有任何问题,欢迎在评论区回复,我看到后会尽可能的帮助你解决问题,谢谢。

 

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值