初対面numpyとPandas

6705 ワード

データ解析と科学計算の分野ではNumPyが非常に重要な地位を占めている.NumPyによりPythonは多次元配列を操作する機能を備え,効率が高い.pandasはPythonを用いたデータ解析に欠かせないパッケージで、NumPyライブラリの上に構築されており、データを柔軟に操作するために多くの専門的な方法が提供されており、非常に便利です.やるべきことの中でデータの処理と分析が必要なので、NumPyとPandasの勉強の旅を始めました.ここでは私が勉強した内容だけを紹介します.NumPyとPandasの常用ライブラリの詳細については、参考にしてください.https://www.cnblogs.com/prpl/p/5537417.html公式マニュアルと.
一、NumPy基本操作
1、配列の作成
配列を取得する方法は、直接取得と間接取得に分けられます.
NumPyを利用する専門的に提供できる関数npを直接取得する.arangeとnp.linspace実装
In : narr=np.arange(0,10,1)

In : narr

out : arange([0,1,2,3,4,5,6,7,8,9])

ここのnpに注意してください.arrayのステップ長は小数を取ることができ、Pythonが持っているrangeの中では許可されていません.
np.linspaceは同じ結果を取得します
In : narr = np.linspace(0,1,10,endpoint=False)

In : narr

Out : array([0\.,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9])

ここで、0、1、10は、それぞれ、始点、終点、及び分割により得るデータの個数を表す.最後のendpointは、終点が含まれるか否かを表し、デフォルトはTRUE、すなわち含まれる.
間接取得はPythonのlist,tupleなどで配列を取得できるほか,array自体で新しいarrayを構成することもできる.
In:import NumPy as np
In:narr = np.array([1,2,3])
In:narr
out:array([1,2,3])
In:narr = np.array((1,2,3))
In:narr
Out:array([1,2,3])
In:narr=np.array([[1,2,3],[4,5,6]])
In:narr
Out:
array([[1,2,3]
       [4,5,6]])
In:narr=np.array([(1,2,3),(4,5,6)])
In:narr
Out:
array([[1,2,3]
       [4,5,6]])
In:narr=np.array(((1,2,3),(4,5,6)))
In:narr
Out:
array([[1,2,3]
       [4,5,6])
In:narr1=np.array([1,2,3])
In:narr2=np.array([4,5,6])
In:narr=np.array([narr1,narr2])
In:narr
Out:
array([[1,2,3]
      [4,5,6]])

さらにNumPyには、特殊な数を設定する関数が組み込まれています.
np.zeros((2,3))
np.ones((2,3))
np.eye(3)
2、配列属性
共通プロパティshape、dtype(データ型の表示と配列タイプの定義)はprint(np.sctypeDict)で表示できます.
np.ones((3,5)).shape#配列の形状を記述
np.ones((3,5)).配列の形状を変更するreshape#
3、配列の操作
In:na=np.arange(10)
In:na
Out:array([0,1,2,3,4,5,6,7,8,9])
In:na[0]
#[]     0,         ,         
Out:0
In:na[[0,1,2,3,4]]
#[]     [0,1,2,3,4]     1,2,3,4,5   ,        (array  ),         。
Out:array([0,1,2,3,4])
In:na[1:10]
Out:array([1,2,3,4,5,6,7,8,9])
In:na[1:10:2]
Out:array([1,3,5,7,9])

二、pandas
pandasは大きく3つのデータ構造に分けられる:1次元のSeries、2次元のDataFrame、および3次元のPanel.現在、私が勉強しているのは主にSeriesとDataFrameのデータの選択、フィルタリングなどの操作です.このほか、Pandasはseabornと+atplotlibと協力して強力な可視化機能を実現することもできます.
1、Series
Seriesはクラス配列のデータ構造であり、ラベル(lable)またはインデックス(index)が付いている.
1.1下に最も単純なSeriesオブジェクトが生成されます.Seriesにインデックスが指定されていないため、デフォルトのインデックス(0からN-1)が使用されます.
#   Series DataFrame
In [16]: from pandas import Series,DataFrame
In [17]: import pandas as pd

In [18]: ser1 = Series([1,2,3,4])

In [19]: ser1
Out[19]: 
0    1
1    2
2    3
3    4
dtype: int64

1.2指定されたインデックスのSeriesを生成する場合は、次のことができます.
#  index    list
In [23]: ser2 = Series(range(4),index = ["a","b","c","d"])

In [24]: ser2
Out[24]: 
a    0
b    1
c    2
d    3
dtype: int64

1.3辞書でSeriesオブジェクトを作成することもできます
In [45]: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}

