題目要求: 分析文件’課程成績.xlsx’,至少要完成內容:分析1)每年不同班級平均成績情況、2)不同年份總體平均成績情況、3)不同性別學生成績情況,並分別用合適的圖表展示出三個內容的分析結果。 廢話不多,直接上代碼 1每年不同班級平均成績情況: # 導入xlrd模塊import xlrdfrom ...
題目要求:
分析文件’課程成績.xlsx’,至少要完成內容:分析1)每年不同班級平均成績情況、2)不同年份總體平均成績情況、3)不同性別學生成績情況,並分別用合適的圖表展示出三個內容的分析結果。
廢話不多,直接上代碼
1每年不同班級平均成績情況:
# 導入xlrd模塊
import xlrd
from pyecharts import *
page = Page() # 實例化page類,一個頁面順序熏染讀個圖表
#設置文件名和路徑
fname = '課程成績.xlsx'
# 打開文件
filename = xlrd.open_workbook(fname)
sheets=filename.nsheets#獲得sheet的個數
sheet_list = filename.sheet_names()#sheet名字
list_x=[]
years=["2016","2017","2018"]#年份
for i in range(len(sheet_list)):
listx=[]#存放班級
dirx={}#存放班級人數
listy=[]#存放分數
diry={}#統計存放班級的分數
sheet=filename.sheets()[i]#獲得當前的sheet
nrows=sheet.nrows#獲得當前的sheet的行數
diravg={}#存放平均分
for j in range(1,nrows):
row_datas = sheet.row_values(j)#獲得當前行的所有信息
listx.append(row_datas[0])
listy.append(row_datas[4])
for k in range(len(listx)):
if listx[k] not in dirx:
dirx[listx[k]]=1
if "".join(listy[k].split())!='缺考':
diry[listx[k]]=int(listy[k])
else:
diry[listx[k]]=0
else:
dirx[listx[k]]=dirx[listx[k]]+1
if "".join(listy[k].split())!='缺考':
diry[listx[k]]=int(listy[k])+diry[listx[k]]
for d in dirx:
if d not in diravg:
diravg[d]="%.1f"%(diry.get(d)/dirx.get(d))
keys=list(diravg.keys())
values=list(diravg.values())
bar=Bar(years[i]+"成績分析")
bar.add(years[i],keys,values)
page.add(bar)
page.render("一個頁面渲染多張圖表.html")
2不同年份總體平均成績情況:
import xlrd
from pyecharts import Bar
#設置文件名和路徑
fname = '課程成績.xlsx'
# 打開文件
filename = xlrd.open_workbook(fname)
sheets=filename.nsheets#獲得sheet的個數
sheet_list = filename.sheet_names()#sheet名字
avg=[]
for i in range(len(sheet_list)):#獲取sheet個數
sheet=filename.sheets()[i]#獲取當前的sheet
nrows=sheet.nrows#獲取行數
sumscore=0#總分
count=0#學生的個數
for j in range(1,nrows):
row_datas = sheet.row_values(j)#獲得當前行的所有信息
if "".join(row_datas[4].split())!='缺考':
count=count+1
sumscore+=int(row_datas[4])
avg.append("%.1f"%(sumscore/count))#存放保留一位小數的成績
#print(avg)
years=['2016','2017','2018']#設計x坐標
bar=Bar("標題:不同年份總體平均成績情況")#設置標題
#畫圖
bar.add("圖註:平均成績",years,avg, is_label_show=True)
bar.render("不同年份總體平均成績情況.html")
3不同性別學生成績情況:
import xlrd
from pyecharts import Line,Bar,Overlap
# 設置文件名和路徑
fname = '課程成績.xlsx'
# 打開文件
filename = xlrd.open_workbook(fname)
sheets = filename.nsheets # 獲得sheet的個數
sheet_list = filename.sheet_names() # sheet名字
listx = []
listy = []
for i in range(len(sheet_list)):
sheet = filename.sheets()[i]
nrows = sheet.nrows # 行數
summan = 0 # 男孩子總分
bcount = 0#男孩數量
sumgirl = 0 # 女孩子總分
gcount = 0#女孩數量
for j in range(1, nrows):
row_datas = sheet.row_values(j)
if row_datas[1] == '男':
if "".join(row_datas[4].split()) != '缺考':
bcount += 1
summan += int(row_datas[4])
else:
if "".join(row_datas[4].split()) != '缺考':
gcount += 1
sumgirl += int(row_datas[4])
listx.append("%.1f" % (summan / bcount))
listy.append("%.1f" % (sumgirl / gcount))
# 畫圖
years = ['2016年', '2017年', '2018年']
# 調用line方法繪製折線圖
bar = Bar("2016-2018年不同性別學生成績情況")
bar.add("男生成績", years, listx,is_smooth=True, mark_point=['max'])
line=Line()
line.add("女生成績", years, listy, mark_point=['min'])
overlap = Overlap()
overlap.add(bar)
overlap.add(line)
# overlap.show_config()
overlap.render('不同性別學生成績情況柱形圖-折線圖.html')