为了指导Pandas未来的发展方向,Pandas官方团队在2019年夏季进行了一次调查,调查历时15天,共收到1250条反馈数据。问卷数据保存在data文件夹下的2019.csv.zip文件中。这是另一个技巧。原来pandas可以直接从压缩文件中读取数据文件。原文使用的是.gz文件,笨鸟这里也可以使用.zip。下面代码读取问卷数据,设置matplotlib和seaborn的字体,包括如何在macOS下显示中文。importpandasapdimportseabornassnssimportmatplotlib.pyplotasplt%matplotlibinlineplt.rcParams['figure.dpi']=150#让matplotlib支持中文plt.rcParams['font.sans-serif']=['SimHei']#让seaborn的文字变大sns.set(font='SimHei',font_scale=1.2)##MacOS下Matplotlib和Seaborn支持中文#plt.rcParams['font.family']=['ArialUnicodeMS']#sns.set_style('whitegrid',{'font.sans-serif':['ArialUnicodeMS','Arial']})#用来正常显示负号,这里不实用plt.rcParams['axes.unicode_minus']=Falsedf=pd.read_csv("data/2019.csv.zip",parse_dates=['datetime'],encoding="GBK")#df.head()受访者分析大部分受访者使用pandas经验丰富,使用频率高。order=['不到3个月','3个月到1年','1到2年','3到5年','5年以上',]sns.countplot(y='你用的怎么样pandas存在多久了?',data=df,orderorder=order,color='k').set(title="你使用pandas多久了?",ylabel="")sns.despine()order=["刚开始使用","偶尔","每周","每天"]sns.countplot(y='pandas使用频率',data=df,orderorder=order,color='k').set(title="pandasusageFrequency",ylabel="")sns.despine()为了比较Pandas和Python的受欢迎程度,我们的问卷包含了一些在Python开发者调查问卷中被问到的问题。90%的受访者使用Python作为主要开发语言,Python软件基金会研究报告中的数据为84%。pct_format="{:0.2%}".formatdf['Python是你的主要语言吗?'].str.replace("No.*","No").value_counts(normalize=True).apply(pct_format)是90.67%否9.33%姓名:Python是你的主要语言吗?,dtype:object数据显示Windows用户居多。oses=["Linux","Windows","MacOS"]df['你使用哪个操作系统?'].str.split(';').explode().value_counts().div(len(df)).loc[oses].apply(pct_format)Linux61.57%Windows60.21%MacOS42.75%Name:你用什么操作系统?,dtype:object在这里使用0.25版本引入的explode方法定义了一个函数。defsplit_and_explode(s):returns.str.split(";").explode().to_frame()Conda是最流行的虚拟环境工具。replace={"No,Idon'tuseavirtualenvironment":"No"}col='你用过以下Python虚拟环境工具吗?(多选)'sns.countplot(y=col,data=split_and_explode(df[col]).replace(replace),color='k').set(title='下面这些Python虚拟环境工具你用过吗?',ylabel="")sns.despine()绝大多数受访者只使用Python3.df['Python2or3?'].value_counts(normalize=True).rename(index={"2;3":"2&3"}).apply(pct_format)392.39%2&36.80%20.81%Name:Python2还是3?,dtype:objectPandasAPI开源软件团队很难知道用户真正喜欢使用哪些功能。在本次调查中,我们特意提出了一些问题,了解大家的喜好。CSV和Excel是最流行的文件类型,这是喜忧参半的情况。sns.countplot(y='你用哪个reader读取数据?',data=df['你用哪个reader读取数据?'].str.split(';').explode().to_frame(),color='k').set(title="你用什么阅读器读取数据?",ylabel="")sns.despine();为了准备pandaskernel的重构,我们也研究了100列及以上的大DataFrames的处理。sns.countplot(y='处理100列及以上大DataFrame的频率',data=df,color='k').set(title="处理大DataFrames的频率",ylabel="");sns.despine()Pandas添加新的扩展类型很慢。Categorical是最常用的,此外,NullableInteger和Datetimewithtimezone也很常用。sns.countplot(y='你常用的扩展数据类型是什么?',data=split_and_explode(df['你常用的扩展数据类型是什么?']),color='k').set(title="你常用的扩展数据类型是什么?",ylabel="")sns.despine();我们还提出了一些问题,以了解用户最想要的功能。sns.countplot(y='你现在最想看到的改进是什么?',data=df,color='k').set(title="你现在最想看到的改进是什么?",ylabel="")sns.despine()common=(df[df.columns[df.columns.str.startswith("非常想要函数")]].rename(columns=lambdax:x.lstrip("非常想要函数[").rstrip(r"]")))counts=(common.apply(pd.value_counts).T.stack().reset_index().rename(columns={'level_0':'problem','level_1':"重要性",0:"关注次数"}))order=["不相关","有用","重要"]g=(sns.FacetGrid(counts,col="问题",col_wrap=2,aspect=1.5,sharex=False,height=3).map(sns.barplot,"importance","numberofattention",orderorder=order))一目了然,优化处理能力大大规模数据集是每个人最想要的。从这个图中,我们还可以观察到:Pandas文档应该加大力度推广处理大规模数据集的支持库,例如Dask、vaex和modin。就本机字符串数据类型和较少的内部复制要求而言,针对内存效率进行优化也值得一做。下一个优化要求是缺少整数值。这个功能其实在Pandas0.24就已经引入了,但是不是默认方法,需要优化和其他pandasAPI的兼容性。与NumPy相比,pandas更具侵略性。在即将到来的1.0版本中,我们将弃用许多功能并对许多API进行重大更改。幸运的是,大多数人都能接受这样的改变。df['Pandas能否满足你的需求'].value_counts(normalize=True).apply(pct_format)是94.89%否5.11%Name:CanPandasmeetyourneeds,dtype:object很多人,连pandas维护的人都觉得大小大熊猫API太大。为了量化这个问题,我们还询问了用户pandasAPI的大小,看他们觉得是太大了、太小了,还是刚刚好。renamer={"pandas接口太大(很难找到使用方法或难以记忆)或太小(需要提供更多功能)":"pandas接口太大了吗?"}sns.countplot(y="pandas是不是界面太大了?",data=df.rename(columns=renamer),color='k').set(title="pandas界面是不是太大了?",ylabel="")sns.despine();最后,我们还问了一个满意度问题,评分从1(非常不满意)到5(非常满意)。sns.countplot(y='熊猫满意',data=df[['熊猫满意']].dropna().astype(int),color='k').set(title="熊猫满意",ylabel="")sns.despine();大多数人对熊猫都很满意。满意度的平均得分为4.39。我们希望将来跟踪此数据的变化。
