数据科学入门笔记:Numpy和Pandas
NumPy
Numpy在增加对多维数组和矩阵的支持方面很受欢迎。它还增加了很多基于python缺乏的数学函数。这些函数对于统计分析(数组的平均值,中值,标准偏差等)非常有用。数组对象类是Numpy的基础,Numpy数组就像Python中的列表,只不过数组中的每个东西都必须是相同类型的,比如int或float。
import numpy as np
array = np.array([1, 4, 5, 8], float)
print array
# a 2D array/Matrix
array = np.array([[1, 2, 3], [4, 5, 6]], float)
print array
>>> [1. 4. 5. 8.] >>>[[1. 2. 3.] [4. 5. 6.]]
您可以像使用Python列表一样索引,切片和操作Numpy数组。
import numpy as np
array = np.array([1, 4, 5, 8], float)
print array
print array[1]
print array[:2]
array[1] = 5.0
print array[1]
>>> [1. 4. 5. 8.] >>> 4.0 >>> [1. 4.] >>> 5.0
矩阵索引和切片的行动。
import numpy as np
two_D_array = np.array([[1, 2, 3], [4, 5, 6]], float)
print two_D_array
#print element in line 1 column 1
print two_D_array[1][1]
#print in line 1, all
print two_D_array[1, :]
#print all, in column 2
print two_D_array[:, 2]
>>> [[1. 2. 3.] [4. 5. 6.]] >>> 5.0 >>> [4. 5. 6.] >>> [3. 6.]
下面是你可以用Numpy数组做的一些算术运算。
import numpy as np
array_1 = np.array([1, 2, 3], float)
array_2 = np.array([5, 2, 6], float)
print array_1 + array_2
print array_1 - array_2
print array_1 * array_2
>>> [6. 4. 9.] >>> [-4. 0. -3.] >>> [ 5. 4. 18.]
相同的算术操作,但这次与矩阵。
import numpy as np
array_1 = np.array([[1, 2], [3, 4]], float)
array_2 = np.array([[5, 6], [7, 8]], float)
print array_1 + array_2
print array_1 - array_2
print array_1 * array_2
>>> [[ 6. 8.] [10. 12.]] >>> [[-4. -4.] [-4. -4.]] >>> [[ 5. 12.] [21. 32.]]
除了标准的关节手术操作之外,Numpy还
可以应用于Numpy阵列的一系列其他数学运算,例如
平均值和点积。
import numpy as np
array_1 = np.array([1, 2, 3], float)
array_2 = np.array([[6], [7], [8]], float)
print np.mean(array_1)
print np.mean(array_2)
print np.dot(array_1, array_2)
>>> 2.0 >>> 7.0 >>> [44.]
Pandas
另一方面,pandas允许以适合于数据分析的方式来构造和操纵我们的数据。熊猫还从R中获取了很多最好的元素,并在Python中实现它们。
import pandas as pd
series = pd.Series(['Dave', 'Cheng-Han', 'Udacity', 42, -1789710578])
print series
0 Dave 1 Cheng-Han 2 Udacity 3 42 4 -1789710578
您还可以在创建系列时手动为系列中的项目分配索引,并使用索引从系列中选择特定项目。
import pandas as pd
series = pd.Series(['Dave', 'Cheng-Han', 359, 9001],
index=['Instructor', 'Curriculum Manager',
'Course Number', 'Power Level'])
print series
print series['Instructor']
print series[['Instructor', 'Curriculum Manager', 'Course Number']]
>>> Instructor Dave Curriculum Manager Cheng-Han Course Number 359 Power Level 9001
>>> Dave
>>> Instructor Dave Curriculum Manager Cheng-Han Course Number 359
您也可以使用布尔运算符从系列中选择特定的项目
import pandas as pd
cuteness = pd.Series([1, 2, 3, 4, 5], index=['Cockroach', 'Fish', 'Mini Pig',
'Puppy', 'Kitten'])
print cuteness
print cuteness > 3
print cuteness[cuteness > 3]
>>> Cockroach 1 Fish 2 Mini Pig 3 Puppy 4 Kitten 5
>>> Cockroach False Fish False Mini Pig False Puppy True Kitten True
>>> Puppy 4 Kitten 5
通常情况下,Pandas中的数据包含在称为数据框架的结构中。数据框是带有列的二维标签数据结构,如果需要(字符串,整型,浮点型或布尔型)可以是不同的类型。例如 :
losses | team | wins | year | |
---|---|---|---|---|
0 | 5 | Bears | 11 | 2010 |
1 | 8 | Bears | 8 | 2011 |
2 | 6 | Bears | 10 | 2012 |
3 | 1 | Packers | 15 | 2011 |
4 | 5 | Packers | 11 | 2012 |
5 | 10 | Lions | 6 | 2010 |
6 | 6 | Lions | 10 | 2011 |
7 | 12 | Lions | 4 | 2012 |
要创建数据框,可以将列表字典传递给Dataframe
构造函数:
1)字典的键将是列名
2)关联列表将是该列中的值。
import pandas as pd
data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],
'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions',
'Lions', 'Lions'],
'wins': [11, 8, 10, 15, 11, 6, 10, 4],
'losses': [5, 8, 6, 1, 5, 10, 6, 12]}
football = pd.DataFrame(data)
print football
print football.dtypes
print football.describe()
print football.head()
print football.tail()
>>> losses team wins year 0 5 Bears 11 2010 1 8 Bears 8 2011 2 6 Bears 10 2012 3 1 Packers 15 2011 4 5 Packers 11 2012 5 10 Lions 6 2010 6 6 Lions 10 2011 7 12 Lions 4 2012
有关数据框的一些基本信息。上面提到的代码中的一些功能是:
1)dtypes:获取每列的数据类型
2)describe:用于查看数据框的数字
列的基本统计信息
3)head:显示数据集的前5行
4) tail:显示数据集的最后五行
>>> losses int64 team object wins int64 year int64 dtype: object
>>> losses wins year count 8.000000 8.000000 8.000000 mean 6.625000 9.375000 2011.125000 std 3.377975 3.377975 0.834523 min 1.000000 4.000000 2010.000000 25% 5.000000 7.500000 2010.750000 50% 6.000000 10.000000 2011.000000 75% 8.500000 11.000000 2012.000000 max 12.000000 15.000000 2012.000000
>>>
losses team wins year 0 5 Bears 11 2010 1 8 Bears 8 2011 2 6 Bears 10 2012 3 1 Packers 15 2011 4 5 Packers 11 2012
>>>
losses team wins year 3 1 Packers 15 2011 4 5 Packers 11 2012 5 10 Lions 6 2010 6 6 Lions 10 2011 7 12 Lions 4 2012
请注意:
1)从DataFrame中选择单个列将返回一个Series
2)从DataFrame中选择多个列将返回一个DataFrame
print football['year']
# shorthand for football['year']
print football.year
print football[['year', 'wins', 'losses']]
>>> 0 2010 1 2011 2 2012 3 2011 4 2012 5 2010 6 2011 7 2012 Name: year, dtype: int64
>>> ... Same as above >>>
year wins losses 0 2010 11 5 1 2011 8 8 2 2012 10 6 3 2011 15 1 4 2012 11 5 5 2010 6 10 6 2011 10 6 7 2012 4 12
行选择可以通过多种方式完成。一些基本和常用的方法是:
1)切片
2)单个索引(通过函数iloc或loc)
3)布尔索引
您还可以通过布尔
运算符(如&和)或| 来组合多个选择需求
print football.iloc[[0]]
print football.loc[[0]]
print football[3:5]
print football[football.wins > 10]
print football[(football.wins > 10) & (football.team == "Packers")]
>>> losses team wins year 0 5 Bears 11 2010 >>> losses team wins year 0 5 Bears 11 2010 >>> losses team wins year 3 1 Packers 15 2011 4 5 Packers 11 2012
>>> losses team wins year 0 5 Bears 11 2010 3 1 Packers 15 2011 4 5 Packers 11 2012
>>> losses team wins year 3 1 Packers 15 2011 4 5 Packers 11 2012