利用python进行数据分析:XML 和 HTML :网络抓取,二进制格式,使用 HDF5 格式,读取 Microsoft Excel 文件

6.1.5 XML 和 HTML :网络抓取

pandas内建的 read_html 可以使用 lxml 和 bs4 等库将HTML 中的表自动解析成 dataframe 对象。

tables=pd.read_html('eeee.html')   # 银行倒闭数据的HTML 文件。。。
failures=tables[0]             # 默认情况下,read_html 会搜索并尝试解析所有包含在 <table > 标签种的表格数据
failures.head()        #  返回的结果 ( tables )是 datasframe 对象的列表

   Bank Name	City	ST	CERT	Acquiring Institution	Closing Date	Updated Date
0	Allied Bank	Mulberry	AR	91	Today's Bank	September 23, 2016	November 17, 2016
1	The Woodbury Banking Company	Woodbury	GA	11297	United Bank	August 19, 2016	November 17, 2016
2	First CornerStone Bank	King of Prussia	PA	35312	First-Citizens Bank & Trust Company	May 6, 2016	September 6, 2016
3	Trust Company Bank	Memphis	TN	9956	The Bank of Fayette County	April 29, 2016	September 6, 2016
4	North Milwaukee State Bank	Milwaukee	WI	20364	First-Citizens Bank & Trust Company	March 11, 2016	June 16, 2016


pd.to_datetime(failures['Closing Date']).dt.year.value_counts()
2010    157
2009    140
2011     92          # 根据结果就可以进行一些数据清理和分析工作,比如计算每年倒闭的数量
2012     51
2008     25
/.................

6.2 二进制格式

使用 python 内建的 pickle 序列化模块进行二进制格式操作是存储数据(也成为序列化)最高效,最方便的方式之一。

pandas有 to_pickle 方法可以将数据以 pickle 写入硬盘:

frame=pd.read_csv('ex2.csv')
frame
	a	b	c	d	message
0	1	2.0	3	4	hello
1	5	6.0	7	8	world
2	8	10.0	11	12	foo
3	13	NaN	15	16	NaN

frame.to_pickle('frame_pickle')     # 以pickle 格式写入

# 然后你可以使用 pickle 模块下的 load 读取数据,或使用 pandas.read_pickle 
pd.read_pickle('frame_pickle')         # 我记得 pickle 文件的后缀就写 pickle 来着。。。

6.2.1 使用 HDF5 格式

HDF5 是一个备受好评的文件格式,用于存储大量的科学数组数据。他以 C 库的形式提供,并且有许多其他语言的接口。HDF 代表分层数据格式。每个 HDF5 文件可以存储多个数据集并且支持元数据。

HDF5支持多种压缩模式的即时压缩,使得重复模式的数据可以更高效的存储,HDF5适用于处理不合适再内存种存储的超大型数据,可以是你高效的读写大型数组的一块。

frame=pd.DataFrame({'a':np.random.randn(100)})
store=pd.HDFStore('mydata.h5')
store['obj1']=frame
store['obj2']=frame['a']         # 可以存储多个数据集,dataframe series 都可以
store
<class 'pandas.io.pytables.HDFStore'>
File path: mydata.h5

store['obj1']
	a
0	0.061638
1	-1.411026
2	1.223337
3	1.019974
4	0.030391
...	...
95	-0.416437
96	-0.223872
97	-1.040002
98	-0.060678
99	0.286993
100 rows × 1 columns

HDFStore 支持两种存储模式,‘fixed’ and ‘table’ 。后者速度更慢,但是支持一种特殊语法的查询

store.put('obj3',frame,format='table')  # store['obj3']=frame 的显示版本,但是我们可以设置其他选项,如存储格式
store.select('obj3',where=['index == 10'])
a
10	-0.057515

store.close()

frame.to_hdf('mydata.h5','obj3',format='table')   # read_hdf 函数是这些工具的快捷方法。
pd.read_hdf('mydata.h5','obj3',where=['index<5'])

6.2.2 读取 Microsoft Excel 文件

pandas 也支持通过ExedlFile 类或 pandas.read_excel 函数来读取存储在Excel 文件中的表格型数据。这些工具内部使用 xlrd 和 openpyxl 来分别读取 XLS XLSX 文件。

xlsx=pd.ExcelFile('e.xlsx')
pd.read_excel(xlsx,'Sheet1')         # 如果你读取的是多个表的文件,生成 ExcelFile更快
	a	b	c	d	message          # 也可以 read_excel('e.xlsx','Sheet1')
0	1	2	3	4	hello
1	5	6	7	8	world
2	9	10	11	12	foo


writer=pd.ExcelWriter('e2.xlsx') # 将数据写入 表格中
frame.to_excel(writer,'Sheet1')
writer.save()

# 也可以
frame.to_excal('e3.xlsx')

6.3 与Web API 交互

很多网站都有公开API ,通过JSON 或其他格式提供数据服务,,,就是 requests 爬虫啦。。。

import requests
url = 'https://api.github.com/repos/pandas-dev/pandas/issues'
resp = requests.get(url)
data=resp.json()
issues=pd.DataFrame(data,columns=['number','title','labels','state'])
issues
	number	title	labels	state
0	34626	BUG: s3 reads from public buckets not working	[{'id': 76811, 'node_id': 'MDU6TGFiZWw3NjgxMQ=...	open
1	34625	REF: re-use existing conversion functions	[]	open
2	34623	TST/REF: arithmetic tests for BooleanArray + c...	[{'id': 76811, 'node_id': 'MDU6TGFiZWw3NjgxMQ=...	open
3	34622	added a test for issue #20627	[]	open
4	34621	BUG: Nanoseconds are set to 0 when converting ...	[{'id': 76811, 'node_id': 'MDU6TGFiZWw3NjgxMQ=...	open
.........................好久没捣鼓爬虫了,,,,,感觉没什么好项目啊。。。

6.4 与数据库交互

从 SQL 中将数据读取为 DataFrame 是相当简单直接的,pandas 有多个函数可以简化这个过程。

其实就是对数据库的操作。。。可以看看python对MySQL的操作啊

import pymysql
db = pymysql.connect(host="localhost",port=3306,user="root",password="54567789",database='jd')

cursor=db.cursor()
cursor.execute('select * from 笔记本')

result=cursor.fetchmany(10)
db.close()

pd.DataFrame(result)
	0	1	2	3	4	5	6	7	8
0	99	100004915731	联想ThinkPad 翼490(E490 25CD)英特尔酷睿i5 14英寸轻薄 电脑(i5...	ThinkPad京东自营旗舰店	4499.00	//item.jd.com/100004915731.html	1593	1004	70115
1	100	100004311524	联想ThinkPad X390(39CD)英特尔酷睿i5 13.3英寸轻薄 电脑(i5-82...	ThinkPad京东自营旗舰店	6399.00	//item.jd.com/100004311524.html	218	103	4838
2	101	100006842477	华硕(ASUS) 顽石六代S 英特尔酷睿i5 15.6英寸轻薄 电脑(十代i5-1035G1...	华硕京东自营官方旗舰店	4169.00	//item.jd.com/100006842477.html	

呵呵,我的爬虫爬下来的数据终于有用了。。。。。。。

猜你喜欢

转载自blog.csdn.net/weixin_46192930/article/details/106584640