Paythonにはデータの分析を行うのに利用できるライブラリに「Pandas」があります。
この「Pandas」は非常に多くの機能を持っており強力なライブラリなのですが、返ってやりたいことがぱっと見でわかりにくく面もあります。
今回はsqlite3データベースから取得したデータをPandasのDataFrameを使って行と列(縦横)変換を行って表示する方法について解説します。
Pandasとはプログラミング言語Pythonにおいて、データ解析を支援する機能を提供するライブラリのこと。
PandasのDataFrameを使って行列(縦横)変換を行う
PandasのDataFrameを使って行列(縦横)変換を行うには「T」属性(アトリビュート)を利用します。
使い方は簡単です。
PandasのDataFrameの通常表示
まずは普通にsqlite3のデータをSELECTして表示する方法です。
import sqlite3
import pandas as pd
#SELECTするためにインメモリーデータベースにデータを保存する
conn = sqlite3.connect( ":memory:" )
conn.execute( "CREATE TABLE personal_data( name TEXT, height INTEGER, weight INTEGER, waist INTEGER )" )
conn.execute( "INSERT INTO personal_data VALUES ( '山田太郎', 175, 120, 130 )" )
conn.execute( "INSERT INTO personal_data VALUES ( '岩鬼正美', 190, 100, 110 )" )
conn.execute( "INSERT INTO personal_data VALUES ( '殿馬一人', 165, 70, 75 )" )
conn.execute( "INSERT INTO personal_data VALUES ( '土井垣将', 185, 90, 105 )" )
#sqlite3のSELECTした結果をPandasのDataFrameに設定する
df = pd.DataFrame(
conn.execute( "SELECT name, height, weight, waist FROM personal_data" ).fetchall()
,columns=['名前', '身長', '体重', 'ウエスト']
)
print( "n*****通常の表示*****" )
print( df )
conn.close()
PandasのDataFrameにSQLでの実行結果を渡しています。
実行結果は
*****通常の表示*****
名前 身長 体重 ウエスト
0 山田太郎 175 120 130
1 岩鬼正美 190 100 110
2 殿馬一人 165 70 75
3 土井垣将 185 90 105
のようになります。
PandasのDataFrameの行列(縦横)変換表示
次に「DataFrameのT属性(アトリビュート)」にアクセスして行列(縦横)変換表示を行います。
import sqlite3
import pandas as pd
#SELECTするためにインメモリーデータベースにデータを保存する
conn = sqlite3.connect( ":memory:" )
conn.execute( "CREATE TABLE personal_data( name TEXT, height INTEGER, weight INTEGER, waist INTEGER )" )
conn.execute( "INSERT INTO personal_data VALUES ( '山田太郎', 175, 120, 130 )" )
conn.execute( "INSERT INTO personal_data VALUES ( '岩鬼正美', 190, 100, 110 )" )
conn.execute( "INSERT INTO personal_data VALUES ( '殿馬一人', 165, 70, 75 )" )
conn.execute( "INSERT INTO personal_data VALUES ( '土井垣将', 185, 90, 105 )" )
#sqlite3のSELECTした結果をPandasのDataFrameに設定する
df = pd.DataFrame(
conn.execute( "SELECT name, height, weight, waist FROM personal_data" ).fetchall()
,columns=['名前', '身長', '体重', 'ウエスト']
)
print( "n*****行列(縦横)変換の表示*****" )
print( df.T )
conn.close()
上記のソースの「df.T」が行列(縦横)変換している部分です。
ってこれだけですか?
そう、これだけ。簡単ですね。
実行結果は
*****行列(縦横)変換の表示*****
0 1 2 3
名前 山田太郎 岩鬼正美 殿馬一人 土井垣将
身長 175 190 165 185
体重 120 100 70 90
ウエスト 130 110 75 105
になります。
まとめ
SQLだけでやろうと思えばちょっとしたテクニックが必要なデータの行列(縦横)表示ですが、PandasのDataFrameを使うと「df.T」と「T」をつけるだけで行列(縦横)表示ができちゃいます。
以上、PythonのPandasのDataFrameを使って行と列の変換を行う方法でした。
