Đọc tệp xml trong gấu trúc python

Dữ liệu trong thế giới thực rất lộn xộn và chúng tôi biết điều đó. Dữ liệu đó không chỉ đòi hỏi phải làm sạch nhiều lần, mà định dạng mà chúng tôi nhận dữ liệu cũng không phù hợp để phân tích. Điều này có nghĩa là trước khi quá trình phân tích bắt đầu, dữ liệu phải trải qua một loạt các phép biến đổi để chuyển thành định dạng phù hợp — định dạng giúp dễ dàng xử lý. Điều này chủ yếu xảy ra khi dữ liệu được lấy từ web hoặc được cung cấp dưới dạng tài liệu. Tôi bắt gặp một bộ dữ liệu khá giống nhau, ở dạng các tệp XML khác nhau. Trong bài viết này, tôi trình bày các bước tôi đã thực hiện để giải mã các tệp đó và chuyển đổi chúng thành tệp CSV sẵn sàng phân tích đủ tốt để nhập vào thư viện của gấu trúc để phân tích thêm

T bài viết của anh ấy là một phần của loạt bài hoàn chỉnh về tìm kiếm bộ dữ liệu tốt. Dưới đây là tất cả các bài viết có trong loạt bài.

Phần 1. Nhận bộ dữ liệu cho các tác vụ Phân tích dữ liệu — Tìm kiếm nâng cao của Google

Phần 2. Các trang web hữu ích để tìm tập dữ liệu cho nhiệm vụ Phân tích dữ liệu

Phần 3. Tạo bộ dữ liệu hình ảnh tùy chỉnh cho các dự án Deep Learning

Phần 4. Dễ dàng nhập các bảng HTML vào Google Trang tính

Phần 5. Trích xuất dữ liệu dạng bảng từ PDF dễ dàng với Camelot

Phần 6. Trích xuất thông tin từ các tệp XML vào khung dữ liệu Pandas

Phần 7. 5 bộ dữ liệu trong Thế giới thực để trau dồi kỹ năng Phân tích dữ liệu khám phá của bạn

Động lực

Cả thế giới đang chung tay chống lại cuộc chiến COVID-19, và năm 2021 mang đến một tia hy vọng. Tất cả chúng ta đều biết về đợt tiêm chủng đang được nhiều quốc gia tiến hành, bao gồm cả đất nước của tôi là Ấn Độ, quốc gia đã bắt đầu đợt tiêm chủng lớn nhất thế giới vào ngày 16 tháng 1 năm 2021. Nhưng một loại vắc-xin sẽ có hình thức cuối cùng sau khi trải qua nhiều giai đoạn và thử nghiệm, và chỉ sau khi được coi là phù hợp, vắc-xin đó mới được gắn cờ xanh để sử dụng cho dân chúng nói chung

Tôi khám phá ClinicalTrials. gov, một cơ sở dữ liệu về các nghiên cứu lâm sàng được tài trợ bởi tư nhân và công cộng được thực hiện trên khắp thế giới. Tôi nghĩ sẽ rất thú vị và nhiều thông tin khi xem xét tất cả các thử nghiệm lâm sàng liên quan đến các nghiên cứu về COVID 19 được trình bày trên trang web

Nguồn. https. //www. các thử nghiệm lâm sàng. gov/ct2/home

Tuy nhiên, bộ dữ liệu của thử nghiệm bao gồm các tệp XML trong đó mỗi tệp XML tương ứng với một nghiên cứu. Vì vậy, không thể ngay lập tức chuyển sang phân tích. Trước tiên, dữ liệu cần ở định dạng có thể đọc được trong khung dữ liệu gấu trúc. Tôi đã tải xuống bộ dữ liệu và tải nó lên Kaggle để những người khác xem xét nó. Dữ liệu được cập nhật hàng tuần và cung cấp một số hiểu biết sâu sắc về sự phát triển của vắc-xin và thuốc COVID

nguồn. https. //www. kaggle. com/parul pandey/covid 19-clinical-trials-dataset. Hình ảnh của tác giả

