نحوه ترکیب داده ها در پایتون با استفاده از Pandas merge

[ad_1]

در دسامبر سال 2019 ، شارون مک لیز ، همکار من در InfoWorld مقاله ای نوشت با عنوان “چگونه داده ها را در R با استفاده از R ادغام ، dplyr یا جدول. جدول ترکیب کنیم.” شارون متخصص برنامه نویسی و تجزیه و تحلیل R به طور کلی است ، که به نظر می رسد در مقاله. اما فرض کنید شما قصد دارید با استفاده از پایتون و (به عنوان مثال) یادگیری ماشینی یا آموزش دقیق داده ها را انجام دهید Scikit یاد بگیر، PyTorch، یا TensorFlow؟ اگرچه امکان انتقال داده از R به پایتون وجود دارد ، اما این بهترین راه حل برای مشکل نیست.

در این مقاله ، من نحوه پیوند داده ها را در پایتون مورد بحث قرار خواهم داد ، که انتقال داده های جمع شده به یکی از سیستم عامل های هوش مصنوعی پایتون را تسهیل می کند. من از همان مجموعه داده های عمومی شارون استفاده خواهم کرد ، که تاخیرهای پروازهای هواپیمایی آمریکایی را ثبت می کند ، اما به بهترین چارچوب برای هدف ، که در حال حاضر است ، پایبند خواهم ماند. پانداها.

[ Tune into Serdar Yegulalp’s Smart Python video tutorials to learn smart Python tricks in 5 minutes or less ]

Pandas و DataFrame

Pandas به عنوان یک کتابخانه منبع باز BSD مجوز دارد که ساختارهای داده بسیار کارآمد و ابزارهای تجزیه و تحلیل داده ها را برای پایتون فراهم می کند. ساختار داده های قاب R دارای معادل نزدیک در Pandas است ، قاب داده. همانطور که پروژه Pandas توصیف می کند:

DataFrame یک ساختار داده ای دارای برچسب دو بعدی با ستون هایی از انواع بالقوه متفاوت است. می توانید آن را به عنوان صفحه گسترده یا جدول SQL یا به عنوان یک جمله از اشیاial سریال ارائه دهید. این معمولاً بیشترین استفاده از شی Pandas است.

پانداها ادغام می شوند

