私は、多くのクラスターとその遺伝子に関する情報を含む大きな辞書を持っています。 「cdhitclusters」に関するデータの一部にアクセスしようとしています。コードのこのセクションは完璧に機能し、私がやりたいことを正確に実行します(クラスターごとの rep_gene の数をカウントします)。辞書内のすべてのクラスターに対してこれを行うための for ループの書き方がわかりません。
clus1 = (gene_clusters.get("cluster-1"))
cdhit1 = (clus1.get("cdhitclusters"))
rep1 = pd.DataFrame(cdhit1)
print(len(rep1.rep_gene))
辞書のセクションは次のとおりです。
{
'cluster-1': {
'BGCid': '-',
'cdhitclusters': [
{
'genes': { 'AT1G24070': 100.0 },
'rep_gene': 'AT1G24070'
},
{
'genes': { 'AT1G24100': 100.0 },
'rep_gene': 'AT1G24100'
},
{
'genes': {
'AT1G24040': 100.0,
'AT1G2404_1': 100.0,
'AT1G2404_2': 100.0
},
'rep_gene': 'AT1G24040'
},
{
'genes': {
'AT1G24020': 100.0,
'AT1G2402_1': 100.0
},
'rep_gene': 'AT1G24020'
},
{
'genes': { 'AT1G24010': 100.0 },
'rep_gene': 'AT1G24010'
},
{
'genes': { 'AT1G24000': 100.0 },
'rep_gene': 'AT1G24000'
}
]
...
クラスターが 45 個あります。すべてのクラスターに対して上記のコードと同じ処理を実行するループを作成するにはどうすればよいですか?
より大きなデータ フレームに追加できるデータフレームに出力したいと考えています。これは私が使用しているコードですが、ループ内の最初のクラスターの CDhit のみを計算します。私の何が間違っているのでしょうか?
for clus in gene_clusters.values():
cdhit = (clus.get("cdhitclusters"))
rep = pd.DataFrame(cdhit)
replen = rep.iloc[:,0]
replen1 = len(rep.rep_gene)
list = [replen1]
replen2 = pd.DataFrame(list, columns=['CDhits'])
replen2 = replen2.CDhits
[gene_clusters[cluster]["cdhitclusters"] の hcluster は、gene_clusters] のクラスターに対して使用できますか?
– Rfroes87
2020 年 9 月 4 日 20:04
------------------------
キーを使用していないようなので、辞書のvalues()を反復処理するだけで済みます:
for clus in gene_clusters.values():
cdhit = (clus.get("cdhitclusters"))
rep = pd.DataFrame(cdhit)
print(len(rep.rep_gene))
------------------------
このようなもの
for cluster_name, cluster_data in data.items():
print(f"Cluster Name: {cluster_name}")
print(f"BGCid: {cluster_data['BGCid']}")
for cdhitcluster in cluster_data['cdhitclusters']:
print("CD-Hit Cluster:")
for gene, percentage in cdhitcluster['genes'].items():
print(f"Gene: {gene}, Percentage: {percentage}")
------------------------
この場合、簡単な方法は次のようになると思います。
for cluster in gene_clusters.keys():
#your code
あなたが提供した辞書のセクションを試してみたところ、gene_clusters.keys() はまさにあなたが望んでいたもの、つまりクラスターのリストを生成しました。