数据可视化技术与应用(Python) 课件 项目4 学生成绩数据可视化项目实战_第1页
数据可视化技术与应用(Python) 课件 项目4 学生成绩数据可视化项目实战_第2页
数据可视化技术与应用(Python) 课件 项目4 学生成绩数据可视化项目实战_第3页
数据可视化技术与应用(Python) 课件 项目4 学生成绩数据可视化项目实战_第4页
数据可视化技术与应用(Python) 课件 项目4 学生成绩数据可视化项目实战_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

不区分学科的学生

成绩数据可视化项目实战数据可视化技术与应用项目导读对学生来说,学生成绩数据可视化项目实战能为其提供帮助。在本项目中,将收集和整理学生的成绩数据,并通过数据可视化技术以饼状图和雷达图的形式展示出来,从而帮助学生更好地理解和分析自己的学习情况。项目导读01学习进展可视化03学习目标设定和学习动力激发02学科比较和优化以可视化的方式展示个人成绩数据,学生可以更清晰地了解自己的学习进展,观察自己的成绩变化趋势,了解哪些学科或知识点是自己的优势或劣势,从而更有针对性地调整学习策略。通过将不同学科的成绩以可视化的方式进行比较,学生可以更直观地了解自己在各个学科的表现。这有助于他们发现自己擅长或感兴趣的学科,同时也能看到需要加强的学科,以便更好地安排学习时间和资源。以可视化的方式展示学生成绩的分布情况,学生可以对自己的学习目标进行合理设定。他们可以观察高分和低分区间的学生人数比例,从中获得对自己目标成绩的参考,并制定实际可行的目标。以可视化的方式展示学生成绩与其他因素(如出勤率、作业完成情况等)的关联分析,学生可以更清楚地了解不同因素对自己学习成绩的影响。这有助于激发学生的学习动力,意识到学习态度和努力程度对成绩的重要性,从而促使他们更加努力地学习和参与活动。项目目标学习目标能力目标素养目标掌握使用Plotly模块绘制基本图形掌握CSV模块和pandas模块的异同能用Ploty模块绘制饼状图能对比不同学科和不区分学科展示可视化的异同通过对学生成绩的可视化培养学生主动复盘总结的学习习惯通过参与活动次数与总成绩关系数据可视化培养学生注重理想信念、道德品质、知识智力、身体和心理素质等各方面的提升不区分学科的学生成绩数据可视化项目实战不同学科的学生成绩数据可视化项目实战总成绩相关数据可视化项目实战010302总结与建议04目录CONCENTS4-1不区分学科的学生成绩数据可视化项目实战删除不区分学科的学生成绩数据的重复行使用饼状图进行数据可视化分析0102目录CONCENTS4-1-1删除不区分学科的学生成绩数据的重复行删除不区分学科的学生成绩数据的重复行首先从“素材与案例\项目4\数据集IxAPI-Edu-Data.csv”路径中得到数据集,该数据集的文件类型为CSV,使用Python处理CSV文件可以使用CSV模块。在前面项目中使用的是pandas模块来处理CSV文件,而在本项目中将使用CSV模块来读取CSV文件。CSV模块和pandas模块都可以处理CSV文件,但两者在处理方式和功能上有一些不同,具体异同见表4-1。删除不区分学科的学生成绩数据的重复行为了更方便地理解表4-1中处理数据方式的异同,可以对比CSV模块和pandas模块读取CSV文件的方式。(1)使用CSV模块(2)使用pandas模块代码如下:代码如下:importcsvdata=[]withopen('example.csv','r',newline=",encoding='utf-8')asfile:reader=csv.reader(file)forrowinreader:data.append(row)pythonimportpandasaspddata=pd.read_csv('example.csv')删除不区分学科的学生成绩数据的重复行可以看到,使用pandas模块只需一行代码就可以完成对CSV文件的读取操作,而且pandas模块提供了丰富的数据操作功能,适合处理复杂的数据分析任务。因此,如果需要进行数据分析、处理复杂的数据操作,推荐使用pandas模块;如果只是简单地读取和处理CSV文件,CSV模块也是一个不错的选择。下面打开xAPI-Edu-Data数据集,如图4-1所示,其中有17列字段,在本项目中只用到了Class列,但在接下来的项目中会用到其他列,因此这里仍然对所有列的字段加以说明。删除不区分学科的学生成绩数据的重复行为了更清晰地表达字段的含义,可以查看表4-2中描述的字段的含义。删除不区分学科的学生成绩数据的重复行对于上述数据集,首先从整体上筛选看是否有重复的行,这里使用的不再是前面项目中的pandas模块,而是CSV模块,主要是出于轻量级处理、简单易用和项目要求的考虑。CSV模块是Python标准库的一部分,不需要额外安装,适用于简单的CSV文件的读取和写入操作,且接口简单、直观,更容易上手。通过如下代码可以检查数据集是否存在重复的行。代码讲解:importcsV#指定原始CSV文件和更新后的文件路径input_file=r'C:\Users\Administrator(DesktopIxAPI-Edu-Data.csv'output_file=r'C:\Users\AdministratorDesktop\xAPI-Edu-Data_upda-ted.csv'#读取原始CSV文件withopen(input_file,'r',newline=",encoding='ANSr')asfile:reader=csv.reader(file)data=[rowforrowinreader]删除不区分学科的学生成绩数据的重复行代码讲解:#找出重复行seen=set()

