利用Python获取excel的数据并绘制直方图(保姆级教程,含多组样例)

您所在的位置:网站首页 Python怎么导出Excel 利用Python获取excel的数据并绘制直方图(保姆级教程,含多组样例)

利用Python获取excel的数据并绘制直方图(保姆级教程,含多组样例)

2024-02-21 08:47| 来源: 网络整理| 查看: 265

学习样例

开发工具:python3.8、pycharm2020.3.3 开发过程

分析数据

在这里插入图片描述 总共三列数据,分别是年份,月份及对应的客流量,如果将数据可视化,我们可以将年份作为横坐标,可以将客流量总和作为纵坐标,也可以将客流量的平均值作为纵坐标,体现每年客流量总量的变化,等等

引入模块

首先我们的目的是获取xls文件并作图,那么就要引入相关的模块

import xlrd import matplotlib.pyplot as plt

若当前项目文件中还没有这两个模块就需要先下载,具体操作过程 点击file -> Settings 或 ctrl+alt+s 在这里插入图片描述 进入设置页面后,找到Project:项目名中的Python Interpreter,点击下方加号 在这里插入图片描述 在搜索框中搜索需要的模块,点击Install Package,之后等待下载即可 在这里插入图片描述 成功引入相关模块之后,我们就要开始获取xls文件中的数据了 Python 疫情数据分析 Python 商场销售数据分析

获取数据

利用xlrd中的方法获取指定文件指定工作表中的全部数据,其数据是一个列表形式,注意这里flights.xls文件与当前写的xx.py文件需要在同一文件夹内才能获取到数据 在这里插入图片描述 可以通过 open in Explorer打开所在文件夹 在这里插入图片描述 也可以直接在电脑里查找这个文件夹 在这里插入图片描述

data = xlrd.open_workbook("flights.xls") # 打开excel文件 table1 = data.sheet_by_name('flights') # 通过excel里面的表名获取工作表

接下来对得到的数据进行操作

处理数据

先要获得各表头所在列号

row1 = table1.row_values(0) # 根据索引读取一行的数据,即表头 for i in range(len(row1)): # 获取各表头所在列号 if row1[i] == 'year': oneindex1 = i elif row1[i] == 'month': oneindex2 = i elif row1[i] == 'passengers': oneindex3 = i

得到各表头所在列号后,我们将所有数据按列存储到列表中

# 获取year、month、passengers三列的数据 year = table1.col_values(oneindex1, 1) month = table1.col_values(oneindex2, 1) passengers = table1.col_values(oneindex3, 1)

因为我们直方图的横坐标为年份,所以我们需要对year这一列数据进行去除处理

# 剔除year列表中重复元素,并重新排列 Year = list(sorted(set(year)))

因为我们直方图的纵坐标为乘流量的总和,所以我们需要对每一年12个月的乘流量求和

# Passenger_Number存放各year的Passenger的总和 Passenger_Number=[] for i in range(len(Year)): sum=0 for j in range(len(passengers)): if(year[j]==Year[i]): sum+=passengers[j] Passenger_Number.append(int(sum))

如果需要的是该年每个月的平均客流量,只需要求和后做个除法,需要注意的是:结果不一定为整数,需要以浮点型数据输出

# Passenger_Avg存放各year的Passenger的平均值 Passenger_Avg = [] for i in range(len(Passenger_Number)): avg=Passenger_Number[i]/12 Passenger_Avg.append(float('%.3f' % avg))

得到横坐标数据及其对应的纵坐标数据后,就可以开始画图了

作图 plt.xlabel('Date') #设置横坐标 plt.ylabel('Number of Passenger') #设置纵坐标 plt.bar(Year, Passenger_Number) #生成条形图 # 在直方图中各柱的头上标注其值 for a, b in zip(left, height): plt.text(a, b + 1, b, ha='center', va='bottom') plt.show()

