数学建模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
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或不填,每次都会不一样。
数据预处理
缺失值处理
使用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))
使用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()