Pandas数据处理可视化

简介: Pandas数据处理可视化

以下可视化的数据来源为“transcript.xlsx”成绩单文件,他有六列,分别是学生姓名班级数学科目得分体育科目得分python语言得分美学科目得分。基于这个数据表,进行数据处理和可视化操作。

一、垂直柱形图

柱形图,又称长条图、柱状统计图亦称条图条状图棒形图,是一种以长方形的长度为变量的统计图表。长条图用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。长条图亦可横向排列,或用多维方式表达。

代码如下:

1. import pandas as pd            #导入pandas库
2. import matplotlib.pyplot as plt
3. import numpy as np
4. plt.rcParams['font.sans-serif']=['SimHei']
5. plt.rcParams['axes.unicode_minus']=False
6. 
7. excel_file = 'transcript.xlsx'        #导入文件
8. data = pd.read_excel(excel_file)      #读入数据
9. 
10. def func(type):
11.     type_class = data.loc[data['class'] == type]
12.     class_math = type_class["math"]
13.     class_physics = type_class["physics"]
14.     class_python = type_class["python"]
15.     class_aesthetics = type_class["aesthetics"]
16.     type_dic = {}
17.     type_dic["math"] = sum(class_math)/len(class_math)
18.     type_dic["physics"] = sum(class_physics)/len(class_physics)
19.     type_dic["python"] = sum(class_python)/len(class_python)
20.     type_dic["aesthetics"] = sum(class_aesthetics)/len(class_aesthetics)
21. return type_dic
22. 
23. dic_A = func("A")
24. dic_B = func("B")
25. dic_C = func("C")
26. dic_D = func("D")
27. y1 = list(dic_A.values())
28. y2 = list(dic_B.values())
29. y3 = list(dic_C.values())
30. y4 = list(dic_D.values())
31. x = np.arange(len(y1))
32. 
33. #设置柱状图的宽度
34. width = 0.1
35. #绘图
36. plt.figure(figsize=(8,4))
37. plt.bar(x=x,height=y1,width=width,label='math')
38. plt.bar(x=x+width,height=y2,width=width,label='physics')
39. plt.bar(x=x+2*width,height=y3,width=width,label='python')
40. plt.bar(x=x+3*width,height=y4,width=width,label='aesthetics')
41. plt.xlabel('平均成绩')
42. plt.ylabel('班级')
43. 
44. #添加图标题和图例
45. a = [0,1,2,3]
46. labels = ['A', 'B', 'C', 'D']
47. plt.xticks(a,labels,rotation = 30)
48. plt.title('各个班级四个科目平均成绩垂直柱形图')
49. plt.legend(bbox_to_anchor=(0.1, 1))
50. plt.show()

效果如下:

二、垂直堆叠柱形图

垂直堆叠柱状图是柱状图的一种,可以在较小的可视化应用空间内,智能地展示多维的数据差异。支持自定义y轴区间、多系列数据配置以及堆叠式的数据展示

代码如下:

