最近学习了慕课网上的《用Python玩转数据》,写个总结,顺便再梳理一下。
总的来说,这个课程是比较好的入门引导,讲的比较浅显,但是都点到了,对于一个小白来说,算是打开了一扇大门,至于更深一步的内容就要靠自己了。
玩转数据分两步:
1、数据的获取,包括本地数据和网络数据;
2、数据整理、描述、分析
一、数据的获取
1.1 本地数据获取
常用函数:open,read,write,readline,readlines,writelines,close,seek
可以对txt,csv,excel文件进行读写操作,每个函数又有很多个参数,可以根据不同需求选择
1.2 网络数据的获取
uillib.request
Requests第三方库
Scrapy框架
课程中介绍的是requests库,使用非常简便
importrequests
r= requests.get(url)
这样就可以抓取网页的信息,存储到变量r中,以进行下一步的分析。
网页的解析常用的是:
BeautifulSoup库
re模块
对于科学工程领域更高级的要求,Python提供了开源的Scipy扩展库,包括下面几个核心包,功能强大。
强大的ndarray对象和ufunc函数
比较适合线性代数和随机数处理等科学计算
有效的通用多位数据,可定义任意数据类型
无缝对接数据库
2.2 SciPy库
Python中科学计算程序的核心包
有效计算numpy矩阵,让Numpy和Scipy协同工作
致力于科学计算中常见问题的各个工具箱,其不同子模块有不同的应用,如插值、积分、优化和图像处理等。
基于Numpy
二维绘图库,简单快速生成曲线图,直方图和散点图等形式的图
常用的pyplot是一个简单提供类似matlab接口的模块
基于Scipy和Numpy
高效的Series和Dataframe结构数据库
强大的可扩展数据操作与分析的Python库
高效梳理大数据集的切片等功能
提供优化库功能读写多种文件格式,如csv,HDF5等
三、Python中常用的数据结构
Python常用的数据结构有字典(dic)、元组(tuple)、列表(list)、集合(set),详见另一篇文章:http://www.cnblogs.com/sharon123/p/7090001.html
Scipy中的数据结构是Python原有数据结构变化,有N维数组(ndarray)、变长字典(Series)、数据框(Dataframe)
3.1 ndarray
ndarray是Numpy的基本数据机构,所有元素是同一种类型,拥有丰富的函数。
ndarray的创建示例:
>>> import numpy as np
>>> a = np.array([1,2,3])
>>> a
array([1, 2, 3])
>>> np.arange(1,5,0.5)
array([ 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
>>> np.random.random((2,2))
array([[ 0.67516447, 0.21711136],
[ 0.96711409, 0.24275549]])
>>> np.linspace(1,2,10,endpoint=False)
array([ 1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9])
>>> np.ones([2,3])
array([[ 1., 1., 1.],
[ 1., 1., 1.]])
>>> np.zeros((2,2))
array([[ 0., 0.],
[ 0., 0.]])
除此之外,还可以用:
ndarray的基本数组统计方法:
线性代数常用函数:
ndarray的ufunc函数是一种能对数组的每个元素进行操作的函数,Numpy内置的许多ufunc函数都是在C语言级别实现的,计算速度非常快。
3.2 Series
类似一维数组,有数据和索引构成,索引能够自己定义
>>> from pandas importSeries>>> importpandas as pd>>> a = pd.Series([1,2.0,'a'])>>>a
01
1 2
2a
dtype: object>>> b = pd.Series(['apple','peach','lemon'],index=[1,2,3])>>>b1apple2peach3lemon
dtype: object>>>b.index
Int64Index([1, 2, 3], dtype='int64')>>>b.values
array(['apple', 'peach', 'lemon'], dtype=object)>>> c = pd.Series([3,5,7],index=['a','b','c'])>>> c['b']5
>>> c*2a6b10c14dtype: int64
3.3 Dataframe
Datafame是一个表格型的数据结构,含有一组有序的列,可以看成共享同一个index的Series集合
'''创建DataFrame'''
>>> importpandas as pd>>> from pandas importDataFrame>>> data = {'name': ['Wangdachui', 'Linling', 'Niuyun'], 'pay': [4000, 5000, 6000]}>>> frame=pd.DataFrame(data)>>>frame
name pay
0 Wangdachui4000
1 Linling 5000
2 Niuyun 6000
>>> data=np.array([('Wangdachui', 4000), ('Linling', 5000), ('Niuyun', 6000)])>>> frame =pd.DataFrame(data, index = range(1, 4), columns = ['name', 'pay'])>>>frame
name pay1 Wangdachui 4000
2 Linling 5000
3 Niuyun 6000
'''DataFrame 列获取'''
>>> frame['name']1Wangdachui2Linling3Niuyun
Name: name, dtype: object>>> frame['pay']1 4000
2 5000
3 6000Name: pay, dtype: object'''DataFrame 列切片'''
>>> frame.iloc[:2,1]1 4000
2 5000Name: pay, dtype: object'''DataFrame 对象修改'''
>>> frame['name']='admin'
>>>frame
name pay1 admin 4000
2 admin 5000
3 admin 6000
'''DataFrame 对象删除'''
>>> del frame['pay']>>>frame
name1admin2admin3 admin
scikit-learn
Simple and efficient tools for data mining and data analysis
Accessible to everybody, and reusable in various contexts
Built on NumPy, SciPy, and matplotlib
Open source, commercially usable - BSD license