python我爱编程呆鸟的Python数据分析

Python数据分析常用API整理

2017-08-01  本文已影响215人  shohokuooo

整理归纳在Python中使用对数据处理的常用方法,包括与HDFS文件的读写,主要是怕用的时候记不住,容易搞混,再搜也不爽,好记性不如烂笔头,写下来自己用的时候方便看,而且写一遍也加深印象。
随查随用随更新

Numpy

ndarray

ndarr1 = np.array([ [1, 2, 3], [4, 5, 6] ])
shape 大小和形状
dtype 数据类型
astype 显式的转换类型
不同大小的ndarray也可以运算,称之为广播,比如arr * 2
一维:用[x]进行索引,用[x:y]进行切片,都是原始数组的视图
多维:[x][y]或者[x,y]索引,[x1:x2, y1:y2]切片
布尔型可以直接做索引

按轴进行布尔类型list的索引,或者对每个元素进行单个布尔索引,比如data1[data1 > 0] = 0

花式索引行和列

arr[ [行1, 行i] ][ :, [列1, 列i] ] 或者
arr[ np.ix_( [行1, 行i], [列1, 列i] ) ]
而且花式索引总是复制数据到新的数组中,不是切片那种原始数组的视图

arr.T 转置
通用函数

np.sqrt(arr) arr的开平方
np.exp(arr) arr的e的x次方
np.abs(arr) arr的绝对值
np.square(arr) arr的平方
np.log(arr) ln(arr)
np.log10(arr) log10(arr)
np.isnan arr的各个元素是否为NaN的bool数组
np.add(arr1, arr2) arr1 + arr2
np.subtract(arr1, arr2) arr1 - arr2

三元表达式
np.where(cond, xarr, yarr) 等价为 xarr if cond else yarr
统计

arr.sum(axis=?) 按照轴的方向求和
arr.mean 按照轴的方向求平均值
arr.min()和max() 最大和最小值
arr.argmin()和argmax() 最大和最小值的索引
arr.cumsum() 所有元素的累计和
arr.cumprod() 所有元素的累计积
排序
np.sort(arr)和arr.sort(),前者是顶级方法,返回对arr排序后的副本;后者则是直接对arr排序。

线性代数
包括矩阵的点乘,矩阵分解以及行列式等等。
点乘:xarr.dot(yarr)等价于np.dot(xarr, yarr)
numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类。比如如下部分:

diag([一维数组]) 对角矩阵,对角线是输入的一维数组
dot 点乘
det 计算矩阵的行列式
inv 计算矩阵的逆
qr 计算QR分解
svd 计算奇异值分解(SVD)

Pandas

(官网)https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html
官网Pandas的API汇总
官网10分钟对Pandas的简介

Series

可以把Series看成是一个有序的定长字典。
ser = Series([1, 2, 3, 4], index=['d', 'b', 'a', 'c'])
经常存在与DataFrame的行与列中。
也可以直接从字典类型的对象中构建。
idx_val_map = {'d':1, 'b':2, 'a':3, 'c':4}
ser = Series(idx_val_map, name='值的名称')
ser.index.name = '索引的名称'
ser['a']进行索引
再进一步,比如对于二维的DataFrame,取其中一列出来,就是Series,它的name就是这一列的名字,它的index就是DataFrame的index,index的name就是DataFrame中作为index的那一列的名字。

DataFrame

DataFrame的索引是不可更改的。可以添加和删除,但是不能修改。

predict_df = pd.DataFrame(data={'svc_y': svc_y, 'dnn_y': dnn_y, 'xgb_y': xgb_y, 'rf_y': rf_y}, columns=['svc_y', 'dnn_y', 'xgb_y' ,'rf_y'])

3.由另一个DataFrame构成
有时候会有一种需求是从已经有的DataFrame中创建一个空的Dataframe但是使用的是原来这个Dataframe的结构。