1. import pandas as pd            #导入pandas库
2. import matplotlib.pyplot as plt
3. import numpy as np
4. plt.rcParams['font.sans-serif']=['SimHei']
5. plt.rcParams['axes.unicode_minus']=False
6. 
7. excel_file = 'transcript.xlsx'        #导入文件
8. data = pd.read_excel(excel_file)      #读入数据
9. 
10. def func(type):
11.     type_class = data.loc[data['class'] == type]
12.     class_math = type_class["math"]
13.     class_physics = type_class["physics"]
14.     class_python = type_class["python"]
15.     class_aesthetics = type_class["aesthetics"]
16.     type_dic = {}
17.     type_dic["math"] = sum(class_math)/len(class_math)
18.     type_dic["physics"] = sum(class_physics)/len(class_physics)
19.     type_dic["python"] = sum(class_python)/len(class_python)
20.     type_dic["aesthetics"] = sum(class_aesthetics)/len(class_aesthetics)
21. return type_dic
22. 
23. dic_A = func("A")
24. dic_B = func("B")
25. dic_C = func("C")
26. dic_D = func("D")
27. y1 = list(dic_A.values())
28. y2 = list(dic_B.values())
29. y3 = list(dic_C.values())
30. y4 = list(dic_D.values())
31. y_list = [y1,y2,y3,y4]
32. x = np.arange(len(y1))
33. width = 0.1
34. plt.xlabel('班级')
35. plt.ylabel('分数')
36. def push(i):
37. #设置柱状图的宽度
38. if i == 0:
39.         plt.bar(x[i], y_list[i][0], alpha=0.7, width=0.3, color='green',label = "math")
40.         plt.bar(x[i], y_list[i][1], alpha=0.7, width=0.3, color='red',bottom=y_list[i][0],label = "physics")
41.         plt.bar(x[i], y_list[i][2], alpha=0.7, width=0.3, color='black',bottom=y_list[i][1],label = "python")
42.         plt.bar(x[i], y_list[i][3], alpha=0.7, width=0.3, color='yellow',bottom=y_list[i][2],label = "aesthetics")
43. else:
44.         plt.bar(x[i], y_list[i][0], alpha=0.7, width=0.3, color='green')
45.         plt.bar(x[i], y_list[i][1], alpha=0.7, width=0.3, color='red', bottom=y_list[i][0])
46.         plt.bar(x[i], y_list[i][2], alpha=0.7, width=0.3, color='black', bottom=y_list[i][1])
47.         plt.bar(x[i], y_list[i][3], alpha=0.7, width=0.3, color='yellow', bottom=y_list[i][2])
48. push(0)
49. push(1)
50. push(2)
51. push(3)
52. 
53. a = [0,1,2,3]
54. labels = ['A', 'B', 'C', 'D']
55. plt.xticks(a,labels,rotation = 30)
56. plt.legend(bbox_to_anchor=(0.30, 0.75))
57. plt.title('垂直堆叠柱形图')
58. plt.show()

效果如下:

三、直方图

直方图又称质量分布图,是一种统计报告图,它是根据具体数据的分布情况,画成以组距为底边、以频数为高度的一系列连接起来的直方型矩形图

代码如下:

1. import pandas as pd            #导入pandas库
2. import matplotlib.pyplot as plt
3. import numpy as np
4. plt.rcParams['font.sans-serif']=['SimHei']
5. plt.rcParams['axes.unicode_minus']=False
6. 
7. excel_file = 'transcript.xlsx'        #导入文件
8. data = pd.read_excel(excel_file)      #读入数据
9. math = data["math"]
10. physics = data["physics"]
11. python = data["python"]
12. aesthetics = data["aesthetics"]
13. 
14. # 计算组数
15. def histo(a,subject):
16.     d = 3  # 组距
17.     num_bins = (max(a) - min(a)) // d
18. # 设置图形大小
19.     plt.figure(figsize=(20, 8), dpi=80)
20.     plt.hist(a, num_bins)
21. # 设置x轴刻度
22.     plt.xticks(range(min(a), max(a) + d, d))
23. # 设置网格
24.     plt.grid(alpha=0.4)
25.     plt.ylabel(subject+"分数",fontsize=60)
26.     plt.title(subject+"科目直方图",fontsize=60)
27. # print(math)
28. histo(math,"math")
29. histo(physics,"physics")
30. histo(python,"python")
31. histo(aesthetics,"aesthetics")
32. plt.show()

效果如下:

四、分布箱线图

线是用来表示一组或多组连续型数据分布的中心位置和散布范围的形,因形似箱子故取名为线

代码如下:

按各个科目的分数分布箱线图:

1. import pandas as pd
2. import matplotlib.pyplot as plt
3. 
4. # 读取excel文件
5. file_01 = pd.read_excel("transcript.xlsx")
6. 
7. fig = plt.figure(figsize=(16, 8))
8. d1 = file_01['math']
9. d2 = file_01['physics']
10. d3 = file_01['python']
11. d4 = file_01['aesthetics']
12. 
13. label = 'math', 'physics', 'python', 'aesthetics'
14. plt.boxplot([d1, d2, d3, d4], labels=label)  # label设置横轴每个箱图对应的横坐标
15. plt.xticks(fontproperties='KaiTi')
16. plt.xlabel('变量', fontproperties='KaiTi',fontsize=40)
17. plt.ylabel('变量值', fontproperties='KaiTi',fontsize=40)
18. plt.show()

