أتمتة استيراد ملفات CSV متعددة إلى PostgreSQL باستخدام بايثون
تعد عملية استيراد كميات كبيرة من الملفات بتنسيق CSV إلى قاعدة بيانات PostgreSQL من المهام الشائعة التي يواجهها العديد من المحترفين في مجال البيانات. حيث تتطلب هذه العملية إدارة بيانات متعددة تتنوع في تنسيقاتها وأعمدتها، مما يجعل تنفيذها مهمة صعبة بعض الشيء. في هذا المقال، سنتناول كيفية أتمتة استيراد مئات ملفات CSV ذات التنسيقات والأعمدة المختلفة إلى جدول في PostgreSQL من خلال كتابة سكريبت بلغة Python.
فهم المشكلة
في الكثير من الأحيان، نحتاج إلى استيراد مجموعات متباينة من البيانات، مثل المقاييس المالية لعدد كبير من الشركات أو بيانات سوق الأوراق المالية. على سبيل المثال، يمكن أن تحتوي مجموعة البيانات الأولى على ملفات CSV تتبع نفس التنسيق بينما تتضمن المجموعة الثانية ملفات أخرى تختلف في الأعمدة والأنواع. لذا، يصبح من الضروري وضع خطة فعالة لاستيراد هذه البيانات بشكل مجمّع.
الخطوات الأساسية لكتابة السكريبت
للبدء في أتمتة عملية استيراد البيانات، تحتاج أولاً إلى إعداد البيئة عن طريق تثبيت المكتبات الضرورية. من بين المكتبات الأكثر شيوعًا هي pandas
وSQLAlchemy
، التي تسهل قراءة الملفات وكتابة البيانات إلى قاعدة البيانات.
pip install pandas sqlalchemy psycopg2
استيراد البيانات المالية
لنبدأ بمجموعة البيانات الأولى التي تحتوي على الملفات المالية. بمجرد قراءة جميع الملفات في المجلد، يمكننا دمجها في إطار بيانات واحد باستخدام pandas
:
import pandas as pd
import os
directory_path = 'path/to/financial_data'
combined_df = pd.DataFrame()
for filename in os.listdir(directory_path):
if filename.endswith('.csv'):
file_path = os.path.join(directory_path, filename)
df = pd.read_csv(file_path)
combined_df = pd.concat([combined_df, df], ignore_index=True)
# الآن يمكننا استيراد combined_df إلى PostgreSQL
بعد أن تم دمج البيانات، يمكنك استخدام SQLAlchemy
لإرسال البيانات إلى قاعدة البيانات:
from sqlalchemy import create_engine
engine = create_engine('postgresql://username:password@localhost:5432/mydatabase')
combined_df.to_sql('financial_metrics', engine, if_exists='replace', index=False)
استيراد بيانات سوق الأوراق المالية
الآن، لننتقل إلى المجموعة الثانية من البيانات. بما أن تنسيق بيانات سوق الأوراق المالية قد يختلف، يجب أن نكون أكثر حذرًا. يمكن الاستفادة من ملف CSV يحتوي على أسماء الأعمدة المطلوبة لتسهيل عملية الإنشاء.
# قراءة ملف الأعمدة
columns_df = pd.read_csv('path/to/stock_market_columns.csv')
columns = list(columns_df.columns)
# هنا نقوم بإنشاء الجدول مع الأعمدة المطلوبة
engine.execute('CREATE TABLE stock_market_data ({})'.format(', '.join([f"{col} TEXT" for col in columns])))
# الآن نستطيع استيراد البيانات
stock_data_directory = 'path/to/stock_market_data'
for filename in os.listdir(stock_data_directory):
if filename.endswith('.csv'):
file_path = os.path.join(stock_data_directory, filename)
df = pd.read_csv(file_path)
df.columns = [col if col in columns else None for col in df.columns]
df.to_sql('stock_market_data', engine, if_exists='append', index=False)
خاتمة
من خلال الخطوات المذكورة، يمكنك Automate bulk importing hundreds of csv files with differing formats/columns into a table in PostgreSQL by writing a script in Python بسهولة. يستفيد هذا الحل من مرونة Python و pandas
للتعامل مع بيانات متعددة وتنسيقاتها المختلفة بكفاءة. هذه التقنية ليست فقط موفرة للوقت، بل تسهم أيضًا في الحفاظ على دقة البيانات. إذا كنت بحاجة لأي مساعدة إضافية، فلا تتردد في البحث عن مصادر أخرى أو طلب المساعدة من المجتمعات المتخصصة.