目录
1. 报告
2. 代码1:从数据库中提取数据
lambda,匿名函数,快速定义单行函数,可以用在任何需要函数的地方。
numpy.array 和 python.array
python.filter(function, iterable)函数
python zip(a, b)
pandas创建DataFrame()数据
pandas判断是否是空值NaN,isnull(),notnull()
pandas.reset_index()
pandas.astype()
pandas.Excel_Writer()输出到excel
mysql
pandas.concat()函数
pandas merge()方法
pandas.concat() 和 pandas.merge()区别
pandas rename()方法
pandas.DataFrame.columns
pandas.loc[行,列]
pandas.iloc[行号,列号]
pandas.drop()函数
pandas.drop_duplicates()方法
pandas.isnull() 和 .notnull()
pandas.DataFrame.replace(to_place, value)
pandas数据透视表pivot_table(data,values,index,columns,aggfunc='mean')
pandas DataFrame.sort_values()方法
pandas.groupby()方法
pandas statsmodels
pandas DataFrame.describe()
pandas.get_dummies
3. 代码2:初始方案数据清洗
pydotplus
pylab
Ipython.display.image
time.time()
datetime.datetime.strptime(x, %Y-%m-%d %H:%M:%S)
datetime.timedelta(days=2)
TDM
bug
python list(range(9))
4. 代码3:调整方案数据清洗
5. 代码4:初始&调整方案建模
sklearn.model_selection
sklearn.metrics
sklearn.train_test_split
sklearn分类器classifier和回归其regressor的区别
sklearn选择合适的算法/sklearn中各种分类器regressor都适用于什么样的数据
python auto_ml
误差(error),偏差(bias),方差(variance)有什么区别和联系?
scipy.stats
Mann-Whitney U 检验
卡方检验,检验两个变量之间有没有关系
重要性评分柱状图
SHAP图
matplotlib
from matplotlib import pyplot as plt
python seaborn
SPSS倾向性分析
logistic回归
牛顿迭代法(Newton-Raphson)
know what, know how。知道是干什么的,怎么干的
目的:他克莫司用药日剂量
XGBoost, GBDT, Boosting, boosting,误分类样本的权值之和影响误差率,误差率影响分类器在最终分类器中的权重。
基分类器,h1的权重,误差越大,权重越小
分类器:
样本权重更新:
XGBoost输出变量重要性 -->xgb.importance返回由f分数测量的特征重要范围
stepwise regression逐步回归
propensity score倾向性评分 <--由于实验组和对照组两组病人的基线水平存在差异,倾向性评分匹配法消除数据集中的混杂因素。
==>两独立样本t检验:方差齐性检验,p,0.05;t检验/修正t检验
比较特征的差异显著性:连续特征,Mann-Whitney U检验;离散特征,卡方检验。
(1) database:surgical_record
.ipynb文件为Jupyter notebook,是一个python交互式笔记本,包含代码、运行结果展示、其他内部设置
data: surgical_record['surgery_NAME'].str.contains('肾’)
lambda 参数 :操作(参数)
np.nan,创建空值
numpy.array,生成一个数组,他的强大在于可以生成多维数据,而python.array只支持以为数组。
将对应的元素打包成一个个元组,然后返回由这些元组组成的列表
本质是通过list列表创建
li = [
[1, 2, 3, 4],
[2, 3, 4, 5]
]
# DataFRame对象里面包含两个索引, 行索引(0轴, axis=0), 列索引(1轴, axis=1)
d1 = pd.DataFrame(data=li, index=['A', 'B'], columns=['views', 'loves', 'comments', 'tranfers'])
print(d1)
narr = np.arange(8).reshape(2, 4)
# DataFRame对象里面包含两个索引, 行索引(0轴, axis=0), 列索引(1轴, axis=1)
d2 = pd.DataFrame(data=narr, index=['A', 'B'], columns=['views', 'loves', 'comments', 'tranfers'])
print(d2)
dict = {
'views': [1, 2, ],
'loves': [2, 3, ],
'comments': [3, 4, ]
}
d3 = pd.DataFrame(data=dict, index=['粉条', "粉丝"])
print(d3)
list = ['text', 'image', 'voice']
df_p = df[[list]]
pd.DataFrame([('bird',389), ('bird',24), ('mammal',80), ('mammal', np.nan)], index(行)=['falcon','parrot','lion','monkey'], columns=('class', 'max_speed') )
class max_speed falcon bird 389 parrot bird 24 lion manmmal 80.5 monkeyh manmmal NaN
把就索引列添加为列,并使用心得顺序索引。drop参数=True,避免将旧索引添加为列,默认为False
因为多个表合并到一个表,输出列Excel表发生数据错误,e.g.数值型数据末尾变0,所以python强制类型转换。
df.astype('数据类型')
df['列名'].astype('数据类型') --一列数据类型改变
writer=pd.ExcelWriter(project_path + '/data/data_from_mysql/df_检验序号索引.xlsx')
test_record_tcms.to_excel(writer)
writer.save()
(2) 用药医嘱表单
# 连接mysql数据库
conn = MySQLDB.connect(host='localhost', port=3306, user='root', password='123456', db='mdnov_ciip_ipharma_zdy', charset='UTF8')
cursor = conn.cursor()
cursor.execute("Select version()")
for i in cursor:
print(i)
try:
sql = 'select TEST_RECORD_ID,PROJECT_CODE,PROJECT_NAME,TEST_RESULT,RESULT_UNIT,IS_NORMAL,REFER_SCOPE from test_result;'
test_result = pd.read_sql(sql, conn)
except MySQLDB.err.ProgrammingError as e:
print('test_result Error is ' + str(e))
sys.exit()
where子句,有条件的从表中选取数据
pandas DataFrame.head(),返回数据帧或序列的前n行(默认值为5)
用来连接DataFrame对象,行列相同或行列不同,缺失部分为NaN
left,拼接的左侧DataFrame对象。
right,拼接的右侧DataFrame对象。
on,要加入的列或索引级别名称
how,inner,交集;outer,并集;left只用左侧;right只用右侧keys
concat() 是上下拼接;merge()是左右合并
修改DataFrame的个别列名或索引,e.g. df.rename({'表1':'纬度'})
返回列标签
(3) 检验表单
e.g. temp.loc[0:2,'Drug_Name'],loc表示location,.loc[['Drug_Name', 'Project_Name']]
e.g. [0:3, [4:6]],第3行取不到,第6列能取到
DataFrame删除一行或一列。默认axis=0,行;axis=1,列
.drop_duplicates(subset='列名',keep='first',inplace='True'),删除DataFrame某列中重复项的函数
判断缺失值一般采用isnull()和notnull()。
.isnull().sum(),每列缺失值的数量
(4) 检验结果表单
将to_replace数值/字符串替换为value
.sort_values(by='##', axis=0, ascending=True, inplace=Flase),根据指定列数据排序
(5) 诊断表单
.groupby(by=['列名'], axis=0, as_index)
传统频率学派统计方法
用于查看一些基本的统计信息,e.g. 百分位数,均值,标准差
pandas从DataFrame数据实现one hot encode的方式。
pydotplus -->绘图,比Graphviz支持中文
pylab是matplotlib的一个子包,适合交互式绘图
pylab.mpl -->rcParams解决matplotlib无法显示中文或负号的情况
# 支持显示中文
mpl.rcParams['font.sans-serif'] = ['SimHei'] ##绘图显示中文
mpl.rcParams['axes.unicode_minus'] = False
显示图像,Ipython是一个python的交互式shell,比python shell好用。利用python进行科学计算和交互可视化的一个最佳平台
获取当前时间
将数据转换为日期的方法
对象代表两个时间之间的时间差,两个date或datetime对象相减可以返回一个timedelta对象。
治疗药物监测,测定药物浓度,therapeutic drug monitoring
可以把range()返回的可迭代对象转化为一个列表
(2) 筛选初始方案中tdm符合终点事件的用药和tdm检测组合
(3) 筛选调整方案中tdm符合终点事件的用药和tdm检测组合
(4) 初始方案所有变量数据清洗
(5) 其他用药
start_time <= TDM
end_time >= tcms_3 days前
Graphviz -->开源的强大绘图工具,编写dot脚本
%matplotlib inline -->用再Jupyter notebook中具体作用是当你调用matplotlib.pyplot的绘图函数plot()进行绘图时,或者生成一个figure画布的时候,可以直接在你的python console里面生成图像。
.model_selection,主要是对数据的分割,以及与数据分割相关的功能
train_test_split方法,将原始数据集划分成train和test两部分
predictual class | ||
Actual class |
||
R²的定义如下:![Alt]在这里插入图片描述从公式来看,即使我们不使用任何模型,仅仅用目标集标签的平均值,就能让R2_score为0,如果值为负数,则表示我们预测的结果还不如测试集中的y_label的平均值准确
用来随机划分样本数据为训练集和测试集
train_x, test_x, train_y, test_y = train_test_split(train_data,train_target,test_size=0.2,random_state=5)
标签数据labeled data
选择合适的ML Algorithms。不存在一个再各方面都最好的模型/算法,需要针对具体问题,找到最好的机器学习算法
用于生产和分析的自动化机器学习模块,包括:分析、特征工程、自动缩放、特征选择、模型选择、超参优化、大数据
from auto_ml import Predictor
from auto_ml.utils import get_boston_dataset
from auto_ml.utils_models import load_ml_model
from auto_ml import Predictor
1) 首先创建Predictor预测期
Predictor(type_of_estimator=, column_descriptions=)
·type_of_estimator,指定预测器类型(classifier or regressor)
·column_descriptions,字典类型,指定字段描述信息,如果为分类任务,需要制定Y所在的列(output)2) ml_predictor.train(train_data, model_names=['XGBoost'])
2.1) auto_ml集成了DeepLearningClassifier, DeepLearningRegressor, XGBClassifier, XGBRegressor, LGBMClassifier, LGBMRegressor, CatBoostClassifier, CatBoostRegressor,在model_names参数中选择。
2.2) auto_ml中的feature_learning=Ture,用深度学习为我们学习特征,梯度提升将这些特征转化为准确的预测 ==> 这种混合方法比任何一种方法都要精确5%,但要防止过拟合。
3) ml_predictor.score(test_x, test_x['日剂量']) 。
# Score the model on test data
Returns the coefficient of determination R^2 of the prediction. 不是计算准确度R^2,r2计算在from sklearn.metrics import r2_score
4) 保存。file_name = ml_predictor.save()
5) 导入训练好的model。trained_model = load_ml_model(file_name)
6) 预测。predictions = trained_model.predict(test_x)
报错:
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
This probably means that you are
not
using fork to start your
child processes
and
you have forgotten to use the proper idiom
in
the main module:
解决:设置一个main()函数,控制多线程。
参考:Python多进程报错:RuntimeError: An attempt has been made to start a new process before the current process...
error=bias + variance,反映的是整个模型的准确度。
python统计函数率,该模块包含大量概率分布、汇总和频率统计,相关函数和统计检验、屏蔽统计,核密度估计、Monte Carlo等。e.g. Mann-Whitney U test, Wilcoxon signed rank test, Chi-square test.
是检验两个独立样本差异性的测试(在数据分布上是否有差异)。当样本正态分布、方差齐次等不能达到t检验的要求时,可以用Mann-Whitney U test。
检验基础:若两个样本有差异,则他们中心位置不同。
e.g. 春夏季犯罪数据是否有差异。原假设:无,显著性差异P值 < 0.05,显著 ==> 有差异。
return: statistic: float = min(U for x, U for y); P值: float
from scipy.stats import chi2_contingency
卡方检验要求X、Y都是定类数据
自由度 = (行数-1) * (列数-1) ==>查询得到临界值 ==> 卡方< 临界值,成立
scipy.stats.chi2_contingency(observed), observed, array_like, R*C table, 默认Pearson's 卡方统计
Return ==> chi2: float; p: float; dof: 自由度; expected: 预期频率
· 用log-likelihood ratio --> chi2——contingency(obs, lambda_ = 'log-likelihood')
重要性评分~参考:Python中XGBoost的特性重要性和特性选择_liuzh的博客-CSDN博客
1) 注意数据类型!!!
.colums()函数返回index object;importance返回np.ndarray;pd.DataFrame主要是根据list列表数据生成。
2) ValueError: shape of passed value is (3,1), indices imply (3,3)
np.array().reshape(3,4)
3) plt.bar不显示中文
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] ##绘图显示中文
mpl.rcParams['axes.unicode_minus'] = False
from matplotlib import pyplot as plt
import matplotlib.ticker as ticker
from matplotlib import rc
rc('mathtext', default='regular')
参考:SHAP:Python的可解释机器学习库 - 孙佳伟的文章 - 知乎
SHAP图的基础是shap values(归因值)和shape interaction values(交互归因值),基于此二值可以生成:
.pyplot:绘图模块,让用户绘制2D图表。
.ticker:用于配置刻度定位和格式的类。其中Locater类根据数据限制和刻度位置的选择处理视图限制的自动缩放
.rc:设置当前的rcParams,e.g. linewidth,color
axes.Axes.get_figure(),获取fiture实例。
matplotlib画图的时候怎么清空之前图片。
clf() # 清图。
cla() # 清坐标轴。
close() # 关窗口
实在matplotlib基础上面的封装,方便直接传参调用。
匹配估计的思想:if你要研究企业R&D投入对performance的影响。有两家企业,其R&D投入明显不同,但是其他各方面都高度相同,e.g. 公司规模、杠杆率、所属行业、公司治理结构等,那么在其他各方面都高度相同的情况下,这是就可以吧公司performance的差异鬼影刀R&D投入的差异。
这种找到一个控制组(实验)的个体,使得该个体与处理组(对照)的个体在除自变量外其他各因素都相似(也就是匹配),在通过自变量的差异解释因变量差异的行为,就是匹配的思想。
一般来说,每个样本有多个属性,e.g.一家公司,属性有公司规模、公司年龄、杠杆率、增长率、市场占有率、行业等,这就意味着匹配时要考虑诸多属性,也就是进行高维度匹配,一个比较好的思路是定义高维空间的距离,然后计算两个样本在高维空间的距离。
但高维匹配并不容易,因为维度越高找一个各方面相似的两个个体越难。
引入--> 倾向性评分匹配(Propensity score matching, PSM),定义一个个体进入处理组的概率。
PSM是指,某个体在处理组,找一个其他各方面与该个体尽量相似的控制组个体的概率。
PSM匹配的是自变量之外(R&D)的需要控制的其他所有协变量X。根据PS分值,SPSS筛选出匹配成功的match_id对(可根据实际情况选择合适的ps限定,增加匹配成功数)
PSM:如果自变量是连续变量,需要转换为二元离散变量。
协变量:指与因变量有线性相关,并在探讨自变量与因变量关系时通过统计计数加以控制的变量。(除自变量与因变量外,其他需要控制的变量)
倾向得分匹配(PSM)的原理与步骤 - CanisMajoris的文章 - 知乎
logistic回归为概率型非线性回归模型,是研究二分类观察结果y与一些影响因素(x1,x2,....,xn)之间关系的一种多变量分析方法。通常问题是,研究某些因素条件下某个结果是否发生,比如医学中根据病人的一些症状来判断它是否含有某种病。
在讲解logistic回归理论之前,先从LR分类器说起,logistic refression classifier。在分类情形下,经过学习后的LR分类器是一组权值w0,w1,.....,wn
x=wo+w1x1+.......+wnxn,xi为n个特征
之后按sigmoid函数的形式求出
因此,最基本的LR分类器适合二分类。
logistic回归最关键的问题是研究如何求得w0, w1, .....wn这组权值 <=用极大似然估计来做。
logistic函数:,g(x) = w0+w1x1+......+wnxn
射条件概率P(y=1|x) =p为根据观测量相对于某事件y发生的概率。
作用:用迭代的方法来求解函数方程的根。简单来说,就是不断求取切线的过程。
关键:构建迭代式。