学习《用Python玩转数据》课程总结
最近学习了慕课网上的《用Python玩转数据》,写个总结,顺便再梳理一下。
总的来说,这个课程是比较好的入门引导,讲的比较浅显,但是都点到了,对于一个小白来说,算是打开了一扇大门,至于更深一步的内容就要靠自己了。
玩转数据分两步:
1、数据的获取,包括本地数据和网络数据;
2、数据整理、描述、分析
一、数据的获取
1.1 本地数据获取
常用函数:open,read,write,readline,readlines,writelines,close,seek
可以对txt,csv,excel文件进行读写操作,每个函数又有很多个参数,可以根据不同需求选择
1.2 网络数据的获取
- uillib.request
- Requests第三方库
- Scrapy框架
课程中介绍的是requests库,使用非常简便
import requests r = requests.get(url)
这样就可以抓取网页的信息,存储到变量r中,以进行下一步的分析。
网页的解析常用的是:
- BeautifulSoup库
- re模块
BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库,使用方法详见官方网站https://www.crummy.com/software/BeautifulSoup/bs4/doc/
二、扩展库- Scipy(https://www.scipy.org/)
对于科学工程领域更高级的要求,Python提供了开源的Scipy扩展库,包括下面几个核心包,功能强大。
2.1 Numpy库(http://www.numpy.org/)
- 强大的ndarray对象和ufunc函数
- 比较适合线性代数和随机数处理等科学计算
- 有效的通用多位数据,可定义任意数据类型
- 无缝对接数据库
2.2 SciPy库
- Python中科学计算程序的核心包
- 有效计算numpy矩阵,让Numpy和Scipy协同工作
- 致力于科学计算中常见问题的各个工具箱,其不同子模块有不同的应用,如插值、积分、优化和图像处理等。
2.3 Matplotlib库(http://matplotlib.org/)
- 基于Numpy
- 二维绘图库,简单快速生成曲线图,直方图和散点图等形式的图
- 常用的pyplot是一个简单提供类似matlab接口的模块
2.4 pandas库(http://pandas.pydata.org/)
- 基于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 import Series >>> import pandas as pd >>> a = pd.Series([1,2.0,'a']) >>> a 0 1 1 2 2 a dtype: object >>> b = pd.Series(['apple','peach','lemon'],index=[1,2,3]) >>> b 1 apple 2 peach 3 lemon 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*2 a 6 b 10 c 14 dtype: int64
3.3 Dataframe
Datafame是一个表格型的数据结构,含有一组有序的列,可以看成共享同一个index的Series集合
'''创建DataFrame''' >>> import pandas as pd >>> from pandas import DataFrame >>> data = {'name': ['Wangdachui', 'Linling', 'Niuyun'], 'pay': [4000, 5000, 6000]} >>> frame=pd.DataFrame(data) >>> frame name pay 0 Wangdachui 4000 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 pay 1 Wangdachui 4000 2 Linling 5000 3 Niuyun 6000 '''DataFrame 列获取''' >>> frame['name'] 1 Wangdachui 2 Linling 3 Niuyun Name: name, dtype: object >>> frame['pay'] 1 4000 2 5000 3 6000 Name: pay, dtype: object '''DataFrame 列切片''' >>> frame.iloc[:2,1] 1 4000 2 5000 Name: pay, dtype: object '''DataFrame 对象修改''' >>> frame['name']='admin' >>> frame name pay 1 admin 4000 2 admin 5000 3 admin 6000 '''DataFrame 对象删除''' >>> del frame['pay'] >>> frame name 1 admin 2 admin 3 admin
四、用Python做机器学习(http://scikit-learn.org/stable/)
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