In [46]: ser3 = Series(sdata)
#     ,      Series  index   
In [47]: ser3
Out[47]: 
Ohio      35000
Oregon    16000
Texas     71000
Utah       5000
dtype: int64

辞書でSeriesを生成する場合、インデックスを指定することもできます.インデックスの値に対応する辞書の値が存在しない場合、このインデックスの値はMissing,NAとマークされ、関数(pandas.isnull,pandas.notnull)でどのインデックスに対応する値がないかを決定できます.
In [48]: states = ['California', 'Ohio', 'Oregon', 'Texas']

In [49]: ser3 = Series(sdata,index = states)

In [50]: ser3
Out[50]: 
California        NaN
Ohio          35000.0
Oregon        16000.0
Texas         71000.0
dtype: float64
#        
In [51]: pd.isnull(ser3)
Out[51]: 
California     True
Ohio          False
Oregon        False
Texas         False
dtype: bool

In [52]: pd.notnull(ser3)
Out[52]: 
California    False
Ohio           True
Oregon         True
Texas          True
dtype: bool

1.4 Seriesの要素とインデックスにアクセスするには:
#      "a"   
In [25]: ser2["a"]
Out[25]: 0
#      "a","c"   
In [26]: ser2[["a","c"]]
Out[26]: 
a    0
c    2
dtype: int64
#       
In [27]: ser2.values
Out[27]: array([0, 1, 2, 3])
#        
In [28]: ser2.index
Out[28]: Index([u'a', u'b', u'c', u'd'], dtype='object')

2.DataFrameオブジェクトの構築
DataFrameタイプは、行インデックスと列インデックスを含むデータベース・テーブル構造のデータ構造に類似しており、DataFrameを同じインデックスのSeriesからなるDictタイプと考えることができます.その下部には2次元および1次元のデータブロックによって実現される.
2.1等長のリストまたはNumPy配列を含む辞書でDataFrameオブジェクトを作成する
In [68]: import pandas as pd

In [69]: from pandas import Series,DataFrame

#              
In [70]:  data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],'year': [2000, 2001, 20
    ...: 02, 2001, 2002],'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
In [71]: data
Out[71]: 
{'pop': [1.5, 1.7, 3.6, 2.4, 2.9],
 'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
 'year': [2000, 2001, 2002, 2001, 2002]}
#   DataFrame  
In [72]: frame1 = DataFrame(data)
#             
In [73]: frame1
Out[73]: 
   pop   state  year
0  1.5    Ohio  2000
1  1.7    Ohio  2001
2  3.6    Ohio  2002
3  2.4  Nevada  2001
4  2.9  Nevada  2002

作成時に列の順序を指定できます.
In [74]: frame1 = DataFrame(data,columns=['year', 'state', 'pop'])

In [75]: frame1
Out[75]: 
   year   state  pop
0  2000    Ohio  1.5
1  2001    Ohio  1.7
2  2002    Ohio  3.6
3  2001  Nevada  2.4
4  2002  Nevada  2.9

Seriesと同様に、DataFrameもインデックスの内容を指定できます.
In [76]: ind = ['one', 'two', 'three', 'four', 'five']
In [77]: frame1 = DataFrame(data,index = ind)

In [78]: frame1
Out[78]: 
       pop   state  year
one    1.5    Ohio  2000
two    1.7    Ohio  2001
three  3.6    Ohio  2002
four   2.4  Nevada  2001
five   2.9  Nevada  2002

2.2.ディクショナリ・タイプからなるネストされたディクショナリ・タイプを使用してDataFrameオブジェクトを生成
ネストされたディクショナリ・タイプによってDataFrameが生成されると、外部のディクショナリ・インデックスがカラム名になり、内部のディクショナリ・インデックスが行名になります.生成されたデータFrameは行インデックスに基づいてソートされます
In [84]: pop = {'Nevada': {2001: 2.4, 2002: 2.9},'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}

In [85]: frame3 = DataFrame(pop)

In [86]: frame3
Out[86]: 
      Nevada  Ohio
2000     NaN   1.5
2001     2.4   1.7
2002     2.9   3.6

ロー・インデックスによるデフォルトのソートに加えて、ロー・シーケンスを指定することもできます.
In [95]: frame3 = DataFrame(pop,[2002,2001,2000])

In [96]: frame3
Out[96]: 
      Nevada  Ohio
2002     2.9   3.6
2001     2.4   1.7
2000     NaN   1.5