Я пытаюсь извлечь параметры походки из файла JSON на сетевом диске. Код, который я использую, упомянут ниже, но каждый раз, когда я его запускаю, я получаю пустой фрейм данных. Какие изменения можно внести для запуска кода?
extract_data_from_json используется для чтения данных JSON из файла и возврата их в согласованном формате.
calculate_step_length_and_width используется для извлечения длины шага и ширины шага из словаря (записи).
gaitsession_etl1 используется для выполнения операций ETL (извлечение, преобразование, загрузка) на данные показателей походки.
import os
import json
import pandas as pd
import numpy as np
def extract_data_from_json(filename):
"""Extract data from a JSON file."""
try:
with open(filename, 'r') as f:
data = json.load(f) # Load JSON data
# Debug: Check if data is a dictionary or list
if isinstance(data, dict):
return [data] # Wrap dictionary in a list for consistency
elif isinstance(data, list):
return data # Return list directly if JSON data is a list
else:
print(f"Unexpected JSON data type in file {filename}: {type(data)}")
return []
except json.JSONDecodeError as e:
print(f"Error decoding JSON file {filename}: {e}")
except Exception as e:
print(f"An unexpected error occurred with file {filename}: {e}")
return []
def calculate_step_length_and_width(entry):
"""Calculate step length and width from entry data."""
# Placeholder logic for calculation; replace with actual logic
step_length = entry.get('step_length', np.nan)
step_width = entry.get('step_width', np.nan)
return step_length, step_width
def gaitsession_etl1():
# Load session data
df = pd.read_parquet('Z:\\dataframes\\df_session.parquet.gzip')
# Select 'Laps Walking Application' sessions
df_s = df[df['testName'].str.contains('Laps Walking Application')]
if df_s.empty:
print("No sessions found with 'Laps Walking Application'.")
return
patient_list = df_s['patient'].tolist()
identifier_list = df_s['identifier'].tolist()
results = []
for i in range(len(patient_list)):
path = f'Z:/raw_data/COVID Study FAU/patients/{patient_list}/sessions/{identifier_list}/files'
name = f'{identifier_list}_gaitmetrics.json'
filename = os.path.join(path, name)
# Debug prints
print(f"Debug - Constructed path: {path}")
print(f"Debug - Constructed filename: {filename}")
if os.path.isfile(filename):
data = extract_data_from_json(filename)
if not data:
print(f"No data found in file {filename}")
for entry in data:
if isinstance(entry, dict):
step_length, step_width = calculate_step_length_and_width(entry)
results.append({
'patient': patient_list,
'identifier': identifier_list,
'timestamp': entry.get('Timestamp', 'NaN'),
'step_length': step_length,
'step_width': step_width
})
else:
print(f"Expected dictionary but got {type(entry)} in file {filename}")
else:
print(f"File not found: {filename}")
data_gait = pd.DataFrame(results)
if data_gait.empty:
print("No data extracted. DataFrame is empty.")
else:
print(data_gait)
# Run the ETL function
gaitsession_etl1()
Проверил вышеописанное и ожидал кадр данных с параметрами.
Пример файла JSON приведен ниже:
{
"Steps": [
{
"AverageLeaning": "0",
"stepLengthLeft": "0",
"stepLengthRight": "0",
"totalStepsLeft": "0",
"totalStepsRight": "0",
"totalSteps": "0",
"averageSpeed": "0",
"totalDistance": "0",
"totalDistanceLeft": "0",
"totalDistanceRight": "0",
"swingStanceRatio": "0",
"swingStanceRatioLeft": "0",
"swingStanceRatioRight": "0",
"averageCadence": "0",
"averageCadenceL": "0",
"averageCadenceR": "0",
"averageStepLengthL": "0",
"averageStepLengthR": "0",
"averageStepLength": "0",
"singleDoubleRatio": "0",
"singleDoubleRatioLeft": "0",
"singleDoubleRatioRight": "0",
"FootSide": "1",
"nombreFreezing": "0",
"Arm": "0",
"ArmAverage": "0",
"Shoulder": "0",
"ShoulderAverage": "0",
"StepHeightL": "1700.4410231740912",
"StepHeightR": "1161.1989661045372",
"ShufflingPercentageL": "NaN",
"ShufflingPercentageR": "NaN",
"ShufflingPercentage": "NaN",
"Timestamp": "00:01:52.31"
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... parameters