python的功能非常强大,在excel数据的读取与处理也有相应的模块可以实现。在这里,我主要展示如何利用pandas以及matplotlib模块来实现对excel数据的读取,以及数据的简单可视化。
- 模块pandas和matplotlib的安装可采用
pip install pandas
pip install matplotlib
Excel数据的导入
我们所使用的测试数据是一个名为“trati.xlsx”的excel表,它包含两个sheet,分别是trait1和trait2,其中trait1包含100x4的数据,数值范围在10-100,列名分别为env1、env2、env3和env4;trait2包含80x3的数据,数值范围在1-10,列名分别为t1、t2和t3。
如图:
trait1 trait2
- 当导入单张表格时:
import pandas as pd
# 函数pandas.read_excel()读取excel文件
# sheet_name:设置读取的sheet名,默认为第一张sheet;
# na_values:设置缺省值的形式
df=pd.read_excel('trait.xlsx',sheet_name='trait1',na_values='n/a')
# .info()方法可显示df的摘要信息(excel表每一列的数据类型,非缺省值的数目)
df.info()
运行结果如下:
info结果
- 当导入多张表单时:
# 函数pd.ExcelFile():可将Excel文件转换为ExcelFile对象
# 函数ExcelFile.sheet_names:可获取ExcelFile的所有表单的名称,以列表形式存在
xls=pd.ExcelFile('trait.xlsx')
sheetList=xls.sheet_names
print(sheetList)
运行结果如下:
表单名称
在获取sheet名称后,同样需要通过pd.read_excel()函数对excel进行读取。
# 此方法适用于一个excel表里含有多个sheet
df=pd.read_excel('trait.xls',sheet_name=sheetList,na_values='n/a')
# 同样地,如果我们的excel表格sheet数较少(如2-4个),我们可直接对其进行读取。
# 通过把sheetList换成sheet的名字即可,但是切记要以列表形式进行书写。
df=pd.read_excel('trait.xls',sheet_name=['trait1','trait2'],na_values='n/a')
读取多张sheet后,df的存储格式为字典形式,当我们想获取单个sheet的数据时:
# 获取trait1的数据
df['trait1']
# 获取trait2的数据
df['trait1']
# 获取trait1里面env1列的数据
df['trait']['env1']
数据的简单统计
描述性统计学是使用特定的数学或图表来体现数据的集中程度或离散程度,如平均数、中位数、众数、方差和标准差等等。
# .describe()方法可直接返回数据的平均值,方差、最大值和最小值等等
# 如对trait1的env1列进行统计
df['trait1']['env1'].describe()
运行结果如下:
描述性统计
如果只想对单个指标进行统计:
df['trait1']['env1'].count() # 非缺省值的数目
df['trait1']['env1'].mean() # 平均数
df['trait1']['env1'].std() # 标准差
df['trait1']['env1'].min() # 最小值
df['trait1']['env1'].max() # 最大值
数据的展示--直方图
matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包。
在这里,我们只展示直方图的绘制。
- 只对单列的数据进行绘制直方图
import matplotlib.pyplot as plt # 将matplotlib.pyplot缩写为plt,方便后面的使用
plt.hist(df['trait1']['env1'],bins=10,rwidth=0.9,density=True)
# bins:分布区间的数目,也可直接用区间表示,如10-20,20-30,30-40
# rwidth:两柱子间的宽度,以1为最大
# density:bool,默认为false,显示的是频数统计结果,为True则显示频率统计结果,这里需要注意,频率统计结果=区间数目/(总数*区间宽度),和normed效果一致,官方推荐使用density
plt.xlabel('env') # x轴标签
plt.ylabbel('Counts') # y轴标签
plt.xlim(10,70) # x轴数值范围
# plt.ylim(0,0.02) # y轴数值范围
plt.title('histogram of trait1') # 标题
plt.show()
运行如下:
单组数据直方图
- 对多列数据进行绘制直方图
import matplotlib.pyplot as plt # 将matplotlib.pyplot缩写为plt,方便后面的使用
plt.hist([df['trait1']['env1'],df['trait1']['env2'],df['trait1']['env3'],df['trait1']['env4']],bins=10,rwidth=0.9,density=True) # 绘图数据需为列表
plt.legend(['env1','env2','env3','env4'],loc='upper right')
# plt.legend()添加图例,图例的名称需为聊表,loc为图例的位置
plt.show()
运行如下:
多组数据直方图
网友评论