pandas 0.23 - 30. Comparison with SAS

एसएएस के साथ तुलना




pandas

एसएएस के साथ तुलना

SAS से आने वाले संभावित उपयोगकर्ताओं के लिए यह पृष्ठ प्रदर्शित करने के लिए है कि पांडा में अलग-अलग एसएएस ऑपरेशन कैसे किए जाएंगे।

यदि आप पांडा के लिए नए हैं, तो आप लाइब्रेरी से खुद को परिचित करने के लिए पहले 10 मिनट पंडों के माध्यम से पढ़ना चाह सकते हैं।

जैसा कि प्रथागत है, हम निम्नानुसार पांडा और न्यूमपी आयात करते हैं:

In [1]: import pandas as pd

In [2]: import numpy as np

ध्यान दें

इस ट्यूटोरियल के दौरान, DataFrame को df.head() कॉल करके प्रदर्शित किया जाएगा, जो df.head() की पहली एन (डिफ़ॉल्ट 5) पंक्तियों को प्रदर्शित करता है। इसका उपयोग अक्सर इंटरैक्टिव काम में किया जाता है (उदाहरण के लिए ज्यूपिटर नोटबुक या टर्मिनल) - एसएएस में बराबर होगा:

proc print data=df(obs=5);
run;

डेटा संरचनाएं

सामान्य शब्दावली अनुवाद

पांडा एसएएस
DataFrame डेटा सेट
स्तंभ परिवर्तनशील
पंक्ति अवलोकन
समूह द्वारा BY-समूह
NaN .

DataFrame / Series

पांडा में एक DataFrame एसएएस डेटा सेट के अनुरूप है - लेबल कॉलम के साथ एक दो-आयामी डेटा स्रोत जो विभिन्न प्रकार के हो सकते हैं। जैसा कि इस दस्तावेज़ में दिखाया जाएगा, लगभग कोई भी ऑपरेशन जिसे एसएएस के DATA चरण का उपयोग करके डेटा सेट पर लागू किया जा सकता है, पंडों में भी पूरा किया जा सकता है।

एक Series डेटा संरचना है जो एक DataFrame एक कॉलम का प्रतिनिधित्व DataFrame । एसएएस के पास एक एकल स्तंभ के लिए एक अलग डेटा संरचना नहीं है, लेकिन सामान्य तौर पर, Series साथ काम करना DATA चरण में एक कॉलम को संदर्भित करने के लिए अनुरूप है।

Index

प्रत्येक DataFrame और Series में एक Index - जो डेटा की पंक्तियों पर लेबल होता है। एसएएस में बिल्कुल अनुरूप अवधारणा नहीं है। डेटा सेट की पंक्तियाँ अनिवार्य रूप से _N_ , एक अंतर्निहित पूर्णांक सूचकांक के अलावा जो कि DATA चरण ( _N_ ) के दौरान पहुँचा जा सकता है।

पांडा में, यदि कोई सूचकांक निर्दिष्ट नहीं है, तो एक पूर्णांक सूचकांक का उपयोग डिफ़ॉल्ट रूप से भी किया जाता है (पहली पंक्ति = 0, दूसरी पंक्ति = 1, और इसी तरह)। एक लेबल किए गए Index या MultiIndex का उपयोग करते समय परिष्कृत विश्लेषण सक्षम कर सकते हैं और अंततः समझने के लिए पांडा का एक महत्वपूर्ण हिस्सा है, इस तुलना के लिए हम अनिवार्य रूप से Index अनदेखा करेंगे और बस कॉलम के संग्रह के रूप में DataFrame इलाज करेंगे। किसी Index प्रभावी ढंग से उपयोग करने के बारे में कृपया अधिक इंडेक्सिंग प्रलेखन देखें।

डेटा इनपुट / आउटपुट

मानों से एक DataFrame का निर्माण

एक एसएएस डेटा सेट को एक datalines स्टेटमेंट के बाद डेटा को रखकर और कॉलम नामों को निर्दिष्ट करके निर्दिष्ट मूल्यों से बनाया जा सकता है।

data df;
    input x y;
    datalines;
    1 2
    3 4
    5 6
    ;
run;

एक पांडा DataFrame का निर्माण कई अलग-अलग तरीकों से किया जा सकता है, लेकिन बहुत कम मूल्यों के लिए, इसे अक्सर पायथन शब्दकोश के रूप में निर्दिष्ट करना सुविधाजनक होता है, जहां कुंजी स्तंभ नाम होते हैं और मान डेटा होते हैं।

