pandas 0.23 - 31. Comparison with Stata

स्टाटा के साथ तुलना




pandas

स्टाटा के साथ तुलना

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

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

जैसा कि प्रथागत है, हम निम्नानुसार पांडा और NumPy आयात करते हैं। इसका मतलब है कि हम पुस्तकालयों को pd और np रूप में संदर्भित कर सकते हैं, क्रमशः, बाकी दस्तावेज़ के लिए।

In [1]: import pandas as pd

In [2]: import numpy as np

ध्यान दें

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

list in 1/5

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

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

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

DataFrame / Series

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

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

Index

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

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

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

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

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

input x y
1 2
3 4
5 6
end

एक पांडा 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 डेटा सेट का उपयोग निम्नलिखित कई उदाहरणों में किया जाएगा।

स्टैट मेमोरी में सेट डेटा में सीएसवी डेटा को पढ़ने के लिए import delimited प्रदान करता है। यदि tips.csv फ़ाइल वर्तमान कार्यशील निर्देशिका में है, तो हम इसे निम्नानुसार आयात कर सकते हैं।

import delimited tips.csv

पांडा विधि 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

import delimited तरह, डेटा को पार्स किया जाना चाहिए यह निर्दिष्ट करने के लिए 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)

पंडों ने .dta डेटा सेट को read_stata() फ़ंक्शन के साथ .dta प्रारूप में भी पढ़ा जा सकता है।

df = pd.read_stata('data.dta')

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

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

Stata में import delimited का व्युत्क्रम export delimited

export delimited tips2.csv

इसी तरह पांडा में, read_csv का विपरीत DataFrame.to_csv()

tips.to_csv('tips2.csv')

पंडों DataFrame.to_stata() साथ Stata फ़ाइल स्वरूप को निर्यात कर सकते हैं DataFrame.to_stata() विधि।

tips.to_stata('tips2.dta')

डेटा संचालन

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

स्टैटा में, मनमाने ढंग से गणित के भावों को नए या मौजूदा स्तंभों पर generate और replace आदेशों के साथ उपयोग किया जा सकता है। drop कमांड डेटा सेट से कॉलम को drop करता है।

replace total_bill = total_bill - 2
generate new_bill = total_bill / 2
drop new_bill

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

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

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

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

In [11]: tips = tips.drop('new_bill', axis=1)

छनन

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

list if total_bill > 10

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

In [12]: tips[tips['total_bill'] > 10].head()
Out[12]: 
   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

यदि / तब तर्क

स्टैटा में, if एक कॉलम का उपयोग नए कॉलम बनाने के लिए भी किया जा सकता है।

generate bucket = "low" if total_bill < 10
replace bucket = "high" if total_bill >= 10

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

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

In [14]: tips.head()
Out[14]: 
   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

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

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

generate date1 = mdy(1, 15, 2013)
generate date2 = date("Feb152015", "MDY")

generate date1_year = year(date1)
generate date2_month = month(date2)

* shift date to beginning of next month
generate date1_next = mdy(month(date1) + 1, 1, year(date1)) if month(date1) != 12
replace date1_next = mdy(1, 1, year(date1) + 1) if month(date1) == 12
generate months_between = mofd(date2) - mofd(date1)

list date1 date2 date1_year date2_month date1_next months_between

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

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

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

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

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

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

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

In [21]: tips[['date1','date2','date1_year','date2_month',
   ....:       'date1_next','months_between']].head()
   ....: 
Out[21]: 
       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

कॉलम का चयन

Stata कॉलम का चयन, ड्रॉप और नाम बदलने के लिए कीवर्ड प्रदान करता है।

keep sex total_bill tip

drop sex

rename total_bill total_bill_2

नीचे के पांडा में समान संचालन व्यक्त किए जाते हैं। ध्यान दें कि स्टाटा के विपरीत, ये ऑपरेशन जगह में नहीं होते हैं। इन परिवर्तनों को जारी रखने के लिए, ऑपरेशन को एक चर पर वापस असाइन करें।

# keep
In [22]: tips[['sex', 'total_bill', 'tip']].head()
Out[22]: 
      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 [23]: tips.drop('sex', axis=1).head()