JSON في علم البيانات
كيفية استخدام JSON في علم البيانات وتحليل البيانات. أمثلة عملية مع Python وPandas.
Big JSON Team
• Technical WriterExpert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.
# JSON في علم البيانات
JSON هو تنسيق شائع في علم البيانات لتخزين ونقل البيانات المنظمة.
لماذا JSON في علم البيانات؟
الفوائد
- مرن - يدعم بنى معقدة
- شائع - تستخدمه معظم APIs
- قابل للقراءة - سهل الفهم
- متداخل - يدعم البيانات الهرمية
- متوافق - مع جميع الأدوات
JSON مع Pandas
قراءة JSON
import pandas as pd
# من ملف
df = pd.read_json('data.json')
# من نص
json_string = '[{"name": "أحمد", "age": 30}]'
df = pd.read_json(json_string)
# من URL
url = 'https://api.example.com/data'
df = pd.read_json(url)
print(df.head())
كتابة JSON
import pandas as pd
# إنشاء DataFrame
df = pd.DataFrame({
'الاسم': ['أحمد', 'فاطمة', 'محمد'],
'العمر': [30, 25, 35],
'المدينة': ['الرياض', 'جدة', 'الدمام']
})
# حفظ كـ JSON
df.to_json('output.json', orient='records', force_ascii=False)
# أو كنص
json_str = df.to_json(orient='records', force_ascii=False)
print(json_str)
توجهات JSON المختلفة
import pandas as pd
df = pd.DataFrame({
'الاسم': ['أحمد', 'فاطمة'],
'العمر': [30, 25]
})
# records (افتراضي)
# [{"الاسم":"أحمد","العمر":30}, {...}]
records = df.to_json(orient='records', force_ascii=False)
# columns
# {"الاسم":{"0":"أحمد","1":"فاطمة"}, ...}
columns = df.to_json(orient='columns', force_ascii=False)
# index
# {"0":{"الاسم":"أحمد","العمر":30}, ...}
index = df.to_json(orient='index', force_ascii=False)
# values
# [["أحمد",30], ["فاطمة",25]]
values = df.to_json(orient='values', force_ascii=False)
# table
# {"schema":{...}, "data":[...]}
table = df.to_json(orient='table', force_ascii=False)
معالجة JSON متداخل
تسطيح البيانات
import pandas as pd
from pandas import json_normalize
# JSON متداخل
data = [
{
'الاسم': 'أحمد',
'العمر': 30,
'العنوان': {
'المدينة': 'الرياض',
'الرمز': '12345'
}
}
]
# تسطيح
df = json_normalize(data)
print(df.columns)
# ['الاسم', 'العمر', 'العنوان.المدينة', 'العنوان.الرمز']
معالجة المصفوفات المتداخلة
import pandas as pd
from pandas import json_normalize
# بيانات مع مصفوفات متداخلة
data = [
{
'المستخدم': 'أحمد',
'الطلبات': [
{'id': 1, 'المبلغ': 100},
{'id': 2, 'المبلغ': 200}
]
}
]
# تسطيح مع فصل المصفوفات
df = json_normalize(
data,
record_path='الطلبات',
meta='المستخدم'
)
print(df)
# المستخدم id المبلغ
# 0 أحمد 1 100
# 1 أحمد 2 200
تحليل بيانات JSON
إحصائيات أساسية
import pandas as pd
# قراءة بيانات
df = pd.read_json('users.json')
# إحصائيات وصفية
print(df.describe())
# عدد القيم الفريدة
print(df.nunique())
# القيم الناقصة
print(df.isnull().sum())
# معلومات عامة
print(df.info())
التصفية والاستعلام
import pandas as pd
df = pd.read_json('users.json')
# تصفية بالعمر
adults = df[df['العمر'] >= 18]
# تصفية متعددة
riyadh_adults = df[
(df['المدينة'] == 'الرياض') &
(df['العمر'] >= 18)
]
# استخدام query
result = df.query('العمر > 25 and المدينة == "جدة"')
# البحث في النص
contains_ahmed = df[df['الاسم'].str.contains('أحمد')]
التجميع
import pandas as pd
df = pd.read_json('sales.json')
# التجميع حسب المدينة
by_city = df.groupby('المدينة').agg({
'المبيعات': 'sum',
'الطلبات': 'count',
'العملاء': 'nunique'
})
# تجميع متعدد
summary = df.groupby(['المدينة', 'الشهر']).agg({
'المبيعات': ['sum', 'mean', 'max'],
'الطلبات': 'count'
})
تحويل البيانات
من JSON إلى CSV
import pandas as pd
# قراءة JSON
df = pd.read_json('data.json')
# حفظ كـ CSV
df.to_csv('data.csv', index=False, encoding='utf-8-sig')
من JSON إلى Excel
import pandas as pd
# قراءة JSON
df = pd.read_json('data.json')
# حفظ كـ Excel
df.to_excel('data.xlsx', index=False, sheet_name='البيانات')
# أوراق متعددة
with pd.ExcelWriter('report.xlsx') as writer:
df_users.to_excel(writer, sheet_name='المستخدمون')
df_orders.to_excel(writer, sheet_name='الطلبات')
من JSON إلى SQL
import pandas as pd
from sqlalchemy import create_engine
# قراءة JSON
df = pd.read_json('data.json')
# إنشاء اتصال
engine = create_engine('sqlite:///database.db')
# حفظ في قاعدة البيانات
df.to_sql('users', engine, if_exists='replace', index=False)
معالجة API Responses
جلب ومعالجة البيانات
import requests
import pandas as pd
# جلب البيانات
response = requests.get('https://api.example.com/users')
data = response.json()
# تحويل إلى DataFrame
df = pd.DataFrame(data['users'])
# معالجة
df['العمر'] = df['تاريخ_الميلاد'].apply(calculate_age)
df['الاسم_الكامل'] = df['الاسم_الأول'] + ' ' + df['الاسم_الأخير']
# حفظ
df.to_json('processed_users.json', orient='records', force_ascii=False)
معالجة صفحات متعددة
import requests
import pandas as pd
def fetch_all_pages(base_url):
all_data = []
page = 1
while True:
response = requests.get(f'{base_url}?page={page}')
data = response.json()
if not data['users']:
break
all_data.extend(data['users'])
page += 1
return pd.DataFrame(all_data)
# الاستخدام
df = fetch_all_pages('https://api.example.com/users')
تنظيف البيانات
معالجة القيم الناقصة
import pandas as pd
df = pd.read_json('data.json')
# ملء القيم الناقصة
df['العمر'].fillna(df['العمر'].mean(), inplace=True)
df['المدينة'].fillna('غير محدد', inplace=True)
# حذف الصفوف الناقصة
df.dropna(subset=['البريد'], inplace=True)
# استبدال القيم
df['الحالة'].replace({'': 'نشط', None: 'نشط'}, inplace=True)
إزالة التكرارات
import pandas as pd
df = pd.read_json('data.json')
# عرض التكرارات
duplicates = df[df.duplicated()]
print(f'عدد التكرارات: {len(duplicates)}')
# إزالة التكرارات
df.drop_duplicates(inplace=True)
# إزالة بناءً على أعمدة محددة
df.drop_duplicates(subset=['البريد'], inplace=True)
تحويل الأنواع
import pandas as pd
df = pd.read_json('data.json')
# تحويل إلى datetime
df['التاريخ'] = pd.to_datetime(df['التاريخ'])
# تحويل إلى فئة
df['الفئة'] = df['الفئة'].astype('category')
# تحويل إلى رقمي
df['السعر'] = pd.to_numeric(df['السعر'], errors='coerce')
تحليل متقدم
الارتباط
import pandas as pd
df = pd.read_json('data.json')
# مصفوفة الارتباط
correlation = df[['العمر', 'الدخل', 'المبيعات']].corr()
print(correlation)
# رسم بياني
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10, 8))
sns.heatmap(correlation, annot=True, cmap='coolwarm')
plt.title('مصفوفة الارتباط')
plt.show()
السلاسل الزمنية
import pandas as pd
# قراءة بيانات زمنية
df = pd.read_json('timeseries.json')
df['التاريخ'] = pd.to_datetime(df['التاريخ'])
df.set_index('التاريخ', inplace=True)
# إعادة أخذ العينات
monthly = df.resample('M').sum()
weekly = df.resample('W').mean()
# المتوسط المتحرك
df['متوسط_7_أيام'] = df['القيمة'].rolling(window=7).mean()
التصور
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_json('data.json')
# رسم بياني بسيط
df.plot(kind='bar', x='الفئة', y='المبيعات')
plt.title('المبيعات حسب الفئة')
plt.xlabel('الفئة')
plt.ylabel('المبيعات')
plt.show()
# رسوم متعددة
fig, axes = plt.subplots(2, 2, figsize=(12, 10))
df['العمر'].hist(ax=axes[0, 0])
df.boxplot(column='الدخل', by='المدينة', ax=axes[0, 1])
df.plot(kind='scatter', x='العمر', y='الدخل', ax=axes[1, 0])
df['الفئة'].value_counts().plot(kind='pie', ax=axes[1, 1])
plt.tight_layout()
plt.show()
نماذج التعلم الآلي
تحضير البيانات
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
# قراءة البيانات
df = pd.read_json('data.json')
# ترميز الفئات
le = LabelEncoder()
df['الفئة_مرمزة'] = le.fit_transform(df['الفئة'])
# تقسيم البيانات
X = df[['العمر', 'الدخل', 'الفئة_مرمزة']]
y = df['الهدف']
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
تدريب نموذج
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report
# إنشاء النموذج
model = RandomForestClassifier(n_estimators=100, random_state=42)
# التدريب
model.fit(X_train, y_train)
# التنبؤ
predictions = model.predict(X_test)
# التقييم
accuracy = accuracy_score(y_test, predictions)
print(f'الدقة: {accuracy:.2f}')
print(classification_report(y_test, predictions))
أفضل الممارسات
1. استخدم المخططات
import pandas as pd
# تحديد أنواع الأعمدة
dtype_spec = {
'id': 'int64',
'الاسم': 'string',
'العمر': 'int64',
'التاريخ': 'string'
}
df = pd.read_json('data.json', dtype=dtype_spec)
df['التاريخ'] = pd.to_datetime(df['التاريخ'])
2. معالجة الأخطاء
import pandas as pd
try:
df = pd.read_json('data.json')
except ValueError as e:
print(f'خطأ في قراءة JSON: {e}')
except FileNotFoundError:
print('الملف غير موجود')
3. حفظ الذاكرة
import pandas as pd
# قراءة بالأجزاء للملفات الكبيرة
chunks = []
for chunk in pd.read_json('large.json', lines=True, chunksize=1000):
processed = process_chunk(chunk)
chunks.append(processed)
df = pd.concat(chunks, ignore_index=True)
4. التوثيق
import pandas as pd
def load_and_process_data(filename):
"""
قراءة ومعالجة بيانات JSON
Args:
filename: مسار ملف JSON
Returns:
DataFrame معالج
"""
df = pd.read_json(filename)
df = clean_data(df)
df = transform_data(df)
return df
الملخص
JSON في علم البيانات:
- تنسيق مرن وشائع
- Pandas يجعل المعالجة سهلة
- مناسب للـ APIs
- قابل للتحويل
استخدم JSON مع Pandas لتحليل قوي!
مقالات ذات صلة
Python و JSON: دليل شامل
تعلم كيفية العمل مع JSON في Python. القراءة، الكتابة، التحليل، والتحويل مع أمثلة عملية.
تحويل JSON إلى Excel: دليل شامل
تعلم كيفية تحويل بيانات JSON إلى ملفات Excel. أدوات، تقنيات، وأمثلة عملية.
التعامل مع ملفات JSON الكبيرة
تقنيات وأفضل الممارسات للتعامل مع ملفات JSON الكبيرة بكفاءة. أمثلة عملية للقراءة والمعالجة.