以下のような風配図を作成しています。風向の割合と風速の割合を同時に表示できる風配図です。
読み込みたいデータの例
295.6,122 270,98 321.3,132 350.7,159 317.3,203 338.4,254 316.1,301 270,342 101.3,239 324,221 60.9,210 331.7,198 358.6,140 12.9,149 252.6,117 300.3,114 286.4,118 78.7,115 86.2,115 0,104
現在作っているプログラムの流れ
以上のようなデータ(1列目が角度、2列目が速度)を読み込み、
①角度を読み込みそれに対応する速度を16方位のリストに分割し、各方位のリストの個数から風向の頻度を求める
②振り分けられた速度をさらに速度ごとに分割する作業を16方位分行い、各速度のリストの個数から風速の頻度を求める
③求めた風速、風向の頻度からグラフを作成する
という流れでプログラムを作成中ですが、①と②の過程に関してただでさえ長くなってしまうリスト化の作業を何回も繰り返すことになってしまい非常に効率が悪いため、②の途中で行き詰まっています。
以下のプログラムでいう
#読み込んだデータを16方位に分ける
#風速を9段階に分ける
の部分で、効率のいい振り分け作業などがあれば教えていただきたいです。
python未経験者で、簡単なコードを利用しゴリ押しでプログラムを作成しているため、非常に効率の悪く見苦しいプログラムになっていますのでご了承ください。
グラフ作成の部分に関してはとりあえずで出力しているだけなので、スルーしてください
該当のソースコード
python
1################################################################################ 2 3import numpy as np 4import matplotlib.pyplot as plt 5 6################################################################################ 7 8#リスト作成(16の方位に分けるため) 9list01 = list() 10list01 = [] 11list02 = list() 12list02 = [] 13list03 = list() 14list03 = [] 15list04 = list() 16list04 = [] 17list05 = list() 18list05 = [] 19list06 = list() 20list06 = [] 21list07 = list() 22list07 = [] 23list08 = list() 24list08 = [] 25list09 = list() 26list09 = [] 27list10 = list() 28list10 = [] 29list11 = list() 30list11 = [] 31list12 = list() 32list12 = [] 33list13 = list() 34list13 = [] 35list14 = list() 36list14 = [] 37list15 = list() 38list15 = [] 39list16 =list() 40list16 = [] 41 42################################################################################ 43 44#データをnumpyで読み込む 45data = np.genfromtxt("test-group0.csv",delimiter=",",encoding='utf_8_sig') 46 47#読み込んだデータを16方位にわける 48for i in range(len(data)): 49 if 0 <= data[i,0] <= 11.25 or 348.75< data[i,0] <= 360: 50 list01.append(data[i,1]) 51 elif 11.25 < data[i,0] <= 33.75: 52 list02.append(data[i,1]) 53 elif 33.75 < data[i,0] <= 56.25: 54 list03.append(data[i,1]) 55 elif 56.25 < data[i,0] <= 78.75: 56 list04.append(data[i,1]) 57 elif 78.75 < data[i,0] <= 101.25: 58 list05.append(data[i,1]) 59 elif 101.25 < data[i,0] <= 123.75: 60 list06.append(data[i,1]) 61 elif 123.75 < data[i,0] <= 146.25: 62 list07.append(data[i,1]) 63 elif 146.25 < data[i,0] <= 168.75: 64 list08.append(data[i,1]) 65 elif 168.75 < data[i,0] <= 191.25: 66 list09.append(data[i,1]) 67 elif 191.25 < data[i,0] <= 213.75: 68 list10.append(data[i,1]) 69 elif 213.75 < data[i,0] <= 236.25: 70 list11.append(data[i,1]) 71 elif 236.25 < data[i,0] <= 258.75: 72 list12.append(data[i,1]) 73 elif 258.75 < data[i,0] <= 281.25: 74 list13.append(data[i,1]) 75 elif 281.25 < data[i,0] <= 303.75: 76 list14.append(data[i,1]) 77 elif 303.75 < data[i,0] <= 326.25: 78 list15.append(data[i,1]) 79 elif 326.25 < data[i,0] <= 348.75: 80 list16.append(data[i,1]) 81 82 83################################################################################ 84 85#風向の頻度の計算(割合) 86r1 = len(list01)/len(data)*100 87r2 = len(list02)/len(data)*100 88r3 = len(list03)/len(data)*100 89r4 = len(list04)/len(data)*100 90r5 = len(list05)/len(data)*100 91r6 = len(list06)/len(data)*100 92r7 = len(list07)/len(data)*100 93r8 = len(list08)/len(data)*100 94r9 = len(list09)/len(data)*100 95r10 = len(list10)/len(data)*100 96r11 = len(list11)/len(data)*100 97r12 = len(list12)/len(data)*100 98r13 = len(list13)/len(data)*100 99r14 = len(list14)/len(data)*100 100r15 = len(list15)/len(data)*100 101r16 = len(list16)/len(data)*100 102 103################################################################################ 104 105#リスト作成(風速を9段階に分けるため) 106l1= list() 107l1 = [] 108l2 = list() 109l2 = [] 110l3 = list() 111l3 = [] 112l4 = list() 113l4 = [] 114l5 = list() 115l5 = [] 116l6 =list() 117l6 = [] 118l7 = list() 119l7 = [] 120l8 = list() 121l8 = [] 122l9 = list() 123l9 = [] 124 125################################################################################ 126 127#風速を9段階に分ける 128for i in range(len(list01)): 129 if 0 <= list01[i] <= 100: 130 l1.append(list01[i]) 131 elif 100 < list01[i] <= 200: 132 l2.append(list01[i]) 133 elif 200 < list01[i] <= 300: 134 l3.append(list01[i]) 135 elif 300 < list01[i] <= 400: 136 l4.append(list01[i]) 137 elif 400 < list01[i] <= 500: 138 l5.append(list01[i]) 139 elif 500 < list01[i] <= 600: 140 l6.append(list01[i]) 141 elif 600 < list01[i] <= 700: 142 l7.append(list01[i]) 143 elif 700 < list01[i] <= 800: 144 l8.append(list01[i]) 145 elif 800 < list01[i] <= 900: 146 l9.append(list01[i]) 147 148################################################################################ 149 150#グラフの作成 151#極座標を16分割 152N = 16 153theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False) 154 155#値の設定 156radiia = r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16 157width = 0.3 #幅 158 159#bottomの設定 160b0=np.array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]) 161 162#積み上げプロット 163ax = plt.subplot(111, projection='polar') 164bar1 = ax.bar(theta, radiia,color="g" ,width=width, bottom=b0) 165 166ax.set_theta_zero_location("N") # 原点は北 167ax.set_theta_direction(-1) # 時計回り 168 169#画像を表示 170#plt.show() 171
回答2件
あなたの回答
tips
プレビュー