数据科学包:numpy&pandas

数据科学包:numpy&pandas

1.有什么用

  1. 快,pandas是numpy的升级版本,因为是用c语言写的。

2.numpy

  1. numpy的使用:
import numpy as np
array = np.array([[1,2,3],[4,5,6]])
print(array)
print("number of dim",array.ndim) # 几维数组
print("shape",array.shape) # 几行几列
print("size",array.size) # 总共多少个元素
  1. numpy创建array:
import numpy as np
a = np.array([2,3,45],dtype = np.int) # 创建列表,可以定义它的type
print(a.dtype)
b = np.ones((3,4)) # zeros也可以,empty也可,shape的几行几列需要再用括号括住
print(b)
c = np.arange(12).reshape((3,4)) # 和python中的range差不多
print(c)
d = np.linspace(1,10,6).reshape((2,3)) # 生成了一个6段的数列
print(d)
  1. numpy基础运算
    列表:
import numpy as np
a = np.array([10,20,30,40])
b = np.array([1,2,3,4])
print(a,b)
c = a-b    # 简单的加法减乘除法
print(c)
c = b ** 2 # 双※号代表次方
print(c)
c = 10*np.sin(a)  # 简单的三角函数的运算
print(c)
print(c < 0)  # 显示出一个对应的列表

矩阵:

import numpy as np
a = np.array([[1,0],[0,1]])
b = np.arange(4).reshape((2,2))
c = a*b   # 简单的逐个相乘
c_dot = np.dot(a,b)  # 这个是矩阵的乘法
c_dot_2 = a.dot(b)   # 这个是矩阵的乘法
print(c)
print(c_dot)
d = np.random.random((2,4))  # 一切随机,从0到1之间的数字
print(d)
print(np.sum(d,axis = 0)) # 0是列;1是行
print(np.min(d))   #求最小值
print(np.max(d))   #求最大值

矩阵:

import numpy as np
A = np.arange(14,2,-1).reshape((3,4))
print(A)
print(np.argmin(A))   # 计算最小值的索引
print(np.argmax(A))   # 计算最大值的索引
print(np.mean(A))     # 计算出平均值
print(A.mean())
print(np.median(A))    # 计算中位数
print(np.cumsum(A))    # 逐步累加起来,返回的是一个列表
print(np.diff(A))      # 累差,返回的是矩阵
print(np.nonzero(A))   # 返回的是两个数列,然后一一对应,前一个行后一个列
print(np.sort(A))      # 逐行逐行的排序
print(np.transpose(A)) # 等于print(A.T)
print((A.T).dot(A))    # 转置后相乘
print(np.clip(A,5,9))  # 大于9变成9,小于5变成5
print(np.mean(A,axis = 0))   # 0对于列,1对应于行
  1. numpy的索引:
import numpy as np

A = np.arange(3,15).reshape((3,4))

print(A[2])   # 索引
print(A[2][1])  # 索引
print(A[21])  # 索引
print("-----------------")
print(A[2,:])    # 用冒号代替所有的数
print(A[2,:].shape)  
print("-----------------")
print(A[1,1:3])   # 第一行的从1到3的值,包头不包尾
print("-----------------")
for column in A.T:  #for循环(默认迭代行)
    print(column)
print("-----------------")
for row in A:  # for循环(默认迭代行)
    print(row)
print("-----------------")
print(A.flatten()) #这个转换成了列表
for row in A.flat: # 迭代器,迭代每一项
    print(row,end = " ")
  1. array的合并
import numpy as np

A = np.array([1,1,1])
B = np.array([2,2,2])

print(np.vstack((A,B)))

C = np.vstack((A,B))   # 上下合并 vertical stack
D = np.hstack((A,B))   # 左右合并 horizontal stack
print(D)   # 因为是两个序列合并的就还是序列
print(C.shape) 
print("-----------------")
# 不能用T把一个横向的数列变成一个纵向的
print(A.T)
print(A)
print("-----------------")
print(A)   # 那可怎么办,如何把一个横向的变成纵向的呢
print(A.shape)    
print(A[np.newaxis,:])  # 在行上面加了一个维度
print(A[np.newaxis,:].shape)  
print(A[:,np.newaxis])
print(A[:,np.newaxis].shape)
print("-----------------")
A = A[:,np.newaxis]
B = B[:,np.newaxis]
D = np.hstack((A,B))
print(D)
print("-----------------")
C = np.concatenate((A,B,B,A),axis = 0)  # 多个array的合并
print(C)
C = np.concatenate((A,B,B,A),axis = 1)   # 横向合并1,纵向合并是0
print(C)