#用集合来存储已经遍历过的行duplicate_indices=[]

#存储重复行的索引forindex,rowinenumerate(data):row_str=','.join(row)

#将列表转换为字符串,方便判断是否重复ifrow_strinseen:

#如果该行已经在集合中出现过duplicate_indices.append(index)

#将重复行的索引加人列表else:seen.add(row_str)#将该行加入集合,表示已经遍历过#现在seen是一个包含所有不重复行的集合,duplicate_indices是重复行的索引列表删除不区分学科的学生成绩数据的重复行#删除重复行中的第一行ifduplicate_indices:#如果存在重复行row_to_delete=duplicate_indices[o]#获取要删除的行的索引l(这里取第一个重复行)deldata[row_to_delete]#从数据中删除重复行中的第一行#保存更新后的数据到原始CSV文件withopen(output_file,'w',newline=")asfile:#打开文件用于写入writer=csv.writer(file)#创建一个CSV写入对象writer.writerows(data)#将更新后的数据写人文件print(f"已删除行{row_to_delete},并更新了原始的csv文件")#输出提示信息else:#如果不存在重复行print("没有重复的行")#输出提示信息代码讲解:运行结果显示有重复的行,因此要将重复的行删除,并将文件命名为xAPI-Edu-Data_updated.csvo删除不区分学科的学生成绩数据的重复行运行结果:删除不区分学科的学生成绩数据的重复行这段代码首先使用CSV模块读取了原始的CSV文件,并将其存储在data列表中。然后使用set数据结构来找出重复行,并将重复行的索引存储在duplicate_indices列表中。代码的重点是set()函数。set()函数是Python中的一个内置函数,用于创建一个无序且不重复的集合(set)对象。集合是一种数据结构,类似于列表(list)或元组(tuple),但与它们不同的是,集合中的元素是无序的,并且不允许重复,这种不允许重复的特点正好可以处理无重复的行。如果存在重复行,会删除重复行中的第一行,并将更新后的数据写入原始的CS文件。最后,根据是否存在重复行来输出相应的提示信息。代码讲解:4-1-2使用饼状图进行数据可视化分析使用饼状图进行数据可视化分析知识新知饼状图是一种常用的数据可视化图表,用于展示各个部分在整体中的比例关系,也就是将整体分割成多个扇形区域,每个扇形的大小表示该部分所占比例的大小。饼状图通常用于呈现分类数据,并强调各个分类之间的相对比例,使观察者能够快速了解数据的分布情况。每个扇形区域的角度大小与其所代表的数据量成正比,而颜色或标签可以用来区分不同的数据类别。饼状图的构成如图4-3所示。使用饼状图进行数据可视化分析适合应用饼状图的场景及饼状图具有的优势见表4-3。接下来对不区分学科的学生成绩数据进行饼状图分析,在使用Plotly模块绘制饼状图前,有必要对Plotly模块进行详解。使用饼状图进行数据可视化分析Plotly是一个流行的交互式数据可视化库,提供了丰富的图形类型和样式,可以用于创建高质量的图形,这些图形可以在Web浏览器中查看,支持缩放、悬停、点击等交互功能。在Python中,Plotly提供了两个不同的接口。①plotly.graph_objs:Plotly的底层接口,它提供了一组图形对象,可以用来定义图表的所有方面。这些对象对应于PlotlyJSON格式图表的不同部分,例如,go.Scatter用于创建散点图,go.Bar用于创建柱状图,go.Layout用于设置图表的布局和样式等。在使用plotly.graph_objs创建图表时,需要手动创建每个图形对象,并明确指定所有的配置选项。这给了人们完全的控制权,但也意味着需要写更多的代码。②plotly.express:建立在plotly.graph_objs之上的更高层次的接口,它提供了一个简化的语法来创建常见的图表类型。plotly.express函数通常只需要数据框架(DataFrame),以及指定列名作为X和Y轴,剩下的工作plotly.express会自动完成。它适合快速探索数据和创建标准图表。接下来绘制饼状图,采用plotly.graph_objects模块。使用饼状图进行数据可视化分析importcsvimportplotly.graph_objectsasgofromcollectionsimportCounterinput_file=r'C:\Users\Administrator\DesktopxAPI-Edu-Data_upda-ted.csv'#读取CSV文件withopen(input_file,'r',newline=",encoding='utf-8')asfile:reader=csv.DictReader(file)class_data=[row['class']forrowinreader]#统计class列数据class_counter=Counter(class_data)class_names=list(class_counter.keys())class_counts=list(class_counter.values())代码如下:使用饼状图进行数据可视化分析#绘制饼状图fig=go.Figure(data=[go.Pie(labels=class_names,values=class.counts)])fig.update_layout(title={'text':'不区分学科的学生成绩','x':0.5,y':0.95,'xanchor':'center','yanchor':'top'}legend=dict(X=O。7,#设置图例的水平位置,范围为0~1Y=l#设置图例的垂直位置,范围为0~1fig.show()代码如下:由图4-4可以看出M等级的成绩占比最大,接近50%,H和L等级的占比大致相同,反映出大部分学生的成绩是达标的。使用饼状图进行数据可视化分析运行结果:使用饼状图进行数据可视化分析上述代码通过plotly.graph_objects.Pie)类创建了饼状图,而该类不是独立存在的,需要和plotly.graph_objects.Figure()类进行配合,plotly.graph_objects.FigureO用于创建一个包含图表数据和布局的Figure对象。它是Plotly中创建图表的基础函数,可以用于创建各种类型的图表,如折线图、散点图、柱状图等。go.Figure()接受一个或多个数据对象作为参数,以及可选的布局参数。上述代码使用go.Figure()创建了一个Figure对象,包含一个由plotly.graph_objects.Pie()类创建的饼状图对象作为数据。接下来依次介绍plotly.graph_objects.Figure()类和plotly.graph_objects.Pie()类。fig=go.Figure(data=[trace],layout=layout)类中的参数如下。●data:一个列表,包含图表的数据对象。数据对象可以是折线图、散点图和柱状图等。每个数据对象都应该是Plotly的图表对象,如go.Scatter()、go.Bar()等,可以传递一个或多个数据对象。●layout:一个字典,用于定义图表的布局设置,如标题、坐标轴和图例等。布局字典中的键和值对应于不同的布局属性。可以使用go.Layout(创建布局字典,或者直接使用字典来设置布局属性。代码讲解:使用饼状图进行数据可视化分析●frames:一个列表,用于定义动画图表的帧。每个帧可以包含数据和布局设置,使图表可以在不同的帧之间切换。●config:一个字典,用于配置图表的全局设置,如交互模式和自适应大小等。下面介绍pie_chart=go.Pie(labels,values,text,hovertext,customdata,pull,hole,rotation,direction,marker=dict(colors,line))类中参数的说明如下。●labels:一个字符串列表,用于指定每个扇区的标签。●values:一个数值列表,用于指定每个扇区的值。●text:一个字符串列表,用于指定每个扇区的附加文本。●hovertext:一个字符串列表,用于指定鼠标指针悬停时显示的文本。●customdata:一个列表,用于指定与每个扇区关联的自定义数据。●pull:一个数值列表,用于指定是否将扇区拉出。●hole:一个0到1的浮点数,用于创建一个环形图。●rotation:一个浮点数,用于指定饼状图的旋转角度。●direction:一个字符串,用于指定饼状图的绘制方向。●marker:一个字典,用于指定扇区的标记样式,如颜色和线条宽度等。代码讲解:使用饼状图进行数据可视化分析了解了两个类参数的说明,能够对go.Figure(data=[go.Pie(labels=class_names,values=class_counts)])这组代码有清晰的解读,即class_names是一个包含饼状图标签的列表,class_counts是一个包含饼状图对应值的列表。将class_names和class_counts作为参数传递给go.Pie)类,即创建了一个饼状图对象pie。另外,通过了解go.Pie(类中的pull参数,可以修改代码将饼状图修改为分离饼状图,即将这组代码fig=go.Figure(data=[go.Pie(labels=class_names,values=class_counts)])修改为fig=go.Figure(data=[go.Pie(labels=class_names,values=class_counts,pull=[0.1,0,0,0])])。修改的代码是将第一个扇区分离出来,使其稍微偏移。当然,读者可以根据需求自定义pull参数的值,以实现不同的分离效果。将第一个扇区分离的饼状图如图4-5所示。4-2不同学科的学生成绩数据可视化项目实战不同学科的学生成绩数据的操作使用雷达图进行数据可视化分析0102目录CONCENTS不同学科的学生成绩数据的操作4-2-1不同学科的学生成绩数据的操作在本子项目中,同样使用子项目4-1的数据,只不过使用的数据从一列扩展到了两列,在Class列的基础上添加了Topic列,如图4-6所示。不同学科的学生成绩数据的操作对于这两列数据,在子项目4-1中已经检查过所有数据的重复行,在此只需检查Topic列中是否有空值任务一不同学科的学生成绩数据的操作importcsvinput_file=r'C:\Users\Administrator\DesktopxAPI-Edu-Data_upda-ted.csv'#读取CSV文件withopen(input_file,'r',newline=")asfile:reader=csv.reader(file)data=[rowforrowinreader]#检查Topic列中是否有空值Topic_empty=Falseforrowindata:ifnotrow[6]:#检查第7列(索引l为6)是否为空值Topic_empty=True#输出结果代码如下:不同学科的学生成绩数据的操作ifTopic_empty:print("Topic列中存在空值")else:print("Topic列中不存在空值")代码如下:运行结果:不同学科的学生成绩数据的操作使用雷达图进行数据可视化分析4-2-2使用雷达图进行数据可视化分析知识新知雷达图(也称为蛛网图)是一种用于可视化多个定量或变量的图表类型。雷达图以一个中心点为起点,沿着多条射线展示不同的变量,并通过连接这些射线上的数据点来形成闭合的多边形。每个变量在雷达图上对应一个轴,而数据点的位置表示该变量的取值。雷达图的构成如图4-8所示。使用雷达图进行数据可视化分析雷达图在许多场景中都有广泛的应用,并具有一定的优势,见表4-4。首先绘制不同的学科在成绩为L的情况下的雷达图。使用雷达图进行数据可视化分析代码如下:importcsvimportpandasaspdimportplotly.graph_objectsasgo#读取CSV文件input_file=r'C:\Users\Administrator(DesktopxAPI-Edu-Data_upda-ted.csv'df=pd.read_csv(input_file)#筛选出Class列为L的数据filtered_df=df[df['class']=='L']#计算不同学科在同一个成绩下的频数score_data=filtered_df.groupby(['Topic'])['class'].count()#创建雷达图数据data=[go.Scatterpolar(r=list(score_data.values)+[score_data.values[o]l,#将最后一个数据连接到第一个数据使用雷达图进行数据可视化分析代码如下:theta=list(score_data.index)+[score_data.index[o]l,fill='none',#设置填充为nonemode='lines',line=dict(color='blue'))]#设置布局和显示雷达图layout=go.Layout(polar=dict(radialaxis=dict(visible=True,range=[O,score_data.values.max()],#根据数据的最大值动态设置坐标轴范围使用雷达图进行数据可视化分析代码如下:griddash='dash'#设置网格线样式为虚线bgcolor='lightblue'#设置雷达图背景色为浅蓝色),title={'text':'不同学科在Class=L的情况','x':0.5,'y':0.95,'xanchor':'center','yanchor':'top'fig=go.Figure(data=data,layout=layout)fig.show()使用雷达图进行数据可视化分析代码运行结果:代码运行结果如图4-9所示。通过图4-9可以看出,在成绩等级为L时,不同学科的情况不同。对于L等级,IT学科人数最多,说明IT学科较难,也说明教师需要更有针对性地提高教学质量。而History学科为L的人数最少,说明学生对History学科的掌握较好。使用雷达图进行数据可视化分析上述代码关键的是plotly.graph_objects.go)类,接下来对这个类的主要参数进行解释说明。plotly.graph_objects.Scatterpolar(r,theta,mode,name,text,hovertext,hoverinfo,line=dict(color,width,dash),marker=dict(symbol,color,size),fill,fillcolor,connectgaps,showlegend,legendgroup)●r:每个数据点的径向坐标值列表,用于确定数据点在雷达图中距离中心的远近。列表中的值应为非负数。●theta:每个数据点的极角坐标值列表,用于确定数据点在雷达图中的位置。列表中的值通常为角度值(以度为单位),可以是0~360的任意数值。代码讲解:使用雷达图进行数据可视化分析●mode:指定数据点的显示模式,可以是以下3个值之一。'lines'仅绘制连接数据点的线条,不显示标记点;'markers'仅绘制标记点,不显示线条;'lines+markers'则同时绘制连接数据点的线条和标记点。●name:数据系列的名称,用于在图例中显示。每个数据系列可以有一个名称。●text:每个数据点的文本标签列表,用于鼠标指针悬停时显示。列表中的每个元素与数据点一一对应,可以为每个数据点提供自定义的文本信息。●hovertext:每个数据点的悬停文本标签列表,用于鼠标指针悬停时显示。列表中的每个元素与数据点一一对应,与text参数类似,但通常用于提供更详细或额外的信息。●hoverinfo:指定鼠标指针悬停时显示的信息,可以是以下3个值之一。'text'仅显示text参数提供的文本标签;'r+theta'显示径向和极角坐标值;'none'不显示任何信息。代码讲解:使用雷达图进行数据可视化分析●line:用于设置线条的样式,可以是一个字典,包含以下属性。color指线条的颜色,可以是颜色名称(如'red')或十六进制颜色码(如'#FFO000');width指线条的宽度;dash指线条的样式,可以是'solid'(实线)、'dash'(虚线)、'dot'(点线)等。●marker:用于设置标记点的样式,可以是一个字典,包含以下属性。●symbol:标记点的形状,可以是'circle'(圆形)、'square'(正方形)、'diamond'(菱形)等。●color:标记点的颜色,可以是颜色名称或十六进制颜色码。●size:标记点的大小。●fill:指定雷达图区域的填充方式,可以是以下3个值之一。'none'指无填充,区域呈透明状;'toself'指闭合填充,将雷达图的区域填充为数据点所形成的多边形;'tonext'指在与下一个数据点之间的区域填充,形成一个扇区状的填充。代码讲解:使用雷达图进行数据可视化分析●fillcolor:填充区域的颜色,可以是颜色名称或十六进制颜色码。●connectgaps:指定是否连接非连续的数据点。如果设置为True,则会在非连续的数据点之间绘制线条连接。●showlegend:指定是否显示图例。如果设置为True,则在图中显示数据系列的图例。●legendgroup:将数据系列分组,以便在图例中一起显示,可以使用相同legendgroup值将多个数据系列分组,以便它们在图例中显示为一组。代码讲解:使用雷达图进行数据可视化分析上述代码将只显示“class=L”扩展为“class=H、M、L”3种情况的雷达图。另外,需要将plotly.graph_objects.Layout()类的参数griddash和bgcolor设置为默认。不同学科成绩的代码如下:代码讲解:importcsvimportpandasaspdimportplotly.graph_objectsasgo#读取CSV文件input_file=r'C:\Users\Administrator\DesktopxAPI-Edu-Data_upda-ted.csv'df=pd.read_csv(input_file)#计算不同学科的分数score_data=df.groupby(['class','Topic'])['Topic'].count().unstack('Topic').fillna(0)#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论