Nếu bạn đang làm bất cứ điều gì liên quan đến dữ liệu cho dù đó là Kỹ thuật dữ liệu, Phân tích dữ liệu hay thậm chí là Khoa học dữ liệu, chắc chắn bạn sẽ bắt gặp JSON
JSON [Ký hiệu đối tượng JavaScript] là một trong những định dạng dữ liệu được sử dụng nhiều nhất để trao đổi dữ liệu qua web. Cơ sở dữ liệu dựa trên NoSQL như MongoDB lưu trữ dữ liệu ở định dạng này. Mặc dù định dạng này hoạt động tốt để lưu trữ dữ liệu nhưng nó cần được chuyển đổi thành dạng bảng để phân tích thêm
Trong câu chuyện này, chúng ta sẽ thấy việc phân tích cú pháp dữ liệu JSON và chuyển đổi nó thành dạng bảng dễ dàng như thế nào. Bạn có thể tải xuống dữ liệu mẫu từ kho GitHub được đề cập bên dưới. Ngoài ra, hãy xem sổ ghi chép để biết thêm chi tiết về dữ liệu và API được sử dụng
ankitgoel1602/data-khoa học
Bạn không thể thực hiện hành động đó vào lúc này. Bạn đã đăng nhập bằng tab hoặc cửa sổ khác. Bạn đã đăng xuất trong một tab khác hoặc…
github. com
Chi tiết dữ liệu
Tôi sẽ sử dụng dữ liệu mà tôi đã tạo khi xử lý sự cố phân cụm Máy học. Không cần lo lắng nếu dữ liệu này không có ý nghĩa vì nó chỉ được sử dụng cho mục đích demo. Tôi sẽ sử dụng hai JSON khác nhau-
- JSON đơn giản không có danh sách/từ điển lồng nhau
Đây là JSON đã được làm phẳng và yêu cầu xử lý tối thiểu
Sample Record:
{
"Scaler": "Standard",
"family_min_samples_percentage": 5,
"original_number_of_clusters": 4,
"eps_value": 0.1,
"min_samples": 5,
"number_of_clusters": 9,
"number_of_noise_samples": 72,
"adjusted_rand_index": 0.001,
"adjusted_mutual_info_score": 0.009,
"homogeneity_score": 0.330,
"completeness_score": 0.999,
"v_measure_score": 0.497,
"fowlkes_mallows_score": 0.0282,
"silhouette_coefficient": 0.653,
"calinski_harabasz_score": 10.81,
"davies_bouldin_score": 1.70
}
2. JSON với danh sách/từ điển lồng nhau
Điều này có vẻ hơi phức tạp và nói chung, sẽ yêu cầu bạn viết một kịch bản để làm phẳng. Sau này, chúng ta sẽ xem cách nó có thể được chuyển đổi thành DataFrame chỉ với 1 dòng mã
Sample Record:
{
'Scaler': 'Standard',
'family_min_samples_percentage': 5,
'original_number_of_clusters': 4,
'Results':
[
{
'eps_value': 0.1,
'min_samples': 5,
'number_of_clusters': 9,
'number_of_noise_samples': 72,
'scores':
{
'adjusted_rand_index': 0.001,
'adjusted_mutual_info_score': 0.009,
'homogeneity_score': 0.331,
'completeness_score': 0.999,
'v_measure_score': 0.497,
'fowlkes_mallows_score': 0.028,
'silhouette_coefficient': 0.653,
'calinski_harabasz_score': 10.81,
'davies_bouldin_score': 1.70
}
},
{
'eps_value': 0.1,
'min_samples': 10,
'number_of_clusters': 6,
'number_of_noise_samples': 89,
'scores':
{
'adjusted_rand_index': 0.001,
'adjusted_mutual_info_score': 0.008,
'homogeneity_score': 0.294,
'completeness_score': 0.999,
'v_measure_score': 0.455,
'fowlkes_mallows_score': 0.026,
'silhouette_coefficient': 0.561,
'calinski_harabasz_score': 12.528,
'davies_bouldin_score': 1.760
}
}
]
}
Gấu trúc read_json[]
API này từ Pandas giúp đọc dữ liệu JSON và hoạt động hiệu quả đối với dữ liệu đã được làm phẳng như chúng ta có trong Ví dụ 1. Bạn có thể tải xuống JSON từ đây
# Reading JSON
pd.read_json['level_1.json']
Chỉ cần đọc JSON đã chuyển đổi nó thành một bảng phẳng bên dưới
Làm phẳng dữ liệu bằng cách sử dụng read_json[] của Tác giả
Nó không hoạt động tốt khi dữ liệu JSON ở dạng bán cấu trúc. e. chứa danh sách lồng nhau hoặc từ điển như chúng ta có trong Ví dụ 2
# Example 2 JSON
pd.read_json['multiple_levels.json']
Sau khi đọc JSON này, chúng ta có thể thấy bên dưới danh sách lồng nhau của chúng ta được đưa vào một cột duy nhất 'Kết quả'. Trong phần tiếp theo, chúng ta sẽ xem cách chúng ta có thể làm phẳng dữ liệu này
Nguồn. Hình ảnh của tác giả
Gấu trúc json_normalize[]
API này được thiết kế chủ yếu để chuyển đổi dữ liệu JSON bán cấu trúc thành bảng phẳng hoặc DataFrame. Bạn có thể tải xuống ví dụ JSON từ đây
# load data using Python JSON module
with open['multiple_levels.json','r'] as f:
data = json.loads[f.read[]]# Normalizing data
multiple_level_data = pd.json_normalize[data, record_path =['Results'], meta =['original_number_of_clusters','Scaler','family_min_samples_percentage'], meta_prefix='config_params_', record_prefix='dbscan_']# Saving to CSV format
multiple_level_data.to_csv['multiplelevel_normalized_data.csv', index=False]
Làm phẳng dữ liệu bằng cách sử dụng json_normalize[] của Tác giả
Bây giờ, hãy hiểu 1 dòng ma thuật mà tôi đã sử dụng ở đây để chuyển đổi JSON sang bảng phẳng. API này cung cấp các tham số khác nhau và bạn có thể đọc thêm về chúng tại đây. Ở đây chúng tôi đã sử dụng-
- record_path
- bản ghi_prefix
- meta
- meta_prefix
Hãy đi qua từng cái một
record_path
Đây là đường dẫn đến mảng hoặc danh sách lồng nhau mà chúng tôi muốn làm phẳng. Trong ví dụ của chúng tôi, đó là 'Kết quả' có nhiều từ điển lồng nhau chứa siêu tham số thuật toán và điểm số
bản ghi_prefix
Theo mặc định, json_normalize sẽ nối thêm tiền tố [chuỗi] cho các từ điển lồng nhau dựa trên dữ liệu gốc như trong ví dụ của chúng tôi davies_bouldin_score được chuyển đổi thành điểm số. davies_bouldin_score. Đối với danh sách lồng nhau, chúng ta có thể sử dụng record_prefix để nối vào dữ liệu đã được làm phẳng. Trong ví dụ của chúng tôi, mỗi giá trị trong danh sách 'Kết quả' có liên quan đến thuật toán DBSCAN và do đó chúng tôi có thể nối thêm giá trị tương tự[dbscan_]. Điều này sẽ chuyển đổi điểm số. davies_bouldin_score đến dbscan_scores. davies_bouldin_score
meta
Tham số này giúp thêm siêu dữ liệu với mỗi bản ghi vào bảng kết quả. Ở đây, siêu dữ liệu sẽ nằm ngoài record_path i. e. Công cụ chia tỷ lệ, original_number_of_clusters hoặc family_min_samples_percentage
meta_prefix
Tương tự như record_prefix, meta_prefix sẽ nối chuỗi vào siêu dữ liệu được xác định là một phần của 'meta'. Trong ví dụ của chúng tôi, tất cả siêu dữ liệu có liên quan đến tham số cấu hình cho vấn đề ML của chúng tôi và do đó chúng tôi đã thêm 'config_params_' vào từng siêu dữ liệu
Tôi hy vọng bài viết này sẽ hữu ích trong lần tiếp theo bạn xử lý dữ liệu JSON. Tôi đã từng viết các tập lệnh python để làm phẳng dữ liệu hoặc sử dụng các gói khác nhau mà tôi sẽ mất cả ngày để tìm ra mọi thứ và bây giờ chỉ cần 10 giây. Nếu bạn quan tâm đến Khoa học dữ liệu hoặc muốn tìm hiểu về một số thư viện python thú vị, hãy xem blog khác của tôi- Bắt đầu hành trình Khoa học dữ liệu của bạn ngay hôm nay