R与Python手牵手:数据框的构建、读取与基本描述

浏览: 2017

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

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

任务目标

这次任务目标是:1.在编程环境内创建数据框;2.在本地导入csv文件;3.进行最基本的数据描述性分析。 在开始上代码之前,有必要对数据框这种数据结构进行一定的解释。数据框就是典型的关系型数据库的数据存储形式,每一行是一条记录,每一列是一个属性,最终构成表格的形式,这是数据科学家必须熟悉的最典型的数据结构。

Python

在Python中要使用数据框的类型,需要加载pandas模块。

```python

加载包

import pandas as pd ```

构建数据框

python data = {'year': [2010, 2011, 2012, 2010, 2011, 2012, 2010, 2011, 2012], 'team': ['FCBarcelona', 'FCBarcelona', 'FCBarcelona', 'RMadrid', 'RMadrid', 'RMadrid', 'ValenciaCF', 'ValenciaCF', 'ValenciaCF'], 'wins': [30, 28, 32, 29, 32, 26, 21, 17, 19], 'draws': [6, 7, 4, 5, 4, 7, 8, 10, 8], 'losses': [2, 3, 2, 4, 2, 5, 9, 11, 11] } football = pd.DataFrame( data, columns=['year', 'team', 'wins', 'draws', 'losses']) football

image.png

读取csv文件

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

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

image.png

image.png
image.png

image.png

384 rows × 3 columns

数据基本描述

```python

取前几行

edu.head() ```

image.png

```python

取后几行

edu.tail() ```

image.png

```python

观察列名称

edu.columns ```

Index(['TIME', 'GEO', 'Value'], dtype='object')

```python

观察行名称

edu.index ```

RangeIndex(start=0, stop=384, step=1)

```python

汇总统计

edu.describe() ```

image.png

R

R是面向数据的一门语言,自带数据框类型(data.frame)。不过我们的介绍将会用tidyverse框架下的dplyr介绍,因为它在处理很多问题上更为便捷。

```R

加载包

pacman::p_load(tidyverse) ```

构建数据框

```R year=c(2010, 2011, 2012, 2010, 2011, 2012, 2010, 2011, 2012) team=c('FCBarcelona', 'FCBarcelona', 'FCBarcelona', 'RMadrid', 'RMadrid', 'RMadrid', 'ValenciaCF', 'ValenciaCF', 'ValenciaCF') wins=c(30, 28, 32, 29, 32, 26, 21, 17, 19) draws=c(6, 7, 4, 5, 4, 7, 8, 10, 8) losses=c(2, 3, 2, 4, 2, 5, 9, 11, 11)

football = tibble(year,team,wins,draws,losses)

football ```

image.png

读取csv文件

```R readcsv('G:/Py/introduction-datascience-python-book-master/files/ch02/educfigdp1Data.csv', na=":") %>% #na的设置时把“:”认作缺失值的意思 select(TIME,GEO,Value)-> edu

edu ```

Parsed with column specification: cols( TIME = col_integer(), GEO = col_character(), INDIC_ED = col_character(), Value = col_double(), `Flag and Footnotes` = col_character() )

image.png

image.png

image.png

image.png

数据基本描述

```R

取前几行

edu %>% head ```

image.png

```R

取后几行

edu %>% tail ```

image.png

```R

观察列名称

edu %>% colnames ```

  1. 'TIME'
  2. 'GEO'
  3. 'Value'