bar(x, height, width=0.8, bottom=None, ***, align=‘center’, data=None, *kwargs) 参数如下 在这里插入图片描述 可以通过修改这些参数得到各种自己需要的图形

成果图

1949-1960每年乘客总量 1949-1960每年乘客总量 1949-1960每年乘客平均值 1949-1960每年乘客平均值

完整代码 # -*- coding:utf-8 -*- """ 作者:95345 日期:2021年05月31日 """ import xlrd import numpy as np import matplotlib.pyplot as plt def main(): data = xlrd.open_workbook("flights.xls") # 打开excel文件 table1 = data.sheet_by_name('flights') # 通过excel里面的表名获取工作表 row1 = table1.row_values(0) # 根据索引读取一行的数据,参数:行索引,开始列索引,结束列索引(不包含) for i in range(len(row1)): # 获取表头 if row1[i] == 'year': oneindex1 = i elif row1[i] == 'month': oneindex2 = i elif row1[i] == 'passengers': oneindex3 = i # 获取year、month、passengers三列的数据 year = table1.col_values(oneindex1, 1) month = table1.col_values(oneindex2, 1) passengers = table1.col_values(oneindex3, 1) # 剔除year列表中重复元素,并重新排列 Year = list(sorted(set(year))) # Passenger_Number存放各year的Passenger的总和 Passenger_Number=[] for i in range(len(Year)): sum=0 for j in range(len(passengers)): if(year[j]==Year[i]): sum+=passengers[j] Passenger_Number.append(int(sum)) # Passenger_Avg存放各year的Passenger的平均值 Passenger_Avg = [] for i in range(len(Passenger_Number)): avg=Passenger_Number[i]/12 Passenger_Avg.append(float('%.3f' % avg)) Show(Year,Passenger_Avg) def Show(left,height): print("**************************开始绘图**************************") plt.xlabel('Date') #设置横坐标 plt.ylabel('Number of Passenger') #设置纵坐标 plt.bar(left, height) # 在直方图中各柱的头上标注其值 for a, b in zip(left, height): plt.text(a, b + 1, b, ha='center', va='bottom') plt.show() if __name__ == '__main__': main()

Python 疫情数据分析 Python 商场销售数据分析

其他样例 # -*- coding:utf-8 -*- # -*- coding:utf-8 -*- """ 作者:95345 日期:2021年05月31日 """ import xlrd import numpy as np import matplotlib.pyplot as plt def main(): data = xlrd.open_workbook("exercise.xls") # 打开excel文件 table1 = data.sheet_by_name('exercise') # 通过excel里面的表名获取工作表 row1 = table1.row_values(0) # 根据索引读取一行的数据,参数:行索引,开始列索引,结束列索引(不包含) for i in range(len(row1)): # 获取表头 if row1[i] == 'diet': oneindex1 = i elif row1[i] == 'pulse': oneindex2 = i elif row1[i] == 'time': oneindex3 = i elif row1[i] == 'kind': oneindex4 = i # 获取diet、pulse、time、kind四列的数据 diet = table1.col_values(oneindex1, 1) pulse = table1.col_values(oneindex2, 1) time = table1.col_values(oneindex3, 1) kind = table1.col_values(oneindex4, 1) diet_kind=[] for i in range(len(diet)): str=diet[i]+' '+kind[i]+' '+time[i] diet_kind.append(str) # 剔除diet_kind列表中重复元素,并重新排列 dk = list(sorted(set(diet_kind))) # Passenger_Number存放各year的Passenger的总和 pulse_Avg=[] for i in range(len(dk)): sum=0 for j in range(len(pulse)): if(diet_kind[j]==dk[i]): sum+=pulse[j] avg=sum/5 pulse_Avg.append(float('%.3f' % avg)) pulse_Avg_low=[] pulse_Avg_no=[] for i in range(len(dk)): if(i>=len(dk)/2): pulse_Avg_no.append(pulse_Avg[i]) else: pulse_Avg_low.append(pulse_Avg[i]) left=[] for i in range(len(diet)): str=kind[i]+' '+time[i] left.append(str) Left = list(sorted(set(left))) Show(Left,pulse_Avg_low) # Show(Left,pulse_Avg_no) def Show(left,height): print("**************************开始绘图**************************") plt.xlabel('kind_time') #设置横坐标 plt.ylabel('pulse of low fat') #设置纵坐标 plt.bar(left, height) # 在直方图中各柱的头上标注其值 for a, b in zip(left, height): plt.text(a, b + 1, b, ha='center', va='bottom') plt.show() if __name__ == '__main__': main()

