文章目录
- 1.数据分析流程图
- 2. 列表与数组
- 2.1 二者区别
- 2.2 shape() 函数
- 2.3 生成柱状图比较
- 2.3.1 列表生成柱状图
- 2.3.2 数组生成柱状图
- 2.3.3 扩展案例练习
- 3. 坐标值
- 3.1 添加横纵坐标值
- 4. 其他优化细节
- 4.1 屏幕属性
- 4.2 标题属性
- 4.3 练习案例
- 5. 知识点总结
1.数据分析流程图
- 数据分析 : 是指用,适当的统计分析方法 对收集来的 大量数据进行分析,为提取有用信息和形成结论 而对数据加以详细研究和概括 总结的过程。
- 流程图如下:
- 使用
matplotlib
工具 实现数据图 表的显示.- 数据可视化阶段.
- 数据可视化阶段.
2. 列表与数组
2.1 二者区别
-
在 python中 列表可以存储 相同的数据,也可以存储不同类型的数据.
- python中list中保存的不是数据 ,是地址 ,即 指针.
# 在python的列表 #1. 存储相同类型数据 list = [1,2,3,4,5] list_1 = ["你好","python"] #1.1 存储不同类型的数据 list_3 =[1,2,"String",True] print(list_1,list,list_3)
-
在python中, 是没有数组的概念 ,只能存 同一种数据类型.
- 我们就拿 Java语言中的数组来举例子
- 但是在numpy中也有array()数组, 其中ndarray:是一个多维数组.
public class Hello { //这是一个java的程序 public static void main(String[] args){ //定义一个数组 String[] arr = {"你好","python"}; int[] arr_1 = new int[5]; arr_1[0]=1; arr_1[1]=2; arr_1[2] ="你好"; //这就会报错 } }
-
Numpy 是一个开源的python库,主要用户科学计算,用于快速处理数组.
- 从列表转换为数组
- 从数组转换为列表
注意: tolist()使用可以不导入numpy使用.
# 随机生成 import random #导入计算包 import numpy as np #导入 time包 import time as t #生成 1~3的随机数 # a= random.randint(1,3) # print(a) #a = random.random() #随机生成 [0,1)的浮点数. a = [] # 声明一个列表 for i in range(1000):# 循环100次 # print(random.random()) #往列表中插入数据 append往列表的末尾插入数据. a.append(random.random()) """ 1. 将列表转换为数组 np.array(a) 1.1 通过求和来查看数组执行时间. """ _arr = np.array(a) #相当于使用numpy 将列表转换为数组 print(type(_arr)) # print(_arr) #使用time()方法可以统计时间 返回是一个时间戳 #java中 long time = System.currentTimeMillis(); 毫秒 #使用时需要导入包 begin =t.time() #记录 起始时间 sum_1 = np.sum(_arr) # 使用numpy中的sum求和方法,计算时间 end = t.time() #记录 结束时间 print(sum,f"转换数组,执行时间是{end-begin}") """ 2. 将数组转换为列表 2.1 通过求和来 """ _list =_arr.tolist() # 将数组转换为列表 print(type(_list)) begin_1 =t.time() #记录 起始时间 # 2.使用python中的自己sum求和方法,计算时间 sum_2 = sum(_list) #2.1也可以使用numpy中的 sum() np.sum() end_1 = t.time() #记录 结束时间 print(sum_2,f"转换数组,执行时间是{end_1-begin_1}")
-
从而导致数组的操作是比列表有优势的.
- 创建空间分配时:,数组就 分配好了空间, 而列表 可能是动态的.
- 数据存储时: 数组存储是同一种类型, 列表可以是不同类型,增加了访问时间.
2.2 shape() 函数
-
该默认情况下Python中没有
np.shape()
函数。 -
np.shape()
函数是NumPy库中的一个函数,用于返回给定数组的形状- 即维数和各个维度的长度, 所以, 在执行该代码之前, 需要先导入NumPy库。
import numpy as np a = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 2, 3]] print(np.shape(a)) # (4, 3)
- 结果表示给定的数组
a
是一个四行三列的二维数组,其中有4个元素(行),每行有3个元素(列)。第一个维度是4,第二个维度是3。
-
使用python 中的len()也能计算, 需要注意前提的.
- 在计算列数时, 我们假设了二维列表中的 每个子列表都具有相同的长度,即使用了a[0]来计算列表中第一个子列表的长度,认为第一个子列表的长度即为整个列表中每个子列表的长度。
- 如果二维列表中的各子列表长度不相同, 将会导致无法正确计算列数的问题。
- 还是推荐是用numpy中的 shape()函数,效率高.
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 2, 3]] # 使用len()函数计算二维列表的长度 rows = len(a) # 计算行数 cols = len(a[0]) # 计算列数 print(f"该二维列表的长度为:{rows}行 x {cols}列")
2.3 生成柱状图比较
- 使用列表生成柱状图, 和使用数组生成柱状图.
- 注意一下,二者生成有什么不同.
2.3.1 列表生成柱状图
-
列表生成柱状图
- 需要使用子模块导入
from matplotlib import pyplot as plt
- 注意乱码问题.
# 1. 导入 matplotlib 中 pyplot 子模块 from matplotlib import pyplot as plt # x轴坐标 x = ["一年级", "二年级", "三年级", "四年级", "五年级","六年级"] # y轴坐标 y = [1.21,1.28,1.34,1.38,1.48,1.58] #解决乱码 plt.rcParams["font.sans-serif"]=["SimHei"] plt.rcParams["axes.unicode_minus"]=False #绘制图形 plt.bar(x,y) #保存图片地址 plt.savefig("D:1.png") #生成图片 plt.show()
- 需要使用子模块导入
2.3.2 数组生成柱状图
-
需要使用 numpy中的 array()函数进行转换.
# 1. 导入 matplotlib 中 pyplot 子模块 from matplotlib import pyplot as plt #2. 导入 numpy 模块 import numpy as np # x轴坐标 x = ["一年级", "二年级", "三年级", "四年级", "五年级","六年级"] np.array(x) # y轴坐标 y = [1.21,1.28,1.34,1.38,1.48,1.58] np.array(y) #解决乱码 plt.rcParams["font.sans-serif"]=["SimHei"] plt.rcParams["axes.unicode_minus"]=False #绘制图形 plt.bar(x,y) #保存图片地址 plt.savefig("D:1.png") #生成图片 plt.show()
- 总结: 尽管实际而言在绘制柱状图时,列表和Numpy数组之间的性能差异通常不太明显, 但如果处理的数据非常大,则使用Numpy数组可能会更快。
2.3.3 扩展案例练习
- 将以下案例, 通过两种方式做出柱状图
- 一种使用列表
- 另一种使用数组
3. 坐标值
3.1 添加横纵坐标值
- 单独看一张柱状图需要知道它的需求是什么?
- 下面的图, 如果我不说 是分析身高 你会知道么?
-
所以如何添加坐标值
- 需要使用到
matplotlib中的 xlabel()和ylabel()两个函数.
xlabel(value,attributes),
value 是坐标值, attributes 属性(可选)- 例如: left right center 等等.
# 1. 导入 matplotlib 中 pyplot 子模块 from matplotlib import pyplot as plt #2. 导入 numpy 模块 import numpy as np # x轴坐标 x = ["一年级", "二年级", "三年级", "四年级", "五年级","六年级"] np.array(x) # y轴坐标 y = [1.21,1.28,1.34,1.38,1.48,1.58] np.array(y) #解决乱码 plt.rcParams["font.sans-serif"]=["SimHei"] plt.rcParams["axes.unicode_minus"]=False #使用添加横纵坐标 xlabel和 ylabel plt.xlabel("姓名",loc="rigth",fontsize=20) plt.ylabel("身高",loc="top") #绘制图形 plt.bar(x,y) #保存图片地址 plt.savefig("D:1.png") #生成图片 plt.show()
- 需要使用到
- 在实际使用中,需要根据需要选择具体的标签位置或对齐方式。如果没有指定标签位置, 则 Matplotlib 会 自动选择最佳位置 来放置标签,
- 但这可能导致标签重叠或者遮挡部分图形。
- 因此,了确保标签的可读性和美观性,通常需要手动指定标签位置
4. 其他优化细节
4.1 屏幕属性
- 屏幕的属性,屏幕大小 和 背景 颜色
plt.fgure()
,里面有可选属性.- 二者可以组合使用
# 设置屏幕生成大小 figsiz 默认无, 给元组(a,b) a是长度, b是宽度
plt.figure(figsize=(20,8))
#设置背景 facecolor 背景颜色
plt.figure(facecolor="yellow")
4.2 标题属性
-
设置标题的字体 ,或者背景颜色
- 使用
plt.title()
,里有可选属性fontsize
参数指定了标题的字体大小,fontweight
参数指定了标题的字体粗细,例如:light
backgroundcolor
参数指定了标题的背景色
# 添加标题,指定了标题的内容 plt.title("学生身高") #围绕标题的可选属性, 字体大小,字体样式, 背景色, plt.title("学生身高",fontsize=30,fontweight='heavy',backgroundcolor='yellow')
- 使用
4.3 练习案例
-
将坐标值和优化细节结合.
-
生成方向有横向和纵向,需要注意改坐标值.
plt.bar()
横向plt.barh()
纵向
# 1. 导入 matplotlib 中 pyplot 子模块 from matplotlib import pyplot as plt #2. 导入 numpy 模块 import numpy as np # x轴坐标 x = ["一年级", "二年级", "三年级", "四年级", "五年级","六年级"] np.array(x) # y轴坐标 y = [1.21,1.28,1.34,1.38,1.48,1.58] np.array(y) #解决乱码 plt.rcParams["font.sans-serif"]=["SimHei"] plt.rcParams["axes.unicode_minus"]=False #使用 xlabel和 ylabel plt.xlabel("姓名",loc="left",fontsize = 30) plt.ylabel("身高",loc="top") #设置屏幕大小和颜色 plt.figure(figsize=(20,8),facecolor="yellow") #设置 标题大小 plt.title("学生身高",fontsize=30,fontweight='light',backgroundcolor='red') #绘制图形 plt.bar(x,y) # 也可以生成纵向 # plt.barh(x,y) #保存图片地址 #plt.savefig("D:1.png") #生成图片 plt.show()