```R

观察行名称

edu %>% rownames ```

  1. '1'
  2. '2'
  3. '3'
  4. '4'
  5. '5'
  6. '6'
  7. '7'
  8. '8'
  9. '9'
  10. '10'
  11. '11'
  12. '12'
  13. '13'
  14. '14'
  15. '15'
  16. '16'
  17. '17'
  18. '18'
  19. '19'
  20. '20'
  21. '21'
  22. '22'
  23. '23'
  24. '24'
  25. '25'
  26. '26'
  27. '27'
  28. '28'
  29. '29'
  30. '30'
  31. '31'
  32. '32'
  33. '33'
  34. '34'
  35. '35'
  36. '36'
  37. '37'
  38. '38'
  39. '39'
  40. '40'
  41. '41'
  42. '42'
  43. '43'
  44. '44'
  45. '45'
  46. '46'
  47. '47'
  48. '48'
  49. '49'
  50. '50'
  51. '51'
  52. '52'
  53. '53'
  54. '54'
  55. '55'
  56. '56'
  57. '57'
  58. '58'
  59. '59'
  60. '60'
  61. '61'
  62. '62'
  63. '63'
  64. '64'
  65. '65'
  66. '66'
  67. '67'
  68. '68'
  69. '69'
  70. '70'
  71. '71'
  72. '72'
  73. '73'
  74. '74'
  75. '75'
  76. '76'
  77. '77'
  78. '78'
  79. '79'
  80. '80'
  81. '81'
  82. '82'
  83. '83'
  84. '84'
  85. '85'
  86. '86'
  87. '87'
  88. '88'
  89. '89'
  90. '90'
  91. '91'
  92. '92'
  93. '93'
  94. '94'
  95. '95'
  96. '96'
  97. '97'
  98. '98'
  99. '99'
  100. '100'
  101. '101'
  102. '102'
  103. '103'
  104. '104'
  105. '105'
  106. '106'
  107. '107'
  108. '108'
  109. '109'
  110. '110'
  111. '111'
  112. '112'
  113. '113'
  114. '114'
  115. '115'
  116. '116'
  117. '117'
  118. '118'
  119. '119'
  120. '120'
  121. '121'
  122. '122'
  123. '123'
  124. '124'
  125. '125'
  126. '126'
  127. '127'
  128. '128'
  129. '129'
  130. '130'
  131. '131'
  132. '132'
  133. '133'
  134. '134'
  135. '135'
  136. '136'
  137. '137'
  138. '138'
  139. '139'
  140. '140'
  141. '141'
  142. '142'
  143. '143'
  144. '144'
  145. '145'
  146. '146'
  147. '147'
  148. '148'
  149. '149'
  150. '150'
  151. '151'
  152. '152'
  153. '153'
  154. '154'
  155. '155'
  156. '156'
  157. '157'
  158. '158'
  159. '159'
  160. '160'
  161. '161'
  162. '162'
  163. '163'
  164. '164'
  165. '165'
  166. '166'
  167. '167'
  168. '168'
  169. '169'
  170. '170'
  171. '171'
  172. '172'
  173. '173'
  174. '174'
  175. '175'
  176. '176'
  177. '177'
  178. '178'
  179. '179'
  180. '180'
  181. '181'
  182. '182'
  183. '183'
  184. '184'
  185. '185'
  186. '186'
  187. '187'
  188. '188'
  189. '189'
  190. '190'
  191. '191'
  192. '192'
  193. '193'
  194. '194'
  195. '195'
  196. '196'
  197. '197'
  198. '198'
  199. '199'
  200. '200'
  201. '201'
  202. '202'
  203. '203'
  204. '204'
  205. '205'
  206. '206'
  207. '207'
  208. '208'
  209. '209'
  210. '210'
  211. '211'
  212. '212'
  213. '213'
  214. '214'
  215. '215'
  216. '216'
  217. '217'
  218. '218'
  219. '219'
  220. '220'
  221. '221'
  222. '222'
  223. '223'
  224. '224'
  225. '225'
  226. '226'
  227. '227'
  228. '228'
  229. '229'
  230. '230'
  231. '231'
  232. '232'
  233. '233'
  234. '234'
  235. '235'
  236. '236'
  237. '237'
  238. '238'
  239. '239'
  240. '240'
  241. '241'
  242. '242'
  243. '243'
  244. '244'
  245. '245'
  246. '246'
  247. '247'
  248. '248'
  249. '249'
  250. '250'
  251. '251'
  252. '252'
  253. '253'
  254. '254'
  255. '255'
  256. '256'
  257. '257'
  258. '258'
  259. '259'
  260. '260'
  261. '261'
  262. '262'
  263. '263'
  264. '264'
  265. '265'
  266. '266'
  267. '267'
  268. '268'
  269. '269'
  270. '270'
  271. '271'
  272. '272'
  273. '273'
  274. '274'
  275. '275'
  276. '276'
  277. '277'
  278. '278'
  279. '279'
  280. '280'
  281. '281'
  282. '282'
  283. '283'
  284. '284'
  285. '285'
  286. '286'
  287. '287'
  288. '288'
  289. '289'
  290. '290'
  291. '291'
  292. '292'
  293. '293'
  294. '294'
  295. '295'
  296. '296'
  297. '297'
  298. '298'
  299. '299'
  300. '300'
  301. '301'
  302. '302'
  303. '303'
  304. '304'
  305. '305'
  306. '306'
  307. '307'
  308. '308'
  309. '309'
  310. '310'
  311. '311'
  312. '312'
  313. '313'
  314. '314'
  315. '315'
  316. '316'
  317. '317'
  318. '318'
  319. '319'
  320. '320'
  321. '321'
  322. '322'
  323. '323'
  324. '324'
  325. '325'
  326. '326'
  327. '327'
  328. '328'
  329. '329'
  330. '330'
  331. '331'
  332. '332'
  333. '333'
  334. '334'
  335. '335'
  336. '336'
  337. '337'
  338. '338'
  339. '339'
  340. '340'
  341. '341'
  342. '342'
  343. '343'
  344. '344'
  345. '345'
  346. '346'
  347. '347'
  348. '348'
  349. '349'
  350. '350'
  351. '351'
  352. '352'
  353. '353'
  354. '354'
  355. '355'
  356. '356'
  357. '357'
  358. '358'
  359. '359'
  360. '360'
  361. '361'
  362. '362'
  363. '363'
  364. '364'
  365. '365'
  366. '366'
  367. '367'
  368. '368'
  369. '369'
  370. '370'
  371. '371'
  372. '372'
  373. '373'
  374. '374'
  375. '375'
  376. '376'
  377. '377'
  378. '378'
  379. '379'
  380. '380'
  381. '381'
  382. '382'
  383. '383'
  384. '384'

