পান্ডা কি এখন ডেটা.ট্যাবলের চেয়ে দ্রুত?


17

https://github.com/Rdatatable/data.table/wiki/Benchmarks-%3A-Grouping

ডেটা.টিটেবল বেঞ্চমার্কগুলি ২০১৪ সাল থেকে আপডেট করা হয়নি I আমি কোথাও শুনেছি Pandasযা এখনকার চেয়ে দ্রুত data.table। এটা কি সত্য? কেউ কি কোনও মানদণ্ড করেছে? আমি পাইথন এর আগে কখনও ব্যবহার করি নি তবে pandasহিট করতে পারলে স্যুইচিংয়ের কথা বিবেচনা করব data.table?


7
অজগর থেকে সরে যাওয়ার এটি খুব খারাপ কারণ।
ম্যাথু ড্রুরি

2
পছন্দ করুন ডেটা এবং এটির হেরফেরটি আমার কাজের ৮০%। মাত্র 20% ফিটিং মডেল এবং উপস্থাপনা। আমাকে এমন ফলাফলটি কেন বেছে নেওয়া উচিত না যা আমাকে ফলাফলগুলি দ্রুত দেয়?
xiaodai

2
অজগর এবং আর উভয়ই বিশাল বাস্তুসংস্থান এবং সম্প্রদায়গুলির সাথে প্রতিষ্ঠিত ভাষা। একক লাইব্রেরিতে পছন্দ হ্রাস করার জন্য বিস্তৃত বনের মধ্যে একটি গাছের উপাসনা করছেন। তবুও, দক্ষতা হ'ল একক লাইব্রেরির জন্য এমনকি অনেকের মধ্যেই এটি উদ্বেগের বিষয় (ইন্টারফেসটি কীভাবে প্রকাশযোগ্য, এটি অন্যান্য গ্রন্থাগারের সাথে কীভাবে সংযুক্ত হয়, কোডবেসটি কতটা এক্সটেনসিবল, এর বিকাশকারীরা কতটা উন্মুক্ত)। আমি যুক্তি দিয়ে বলব যে পছন্দটি নিজেই একটি মিথ্যা দ্বিবিজ্ঞান; উভয় সম্প্রদায়ের আলাদা ফোকাস রয়েছে, যা ভাষাগুলিকে বিভিন্ন শক্তি দেয়।
ম্যাথু

3
আপনার 20% কাজের জন্য ভাল একটি বিশাল বন আছে? সুতরাং আপনার কাজ 80% প্রভাবিত একটি পছন্দ না? আর পাইথন বা জুলিয়ায় ডেটা প্রিপ করতে এবং তারপরে মডেল করার জন্য পান্ডা ব্যবহার করা থেকে আমাকে কিছুই থামছে না। আমি মনে করি আমার চিন্তাভাবনা সুদৃ .়। পান্ডা যদি আমার থেকে দ্রুত হয় তবে এটি আমার প্রধান সরঞ্জাম হিসাবে বেছে নেওয়া উচিত।
xiaodai

1
আপনি আগ্রহ / ব্যবহারের জন্য আর্টিকুলেট প্যাকেজটি পেতে পারেন। এছাড়াও, ক্রমবর্ধমান প্রচুর প্রচেষ্টা আর / ডাটাবেসগুলির সাথে খেলতে (যেমন dbplyr এর মতো প্রচেষ্টা দেখুন ) পাওয়ার চেষ্টা করা হয়েছে ।
স্ল্যাকলাইন

উত্তর:


15

কেউ কি কোনও মানদণ্ড করেছে?

হ্যাঁ, আপনি আপনার প্রশ্নে লিঙ্ক করেছেন এমন মানদণ্ডটি সম্প্রতি ডেটা.টেবল এবং পান্ডাসের সাম্প্রতিক সংস্করণের জন্য আপডেট করা হয়েছে। অতিরিক্তভাবে অন্যান্য সফ্টওয়্যার যুক্ত করা হয়েছে। আপনি https://h2oai.github.io/db-benchmark এ আপডেট হওয়া বেঞ্চমার্কটি খুঁজে পেতে পারেন
দুর্ভাগ্যক্রমে এটি 125 গিগাবাইট মেমরি মেশিনে নির্ধারিত হয়েছে (মূলটি 244 জিবি নয়)। ফলস্বরূপ পান্ডা এবং ড্যাস্ক groupby1e9 সারি (50 গিগাবাইট সিএসভি) ডেটা চেষ্টা করতে অক্ষম কারণ ডেটা পড়ার সময় এগুলি মেমরির বাইরে চলে যায়। সুতরাং পান্ডাস বনাম ডেটা.ট্যাবলের জন্য আপনাকে 1e8 সারি (5 জিবি) ডেটা দেখতে হবে।

