matplotlibのコードを書かないようにする。

ノンプログラマーのあほコード。

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のコードを書くのはやっぱおかしい気がする。

いやいやそこが問題ではないんでしょうけども・・・。

いかんせん無能すぎて・・・。


Warning: Undefined array key "thumbnail_url" in /home/users/1/boy.jp-rolpop/web/skc/wp-content/themes/godios/inc/schema-org.php on line 49

Warning: Undefined array key "thumbnail_url" in /home/users/1/boy.jp-rolpop/web/skc/wp-content/themes/godios/inc/schema-org.php on line 78