A = np.array([1,1,1])[:,np.newaxis] :这个是三行一列
B = np.array([2,2,2])[np.newaxis,:] :这个是一行三列

  1. array的分割
import numpy as np

A = np.arange(12).reshape((3,4))
print(A)

print(np.split(A,2,axis = 1))  # 分割成两块,1代表纵向的分割,0代表横向分割
print(np.array_split(A,3,axis = 1))  # 不等的分割
print("----------------------------")
print(np.vsplit(A,3))  #按行分割
print(np.hsplit(A,2))  #按列分割

7.copy,deep copy

import numpy as np

b = a = c = d = np.arange(4)

a[0] = 11
print(a)
# 注意他们四个一起变了
# 不想让他们一起变就
# 这个是个deep copy
b = a.copy()
a[1:3] = [55,66]
print(a)
print(c)
print(b)

3.pandas学习

  1. Pandas 适用于处理以下类型的数据:
    1. 与 SQL 或 Excel 表类似的,含异构列的表格数据;
    2. 有序和无序(非固定频率)的时间序列数据;
    3. 带行列标签的矩阵数据,包括同构或异构型数据;
    4. 任意其它形式的观测、统计数据集, 数据转入 Pandas 数据结构时不必事先标记。
  2. ipython notebook的优点: 1.web上的ipython 2.显示内联图片 3.导出数据和分析过程
  3. Pandas 和 NumPy 的本质区别:NumPy 数组只有一种数据类型,DataFrame 每列的数据类型各不相同。
  4. 快速入门:
    1. 生成对象:见下方代码块1
    2. 查看数据:df.head() df.tail(3)
      显示索引与列表名:df.index df.columns df.describe()
      转置数据:df.T
      按轴排序:df.sort_index(axis=1, ascending=False)
      按值排序:df.sort_values(by=‘B’)
    3. 选择:.at、.iat、.loc 和 .iloc
      1. 获取数据:选择单列,产生 Series,与 df.A 等效:df[‘A’]
        用 [ ] 切片行: df[0:3] df[‘20130102’:‘20130104’]
      2. 按标签选择
        一行 df.loc[dates[0]]
        多列:df.loc[:, [‘A’, ‘B’]]
        行和列:df.loc[‘20130102’:‘20130104’, [‘A’, ‘B’]]
        提取标量值:df.loc[dates[0], ‘A’]
        快速访问(同上): df.at[dates[0], ‘A’]
      3. 按位置选择:就是用整数操作
        df.iloc[3]
        df.iloc[3:5, 0:2]
        df.iloc[[1, 2, 4], [0, 2]]
      4. 布尔索引
        df[df.A > 0]
        df[df > 0]
        df2[df2[‘E’].isin([‘two’, ‘four’])]
    4. 缺失值
      df1.dropna(how=‘any’)
      df1.fillna(value=5)
      pd.isna(df1)
    5. 统计
      df.mean()在列上执行
      df.mean(1)在行上执行
    6. Apply函数:
      df.apply(np.cumsum)
      df.apply(lambda x: x.max() - x.min())
    7. 统计出现次数
      s.value_counts()
s = pd.Series([1, 3, 5, np.nan, 6, 8])

dates = pd.date_range('20130101', periods=6)

df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))

