【学习笔记】python数据处理(持续更新)

numpy

  • 数组
    • 创建数组
a = np.array([2, 0, 1, 5]) #创建数组
  • 引用
a[:3] #引用前三个数字(切片)
  • 将data转换为bool类型
data == u'好' # 数组转换为bool类型
data[data == u'是']  #用布尔类型数组来取data的值
  • 二维数组
b= np.array([[1, 2, 3], [4, 5, 6]]) #创建二维数组
  • 生成自变量
x = np.linspace(0, 10, 1000) #作图的变量自变量
  • 建立范围
np.arange(1, 9, 0.25)
  • 打乱数据
from numpy.random import shuffle #引入随机函数
shuffle(data) #随机打乱数据
data_train = data[:int(0.8*len(data)), :] #选取前80%为训练数据
data_test = data[int(0.8*len(data)):, :] #选取前20%为测试数据

pandas

  • 创建序列
s = pd.Series([1,2,3], index=['a', 'b', 'c'])
  • 创建表格
d = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns = ['a', 'b', 'c']) #创建一个表
d2 = pd.DataFrame(s) #也可以用已有的序列来创建表格
  • 读取表格,文本
data = pd.read_csv(datafile,encoding='utf-8')#表格里有汉字
pd.read_excel('data.xls') #读取Excel文件,创建DataFrame。
pd.read_csv('data.csv', encoding = 'utf-8') #读取文本格式的数据,一般用encoding指定编码。
  • 读取表格,已某一列为索引项
data = pd.read_excel(catering_sale, index_col = u'日期') #读取数据,指定“日期”列为索引列
  • 对行列操作
data['w']#w列,返回序列
data[['w']]#w列,返回dataframe
data[1:3]#取2到3行(前闭后开)
data.iat[1,1]#取第二行第二列
data[i][j] #第i列第j行(注意数组的表示)(可以用来通过判定取某些数据)
data[int(len(data)*p):,:]#..行..列
data.loc['a',['w','x']]#返回a行,w,x列
data.head()#返回前几行
data.tail()#返回后几行
data.iloc[-1]#最后一行,返回序列
data.iloc[-1:]#最后一行,返回dataframe
  • 保存表格
pd.DataFrame(cm_train, index = range(1, 6), columns = range(1, 6))# 改变行列标题
  • 保存结果
data_processed.to_excel(transformeddata, index = False)
  • 标准化
data_zs = 1.0*(data - data.mean())/data.std() #数据标准化
  • 计算相关系数
a=data.corr() #相关系数矩阵,即给出了任意两款菜式之间的相关系数
b=data.corr()[u'百合酱蒸凤爪'] #只显示“百合酱蒸凤爪”与其他菜式的相关系数
c=data[u'百合酱蒸凤爪'].corr(data[u'翡翠蒸香茜饺']) #计算“百合酱蒸凤爪”与“翡翠蒸香茜饺”的相关系数
  • 正则化(数据按列)
(data - data.min())/(data.max() - data.min()) #最小-最大规范化
(data - data.mean())/data.std() #零-均值规范化
data/10**np.ceil(np.log10(data.abs().max())) #小数定标规范化
  • 计算基本统计量(count mean std min 25% 50% 75% max )
statistics = data.describe()
  • 计算极差,变异系数,四分位间距
statistics.loc['range'] = statistics.loc['max']-statistics.loc['min'] #极差
statistics.loc['var'] = statistics.loc['std']/statistics.loc['mean'] #变异系数
statistics.loc['dis'] = statistics.loc['75%']-statistics.loc['25%'] #四分位数间距
  • 相邻做差分
  d = data[u'发生时间'].diff() > ts #相邻时间作差分,比较是否大于阈值

matplotlib

  • 设置图像大小,x,y轴名称,标题,显示范围,显示图例
plt.figure(figsize = (8, 4)) #建立图像,设置图像大小
plt.xlabel('Time(s) ') # x轴名称
plt.ylabel('Volt') # y轴名称
plt.title('A Simple Example') #标题
plt.ylim(0, 2.2) #显示的y轴范围
plt.legend() #显示图例
plt.show() #显示作图结果
  • 做点
