ノンプログラマーのあほコード。
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のコードを書くのはやっぱおかしい気がする。
いやいやそこが問題ではないんでしょうけども・・・。
いかんせん無能すぎて・・・。

コメント