روش Pandas برای پیوستن به دو شی DataFrame است merge()، که تنها نقطه ورود برای کلیه عملیات اتصال استاندارد پایگاه داده بین DataFrame یا اشیایی به نام Series است. (اشیا Ser سریال یک بعدی هستند) merge مشخصات روش:

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
             left_index=False, right_index=False, sort=True,
             suffixes=('_x', '_y'), copy=True, indicator=False,
             validate=None)
  • left : DataFrame یا سری نام شیject.
  • right : نام شی دیگری از DataFrame یا Series است.
  • on : نامهای سطح ستون یا فهرست برای پیوستن به. این مورد را باید در اشیا objects DataFrame و / یا Series چپ و راست پیدا کنید. اگر عبور نکرده باشد و left_index و right_index هستند False، تقاطع ستون ها در DataFrames و / یا Series به عنوان کلیدهای اتصال نمایش داده می شود.
  • left_on : ستون ها یا سطح شاخص ها از سمت چپ DataFrame یا Series برای استفاده به عنوان کلید. آنها می توانند نام ستون ، نام در سطح شاخص یا آرایه هایی با طول برابر با طول DataFrame یا Series باشند.
  • right_on : ستونها یا سطح شاخص ها از DataFrame یا Series سمت راست برای استفاده به عنوان کلید. آنها می توانند نام ستون ، نام در سطح شاخص یا آرایه هایی با طول برابر با طول DataFrame یا Series باشند.
  • left_index : اگر True، از شاخص (برچسب های ردیف) DataFrame یا Series سمت چپ به عنوان کلید (های) خود استفاده کنید. در مورد DataFrame یا Series با MultiIndex (سلسله مراتبی) ، تعداد سطوح باید با تعداد کلیدهای دسترسی در DataFrame یا Series سمت راست مطابقت داشته باشد.
  • right_index : همان استفاده left_index برای DataFrame یا Series صحیح
  • how : یکی از left، right، “outer، یا inner. به طور پیش فرض داخلی است. برای توضیح بیشتر در مورد هر روش به زیر مراجعه کنید.
  • sort : با پیوستن کلیدها به ترتیب واژه نامه ، نتیجه DataFrame را مرتب کنید. پیش فرض True؛ راه اندازی False در بسیاری از موارد عملکرد را به طور قابل توجهی بهبود می بخشد.
  • suffixes : مجموعه ای از پسوندهای رشته برای اعمال ستون های همپوشانی. پیش فرض ('_x', '_y').
  • copy : همیشه داده ها را کپی کنید (پیش فرض True) از DataFrame یا اشیا transmitted منتقل شده به نام Series ، حتی در صورت عدم نیاز به نمایه سازی مجدد. در بسیاری از موارد نمی توان از آن جلوگیری کرد ، اما می تواند عملکرد و استفاده از حافظه را بهبود بخشد. مواردی که می توان از کپی برداری جلوگیری کرد ، تا حدودی آسیب شناسانه است ، اما این گزینه هنوز هم ارائه می شود.
  • indicator : به خروجی DataFrame ستونی بنام اضافه کنید _merge با اطلاعاتی در مورد منبع هر خط. _merge یک نوع صریح است و مقدار آن را می گیرد left_only برای مشاهداتی که کلید ادغام آنها فقط در left DataFrame یا Series ، right_only برای مشاهداتی که کلید ادغام آنها فقط در right DataFrame یا Series ، هر دو اگر کلید ادغام نظارت در هر دو قرار داشته باشد.
  • validate : رشته ، پیش فرض None. اگر نشان داده شده است ، بررسی کنید نوع ادغام از نوع خاصی باشد.
    • one_to_one یا 1:1 : بررسی می کند که کلیدهای ادغام در مجموعه داده های چپ و راست بی نظیر هستند.
    • one_to_many یا 1:m : بررسی می کند که کلیدهای ادغام در مجموعه داده سمت چپ منحصر به فرد هستند.
    • many_to_one یا m:1 : بررسی می کند که کلیدهای ادغام در مجموعه داده های مناسب بی نظیر هستند.
    • many_to_many یا m:m : مجاز است اما منجر به تأیید نمی شود.

فایل CSV را در Pandas بخوانید

همانطور که انتظار دارید ، Pandas روشی برای خواندن فایلهای CSV دارد ، pd.read_csv()که یک DataFrame را برمی گرداند. این استدلال های اختیاری زیادی دارد ، اما برای اهداف ما فقط استدلال های اساسی مورد نیاز است:

filepath_or_buffer : ناهمسان

یا یک مسیر پرونده (str ، pathlib.Path یا py._path.local.LocalPath) ، یک URL (شامل مکان های HTTP ، FTP و Amazon S3) یا هر شی با read() روش (مانند یک فایل باز یا StringIO).

سپتامبر: خیابان ، پیش فرض است ',' برای read_csv()، t برای read_table()

جدا کننده برای استفاده اگر آن را سپتامبر است None، موتور C نمی تواند جدا کننده را به طور خودکار تشخیص دهد ، اما مکانیزم تجزیه پایتون می تواند ، به این معنی که مورد دوم مورد استفاده قرار می گیرد و جدا کننده را از دستگاه استنشاق داخلی پایتون ، csv.Sniffer تشخیص می دهد. علاوه بر این ، جداکننده های طولانی تر از یک شخصیت و متفاوت از 's+' به عنوان عبارات منظم تفسیر می شود و همچنین استفاده از مکانیسم تجزیه پایتون را مجبور می کند. توجه داشته باشید که جداکننده های بیان منظم ، داده های نقل شده را نادیده می گیرند. مثالی از یک عبارت منظم: '\r\t'.