Phần còn lại của bài viết sẽ xử lý việc phân tích cú pháp các tệp XML này bằng Python. Nhưng trước đó, hãy tìm hiểu sâu hơn một chút về tệp XML và các thành phần của nó

XML là gì?

Hình ảnh của tác giả

XML là viết tắt của Ngôn ngữ đánh dấu mở rộng. Đúng như tên gọi, đây là ngôn ngữ đánh dấu mã hóa tài liệu bằng cách xác định một bộ quy tắc ở cả định dạng máy đọc được và con người có thể đọc được. Ngôn ngữ xác định một bộ quy tắc được sử dụng để mã hóa tài liệu ở định dạng cụ thể. Hãy xem một ví dụ về tệp XML bên dưới

<?xml version="1.0" encoding="UTF-8"?>
<class>
<student>
<name>Negan</name>
<age>40</age>
<email>[email protected]</email>
<address>
<country>US</country>
</address>
</student>
</class>

Mọi tệp XML đều có cấu trúc cây trong đó phần tử ở trên cùng là phần tử gốc. Các phần tử con sau đó được kết nối với các phần tử gốc. nếu được trình bày trực quan, cấu trúc cây của tài liệu XML trên sẽ như thế này

Hình ảnh của tác giả
  • Phiên bản XML = “1. 0” mã hóa = “UTF-8”?.
    import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
    print(len(files))
    ------------------------------------------------
    4663
    4
  • phần tử gốc.
    import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
    print(len(files))
    ------------------------------------------------
    4663
    5
  • Các phần tử con của phần tử
    import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
    print(len(files))
    ------------------------------------------------
    4663
    6.
    import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
    print(len(files))
    ------------------------------------------------
    4663
    7,
    import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
    print(len(files))
    ------------------------------------------------
    4663
    0,
    import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
    print(len(files))
    ------------------------------------------------
    4663
    1 &
    import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
    print(len(files))
    ------------------------------------------------
    4663
    2
  • Các phần tử con.
    import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
    print(len(files))
    ------------------------------------------------
    4663
    3

API ElementTree XML

Bây giờ hãy xem cách chúng ta có thể phân tích cú pháp một tệp XML đã cho và trích xuất dữ liệu của nó theo cách có cấu trúc. Trong bài viết này, chúng ta sẽ xem xét

import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
print(len(files))
------------------------------------------------
4663
4 một thư viện Python tích hợp để thao tác với các tệp XML. Chúng tôi đã được giới thiệu về bộ dữ liệu. Đây là một cái nhìn thoáng qua về giao diện của nó trên Kaggle

Một tệp XML duy nhất từ ​​tập dữ liệu. Hình ảnh của tác giả

Bộ dữ liệu bao gồm vài nghìn tệp XML. Mỗi tệp XML tương ứng với một nghiên cứu. Tên tệp là số NCT, là mã định danh duy nhất của một cuộc khảo sát trong kho lưu trữ ClinicalTrials

Phân tích tệp XML

Hãy bắt đầu bằng cách nhập các thư viện cần thiết và xem số lượng tệp trong tập dữ liệu

import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
print(len(files))
------------------------------------------------
4663

Có 4663 tệp riêng lẻ trong tập dữ liệu. Con số trên tương ứng với số lượng tệp XML trong dữ liệu, bao gồm cả số lượng báo cáo thử nghiệm lâm sàng. Bây giờ chúng ta hãy xem tệp XML đầu tiên và in ra các giá trị để hiểu cách cây được cấu trúc

# Reading the first filefile_path_file1 = os.path.join(path, list_of_files[0])
tree = ElementTree.parse(file_path_file1)
root = tree.getroot()
print(root.tag, root.attrib)
--------------------------------------------------------
clinical_study {'rank': '4406'}

ElementTree đại diện cho toàn bộ tài liệu XML dưới dạng cây, trong khi Element đại diện cho một nút duy nhất trong cây này. Mỗi phần của cây (bao gồm cả gốc) có một thẻ mô tả phần tử. Ngoài ra, các phần tử cũng có thể chứa các thuộc tính, như tên gợi ý, là các mô tả bổ sung. Nếu bạn xem kỹ ví dụ XML được cung cấp ở trên — nghiên cứu lâm sàng là yếu tố gốc và có thuộc tính xếp hạng bằng 4406

