R与Python手牵手:多格式文件导入与爬虫
作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘、社交网络分析和机器学习等。希望与大家分享学习经验,推广并加深R语言在业界的应用。
邮箱:huang.tian-yuan@qq.com
在实际操作中,数据的收集与导入往往是整个过程的开始。如果大家用过其他软件处理文件,应该都有“转格式”的不良体验。所幸,R与Python已经有大量的工具能够帮助我们直接将不同类型的数据格式直接导入到工作环境中。这次我们将要介绍怎么把外部数据导入Python和R中,主要涉及csv/json/xml三种格式,最后将会简要介绍如何进行爬虫。部分数据可以在以下网页获得:
https://github.com/dipanjanS/practical-machine-learning-with-python/tree/master/notebooks/Ch03ProcessingWrangling_andVisualizingD
Python
读取csv
#加载pandas模块
import pandas as pd
#文件路径
prefix = "G:/Py/practical-machine-learning-with-python-master/notebooks/Ch03ProcessingWranglingandVisualizingData/" surfix = "samplecsv.csv" file_name = prefix + surfix
df = pd.readcsv(filename)
df
读取json
#加载json模块
import json
surfix = "samplejson.json" filename = prefix + surfix
jsonfiledata = open(filename).read() jsondata = json.loads(jsonfiledata)
json_data
得:
{'outer_col_1': [{'nested_inner_col_1': 'val_1', 'nested_inner_col_2': 2},{'nested_inner_col_1': 'val_2', 'nested_inner_col_2': 2}],'outer_col_2': {'inner_col_1': 3},'outer_col_3': 4}
感兴趣的不妨看一下json_filedata里面放的是什么形式的数据
读取xml
import xml.etree.ElementTree as ET
import xmltodict
surfix = "samplexml.xml" filename = prefix + surfix
xmlfiledata = open(filename).read() ordereddict = xmltodict.parse(xmlfiledata)
ordered_dict
得:
OrderedDict([('records',OrderedDict([('@attr', 'sample xml records'),('record',[OrderedDict([('@name', 'rec_1'),('sub_element',OrderedDict([('detail1','Attribute 1'),('detail2', '2')])),('sub_element_with_attr',OrderedDict([('@attr', 'complex'),('#text','Sub_Element_Text')])),('sub_element_only_attr',OrderedDict([('@attr_val','only_attr')]))]),OrderedDict([('@name', 'rec_2'),('sub_element',OrderedDict([('detail1','Attribute 1'),('detail2', '2')])),('sub_element_with_attr',OrderedDict([('@attr', 'complex'),('#text','Sub_Element_Text')])),('sub_element_only_attr',OrderedDict([('@attr_val','only_attr')]))]),OrderedDict([('@name', 'rec_3'),('sub_element',OrderedDict([('detail1','Attribute 1'),('detail2', '2')])),('sub_element_with_attr',OrderedDict([('@attr', 'complex'),('#text','Sub_Element_Text')])),('sub_element_only_attr',OrderedDict([('@attr_val','only_attr')]))])])]))])
pd的read_csv,json的json.loads,xmltodict的parse.针对不同的数据类型,python不同的包可谓各显神通。尽管都是一键式傻瓜操作,我们可以观察到读出数据的形式各不相同,因此后续的处理也会大相径庭,不过我们这次内容只针对导入这一步。
爬虫初步
这里讲爬虫将会针对“爬”来讲,也就是如果给大家一个网址(URL),怎么把这个网页上的所有信息都载入到我们的软件里面呢?
加载requests模块
import requests
请求网页数据
response = requests.get("http://www.apress.com/in/blog/all-blog-posts/wannacry-how-to-prepare/12302194")
就现在而言,我们已经对http://www.apress.com/in/blog/all-blog-posts/wannacry-how-to-prepare/12302194 这个网页进行请求,并把内容放在了response里面。我们先看看请求是否成功:
response.status_code
得:
200
或者直接用
response
得:
<Response [200]>
相信大家对“404”都非常熟悉,但是“200”就不常见,因为“200”代表我们已经请求成功,自动进入了网页。
爬到的是html,大家动手运行后会发现看起来有点像乱码,但是其实都具有一定的规则,只要按照规则进行提取,就能够得到我们的目标信息。
R
#读csv
prefix = "G:/Py/practical-machine-learning-with-python-master/notebooks/Ch03ProcessingWranglingandVisualizingData/" surfix = "samplecsv.csv" file_name = paste0(prefix,surfix)
df = read.csv(file_name)
df
#读json
pacman::p_load("rjson") #没有安装pacman包的请先安装,用install.packages("pacman")
surfix = "samplejson.json" filename = paste0(prefix,surfix)
df = fromJSON(file = file_name)
df
得:
注意一定要定义参数file,否则默认条件下,fromJSON会把输入当成是json文本然后进行转化,而不是按照路径去找文件,读取文件后再转化。
读xml
pacman::p_load(XML)
surfix = "samplexml.xml" filename = paste0(prefix,surfix)
df = xmlParse(file_name)
df
得:
<?xml version="1.0"?> <records attr="sample xml records"> <record name="rec_1"> <sub_element> <detail1>Attribute 1</detail1> <detail2>2</detail2> </sub_element> <sub_element_with_attr attr="complex"> Sub_Element_Text </sub_element_with_attr> <sub_element_only_attr attr_val="only_attr"/> </record> <record name="rec_2"> <sub_element> <detail1>Attribute 1</detail1> <detail2>2</detail2> </sub_element> <sub_element_with_attr attr="complex"> Sub_Element_Text </sub_element_with_attr> <sub_element_only_attr attr_val="only_attr"/> </record> <record name="rec_3"> <sub_element> <detail1>Attribute 1</detail1> <detail2>2</detail2> </sub_element> <sub_element_with_attr attr="complex"> Sub_Element_Text </sub_element_with_attr> <sub_element_only_attr attr_val="only_attr"/> </record> </records>
这里可以指明file = file_name,因为内置函数会判断字符串是文件路径还是URL。
爬虫初步
其实我个人经常用rvest,静态网页的爬取更像是傻瓜式的操作。但是,这里我还是使用httr包,作为对网络请求的处理,我认为这个包更加专业一些。
pacman::p_load(httr)
response = GET("http://www.apress.com/in/blog/all-blog-posts/wannacry-how-to-prepare/12302194")
看状态
response$status_code
得:
200
或者用
http_status(response)
得:
提取爬取内容
content(response,"text")
(具体运行结果大家可以自己操作下,在此不展示了)
分析
首先要注意的是,python中的字符串处理,可以直接用加号,而R语言里面,必须用paste函数。读取大家都是傻瓜式一步到位,但是大家要注意导入不同的数据需要加载不同的安装包,其次是要查清楚函数参数的具体含义,否则容易报错。我们把数据加载进来之后,其实还有更多的操作提取我们需要的有效数据,大家需要了解csv/json/xml数据结构的特征,才能够用相应的技术进行操作。 讲到爬虫,其实是一门大学问,这里就只讲了静态网页如何直接爬取。其实还有动态内容的爬虫。以及爬了之后,后面还需要用xpath/CSS/正则表达式等多元化方法对需要的内容进行结构化,才能够直接使用。这里先做一个小小的启蒙,有兴趣的同学可以深入学习,其乐无穷!
大家都在看
R语言二分类问题案例分析:以泰坦尼克号沉船为例
无缝对接Spark与R:Sparklyr系列—探讨属于数据科学家的Spark
R与Python手牵手:数据的分组排序
R与Python手牵手:数据框的构建、读取与基本描述
R与Python手牵手:数据科学导论系列(包的载入)
R与Python手牵手:数据探索性分析案例展示
公众号后台回复关键字即可学习
回复 爬虫 爬虫三大案例实战
回复 Python 1小时破冰入门回复 数据挖掘 R语言入门及数据挖掘
回复 人工智能 三个月入门人工智能
回复 数据分析师 数据分析师成长之路
回复 机器学习 机器学习的商业应用
回复 数据科学 数据科学实战
回复 常用算法 常用数据挖掘算法
R与Python手牵手:多格式文件导入与爬虫相关推荐
- python二值化特征_R与Python手牵手:特征工程(数值型变换)
原标题:R与Python手牵手:特征工程(数值型变换) 作者:黄天元,复旦大学博士在读,目前研究涉及文本挖掘.社交网络分析和机器学习等.希望与大家分享学习经验,推广并加深R语言在业界的应用. 邮箱:h ...
- 使用Python读取LabVIEW TDMS 格式文件转成Excel格式+多进程版本
使用Python读取LabVIEW TDMS 格式文件转成Excel格式+多进程版本 文章目录 使用Python读取LabVIEW TDMS 格式文件转成Excel格式+多进程版本 前言: 背景 tm ...
- stl格式文件导入Unity
stl格式文件导入Unity(不用代码) STL文件仅描述三维物体的表面几何形状,没有颜色.材质贴图或其它常见三维模型的属性. STL文件有两种表示方式:文本.二进制.一般会以二进制格式使用,我们也可 ...
- 将dae格式文件导入RViz中创建环境
1.打开solidworks零件或装配体文件 2.导出STL格式文件 (1).点击 文件->另存为 (2).命名文件,保存类型选择 STL (3).点击 是 3.将STL格式文件导入3ds Ma ...
- python创建csv文件并写入-Python数据写入csv格式文件
(只是传递,基础知识也是根基) Python读取数据,并存入Excel打开的CSV格式文件内! 这里需要用到bs4,csv,codecs,os模块. 废话不多说,直接写代码!该重要的内容都已经注释了, ...
- Python数据写入csv格式文件
(只是传递,基础知识也是根基) Python读取数据,并存入Excel打开的CSV格式文件内! 这里需要用到bs4,csv,codecs,os模块. 废话不多说,直接写代码!该重要的内容都已经注释了, ...
- 使用Python读取LabVIEW TDMS 格式文件转成 pandas及Excel
个人用Django开发的博客已上线,欢迎访问:https://www.zhibibin.com Labview的TMDS格式文件在很多偏硬件相关的工作中经常出现,有时候面临将TDMS转成Excel通用 ...
- python循环读取nc格式文件,并存入文本文件中
先把要读取的nc文件放在同一文件夹中,再用python循环读取,读取文件为从NCEP下载的向下地表平均日长波辐射通量,并计算其月平均值,存放至一个文本文件中https://psl.noaa.gov/c ...
- PDFkit用python批量把markdown格式文件导出成pdf文件代码
可以使用 Python 的 pdfkit 库来将 markdown 格式文件批量导出为 pdf 文件. 首先,你需要安装 pdfkit 库: pipinstall pdfkit 然后,你可以使用以下代 ...
- python将多个txt文件导入一个excel的不同sheet中
代码功能:将多个txt文件导入一个excel的不同sheet中 运行代码工具:jupyter notebook import os import sys import openpyxl from op ...
最新文章
- ubuntu14.04.03 vsftpd
- jboss-as-web-7.0.1.Final 配置 SSL
- 算法----实现strStr 函数
- 关于Task类处理多线程简单示例
- [c++基本语法]——构造函数初始化列表
- 高通骁龙712移动平台正式发布!整体性能提升10%
- python3 socket sendall_全网最详细python中socket套接字send与sendall的区别
- 批处理路径中含有空格的处理办法
- ai/ml_十大ML / AI现实世界项目,以增强您的产品组合
- 博客随笔《文章目录——java》大纲
- Python:安装pip
- 数据标注工具CVAT教程
- 动态拼接Lambda表达式2
- CUX:固定资产台账报表源代码(信息较全)
- excel合并两列内容_办公教程:Excel如何快速将两列内容合并成一列
- 熟悉java的写什么毕业设计_计算机专业Java相关的毕业论文该如何写?
- OA开发很简单,OA实施很复杂!
- Android 播放Gif 动画
- 新大陆云平台使用笔记
- 互补品的需求曲线图_如图,D是某商品的需求曲线,当该商品的互补品价格下降时,则该商品的需求曲线会出现移动。下列各图(横轴为需求量,纵轴为价格)能够正确反映这一变化的是...