📂python
🔖python
2022-07-21 22:19阅读: 248评论: 0推荐: 0

数学建模python入门

库导入

python三大件

np : 数据计算 pd : 数据库 plt : 画图

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

图形可视化库:sns

import seaborn as sns

教程链接:https://zhuanlan.zhihu.com/p/49035741

算法模型库:sklearn

from sklearn.ensemble import RandomForestClassifier

数据导入

  • pandas库用于读入原始数据

    path = 'LogiReg_data.txt'
    pdData=pd.read_csv(path, header=None,names=['Exam1','Exam2','Admitted'])
    pdData.head()

选取部分数据

df.loc[ 选取对象 ]

文件类型 CSV

  • row_index 行索引(数字行号)
  • column_name 列名

相当于(x, y)确定一个点坐标

获取部分数据单元

部分数据:称为切片

  • 获取单个单元

    df.loc[行索引,列名]

  • 获取某一行

    df.loc[行索引]

    df.loc[ '行名' ]

  • 获取某一列

    df.loc[ '列名' ]

    df.列名

  • 获取指定几列

    df.loc[:, ’列名A‘,’列名D‘ ]

  • 获取连续几列

    df.loc[:, ’列名A‘:’列名D‘ ]

总结

1:pandas loc 切片索引中是包含末尾值的,列表切片不包含末尾值, iloc也是不包含末尾值的
2:loc 获取指定行列是需要使用中括号 [ ] 进行包裹, 获取连续行列使用冒号
3:DataFrame中 loc 进行切片,默认使用行,即df[‘a’] 是获取 a 这一行的数据
————————————————
原文链接:

https://blog.csdn.net/weixin_43229819/article/details/121194832

http://t.csdn.cn/jRgVe

iloc切片索引

使用 iloc 进行切片索引,和 loc 方式类似,iloc 使用 索引编号来索引

df.iloc[ : , 0 : 1 ]

iloc结果不包含末尾值,代表列编号为0:1,从第0列开始,不包含第1列,总共1列

数据命名

  • 训练集 train_data
  • 测试集 test_data
  • 处理过后 通常将train_data赋值给X, test_data赋值给X_test
  • 目标结果集 target
训练集 测试集 目标值
train_data test_data target
X X_test y

随机划分数据集

sklearn库中的 train_test_split()函数随机划分训练集和测试集

X_train,x_test = train_test_split(x)
X_train, X_test, y_train, y_test = train(X,y, random_state = 0)
  • random_state: 随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。
    • 每次都填1,其他参数一样的情况下得到的随机数组是一样的。
    • 填0或不填,每次都会不一样。

数据预处理

缺失值处理

  1. 使用pandas中的fillna()函数填充NaN空缺值

    • 通常情况下,可以填充为0
    • 但比如年龄这类数值不建议填充为0时,将其填充为一个无意义数值,如:-1
    X = pd.get_dummies(train_data[features].fillna(-1))
    X_test = pd.get_dummies(test_data[features].fillna(-1))
  1. 使用Pandas中dropna(axis=0)函数直接去除缺失值所在记录

    • 比如训练数据的目标值值缺失时,y为NaN, 可以直接扔掉该记录
    • axis:轴。
      • 0或'index',表示按行删除;
      • 1或'columns',表示按列删除。
    filtered_data = origin_data.dropna(axis=0)

非数值型属性处理

  • 将分类型字符串转换为数值

  • 离散化独热编码one-hot

    pd.get_dummies(train_data[])

    有几种属性状态就生成几列0-1判别值,是该类为1,其他列全为0,实现以数字分类

    如:Sex属性状态有:male、female

    ​ 分别分为两列:Sex_male、Sex_female

    ​ 通过列内0-1取值实现数值化字符串

可视化

热力图:相关性分析

1. 复制一份数据

data = original_data.copy()
data.shape

2. 选择几个属性

# 数据选择,根据属性名筛选列表
numerical = [ 'extended','country','region','nreleased','ransom',
'nhostkid', 'success','suicide','specificity','vicinity','nkill']
idata = data[numerical]
idata.shape

3. 缺失值处理

# 缺失值处理, 根据不同属性的特征,将缺失的值以各自对应的合适值填充
idata.nkill = np.round(data.nkill.fillna(data.nkill.median())).astype(int)
idata.nwound = np.round(data.nwound.fillna(data.nwound.median())).astype(int)
idata.nreleased = np.round(idata.nreleased.fillna(-1)).astype(int)
idata.ransom = np.round(idata.ransom.fillna(-9)).astype(int)
idata.nhostkid = np.round(idata.nhostkid.fillna(-99)).astype(int)
idata.head()

4. 绘制热力图

# 绘制热力图
fig, ax = plt.subplots(figsize=(25, 25))
sns.heatmap(idata.corr(), annot = True,cmap= 'Blues',annot_kws={"fontsize":20})#, fmt='.6g',annot=True 表示显示系数
plt.xticks(fontsize=24)
plt.yticks(fontsize=24)
plt.savefig('relevance.png')
plt.show()

本文作者:Hecto

本文链接:https://www.cnblogs.com/tow1/p/16503822.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Hecto  阅读(248)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