初対面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実装
ここのnpに注意してください.arrayのステップ長は小数を取ることができ、Pythonが持っているrangeの中では許可されていません.
np.linspaceは同じ結果を取得します
ここで、0、1、10は、それぞれ、始点、終点、及び分割により得るデータの個数を表す.最後のendpointは、終点が含まれるか否かを表し、デフォルトはTRUE、すなわち含まれる.
間接取得はPythonのlist,tupleなどで配列を取得できるほか,array自体で新しいarrayを構成することもできる.
さらに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、配列の操作
二、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)が使用されます.
1.2指定されたインデックスのSeriesを生成する場合は、次のことができます.
1.3辞書でSeriesオブジェクトを作成することもできます
辞書でSeriesを生成する場合、インデックスを指定することもできます.インデックスの値に対応する辞書の値が存在しない場合、このインデックスの値はMissing,NAとマークされ、関数(pandas.isnull,pandas.notnull)でどのインデックスに対応する値がないかを決定できます.
1.4 Seriesの要素とインデックスにアクセスするには:
2.DataFrameオブジェクトの構築
DataFrameタイプは、行インデックスと列インデックスを含むデータベース・テーブル構造のデータ構造に類似しており、DataFrameを同じインデックスのSeriesからなるDictタイプと考えることができます.その下部には2次元および1次元のデータブロックによって実現される.
2.1等長のリストまたはNumPy配列を含む辞書でDataFrameオブジェクトを作成する
作成時に列の順序を指定できます.
Seriesと同様に、DataFrameもインデックスの内容を指定できます.
2.2.ディクショナリ・タイプからなるネストされたディクショナリ・タイプを使用してDataFrameオブジェクトを生成
ネストされたディクショナリ・タイプによってDataFrameが生成されると、外部のディクショナリ・インデックスがカラム名になり、内部のディクショナリ・インデックスが行名になります.生成されたデータFrameは行インデックスに基づいてソートされます
ロー・インデックスによるデフォルトのソートに加えて、ロー・シーケンスを指定することもできます.
一、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