L
o
a
d
i
n
g
.
.
.

ホーム

お知らせ

製品・ソリューション

サービス

導入事例・パートナー

EXEM Academy・ブログ

会社情報

採用情報

2023.03.15

Time Series 機械学習のためのPython必須ライブラリ、Pandas 1編

2.2  Time Series 機械学習のためのPython必須ライブラリ、Pandas 1編 

Pandasとは

Python Data Analysis Libraryの略語であり、Rをモチーフにして作られたPythonライブラリです簡単で直感的なリレーショナルまたは分類されたデータで作業できるように設計された、高速で柔軟で表現力豊かなデータ構造を提供していますPandasが必要な理由は、Numpyndarrayデータ構造は算術演算作業でフォーマットがよく整理されたデータ型のための機能を提供しているが現実データは思ったより整然としていないからだPandasはデータをテーブル形式で処理することができ、収集されたデータの前処理など、各種データの取り扱いを容易かつ楽にすることができるそのため、データ分析を行うにはPandasも必須です

2.2  シリーズ


リストタプルディクショナリなど複数のオブジェクトを収めることができる1次元配列のようなデータ構造である

2.2.1.1   seriesデータの生成

seriesの場合、複数のデータ型にすることができますが、実習を通じて調べてみましょう。

 1. 辞書でシリーズを作る


ディクショナリのキー値がindexで、value値がcell値に入ったことがわかり、 seriesはディクショナリと構造が似ていると見ることができる。

in [2]:

import pandas as pd
In [3]:
dict_data = {'a':1, 'b':2, 'c':3}
series_data = pd.Series(dict_data)
In [4]:
print(series_data)
Out [5]:
a    1
b    2
c    3
dtype: int64
Pandasの series また Index, value 確認が可能.
In [6]:
print(type(series_data))

Out [7]:

<class 'pandas.core.series.Series'>
In [8]:
print(series_data.index)

Out [9]:

Index(['a', 'b', 'c'], dtype='object')
In [10]:
print(series_data.values)

Out [11]:

[1 2 3]

2. リストにする
リストで作成する場合、辞書とは異なり、key 値がない順序型データ型であるため、インデックスは自動的に 0 から付与される.

In [12]:
list_data = [2,4,6,8]
In [13]:
series_data = pd.Series(list_data)
In [14]:
print(series_data)

Out [15]:

0    2
1    4
2    6
3    8
dtype: int64
In [15]:
print(series_data.index)

Out [17]:

RangeIndex(start=0, stop=4, step=1)
In [18]:
print(series_data.values)

Out [19]:

[2 4 6 8]

タプルの場合でも series で作るときのリストと結果の違いはない。

In [20]:
tuple_data = (2,4,6,8)
In [21]:
series_data = pd.Series(tuple_data)

シリーズデータからdictタイプにも変更が可能.

In [22]:
print(series_data.to_dict())

Out [23]:

{0: 2, 1: 4, 2: 6, 3: 8}

2.2.1.2   辞書のようにインデックスを指定して series オブジェクトを生成する方法

Pandasの場合、indexの値を直接変更できます。

In [24]:

series_data = pd.Series(list_data, index = ['a','b','c','d'])
In [25]:
print(series_data)

Out [26]:

a    2
b    4
c    6
d    8
dtype: int64

2.2.2 Dataframe

Dataframe は 1 つの列が series で多数が集まって dataframe (2 次元) となる。 データフレームで1列しかインポートされない場合は、それはseries(1次元)です。 そして dataframe は表のようなスプレッドシート形式のデータ構造である。

 

2.2.2.1 dataframe 作成

Dataframeもいくつかの方法で作成できます。

1. 辞書にする

辞書の中にあるkey、valueがそれぞれのseriesであり、keyはcolumnの名前になる。

In [27]:
dict_data = {'c0':[1,2,3], 'c1':[4,5,6],'c2':[7,8,9], 'c3':[10,11,12], 'c4':[13,14,15]}
df = pd.DataFrame(dict_data)
In [28]:
print(df)
print(type(df))
Out [29]:
   c0  c1  c2  c3  c4
0   1   4   7  10  13
1   2   5   8  11  14
2   3   6   9  12  15
<class 'pandas.core.frame.DataFrame'>

2. リストにする

リストでデータフレームを作成すると、リストは1行と列になります。
Series と同様に、values プロパティは dataframe に格納されたデータを 2 次元配列として返します。
Dataframeも同様にディクショナリに変更が可能だ。

In [30]:
df = pd.DataFrame([[14,'남'],[17,'여']],
                  index = ['a','b'],
                  columns = ['나이','성별'])
In [31]:
print(df)
print('------')
print(df.index)
print('------')
print(df.values)
print('------')
print(df.to_dict())

Out [32]:

  年齢男女キーエリア都市