Bây giờ chúng ta có thể xem xét một số phần tử con khác bằng cách sử dụng vòng lặp for đơn giản

________số 8

Tất cả các yếu tố trên dường như là các phần khác nhau của báo cáo. Người ta cũng có thể xem toàn bộ tài liệu và tất cả các thuộc tính hoặc cấp độ trong cây thông qua mã bên dưới

print(ElementTree.tostring(root, encoding='utf8').decode('utf8'))

Sau đó, chúng tôi có thể chọn bao gồm tất cả hoặc một vài thành phần được chọn trong dữ liệu được định dạng của mình. Các phần tử này sẽ xuất hiện dưới dạng các cột riêng biệt trong khung dữ liệu. Bây giờ chúng ta sẽ khởi tạo hai khung dữ liệu trống, khung này sẽ được điền bằng các phần tử trên. Chúng tôi sẽ bao gồm

import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
print(len(files))
------------------------------------------------
4663
5
import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
print(len(files))
------------------------------------------------
4663
6 và
import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
print(len(files))
------------------------------------------------
4663
7 trong bộ dữ liệu của chúng tôi

Điều này mang lại cho chúng ta một khung dữ liệu được định dạng độc đáo, giống như những khung dữ liệu mà chúng ta thường thấy. Bạn cũng có thể lưu nó dưới dạng tệp CSV để tham khảo sau này

import xml.etree.ElementTree as ETpath = '../input/covid19-clinical-trials-dataset/COVID-19 CLinical trials studies/'files = os.listdir(path)
print(len(files))
------------------------------------------------
4663
3

khung dữ liệu đã xử lý. Hình ảnh của tác giả

Cái gì tiếp theo

Bây giờ bạn đã có dữ liệu ở định dạng mong muốn, bạn có thể phân tích dữ liệu đó để tìm ra các chi tiết cụ thể như

  • tình trạng chung của các nghiên cứu là gì
  • Các loại nghiên cứu khác nhau
  • Dòng thời gian của các thử nghiệm
  • Số người đăng ký vào các nghiên cứu khác nhau và nhiều câu hỏi khác như vậy

Bạn cũng có thể tạo bảng điều khiển bằng các công cụ bạn chọn để dễ dàng xem tất cả các chi tiết cùng một lúc. Tôi chỉ trích xuất một vài thuộc tính trong ví dụ trên, nhưng có rất nhiều thuộc tính trong báo cáo. Hãy tiếp tục và thử nghiệm với những người khác, để hiểu thêm về dữ liệu. Giống như nó được đề cập. Bộ dữ liệu có sẵn để sử dụng công khai và nó đang chờ được khám phá thêm

Gấu trúc có thể đọc tệp XML không?

Thư viện phân tích dữ liệu Pandas cung cấp chức năng đọc/ghi dữ liệu cho hầu hết các loại tệp. Ví dụ: nó bao gồm read_csv() và to_csv() để tương tác với tệp CSV. Tuy nhiên, Pandas không bao gồm bất kỳ phương thức nào để đọc và ghi tệp XML .

Chúng ta có thể chuyển đổi XML thành Dataframe bằng Python không?

xml” bắt đầu từ gốc của cây, cụ thể là phần tử chúng ta có thể lặp qua từng nút của cây, điều đó có nghĩa là chúng ta sẽ lấy từng phần tử sinh viên và lấy thuộc tính name và tất cả các phần tử con của nó để xây dựng khung dữ liệu của chúng ta.

Cách tốt nhất để đọc một tệp XML là gì?

Tệp XML có thể được mở trong trình duyệt như IE hoặc Chrome, với bất kỳ trình soạn thảo văn bản nào như Notepad hoặc MS-Word . Ngay cả Excel cũng có thể được sử dụng để mở các tệp XML. Chúng tôi cũng có trình chỉnh sửa trực tuyến để mở tệp XML.