df2 = pd.DataFrame({'A': 1.,
   ...:             'B': pd.Timestamp('20130102'),
   ...:             'C': pd.Series(1, index=list(range(4)), dtype='float32'),
   ...:             'D': np.array([3] * 4, dtype='int32'),
   ...:             'E': pd.Categorical(["test", "train", "test", "train"]),
   ...:             'F': 'foo'})
  1. 快速入门2:
    1. 合并(Merge):
      pieces = [df[:3], df[3:7], df[7:]]
      用于连接pandas对象:pd.concat(pieces)
      SQL风格的合并:pd.merge(left, right, on=‘key’)
    2. 追加(Append):
      df.append(s, ignore_index=True)
    3. 分组(Grouping):
      df.groupby(‘A’).sum()
      df.groupby([‘A’, ‘B’]).sum()
    4. 重塑(Reshaping):
      stacked = df2.stack()
      stacked.unstack()
  2. 快速入门3:
    1. 数据透视表
      pd.pivot_table(df, values=‘D’, index=[‘A’, ‘B’], columns=[‘C’])
    2. 可视化
      ts.plot()
    3. 数据输入\输出:
      df.to_csv(‘foo.csv’)
      pd.read_csv(‘foo.csv’)
      df.to_excel(‘foo.xlsx’, sheet_name=‘Sheet1’)
      pd.read_excel(‘foo.xlsx’, ‘Sheet1’, index_col=None, na_values=[‘NA’])
  3. 核心数据结构:
    1. Series 是一维的带标签的数组,数组里可以放任意数据:
      s = pd.Series(data, index=index)
      index是一个列表,用来作为数据的标签。data可以是:字典、ndarray对象、标量值
      类ndarray对象、类dict对象、标签对齐(s1+s2)
    2. DataFrame:二维带行标签和列标签的数组。
      df = pd.DataFrame(data, index=index, columns=columns)
      data可以是字典、列表构成(相同长度)、Series创建
    3. panel:三维数据判断(不常用)
  4. 电影分析代码中遇到的不同:
    1. hot_movies_rating.sort_values(by=‘rating’,ascending=False).head(10)
    2. mean_ratings.loc[top_20_score.index]
  5. 索引
    1. index和column都有.name属性
    2. 重复索引:重复的返回一个series,不重复的返回一个值。.is_unique判断是否是重复索引。
      数据清洗:s.groupby(s.index).sum() .mean() .first()
    3. 多级索引:
      a = [[‘a’,‘a’,‘b’,‘c’],[1,2,2,3]]
      t = list(zip(*a))
      结果:[(‘a’,1),(‘a’,2),(‘b’,2),(‘c’,3)]
      index = pd.MultiIndex.from.tuples(t,names = [‘level1’,‘level2’])
  6. 分组计算
    拆分---->应用---->合并
    分组:1.列表 2.字典 3.函数 4.多级索引
    按列分组加上(axis = 1)
  7. 聚合运算:
    拆分---->应用---->合并
    mean min max describe count :内置的
    自定义的:grouped.agg(函数名)
    多个:grouped.agg(【‘mean’,‘min’,‘max’,(‘range’,函数名)】)
    d = {‘data1’:‘mean’,‘data2’:‘sum’}
    高级操作
    1.分组运算会改变其原始形状。
    k1_mean = df.groupby(‘key1’).transform(np.mean).add_prefix(‘mean_’)
    df[k1_mean_columns] = k1_mean
    data.groupby(group_key).apply(lambda g: g.fillna(g.mean()))
  8. 数据导入导出
    1.构造索引indexs和columns
    2.数据转换、类型转换
    3.日期解析
    4.迭代:文件一次读一部分(面对大数据量)
    pd.read_csv(,header = None,name = [,],index_col = [])
    pd.read_table(’’,sep = ‘’)
    pd.read_table(’’,sep = ‘正则表达式’,na_values = [’’:[’’,’’,’’],)
    方块读取:chunksize = 1000
    数据保存:df.to_csv(’’,index = False,header = None,sep = ‘’)
    二进制的数据;pickle 还有其他格式的数据
  9. 时间日期:
    python中的datetime模块:from datetime import datetime; from datetime import timedelta
    时间序列:时期及算术运算
    重采样resample(‘W-FRI’,how = ‘sum’):1.to_period()和to_timestamp()
  10. 数据可视化:%matplotlib inline
    df.plot(title =’’,style = ‘’,figsize(,),subplots = True,shary = True)
    df.ploy.bar(stacked = True)
    df.ploy.barh(stacked = True)
    df[‘a’].plot.hist(bins = 20)
    df[‘a’].plot.kde(bins = 20) 概率密度函数
    df.plot.scatter(x = ‘a’,y = ‘b’)
    df.plot.pie()
# 股票分析
data = pd.read_csv('',index_col = "Data",parse_dates = True)

# 时间事件日志
def _parse_date(dsstr):
	return pd.Timestamp(dsstr).date()

data = pd.read_csv('',header = 3,index_col = '',parse_dates = True,date _parser = _parse_date)

  1. 小结
    ipython—>快速入门(实际上很慢)—>MovieLen电影分析—>核心数据结构、索引、分组与聚合、IO操作、时间序列、数据可视化—>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值