Python nhiều tệp

Bây giờ chúng tôi có hầu hết mọi thứ chúng tôi cần để xử lý tất cả các tệp dữ liệu của mình. Điều duy nhất còn thiếu là một thư viện có cái tên khá khó chịu

import glob

Thư viện

print(glob.glob('inflammation*.csv'))
3 chứa một hàm, còn được gọi là
print(glob.glob('inflammation*.csv'))
3, tìm các tệp và thư mục có tên khớp với một mẫu. Chúng tôi cung cấp các mẫu đó dưới dạng chuỗi. ký tự
print(glob.glob('inflammation*.csv'))
5 khớp với 0 hoặc nhiều ký tự, trong khi
print(glob.glob('inflammation*.csv'))
6 khớp với bất kỳ ký tự nào. Chúng tôi có thể sử dụng điều này để lấy tên của tất cả các tệp CSV trong thư mục hiện tại

print(glob.glob('inflammation*.csv'))

['inflammation-05.csv', 'inflammation-11.csv', 'inflammation-12.csv', 'inflammation-08.csv',
'inflammation-03.csv', 'inflammation-06.csv', 'inflammation-09.csv', 'inflammation-07.csv',
'inflammation-10.csv', 'inflammation-02.csv', 'inflammation-04.csv', 'inflammation-01.csv']

Như những ví dụ này cho thấy, kết quả của

print(glob.glob('inflammation*.csv'))
7 là một danh sách các đường dẫn tệp và thư mục theo thứ tự tùy ý. Điều này có nghĩa là chúng ta có thể lặp lại nó để làm điều gì đó với từng tên tệp. Trong trường hợp của chúng tôi, “điều gì đó” mà chúng tôi muốn làm là tạo một tập hợp các ô cho từng tệp trong tập dữ liệu về tình trạng viêm nhiễm của chúng tôi. Nếu chúng ta muốn bắt đầu bằng cách chỉ phân tích ba tệp đầu tiên theo thứ tự bảng chữ cái, chúng ta có thể sử dụng hàm tích hợp sẵn
print(glob.glob('inflammation*.csv'))
8 để tạo danh sách được sắp xếp mới từ đầu ra
print(glob.glob('inflammation*.csv'))
7

import numpy
import matplotlib.pyplot

filenames = sorted(glob.glob('inflammation*.csv'))
filenames = filenames[0:3]
for f in filenames:
    print(f)

    data = numpy.loadtxt(fname=f, delimiter=',')

    fig = matplotlib.pyplot.figure(figsize=(10.0, 3.0))

    axes1 = fig.add_subplot(1, 3, 1)
    axes2 = fig.add_subplot(1, 3, 2)
    axes3 = fig.add_subplot(1, 3, 3)

    axes1.set_ylabel('average')
    axes1.plot(numpy.mean(data, axis=0))

    axes2.set_ylabel('max')
    axes2.plot(numpy.max(data, axis=0))

    axes3.set_ylabel('min')
    axes3.plot(numpy.min(data, axis=0))

    fig.tight_layout()
    matplotlib.pyplot.show()

inflammation-01.csv

Python nhiều tệp

inflammation-02.csv

Python nhiều tệp

inflammation-03.csv

Python nhiều tệp

Chắc chắn rồi, giá trị cực đại của hai bộ dữ liệu đầu tiên hiển thị chính xác đoạn đường nối giống như đầu tiên và giá trị cực tiểu của chúng hiển thị cấu trúc cầu thang giống nhau;

Vẽ sự khác biệt

Vẽ sự khác biệt giữa giá trị trung bình của tập dữ liệu đầu tiên và giá trị trung bình của tập dữ liệu thứ hai, i. e. , sự khác biệt giữa ô ngoài cùng bên trái của hai hình đầu tiên

Giải pháp

import glob
import numpy
import matplotlib.pyplot

filenames = sorted(glob.glob('inflammation*.csv'))

data0 = numpy.loadtxt(fname=filenames[0], delimiter=',')
data1 = numpy.loadtxt(fname=filenames[1], delimiter=',')

fig = matplotlib.pyplot.figure(figsize=(10.0, 3.0))

matplotlib.pyplot.ylabel('Difference in average')
matplotlib.pyplot.plot(data0.mean(axis=0) - data1.mean(axis=0))

fig.tight_layout()
matplotlib.pyplot.show()

Tạo thống kê tổng hợp

Sử dụng từng tệp một lần để tạo tập dữ liệu chứa các giá trị trung bình cho tất cả bệnh nhân

filenames = glob.glob('inflammation*.csv')
composite_data = numpy.zeros((60,40))
for f in filenames:
    # sum each new file's data into composite_data as it's read
    #
# and then divide the composite_data by number of samples
composite_data /= len(filenames)

Sau đó, sử dụng pyplot để tạo trung bình, tối đa và tối thiểu cho tất cả bệnh nhân

Giải pháp

import glob
import numpy
import matplotlib.pyplot

filenames = glob.glob('inflammation*.csv')
composite_data = numpy.zeros((60,40))

for f in filenames:
    data = numpy.loadtxt(fname = f, delimiter=',')
    composite_data += data

composite_data/=len(filenames)

fig = matplotlib.pyplot.figure(figsize=(10.0, 3.0))

axes1 = fig.add_subplot(1, 3, 1)
axes2 = fig.add_subplot(1, 3, 2)
axes3 = fig.add_subplot(1, 3, 3)

axes1.set_ylabel('average')
axes1.plot(numpy.mean(composite_data, axis=0))

axes2.set_ylabel('max')
axes2.plot(numpy.max(composite_data, axis=0))

axes3.set_ylabel('min')
axes3.plot(numpy.min(composite_data, axis=0))

fig.tight_layout()

matplotlib.pyplot.show()

Xử lý tệp nhỏ

Sửa đổi chương trình này để nó chỉ xử lý các tệp có ít hơn 50 bản ghi

print(glob.glob('inflammation*.csv'))
0

Giải pháp

print(glob.glob('inflammation*.csv'))
1

Những điểm chính

  • Sử dụng vòng lặp

    print(glob.glob('inflammation*.csv'))
    
    2 để xử lý các tệp được cung cấp danh sách tên của chúng

  • Sử dụng

    ['inflammation-05.csv', 'inflammation-11.csv', 'inflammation-12.csv', 'inflammation-08.csv',
    'inflammation-03.csv', 'inflammation-06.csv', 'inflammation-09.csv', 'inflammation-07.csv',
    'inflammation-10.csv', 'inflammation-02.csv', 'inflammation-04.csv', 'inflammation-01.csv']
    
    1 để tạo danh sách các tệp có tên khớp với mẫu

  • Sử dụng

    print(glob.glob('inflammation*.csv'))
    
    5 trong một mẫu để khớp với 0 hoặc nhiều ký tự và
    print(glob.glob('inflammation*.csv'))
    
    6 để khớp với bất kỳ ký tự đơn nào