In [3]: df = pd.DataFrame({
   ...:           'x': [1, 3, 5],
   ...:           'y': [2, 4, 6]})
   ...: 

In [4]: df
Out[4]: 
   x  y
0  1  2
1  3  4
2  5  6

बाहरी डेटा पढ़ना

एसएएस की तरह, पांडा कई प्रारूपों के डेटा में पढ़ने के लिए उपयोगिताओं प्रदान करता है। पंडों के परीक्षण ( csv ) के भीतर पाए जाने वाले tips उपयोग निम्नलिखित कई उदाहरणों में किया जाएगा।

एसएएस सीएससी डेटा को डेटा सेट में पढ़ने के लिए PROC IMPORT प्रदान करता है।

proc import datafile='tips.csv' dbms=csv out=tips replace;
    getnames=yes;
run;

पांडा विधि read_csv() , जो इसी तरह काम करती है।

In [5]: url = 'https://raw.github.com/pandas-dev/pandas/master/pandas/tests/data/tips.csv'

In [6]: tips = pd.read_csv(url)

In [7]: tips.head()
Out[7]: 
   total_bill   tip     sex smoker  day    time  size
0       16.99  1.01  Female     No  Sun  Dinner     2
1       10.34  1.66    Male     No  Sun  Dinner     3
2       21.01  3.50    Male     No  Sun  Dinner     3
3       23.68  3.31    Male     No  Sun  Dinner     2
4       24.59  3.61  Female     No  Sun  Dinner     4

PROC IMPORT तरह, read_csv यह निर्दिष्ट करने के लिए कई पैरामीटर ले सकता है कि डेटा कैसे पार्स किया जाना चाहिए। उदाहरण के लिए, यदि डेटा के बजाय टैब सीमांकित किया गया था, और स्तंभ नाम नहीं थे, तो पांडा कमांड होगा:

tips = pd.read_csv('tips.csv', sep='\t', header=None)

# alternatively, read_table is an alias to read_csv with tab delimiter
tips = pd.read_table('tips.csv', header=None)

पाठ / सीएसवी के अलावा, पांडा एक्सेल, एचडीएफ 5 और एसक्यूएल डेटाबेस जैसे कई अन्य डेटा प्रारूपों का समर्थन करते हैं। ये सभी एक pd.read_* फ़ंक्शन के माध्यम से पढ़े जाते हैं। अधिक विवरण के लिए IO प्रलेखन देखें।

डेटा निर्यात करना

SAS में PROC IMPORT का व्युत्क्रम PROC EXPORT

proc export data=tips outfile='tips2.csv' dbms=csv;
run;

इसी तरह पांडा में, read_csv का विपरीत to_csv() , और अन्य डेटा प्रारूप एक समान एपीआई का अनुसरण करते हैं।

tips.to_csv('tips2.csv')

डेटा संचालन

कॉलम पर संचालन

DATA चरण में, नए या मौजूदा कॉलम पर मनमाने ढंग से गणित के भावों का उपयोग किया जा सकता है।

data tips;
    set tips;
    total_bill = total_bill - 2;
    new_bill = total_bill / 2;
run;

पांडा DataFrame में व्यक्तिगत Series को निर्दिष्ट करके इसी तरह के DataFrame संचालन प्रदान करता है। नए कॉलम उसी तरह से असाइन किए जा सकते हैं।

In [8]: tips['total_bill'] = tips['total_bill'] - 2

In [9]: tips['new_bill'] = tips['total_bill'] / 2.0

In [10]: tips.head()
Out[10]: 
   total_bill   tip     sex smoker  day    time  size  new_bill
0       14.99  1.01  Female     No  Sun  Dinner     2     7.495
1        8.34  1.66    Male     No  Sun  Dinner     3     4.170
2       19.01  3.50    Male     No  Sun  Dinner     3     9.505
3       21.68  3.31    Male     No  Sun  Dinner     2    10.840
4       22.59  3.61  Female     No  Sun  Dinner     4    11.295

छनन

एसएएस में फ़िल्टरिंग एक या एक से अधिक कॉलम पर, if या where बयान के साथ किया जाता है।

data tips;
    set tips;
    if total_bill > 10;
run;

data tips;
    set tips;
    where total_bill > 10;
    /* equivalent in this case - where happens before the
       DATA step begins and can also be used in PROC statements */
run;

