如安在R中操纵非布局化数据?
先容现代化数据科学中的 DataFrame 观念源起R语言,而 Python Pandas 和 Spark DateFrame 都是参考R设计的。不外在实际的网络数据通讯中,雷同DateFrame这样的名目却并不是主流,真正主流的方法其实是JSON(JavaScript Online Notation),所以接头如那里理惩罚非布局化数据就变得很是有意义了。加之,连年来 Redis、MongoDB、ELK等非布局化数据库的繁荣,MySQL 5.7之后也已经添加了对JSON名目标原生支持(之前可以用blob、longtext等名目存储),非布局化数据更是在数据处理惩罚中变得风行。
本文将从非布局化数据的转化、处理惩罚以及可视化三个方面接头如安在R中操纵非布局化数据。
JSON、List、DataFrame的三国杀
DataFrame 是R中的布局化数据布局,List 是R中的非布局化数据。JSON、List、DataFrame三者之间的相互转化是数据科学中很是频繁的一类操纵。
在R中有一个很是有意思的现象,那就是处理惩罚json时,我们有三个选择,jsonlite、rjson以及RJSONIO,三者各有特点,有时为了处理惩罚一些问题还必需得殽杂利用。在实际处理惩罚字符串中,必然要留意的就是R中字符串的转义问题。好比\\暗示\,\”暗示”等等。我曾经因为Python和R中的双层JSON理会多次碰着转义标记的问题。详细可以参看官方手册(https://stat.ethz.ch/R-manual/R-devel/library/base/html/Quotes.html)。
1、jsonlite jsonlite 是我最常用的一个json处理惩罚包,因为jsonlite可以一步将 json 转成 dataframe 再 从dataframe 转到 json,在数据处理惩罚中可以轻松办理常见的 json转化问题。另外,jsonlite 还完美支持utf-8,在 json 字符串错误时会有明明的错误提示。jsonlite 的劣势是当呈现双层 json 时,jsonlite 会将json转成dataframe名目标 list,这直接导致我们在用 length() 可能 dim() 求内层 JSON 的维度会呈现错误。
rjsonrjson 和 jsonlite较大差异之处在于,rjson将json转化为一个list,而list是R语言中非布局化数据的事实尺度,雷同 python 中的 dict,可能 matlab 中的 cell。值得留意的是,rjson在json转化中直接保持所有的浮点型数据,而jsonlite和RJSONIO则可以通过参数节制保存若干位小数的精度。
RJSONIORJSONIO 答允传入没有转义标记的 JSON 字符串,而且支持将缺失值(NA)直接转成 Null,需要小心的是RJSONIO只支持unicode,假如传入utf-8则会变成悲剧。
更多细节可以参考https://rstudio-pubs-static.s3.amazonaws.com/31702_9c22e3d1a0c44968a4a1f9656f1800ab.html
2、List 处理惩罚谈到list的处理惩罚就不得不谈一谈 rlist包。rlist包是任坤老师孝敬到CRAN上的,任坤老师既是一个多产的R Developer (pipeR、formattable作者)也是一名量化投资者,今朝在做私募方面的创业。想要进修rlist,我们可以参考一下任坤老师的演讲:跳出数据框,拥抱非布局化数据和官方教程。
rlist与高阶函数rlist 是支持高阶函数表达式的,警惕了Python、Scala等语言中的MapReduce模子,rlist也为list提供了map、filter、reduce、group、join、search、sort等高级数据操纵,熟悉这些操纵今后上手sparkR的RDD操纵很是有辅佐。
示例一:
操作 GitHub API,我们可以知道Hadley 的原创R语言开源项目中接头议题数量最多的10个项目是哪些。
示例二:批量读取非空 csv 文件而且归并成一个 data frame:
rlist扩展包充实操作了R语言中list工具的特性,界说了一整套函数来辅佐用户机动快速地按要求处理惩罚各类非布局化数据,同时团结pipeR包中管道操纵符的利用,使R措施越发具有可读性,应用越发人性化。
更多操纵下面是rlist中提供的操纵:
非布局化数据可视化为了利便在R中可视化JSON数据,jsonview将js中的jsonviewer库引入到R中。
我们可以传入list可能json字符串做非布局化数据的可视化。
下面是timelyportfolio提供的一个团结shiny和jsonview的json编辑器的例子:
接着,在欣赏器中的对应端口可以打开这个json编辑器应用。
3、尾 注除了JSON之外,和NoSQL数据库的交互在大数据时代也成为了主流,殽杂利用Redis、Hive、MongoDB等数据库也成了屡见不鲜,详细操纵可以翻看张丹老师的R利剑NoSQL系列文章。
参考资料:1、A biased comparsion of JSON packages in R(https://rstudio-pubs-static.s3.amazonaws.com/31702_9c22e3d1a0c44968a4a1f9656f1800ab.html)2、任坤:跳出数据框,拥抱非布局化数据(http://static.xueqing.tv/slides/renkun-2014gzrcon.pdf)3、rlist-tutorial(http://renkun.me/rlist-tutorial/)4、jsonview GitHub(https://github.com/hrbrmstr/jsonview)
Harry Zhu,擅长用Python和R举办数据建模、定量研究,今朝就职于量子金服(Quantum Financial Service)。微信号:harryzhustudio接待存眷小我私家主页:https://github.com/harryprincehttps://segmentfault.com/u/harryprince
接待插手本站果真乐趣群贸易智能与数据阐明群乐趣范畴包罗各类让数据发生代价的步伐,实际应用案例分享与接头,阐明东西,ETL东西,数据客栈,数据挖掘东西,报表系统等全方位常识QQ群:81035754