delim_whitespace : بولی ، پیش فرض False

نشان می دهد که آیا فواصل (به عنوان مثال ' ' یا 't') به عنوان جداكننده استفاده خواهد شد. برابر با تنظیم sep='s+'. اگر این گزینه روی تنظیم شده باشد True، هیچ چیز نباید برای پارامتر وضوح تصویب شود.

مجموعه داده ها برای پروازهای تأخیری ایالات متحده

شارون از دو جدول دفتر آماری حمل و نقل ایالات متحده استفاده می کند تاخیر پرواز مجموعه ای از داده ها ، داده های تاخیر پرواز واقعی و جدول مرجع برای شرکت هواپیمایی گزارش دهنده. برای مقایسه این مورد با تجزیه و تحلیل شارون ، بیایید پرونده های پیدا شده او را بارگیری کنیم اینجا.

فایل فشرده ای که دریافت خواهید کرد همچنین شامل کد R شارون و ارائه پاورپوینت است. فایل rmerges3ways.zip را ادامه دهید و آن را از حالت فشرده خارج کنید. سپس پرونده 673598238_T_ONTIME_REPORTING.zip را از حالت فشرده خارج کنید تا 673598238_T_ONTIME_REPORTING.csv دریافت کنید. ما از این فایل CSV به همراه L_UNIQUE_CARRIERS.csv_ استفاده خواهیم کرد. به آخرین خط زیرین در نام فایل توجه کنید. این پرونده در واقع یک قالب متغیر معتبر جدا شده با کاما است. سایت USBoTS هنگام تولید جداول مرجع ، یک خط زیر را اضافه می کند.

با نگاهی به 20 خط اول دو پرونده CSV در یک ویرایشگر متن (در زیر) ، می بینیم که هر دو دارای خط هدر هستند و از ویرگول به عنوان جدا کننده استفاده می کنند. این نشان می دهد که به طور پیش فرض از read_csv() خوب خواهد شد ما فقط باید مسیرهای پرونده را مشخص کنیم.

تأخیر داده ها:

“FL_DATE” ، “OP_UNIQUE_CARRIER” ، “ORIGIN” ، “DEST” ، “DEP_DELAY_NEW” ،
2019-08-01 ، “DL” ، “ATL” ، “DFW” ، 31.00 ،
2019-08-01 ، “DL” ، “DFW” ، “ATL” ، 0.00 ،
2019-08-01 ، “DL” ، “IAH” ، “ATL” ، 40.00 ،
2019-08-01 ، “DL” ، “PDX” ، “SLC” ، 0.00 ،
2019-08-01 ، “DL” ، “SLC” ، “PDX” ، 0.00 ،
2019-08-01 ، “DL” ، “DTW” ، “ATL” ، 10.00 ،
2019-08-01 ، “DL” ، “ATL” ، “DTW” ، 0.00 ،
2019-08-01 ، “DL” ، “MSP” ، “JFK” ، 22.00 ،
2019-08-01 ، “DL” ، “JFK” ، “MSP” ، 0.00 ،
2019-08-01 ، “DL” ، “BHM” ، “ATL” ، 0.00 ،
2019-08-01 ، “DL” ، “ATL” ، “BHM” ، 0.00 ،
2019-08-01 ، “DL” ، “ATL” ، “BOS” ، 17.00 ،
2019-08-01 ، “DL” ، “BOS” ، “ATL” ، 5.00 ،
2019-08-01 ، “DL” ، “SEA” ، “LAX” ، 2.00 ،
2019-08-01 ، “DL” ، “LAX” ، “SEA” ، 0.00 ،
2019-08-01 ، “DL” ، “GSP” ، “ATL” ، 0.00 ،
2019-08-01 ، “DL” ، “ATL” ، “GSP” ، 8.00 ،
2019-08-01 ، “DL” ، “MSP” ، “BOS” ، 0.00 ،
2019-08-01 ، “DL” ، “BOS” ، “MSP” ، 51.00 ،

جدول مرجع:

