各位可以看下题目是否相同,然后再参考哈 ,希望对各位有用
需要数据可以私聊(^_^)/
题目
1. 使用数据差分查看员工业绩波动情况(20分,其中完成代码功能并辅以注释12分,针对结果进行文字分析8分)
# 1.使用数据差分查看员工业绩波动情况(20分,其中完成代码功能并辅以注释12分,针对结果进行文字分析8分) import pandas as pd # 读取全部数据,使用默认索引 df = pd.read_excel(r'超市营业额2.xlsx') print('每天交易额变化情况', '=' * 20) dff = df.groupby(by = '日期').sum()['交易额'].diff() # 格式化,正数前面带加号 print(dff.map(lambda num:'%+.2f'%num)[ : ]) print('张三的每天交易总额变化情况', '=' * 20) print(df[df.姓名 == '张三'].groupby(by = '日期').sum()['交易额'].diff()[ : ])
2. 使用透视表和交叉表查看业绩汇总数据(20分,其中完成代码功能并辅以注释12分,针对结果进行文字分析8分)
# 2.用透视表和交叉表查看业绩汇总数据 # (1) 用透视表查看业绩汇总数据 import pandas as pd df = pd.read_excel(r'超市营业额2.xlsx') #读取全部数据,使用默认索引 print('查看每人每天交易总额', '=' * 20) dff = df.groupby(by = ['姓名', '日期'], as_index = False).sum() dff = dff.pivot(index = '姓名', columns = '日期', values = '交易额') # 姓名作为索引,日期作为列名,交易额作为单元格数据 print(dff.iloc[:,:5]) #只输出前 5 天的数据
# <2>交易额低于 5 万元的员工前 5 天业绩 print('交易额低于 5 万元的员工前 5 天业绩', '=' * 20) print(dff[dff.sum(axis = 1) < 50000].iloc[:,:5])
# <3> 使用 pivot_table() 方法实现 print('使用 pivot_table() 方法实现', '=' * 20) # 如果把显示前 5 列的限制去掉,最后会还有一个名字为 ALL 的列 print(df.pivot_table(values = '交易额', index = '姓名', columns = '日期', aggfunc = 'sum', margins = True).iloc[:,:5])
# <4> 查看每人在各柜台的交易总额 print('查看每人在各柜台的交易总额', '=' * 20) dff = df.groupby(by = ['姓名', '柜台'], as_index = False).sum() print(dff.pivot(index = '姓名', columns = '柜台', values = '交易额'))
# <5> 查看每人在各柜台上上班的次数 print('查看每人在各柜台上上班的次数', '=' * 20) print(df.pivot_table(values = '交易额', index = '姓名', columns = '日期', aggfunc = 'count', margins = True).iloc[:])
# <6> 查看每人在各柜台的上班次数 print('查看每人在各柜台的上班次数', '=' * 20) print(df.pivot_table(values = '交易额', index = '姓名', columns = '柜台', aggfunc = 'count', margins = True))
# (2) 用交叉表查看业绩汇总数据 import pandas as pd # 读取全部数据,使用默认索引 df = pd.read_excel(r'超市营业额2.xlsx') # <1> 每人每天上班次数 print('每人每天上班次数', '=' * 20) print(pd.crosstab(df.姓名, df.日期, margins = True).iloc[::])
# <2> 每人在各柜台上班总次数 print('每人在各柜台上班总次数', '=' * 20) print(pd.crosstab(df.姓名, df.日期, margins = True).iloc[:,:])
# <3> 每人在各柜台交易总额 print('每人在各柜台交易总额', '=' * 20) print(pd.crosstab(df.姓名, df.柜台, df.交易额, aggfunc = 'sum'))
# <4> 每人在各柜台交易额平均值 print('每人在各柜台交易额平均值', '=' * 20) print(pd.crosstab(df.姓名, df.柜台, df.交易额, aggfunc = 'mean').apply(lambda num: round(num, 2)))
3. 使用重采样技术按时间段查看员工业绩(20分,其中完成代码功能并辅以注释12分,针对结果进行文字分析8分)
# 3.使用重采样技术按时间段查看员工业绩 import pandas as pd import numpy as np # 读取全部数据,使用默认索引 df = pd.read_excel('超市营业额2.xlsx') df.日期 = pd.to_datetime(df.日期) # <1> 每天 7 天营业总额 print('每天 7 天营业总额', '=' * 20) print(df.resample('7D', on = '日期').sum()['交易额'])
# <2> 每 7 天营业总额 print('每 7 天营业总额', '=' * 20) print(df.resample('7D', on = '日期', label = 'right').sum()['交易额'])
# <3> 每 7 营业额平均值 print('每 7 营业额平均值', '=' * 20) func = lambda num : round(num, 2) print(df.resample('7D', on = '日期', label = 'right').mean().apply(func)['交易额'])
4. 使用标准差与协方差分析员工业绩(20分,其中完成代码功能并辅以注释12分,针对结果进行文字分析8分)
# 4.使用标准差与协方差分析员工业绩 import pandas as pd # 设置列对齐 pd.set_option('display.unicode.ambiguous_as_wide', True) pd.set_option('display.unicode.east_asian_width', True) # 读取全部数据,数用默认索引 df = pd.read_excel('超市营业额2.xlsx') # 丢弃缺失和重复值 df.dropna(inplace = True) df.drop_duplicates(inplace = True) # 处理异常值 df.loc[df.交易额 < 200, '交易额'] = 200 df.loc[df.交易额 > 3000, '交易额'] = 3000 # 使用交叉表得到不同员工在不同柜台的交易额平均值 dff = pd.crosstab(df.姓名, df.柜台, df.交易额, aggfunc = 'mean') # 标准差 print('标准差', '=' * 20) print(dff.std()) # 协方差 print('协方差', '=' * 20) print(dff.cov())
4. 使用标准差与协方差分析员工业绩(20分,其中完成代码功能并辅以注释12分,针对结果进行文字分析8分)
5. 绘制各员工在不同柜台业绩平均值的柱状图(20分,其中完成代码功能并辅以注释12分,针对结果进行文字分析8分)
# 5.绘制各员工在不同柜台业绩平均值的柱状图 import pandas as pd import matplotlib.pyplot as plt import matplotlib.font_manager as fm # 读取全部数据,使用默认索引 df = pd.read_excel('超市营业额2.xlsx') # 修改异常值 df.loc[df.交易额 > 3000, '交易额'] = 3000 df.loc[df.交易额 < 200, '交易额'] = 200 # 删除重复值 df.drop_duplicates(inplace = True) # 填充缺失值 df['交易额'].fillna(df['交易额'].mean(), inplace = True) # 使用交叉表得到每人在各交易额平均值 print('=' * 20) df_group = pd.crosstab(df.姓名, df.柜台, df.交易额, aggfunc = 'mean').apply(round) # 绘制柱状图,默认使用 idnex 作为横坐标 df_group.plot(kind = 'bar') # 设置字体 font = fm.FontProperties(fname = 'C:\Windows\Fonts\STKAITI.ttf') plt.xlabel('员工业绩分布', fontproperties = 'simbei') plt.xticks(fontproperties = 'simhei') plt.legend(prop = font) # 显示绘制结果 plt.show()