Detecting Anomalous Patients
1. Pandas
1.0 SettingwithCopyWarning (重要)
Pandas 中 SettingwithCopyWarning 的原理和解决方案
SettingWithCopyWarning 的基础复杂性是 Pandas 库中为数不多的坑。这个警告的源头深深嵌在库的底层中,不应被忽视。Jeff Reback 自己的话 ,“我没有找到任何你应该忽略这个警告的情况。如果你做某些类型的索引时不起作用,而其他情况下起作用,你是在玩火。”
幸运的是,解决警告只需要识别链式赋值并修复。如果整篇文章你只了解到了一件事,那么就应该是这一点。
另外,要分清什么时候用 .loc 或 .iloc,什么时候直接用中括号[ ]。
一般,用 .loc 或 .iloc 才是在原表格上更改,直接用中括号[ ]是新建了一个复制表格在上面更改。
1.1.1 merge
DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'),
copy=True, indicator=False, validate=None)
上述为官方文档提供的格式,更常用的格式为:
data = pd.merge(data1, data2, how='inner', on=['column1', 'column2'])
1.1.2 append
可与merge对照学习。操作很简单,直接把表2接在表1下面。
patient_time = patient1.append(patient2)
1.2 read_table
claim_dat = pd.read_table(claim_path, header=0, sep=',')
1.3 apply
DataFrame.apply(func, axis=0, broadcast=None, raw=False, reduce=None,
result_type=None, args=(), **kwds)
1.4 groupby
1.5 astype
1.6 sort_values
result = result.sort_values(by=['PatientID','TimePeriod'])
1.7 loc与iloc
1.8 diff
1.9 drop_duplicates
1.10 to_csv
比较炫酷的是,to_csv()方法也可以保存为其他格式文件,如dat:
DataFrame.to_csv('D:/temp/Result.dat')
1.11 删除行和列
1.12 筛选想要的行
no_claims = patient_outer[patient_outer['Period']!='1']
no_claims = no_claims[no_claims['Period']!='2']
1.13 逐行操作
其实不需要新的函数,不过是循环结构的读取罢了:
for indexs in (test.index-1):
if test.iloc[indexs+1, -1] != 0.0:
test.iloc[indexs, -1] = test.iloc[indexs+1, -1]
1.14 str.extract() + 正则化
str.extract() + 正则化,提取字符串中指定信息非常好用。
(比如从不规则的 “字母+数字” 字符串中提取数字)
pandas的分列之不规则字符串及str.extract()
1.15 pd.to_numeric() 字符串转数字
1.16 unique()
2. Sklearn
2.1 KMeans
from sklearn.cluster import KMeans
estimator = KMeans(n_clusters=3)
array = p1_dat.iloc[:, 1:-1].values
estimator.fit(array)
p1_dat["ClusterID"] = estimator.labels_
3. Python
3.1 split
3.2 lambda
month_dict = {'Jan':1,'Feb':1,'Mar':1,'Apr':1,'May':1,'Jun':1,
'Jul':2,'Aug':2,'Sep':2,'Oct':2,'Nov':2,'Dec':2}
claim['TimePeriod'] = claim['FirstDayOfStay'].apply(lambda x: month_dict[str(x).split('-')[1]])
3.3 numpy创建整数数组
p = np.ones([4, 3], int)
3.4 格式化
change[i,j] = cluster['{0}-{1}'.format(i,j)].sum()