کد ، توضیحات
“02Q” ، “Titan Airways”
“04Q” ، “Tradewind Aviation”
“05Q” ، “Comlux Aviation، AG”
“06Q” ، “Master Top Linhas Aereas Ltd.”
“07Q” ، “Flair Airlines Ltd.”
“09Q” ، “Swift Air، LLC d / b / a خطوط هوایی شرقی d / b / a شرقی”
“0BQ” ، “DCA”
“0CQ” ، “ACM AIR CHARTER GmbH”
“0FQ” ، “Maine Aviation Aircraft Charter، LLC”
“0GQ” ، “Inter Island Airways، d / b / a Inter Island Air”
“0HQ” ، “Polar Airlines of Mexico d / b / a Nova Air”
“0J” ، “JetClub AG”
“0JQ” ، “Vision Airlines”
“0LQ” ، “Metropix UK، LLP”.
“0MQ” ، “Multi-Aero، Inc. d / b / a Air Choice One”
“0OQ” ، “Open Sky”
“0Q” ، “Flying Service NV”
“0QQ” ، “TAG Aviation (UK) Ltd.”
“0RQ” ، “TAG Aviation Espana SL”

Pandas و وابستگی های آن را نصب کنید

مگر اینکه بخواهید Pandas را از GitHub بررسی کنید و خودتان آن را کامپایل کنید ، می توانید Pandas را از طریق نصب بسته Pip نصب کنید:

pip install pandas

متناوباً ، اگر از توزیع Anaconda Python استفاده می کنید ، می توانید Pandas را با استفاده از Conda نصب کنید:

conda install pandas

از آنجا که من هر دو پایتون 2.7 و پایتون 3.7 را نصب کرده ام و می خواهم از دومی استفاده کنم ، استفاده کردم pip3 install pandas، و دریافت که من قبلاً پانداها را روی دستگاه خود دارم. با این حال ، من این کار را کردم زیرا نسخه ای که داشتم به نوعی قدیمی بود.

[email protected] ~ % pip3 install pandas
Requirement already satisfied: pandas in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.24.2)
Requirement already satisfied: pytz>=2011k in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas) (2019.1)
Requirement already satisfied: python-dateutil>=2.5.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas) (2.7.5)
Requirement already satisfied: numpy>=1.12.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas) (1.16.3)
Requirement already satisfied: six>=1.5 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from python-dateutil>=2.5.0->pandas) (1.11.0)
[email protected] ~ % pip3 install --upgrade pandas
Collecting pandas
  Downloading pandas-1.1.4-cp37-cp37m-macosx_10_9_x86_64.whl (9.9 MB)
    |████████████████████████████████| 9.9 MB 4.2 MB/s
Requirement already satisfied, skipping upgrade: python-dateutil>=2.7.3 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas) (2.7.5)
Requirement already satisfied, skipping upgrade: pytz>=2017.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas) (2019.1)
Requirement already satisfied, skipping upgrade: numpy>=1.15.4 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from pandas) (1.16.3)
Requirement already satisfied, skipping upgrade: six>=1.5 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from python-dateutil>=2.7.3->pandas) (1.11.0)
Installing collected packages: pandas
  Attempting uninstall: pandas
    Found existing installation: pandas 0.24.2
    Uninstalling pandas-0.24.2:
      Successfully uninstalled pandas-0.24.2
Successfully installed pandas-1.1.4

کد پایتون برای تجمیع داده ها

در این مرحله ، کد تقریباً در حال نوشتن خود است.

import pandas as pd

mydf = pd.read_csv("673598238_T_ONTIME_REPORTING.csv")
mylookup = pd.read_csv("L_UNIQUE_CARRIERS.csv_")

mydf.head(10)
mylookup.head(10)

joined_df = pd.merge(mydf, mylookup, left_on= "OP_UNIQUE_CARRIER", right_on="Code")

joined_df.head(10)

اگر این خطوط را در کنسول Python 3 اجرا کنیم ، بدست می آوریم:

[ad_2]