a 14南170ソウルソウル
b 17 155分あたり
------
Index(['a', 'b'], dtype='object')
------
[[14「男」「170」「ソウル」「ソウル」]
 [17 '女' '155' '分糖' '分糖']]
------
{'年齢': {'a': 14, 'b': 17}, '男女': {'a': '男', 'b': '女'}, 'キー': {'a': '170 ', 'b': '155'}, '地域': {'a': 'ソウル', 'b': 'ブンダン'}, '都市': {'a': 'ソウル', 'b': 「ブンダン」}}

さらに seriesも同様だが、nameも希望の名前に変更が可能だ。

In [33]:

print(df)
print('------')
print(df.index)
print('------')
print(df.values)
print('------')
print(df.to_dict())

SeriesとDataframeをまとめると、ディクショナリにすることになったときにデータフレームの列を一つずつ積み重ねていく形で、リストで作れば行をひとつずつ積み重ねていく形だと見ることができる。

 

2. dataframe 操作

1. 列を追加する

既存のデータフレームに新しい列を追加することは、大きなデータセットを操作するときによく使用されます。 このとき、リストをデータフレームの行または列に追加するには、サイズ(長さ)が同じでなければならず、そうでなければエラーが発生します。 しかし、Series を追加することになった時は、その index に存在しない場合には欠測値(Nan)が入るようになる。

In [34]:
city = ['ソウル', '分あたり]
df['地域'] = city
In [35]:
print(df)
Out [36]:
   年齢男女キーエリア都市
a  14  M  170  ソウルソウル
b  17  女性  155 毎分
最初のパラメータは0から始まる挿入インデックスです。
In [37]:
df.insert(2,'키',['170','155'])
In [38]:
print(df)

Out [39]:

   年齢 性別 キー エリア
a  14 南 170 ソウル
b  17  155分あたり
長さが等しくないとき,
In [40]:
df['키'] = ['170']

Out [41]:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-52-014fc9cae349> in <module>
----> 1 df['키'] = ['170']

/usr/local/lib/python3.6/site-packages/pandas/core/frame.py in __setitem__(self, key, value)
   3042         else:
   3043             # set column
-> 3044             self._set_item(key, value)
   3045 
   3046     def _setitem_slice(self, key: slice, value):

...
加えて、assign、locでも新しい列を追加することができる。
In [42]:
df = df.assign(도시 = city)
df.loc[:,'도시'] = city
 2. 行列名の変更

どちらもindexオブジェクトです。 簡単に変更するには、数に合わせて指定するだけで簡単に変更できます。
In [43]:
print(df.index)
Out[44]:
Index(['a', 'b'], dtype='object')
In [45]:
df.index = ['c','d']
In [46]:
print(df)
Out [47]:
   年齢 性別 キー 地域 都市
c 14南170ソウルソウル
d 17 155分当たりの毎分

3. Rename()関数の使用

上記の方法のようにするにはリストに渡すので、長さだけ入力をしてくれなければならない。 そのようになったときに長さが合わない、またはインデックスを重複して入れる場合が生じることがあるので、関数を通じて変更するのが良い。 rename(columns={変更前の列名、変更後の列名}、inplace=True)として使用でき、inplace=Trueでオプションを与えれば別に変数に入れずにすぐに適用が可能です。

In [48]:
df.rename(columns={'年齢':'年齢','性別':'男女'}, inplace=True)
In [49]:
print(df)

Out [50]:

   年齢男女キーエリア都市
a 14南170ソウルソウル
b 17 155分あたり

4. Drop() 行を削除
上記のようにindexまたはcolumnsを指定してもよいし、axis = 0 or 1で軸を指定してくれても使うこともできる.

In [51]:
df2 = df.copy()
In [52]:
df2.drop(columns='키', inplace = True)
print(df2)

Out [53]:

   年齢 性別 地域 都市
c 14南ソウル
d 17余分
In [54]:
df2.drop(index='d', inplace = True)
print(df2)
Out [55]:
   年齢 性別 地域 都市
c 14南ソウル

さらにdel予約語を介してdel df[‘列名’または‘インデックス’]にも削除が可能です。

2.2.2.3   条件を追加して抽出してみる

In [56]:
df = pd.DataFrame([[14,'남'],[17,'여'],[24,'남'],[20,'여'],[15,'남'],[21,'여']],
                  index = ['a','b','c','d','e','f'],
                  columns = ['나이','성별'])
In [57]:
print(df)

Out [58]:

   나이 성별
a  14b  17
c  24
d  20
e  15
f  21

ただ条件だけ甘くなれば numpy の mask のように series 型(固定された長さ)で出るようになる.

In [59]:
print(df['나이'] > 20)
Out [60]:
a    False
b    False
c     True
d    False
e    False
f     True
Name: 나이, dtype: bool
対応するブール配列のみを使用して値を除外するには、numpyのように括弧を追加する必要があります。
In [61]:
print(df[df['나이'] > 20])

Out [62]:


PHP Code Snippets Powered By : XYZScripts.com