কীভাবে অভিন্ন মানগুলি গোষ্ঠীভুক্ত করবেন এবং পাইথনে তাদের ফ্রিকোয়েন্সি গণনা করবেন?


10

পাইথনের সাথে বিশ্লেষণে নবজাতক তাই দয়া করে নম্র হন :-) আমি এই প্রশ্নের উত্তর খুঁজে পাই না - যদি ইতিমধ্যে অন্য কোথাও অন্য কোনও ফর্ম্যাটে উত্তর দেওয়া হয় তবে ক্ষমা চাই।

খুচরা আউটলেটের জন্য আমার কাছে লেনদেনের ডেটাসেট রয়েছে। ব্যাখ্যা সহ চলকগুলি হ'ল:

  • বিভাগ: স্টোরের বিভাগ, একটি স্ট্রিং;
  • প্রোড_নাম: পণ্যের নাম, একটি স্ট্রিং;
  • প্রাপ্তি: চালানের সংখ্যা, একটি int;
  • ক্যাশিয়ার, ক্যাশিয়ারের সংখ্যা, একটি আন্ত;
  • ব্যয়: আইটেমের দাম, একটি ভাসা;
  • তারিখ, এমএম / ডিডি / ওয়াই ওয়াই ফর্ম্যাটে;
  • সময়, ফর্ম্যাটে এইচ এইচ: এমএম: এসএস, একটি স্ট্রেট;

একক লেনদেনে কেনা সমস্ত পণ্যের জন্য রশিদের সমান মূল্য থাকে, সুতরাং এটি একটি একক লেনদেনে কেনা ক্রয়ের গড় সংখ্যা নির্ধারণ করতে ব্যবহার করা যেতে পারে।

এটি সম্পর্কে সবচেয়ে ভাল উপায় কি? আমি মূলত groupby()তার নিজস্ব অভিন্ন ঘটনাগুলি দ্বারা রসিদ ভেরিয়েবলকে গোষ্ঠী হিসাবে ব্যবহার করতে চাই যাতে আমি একটি হিস্টোগ্রাম তৈরি করতে পারি।

একটি পান্ডাস ডেটা ফ্রেমে ডেটা নিয়ে কাজ করা।

সম্পাদনা করুন:

শিরোনাম সহ কিছু নমুনা ডেটা এখানে দেওয়া হয়েছে (প্রোড_নামটি আসলে একটি হেক্স নম্বর):

 section,prod_name,receipt,cashier,cost,date,time 
 electronics,b46f23e7,102856,5,70.50,05/20/15,9:08:20 
 womenswear,74558d0d,102857,8,20.00,05/20/15,9:12:46 
 womenswear,031f36b7,102857,8,30.00,05/20/15,9:12:47 
 menswear,1d52cd9d,102858,3,65.00,05/20/15,9:08:20 

এই নমুনা সেট থেকে আমি প্রাপ্তির একটি হিস্টোগ্রাম প্রত্যাশা করব যা প্রাপ্তির দুটি ঘটনা দেখায় 102857 (যেহেতু সেই ব্যক্তি একটি লেনদেনে দুটি আইটেম কিনেছিলেন) এবং প্রাপ্তির যথাক্রমে 102856 এবং রসিদ 102858 রয়েছে Note দ্রষ্টব্য: আমার ডেটাসেটটি বিশাল নয়, প্রায় 1 মিলিয়ন সারি।


সম্পন্ন, কিছু নমুনা ডেটা যুক্ত।
new_analyst

উত্তর:


15

এই নমুনা সেট থেকে আমি প্রাপ্তির একটি হিস্টোগ্রাম প্রত্যাশা করব যা প্রাপ্তির দু'টি ঘটনা 102857 দেখায় (যেহেতু সেই ব্যক্তি একটি লেনদেনে দুটি আইটেম কিনেছিলেন) এবং প্রাপ্তির যথাক্রমে 102856 এবং প্রাপ্তি 102858 প্রাপ্তির একটি ঘটনা।

তারপরে আপনি চান:

df.groupby ( 'প্রাপ্তি')। receipt.count ()

receipt
102856    1
102857    2
102858    1
Name: receipt, dtype: int64

যেহেতু ফলাফলটি আর ডেটাফ্রেম নয়, কেবলমাত্র 1 টিরও বেশি গণনা রয়েছে এমন মানগুলি দেখানোর জন্য আমরা কীভাবে এটি ফিল্টার করব?
নিখিল ভিজে

1
আপনি এখনও এর মতো জিনিসগুলি করতে পারেন s[s>1]যেখানেs=df.groupby('receipt').receipt.count()
এমরে

2

আমি ডেটা র্যাংলিংয়ের চারপাশে কয়েকটি টিউটোরিয়াল একসাথে রাখছি। গিথুবটিতে আমার জ্যুপির নোটবুকটি সাহায্য করবে। আমি মনে করি যে এটিই কীটি লাইনটি সংশোধন করছে:

df.groupby('male')['age'].mean()

হতে:

df.groupby('reciept')['prod_name'].count()

একাধিক ভেরিয়েবল দ্বারা দলবদ্ধ করার জন্য এটি কাজ করা উচিত:

df.groupby(['reciept','date'])['reciept'].count()

তার জন্য ধন্যবাদ. তবে, কখনও কখনও প্রাপ্তি পুনরাবৃত্তি হয় (যখন তারিখটিও আলাদা হয়)। অতএব, আমরা প্রাপ্ত তারিখের সমস্ত প্রাপ্তিগুলি বিভিন্ন তারিখে একত্রিত করছি, যখন আমরা সত্যিকার অর্থে লেনদেনের মাধ্যমে প্রাপ্তির সংখ্যা জানতে চাই - তবে কোনও অনন্য লেনদেনের আইডি ভেরিয়েবল নেই। আমি মনে করি না যে একই দিনে প্রাপ্তি পুনরাবৃত্তি হয় - আমরা কি তারিখকে গ্রুপের উপায় হিসাবে ব্যবহার করতে পারি? df.groupby('reciept')['date'].count()হিসাবে একই ফলাফল দেয়df.groupby('reciept')['prod_name'].count()
new_analyst

গ্রুপবাই কলের মধ্যে প্যারামিটার হিসাবে তারিখ যুক্ত করুন। উপরে আমার উত্তর একাধিক ওয়ার দ্বারা গোষ্ঠীতে সম্পাদিত।
রায়ান

0

আমি যা বুঝতে পারি তা থেকে আপনার রসিদ নংয়ের একটি হিস্টোগ্রামের প্রয়োজন হবে। আপনি এরকম কিছু চেষ্টা করতে পারেন

import pandas as pd data = np.read_csv("your_file_path.csv") data.groupby(["receipt"])receipt.count().sort_values(ascending=False).head(20).plot.bar()

এটি আপনাকে বেশিরভাগ পুনরাবৃত্তি বিলিং নম্বরগুলির বার প্লট দেবে (20 টি পুনরাবৃত্তি করা) কম বেশি পেতে মাথা ফাংশনে নম্বরটি পরিবর্তন করুন।

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