iT邦幫忙

0

目前在做python 機器學習的project 有plan 但不確定要怎麼操作
主要是根據使用者歷程做出結果預測
(可簡單區分為 0 或 1) (可能走time series 或 pattern 判斷)
每個使用者有各自的csv file
各使用者csv file 內 row 數量 不一 但column數量 一樣

預期會是有兩個資料夾
資料夾 - 0
資料夾 - 1
資料夾內分別會有將近幾千的個csv file
需要讀取兩邊資料夾內的檔案
(這邊比較不懂 要怎樣去兩個資料夾讀取作為input 等於說資料夾本身也是label)
然後做ML
想請問是否有類似的demo code 可供參考呢?

2 個回答

3
I code so I am
iT邦研究生 4 級 ‧ 2020-08-12 09:40:07
最佳解答

以資料夾為Label,例如A資料夾代表Label 0 B資料夾代表Label 1:

import os
import pandas as pd

CSV_DIRECTORY = r'.\csv_data'
def load_data():
    X = []
    y = []
    for dirpath, dirnames, filenames in os.walk(CSV_DIRECTORY):
        for filename in [f for f in filenames if f.endswith(".csv")]:
            #print(dirpath)
            y.append(dirpath.split('\\')[-1])
            X.append(dirpath + '\\' + filename)
            
    return X, y
    
X, y = load_data()
print(y)
print(X)
看更多先前的回應...收起先前的回應...

請問這兩行用意是?

y.append(dirpath.split('\\')[-1])
X.append(dirpath + '\\' + filename)

這樣x 就是label0的所有資料 y 就是label1的了嗎?
謝謝!!

果然行家一出手,便知有沒有!

#在列表末尾添加以檔名路徑為新的對象
y.append(dirpath.split('\\')[-1])
X.append(dirpath + '\\' + filename)

y.append(dirpath.split('\')[-1]) 取得最下一層的目錄(A or B),可以再作轉換為 0 or 1。

第二行只是存入檔案完整路徑,改成你要處理的方式即可,例如樓上的行家,df = pd.read_csv(file_name)。

感謝 微甜的酸 的謬讚。

謝謝~

1
微甜的酸
iT邦新手 4 級 ‧ 2020-08-11 20:38:15

沒打完~要睡覺惹QAQ,自己的Project自己+u,扛的起東西的男人才是真男人。
小弟只摸過相對簡單的keras,不知到大大你想怎麼搞,提供我的拙見供你參考。
!很可能是雷,請小心服用!

import os #處理文件和目錄
import pandas as pd #思路是建立起DataFrame
#import numpy as np 把所有的DataFrame都reshape成一樣
# from import你要的keras,不然檔案真D大

path = "./" #路徑位置"./"為相對路徑

i = 0
files = os.walk(path) #遞迴印出資料夾中所有目錄及檔名
for root, folder, file in files: #把他接起來
    i = i+1
    print("\n第",i,"次迴圈")
    print("路徑:", root)
    print("子目錄:", folder)
    print("檔案:", file)
    
    for file_name in file:
        if name.split(".", 1)[-1] == "csv": #判斷附檔名 你也可以用正規表達式
            print("開啟",file_name)
            df = pd.read_csv(file_name) #將他轉換為DataFrame,你也可以改為添加進
#處理資料(reshape在這裡OuO)
#不知道你打算怎麼切
#建立模型

謝謝!! 原來這樣就行了~
但我比較不懂的部分是
我是兩個不同資料夾
假設A資料夾代表Label 0 B資料夾代表Label 1 這要怎麼弄成input
且ML能知道A資料夾的檔案全部都是Label 0
, B資料夾內的檔案都是Label 1
(csv 內的column並沒有另外放0 or 1 的欄位)

感謝大大(感覺挺基礎的問題 但不知用什麼關鍵字查 都查不到)

建議Tags加一個"python"會有更多人看到你的問題
我不是大大 <=> 我不會
我的想法是:
在開啟資料那邊加一個with open將root(就是上面宣告的檔案路徑、根目錄)寫入,也就可以成為一個特徵值,但除非程式永遠和兩個資料夾路徑的相對關西相同,否則無法轉移或攜帶。
感覺挺廢的QwQ

我要發表回答

立即登入回答