计算1+2+3+4++100⽤python_利⽤Python进⾏数据分析
——数。。。
1、⼆进制数据格式
实现数据的⼆进制格式存储最简单的办法之⼀是使⽤Python内置的pickle序列化。为了使⽤⽅便,pandas对象都有⼀个⽤于将数据以pickle形式保存到磁盘上的save⽅法:
In [1]: frame = pd.read_csv('ch06/ex1.csv')
In [2]: frame
Out[2]:
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
In [3]: frame.save('ch06/frame_pickle')
你可以通过另⼀个也很好⽤的pickle函数pandas.load将数据读回到Python:In [4]: pd.load('ch06/frame_pickle')
Out[4]:
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foophp错误处理
2、使⽤HDF5格式
python请求并解析json数据很多⼯具都能实现⾼效读写磁盘上以⼆进制格式存储的科学数据。HDF5就是其中⼀个流⾏的⼯业级库,它是⼀个C库,带有许多语⾔接⼝,如Java、Python和MATLAB等。HDF5中的HDF指的是层次型数据格式(hierarchical data format)。每个HDF5⽂件都含有⼀个⽂件系统式的节点结构,它使你能
够存储多个数据集并⽀持元数据。与其他简单格式相⽐,HDF5⽀持多种压缩器的即时压缩,还能更⾼效地存储重复模式数据。对于那些⾮常⼤的⽆法直接放⼊内存的数据集,HDF5就是不错的选择,因为它可以⾼效地分块读写。
Python中的HDF5库有两个接⼝(即PyTables和h5py),它们各⾃采取了不同的问题解决⽅式。h5py提供了⼀种直接⽽⾼级的HDF5 API访问接⼝,⽽PyTables则抽象了HDF5的许多细节以提供多种灵活的数据容器、表索引、查询功能以及对核外计算技术(out-of-core computation)的某些⽀持。
pandas有⼀个最⼩化的类似于字典的HDFStore类,它通过PyTables存储pandas对象:
In [5]: store = pd.HDFStore('mydata.h5')
In [6]: store['obj1'] = frame
In [7]: store['obj1_col'] = frame['a']
In [8]: store
Out[8]:
File path: mydata.h5
obj1      DataFrame
obj1_col  Series
HDF5⽂件中的对象可以通过与字典⼀样的⽅式进⾏获取:
In [9]: store['obj1']
Out[9]:
a b c d message
0 1 2 3 4 hello
1 5 6 7 8 world
2 9 10 11 12 foo
如果需要处理海量数据,我建议你好好研究⼀下PyTables和h5py,看看它们能满⾜你的哪些需求。由于许多数据分析问题都是IO密集型(⽽不是CPU密集型),利⽤HDF5这样的⼯具能显著提升应⽤程序的效率。
注意:
HDF5不是数据库。它最适合⽤作“⼀次写多次读”的数据集。虽然数据可以在任何时候被添加到⽂件中,但如果同时发⽣多个写操作,⽂件就可能会被破坏。
3、读取Microsoft Excel⽂件
pandas的ExcelFile类⽀持读取存储在Excel 2003(或更⾼版本)中的表格型数据。由于ExcelFile⽤到了xlrd和openpyxl包,所以你先得安装它们才⾏。通过传⼊⼀个xls或xlsx⽂件的路径即可创建⼀个ExcelFile实例:
xls_file = pd.ExcelFile('data.xls')
存放在某个⼯作表中的数据可以通过parse读取到DataFrame中:table = xls_file.parse('Sheet1')
4、使⽤HTML和Web API
GET请求,如下所⽰:
In [1]: import requests
In [2]: url = 'search.twitter/search.json?q=python%20pandas'
In [3]: resp = (url)
In [4]: resp
Out[4]:
昆明程序员工资一般多少Response对象的text属性含有GET请求的内容。许多Web API返回的都是JSON字符串,我们必须将其加载到⼀个Python对象中:
In [5]: import json
In [6]: data = json.)
In [7]: data.keys()
Out[7]:
[u'next_page',
u'completed_in',
u'max_id_str',
u'since_id_str',
u'refresh_url',
u'results',
u'results_per_page',
u'query',
u'max_id',
u'page']
响应结果中的results字段含有⼀组tweet,每条tweet被表⽰为⼀个Python字典,如下所⽰:{u'created_at': u'Mon, 25 Jun 2012 17:50:33 +0000',
u'from_user': u'wesmckinn',
u'from_user_id': 115494880,
u'from_user_id_str': u'115494880',
u'from_user_name': u'Wes McKinney',
u'geo': None,
u'id': 217313849177686018,
u'id_str': u'217313849177686018',
u'iso_language_code': u'pt',
u'metadata': {u'result_type': u'recent'},
u'source': u'',
u'to_user': None,
u'to_user_id': 0,
u'to_user_id_str': u'0',
u'to_user_name': None}
我们⽤⼀个列表定义出感兴趣的tweet字段,然后将results列表传给DataFrame:
In [8]: tweet_fields = ['created_at', 'from_user', 'id', 'text']
In [9]: tweets = DataFrame(data['results'], columns=tweet_fields)
In [10]: tweets
Out[10]:
Int64Index: 15 entries, 0 to 14
Data columns:
created_at 15 non-null values
from_user 15 non-null values
id 15 non-null values
vs2017介绍
text 15 non-null values
dtypes: int64(1), object(3)
现在,DataFrame中的每⼀⾏就有了来⾃⼀条tweet的数据:In [11]: tweets.ix[7]
created_at Thu, 23 Jul 2012 09:54:00 +0000
from_user deblike
id 227419585803059201
text pandas: powerful Python data analysis toolkit
Name: 7
要想能够直接得到便于分析的DataFrame对象,只需再多费些精⼒创建出对常见Web API的更⾼级接⼝即可。
5、使⽤数据库
在许多应⽤中,数据很少取⾃⽂本⽂件,因为⽤这种⽅式存储⼤量数据很低效。基于SQL的关系型数据库(如SQL Server、PostgreSQL 和MySQL等)使⽤⾮常⼴泛,此外还有⼀些⾮SQL(即所谓的NoSQL)型数据库也变得⾮常流⾏。数据库的选择通过取决于性能、数据完整性以及应⽤程序的伸缩性需求。
将数据从SQL加载到DataFrame的过程很简单,此外pandas还有⼀些能够简化该过程的函数。例如,我将使⽤⼀款嵌⼊式的SQLite数据库(通过Python内置的sqlite3驱动器):
import sqlite3
query = """
CREATE TABLE test
(a VARCHAR(20), b VARCHAR(20),
c REAL,
d INTEGER
);"""
con = t(':memory:')
conmit()
2021新版抢单源码然后插⼊⼏⾏数据:
data = [('Atlanta', 'Georgia', 1.25, 6),
('Tallahassee', 'Florida', 2.6, 3),
('Sacramento', 'California', 1.7, 5)]
stmt = "INSERT INTO test VALUES(?, ?, ?, ?)"
conmit()
从表中选取数据时,⼤部分Python SQL驱动器(PyODBC、psycopg2、MySQLdb、pymssql等)都会返回⼀个元组列表:In [1]: cursor = ute('select * from test')
In [2]: rows = cursor.fetchall()
In [3]: rows
Out[3]:
[(u'Atlanta', u'Georgia', 1.25, 6),
(u'Tallahassee', u'Florida', 2.6, 3),
(u'Sacramento', u'California', 1.7, 5)]
你可以将这个元组列表传给DataFrame的构造器,但还需要列名(位于游标的description属性中):
In [4]: cursor.description
Out[4]:
(('a', None, None, None, None, None, None),
('b', None, None, None, None, None, None),
('c', None, None, None, None, None, None),
('d', None, None, None, None, None, None))
In [5]: DataFrame(rows, columns=zip(*cursor.description)[0])
Out[5]:
a b c d
0 Atlanta Georgia 1.25 6
1 Tallahassee Florida 2.60 3
2 Sacramento California 1.70 5
这种数据规整操作相当多,你肯定不想每查⼀次数据库就重写⼀次。pandas有⼀个可以简化该过程的read_frame函数(位于
pandas.io.sql模块)。只需传⼊select语句和连接对象即可:
In [6]: import pandas.io.sql as sql
In [7]: ad_frame('select * from test', con)
Out[7]:
a b c d
0 Atlanta Georgia 1.25 6
1 Tallahassee Florida 2.60 3
2 Sacramento California 1.70 5
6、存取MongoDB中的数据
import pymongo
con = pymongo.Connection('localhost', port=27017)
存储在MongoDB中的⽂档被组织在数据库的集合(collection)中。MongoDB服务器的每个运⾏实例可以有多个数据库,⽽每个数据库⼜可以有多个集合。假设你想保存之前通过Twitter API获取的数据。⾸先,我可以访问tweets集合(暂时还是空的):
tweets = con.db.tweets
然后,我将那组tweet加载进来并通过tweets.save(⽤于将Python字典写⼊MongoDB)逐个存⼊集合中:
import requests, json程序设计语言属于软件系统吗
url = 'search.twitter/search.json?q=python%20pandas'
data = json.(url).text)
for tweet in data['results']:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。