R与Python手牵手:数据的分组排序

浏览: 1798

作者黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。

邮箱:huang.tian-yuan@qq.com


这次介绍如何在Python与R中进行表格数据的分组排序,也就是分组进行统一运算,以及按照规则进行排列。

Python

```python

载入模块

import pandas as pd import numpy as np import matplotlib.pylab as plt

载入数据

edu = pd.readcsv('G:/Py/introduction-datascience-python-book-master/files/ch02/educfigdp1Data.csv', navalues=':', usecols=['TIME', 'GEO', 'Value']) #navalues是把“:”符号认为是缺失值的意思 ```

数据可以在以下网址取得:https://github.com/DataScienceUB/introduction-datascience-python-book

排序

```python

按照Value从大到小排序,ascending控制正序倒序,inplace控制是否在原数据集进行修改

edu.sort_values(by='Value', ascending=False, inplace=True) edu.head() ```

image.png

```python

返回原始排序

edu.sort_index(axis=0, ascending=True, inplace=True) edu.head() ```

image.png

由此,我们也可以发现,无论我们怎么进行排序,原始的行号是一直得以保存的,有了这个我们就可以从新恢复数据的排序。

分组

```python

根据GEO分组得到组内的平均值

group = edu[['GEO', 'Value']].groupby('GEO').mean() group.head() ```

image.png

整合

python filtered_data = edu[edu['TIME'] > 2005] pivedu = pd.pivot_table(filtered_data, values='Value', index=['GEO'], columns=['TIME']) pivedu.head()

image.png

python pivedu.loc[['Spain', 'Portugal'], [2006, 2011]]

image.png

R

下面看看R语言中实现相同操作的步骤:

```R

加载包与数据读取

library(tidyverse)

edu = readcsv('G:/Py/introduction-datascience-python-book-master/files/ch02/educfigdp1Data.csv', na=":") %>% 
select(TIME,GEO,Value)

```

-- Attaching packages --------------------------------------- tidyverse 1.2.1 -- √ ggplot2 3.0.0 √ purrr 0.2.5 √ tibble 1.4.2 √ dplyr 0.7.6 √ tidyr 0.8.1 √ stringr 1.3.1 √ readr 1.1.1 √ forcats 0.3.0 -- Conflicts ------------------------------------------ tidyverse_conflicts() -- x dplyr::filter() masks stats::filter() x dplyr::lag() masks stats::lag() Parsed with column specification: cols( TIME = col_integer(), GEO = col_character(), INDIC_ED = col_character(), Value = col_double(), `Flag and Footnotes` = col_character() )

排序

R edu %>% arrange(desc(Value)) %>% head

image.png

首先,要知道desc()加在Value前,就会变为降序排列,否则默认为升序。 这里,如果需要在原始数据中变更,赋值给本身即可,其实在原始数据中改数据是极其危险的,不推荐,应该总是用copy来操作,如果出错了随时回到原始备份再次copy。

分组

R edu %>% select(GEO,Value) %>% #选择指定列 group_by(GEO) %>% #按照GEO分组 summarize (Value = mean(Value,na.rm = T)) %>% #按照分组计算Value的均值,忽略缺失值 head() #取前几行进行展示

image.png

整合

R edu %>% filter(TIME > 2005) %>% spread(key = TIME,value = Value) -> pivedu pivedu %>% head

image.png

分析

同样的步骤,不同的表达,大同小异。

温馨提示

后面所有的教程都会坚持用最简单的例子,这样有一点不会的同学也能够很容易通过查询进行扩展。如果个别函数不知道如何使用,请使用?来查询使用方法,如R中“?spread”。

推荐 0
本文由 R语言中文社区 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册