こんにちは、ぱそきいろです。
年末にFlourishを使ってコロナの都道府県ごとの感染状況を可視化しました。
www.takacpu55.xyz
他にも可視化して遊びたかったのですが、ちょうどいいデータが落ちていなかったので、ソートアルゴリズムを可視化します。
とりあえず扱いやすそうな、バブルソート、選択ソート、挿入ソートを可視化します。
他のソートは後日またアップします。
出来たもの
再生リストを作ったので置いておきます。
www.youtube.com
バブルソート、選択ソート、挿入ソートの要素数10,100のパターンを動画にしております。
(youtubeに動画を挙げるのは割と大変だったけど、その話はまた今度)
コード
ソートのコードはここら辺を参考にさせていただきました。
qiita.com
qiita.com
変えたところはソートの経緯を吐き出すようにしています。
吐き出されたCSVファイルはFlourishで可視化しやすい形になっています。
import random import pandas as pd def bSort(a):#バブルソート temp=0 df=pd.DataFrame() df[temp]="" temp+=1 for i in range(len(a)): for j in range(len(a)-1, i, -1): if a[j] < a[j-1]: a[j], a[j-1] = a[j-1], a[j] df[temp]=a temp+=1 return df def sSort(a):#選択ソート temp=0 df=pd.DataFrame() df[temp]="" temp+=1 for i in range(len(a)-1): mi = a[i:].index(min(a[i:])) a[i], a[i+mi] = a[i+mi], a[i] print(a) df[temp]=a temp+=1 df[temp]=a return df def iSort(a):#挿入ソート temp=0 df=pd.DataFrame() df[temp]="" temp+=1 for i in range(1, len(a)): for j in range(i, 0, -1): if a[j] >= a[j-1]: break else: a[j], a[j-1] = a[j-1], a[j] df[temp]=a temp+=1 df[temp]=a return df def arrayGen(a): retlist=list(range(1,a+1)) random.shuffle(retlist) return retlist if __name__ == '__main__': n=arrayGen(10) barray=bSort(n) barray.to_csv("./data/bubble10.csv",index=False) n=arrayGen(10) sarray=sSort(n) sarray.to_csv("./data/selection10.csv",index=False) n=arrayGen(10) iarray=iSort(n) iarray.to_csv("./data/insertion10.csv",index=False)
CSVファイルをFlourishにアップしたら動画になります。
(設定は適宜見やすいものに変えてください)
app.flourish.studio
まとめ
Flourishを使って遊びたかったけど、なかなかいいデータが見当たらなかったので自分でソートの履歴を作って可視化しました。
何か面白いデータが落ちてたら教えて欲しいです。
以上、ありがとうございました。