文章插图
文章插图
介绍今天,我很高兴地宣布发布一个名为sidetable的新熊猫实用程序库 。该库使构建频率表变得容易,并简化了对数据帧中缺失值的简单总结 。当我开始探索新的数据集时,我发现它是一个有用的工具,我希望其他人也会发现它也很有用 。
这个项目也是一个解释如何使用pandas的新应用编程接口注册自定义数据框访问器的机会 。该应用编程接口允许您为处理熊猫数据帧和系列构建自定义函数,对于构建您自己的自定义熊猫访问器函数库可能非常有用 。
sidetable侧钻的核心是crosstab熊猫超级版,有一些交叉表(http://www. Sina.com/) 。例如,让我们看一下“学校改进赠款”的一些数据,这样我们就可以理解侧钻如何帮助我们探索新的数据集,并为更复杂的分析找到方法 。
唯一的外部依赖是熊猫版本=1.0 。确保已安装,然后安装侧钻:
Python-mpipinstallsidetable一旦安装了sidetable,就需要导入它来注册pandas访问器 。
将熊猫导入为PDimportsidetabledf=PD. read_ CSV(' https://github.com/Chris1610/pbpython/blob/master/data/school_ transform. CSV?原始=真',索引_列=0)
文章插图
现在已经导入了侧表,您在所有数据框上都有了一个新的访问器value_counts,可以用来构建汇总表 。例如,我们可以使用-stb建立一个频率表来显示每个州有多少所学校,以及它们的总数和百分比:
文章插图
本例显示CA发生92次,占学校总数的12.15% 。如果算上FL,你现在有163所学校,占总数的21.5% 。
从0.6版本开始,侧表可以正确显示百分比 。这里显示的示例是一个比例,而不是百分比 。新版本将结果乘以100-这是表示百分比的正确方式 。sidetable的最新版本也使用小写标题作为列名 。鼓励用户使用最新版本 。
让我们把.stb.freq()和value_counts(normalize= True):进行比较
2c645e" />
文章插图
我想您会同意sidetable 无需花费更多精力即可提供更多数据汇总 。
但是,等等,还有更多!
如果我们想快速查看占总数约50%的州怎么办? 使用thresh参数将所有其余部分归为“其他”类别:
df.stb.freq(['State'], thresh=.5)
文章插图
这很方便 。现在我们可以看到,有8个州几乎贡献了总数的50%,其他所有州则占了剩余的份额 。
如果需要,我们可以使用other_label重命名catch-all类别
df.stb.freq(['State'], thresh=.5, other_label='Rest of states')
【如何做汇总表,大学生创业想法汇总表】sidetable 的有用功能之一是可以将列分组在一起以进一步了解分布 。例如,如果我们想看看如何将各种“转换模型”(Transformation Models)应用到整个地区,该怎么办?df.stb.freq(['Region', 'Model Selected'])
文章插图
此视图是了解各种数据元素的交互和分布的快速方法 。我发现这是一种探索数据并获得可能需要进一步分析的见解的简便方法 。这样的表也很容易与他人共享,因为它相对容易理解 。
您绝对可以使用标准pandas (毕竟是幕后所有东西)执行此分析 。但是,记住代码很麻烦 。我的经验是,如果很难记住,那么您这样做的可能性就较小 。simpletable试图使这种类型的摘要非常容易实现 。
到目前为止,我们一直在计算实例数 。可能更有趣的是按Award Amount查看总细分 。sidetable 允许您传递可以求和的value列(而不是对出现的次数进行计数) 。
df.stb.freq(['Region'], value=https://www.dzlps.cn/'Award_Amount')
文章插图
这种观点使我们了解到,东北地区在这些项目上花费的资金最少,而且总支出中的37%用于了南部地区的学校 。
最后,我们可以查看所选模型的类型并确定分配的美元的80/20细分:
df.stb.freq(['Region', 'Model Selected'],value=https://www.dzlps.cn/'Award_Amount', thresh=.82,other_label='Remaining')
文章插图
如果您熟悉pandas crosstab,那么查看sidetable的一种方法是,它是crosstab的扩展版本,具有一些方便的功能,可以更轻松地查看数据:
文章插图
文章插图
sidetable的目标之一是其输出易于解释 。如果您想利用 pandas style 熊猫样式的函数来格式化输出以提高可读性,则sidetable可以将Percentage和Amount列格式化为更具可读性 。默认情况下不使用它,但是可以通过将style = True传递给函数来看到:
df.stb.freq(['Region'], value=https://www.dzlps.cn/'Award_Amount', style=True)
文章插图
到目前为止,我只展示了freq函数,但是为了展示如何向库中添加其他函数,下面是构建简单缺失值表的示例:
df.stb.missing()
文章插图
在此表中,“Region”列中有10个缺失值,占该列总值的1.3%略少 。
您可以使用df.info()获得类似的信息,但是在快速识别缺失值时,我发现此表更易于解释:
文章插图
该文档显示了有关用法和其他选项的更多信息 。请检查一下,让我知道它是否对您有用 。
我要做的一件事就是感谢三个人对sidetable 所做的贡献 。
pandas访问器API简介如果您想学习如何构建自己的访问器,则实际上相对简单 。作为参考,您可以在此处查看完成所有工作的文件 。
以下是有关入门的简短摘要 。在文件顶部,导入熊猫以访问装饰器:
import pandas as pd@pd.api.extensions.register_dataframe_accessor("stb")class SideTableAccessor:def __init__(self, pandas_obj):self._validate(pandas_obj)self._obj = pandas_obj
这部分代码创建访问器类并定义我选择为stb的访问器值 。一旦安装到位,任何时候导入包含此代码的python模块,您都将获得访问器的注册,并在所有DataFrame上可用 。当实例化该类时,将通过_validate()方法验证当前的熊猫DataFrame,然后在随后的函数中使用self._obj引用该DataFrame 。
在这种情况下,我对validate方法的工作并不多,但是您可以选择添加更多逻辑:
@staticmethoddef _validate(obj):# verify this is a DataFrameif not isinstance(obj, pd.DataFrame):raise AttributeError("Must be a pandas DataFrame")
所有工作都在freq and missing函数中完成 。在大多数情况下,这都是标准的pandas 代码 。您只需要确保返回有效的DataFrame 。例如,这里是本文撰写时missing功能的完整版本:
def missing(self, clip_0=False, style=False):""" Build table of missing data in each column.clip_0 (bool):In cases where 0 counts are generated, remove them from the liststyle (bool):Apply a pandas style to format percentagesReturns:DataFrame with each Column including total Missing Values, Percent Missingand Total rows"""missing = pd.concat([self._obj.isna().sum(),self._obj.isna().mean()],axis='columns').rename(columns={0: 'Missing',1: 'Percent'})missing['Total'] = len(self._obj)if clip_0:missing = missing[missing['Missing'] > 0]results = missing[['Missing', 'Total','Percent']].sort_values(by=['Missing'],ascending=False)if style:format_dict = {'Percent': '{:.2%}', 'Total': '{0:,.0f}'}return results.style.format(format_dict)else:return results
在您的“normal”pandas 代码中,您将使用df引用DataFrame,但是在这里,使用self._obj作为DataFrame来执行串联和排序 。我认为这是构建您自己的熊猫函数自定义样式的非常有用的方法 。如果您要进行某些转换,清除或汇总数据,则可以考虑采用这种方法-而不是仅在文件之间复制和粘贴代码 。
摘要Pandas具有非常丰富的API,但有时可能需要大量的输入和拼写才能以易于理解的格式获取数据 。sidetable 可以通过在数据组合上建立频率表并确定数据中的差距来简化其中的一些摘要任务 。
sidetable 不会取代您可能需要做的任何复杂分析来回答复杂问题 。但是,它是一种方便的工具,可用于快速分析数据并确定您可能需要进一步调查的模式 。
另外,我希望sidetable 作为如何构建自己的Pandas访问器的示例,以简化常规分析过程 。
我希望sidetable 对您有所帮助 。如果您有改进或错误报告的想法,请转到github并告诉我 。我希望它可以随着时间的流逝而发展,并成为对许多其他人有用的有用工具 。我很好奇社区对此有何看法 。
- 其实这个问题一百个人有一百种回答|如何看待小米手机的性价比?
- 关于这个问题我真不知道该如何来回答|华为秒杀苹果三星是否属于自欺欺人?
- 华为荣耀|荣耀80登场,双曲面屏配1.6亿主摄,2699元相比竞品性价比如何?
- 做销售必看的电影,讲创业的电影
- 网络安全|又一个亿万级产品商业化!职场人该如何抓住新赛道,借势而起
- 关于这个问题估计不同人都有不同的看法|苹果手机玩吃鸡游戏体验如何?
- 创业板如何开通,木瓜移动 创业板
- 高德地图|又一个亿万级产品商业化!职场人该如何抓住新赛道,借势而起
- 显示器|如何选择专业显示器支架?电竞和办公通吃的那种
- 如何写一份创业计划书,天麻创业计划书如何写样本