plt.plot(x,y,label = '$\sin x+1$', color = 'red', linewidth = 2) #作图,设置标签、线条颜色、线条大小
plt.plot(x, z, 'b--', label = '$\cos x^2+1$')  #作图,设置标签、线条类型
  • 箱图
import matplotlib.pyplot as plt #导入图像库
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号

plt.figure() #建立图像
p = data.boxplot(return_type='dict') #画箱线图,直接使用DataFrame的方法
  • 添加点注释
x = p['fliers'][0].get_xdata() # 'flies'即为异常值的标签
y = p['fliers'][0].get_ydata()
y.sort() #从小到大排序,该方法直接改变原对象

for i in range(len(x)):
  if i>0:
    plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.05 -0.8/(y[i]-y[i-1]),y[i]))
  else:
    plt.annotate(y[i], xy = (x[i],y[i]), xytext=(x[i]+0.08,y[i]))
plt.annotate(format(p[6], '.4%'), xy = (6, p[6]), xytext=(6*0.9, p[6]*0.9), arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2")) #添加注释,即85%处的标记。这里包括了指定箭头样式。
  • 做柱状图
data.plot(kind='bar')
  • 画第二个y轴
p.plot(color = 'r', secondary_y = True, style = '-o',linewidth = 2)
  • 自定义作图函数
def density_plot(data): #自定义作图函数
  import matplotlib.pyplot as plt
  plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
  plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
  p = data.plot(kind='kde', linewidth = 2, subplots = True, sharex = False)
  [p[i].set_ylabel(u'密度') for i in range(k)]
  plt.legend()
  return plt

sklearn

  • 逻辑回归
rom sklearn.linear_model import LogisticRegression as LR
from sklearn.linear_model import RandomizedLogisticRegression as RLR 
rlr = RLR() #建立随机逻辑回归模型,筛选变量
rlr.fit(x, y) #训练模型
rlr.get_support() #获取特征筛选结果,也可以通过.scores_方法获取各个特征的分数
print(u'通过随机逻辑回归模型筛选特征结束。')
print(u'有效特征为:%s' % ','.join(data.columns[rlr.get_support()]))
x = data[data.columns[rlr.get_support()]].as_matrix() #筛选好特征

lr = LR() #建立逻辑回归模型
lr.fit(x, y) #用筛选后的特征数据来训练模型
print(u'逻辑回归模型训练结束。')
print(u'模型的平均正确率为:%s' % lr.score(x, y)) #给出模型的平均正确率,本例为81.4%
  • pca
from sklearn.decomposition import PCA

pca = PCA()
b=pca.fit(data)
a=pca.components_ #返回模型的各个特征向量
pca.explained_variance_ratio_ #返回各个成分各自的方差百分比

svm

from sklearn import svm
model = svm.SVC()
model.fit(x_train, y_train)
import pickle # 保存模型
pickle.dump(model, open('../tmp/svm.model', 'wb'))

scripy

  • 读取mat数据
from scipy.io import loadmat #mat是MATLAB专用格式,需要用loadmat读取它
mat = loadmat(inputfile)
signal = mat['leleccum'][0]

keras

  • 神经网络
    • 建立模型
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation

model = Sequential() #建立模型
model.add(Dense(11, input_shape = 17))
# model.add(Dense(11, 17)) #添加输入层、隐藏层的连接
model.add(Activation('relu')) #以Relu函数为激活函数
model.add(Dense(17, 10)) #添加隐藏层、隐藏层的连接
model.add(Activation('relu')) #以Relu函数为激活函数
model.add(Dense(10, 1)) #添加隐藏层、输出层的连接
model.add(Activation('sigmoid')) #以sigmoid函数为激活函数
#编译模型,损失函数为binary_crossentropy,用adam法求解
model.compile(loss='binary_crossentropy', optimizer='adam', class_mode="binary") 
  • 训练
model.fit(x_train, y_train, nb_epoch = 100, batch_size = 1) #训练模型
model.save_weights('../tmp/net.model') #保存模型参数
  • 预测
r = pd.DataFrame(model.predict_classes(x_test), columns = [u'预测结果'])
pd.concat([data_test.iloc[:,:5], r], axis = 1).to_excel(testoutputfile)

猜你喜欢

转载自blog.csdn.net/weixin_42641395/article/details/82429966
今日推荐