【问题标题】:how to cluster multiple csv files in a file directory如何将多个csv文件聚集在一个文件目录中
【发布时间】:2020-08-02 15:39:15
【问题描述】:

我有多个数据结构相同的 csv 文件

我想一次对每个 csv 文件进行聚类

import os
import pandas as pd
import numpy as np
from sklearn import metrics
import glob
df = pd.read_csv('File 000rejoice-19.csv')
can=df.drop(columns =['pat'])
from sklearn.cluster import DBSCAN
dbscan=DBSCAN(eps=3,min_samples=4)
X = can.iloc[:, [1,2,3,4]].values
X.shape
model=dbscan.fit(X)
labels=model.labels_
sample_cores=np.zeros_like(labels,dtype=bool)
sample_cores[dbscan.core_sample_indices_]=True
n_clusters=len(set(labels))- (1 if -1 in labels else 0)
n_clusters

此代码仅适用于一个 csv 文件,我想一次聚集多个 csv 文件

这是一个 jupyter notebook 程序

【问题讨论】:

  • 在迭代每个文件并单独针对文件运行现有脚本时是否有任何问题?您是要合并所有 csv 文件并运行一次 DBSCAN 还是在每个单独的文件上运行它?
  • 我不知道如何单独迭代每个文件。我想在每个单独的文件上运行它。

标签: python csv machine-learning cluster-analysis dbscan


【解决方案1】:

您可以迭代 csv 文件所在的文件夹: 我在这里使用本地文件夹.

from os import listdir
from sklearn.cluster import DBSCAN

for file in listdir('.'):
  pd.read_csv(file)
  can=df.drop(columns =['pat'])
  dbscan=DBSCAN(eps=3,min_samples=4)
  X = can.iloc[:, [1,2,3,4]].values
  X.shape
  model=dbscan.fit(X)
  labels=model.labels_
  sample_cores=np.zeros_like(labels,dtype=bool)
  sample_cores[dbscan.core_sample_indices_]=True
  n_clusters=len(set(labels))- (1 if -1 in labels else 0)
  print(file, n_clusters)

【讨论】:

    【解决方案2】:

    我认为这里实际上有两个步骤:

    1. read multi files into DataFrame
    2. use cluster to deal with DataFrame in step1
    

    由于@denyce 已经举了一个本地的例子,我可以举一个使用 AWS S3 的 step1 的例子

    import boto3
    
    def f(bucket, key, region_name, access_mode):
        s3_resource = boto3.resource('s3', region_name=region_name)
        s3_bucket = s3_resource.Bucket(bucket)
    
        df_list = []
        s3_objs = s3_bucket.objects.filter(Prefix=key)
        for s3_prefix_obj in s3_objs:
            s3_prefix_df = s3_prefix_obj.get()['Body'].read()
            # some medium work
            df_list.append(s3_prefix_df)
    
        # combine data together
        df = pd.concat(s3_prefix_df_list)
    
        # step2, do cluster as you described, now df contains all files in s3 folder
        can=df.drop(columns =['pat'])
        dbscan=DBSCAN(eps=3,min_samples=4)
        X = can.iloc[:, [1,2,3,4]].values
        ....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-17
      • 1970-01-01
      • 2017-04-24
      • 2019-10-11
      • 2022-01-02
      • 2021-06-27
      • 2020-07-10
      相关资源
      最近更新 更多