使用pandsa資料框時經常需要通過某一列來篩選資料,有時需要用for迴圈來篩選目標列,但for迴圈太慢,可以通過numpy子集函式先篩選索引,然後通過布林索引來篩選,可以極大提高篩選的速度,可以1秒篩選幾百萬的矩陣。
第二步,對於每個樣本,提取3條序列作為測試集合使用
比如要解決如下問題:
本人有個涉及質粒的矩陣,如下:
>>
> pdf6.head()0
1234
5678
9...
2072
2073
2074
2075
2076
2077
2078
2079 id6 plasmid032
1221
201164
41613.
..44
125113
18 ap012172_1 cp002635120
148141347
7128.
..81
9218
212 ap012172_2 ap012172216
1411247
4611105.
..35
105211
16 ap012173_3 ap012173329
1223
1614
1110624
8...
44102
211111 ap012174_4 ap012174437
1317249
122621
12...
86137
2927 ap012175_5 ap012175
每個質粒理論上應該有10個資料,但有些質粒不到10個,目標是去掉資料不夠10條的質粒樣本,然後每個取其中三個樣本。
#首先根據id sort,這樣同乙個質粒的sample會聚在一起
>>
> s_pdf6=pdf6.sort_values(
"id6"
)>>
> p6id = pdf6[
"plasmid"
]>>
> badplasid=pd.series(p6id)
.value_counts(
)[pd.series(p6id)
.value_counts()!=
10].index
>>
> badplasid
index(
['he577332'
,'cp014550'
,'cm002269'
,'ap018195'
,'he577331'
,'cp006583'
,'cm001479'
,'cp017127'
,'cp008949'
,'ef495211',.
..'he983996'
,'cp006924'
,'af312688'
,'af128883'
,'cp003436'
,'cm002137'
,'gu569091'
,'cp003435'
,'cp003442'
,'cp012459'],
dtype=
'object'
, length=
152)
# 計算子集
>>
> s_pdf6_bad_index=np.in1d(s_pdf6.plasmid,badplasid)
# 返回 s_pdf6_bad_index是乙個布林array,長度為s_pdf6.plasmid,元素中存在badplasid的地方為true,其他為bad
# 由於是需要去掉子集部分,因此需要用反轉(ture-false互相轉換)
>>
> s_pdf6_10_index=np.logical_not(s_pdf6_bad_index)
>>> pdf6_10s=s_pdf6[s_pdf6_10_index]
# 重設索引
>>> pdf6_10s=pdf6_10s.reset_index()
# 提取後7個sample為train data
>>> pdf_train=pdf6_10s[(pdf6_10s.index%10)>=3]
# 1. 檢視不夠10個sample的質粒
>>
> pd.series(p6id)
.value_counts(
)# 2. 觀察最後的行不夠10個位置,檢視一下index的位置,然後擷取前面夠10個的index。此處為後170個plasmid不夠10個sample
>>
> p_goodid=
list
(pd.series(p6id)
.value_counts(
).index)[:
-170
]# 對p_goodid中的元素依次迴圈提取並加到先前矩陣後面
>>
> pdf_test = pd.dataframe(columns = pdf6.columns)
>>
> pdf_train = pd.dataframe(columns = pdf6.columns)
>>
>
for i in p_goodid:
single=pdf6[pdf6.plasmid==i]:3
,],ignore_index=
true)3
:,],ignore_index=
true
)
第二種方法適合資料不多,如果資料量太大,花費時間太久。本人測試,第一種方法30s,第二種方法花了12h。 如何通過subId來獲取phoneId
androidl中使用一張資料表來儲存sim卡資訊 telephony.db中有一張記錄sim卡資訊的表,siminfo create table siminfo id integer primary key autoincrement,icc id text not null,sim id int...
如何通過左移測試來改善CI CD
在開發周期的早期進行自動化測試可以改善質量保證並減少延遲。試應用程式過去是一項技術挑戰性的,時間緊迫的活動,計畫在應用程式發布前幾天或幾周進行。開發團隊在第11個小時之前就有了編碼的餘地,而手動完成大部分工作的測試人員別無選擇,只能花些時間給他們。結果是許多應用程式經受了不合格的測試,技術團隊被迫應...
如何通過LeetCode來進行演算法題目練習
deliberate practicing 堅持 刻意練習 練習缺陷 弱點地 方 不 舒服 不 爽 枯燥 leetcode 題 目 分類 公司歸檔 做題 時間複雜度 editor atom visual code vim pycharm intellij feedback solutions fro...