Quantcast
Channel: CodeSection,代码区,Python开发技术文章_教程 - CodeSec
Viewing all articles
Browse latest Browse all 9596

利用 Python 进行数据分析学习笔记(二)

$
0
0

python 的数据分析包中提供了一系列强大的数据结构,本文将对三个最重要的数据结构进行介绍。

本文参考内容:

Coursera 上学完的 《用 Python 玩转数据分析》 Pandas 官网的 10 分钟入门 NumPy 中的基本数据结构 ndarray

ndarray 是 NumPy 的基石,它有哪些好处呢?

对于大计算量的性能非常好,所以 list 做运算的时候一定要转化为 array ndarray 自带一些非常实用的函数,列举几个常用的:sum,shape(返回当前矩阵给的纬度)、argmax 等

`In 1 : import numpy as np

In 2 : a_array = np.array([[1,2,3], [1,2,3]]) #创建 ndarray In[3]: b_array = np.array([(2,2,2), (5,5,5)]) In[4]: a_array.shape #获取数组的维度 Out[4]: (2, 3) In[5]: a_array * b_array #数组相乘 Out[5]: array([[ 2, 4, 6], [ 5, 10, 15]]) In[6]: a_array > 3 #判断数组中是否每个都大于 3 Out[6]: array([[False, False, False], [False, False, False]], dtype=bool) In[7]: np.sin(a_array) #求数组中每个数字的 sin 值 Out[7]: array([[ 0.84147098, 0.90929743, 0.14112001], [ 0.84147098, 0.90929743, 0.14112001]]) In[8]: a_array.sum() #求数组中各项相加的和 Out[8]: 12 In[9]: a_array.sum(axis = 0) #求数组中每一列的值的和 Out[9]: array([2, 4, 6])` 变长字典 Series 基本特征: 类似一维数组的对象 由数据和索引组成

`In 1 : import pandas as pd

In 2 : a_series = pd.Series([1, 2, 3]) #创建索引 In[3]: a_series Out[3]:

0 1

1 2

2 3

dtype: int64

In[4]: b_series = pd.Series(['apple', 'banana', 'lemon'], index = [1, 'b', 'l']) #自定义索引 In[5]: b_series Out[5]:

1 apple

b banana

l lemon

dtype: object

In[6]: b_series['l'] #利用索引获取值 Out[6]: 'lemon' In[7]: print a_series * 2 #基本运算符,对每个值进行计算

0 2

1 4

2 6

dtype: int64

In[8]: import numpy as np In[9]: np.exp(a_series) #指数函数运算 Out[9]:

0 2.718282

1 7.389056

2 20.085537

dtype: float64

`

数据对齐:

`

In 1 : import pandas as pd

In 2 : data = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}

In[3]: index = ['Ohio', 'Texas', 'Utah'] In[4]: a_series = pd.Series(data, index = index) #创建指定 index 的 Series In[5]: a_series Out[5]:

Ohio 35000

Texas 71000

Utah 5000

dtype: int64

In[6]: pd.isnull(a_series) Out[6]:

Ohio False

Texas False

Utah False

dtype: bool

In[7]: b_data = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'California': 83000, 'Nevada': 15000} In[8]: b_series = pd.Series(b_data) In[9]: a_series + b_series #在数据运算中自动对齐不同索引的数据 Out[9]:

California NaN

Nevada NaN

Ohio 70000.0

Oregon NaN

Texas 142000.0

Utah NaN

dtype: float64

`

表格型数据结构 DataFrame 基本特征: 一个表格型的数据结构 含有一组有序的列(类似 index) 拥有多个列的数据表,每个列拥有一个 Label(类似 excel 的表头) 大致可以看成共享一个 index 的 Series 集合

`

In 1 : import pandas as pd

In 2 : import numpy as np

In[3]: dates = pd.date_range('20161007', periods=6) In[4]: dates Out[4]: DatetimeIndex(['2016-10-07', '2016-10-08', '2016-10-09', '2016-10-10','2016-10-11', '2016-10-12'],dtype='datetime64[ns]', freq='D') In[5]: df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD')) #创建一个 DataFrame In[6]: df Out[6]:

A B C D

2016-10-07 2.437131 0.004184 -0.204022 -0.395558

2016-10-08 0.988348 -0.346398 0.190402 3.268118

2016-10-09 -1.574105 1.491294 0.597307 -0.944745

2016-10-10 -2.362435 0.620811 1.807417 0.345957

2016-10-11 -0.091778 1.408165 -0.121032 0.528897

2016-10-12 -1.319251 0.698142 -1.366151 -0.523682

In[7]: df.dtypes #获取 DataFrame 的数据结构类型 Out[7]:

A float64

B float64

C float64

D float64

dtype: object

In[8]: df['A'] #根据列名获取 DataFrame 中的一列,结构为 Series Out[8]:

2016-10-07 2.437131

2016-10-08 0.988348

2016-10-09 -1.574105

2016-10-10 -2.362435

2016-10-11 -0.091778

2016-10-12 -1.319251

Freq: D, Name: A, dtype: float64

In[9]: df.ix 2 #获取某一行的数据,结构为 Series Out[9]:

A -1.574105

B 1.491294

C 0.597307

D -0.944745

Name: 2016-10-09 00:00:00, dtype: float64

In[10]: df.head(2) #获取前两行的数据 Out[10]:

A B C D

2016-10-07 2.437131 0.004184 -0.204022 -0.395558

2016-10-08 0.988348 -0.346398 0.190402 3.268118

In[11]: df.T #数据表转置运算 Out[11]:

2016-10-07 2016-10-08 2016-10-09 2016-10-10 2016-10-11 2016-10-12

A 2.437131 0.988348 -1.574105 -2.362435 -0.091778 -1.319251

B 0.004184 -0.346398 1.491294 0.620811 1.408165 0.698142

C -0.204022 0.190402 0.597307 1.807417 -0.121032 -1.366151

D -0.395558 3.268118 -0.944745 0.345957 0.528897 -0.523682

In[12]: df.sort_values(by='B') #根据 B 序列排序 Out[12]:

A B C D

2016-10-08 0.988348 -0.346398 0.190402 3.268118

2016-10-07 2.437131 0.004184 -0.204022 -0.395558

2016-10-10 -2.362435 0.620811 1.807417 0.345957

2016-10-12 -1.319251 0.698142 -1.366151 -0.523682

2016-10-11 -0.091778 1.408165 -0.121032 0.528897

2016-10-09 -1.574105 1.491294 0.597307 -0.944745

In[16]: del df['A'] In[17]: df Out[17]:

B C D

2016-10-07 0.004184 -0.204022 -0.395558

2016-10-08 -0.346398 0.190402 3.268118

2016-10-09 1.491294 0.597307 -0.944745

2016-10-10 0.620811 1.807417 0.345957

2016-10-11 1.408165 -0.121032 0.528897

2016-10-12 0.698142 -1.366151 -0.523682

`

DataFrame 强大的功能还有很多,包括:

通过标签选择数据,比如: df.loc['20130102':'20130104',['A','B']] 设置表格的值, df.at[dates[0],'A'] = 0 统计运算, df.mean() 求平均值 拼接,Merge、ConCat、Join(和 SQL 里的 Join 是一个意思) Grouping,和 SQL 中的 Group By 类似 Pivot Tables,会使用 excel 的人都不陌生,这就是数据透视表功能

Viewing all articles
Browse latest Browse all 9596

Trending Articles