ノンプログラマーのあほコード。
matplotlibの問題点
- 作りたいグラフに応じてコードを書く必要がある
- 用意したデータが全てのグラフで共通で使えるかというと・・・。
- メソッドの使いまわしもむずかしい
こういうことを問題点としてあげている時点でオワコンですが。
matplotlibのコードを書かないようにする
ひとまず動きますが、クソコードです。意味のない可視化です。もっと改良する必要があります。
import os import pandas as pd import matplotlib.pyplot as plt # リストの作成 def create_list(): _x = [] _y = [] while True: x = input("x?: / exit!!! (exit) /") if x == "exit": break else: try: _x.append(int(x)) [print(x) for x in _x] except: print("String can not be converted to int") while True: y = input("y?: / exit!!! (exit) /") if y == "exit": break else: try: _y.append(int(y)) [print(y) for y in _y] except: print("String can not be converted to int") print("xlist") print(_x) print("ylist") print(_y) return _x, _y # csvファイルの選択 def select_csv(): os.chdir("C:\\users\\xxxxxx\\desktop") csv_file_list = [file for file in os.listdir() if os.path.isfile(file) and file.endswith('.csv')] csv_dic = {} for i in range(0, len(csv_file_list)): csv_dic[i] = csv_file_list[i] print("\n") [print(str(k) + ": " + v) for k, v in csv_dic.items()] print("\n") while True: try: csv_num = input("please select csv_number?: / exit!!!(exit) /") print("exit?: / exit!!! (exit) /") if csv_num == "exit": break else: return csv_dic[int(csv_num)] except: print("something seems strange" + "\n") # 表示だけ def print_matplot_method(): print("\n") print("1: virtical_barchart :") print("2: horizonta_barchart :") print("3: scatter :") print("4: plot_line ") print("5: pie :") print("7: exit :") print("\n") # -- ここから matlib 系の関数 def virtical_barchart(x_y_data): plt.bar(x_y_data[0], x_y_data[1]) plt.show() def horizonta_barchart(x_y_data): plt.barh(x_y_data[0], x_y_data[1]) plt.show() def scatter(x_y_data): plt.scatter(x_y_data[0], x_y_data[1]) plt.show() def plot_line(x_y_data): plt.plot(x_y_data[0], x_y_data[1]) plt.show(x_y_data) def pie(x_y_data): plt.pie(x_y_data[1], labels = x_y_data[0], autopct = '%1.1f%%',startangle = 90) plt.show() while True: data = input("select data? / list(list) csv(csv) exit!!!(exit) / ") if data == "exit": break print_matplot_method() number = input("please select proguram_number? / exit !!! (exit) /: ") if number == "1": if data == "list": list_x_y_data = list(create_list()) virtical_barchart(list_x_y_data) elif data == 'csv': df = pd.read_csv(select_csv()) csv_x_y_data = [list(df.iloc[:, 0]), list(df.iloc[:, 1])] virtical_barchart(csv_x_y_data) if number == "2": if data == "list": list_x_y_data = list(create_list()) horizonta_barchart(list_x_y_data) elif data == 'csv': df = pd.read_csv(select_csv()) csv_x_y_data = [list(df.iloc[:, 0]), list(df.iloc[:, 1])] horizonta_barchart(csv_x_y_data) if number == "3": if data == "list": list_x_y_data = list(create_list()) scatter(list_x_y_data) elif data == 'csv': df = pd.read_csv(select_csv()) csv_x_y_data = [list(df.iloc[:, 0]), list(df.iloc[:, 1])] scatter(csv_x_y_data) if number == "4": if data == "list": list_x_y_data = list(create_list()) plot_line(list_x_y_data) elif data == 'csv': df = pd.read_csv(select_csv()) csv_x_y_data = [list(df.iloc[:, 0]), list(df.iloc[:, 1])] plot_line(csv_x_y_data) if number == "5": if data == "list": list_x_y_data = list(create_list()) pie(list_x_y_data) elif data == 'csv': df = pd.read_csv(select_csv()) csv_x_y_data = [list(df.iloc[:, 0]), list(df.iloc[:, 1])] pie(csv_x_y_data) if number == "exit": print("ByeBye!!!") break
デスクトップにいると仮定します。「自分でリストを作るか、csvデータを選ぶか」を選択します。次にどのグラフを使うか選択します。
csvを選んだ場合は、デスクトップにあるcsvファイルがリストアップされますので、どのファイルを使うか選択します
listを選んだ場合は自分でリストを作ります。
ほんとうはlistかcsvを選んだら、先にそっちのプログラムを動かすべきなのですが、先にどのグラフを使うか選択するようになっています。作っている途中でめんどくさくなり投げたってやつです。
コードに柔軟性がまったくないので、コードにあったデータを用意しないとエラーになります。
雑感
なにかのグラフが見たいとなったときに、matplotlibのコードを書くのはやっぱおかしい気がする。
いやいやそこが問題ではないんでしょうけども・・・。
いかんせん無能すぎて・・・。
コメント