Как кластеризовать несколько CSV-файлов в файловой директории - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть несколько CSV-файлов с одинаковой структурой данных

enter image description here

Я хочу кластеризовать каждый 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 enter image description here

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Я думаю, что на самом деле здесь есть два шага:

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

Поскольку @denyce дал пример для локального, я мог бы привести пример для шага 1 с AWS S3

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
    ....
0 голосов
/ 20 апреля 2020

Вы можете перебрать папку, в которой находятся ваши 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)
...