按班级的科目分数分布箱线图:

1. import pandas as pd
2. import matplotlib.pyplot as plt
3. 
4. # 读取excel文件
5. data = pd.read_excel("transcript.xlsx")
6. def func(type):
7.     type_class = data.loc[data['class'] == type]
8.     d1 = type_class["math"]
9.     d2 = type_class["physics"]
10.     d3 = type_class["python"]
11.     d4 = type_class["aesthetics"]
12.     label = 'math', 'physics', 'python', 'aesthetics'
13.     plt.boxplot([d1, d2, d3, d4], labels=label)  # label设置横轴每个箱图对应的横坐标
14.     plt.xticks(fontproperties='KaiTi')
15.     plt.xlabel('变量', fontproperties='KaiTi', fontsize=20)
16.     plt.ylabel('变量值', fontproperties='KaiTi', fontsize=20)
17.     plt.show()
18. func("A")
19. func("B")
20. func("C")
21. func("D")

效果如下:

五、总结

  1. Pandas对数据进行筛选,比如说绘制各个班级四个科目平均成绩的垂直柱形图时,需要对不同班级进行筛选,则利用pandas中的type_class = data.loc[data['class'] == type],进行筛选,这里的type即是班级种类ABCD。
  2. 函数封装思想,在整个编程中,运用了蕴含了大量自己封装的函数,因为在画图中有很多重复的操作,比如说画不同科目的直方图时,仅是科目类别对应的数据不一样,代码逻辑和框架是一样的。运用函数封装使得代码更加啊清晰,高效,也能够减少代码量。
  3. 用字典存储对应数据。type_dic = {}键是不同的科目名,键是平均成绩。这样在画图时,键可以作为图列,y1 = list(dic_A.values()),取得y值绘图。
  4. plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False 防止中文标签标题等不能正常显示。
  5. 导入文件,读取数据的相关操作:excel_file = 'transcript.xlsx'#导入文件data = pd.read_excel(excel_file)      #读入数据
  6. 绘制垂直堆叠柱形图时,plt.bar()中注意设置bottom参数是从上一个科目上开始的,这样才能够达到堆叠的效果。
  7. 绘制各个科目的直方图时,设置了一个d组距,将最大值减去最小值除以组距作为num_bins,用plt进行画图,设置网格使效果更加直观。绘制各个科目的分数分布箱线图,label = 'math', 'physics', 'python', 'aesthetics'设置横轴每个箱图对应的横坐标