对于no fat 相应时间和状态对应的平均脉搏 在这里插入图片描述

对于low fat 相应时间和状态对应的平均脉搏 在这里插入图片描述

# -*- coding:utf-8 -*- """ 作者:95345 日期:2021年06月02日 """ import xlrd import matplotlib.pyplot as plt def main(): data = xlrd.open_workbook("penguins.xls") # 打开excel文件 table1 = data.sheet_by_name('penguins') # 通过excel里面的表名获取工作表 row1 = table1.row_values(0) # 根据索引读取一行的数据,参数:行索引,开始列索引,结束列索引(不包含) for i in range(len(row1)): # 获取表头 if row1[i] == 'species': oneindex1 = i elif row1[i] == 'island': oneindex2 = i elif row1[i] == 'bill_length_mm': oneindex3 = i elif row1[i] == 'bill_depth_mm': oneindex4 = i elif row1[i] == 'flipper_length_mm': oneindex5 = i elif row1[i] == 'body_mass_g': oneindex6 = i elif row1[i] == 'sex': oneindex7 = i # 获取全部7列的数据 species = table1.col_values(oneindex1, 1) island = table1.col_values(oneindex2, 1) bill_length = table1.col_values(oneindex3, 1) bill_depth = table1.col_values(oneindex4, 1) flipper_length = table1.col_values(oneindex5, 1) body_mass = table1.col_values(oneindex6, 1) sex = table1.col_values(oneindex7, 1) # 将species与island结合,并剔除其中中重复元素,重新排列 species_island=[] for i in range(len(species)): if(sex[i]=='MALE'): sex[i]='M' species_island.append(species[i][0:3]+"_"+island[i][0:3]+"_"+sex[i]) elif(sex[i]=='FEMALE'): sex[i] ='F' species_island.append(species[i][0:3]+"_"+island[i][0:3]+"_"+sex[i]) S_I = list(sorted(set(species_island))) # 避免重复求平均 用一个函数实现 def GetAvg(xx,xx_avg): for i in range(len(S_I)): sum=k=0 for j in range(len(species_island)): if(species_island[j]==S_I[i] and xx[j]!=''): sum+=xx[j] k+=1 avg=sum/k xx_avg.append(float('%.3f' % avg)) # 计算喙长平均值 单位mm bill_length_avg=[] GetAvg(bill_length,bill_length_avg) # 计算喙深平均值 单位mm bill_depth_avg=[] GetAvg(bill_depth,bill_depth_avg) # 计算脚蹼长度平均值 单位mm flipper_length_avg = [] GetAvg(flipper_length,flipper_length_avg) # 计算体重平均值 单位g body_mass_avg=[] GetAvg(body_mass,body_mass_avg) Show(S_I, bill_length_avg,'bill_length_avg(mm)') Show(S_I, bill_depth_avg,'bill_depth_avg(mm)') Show(S_I, flipper_length_avg,'flipper_length_avg(mm)') Show(S_I, body_mass_avg,'body_mass_avg(g)') def Show(left,height,y): print("**************************开始绘图**************************") plt.xlabel('species_island_sex') #设置横坐标 plt.ylabel(y) #设置纵坐标 plt.bar(left, height) # 在直方图中各柱的头上标注其值 for a, b in zip(left, height): plt.text(a, b + 1, b, ha='center', va='bottom') plt.show() if __name__ == '__main__': main()

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3