如何用numpy分析数据(python多条件筛选数据)?如果你对这个不了解,来看看!
利用Python进行数据分析,如何轻松玩转Numpy?,下面是随性自由的葡萄5给大家的分享,一起来看看。
如何用numpy分析数据
前言:NumPy 是 Python 语言的一个扩展程序库。支持高阶大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。NumPy 是 Python 语言的一个扩展程序库。支持高阶大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
numpy介绍:一个用 python 实现的科学计算,包括:1、一个强大的 N 维数组对象 Array;2、比较成熟的(广播)函数库;3、用于整合 C/C++和 Fortran 代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy 和稀疏矩阵运算包 scipy 配合使用更加方便.
下面看看如何应用玩转numpy利用Python进行数据分析之轻松玩转Numpy利用Python进行数据分析之轻松玩转Numpy,轻松玩转Numpy现代人的时间越来越碎片化,因此我准备抛弃那种长篇大论,每天几分钟了解一点点并掌握。
*本节重点:
1.Numpy属性
2.Numpy的创建 array
3.Numpy的基础运算
4.Numpy索引
5.Numpy array的合并
*1.Numpy属性
会介绍几种numpy的属性:
*ndim:维度
*shape:行数和列数
*size:元素个数
*2.Numpy的创建 array知识点:
*array:创建数组
*dtype:指定数据类型
*zeros:创建数据全为0
*ones:创建数据全为1
*empty:创建数据接近0
*arrange:按指定范围创建数据
*linspace:创建线段
*3.Numpy的基础运算numpy的几种基本运算上述代码中的a和b是两个属性为array也就是矩阵的变量,而且二者都是1行4列的矩阵,其中b矩阵中的元素分别是从0到3。
求两个矩阵之间的减法、加法、乘法、除法另外,Numpy中具有很多的数学函数工具,比如三角函数等,当我们需要对矩阵中每一项元素进行函数运算时,可以很简便的调用它们(以sin函数三角函数等,当我们需要对矩阵中每一项元素进行函数运算时,可以很简便的调用它们(以sin函数为例)
*4.Numpy索引
一维索引
在元素列表或者数组中,我们可以用如同a[2]一样的表示方法,同样的,在Numpy中也有相对应的表示方法二维索引
在Python的list中,我们可以利用:对一定范围内的元素进行切片操作,在Numpy中我们依然可以给出相应的方法
这一表示形式即针对第二行中第2到第4列元素进行切片输出(不包含第4列)。此时我们适当的利用for函数进行打印
*5.Numpy array的合并np.vstack)
np.hstack()
np.newaxis()
np.concatenate()
以下关于利用Python实现自动聊天机器人,可以元素进行切片操作,在Numpy中我们依然可以给出相应的方法
这一表示形式即针对第二行中第2到第4列元素进行切片输出(不包含第4列)。此时我们适当的利用for函数进行打印
*5.Numpy array的合并np.vstack()np.hstack()
np.newaxis()
电子版资料无偿领取方式:评论区扣“1”,后台私信“python”
python多条件筛选数据
# 案例01 批量升序排序一个工作簿中的所有工作表import xlwings as xw # 导入xlwings模块import pandas as pd # 导入pandas模块app = xw.App(visible = False, add_book = False) # 启动Excel程序workbook = app.books.open('E:\\Python案例操作\\产品销售统计表.xlsx') # 打开要升序排序的工作簿worksheet = workbook.sheets # 列出工作簿中的所有工作表for i in worksheet: # 遍历工作簿中的工作表 values = i.range('A1').expand('table').options(pd.DataFrame).value # 读取当前工作表的数据并转换为DataFrame格式 result = values.sort_values(by = '销售利润') # 对“销售利润”列进行升序排序 i.range('A1').value = result # 将排序结果写入当前工作表,替换原有数据workbook.save() # 保存工作簿workbook.close() # 关闭工作簿app.quit() # 退出Excel程序In [2]:
# 案例01-1 批量降序排序一个工作簿中的所有工作表import xlwings as xw # 导入xlwings模块import pandas as pd # 导入pandas模块app = xw.App(visible = False, add_book = False) # 启动Excel程序workbook = app.books.open('E:\\Python案例操作\\产品销售统计表.xlsx') # 打开要升序排序的工作簿worksheet = workbook.sheets # 列出工作簿中的所有工作表for i in worksheet: # 遍历工作簿中的工作表 values = i.range('A1').expand('table').options(pd.DataFrame).value # 读取当前工作表的数据并转换为DataFrame格式 result = values.sort_values(by = '销售利润',ascending = False) # 对“销售利润”列进行降序排序 i.range('A1').value = result # 将排序结果写入当前工作表,替换原有数据workbook.save() # 保存工作簿workbook.close() # 关闭工作簿app.quit() # 退出Excel程序In [3]:
# 案例01-2 批量排序多个工作簿中的数据import osimport xlwings as xwimport pandas as pd app = xw.App(visible = False, add_book = False)file_path = 'E:\\Python案例操作\\产品销售统计表'file_list = os.listdir(file_path)for i in file_list: if os.path.splitext(i)[1] == '.xlsx': workbook = app.books.open(file_path + '\\' + i) worksheet = workbook.sheets for j in worksheet: values = j.range('A1').expand('table').options(pd.DataFrame).value result = values.sort_values(by = '销售利润') j.range('A1').value = result workbook.save() workbook.close() app.quit()In [4]:
# 案例02 筛选一个工作簿中的所有工作表数据import xlwings as xw # 导入xlwings模块import pandas as pd # 导入pandas模块app = xw.App(visible = False, add_book = False) # 启动Excel程序workbook = app.books.open('E:\\Python案例操作\\采购表.xlsx') # 打开要处理的工作簿worksheet = workbook.sheets # 列出工作簿中的所有工作表table = pd.DataFrame() # 创建一个空DataFramefor i, j in enumerate(worksheet): # 遍历工作簿中的工作表 values = j.range('A1').options(pd.DataFrame, header=1, index= False, expand='table').value # 读取当前工作表的数据 data = values.reindex(columns=['采购物品', '采购日期', '采购数量', '采购金额']) # 调整列的顺序,将“采购物品”移到第1列 table = table.append(data, ignore_index = True) # 将调整列顺序后的数据合并到前面创建的DataFrame中table = table.groupby('采购物品') # 根据“采购物品”列筛选数据new_workbook = xw.books.add() # 新建一个工作簿for idx, group in table: # 遍历筛选好的数据,其中idx对应物品名称,group对应该物品的所有明细数据 new_worksheet = new_workbook.sheets.add(idx) # 在新工作簿中新增工作表,以物品名称作为工作表名 new_worksheet['A1'].options(index = False).value = group # 在新工作表中写入当前物品的所有明细数据 last_cell = new_worksheet['A1'].expand('table').last_cell # 获取当前工作表数据区域右下角的单元格 last_row = last_cell.row # 获取数据区域最后一行的行号 last_column = last_cell.column # 获取数据区域最后一列的列号 last_column_letter = chr(64 + last_column) # 将数据区域最后一列的列号(数字)转换为该列的列标(字母) sum_cell_name = '{}{}'.format(last_column_letter, last_row+1) # 获取数据区域右下角单元格下方的单元格的位置 sum_last_row_name = '{}{}'.format(last_column_letter, last_row) # 获取数据区域右下角单元格的位置 formula = '=SUM({}2:{})'.format(last_column_letter, sum_last_row_name) # 根据前面获取的单元格位置构造Excel公式,对采购金额进行求和 new_worksheet[sum_cell_name].formula = formula # 将求和公式写入数据区域右下角单元格下方的单元格中 new_worksheet.autofit() # 根据单元格中的数据内容自动调整工作表的行高和列宽new_workbook.save('E:\\Python案例操作\\采购分类表.xlsx') # 保存新建的工作簿并命名为“采购分类表.xlsx”workbook.close() # 关闭工作簿app.quit() # 退出Excel程序In [7]:
# 案例02-1 筛选一个工作簿中的所有工作表数据import xlwings as xw # 导入xlwings模块import pandas as pd # 导入pandas模块app = xw.App(visible = False, add_book = False) # 启动Excel程序workbook = app.books.open('E:\\Python案例操作\\采购表.xlsx') # 打开要处理的工作簿worksheet = workbook.sheets # 列出工作簿中的所有工作表table = pd.DataFrame() # 创建一个空DataFramefor i, j in enumerate(worksheet): # 遍历工作簿中的工作表 values = j.range('A1').options(pd.DataFrame, header=1, index= False, expand='table').value # 读取当前工作表的数据 data = values.reindex(columns=['采购物品', '采购日期', '采购数量', '采购金额']) # 调整列的顺序,将“采购物品”移到第1列 table = table.append(data, ignore_index = True) # 将调整列顺序后的数据合并到前面创建的DataFrame中table = table.groupby('采购物品') # 根据“采购物品”列筛选数据new_workbook = xw.books.add() # 新建一个工作簿for idx, group in table: # 遍历筛选好的数据,其中idx对应物品名称,group对应该物品的所有明细数据 new_worksheet = new_workbook.sheets.add(idx) # 在新工作簿中新增工作表,以物品名称作为工作表名 new_worksheet['A1'].options(index = False).value = group # 在新工作表中写入当前物品的所有明细数据 last_cell = new_worksheet['A1'].expand('table').last_cell # 获取当前工作表数据区域右下角的单元格 last_row = last_cell.row # 获取数据区域最后一行的行号 last_column = last_cell.column # 获取数据区域最后一列的列号 last_column_letter = chr(64 + last_column) # 将数据区域最后一列的列号(数字)转换为该列的列标(字母) sum_cell_name = '{}{}'.format(last_column_letter, last_row+1) # 获取数据区域右下角单元格下方的单元格的位置 sum_last_row_name = '{}{}'.format(last_column_letter, last_row) # 获取数据区域右下角单元格的位置 formula = '=SUM({}2:{})'.format(last_column_letter, sum_last_row_name) # 根据前面获取的单元格位置构造Excel公式,对采购金额进行求和 new_worksheet[sum_cell_name].formula = formula # 将求和公式写入数据区域右下角单元格下方的单元格中 new_worksheet.autofit() # 根据单元格中的数据内容自动调整工作表的行高和列宽 new_worksheet['A1:D1'].api.Font.Name = '宋体' # 设置工作表标题行的字体为“宋体” new_worksheet['A1:D1'].api.Font.Size = 10 # 设置工作表标题行的字号为“10”磅 new_worksheet['A1:D1'].api.Font.Bold = True # 加粗工作表标题行 new_worksheet['A1:D1'].api.Font.Color = xw.utils.rgb_to_int((255,255,255)) # 设置工作表标题行的字体颜色为“白色” new_worksheet['A1:D1'].color = xw.utils.rgb_to_int((0,0,0)) # 设置工作表标题行的单元格填充颜色为“黑色” new_worksheet['A1:D1'].api.HorizontalAlignment = xw.constants.HAlign.xlHAlignCenter # 设置工作表标题行的水平对齐方式为“居中” new_worksheet['A1:D1'].api.VerticalAlignment = xw.constants.VAlign.xlVAlignCenter # 设置工作表标题行的垂直对齐方式为“居中” new_worksheet['B2:B{}'.format(last_row)].number_format = 'm/d' new_worksheet['D2:D{}'.format(last_row)].number_format = '¥#,##0.00' new_worksheet['A2'].expand('table').api.Font.Name = '宋体' # 设置工作表的正文字体为“宋体” new_worksheet['A2'].expand('table').api.Font.Size = 10 # 设置工作表的正文字号为“10”磅 new_worksheet['A2'].expand('table').api.HorizontalAlignment = xw.constants.HAlign.xlHAlignLeft # 设置工作表正文的水平对齐方式为“靠左” new_worksheet['A2'].expand('table').api.VerticalAlignment = xw.constants.VAlign.xlVAlignCenter # 设置工作表正文的垂直对齐方式为“居中” for cell in new_worksheet['A1'].expand('table'): # 从单元格A1开始为工作表添加合适粗细的边框 for b in range(7,12): cell.api.Borders(b).LineStyle = 1 # 设置单元格的边框线型 cell.api.Borders(b).Weight = 2 # 设置单元格的边框粗细new_workbook.save('E:\\Python案例操作\\采购分类表3.xlsx') # 保存新建的工作簿并命名为“采购分类表.xlsx”workbook.close() # 关闭工作簿app.quit() # 退出Excel程序In [12]:
# 案例02-2 筛选一个工作簿中的所有工作表数据import xlwings as xw # 导入xlwings模块import pandas as pd # 导入pandas模块app = xw.App(visible = False, add_book = False) # 启动Excel程序workbook = app.books.open('E:\\Python案例操作\\采购表.xlsx') # 打开要处理的工作簿worksheet = workbook.sheets # 列出工作簿中的所有工作表table = pd.DataFrame() # 创建一个空DataFramefor i, j in enumerate(worksheet): # 遍历工作簿中的工作表 values = j.range('A1').options(pd.DataFrame, header=1, index= False, expand='table').value # 读取当前工作表的数据 data = values.reindex(columns=['采购物品', '采购日期', '采购数量', '采购金额']) # 调整列的顺序,将“采购物品”移到第1列 table = table.append(data, ignore_index = True) # 将调整列顺序后的数据合并到前面创建的DataFrame中table = table.groupby('采购物品') # 根据“采购物品”列筛选数据new_workbook = xw.books.add() # 新建一个工作簿for idx, group in table: # 遍历筛选好的数据,其中idx对应物品名称,group对应该物品的所有明细数据 new_worksheet = new_workbook.sheets.add(idx) # 在新工作簿中新增工作表,以物品名称作为工作表名 new_worksheet['A1'].options(index = False).value = group # 在新工作表中写入当前物品的所有明细数据 last_cell = new_worksheet['A1'].expand('table').last_cell # 获取当前工作表数据区域右下角的单元格 last_row = last_cell.row # 获取数据区域最后一行的行号 last_column = last_cell.column # 获取数据区域最后一列的列号 last_column_letter = chr(64 + last_column) # 将数据区域最后一列的列号(数字)转换为该列的列标(字母) sum_cell_name = '{}{}'.format(last_column_letter, last_row+1) # 获取数据区域右下角单元格下方的单元格的位置 sum_last_row_name = '{}{}'.format(last_column_letter, last_row) # 获取数据区域右下角单元格的位置 formula = '=SUM({}2:{})'.format(last_column_letter, sum_last_row_name) # 根据前面获取的单元格位置构造Excel公式,对采购金额进行求和 new_worksheet[sum_cell_name].formula = formula # 将求和公式写入数据区域右下角单元格下方的单元格中 new_worksheet['A1:{}1'.format(last_column_letter)].api.Font.Name = '宋体' # 设置工作表标题行的字体为“宋体” new_worksheet['A1:{}1'.format(last_column_letter)].api.Font.Size = 20 # 设置工作表标题行的字号为“10”磅 new_worksheet['A1:{}1'.format(last_column_letter)].api.Font.Bold = True # 加粗工作表标题行 new_worksheet['A1:{}1'.format(last_column_letter)].api.Font.Color = xw.utils.rgb_to_int((255,255,255)) # 设置工作表标题行的字体颜色为“白色” new_worksheet['A1:{}1'.format(last_column_letter)].color = xw.utils.rgb_to_int((0,0,0)) # 设置工作表标题行的单元格填充颜色为“黑色” new_worksheet['A1:{}1'.format(last_column_letter)].api.HorizontalAlignment = xw.constants.HAlign.xlHAlignCenter # 设置工作表标题行的水平对齐方式为“居中” new_worksheet['A1:{}1'.format(last_column_letter)].api.VerticalAlignment = xw.constants.VAlign.xlVAlignCenter # 设置工作表标题行的垂直对齐方式为“居中” new_worksheet['B2:B{}'.format(last_row + 1)].number_format = 'm/d' new_worksheet['D2:D{}'.format(last_row + 1)].number_format = '¥#,##0.00' new_worksheet['A2'].expand('table').api.Font.Name = '宋体' # 设置工作表的正文字体为“宋体” new_worksheet['A2'].expand('table').api.Font.Size = 40 # 设置工作表的正文字号为“10”磅 new_worksheet['A2'].expand('table').api.HorizontalAlignment = xw.constants.HAlign.xlHAlignLeft # 设置工作表正文的水平对齐方式为“靠左” new_worksheet['A2'].expand('table').api.VerticalAlignment = xw.constants.VAlign.xlVAlignCenter # 设置工作表正文的垂直对齐方式为“居中” new_worksheet.autofit() # 根据单元格中的数据内容自动调整工作表的行高和列宽 for cell in new_worksheet['A1'].expand('table'): # 从单元格A1开始为工作表添加合适粗细的边框 for b in range(7,12): cell.api.Borders(b).LineStyle = 1 # 设置单元格的边框线型 cell.api.Borders(b).Weight = 2 # 设置单元格的边框粗细new_workbook.save('E:\\Python案例操作\\采购分类表5.xlsx') # 保存新建的工作簿并命名为“采购分类表.xlsx”workbook.close() # 关闭工作簿app.quit() # 退出Excel程序In [14]:
# 案例02-3 在一个工作簿中筛选单一类别数据import xlwings as xwimport pandas as pdapp = xw.App(visible = False, add_book = False)workbook = app.books.open('E:\\Python案例操作\\采购表.xlsx')worksheet = workbook.sheetstable = pd.DataFrame()for i, j in enumerate(worksheet): values = j.range('A1').options(pd.DataFrame, header = 1, index = False, expand = 'table').value data = values.reindex(columns = ['采购物品', '采购日期', '采购数量', '采购金额']) table = table.append(data, ignore_index = True) # 将多个工作表的数据合并到一个DataFrame中product = table[table['采购物品'] == '文件柜'] # 筛选“采购物品”是“保险箱”的数据new_workbook = xw.books.add() new_worksheet = new_workbook.sheets.add('文件柜') new_worksheet['A1'].options(index = False).value = product # 将筛选出的数据写入工作表(index=False为删除索引列)row_num = new_worksheet['A1'].current_region.last_cell.row # 获取工作表中数据区域最后一行的行号new_worksheet['B2:B{}'.format(row_num)].number_format = 'm/d'new_worksheet.autofit() new_workbook.save('E:\\Python案例操作\\文件柜.xlsx')workbook.close()app.quit()In [1]:
# 案例03 对多个工作簿中的工作表分别进行分类汇总import os # 导入os模块import xlwings as xw # 导入xlwings模块import pandas as pd # 导入pandas模块app = xw.App(visible = False, add_book = False) # 启动Excel程序file_path = 'E:\\Python案例操作2\\销售表' # 给出要分类汇总的工作簿所在的文件夹路径file_list = os.listdir(file_path) # 列出文件夹下所有文件和子文件夹的名称for i in file_list: # 遍历文件夹下的文件 if os.path.splitext(i)[1] == '.xlsx': # 判断文件是否是工作簿 workbook = app.books.open(file_path + '\\' + i) # 打开文件夹中的工作簿 worksheet = workbook.sheets # 列出工作簿中的所有工作表 for j in worksheet: # 遍历工作簿中的工作表 values = j.range('A1').expand('table').options(pd.DataFrame).value # 读取当前工作表的数据 values['销售利润'] = values['销售利润'].astype('float') # 转换“销售利润”列的数据类型 result = values.groupby('销售区域').sum()# 根据“销售区域”列对数据进行分类汇总,汇总运算方式为求和 j.range('J1').value = result['销售利润'] # 将各个销售区域的销售利润汇总结果写入当前工作表 workbook.save() # 保存工作簿 workbook.close() # 关闭工作簿app.quit() # 退出Excel程序In [2]:
# 案例03-1 批量分类汇总多个工作簿中的指定工作表import os import xlwings as xw import pandas as pd app = xw.App(visible = False, add_book = False) file_path = 'E:\\Python案例操作2\\销售表1' file_list = os.listdir(file_path) for i in file_list: if os.path.splitext(i)[1] == '.xlsx': workbook = app.books.open(file_path + '\\' + i) worksheet = workbook.sheets['销售记录表'] values = worksheet.range('A1').expand('table').options(pd.DataFrame).value values['销售利润'] = values['销售利润'].astype('float') result = values.groupby('销售区域').sum() worksheet.range('J1').value = result['销售利润'] workbook.save() workbook.close() app.quit()In [3]:
# 案例03-2 将多个工作簿数据分类汇总到一个工作簿import osimport xlwings as xwimport pandas as pdapp = xw.App(visible = False, add_book = False)file_path = 'E:\\Python案例操作2\\销售表'file_list = os.listdir(file_path)collection = []for i in file_list: if os.path.splitext(i)[1] == '.xlsx': workbook = app.books.open(file_path + '\\' + i) worksheet = workbook.sheets['销售记录表'] values = worksheet.range('A1').expand('table').options(pd.DataFrame).value filtered = values[['销售区域', '销售利润']] # 只保留'销售区域', '销售利润'两列数据 collection.append(filtered) workbook.close()new_values = pd.concat(collection, ignore_index = False).set_index('销售区域')new_values['销售利润'] = new_values['销售利润'].astype('float')result = new_values.groupby('销售区域').sum()new_workbook = app.books.add()sheet = new_workbook.sheets[0]sheet.range('A1').value = resultnew_workbook.save('E:\\Python案例操作2\\汇总.xlsx')app.quit()In [4]:
# 案例04 对一个工作簿中的所有工作表分别求和import xlwings as xw # 导入xlwings模块import pandas as pd # 导入pandas模块app = xw.App(visible = False, add_book = False) # 启动Excel程序workbook = app.books.open('E:\\Python案例操作2\\采购表.xlsx') # 打开要求和的工作簿worksheet = workbook.sheets # 列出工作簿中的所有工作表for i in worksheet: # 遍历工作簿中的工作表 values = i.range('A1').expand('table') # 选中工作表中含有数据的单元格区域 data = values.options(pd.DataFrame).value # 使用选中的单元格区域中的数据创建一个DataFrame sums = data['采购金额'].sum() # 在创建的DataFrame中对“采购金额”列进行求和 column = values.value[0].index('采购金额') + 1 # 获取“采购金额”列的列号 row = values.shape[0] # 获取数据区域最后一行的行号 i.range(row + 1, column).value = sums # 将求和结果写入“采购金额”列最后一个单元格下方的单元格中workbook.save() # 保存工作簿workbook.close() # 关闭工作簿app.quit() # 退出Excel程序In [5]:
# 案例04-1 对一个工作簿中的所有工作表分别求和并将求和结果写入固定单元格import xlwings as xwimport pandas as pdapp = xw.App(visible = False, add_book = False)workbook = app.books.open('E:\\Python案例操作2\\采购表.xlsx')worksheet = workbook.sheetsfor i in worksheet: values = i.range('A1').expand('table').options(pd.DataFrame).value sums = values['采购金额'].sum() i.range('F1').value = sumsworkbook.save()workbook.close()app.quit()In [7]:
# 案例05 批量统计工作簿的最大值和最小值import os # 导入os模块import xlwings as xw # 导入xlwings模块import pandas as pd # 导入pandas模块app = xw.App(visible = False, add_book = False) # 启动Excel程序file_path = 'E:\\Python案例操作2\\产品销售统计表' # 列出要统计最大值和最小值的工作簿所在的文件夹路径file_list = os.listdir(file_path) # 列出文件夹下所有文件和子文件夹的名称for j in file_list: # 遍历文件夹下的文件 if os.path.splitext(j)[1] == '.xlsx': # 判断文件是否是工作簿 workbook = app.books.open(file_path + '\\' + j) # 打开文件夹中的工作簿 worksheet = workbook.sheets # 列出当前工作簿中的所有工作表 for i in worksheet: # 遍历工作簿中的工作表 values = i.range('A1').expand('table').options(pd.DataFrame).value # 读取当前工作表的数据 max = values['销售利润'].max() # 统计“销售利润”列的最大值 min = values['销售利润'].min() # 统计“销售利润”列的最小值 i.range('I1').value = '最大销售利润' # 在当前工作表的单元格I1中写入文本内容 i.range('J1').value = max # 在当前工作表的单元格J1中写入统计出的最大值 i.range('I2').value = '最小销售利润' # 在当前工作表的单元格I2中写入文本内容 i.range('J2').value = min # 在当前工作表的单元格J2中写入统计出的最小值 workbook.save() # 保存工作簿 workbook.close() # 关闭工作簿app.quit() # 退出Excel程序In [9]:
# 案例05-1 批量统计一个工作簿中所有工作表的最大值和最小值import xlwings as xw import pandas as pd app = xw.App(visible = False, add_book = False)workbook = xw.Book('E:\\Python案例操作2\\产品销售统计表.xlsx') worksheet = workbook.sheets for i in worksheet: values = i.range('A1').expand('table').options(pd.DataFrame).value max = values['销售利润'].max() min = values['销售利润'].min() i.range('I1').value = '最大销售利润' i.range('J1').value = max i.range('I2').value = '最小销售利润' i.range('J2').value = minworkbook.save()workbook.close()app.quit()In [10]:
# 案例06 批量制作数据透视表import os # 导入os模块import xlwings as xw # 导入xlwings模块import pandas as pd # 导入pandas模块app = xw.App(visible = False, add_book = False) # 启动Excel程序file_path = 'E:\\Python案例操作2\\商品销售表' # 给出要制作数据透视表的工作簿所在的文件夹路径file_list = os.listdir(file_path) # 列出文件夹下所有文件和子文件夹的名称for j in file_list: # 遍历文件夹下的文件 if os.path.splitext(j)[1] == '.xlsx': # 判断文件是否是工作簿 workbook = app.books.open(file_path + '\\' + j) # 打开文件夹中的工作簿 worksheet = workbook.sheets # 列出当前工作簿中的所有工作表 for i in worksheet: # 遍历当前工作簿中的工作表 values = i.range('A1').expand('table').options(pd.DataFrame).value # 读取当前工作表的数据 pivottable = pd.pivot_table(values,values = '销售金额', index = '销售地区',columns = '销售分部', aggfunc = 'sum',fill_value = 0, margins = True,margins_name = '总计') # 用读取的数据制作数据透视表 i.range('J1').value = pivottable # 将制作的数据透视表写入当前工作表 workbook.save() # 保存工作簿 workbook.close() # 关闭工作簿app.quit() # 退出Excel程序In [11]:
# 案例06-1 为一个工作簿的所有工作表制作数据透视表import xlwings as xw import pandas as pd app = xw.App(visible = False, add_book = False) workbook = app.books.open('E:\\Python案例操作2\\商品销售表.xlsx') worksheet = workbook.sheets for i in worksheet: values = i.range('A1').expand('table').options(pd.DataFrame).value pivottable = pd.pivot_table(values, values = '销售金额', index = '销售地区', columns = '销售分部', aggfunc = 'sum', fill_value = 0, margins = True, margins_name = '总计') i.range('J1').value = pivottable workbook.save() workbook.close() app.quit()In [13]:
# 案例07 使用相关系数判断数据的相关性import pandas as pd # 导入pandas模块df = pd.read_excel('E:\\Python案例操作2\\相关性分析.xlsx', index_col = '代理商编号') # 从指定工作簿中读取要进行相关性分析的数据result = df.corr() # 计算任意两个变量之间的相关系数print(result) # 输出计算出的相关系数 年销售额(万元) 年广告费投入额(万元) 成本费用(万元) 管理费用(万元)年销售额(万元) 1.000000 0.982321 0.953981 0.012364年广告费投入额(万元) 0.982321 1.000000 0.917698 -0.046949成本费用(万元) 0.953981 0.917698 1.000000 0.098500管理费用(万元) 0.012364 -0.046949 0.098500 1.000000In [14]:
# 案例07-1 求单个变量和其他变量间的相关性import pandas as pddf = pd.read_excel('E:\\Python案例操作2\\相关性分析.xlsx', index_col = '代理商编号')result = df.corr()['年销售额(万元)'] # 计算年销售额与其他变量之间的皮尔逊相关系数print(result)年销售额(万元) 1.000000年广告费投入额(万元) 0.982321成本费用(万元) 0.953981管理费用(万元) 0.012364Name: 年销售额(万元), dtype: float64In [16]:
# 案例08 使用方差分析对比数据的差异import pandas as pd # 导入pandas模块from statsmodels.formula.api import ols # 导入statsmodels.formula.api模块中的ols()函数from statsmodels.stats.anova import anova_lm # 导入statsmodels.stats.anova模块中的anova_lm()函数import xlwings as xw # 导入xlwings模块df = pd.read_excel('E:\\Python案例操作2\\方差分析.xlsx') # 读取指定工作簿中的数据df = df[['A型号','B型号','C型号','D型号','E型号']] # 选取“A型号”“ B型号”“ C型号”“ D型号”“ E型号”列的数据用于分析df_melt = df.melt() # 将列名转换为列数据,重构DataFramedf_melt.columns = ['Treat', 'Value'] # 重命名列df_describe = pd.DataFrame() # 创建一个空DataFrame用于汇总数据df_describe['A型号'] = df['A型号'].describe() #计算“A型号”轮胎刹车距离的平均值、最大值和最小值等df_describe['B型号'] = df['B型号'].describe() # 计算“B型号”轮胎刹车距离的平均值、最大值和最小值等df_describe['C型号'] = df['C型号'].describe() # 计算“C型号”轮胎刹车距离的平均值、最大值和最小值等df_describe['D型号'] = df['D型号'].describe() # 计算“D型号”轮胎刹车距离的平均值、最大值和最小值等df_describe['E型号'] = df['E型号'].describe() # 计算“E型号”轮胎刹车距离的平均值、最大值和最小值等model = ols('Value~C(Treat)', data = df_melt).fit() # 对样本数据进行最小二乘线性拟合计算anova_table = anova_lm(model, typ = 3) # 对样本数据进行方差分析app = xw.App(visible = False) # 启动Excel程序workbook = app.books.open('E:\\Python案例操作2\\方差分析.xlsx') # 打开要写入分析结果的工作簿worksheet = workbook.sheets['单因素方差分析'] # 选中工作表“单因素方差分析”worksheet.range('H2').value = df_describe.T # 将计算出的平均值、最大值和最小值等数据转置行列并写入工作表worksheet.range('H14').value = '方差分析' # 在工作表中写入文本“方差分析”worksheet.range('H15').value = anova_table # 将方差分析的结果写入工作表workbook.save() # 保存工作簿workbook.close() # 关闭工作簿app.quit() # 退出Excel程序In [1]:
# 案例08-1 绘制箱形图识别异常值import pandas as pdimport matplotlib.pyplot as pltimport xlwings as xwdf = pd.read_excel('E:\\Python案例操作2\\方差分析.xlsx')df = df[['A型号', 'B型号', 'C型号', 'D型号', 'E型号']]figure = plt.figure() # 创建绘图窗口plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题df.boxplot(grid = False) # 绘制箱型图并删除网格线app = xw.App(visible = False)workbook = app.books.open('E:\\Python案例操作2\\方差分析.xlsx')worksheet = workbook.sheets['单因素方差分析'] worksheet.pictures.add(figure, name = '图片1', update = True, left = 500, top = 10) # 将绘制的箱型图插入工作表workbook.save('E:\\Python案例操作2\\箱形图.xlsx')workbook.close()app.quit()In [4]:
# 案例09 使用描述统计和直方图制定目标import pandas as pd # 导入pandas模块import matplotlib.pyplot as plt # 导入Matplotlib模块import xlwings as xw # 导入xlwings模块df = pd.read_excel('E:\\Python案例操作2\\描述统计.xlsx') # 读取指定工作簿中的数据df.columns = ['序号', '员工姓名', '月销售额'] # 重命名数据列df = df.drop(columns=['序号', '员工姓名']) # 删除“序号”列和“员工姓名”列df_describe = df.astype('float').describe() # 计算数据的个数、平均值、最大值和最小值等描述统计数据df_cut = pd.cut(df['月销售额'], bins = 7, precision = 2) # 将“月销售额”列的数据分成7个均等的区间cut_count = df['月销售额'].groupby(df_cut).count() # 统计各个区间的人数df_all = pd.DataFrame() # 创建一个空DataFrame用于汇总数据df_all['计数'] = cut_count # 将月销售额的区间及区间的人数写入前面创建的DataFrame中df_all_new = df_all.reset_index() # 将索引重置为数字序号df_all_new['月销售额'] = df_all_new['月销售额'].apply(lambda x: str(x)) # 将“月销售额”列的数据转换为字符串类型fig = plt.figure() # 创建绘图窗口plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文乱码问题n, bins, patches = plt.hist(df['月销售额'], bins = 7, edgecolor = 'black', linewidth = 0.5) # 使用“月销售额”列的数据绘制直方图plt.xticks(bins) # 将直方图x轴的刻度标签设置为各区间的端点值plt.title('月销售额频率分析') # 设置直方图的图表标题plt.xlabel('月销售额') # 设置直方图x轴的标题plt.ylabel('频数') # 设置直方图y轴的标题app = xw.App(visible = False) # 启动Excel程序workbook = app.books.open('E:\\Python案例操作2\\描述统计.xlsx') # 打开要写入分析结果的工作簿worksheet = workbook.sheets['业务员销售额统计表'] # 选中工作簿中的工作表worksheet.range('E2').value = df_describe # 将计算出的个数、平均值、最大值和最小值等数据写入工作表worksheet.range('H2').value = df_all_new # 将月销售额的区间及区间的人数写入工作表worksheet.pictures.add(fig, name = '图片1', update = True, left = 400, top = 200) # 将绘制的直方图转换为图片并写入工作表worksheet.autofit() # 根据数据内容自动调整工作表的行高和列宽workbook.save('E:\\Python案例操作2\\描述统计1.xlsx') # 另存工作簿workbook.close() # 关闭工作簿app.quit() # 退出Excel程序In [5]:
# 案例09-1 使用自定义区间绘制直方图import pandas as pd import matplotlib.pyplot as plt import xlwings as xwdf = pd.read_excel('E:\\Python案例操作2\\描述统计.xlsx')df.columns = ['序号','员工姓名','月销售额']df = df.drop(columns=['序号','员工姓名'])df_describe = df.astype(float).describe() df_cut = pd.cut(df['月销售额'], bins = range(8, 37, 4))cut_count = df['月销售额'].groupby(df_cut).count()df_all = pd.DataFrame() df_all['计数'] = cut_countdf_all_new = df_all.reset_index()df_all_new['月销售额'] = df_all_new['月销售额'].apply(lambda x:str(x))fig = plt.figure()plt.rcParams['font.sans-serif'] = ['SimHei']n, bins, patches = plt.hist(df['月销售额'], bins = range(8, 37, 4), edgecolor = 'black', linewidth = 0.5)plt.xticks(bins)plt.title('月销售额频率分析')plt.xlabel('月销售额')plt.ylabel('频数')app = xw.App(visible = False)workbook = app.books.open('E:\\Python案例操作2\\描述统计.xlsx')worksheet = workbook.sheets['业务员销售额统计表'] worksheet.range('E2').value = df_describe worksheet.range('H2').value = df_all_newworksheet.pictures.add(fig, name = '图片1', update = True, left = 400, top = 200)worksheet.autofit()workbook.save('E:\\Python案例操作2\\描述统计2.xlsx')workbook.close()app.quit()In [6]:
# 案例10 使用回归分析预测未来值import pandas as pd # 导入pandas模块from sklearn import linear_model # 导入sklearn模块df = pd.read_excel('E:\\Python案例操作2\\回归分析.xlsx', header = None) # 读取指定工作簿中的数据df = df[2:] # 删除前两行数据df.columns = ['月份', '电视台广告费', '视频门户广告费', '汽车当月销售额'] # 重命名数据列x = df[['视频门户广告费', '电视台广告费']] # 获取“视频门户广告费”列和“电视台广告费”列的数据作为自变量y = df['汽车当月销售额'] # 获取“汽车当月销售额”列的数据作为因变量model = linear_model.LinearRegression() # 创建一个线性回归模型model.fit(x, y) # 用自变量和因变量数据对线性回归模型进行训练,拟合出线性回归方程R2 = model.score(x, y) # 计算R2值print(R2) # 输出R2值0.9727262235892342In [7]:
# 案例10-1 使用回归方程计算预测值import pandas as pdfrom sklearn import linear_modeldf = pd.read_excel('E:\\Python案例操作2\\回归分析.xlsx', header = None)df = df[2:]df.columns = ['月份', '电视台广告费', '视频门户广告费', '汽车当月销售额']x = df[['视频门户广告费', '电视台广告费']]y = df['汽车当月销售额']model = linear_model.LinearRegression()model.fit(x,y)coef = model.coef_model_intercept = model.intercept_result = 'y={}*x1+{}*x2{}'.format(coef[0], coef[1], model_intercept)print('线性回归方程为:', '\n', result)a = 30b = 20y = coef[0] * a + coef[1] * b + model_interceptprint(y)线性回归方程为: y=51.06148377665355*x1+9.133786669280708*x2-316.28885036504151398.2313963201793链接:https://pan.baidu.com/s/1tolJ5u5R6xzOSUdV0WpwSw
提取码:mkd8