相关文章
|
14天前
|
数据采集 数据可视化 数据处理
Pandas高级数据处理:数据仪表板制作
《Pandas高级数据处理:数据仪表板制作》涵盖数据清洗、聚合、时间序列处理等技巧,解决常见错误如KeyError和内存溢出。通过多源数据整合、动态数据透视及可视化准备,结合性能优化与最佳实践,助你构建响应快速、数据精准的商业级数据仪表板。适合希望提升数据分析能力的开发者。
66 31
|
4天前
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:数据可视化进阶
Pandas是数据分析的强大工具,能高效处理数据并与Matplotlib、Seaborn等库集成,实现数据可视化。本文介绍Pandas在绘制基础图表(如折线图)和进阶图表(如分组柱状图、热力图)时的常见问题及解决方案,涵盖数据准备、报错处理、图表优化等内容,并通过代码案例详细解释,帮助读者掌握数据可视化的技巧。
29 13
|
3天前
|
数据采集 SQL 数据可视化
Pandas高级数据处理:交互式数据探索
Pandas是Python中流行的数据分析库,提供丰富的数据结构和函数,简化数据操作。本文从基础到高级介绍Pandas的使用,涵盖安装、读取CSV/Excel文件、数据查看与清洗、类型转换、条件筛选、分组聚合及可视化等内容。掌握这些技能,能高效进行交互式数据探索和预处理。
19 6
|
9天前
|
消息中间件 数据挖掘 数据处理
Pandas高级数据处理:数据流式计算
在大数据时代,Pandas作为Python强大的数据分析库,在处理结构化数据方面表现出色。然而,面对海量数据时,如何实现高效的流式计算成为关键。本文探讨了Pandas在流式计算中的常见问题与挑战,如内存限制、性能瓶颈和数据一致性,并提供了详细的解决方案,包括使用`chunksize`分批读取、向量化操作及`dask`库等方法,帮助读者更好地应对大规模数据处理需求。
45 17
|
2天前
|
数据采集 存储 数据可视化
Pandas高级数据处理:数据报告生成
Pandas 是数据分析领域不可或缺的工具,支持多种文件格式的数据读取与写入、数据清洗、筛选与过滤。本文从基础到高级,介绍如何使用 Pandas 进行数据处理,并解决常见问题和报错,如数据类型不一致、时间格式解析错误、内存不足等。最后,通过数据汇总、可视化和报告导出,生成专业的数据报告,帮助你在实际工作中更加高效地处理数据。
19 8
|
11天前
|
数据挖掘 数据处理 开发者
Pandas高级数据处理:实时数据处理
本文介绍了Pandas在实时数据处理中的应用,涵盖基础概念、常见问题及解决方案。Pandas是Python中强大的数据分析库,支持流式读取和增量更新数据,适用于大规模数据集的处理。通过分块读取、数据类型优化等方法,可有效解决内存不足等问题。文中还提供了代码示例,帮助读者更好地理解和掌握Pandas在实时数据处理中的使用技巧。
47 15
|
9天前
|
存储 算法 数据挖掘
Pandas高级数据处理:数据压缩与解压
Pandas是数据分析的强大工具,尤其在处理大文件时,数据压缩技术至关重要。本文介绍如何使用Pandas进行数据压缩与解压,包括常见的gzip、bz2等格式。通过压缩技术,可以显著节省存储空间、加快传输速度并提高读写性能。文章还总结了常见问题及解决方案,如文件路径错误、不支持的压缩格式、内存不足和编码问题,帮助用户更高效地管理海量数据。
39 12
|
7天前
|
存储 数据挖掘 数据处理
Pandas高级数据处理:数据安全与隐私保护
在数字化时代,数据安全与隐私保护至关重要。本文介绍使用Pandas进行数据分析时常见的安全问题及解决方案,包括数据泄露风险、权限报错、数据类型转换错误等,并结合代码案例详细讲解如何避免和解决这些问题。同时,探讨高级策略如访问控制、匿名化、差分隐私及加密传输存储,确保数据分析合法合规。
28 7
|
15天前
|
数据采集 并行计算 数据可视化
Pandas高级数据处理:数据报告生成实战指南
数据报告生成面临数据质量、计算性能、呈现形式和自动化等核心挑战。常见问题包括缺失值导致统计失真、内存溢出及可视化困难。解决方案涵盖数据清洗、分块处理、安全绘图模板等。通过模块化设计、异常处理机制和性能优化策略,如使用`category`类型、并行计算等,可大幅提升效率。最佳实践建议建立数据质量检查清单、版本控制和自动化测试框架,确保系统具备自适应能力,提升报告生成效率300%以上。
52 12
|
8天前
|
存储 算法 数据处理
Pandas高级数据处理:数据加密与解密
在数字化时代,数据安全至关重要。Pandas作为Python的强大数据分析库,结合`cryptography`等加密库,可实现数据的高效加密与解密。本文介绍如何使用Pandas进行数据加密,涵盖对称加密、非对称加密及哈希算法,并提供常见问题及解决方案,确保敏感信息的安全性。通过示例代码演示加密流程,帮助读者掌握数据加密技术,提升数据安全性。
23 1