আপনি যে কন্টেন্টের জন্য জিজ্ঞাসা করছেন কেবল তার লিঙ্কটি না করার জন্য আমি সেই সমাধানগুলির জন্য সাম্প্রতিক সময়গুলি আটক করছি।

দয়া করে নোট করুন যে এই সময়গুলি পুরানো হয়ে গেছে আপডেট আপডেটের
জন্য https://h2oai.github.io/db-benchmark দেখুন

| in_rows|question              | data.table| pandas|
|-------:|:---------------------|----------:|------:|
|   1e+07|sum v1 by id1         |      0.140|  0.414|
|   1e+07|sum v1 by id1:id2     |      0.411|  1.171|
|   1e+07|sum v1 mean v3 by id3 |      0.574|  1.327|
|   1e+07|mean v1:v3 by id4     |      0.252|  0.189|
|   1e+07|sum v1:v3 by id6      |      0.595|  0.893|
|   1e+08|sum v1 by id1         |      1.551|  4.091|
|   1e+08|sum v1 by id1:id2     |      4.200| 11.557|
|   1e+08|sum v1 mean v3 by id3 |     10.634| 24.590|
|   1e+08|mean v1:v3 by id4     |      2.683|  2.133|
|   1e+08|sum v1:v3 by id6      |      6.963| 16.451|
|   1e+09|sum v1 by id1         |     15.063|     NA|
|   1e+09|sum v1 by id1:id2     |     44.240|     NA|
|   1e+09|sum v1 mean v3 by id3 |    157.430|     NA|
|   1e+09|mean v1:v3 by id4     |     26.855|     NA|
|   1e+09|sum v1:v3 by id6      |    120.376|     NA|

5 টির মধ্যে 4 টিতে ডেটা.ট্যাবলটি দ্রুততর এবং আমরা এটি আরও ভাল স্কেল দেখতে পাচ্ছি।
শুধু মনে রাখবেন যে এই সময় এখন হয় , যেখানে id1, id2এবং id3চরিত্র ক্ষেত্র। সেই শ্রেণীগত শীঘ্রই পরিবর্তন করা হবে সম্পন্ন । এছাড়াও অন্যান্য কারণ রয়েছে যেগুলি অদূর ভবিষ্যতে সেই সময়গুলিকে প্রভাবিত করতে পারে (যেমন সমান্তরাল ডোনগুলিতে গ্রুপিং করা )। আমরা এনএ , এবং বিভিন্ন কার্ডিনালিটি সম্পন্ন ডেটার জন্য পৃথক মানদণ্ড যুক্ত করতে যাচ্ছি ।

অন্যান্য কর্ম একটানা এই মাপকাঠিতে প্রকল্পে আসছে তাই যদি আপনি আগ্রহী join, sort, readএবং অন্যদের নিশ্চিত পরে চেক করতে হবে।
এবং অবশ্যই আপনাকে প্রকল্পের রেপোতে প্রতিক্রিয়া জানাতে স্বাগতম!


1
জুলিয়াডিবি সম্পর্কে কী?
স্ক্যান


1
উত্তম উত্তর - আপনার সংযোগিত মানদণ্ডগুলি সমস্ত একই ভিএম-এ চালিত হয়েছিল? অর্থাত, একই পরিস্থিতিতে প্যান্ডা এবং ডাস্কের 50 জিবি টেবিলের জন্য 128 গিগাবাইটের বেশি র‌্যামের প্রয়োজন হয়, অন্যরা এই সীমাবদ্ধতার অধীনে পারফর্ম করতে পারে? যদি তাই হয় তবে এটি মাঝারি (GB 10 গিগাবাইট) টেবিলগুলিতে প্রচুর স্বাভাবিক স্টাফের জন্য পান্ডগুলি খুব র‍্যামের অযোগ্য হয়ে থাকার সাথে আমার অভিজ্ঞতাগুলিও প্রতিফলিত করে এবং বেশিরভাগ সময় মৃত্যুদন্ডের গতির চেয়ে অনেক বড় সমস্যা। (যা অনেক কাছের এবং নির্দিষ্ট কাজের চাপের উপর নির্ভর করে কোনও ইভেন্টে পিছিয়ে থেকে ব্যবসা করে))
জেकेফ

হ্যাঁ, ঠিক আছে। মেশিনটি 128 গিগাবাইট মেমরি কারণ আমরা 500 গিগাবাইট ডেটাসেট (10e9 সারি) মেমো প্রসেসিংয়ের পরীক্ষা করার পরিকল্পনা করছি। বর্তমানে কেবলমাত্র স্পার্ক এবং পাইডেটিটেবল এটিকে সমর্থন করবে, শীঘ্রই ক্লিকহাউস যুক্ত হবে।
জঙ্গোরেকি

@ জাঙ্গোরেকি এটি একটি অত্যন্ত কার্যকর মানদণ্ড। প্রচেষ্টার জন্য বড় ধন্যবাদ। আমি 50 জিবি ডেটাসেট হজম না করে ডেস্ক সম্পর্কে কিছুটা বিস্মিত। Dask পরামিতি এক (যেমন হিসাবে পার্টিশন আকার blocksizeমধ্যে read_csv)। compute()স্মৃতিতে পুরো আউটপুট টেবিলটি সংহত করতে আপনি ডিস্কে কলিং এবং আউটপুট ডাম্প এড়াতে চেষ্টা করেছিলেন ?
মিসচা লিসোভি

14

একজন সহকর্মী এবং আমি পান্ডাস এবং ডেটা টেবিলের মধ্যে পারফরম্যান্স পার্থক্য সম্পর্কে কিছু প্রাথমিক গবেষণা চালিয়েছি। আপনি আমাদের ব্লগে অধ্যয়নটি (যা দুটি অংশে বিভক্ত ছিল) খুঁজে পেতে পারেন (আপনি এখানে দুটি অংশ খুঁজে পেতে পারেন )।

আমরা অনুভব করেছি যে কিছু কাজ রয়েছে যেখানে পান্ডারা স্পষ্টভাবে ডেটা.টেবেলকে ছাপিয়ে যায়, তবে এমন কেস যেখানে ডেটা.টেবিলটি দ্রুততর হয়। আপনি নিজে এটি পরীক্ষা করে দেখতে পারেন এবং ফলাফল সম্পর্কে আপনি কী মনে করেন তা আমাদের জানান।

সম্পাদনা:
আপনি যদি ব্লগগুলি বিস্তারিতভাবে না পড়তে চান তবে আমাদের সেটআপ এবং আমাদের অনুসন্ধানের একটি সংক্ষিপ্তসার এখানে দেওয়া হল:

সেটআপ

আমরা নীচের ক্রিয়াকলাপগুলিতে (এখনও অবধি) 12 টি বিভিন্ন সিমুলেটেড ডেটা সেটগুলি তুলনা করেছি pandasএবং data.tableএটিতে আমরা দৃশ্যের নাম দিয়েছি called

  • একটি নির্বাচনের মতো অপারেশন সহ ডেটা পুনরুদ্ধার
  • শর্তযুক্ত নির্বাচন অপারেশন সহ ডেটা ফিল্টারিং
  • ডেটা বাছাই অপারেশন
  • ডেটা একীকরণ অপারেশন

4 শারীরিক কোর, 16 জিবি র‌্যাম এবং একটি এসএসডি হার্ড ড্রাইভ সহ একটি ইন্টেল আই 7 2.2GHz সহ একটি মেশিনে এই গণনা করা হয়েছিল। সফ্টওয়্যার সংস্করণগুলি ওএস এক্স 10.13.3, পাইথন 3.6.4 এবং আর 3.4.2 ছিল। ব্যবহৃত স্বতন্ত্র গ্রন্থাগার সংস্করণগুলি পান্ডার জন্য 0.22 এবং ডেটা টেবিলের জন্য 1.10.4-3 ছিল

সংক্ষেপে ফলাফল

  • data.tableকলামগুলি নির্বাচন করার সময় দ্রুততর বলে মনে হচ্ছে ( pandasগড়ে ৫০% বেশি সময় লাগে)
  • pandas ফিল্টারিং সারিগুলিতে দ্রুত (গড় প্রায় 50%)
  • data.tableবাছাইয়ের ক্ষেত্রে যথেষ্ট দ্রুত বলে মনে হচ্ছে ( pandasকখনও কখনও 100 গুণ ধীর ছিল)
  • একটি নতুন কলাম যুক্ত করার সাথে দ্রুত উপস্থিত হয় pandas
  • সমষ্টিগত ফলাফলগুলি সম্পূর্ণ মিশ্রিত হয়

দয়া করে মনে রাখবেন যে আমি আপনাকে মৃত্যুর দিকে না নেওয়ার জন্য যথাসম্ভব ফলাফল সহজ করার চেষ্টা করেছি। আরও সম্পূর্ণ দেখার জন্য অধ্যয়ন পড়ুন। আপনি যদি আমাদের ওয়েবপৃষ্ঠায় অ্যাক্সেস করতে না পারেন তবে দয়া করে আমাকে একটি বার্তা প্রেরণ করুন এবং আমি আপনাকে আমাদের সামগ্রী ফরোয়ার্ড করব। আপনি গিটহাবের সম্পূর্ণ অধ্যয়নের জন্য কোডটি সন্ধান করতে পারেন । কীভাবে আমাদের অধ্যয়নের উন্নতি করতে পারেন আপনার যদি ধারণা থাকে তবে দয়া করে আমাদের একটি ইমেল গুলি করুন। আপনি গিটহাবে আমাদের পরিচিতিগুলি খুঁজে পেতে পারেন।


1
আপনি যেমন আমার উত্তর থেকে পড়ে থাকতে পারেন, আমি ইতিমধ্যে বলেছি যে ফলাফলগুলি মিশ্রিত। আমি আমার উত্তরটিতে আরও সুনির্দিষ্ট হই কিনা, কিছু সংখ্যার উপর সম্ভাব্যভাবে বিশদ বিবরণ করিয়া দয়া করে স্পষ্ট করুন।
টোবিয়াস ক্রাবেল

1
"এই সাইটে আপনার অ্যাক্সেস সীমিত করা হয়েছে।" আমি আমার ফোনে বা আমার কাজের কম্পিউটারে সাইটটি অ্যাক্সেস করতে পারছি না।
xiaodai

1
আমি এটি পড়ে দুঃখিত। আমি নিজের ফোনে এটি নিজেই পরীক্ষা করে দেখেছি এবং কোনও সমস্যা নেই। আপনি যে দেশ থেকে সংযোগ স্থাপনের চেষ্টা করছেন তার সাথে কিছু থাকতে পারে?
টোবিয়াস ক্রাবেল

1
"4 শারীরিক কর" = 8 লজিকাল কোর। এছাড়াও এটি নির্দিষ্ট কোন Intel i7 2.2GHz (কোন প্রজন্ম? কোন রূপ? -HQ?) এবং কোন ক্যাশের আকার বলতে সহায়তা করে। এবং এসএসডি-র জন্য, কী পড়ুন এবং গতি লিখুন?
স্মি

তারা জুলিয়া ডেটাফ্রেম এবং জুলিয়াডিবিয়ের সাথে কীভাবে তুলনা করবে?
স্ক্যান

3

নাহ, আসলে যদি ডান্ডাসেটের আকারটি খুব বেশি আকারে পান্ডাস ক্র্যাশ হয় তবে আপনি মূলত ডাস্কের সাথে আটকে আছেন, যা সফল হয় এবং আপনি কোনও সাধারণ গ্রুপবাই-যোগও করতে পারেন না। dplyr দ্রুত নাও হতে পারে, তবে গোলযোগ নেই।

আমি বর্তমানে কিছুটা 2G ডেটাসেট নিয়ে কাজ করছি এবং একটি সাধারণ print(df.groupby(['INCLEVEL1'])["r"].sum())ক্রমশ ড্যাস্ক।

Dplyr দিয়ে এই ত্রুটিটি অনুভব করিনি।

সুতরাং, যদি পান্ডারা ডেটাসেট পরিচালনা করতে পারে তবে আমি পান্ডাস ব্যবহার করি, যদি না হয়, তবে আর ডাটা টেবিলের সাথে লেগে থাকি।

এবং হ্যাঁ, আপনি ডাস্কটিকে সাধারণের সাথে পান্ডাস ডেটা ফ্রেমে রূপান্তর করতে পারেন df.compute() তবে এটি বেশ দীর্ঘ সময় নেয়, তাই আপনি প্যান্ডাস লোড হওয়ার জন্য বা পড়ার জন্য ডেটাতেবলের জন্য ধৈর্য ধরে অপেক্ষা করতে পারেন।


1
জানতেন না দাশক এত খারাপ। সম্ভবত আপনি আর এর ডিস্ক.ফ্রেম চেষ্টা করতে চান? github.com/xiaodaigh/disk.frame আমি লেখক
xiaodai

1

আমি জানি এটি একটি পুরানো পোস্ট, তবে অনুধাবন করা উচিত যে এটি উল্লেখযোগ্য হবে - পালক ব্যবহার করে (আর এবং পাইথনে) ডেটা ফ্রেম / ডেটা টেবিলগুলিতে অপারেশন করতে এবং সেই ফলাফলগুলি পালকের মাধ্যমে ভাগ করে নেওয়ার অনুমতি দেয়।

পালকের গিথব পৃষ্ঠাটি দেখুন


মাঝারি এবং বড় ডেটাসেটের জন্য সেগফাল্টস
জঙ্গোরেকি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.