DataFrames को कई तरीकों से फ़िल्टर किया जा सकता है; सबसे सहज जो बूलियन इंडेक्सिंग का उपयोग कर रहा है

In [11]: tips[tips['total_bill'] > 10].head()
Out[11]: 
   total_bill   tip     sex smoker  day    time  size
0       14.99  1.01  Female     No  Sun  Dinner     2
2       19.01  3.50    Male     No  Sun  Dinner     3
3       21.68  3.31    Male     No  Sun  Dinner     2
4       22.59  3.61  Female     No  Sun  Dinner     4
5       23.29  4.71    Male     No  Sun  Dinner     4

यदि / तब तर्क

SAS में, यदि / तो तर्क का उपयोग नए कॉलम बनाने के लिए किया जा सकता है।

data tips;
    set tips;
    format bucket $4.;

    if total_bill < 10 then bucket = 'low';
    else bucket = 'high';
run;

पांडा में एक ही ऑपरेशन को numpy से विधि का उपयोग करके पूरा किया जा सकता है।

In [12]: tips['bucket'] = np.where(tips['total_bill'] < 10, 'low', 'high')

In [13]: tips.head()
Out[13]: 
   total_bill   tip     sex smoker  day    time  size bucket
0       14.99  1.01  Female     No  Sun  Dinner     2   high
1        8.34  1.66    Male     No  Sun  Dinner     3    low
2       19.01  3.50    Male     No  Sun  Dinner     3   high
3       21.68  3.31    Male     No  Sun  Dinner     2   high
4       22.59  3.61  Female     No  Sun  Dinner     4   high

तिथि कार्यशीलता

SAS विभिन्न प्रकार के कार्य प्रदान करता है जैसे दिनांक / डेटाटाइम कॉलम पर संचालन करना।

data tips;
    set tips;
    format date1 date2 date1_plusmonth mmddyy10.;
    date1 = mdy(1, 15, 2013);
    date2 = mdy(2, 15, 2015);
    date1_year = year(date1);
    date2_month = month(date2);
    * shift date to beginning of next interval;
    date1_next = intnx('MONTH', date1, 1);
    * count intervals between dates;
    months_between = intck('MONTH', date1, date2);
run;

समकक्ष पांडा संचालन नीचे दिखाए गए हैं। इन कार्यों के अलावा पांडा बेस एसएएस (जैसे कि रिसमलिंग और कस्टम ऑफ़सेट) में उपलब्ध नहीं अन्य टाइम सीरीज़ सुविधाओं का समर्थन करता है - अधिक विवरण के लिए टाइमसीज़ प्रलेखन देखें।

In [14]: tips['date1'] = pd.Timestamp('2013-01-15')

In [15]: tips['date2'] = pd.Timestamp('2015-02-15')

In [16]: tips['date1_year'] = tips['date1'].dt.year

In [17]: tips['date2_month'] = tips['date2'].dt.month

In [18]: tips['date1_next'] = tips['date1'] + pd.offsets.MonthBegin()

In [19]: tips['months_between'] = (tips['date2'].dt.to_period('M') -
   ....:                           tips['date1'].dt.to_period('M'))
   ....: 

In [20]: tips[['date1','date2','date1_year','date2_month',
   ....:       'date1_next','months_between']].head()
   ....: 
Out[20]: 
       date1      date2  date1_year  date2_month date1_next months_between
0 2013-01-15 2015-02-15        2013            2 2013-02-01             25
1 2013-01-15 2015-02-15        2013            2 2013-02-01             25
2 2013-01-15 2015-02-15        2013            2 2013-02-01             25
3 2013-01-15 2015-02-15        2013            2 2013-02-01             25
4 2013-01-15 2015-02-15        2013            2 2013-02-01             25

कॉलम का चयन

SAS स्तंभों को चुनने, छोड़ने और नाम बदलने के लिए DATA चरण में कीवर्ड प्रदान करता है।

data tips;
    set tips;
    keep sex total_bill tip;
run;

data tips;
    set tips;
    drop sex;
run;

data tips;
    set tips;
    rename total_bill=total_bill_2;
run;

नीचे के पांडा में समान संचालन व्यक्त किए जाते हैं।

# keep
In [21]: tips[['sex', 'total_bill', 'tip']].head()
Out[21]: 
      sex  total_bill   tip
0  Female       14.99  1.01
1    Male        8.34  1.66
2    Male       19.01  3.50
3    Male       21.68  3.31
4  Female       22.59  3.61

# drop
In [22]: tips.drop('sex', axis=1).head()