আমি মূল পয়েন্টগুলিতে একটি উত্তর তৈরি করার চেষ্টা করব যেখানে উভয় ভাষা ডেটা বিজ্ঞান / পরিসংখ্যান / উপাত্ত বিশ্লেষণ এবং এর মত, যেমন উভয়ই ব্যবহার করে play
ডেটা বিশ্লেষণের কার্যপ্রবাহে সাধারণত নিম্নলিখিত পদক্ষেপ থাকে:
- কিছু উত্স থেকে ডেটা আনয়ন (সম্ভবত একটি এসকিউএল / নোএসকিউএল ডাটাবেস বা .csv ফাইল)।
- একটি শালীন এবং যুক্তিসঙ্গত ফর্ম্যাটে (ডেটা ফ্রেম) ডেটা পার্স করা যাতে কোনও ব্যক্তি অপারেশন করতে পারে এবং তারপরে চিন্তা করতে পারে।
- ডেটাতে কিছু ফাংশন প্রয়োগ করা (গোষ্ঠীকরণ, মোছা, মার্জ করা, নামকরণ)।
- ডেটাতে কিছু ধরণের মডেল প্রয়োগ করা (রিগ্রেশন, ক্লাস্টারিং, নিউরাল নেটওয়ার্ক বা অন্য কোনও বা কম-বেশি জটিল তত্ত্ব)।
- আপনার ফলাফলকে কম বা কম প্রযুক্তিগত দর্শকের কাছে স্থাপন / উপস্থাপন করা।
তথ্য আনয়ন
সময়ের ৯৯%, ডেটা আনার প্রক্রিয়াটি এসকিউএল বা ইম্পাল ডাটাবেসকে জিজ্ঞাসাবাদে নেমে আসে: পাইথন এবং আর উভয়েরই নির্দিষ্ট ক্লায়েন্ট বা গ্রন্থাগার রয়েছে যা কোনও সময় এবং সমানভাবে কাজ করে না ( RImpala
, RmySQL
আর এবং MySQLdb
পাইথনের জন্য মসৃণভাবে কাজ করুন, যুক্ত করার মতো খুব বেশি নয়)। বাহ্যিক .csv ফাইলগুলি পড়ার ক্ষেত্রে, আর এরdata.table
জন্য প্যাকেজটি এমন কোনও ফাংশন সরবরাহ করে যা বিশাল এবং জটিল .csv ফাইলগুলিতে কোনও কাস্টম পার্সিং বিকল্প সহ কোনও সময়ই পড়ে না এবং ফলটি সরাসরি কলামের নাম এবং সারি সংখ্যা সহ ডেটা ফ্রেমে রূপান্তরিত করে।fread
ডেটা ফ্রেমগুলি সংগঠিত করা হচ্ছে
আমরা ডেটাটি কোনও ধরণের টেবিলের মধ্যে সঞ্চয় করতে চাই যাতে আমরা যে কোনও একক প্রবেশ, সারি বা কলাম সহজেই অ্যাক্সেস করতে পারি।
আর প্যাকেজ data.table
, লেবেল নামান্তর, মুছে দিন এবং ডেটা অ্যাক্সেস অপরাজেয় উপায় প্রদান করে। স্ট্যান্ডার্ড সিনট্যাক্সটি এসকিউএল-এর মতো অনেকটা dt[i, j, fun_by]
, যেখানে এটির উদ্দেশ্য dt[where_condition, select_column, grouped_by (or the like)]
; কাস্টম ব্যবহারকারী-সংজ্ঞায়িত ফাংশনগুলি পাশাপাশি সেই j
ধারাটিতে স্থাপন করা যেতে পারে , যাতে আপনি ডেটা ম্যানিপুলেট করতে এবং গ্রুপ বা উপগ্রহে কোনও জটিল বা অভিনব ফাংশন প্রয়োগ করতে সম্পূর্ণ স্বাধীন হন (যেমন আই-থ্রি সারি, কে-থ্রি উপাদানটি যোগ করুন এবং এটিকে (i-1) -th সারির (k-2) -th তম উপাদানের সাথে যোগ করুন এবং কেবলমাত্র যদি পুরো কলামটির মানক বিচ্যুতি যদি এটি হয় তবে সম্পূর্ণ কলাম দ্বারা সম্পূর্ণভাবে শ্রেণিবদ্ধ করা হয়। কটাক্ষপাত আছে benchmarks এবং এই অন্যান্য আশ্চর্যজনক এ তাই প্রশ্ন। কলাম এবং সারিগুলিকে বাছাই, মুছে ফেলা এবং পুনরায় নামকরণ তাদের যা করতে হবে তা করে এবং স্ট্যান্ডার্ড ভেক্টরাইজড আর পদ্ধতিগুলি apply, sapply, lapply, ifelse
প্রতিটি উপাদানকে লুপ না করে পুরোপুরি কলাম এবং ডেটা ফ্রেমে ভেক্টরাইজড ক্রিয়াকলাপ সম্পাদন করে (মনে রাখবেন যে যখনই আপনি আর এ লুপগুলি ব্যবহার করছেন) এটি খারাপভাবে করছেন)।
পাইথনের কাউন্টারওয়েপনটি pandas
গ্রন্থাগার। এটি অবশেষে কাঠামোটি সরবরাহ করে pd.DataFrame
(সেই স্ট্যান্ডার্ড পাইথনের অভাব রয়েছে, কিছু কারণে এখনও আমার অজানা) যা ডেটা তারা যেগুলির জন্য, যেমন ডেটা ফ্রেম (কিছু numpy array, numpy list, numpy matrix
বা কিছু বাদে)) গ্রুপিং, পুনরায় নামকরণ, বাছাইকরণ এবং এর মতো অপারেশনগুলি সহজেই অর্জন করা যায় এবং এখানেও, ব্যবহারকারী পাইথন apply
বা ব্যবহার করে কোনও গ্রুপযুক্ত ডেটাसेट বা ফ্রেমের সাবসেটটিতে যে কোনও কাস্টম ফাংশন প্রয়োগ করতে পারেন lambda
। df[df.iloc(...)]
এন্ট্রিগুলি অ্যাক্সেস করার জন্য আমি ব্যাকরণটি ব্যক্তিগতভাবে অপছন্দ করি তবে এটি কেবল ব্যক্তিগত স্বাদ এবং কোনও সমস্যা নেই। গোষ্ঠীকরণের ক্রিয়াকলাপগুলির মানদণ্ডগুলি আর এর চেয়ে কিছুটা খারাপ এখনও data.table
আপনি সংকলনের জন্য 0.02 সেকেন্ড সংরক্ষণ করতে না চাইলে কার্য সম্পাদনের ক্ষেত্রে কোনও বড় পার্থক্য নেই।
স্ট্রিংস
আর উপায় স্ট্রিং চিকিত্সা ব্যবহার করা stringr
প্যাকেজ যে কোনো টেক্সট ম্যানিপুলেশন, কোনো শব্দ বা শব্দগুচ্ছের অক্ষরগুলিকে এদিক-ওদিক করে গঠিত শব্দ বা শব্দগুচ্ছ , রেগুলার এক্সপ্রেশন পারবেন, সাদা স্পেস বা স্বচ্ছন্দে সঙ্গে অনুরূপ trailing। এটি JSON লাইব্রেরির সাথে মিশ্রণেও ব্যবহার করা যেতে পারে যা JSON অভিধানগুলি আনপ্যাক করে এবং তাদের উপাদানগুলি তালিকাভুক্ত করে, যাতে কোনওের একটি চূড়ান্ত ডেটা ফ্রেম থাকে যেখানে কলামের নাম এবং উপাদানগুলি তাদের হতে হবে, কোনও ইউটিএফ 8 অক্ষর বা সাদা স্থান ছাড়াই without সেখানে.
পাইথনের পান্ডস .str.
নিয়মিত প্রকাশের সাথে খেলতে, পারা অনুসরণ করা বা তার প্রতিযোগী হিসাবে ভাল হিসাবে একই কাজ করে, তাই এখানেও স্বাদের কোনও বড় পার্থক্য নেই।
মডেল প্রয়োগ করা
আমার মতে, এখানে দুটি ভাষার মধ্যে পার্থক্য দেখা দেয়।
আরআজকের মতো গ্রন্থাগারগুলির একটি অপূরণীয় সেট রয়েছে যা ব্যবহারকারীকে এক থেকে দুই লাইনের কোডে প্রয়োজনীয় কিছু করার অনুমতি দেয়। স্ট্যান্ডার্ড ফাংশনাল বা বহুবর্ষীয় রিগ্রেশনগুলি এক-লাইনারে সম্পাদিত হয় এবং আউটপুট উত্পাদন করে যার সহগ সহজেই পঠনযোগ্য হয়, যার সাথে তাদের সম্পর্কিত আস্থা অন্তর এবং পি-মান বিতরণ থাকে। একইভাবে ক্লাস্টারিংয়ের জন্য, একইভাবে এলোমেলো বন মডেলগুলির জন্য, একইভাবে ডেনডোগ্রামগুলির জন্য, মূল উপাদান বিশ্লেষণ, একক মানের পচন, লজিস্টিক ফিট এবং আরও অনেক কিছুর জন্য। উপরের প্রত্যেকটির আউটপুট সম্ভবত একটি নির্দিষ্ট প্লটিং শ্রেণীর সাথে আসে যা আপনি সবেমাত্র যা করেছেন তার চিত্রকল্প তৈরি করে সহগ এবং পরামিতিগুলির জন্য রঙ এবং বুদবুদ। অনুমান পরীক্ষা, পরিসংখ্যান পরীক্ষা, শাপিরো,
পাইথন সঙ্গে যোগাযোগ রাখা চেষ্টা করছে SciPy
এবং scikit-learn
। বেশিরভাগ মানক বিশ্লেষণ এবং মডেলগুলি উপলভ্য, তবে সেগুলি কোডের জন্য কিছুটা দীর্ঘ এবং পড়তে কম স্বজ্ঞাত (আমার মতে)। আরও জটিল মেশিনারিজ অনুপস্থিত, যদিও কিছু ইতিমধ্যে বিদ্যমান লাইব্রেরির সংমিশ্রণে ফিরে পাওয়া যায়। আর এর চেয়ে পাইথনটিতে যে জিনিসটি আমি পছন্দ করি তা হ'ল দ্বি-গ্রাম, ত্রি-গ্রাম এবং উচ্চতর অর্ডার সহ ব্যাগ-অফ-ওয়ার্ড পাঠ্য বিশ্লেষণ।
ফলাফল উপস্থাপন
উভয় ভাষারই সুন্দর ষড়যন্ত্র সরঞ্জাম রয়েছে, ggplot2
সর্বোপরি আর এবং এটি সম্পর্কিত পাইথন সমতুল্য। সত্যিই প্রতিযোগিতা করার মতো তেমন কিছু নয়, তারা কাজটি সুরক্ষিত ও সুরক্ষিত করে, যদিও আমি বিশ্বাস করি যে আপনি যদি ফলাফলগুলি উপস্থাপন করেন তবে আপনাকে অন্যান্য সরঞ্জামগুলি ব্যবহার করতে হতে পারে — সেখানে অভিনব রঙিন নকশার সরঞ্জাম রয়েছে এবং পাইথন বা আর উভয়ই অবাক করা বোঝায় না অভিনব লাল এবং সবুজ টানা এবং ড্রপ সহ শ্রোতা audience আর ই এর ইদানীং এর shiny app
বৈশিষ্ট্যগুলিতে অনেক উন্নতি প্রকাশ করেছে যা মূলত এটি ইন্টারেক্টিভ আউটপুট উত্পাদন করতে দেয় । আমি কখনই এটি শিখতে চাইনি, তবে আমি জানি এটি সেখানে রয়েছে এবং লোকেরা এটি ভালভাবে ব্যবহার করে।
সাইড নোট
পার্শ্ব নোট হিসাবে আমি জোর দিয়ে বলতে চাই যে দুটি ভাষার মধ্যে প্রধান পার্থক্য হ'ল পাইথন হ'ল একটি সাধারণ উদ্দেশ্য প্রোগ্রামিং ল্যাঙ্গেজ যা কম্পিউটার বিজ্ঞান, বহনযোগ্যতা, মোতায়েনকরণ এবং আরও অনেক কিছু দ্বারা তৈরি। এটি কী করে তা অবাক করে এবং শিখতে সোজা হয়; অজগর পছন্দ করে না এমন কেউ নেই। তবে প্রোগ্রামিং করার জন্য এটি প্রোগ্রামিংয়ের ভাষা।
আরঅন্যদিকে, গণিতবিদ, পদার্থবিদ, পরিসংখ্যানবিদ এবং ডেটা বিজ্ঞানীদের দ্বারা এবং এটি আবিষ্কার করা হয়েছিল। আপনি যদি সেই ব্যাকগ্রাউন্ড থেকে আসেন তবে সবকিছুই সঠিক ধারণা দেয় কারণ এটি পরিসংখ্যান এবং গণিতে ব্যবহৃত ধারণাগুলি পুরোপুরি আয়না করে এবং পুনরুত্পাদন করে। তবে, পরিবর্তে, আপনি একটি কম্পিউটার বিজ্ঞানের পটভূমি থেকে এসে জাভা বা সি তে অনুকরণ করতে চান আর আপনি হতাশ হবেন; এটি স্ট্যান্ডার্ড অর্থে "অবজেক্টস" রাখে না (ভাল, এটি করে তবে এটি সাধারণত যা তারা মনে করে তা নয় ...), এটি স্ট্যান্ডার্ড অর্থে ক্লাস নেই (ভাল, এটি করে, তবে সাধারণত যা হয় না তা নয়) তারা মনে করে ...), এর "পয়েন্টার" বা অন্য সমস্ত কম্পিউটার বিজ্ঞানের কাঠামো নেই - তবে কেবল এটির প্রয়োজন হয় না বলে। শেষ কিন্তু সর্বনিম্ন নয়: ডকুমেন্টেশন এবং প্যাকেজগুলি তৈরি করতে এবং পড়ার জন্য সোজা (যদি আপনি রাস্তুডিও ব্যবহার করছেন); সেখানে একটি বিশাল এবং উত্সাহী সম্প্রদায় রয়েছে, এবং গুগলকে "কীভাবে আর-তে কীভাবে সন্নিবেশ-এলোমেলো-সমস্যাটি করবেন" এর অক্ষরে অক্ষরে পাঁচ সেকেন্ড সময় লাগে যার প্রথম এন্ট্রি আপনাকে সংশ্লিষ্ট কোড সহ সমস্যার (অন্য কারো দ্বারা সম্পন্ন) সমাধানে পুনঃনির্দেশ করে ts , কোন সময়।
বেশিরভাগ শিল্প সংস্থাগুলির পাইথন (বা পাইথন-বান্ধব পরিবেশ) এ তাদের অবকাঠামো তৈরি করা হয়েছে যা পাইথন কোডের সহজ সংহতকরণের অনুমতি দেয় (ঠিক import myAnalysis
যে কোনও জায়গায় এবং আপনি মূলত সম্পন্ন করেছেন)। তবে যে কোনও আধুনিক প্রযুক্তি বা সার্ভার বা প্ল্যাটফর্ম সহজেই কোনও সমস্যা ছাড়াই ব্যাকগ্রাউন্ড আর কোড চালায়।