34

R语言 | 读写txt、csv、excel文件

 3 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzI1MTE2ODg4MA%3D%3D&%3Bmid=2650074157&%3Bidx=1&%3Bsn=53220e356be453f78bbe58ca54be5e4a
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

[更新~] Python网络爬虫与文本数据分析

前段时间看到plotnine库(封装的R语言ggplot2)作的图太美了,有点想重新拾起R语言^_^

R语言代码略带凌乱,讲真的还是更喜欢Python代码简洁。不过好几年不琢磨R语言,对R语言代码的凌乱美有些新奇,很好玩,这也许就是久别胜新欢吧。

而且R语言的文本分析生态也挺全的,Python与R结合起来,完美~

3qIFjyZ.png!web

R语言读写操作

本章文件读写用到的包有

  • readtext

  • readr

  • readxl

  • writexl

其中readr、readxl均为tidyverse内的子包,做数据分析一般绕不开tidyverse

yEjeUfb.png!web

tidyverse含有的包

library(tidyverse)
tidyverse::tidyverse_packages()
##  [1] "broom"      "cli"        "crayon"     "dbplyr"     "dplyr"     
##  [6] "forcats"    "ggplot2"    "haven"      "hms"        "httr"      
## [11] "jsonlite"   "lubridate"  "magrittr"   "modelr"     "pillar"    
## [16] "purrr"      "readr"      "readxl"     "reprex"     "rlang"     
## [21] "rstudioapi" "rvest"      "stringr"    "tibble"     "tidyr"     
## [26] "xml2"       "tidyverse"

预备知识: tibble包

tibble比R内置的数据框的易用,默认不会将字符串转化为因子型。选择tibble数据的子集,返回的结果仍是tibble类型

  • 创建数据框: tibble()

  • 强制转化数据框: as_tibble()

创建数据框

#tibble::tibble意识是导入tibble包的tibble函数
df <- tibble::tibble(
  x = c(1,2,3,4),
  name=c("张三", "李四", "王五", "赵六"),
  age=c(25, 23, 30, 18)
  )

df

eiqy2aY.png!web

colnames(df)
## [1] "x"    "name" "age"
rownames(df)
## [1] "1" "2" "3" "4"

读写实战

安装

install.packages(c("readtext","readr","readxl", "writexl"))

读取文件相关操作

读取 包 代码 功能 txt readtext readtext() 读取txt文件 csv readr read_csv() 读取csv文件 excel readxl read_excel() 读取xls、xlsx文件

读取csv

默认csv文件为utf-8编码

#读取csv
df <- readr::read_csv('data/waimai8k.csv')
#为了展示的更好看一些
df <- DT::datatable(df)
df

JJfyMbB.png!web

读取excel文件

df2 <- readxl::read_excel('data/data.xlsx')
df2

BFBVBvI.png!web

读txt

document <- readtext::readtext('data/三体.txt')
document

IzQ7rmu.png!web

#全部显示
#document['text']

#显示前200个字符
substr(document['text'], 1, 200)
## [1] "\n------------\n\n第1章 科学边界(1)\n\n    恋上你看书网 630bookla ,最快更新三体(全集)最新章节!\n\n    汪淼觉得,来找他的这四个人是一个奇怪的组合:两名警察和两名军人,如果那两个军人是武警还算正常,但这是两名陆军军官。\n\n    汪淼第一眼就对来找他的警察没有好感。其实那名穿警服的年轻人还行,举止很有礼貌,但那位便衣就让人讨厌了。这人长得五大三粗,一脸横肉,穿"
document[['doc_id']]
## [1] "三体.txt"
#全部显示
#document[['text']]

#显示前200个字符
substr(document[['text']], 1, 200)
## [1] "\n------------\n\n第1章 科学边界(1)\n\n    恋上你看书网 630bookla ,最快更新三体(全集)最新章节!\n\n    汪淼觉得,来找他的这四个人是一个奇怪的组合:两名警察和两名军人,如果那两个军人是武警还算正常,但这是两名陆军军官。\n\n    汪淼第一眼就对来找他的警察没有好感。其实那名穿警服的年轻人还行,举止很有礼貌,但那位便衣就让人讨厌了。这人长得五大三粗,一脸横肉,穿"

导入多个txt文件

  • list.files() 某路径下多个文件

#获取文件列表
files <- list.files('data/txts', full.names=TRUE)
head(files)
## [1] "data/txts/三孚股份2017.txt" "data/txts/三棵树2017.txt"  
## [3] "data/txts/三江购物2017.txt" "data/txts/上海九百2017.txt"
## [5] "data/txts/上海机电2017.txt" "data/txts/上海物贸2017.txt"
texts <- c()
doc_ids <- c()

for (file in files) {
  document <- readtext::readtext(file, encoding = 'gbk')
  doc_ids <- c(doc_ids, document[['doc_id']])
  texts <- c(texts, document[['text']]) #文本全部导入到tibble
  #texts <- c(texts, substr(document[['text']], 1, 50))  #截取前50个字符的文本,方便显示
}

df <- tibble::tibble(
  doc_ids=doc_ids,
  texts = texts
  )

head(df)

BfEreeA.png!web

写入文件相关操作

写入 包 代码 功能 csv readr write_csv() 将数据写入csv文件 excel writexl write_excel() 将数据写入excel

存入excel

使用writexl包的write_xlsx(x, path)

  • x:  tibble表数据

  • path: xlsx文件路径

#写入xlsx
writexl::write_xlsx(df, "output/reports.xlsx")

存入csv

使用readr包的write_csv(x, path)

  • x:  tibble表数据

  • path: csv件路径

#写入csv
readr::write_csv(df, "output/reports.csv")

往期文章

plotnine: Python版的ggplot2作图库

小案例: Pandas的apply方法 

stylecloud:简洁易用的词云库

用Python绘制近20年地方财政收入变迁史视频

Python网络爬虫与文本数据分析

读完本文你就了解什么是文本分析

文本分析在经管领域中的应用概述

综述:文本分析在市场营销研究中的应用

从记者的Twitter关注看他们稿件的党派倾向?

Pandas时间序列数据操作

70G上市公司定期报告数据集

文本数据清洗之正则表达式

shreport库: 批量下载上海证券交易所上市公司年报

Numpy和Pandas性能改善的方法和技巧

漂亮~pandas可以无缝衔接Bokeh

YelpDaset: 酒店管理类数据集10+G

台回复关键词【 R读写 】获取本文代码和 数据

分享 ”和“ 在看 ”是更好的支持!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK