何首乌

注册

 

发新话题 回复该主题

Python数学建模技巧之pandas数 [复制链接]

1#
北京中科医院曝光         http://pf.39.net/bdfyy/dbfzl/160710/4895883.html

在建模竞赛中,大家最了解的科学计算工具或者是编程语言的话,估计很多人都是MATLAB。它集数值计算和科学可视化于一身,同时simulink这个杀手锏。只可惜它是商业软件。在开源层面,GNU计划的Octave一直在做与MATLAB的语法兼容。

倘若要寻找一个在建模竞赛中能够像MATLAB那样很方便求解各类的建模算法的编程语言,Python无疑是不二之选。Python众多的第三方库提供了这种可能。

最常见的库有进行矩阵运算的Numpy、进行数据处理的pandas、进行科学计算的Scipy、进行图形绘制及科学可视化的matplotlib、进行符号计算的Sympy以及方便进行机器学习任务的Sklearn。

由于今年美赛官方公告中称,将会提前在赛题公布之前就提供下载C题数据集的方式。历年美赛C题都是关于大数据的题目,再结合近年来大数据处理技术在社会各行各业中应用得越来越普遍,今年的这则通知可能预示着今年C题的数据量会更大。

既然提前将数据集公布了出来,准备做C题的队伍肯定都是会在赛前就将数据集进行一些基本的预处理,包括数据清洗、数据集成、数据转换、数据规约、数据离散化等操作,甚至在不知道题目的情况下就尝试着用一些数据挖掘的算法去试图发现一些数据集中所包含的潜在规律。

基本工具Excel肯定没法去完成这些复杂的数据处理任务,而用matlab去完成这些任务的话,又会极为繁琐复杂和不方便。因此,采用python去分析几乎就成了唯一的选择。

恰好Python里面的pandas库提供了大数据处理分析的基本方法,是分析大型数据集的基础武器。

下面就具体讲解一下pandas这个库里面最有用的一些函数操作。

最基本功能1、读取数据

data=pd.read_csv(newfile.csv)

类似的函数还有read_excel,read_clipboard,read_sql2、写入数据

data.to_csv(2_newfile.csv,index=None)

index=None表示将会以数据本来的样子写入。如果没有写index=None,会多出一个第一列,内容是1,2,3,...,一直到最后一行。类似的函数其实还有to_excel,to_json,to_pickle等,只不过csv是最常用的表格保存方式。3、检查数据

data.shape#给出行数和列数

data.describe()#计算基本的统计数据

4、查看数据

data.head(3)#打印出数据的前3行。

data.tail()#打印出数据的最后一行。

data.loc[8]#打印出第八行

data.loc[8,column_1]#打印第八行名为「column_1」的列data.loc[range(4,6)]#打印第四到第六行(左闭右开)的数据子集

Pandas的基本函数1、逻辑运算

data[data[column_1]==french]

data[(data[column_1]==french)(data[year_born]==)]

data[(data[column_1]==french)(data[year_born]==)~(data[city]==London)]

可使用(AND)、~(NOT)和

(OR)这些逻辑运算来提取数据子集,且必须在逻辑运算前后加上「and」。

data[data[column_1].isin([french,english])]

除了可以在同一列使用多个OR,还可以使用.isin()函数。

2、基本绘图

前面已经提到,Matplotlib这个库可以进行绘图。并且很方便的一点是:它可以直接在pandas中使用。

data[column_numerical].plot()#基本的绘图

data[column_numerical].hist()#画出数据分布(直方图)

3、更新数据

data.loc[8,column_1]=english#将第八行名为column_1的列替换为“english”

data.loc[data[column_1]==french,column_1]=French#改变多列的值

熟悉了上面的函数操作后,已经可以用python去代替excel的基本功能了。下面我们再来看看还有哪些函数是可以实现那些excel中不容易实现的操作。

中级函数1、统计出现的次数

data[column_1].value_counts()

2、在所有的行、列或者全数据上进行操作

data[column_1].map(len)

#len()函数被应用在了“column_1”列中的每一个元素上

#map()运算给一列中的每一个元素应用一个函数

data[column_1].map(len).map(lambdax/).plot()

#pandas的这种链式方法,可以在一行中更加简单、高效地执行多个操作例如这里的.map()和.plot()

data.apply(sum)#给一个列应用一个函数。

data.applymap()#给表(DataFrame)中的所有单元应用一个函数。

3、将pandas结合tqdm

在处理大规模数据集时pandas会花费一些时间来进行map()、apply()、applymap()等操作。Tqdm是可以用来帮助预测这些操作的执行何时完成的包。它的作用就是在终端上出现一个进度条,使得代码进度可视化。

#用pandas设置tqdm

fromtqdmimporttqdm_notebook

tqdm_notebook().pandas()

#用progress_map()代替map()、apply()和applymap()也是类似的

data[column_1].progress_map(lambdax.count(e))

使用tqdm和pandas得到的进度条如下所示:

4、相关性和散射矩阵

data.corr()#给出相关性矩阵

data.corr().applymap(lambdax:int(x*)/)

pd.plotting.scatter_matrix(data,figsize=(12,8))

#画出散点矩阵,在同一幅图中画出了两列的所有组合。

Pandas中的高级操作1、TheSQL关联

data.merge(other_data,on=[column_1,column_2,column_3])#关联这三列

2、分组

data.groupby(column_1)[column_2].apply(sum).reset_index()

#按一个列分组,选择另一个列来执行一个函数。reset_index()会将数据重构成一个表。

实际上,这里就用到了上面提到过的链式方法,它极大地优化了代码,在一行中将函数简单高效地连接了起来。

3、行迭代

ictionary={}

fori,rowindata.iterrows()/p>

dictionary[row[column_1]]=row[column_2]

#iterrows()使用两个变量一起循环:行索引和行的数据(上面的i和row)

看到这里,相信现在大家肯定可以感受到为何python现在已经几乎成为系统开发之外的最受欢迎的语言了。美赛组委会官方发布公告称:年MCM问题C将会需要访问大型数据集,COMAP将会在年1月21日提供这些数据集的下载方式。为了帮助同学们更好的进行数据分析,在竞赛中脱颖而出,极值学院推出《美赛C题Python数据处理》课程。课程讲解Python基础知识、Python数据分析及美赛C题数据分析示例。课程一共14小时,讲师
分享 转发
TOP
发新话题 回复该主题