copy_df = pd.DataFrame.from_items([(name, pd.Series(data=None, dtype=series.dtype)) 
                                    for name, series in original_df.iteritems()])

Matplotlib

常用作图方法

import matplotlib.pyplot as plt
%matplotlib inline  # 在ipynb上显示图片

plt.plot([4, 3, 2, 1])  # 作图代码
plt.show()  # 在python运行程序时显示

# 启动ipython作图时可以: ipython --pylab,这样就会自动import matplotlib.pyplot as plt而且不用show()就可以输出图表。
plt.plot([4, 3, 2, 1])  # 使用ipython --pylab后直接显示图图表

直接用数据作图

fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
plt.plot([1.5, 3.5, -2, 1.6])  # 默认对最后创建的subplot作图
import numpy as np
from numpy.random import randn
_ = ax1.hist(randn(100), bins=20, color='k', alpha=0.3)  # 直方图
ax2.scatter(np.arange(30), np.arange(30) + 3 * randn(30))  # 散列图
默认画图,直方图和散列图
plt.plot(randn(30).cumsum(), 'ko--')  # 等价于下面语句
plt.plot(randn(30).cumsum(), color='k', linestyle='dashed', marker='o')
强调数据点位置
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum())
ticks = ax.set_xticks([0, 250, 500, 750, 1000])  # 设置X轴的刻度
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'], rotation=30, fontsize='small')  # 刻度的标签
ax.set_title('My first matplotlib plot')  # 图的标题
ax.set_xlabel('Stages')  # X轴的名称
设置坐标轴的信息和图标题
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(100).cumsum(), 'k', label='one')  # 创建图例
ax.plot(randn(100).cumsum(), 'g--', label='two')
ax.plot(randn(100).cumsum(), 'r.', label='three')
ax.legend(loc='best')  # 把上面设置的图例(legend)创建生效
图例
plt.savefig('figpath.svg')
plt.savefig('figpath.png', dpi=400, bbox_inches='tight')

Pandas的绘图函数

import pandas as pd
from pandas import Series, DataFrame
fig, axes = plt.subplots(nrows=2, ncols=1)  # 获得subplot集合
data = Series(np.random.rand(16), index=list('abcdefghijklmnop'))
data.plot(kind='bar', ax=axes[0], color='k', alpha=0.7)  # 竖向柱状图,不设置kind默认是线形图
data.plot(kind='barh', ax=axes[1], color='k', alpha=0.7)  # 横向柱状图
Series柱状图
df = DataFrame(np.random.rand(6, 4),
              index=['one', 'two', 'three', 'four', 'five', 'six'],
              columns=pd.Index(['A', 'B', 'C', 'D'], name='Genus'))
print(df)
df.plot(kind='bar')

df数据打印:
Genus A B C D
one 0.017426 0.964258 0.479931 0.636357

two 0.020693 0.979753 0.846889 0.436802
three 0.650068 0.608675 0.964375 0.866141
four 0.523848 0.610598 0.296204 0.879183
five 0.419329 0.023081 0.442044 0.842727
six 0.926948 0.454734 0.436056 0.970364

DataFrame的柱状图
comp1 = np.random.normal(0, 1, size=200)  # N(0, 1)
comp2 = np.random.normal(10, 2, size=200) # N(10, 4)
values = Series(np.concatenate([comp1, comp2]))  # 合并为一个Series
values.hist(bins=100, alpha=0.3, color = 'k', normed=True)  # 直方图
values.plot(kind='kde', style='k--')  # 密度图(kde表示标准混合正态分布)
直方图和密度图
plt.scatter(trans_data['m1'], trans_data['unemp'])  # 散布图
plt.title('Changes in log %s vs. log %s' % ('m1', 'unemp'))
散布图
pd.plotting.scatter_matrix(trans_data, diagonal='kde', color='k', alpha=0.3)  # 散布图矩阵
散布图矩阵
上一篇下一篇

猜你喜欢

热点阅读