pythonによる紳士達の性癖分析:データフレーム編


配列→データフレームへの移行

  • 前の記事で生成したTagMatrix.csvは二次元配列ベースだった。
    • それでダメということはないが、せっかくpythonを使っているのなら「データフレーム」に移行してみよう。
  • 二次元配列生成した後、同一の内容を保持してデータフレームを生成する。

前回までのコードに付け足す

  • 前回作成したコードの末尾へ以下の処理を付け足す。
# :
# (前略)
# :
# 頻出の組み合わせを出力
for rq in ranq :
    print(rq["val"], rq["x"], rq["y"])

# 配列→DataFrame化
list_df = pd.DataFrame( columns=tags )

# enumerateでiを進めながらxを使用できる。
for i, x in enumerate(tags):
    # TagMatrixから一行作り、DataFrameに追加することを繰り返す。
    tmp_se = pd.Series( tagMatrix[x], index=list_df.columns, name=tags[i] )
    list_df = list_df.append( tmp_se )
print( list_df.head() )

# 行(横軸)の抽出
print(list_df.iloc[3:6, :])
# 列(縦軸)の抽出
print(list_df.iloc[:, 3:6].head())
# タグを指定しての列の抽出
tgtLine = ['陵辱', '逆転無し']
print(list_df[tgtLine].head())

# 縦軸で平均算出
print(list_df.mean(axis = 0))
# 横軸で合計値算出
print(list_df.sum(axis = 1))

# 平均
list_df.to_csv("FromDM.csv")
  • 基本的には「二次元配列から一行取得→データフレームへ一行append」の流れになるかと思われる。
  • 今回は数学的な行列ではないので算術系の処理はあまり重要でもないだろうが、平均値や合算値を出すことも可能。頭の片隅には置いといた方がよさそう。
    • 簡単にCSV出力できるのは便利かと思う。
    • 関数一つで上半分にしたりできるのだろうか?
  • 二次元配列から出力したCSV・データフレームから出力したCSVでdiffを取る。
  • ヘッダの空白欄がnullか'-'かの違いはあるが、それ以外は結果が一致していることを確認。 ### 参考記事
  • https://qiita.com/567000/items/d8a29bb7404f68d90dd4
  • https://note.nkmk.me/python-pandas-assign-append/
  • https://stats.biopapyrus.jp/python/dataframe.html