```R

汇总统计

edu %>% summary ```

TIME GEO Value Min. :2000 Length:384 Min. :2.880 1st Qu.:2003 Class :character 1st Qu.:4.620 Median :2006 Mode :character Median :5.060 Mean :2006 Mean :5.204 3rd Qu.:2008 3rd Qu.:5.660 Max. :2011 Max. :8.810 NA's :23

比较分析

首先,从调用的包来说,python没有pandas是不能使用dataframe数据结构的,R则自带有data.frame数据结构,但是在tidyverse生态中的tibble则是增强型的data.frame,能够满足更加便捷的功能。 其次,就构造数据框而言,python用了字典来构造(字典即键-值对),其中每个值对应的是一个列表(注意,R和python的列表概念大不相同);在R中,首相通过构造每个属性的向量,然后把同等长度的向量合并,从而构造数据框。 再次,读取csv文件的时候,两者其实功能相近,不过pd.read_csv可以在函数中选择要读的列,而在R中我是先读了全数据框再选择这些列。另外需要注意的是,python把缺失值表示为NaN,而R中则是NA。 最后,我们发现在描述性数据分析中,两种语言也是大同小异。值得注意的是,python中行名称开头是0,而R则是1.python沿用了计算机的语言,所有开始都是0;而R则更加符合人类的直观理解,开始的一行标注为第1行。

需要提到的是,我在R中用了不一样的编程风格,与传统的R编程也有所不同。比如用“->”来给右边的变量赋值,很多计算机程序员可能会有意见,认为赋值就是右边的东西给左边,其实人类的思考模式向来就是从左到右的,比如“1 + 1 = 2”,再加上管道操作“%>%”也是单向的,这种灵活的编程模式让数据科学家更加自由而富有灵性地在环境中操纵数据。

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

0 个评论

要回复文章请先登录注册