学习样例
开发工具: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=