saisaikenkenの「してみよ」ブログ

~~~ 仕 事 と 趣 味 の 垣 根 を 無 く し て み よ ~~~

MENU

プライバシーポリシー

下記、「プライバシーポリシー」に関して記載致しましたので、ご一読願います。
お問い合わせはこちらまで。

お問い合わせ - saisaikenkenの「してみよ」ブログ

Twitterhttps://mobile.twitter.com/saisaikenken61

当サイトに掲載されている広告について

当サイトでは、第三者配信の広告サービス(A8.net、afb、アクセストレード)を利用しています。
このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 『Cookie』(氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。

当サイトへのコメントについて

当サイトでは、スパム・荒らしへの対応として、コメントの際に使用されたIPアドレスを記録しています。
これはブログの標準機能としてサポートされている機能で、スパム・荒らしへの対応以外にこのIPアドレスを使用することはありません。
また、メールアドレスとURLの入力に関しては、任意となっております。
全てのコメントは管理人が事前にその内容を確認し、承認した上での掲載となりますことをあらかじめご了承下さい。
加えて、次の各号に掲げる内容を含むコメントは管理人の裁量によって承認せず、削除する事があります。
・特定の自然人または法人を誹謗し、中傷するもの。
・極度にわいせつな内容を含むもの。
・禁制品の取引に関するものや、他者を害する行為の依頼など、法律によって禁止されている物品、行為の依頼や斡旋などに関するもの。
・その他、公序良俗に反し、または管理人によって承認すべきでないと認められるもの。

免責事項

当サイトで掲載している画像の著作権・肖像権等は各権利所有者に帰属致します。権利を侵害する目的ではございません。記事の内容や掲載画像等に問題がございましたら、各権利所有者様本人が直接メールでご連絡下さい。確認後、対応させて頂きます。
当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。
当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。
当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。
修正された最新のプライバシーポリシーは常に本ページにて開示されます。

ドローン TELLO をPythonで動かしてみよ

ドローンが撮影した映像をPCに転送(OpenCV)
※PCのファイアウォールを無効化する 

import sys
import traceback
import tellopy
import av
import cv2.cv2 as cv2  # for avoidance of pylint error
import numpy
from time import sleep

def videoCamera(start_time,container,drone,set_time):
    frame_skip = 300
    while True:
        for frame in container.decode(video=0):
            if 0 < frame_skip:
                frame_skip = frame_skip - 1
                continue
            image = cv2.cvtColor(numpy.array(frame.to_image()), cv2.COLOR_RGB2BGR)
            cv2.imshow('Original', image)
            #cv2.imshow('Canny', cv2.Canny(image, 100, 200))
            cv2.waitKey(1)
            if frame.time_base < 1.0/60:
                time_base = 1.0/60
            else:
                time_base = frame.time_base
            frame_skip = int((time.time() - start_time)/time_base)
            if time.time() - start_time > set_time:
                return
            else:
                continue

def main():
    drone = tellopy.Tello()
    try:
        drone.connect()
        drone.wait_for_connection(60.0)
        drone.takeoff()
        #sleep(10)
        container = av.open(drone.get_video_stream())
        start_time = time.time()
        videoCamera(start_time,container,drone,10)
        drone.down(50)
        sleep(5)
        start_time = time.time()
        videoCamera(start_time,container,drone,10)
        drone.land()
        sleep(5)
        drone.quit()
        cv2.destroyAllWindows()
    except Exception as ex:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        traceback.print_exception(exc_type, exc_value, exc_traceback)
        print(ex)
    finally:
        drone.quit()
        cv2.destroyAllWindows()

if __name__ == '__main__':
    main()

参考:
【Tello】トイ・ドローンで遊んでみた♪~Pythonで動画撮影しつつ飛んだ! - Qiita

pythonでLinuxサーバ上のファイル存在確認してみよ

globモジュール

glob.glob(ファイル名orディレクトリ名)

ファイルorディレクトリが存在したら
リストに格納してくれる
(存在しない場合は空のリストになる)

ex.)

import glob

if glob.glob(’/tmp’):
    print(’T’)
else:
    print(’F’)

Jupyter Notebook使ってみよ

インストール

 # pip install jupyter

起動

 $ jupyter notebook --ip=0.0.0.0 --NotebookApp.token='ken' --NotebookApp.port=8880

 root権限では不可。
 NotebookApp.tokenはログイン画面で入力するパスワード。
 NotebookApp.portはJNで使用するポート番号。(省略時は8888)

その他

 読み方が「"ジュピター"ノートブック」かと思っていたら、「"ジュパイター"ノートブック」なのね。まぁpython(パイソン)だものね。

python機械学習で車の買取価格予測してみよ

CarPrice.csvを学習させ、CarPrice_predict.csvを読み込ませた時の【買取価格】を予想する。

### 使用データ:CarPrice.csv、CarPrice_predict.csv

#### ライブラリインポート
import numpy as np
import pandas as pd
from sklearn.preprocessing import LabelEncoder,OneHotEncoder,StandardScaler
from sklearn.decomposition import PCA
from sklearn.model_selection import StratifiedKFold,GridSearchCV
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error
import pickle

#### データ読み込み

df = pd.read_csv('02_CarPrice.csv', encoding='shift_jis', engine='python')

#### エンコーディング

le = []
enc_columns = []

for i in np.arange(0,4):
    le = np.append(le,LabelEncoder())
    le[i].fit(df.iloc[:,i])
    enc_columns = np.append(enc_columns, le[i].classes_)
    df.iloc[:,i] = le[i].transform(df.iloc[:,i])

#### OneHotエンコーディング

one_hot_encoder = OneHotEncoder()
one_hot_encoder.fit(df.iloc[:,:4])
enc_data = one_hot_encoder.transform(df.iloc[:,:4]).toarray()

enc_df = pd.DataFrame(enc_data)
enc_df.columns = enc_columns
df_post_enc = pd.concat([df.iloc[:,4:-1], enc_df, df.iloc[:,-1]],axis=1)

#### 標準化

sc = StandardScaler()
sc.fit(df_post_enc.iloc[:,:-1])
df_post_sc = pd.DataFrame(sc.transform(df_post_enc.iloc[:,:-1]))
df_post_sc = pd.concat([df_post_sc,df_post_enc.iloc[:,-1]],axis=1)
df_post_sc.columns = df_post_enc.columns

#### 主成分分析

pca = []
num_pc = np.arange(1,len(df_post_sc.columns))
result = np.empty((0,3))
cnt = 0

for i in num_pc:
    pca = np.append(pca,PCA(n_components=i))
    pca[cnt].fit(df_post_sc.iloc[:,:-1])
    result = np.append(result,np.array([[cnt,i,pca[cnt].explained_variance_ratio_.sum()]]),axis=0)
    cnt += 1

print(result)

best_pca = pca[20]
df_post_pca = pd.DataFrame(best_pca.transform(df_post_sc.iloc[:,:-1]))
df_post_pca = pd.concat([df_post_pca,df_post_sc.iloc[:,-1]],axis=1)

#### 学習(回帰)~評価のグリッドサーチ

X = df_post_pca.iloc[:,:-1]
y = df_post_pca.iloc[:,-1]

param_grid = {'alpha':[0.0001,0.001,0.01,0.1,1,10,100,1000,10000]}
reg_l1 = Lasso()

gs = GridSearchCV(estimator=reg_l1,param_grid=param_grid,scoring='neg_mean_squared_error',n_jobs=-1,cv=10)

gs.fit(X=X,y=y)

gs.best_score_

#### RMSE

np.sqrt(np.abs(gs.best_score_))

gs_result = pd.DataFrame(gs.cv_results_)
gs_result.sort_values(by='rank_test_score')

best_model = gs.best_estimator_
best_model.fit(X=X,y=y)

#### 予測対象データの読み込み

df = pd.read_csv('02_CarPrice_predict.csv',encoding='shift_jis',engine='python')

#### エンコーディング

for i in np.arange(0,4):
    df.iloc[:,i] = le[i].transform(df.iloc[:,i])

#### OneHotエンコーディング

df_post_enc = pd.DataFrame(one_hot_encoder.transform(df.iloc[:,0:4]).toarray())
df_post_enc = pd.concat([df.iloc[:,4:],df_post_enc],axis=1)

#### 標準化

df_post_sc = pd.DataFrame(sc.transform(df_post_enc))

print(type(one_hot_encoder))

#### 主成分分析

df_post_pca = pd.DataFrame(best_pca.transform(df_post_sc))

#### 予測

X = df_post_pca.values
best_model.predict(X)

CarPrice.csv

メーカー 使用燃料 駆動方式 エンジン位置 ドア数 ホイールベース 車両全長 車両全幅 車両全高 車両重量 エンジン気筒数 エンジンサイズ エンジン内径 エンジン行程 エンジン圧縮比 エンジン最高出力 エンジン回転数 都市部走行燃費 高速道路走行燃費 買取価格
toyota ガソリン 前輪駆動 フロント 2 95.7 158.7 63.6 54.5 2040 4 92 3.05 3.03 9 62 4800 31 38 6338
volvo ディーゼル 後輪駆動 フロント 4 109.1 188.8 68.9 55.5 3217 6 145 3.01 3.4 23 106 4800 26 27 22470
saab ガソリン 前輪駆動 フロント 4 99.1 186.6 66.5 56.1 2758 4 121 3.54 3.07 9.3 110 5250 21 28 15510
volkswagen ディーゼル 前輪駆動 フロント 2 97.3 171.7 65.5 55.7 2261 4 97 3.01 3.4 23 52 4800 37 46 7775
dodge ガソリン 前輪駆動 フロント 4 93.7 157.3 63.8 50.6 1989 4 90 2.97 3.23 9.4 68 5500 31 38 7609
nissan ガソリン 前輪駆動 フロント 4 94.5 165.3 63.8 54.5 1971 4 97 3.15 3.29 9.4 69 5200 31 37 7499
toyota ガソリン 後輪駆動 フロント 2 98.4 176.2 65.6 52 2536 4 146 3.62 3.5 9.3 116 4800 24 30 9639
volkswagen ガソリン 前輪駆動 フロント 2 94.5 165.7 64 51.4 2221 4 109 3.19 3.4 8.5 90 5500 24 29 9980
bmw ガソリン 後輪駆動 フロント 2 103.5 193.8 67.9 53.7 3380 6 209 3.62 3.39 8 182 5400 16 22 41315
toyota ガソリン 後輪駆動 フロント 2 98.4 176.2 65.6 53 2975 4 146 3.62 3.5 9.3 116 4800 24 30 17669
toyota ディーゼル 前輪駆動 フロント 4 95.7 166.3 64.4 52.8 2275 4 110 3.27 3.35 22.5 56 4500 38 47 7788
mitsubishi ガソリン 前輪駆動 フロント 2 95.9 173.2 66.3 50.2 2833 4 156 3.58 3.86 7 145 5000 19 24 12629
mercedes-benz ガソリン 後輪駆動 フロント 2 96.6 180.3 70.5 50.8 3685 8 234 3.46 3.1 8.3 155 4750 16 18 35056
bmw ガソリン 後輪駆動 フロント 4 101.2 176.8 64.8 54.3 2765 6 164 3.31 3.19 9 121 4250 21 28 21105
mazda ガソリン 前輪駆動 フロント 4 98.8 177.8 66.5 55.5 2425 4 122 3.39 3.39 8.6 84 4800 26 32 11245
nissan ガソリン 前輪駆動 フロント 2 95.1 162.4 63.8 53.3 2008 4 97 3.15 3.29 9.4 69 5200 31 37 8249
volkswagen ガソリン 前輪駆動 フロント 2 97.3 171.7 65.5 55.7 2209 4 109 3.19 3.4 9 85 5250 27 34 7975
mercedes-benz ディーゼル 後輪駆動 フロント 4 110 190.9 70.3 58.7 3750 5 183 3.58 3.64 21.5 123 4350 22 25 28248
toyota ガソリン 前輪駆動 フロント 4 102.4 175.6 66.5 54.9 2326 4 122 3.31 3.54 8.7 92 4200 29 34 8948
plymouth ガソリン 前輪駆動 フロント 4 103.3 174.6 64.6 59.8 2535 4 122 3.35 3.46 8.5 88 5000 24 30 8921
peugot ガソリン 後輪駆動 フロント 4 114.2 198.9 68.4 58.7 3230 4 120 3.46 3.19 8.4 97 5000 19 24 12440
mazda ガソリン 前輪駆動 フロント 2 98.8 177.8 66.5 53.7 2385 4 122 3.39 3.39 8.6 84 4800 26 32 8845
nissan ガソリン 前輪駆動 フロント 4 97.2 173.4 65.2 54.7 2324 4 120 3.33 3.47 8.5 97 5200 27 34 8949
alfa-romero ガソリン 後輪駆動 フロント 2 88.6 168.8 64.1 48.8 2548 4 130 3.47 2.68 9 111 5000 21 27 13495
volkswagen ガソリン 前輪駆動 フロント 2 94.5 159.3 64.2 55.6 2254 4 109 3.19 3.4 8.5 90 5500 24 29 11595
mazda ガソリン 前輪駆動 フロント 4 98.8 177.8 66.5 55.5 2410 4 122 3.39 3.39 8.6 84 4800 26 32 8495
bmw ガソリン 後輪駆動 フロント 2 101.2 176.8 64.8 54.3 2395 4 108 3.5 2.8 8.8 101 5800 23 29 16430
honda ガソリン 前輪駆動 フロント 2 96.5 167.5 65.2 53.3 2289 4 110 3.15 3.58 9 86 5800 27 33 9095
mitsubishi ガソリン 前輪駆動 フロント 2 93.7 157.3 64.4 50.8 2004 4 92 2.97 3.23 9.4 68 5500 31 38 6669
nissan ガソリン 前輪駆動 フロント 4 94.5 170.2 63.8 53.5 2037 4 97 3.15 3.29 9.4 69 5200 31 37 7999
peugot ガソリン 後輪駆動 フロント 4 107.9 186.7 68.4 56.7 3075 4 120 3.46 3.19 8.4 97 5000 19 24 16630
porsche ガソリン 後輪駆動 リア 2 89.5 168.9 65 51.6 2756 6 194 3.74 2.9 9.5 207 5900 17 25 34028
porsche ガソリン 後輪駆動 フロント 2 94.5 168.9 68.3 50.2 2778 4 151 3.94 3.11 9.5 143 5500 19 27 22018
honda ガソリン 前輪駆動 フロント 4 96.5 157.1 63.9 58.3 2024 4 92 2.92 3.41 9.2 76 6000 30 34 7295
volkswagen ガソリン 前輪駆動 フロント 4 97.3 171.7 65.5 55.7 2212 4 109 3.19 3.4 9 85 5250 27 34 8195
dodge ガソリン 前輪駆動 フロント 4 103.3 174.6 64.6 59.8 2535 4 122 3.34 3.46 8.5 88 5000 24 30 8921
toyota ガソリン 前輪駆動 フロント 4 95.7 169.7 63.6 59.1 2280 4 92 3.05 3.03 9 62 4800 31 37 6918
audi ガソリン 前輪駆動 フロント 4 99.8 176.6 66.2 54.3 2337 4 109 3.19 3.4 10 102 5500 24 30 13950
honda ガソリン 前輪駆動 フロント 2 86.6 144.6 63.9 50.8 1713 4 92 2.91 3.41 9.6 58 4800 49 54 6479
subaru ガソリン 4WD フロント 4 97 172 65.4 54.3 2385 4 108 3.62 2.64 9 82 4800 24 25 9233
nissan ガソリン 前輪駆動 フロント 4 100.4 184.6 66.5 55.1 3060 6 181 3.43 3.27 9 152 5200 19 25 13499
mazda ガソリン 前輪駆動 フロント 2 93.1 159.1 64.2 54.1 1890 4 91 3.03 3.15 9 68 5000 30 31 5195
chevrolet ガソリン 前輪駆動 フロント 2 94.5 155.9 63.6 52 1874 4 90 3.03 3.11 9.6 70 5400 38 43 6295
honda ガソリン 前輪駆動 フロント 4 96.5 175.4 65.2 54.1 2465 4 110 3.15 3.58 9 101 5800 24 28 12945
subaru ガソリン 4WD フロント 2 93.3 157.3 63.8 55.7 2240 4 108 3.62 2.64 8.7 73 4400 26 31 7603
porsche ガソリン 後輪駆動 リア 2 89.5 168.9 65 51.6 2756 6 194 3.74 2.9 9.5 207 5900 17 25 32528
toyota ガソリン 4WD フロント 4 95.7 169.7 63.6 59.1 3110 4 92 3.05 3.03 9 62 4800 27 32 8778
honda ガソリン 前輪駆動 フロント 2 93.7 150 64 52.6 1837 4 79 2.91 3.07 10.1 60 5500 38 42 5399
mitsubishi ガソリン 前輪駆動 フロント 4 96.3 172.4 65.4 51.6 2403 4 110 3.17 3.46 7.5 116 5500 23 30 9279
mazda ガソリン 後輪駆動 フロント 4 104.9 175 66.1 54.4 2670 4 140 3.76 3.16 8 120 5000 19 27 18280
dodge ガソリン 前輪駆動 フロント 4 93.7 157.3 63.8 50.6 1967 4 90 2.97 3.23 9.4 68 5500 31 38 6229
nissan ガソリン 前輪駆動 フロント 4 94.5 165.3 63.8 54.5 1938 4 97 3.15 3.29 9.4 69 5200 31 37 6849
volvo ガソリン 後輪駆動 フロント 4 109.1 188.8 68.9 55.5 2952 4 141 3.78 3.15 9.5 114 5400 23 28 16845
mitsubishi ガソリン 前輪駆動 フロント 2 95.9 173.2 66.3 50.2 2921 4 156 3.59 3.86 7 145 5000 19 24 14869
nissan ガソリン 前輪駆動 フロント 4 100.4 181.7 66.5 55.1 3095 6 181 3.43 3.27 9 152 5200 17 22 13499
saab ガソリン 前輪駆動 フロント 2 99.1 186.6 66.5 56.1 2808 4 121 3.54 3.07 9 160 5500 19 26 18150
toyota ガソリン 前輪駆動 フロント 4 95.7 158.7 63.6 54.5 2015 4 92 3.05 3.03 9 62 4800 31 38 6488
nissan ディーゼル 前輪駆動 フロント 2 94.5 165.3 63.8 54.5 2017 4 103 2.99 3.47 21.9 55 4800 45 50 7099
nissan ガソリン 後輪駆動 フロント 2 91.3 170.7 67.9 49.7 3139 6 181 3.43 3.27 7.8 200 5200 17 23 19699
volvo ガソリン 後輪駆動 フロント 4 104.3 188.8 67.2 57.5 3042 4 141 3.78 3.15 9.5 114 5400 24 28 16515
mazda ガソリン 前輪駆動 フロント 2 93.1 159.1 64.2 54.1 1900 4 91 3.03 3.15 9 68 5000 31 38 6095
honda ガソリン 前輪駆動 フロント 2 96.5 169.1 66 51 2293 4 110 3.15 3.58 9.1 100 5500 25 31 10345
mazda ガソリン 前輪駆動 フロント 4 98.8 177.8 66.5 55.5 2410 4 122 3.39 3.39 8.6 84 4800 26 32 10245
mazda ガソリン 前輪駆動 フロント 4 93.1 166.8 64.2 54.1 1950 4 91 3.08 3.15 9 68 5000 31 38 7395
mitsubishi ガソリン 前輪駆動 フロント 2 95.9 173.2 66.3 50.2 2926 4 156 3.59 3.86 7 145 5000 19 24 14489
jaguar ガソリン 後輪駆動 フロント 4 113 199.6 69.6 52.8 4066 6 258 3.63 4.17 8.1 176 4750 15 19 35550
toyota ガソリン 前輪駆動 フロント 4 95.7 166.3 64.4 53 2094 4 98 3.19 3.03 9 70 4800 38 47 7738
toyota ガソリン 後輪駆動 フロント 2 98.4 176.2 65.6 52 2540 4 146 3.62 3.5 9.3 116 4800 24 30 8449
honda ガソリン 前輪駆動 フロント 2 86.6 144.6 63.9 50.8 1819 4 92 2.91 3.41 9.2 76 6000 31 38 6855
saab ガソリン 前輪駆動 フロント 2 99.1 186.6 66.5 56.1 2658 4 121 3.54 3.07 9.31 110 5250 21 28 11850
peugot ガソリン 後輪駆動 フロント 4 107.9 186.7 68.4 56.7 3075 4 120 3.46 2.19 8.4 95 5000 19 24 15580
volvo ガソリン 後輪駆動 フロント 4 104.3 188.8 67.2 56.2 2912 4 141 3.78 3.15 9.5 114 5400 23 28 12940
mercedes-benz ガソリン 後輪駆動 フロント 4 120.9 208.1 71.7 56.7 3900 8 308 3.8 3.35 8 184 4500 14 16 40960
toyota ガソリン 後輪駆動 フロント 2 98.4 176.2 65.6 52 2679 4 146 3.62 3.5 9.3 116 4800 24 30 11199
subaru ガソリン 前輪駆動 フロント 4 97.2 172 65.4 52.5 2340 4 108 3.62 2.64 9 94 5200 26 32 9960
toyota ガソリン 後輪駆動 フロント 4 104.5 187.8 66.5 54.1 3131 6 171 3.27 3.35 9.2 156 5200 20 24 15690
volvo ガソリン 後輪駆動 フロント 4 104.3 188.8 67.2 57.5 3157 4 130 3.62 3.15 7.5 162 5100 17 22 18950
toyota ガソリン 後輪駆動 フロント 2 98.4 176.2 65.6 52 2551 4 146 3.62 3.5 9.3 116 4800 24 30 9989
plymouth ガソリン 前輪駆動 フロント 4 93.7 157.3 63.8 50.6 1967 4 90 2.97 3.23 9.4 68 5500 31 38 6229
toyota ガソリン 前輪駆動 フロント 4 95.7 166.3 64.4 52.8 2109 4 98 3.19 3.03 9 70 4800 30 37 7198
plymouth ガソリン 後輪駆動 フロント 2 95.9 173.2 66.3 50.2 2818 4 156 3.59 3.86 7 145 5000 19 24 12764
plymouth ガソリン 前輪駆動 フロント 2 93.7 157.3 63.8 50.8 2128 4 98 3.03 3.39 7.6 102 5500 24 30 7957
volvo ガソリン 後輪駆動 フロント 4 104.3 188.8 67.2 56.2 3045 4 130 3.62 3.15 7.5 162 5100 17 22 18420
toyota ガソリン 前輪駆動 フロント 4 102.4 175.6 66.5 53.9 2414 4 122 3.31 3.54 8.7 92 4200 27 32 9988
peugot ディーゼル 後輪駆動 フロント 4 114.2 198.9 68.4 58.7 3485 4 152 3.7 3.52 21 95 4150 25 25 17075
peugot ディーゼル 後輪駆動 フロント 4 107.9 186.7 68.4 56.7 3252 4 152 3.7 3.52 21 95 4150 28 33 16900
subaru ガソリン 前輪駆動 フロント 2 93.7 156.9 63.4 53.7 2050 4 97 3.62 2.36 9 69 4900 31 36 5118
bmw ガソリン 後輪駆動 フロント 4 110 197 70.9 56.3 3505 6 209 3.62 3.39 8 182 5400 15 20 36880
peugot ガソリン 後輪駆動 フロント 4 114.2 198.9 68.4 56.7 3285 4 120 3.46 2.19 8.4 95 5000 19 24 16695
bmw ガソリン 後輪駆動 フロント 4 103.5 189 66.9 55.7 3230 6 209 3.62 3.39 8 182 5400 16 22 30760
audi ガソリン 前輪駆動 フロント 2 99.8 177.3 66.3 53.1 2507 5 136 3.19 3.4 8.5 110 5500 19 25 15250
isuzu ガソリン 後輪駆動 フロント 2 96 172.6 65.2 51.4 2734 4 119 3.43 3.23 9.2 90 5000 24 29 11048
mazda ガソリン 前輪駆動 フロント 4 93.1 166.8 64.2 54.1 1945 4 91 3.03 3.15 9 68 5000 31 38 6695
jaguar ガソリン 後輪駆動 フロント 4 113 199.6 69.6 52.8 4066 6 258 3.63 4.17 8.1 176 4750 15 19 32250
honda ガソリン 前輪駆動 フロント 4 96.5 163.4 64 54.5 2010 4 92 2.91 3.41 9.2 76 6000 30 34 7295
bmw ガソリン 後輪駆動 フロント 4 103.5 189 66.9 55.7 3055 6 164 3.31 3.19 9 121 4250 20 25 24565
audi ガソリン 4WD フロント 4 99.4 176.6 66.4 54.3 2824 5 136 3.19 3.4 8 115 5500 18 22 17450
honda ガソリン 前輪駆動 フロント 4 96.5 175.4 65.2 54.1 2304 4 110 3.15 3.58 9 86 5800 27 33 8845
mercedes-benz ディーゼル 後輪駆動 フロント 4 110 190.9 70.3 56.5 3515 5 183 3.58 3.64 21.5 123 4350 22 25 25552
peugot ガソリン 後輪駆動 フロント 4 108 186.7 68.3 56 3130 4 134 3.61 3.21 7 142 5600 18 24 18150
volvo ガソリン 後輪駆動 フロント 4 109.1 188.8 68.8 55.5 3049 4 141 3.78 3.15 8.7 160 5300 19 25 19045
nissan ガソリン 前輪駆動 フロント 2 94.5 165.6 63.8 53.3 2028 4 97 3.15 3.29 9.4 69 5200 31 37 7799
dodge ガソリン 前輪駆動 フロント 2 93.7 157.3 63.8 50.8 1876 4 90 2.97 3.23 9.4 68 5500 31 38 6377
dodge ガソリン 前輪駆動 フロント 2 93.7 157.3 63.8 50.8 1876 4 90 2.97 3.23 9.41 68 5500 37 41 5572
jaguar ガソリン 後輪駆動 フロント 2 102 191.7 70.6 47.8 3950 12 326 3.54 2.76 11.5 262 5000 13 17 36000
peugot ディーゼル 後輪駆動 フロント 4 107.9 186.7 68.4 56.7 3197 4 152 3.7 3.52 21 95 4150 28 33 13200
subaru ガソリン 前輪駆動 フロント 2 93.7 157.9 63.6 53.7 2120 4 108 3.62 2.64 8.7 73 4400 26 31 7053
subaru ガソリン 前輪駆動 フロント 4 97.2 172 65.4 52.5 2190 4 108 3.62 2.64 9.5 82 4400 28 33 7775
porsche ガソリン 後輪駆動 リア 2 89.5 168.9 65 51.6 2800 6 194 3.74 2.9 9.5 207 5900 17 25 37028
nissan ガソリン 前輪駆動 フロント 4 94.5 170.2 63.8 53.5 2024 4 97 3.15 3.29 9.4 69 5200 31 37 7349
toyota ガソリン 後輪駆動 フロント 2 94.5 168.7 64 52.6 2204 4 98 3.19 3.03 9 70 4800 29 34 8238
mercedes-benz ディーゼル 後輪駆動 フロント 2 106.7 187.5 70.3 54.9 3495 5 183 3.58 3.64 21.5 123 4350 22 25 28176
bmw ガソリン 後輪駆動 フロント 2 101.2 176.8 64.8 54.3 2710 6 164 3.31 3.19 9 121 4250 21 28 20970
mercedes-benz ガソリン 後輪駆動 フロント 2 112 199.2 72 55.4 3715 8 304 3.8 3.35 8 184 4500 14 16 45400
mazda ガソリン 前輪駆動 フロント 2 93.1 159.1 64.2 54.1 1905 4 91 3.03 3.15 9 68 5000 31 38 6795
honda ガソリン 前輪駆動 フロント 2 93.7 150 64 52.6 1956 4 92 2.91 3.41 9.2 76 6000 30 34 7129
volkswagen ディーゼル 前輪駆動 フロント 4 97.3 171.7 65.5 55.7 2319 4 97 3.01 3.4 23 68 4500 37 42 9495
mercedes-benz ガソリン 後輪駆動 フロント 4 115.6 202.6 71.7 56.5 3740 8 234 3.46 3.1 8.3 155 4750 16 18 34184
mitsubishi ガソリン 前輪駆動 フロント 4 96.3 172.4 65.4 51.6 2405 4 122 3.35 3.46 8.5 88 5000 25 32 8189
bmw ガソリン 後輪駆動 フロント 4 101.2 176.8 64.8 54.3 2395 4 108 3.5 2.8 8.8 101 5800 23 29 16925
nissan ガソリン 前輪駆動 フロント 2 94.5 165.3 63.8 54.5 1889 4 97 3.15 3.29 9.4 69 5200 31 37 5499
toyota ガソリン 前輪駆動 フロント 2 95.7 158.7 63.6 54.5 1985 4 92 3.05 3.03 9 62 4800 35 39 5348
volkswagen ガソリン 前輪駆動 フロント 4 100.4 183.1 66.9 55.1 2563 4 109 3.19 3.4 9 88 5500 25 31 12290
mitsubishi ガソリン 前輪駆動 フロント 2 93.7 157.3 64.4 50.8 1918 4 92 2.97 3.23 9.4 68 5500 37 41 5389
subaru ガソリン 前輪駆動 フロント 4 97 173.5 65.4 53 2290 4 108 3.62 2.64 9 82 4800 28 32 7463
toyota ディーゼル 前輪駆動 フロント 4 95.7 166.3 64.4 53 2275 4 110 3.27 3.35 22.5 56 4500 34 36 7898
audi ガソリン 前輪駆動 フロント 4 105.8 192.7 71.4 55.9 3086 5 131 3.13 3.4 8.3 140 5500 17 20 23875
mercury ガソリン 後輪駆動 フロント 2 102.7 178.4 68 54.8 2910 4 140 3.78 3.12 8 175 5000 19 24 16503
peugot ガソリン 後輪駆動 フロント 4 107.9 186.7 68.4 56.7 3020 4 120 3.46 3.19 8.4 97 5000 19 24 11900
plymouth ガソリン 前輪駆動 フロント 4 93.7 167.3 63.8 50.8 2191 4 98 2.97 3.23 9.4 68 5500 31 38 7609
toyota ガソリン 後輪駆動 フロント 4 104.5 187.8 66.5 54.1 3151 6 161 3.27 3.35 9.2 156 5200 19 24 15750
nissan ガソリン 後輪駆動 フロント 2 99.2 178.5 67.9 49.7 3139 6 181 3.43 3.27 9 160 5200 19 25 18399
saab ガソリン 前輪駆動 フロント 4 99.1 186.6 66.5 56.1 2695 4 121 3.54 3.07 9.3 110 5250 21 28 12170
mazda ガソリン 前輪駆動 フロント 2 98.8 177.8 66.5 53.7 2385 4 122 3.39 3.39 8.6 84 4800 26 32 10595
toyota ガソリン 後輪駆動 フロント 2 102.9 183.5 67.7 52 2976 6 171 3.27 3.35 9.3 161 5200 20 24 16558
chevrolet ガソリン 前輪駆動 フロント 4 94.5 158.8 63.6 52 1909 4 90 3.03 3.11 9.6 70 5400 38 43 6575
alfa-romero ガソリン 後輪駆動 フロント 2 88.6 168.8 64.1 48.8 2548 4 130 3.47 2.68 9 111 5000 21 27 16500
nissan ガソリン 前輪駆動 フロント 2 94.5 165.3 63.8 54.5 1918 4 97 3.15 3.29 9.4 69 5200 31 37 6649
toyota ガソリン 後輪駆動 フロント 2 102.9 183.5 67.7 52 3016 6 171 3.27 3.35 9.3 161 5200 19 24 15998
toyota ガソリン 後輪駆動 フロント 2 94.5 168.7 64 52.6 2265 4 98 3.24 3.08 9.4 112 6600 26 29 9298
nissan ガソリン 前輪駆動 フロント 2 94.5 165.3 63.8 54.5 1951 4 97 3.15 3.29 9.4 69 5200 31 37 7299
volkswagen ディーゼル 前輪駆動 フロント 4 100.4 180.2 66.9 55.1 2579 4 97 3.01 3.4 23 68 4500 33 38 13845
toyota ガソリン 前輪駆動 フロント 4 95.7 166.3 64.4 53 2081 4 98 3.19 3.03 9 70 4800 30 37 6938
toyota ガソリン 前輪駆動 フロント 4 102.4 175.6 66.5 54.9 2414 4 122 3.31 3.54 8.7 92 4200 27 32 10898
volkswagen ディーゼル 前輪駆動 フロント 4 97.3 171.7 65.5 55.7 2264 4 97 3.01 3.4 23 52 4800 37 46 7995
mitsubishi ガソリン 前輪駆動 フロント 4 96.3 172.4 65.4 51.6 2365 4 122 3.35 3.46 8.5 88 5000 25 32 6989
peugot ディーゼル 後輪駆動 フロント 4 107.9 186.7 68.4 56.7 3252 4 152 3.7 3.52 21 95 4150 28 33 17950
mitsubishi ガソリン 前輪駆動 フロント 2 96.3 173 65.4 49.4 2328 4 122 3.35 3.46 8.5 88 5000 25 32 8499
alfa-romero ガソリン 後輪駆動 フロント 2 94.5 171.2 65.5 52.4 2823 6 152 2.68 3.47 9 154 5000 19 26 16500
subaru ガソリン 前輪駆動 フロント 4 97.2 172 65.4 52.5 2145 4 108 3.62 2.64 9.5 82 4800 32 37 7126
subaru ガソリン 4WD フロント 4 96.9 173.6 65.4 54.9 2420 4 108 3.62 2.64 9 82 4800 23 29 8013
plymouth ガソリン 前輪駆動 フロント 2 93.7 157.3 63.8 50.8 1918 4 90 2.97 3.23 9.4 68 5500 37 41 5572
volvo ガソリン 後輪駆動 フロント 4 104.3 188.8 67.2 56.2 2935 4 141 3.78 3.15 9.5 114 5400 24 28 15985
mercedes-benz ディーゼル 後輪駆動 フロント 4 115.6 202.6 71.7 56.3 3770 5 183 3.58 3.64 21.5 123 4350 22 25 31600
saab ガソリン 前輪駆動 フロント 2 99.1 186.6 66.5 56.1 2707 4 121 2.54 2.07 9.3 110 5250 21 28 15040
toyota ガソリン 後輪駆動 フロント 2 94.5 168.7 64 52.6 2300 4 98 3.24 3.08 9.4 112 6600 26 29 9538
mitsubishi ガソリン 前輪駆動 フロント 2 93 157.3 63.8 50.8 2145 4 98 3.03 3.39 7.6 102 5500 24 30 7689
volkswagen ガソリン 前輪駆動 フロント 4 97.3 171.7 65.5 55.7 2300 4 109 3.19 3.4 10 100 5500 26 32 9995
nissan ガソリン 後輪駆動 フロント 2 91.3 170.7 67.9 49.7 3071 6 181 3.43 3.27 9 160 5200 19 25 17199
saab ガソリン 前輪駆動 フロント 4 99.1 186.6 66.5 56.1 2847 4 121 3.54 3.07 9 160 5500 19 26 18620
nissan ガソリン 前輪駆動 フロント 4 100.4 184.6 66.5 56.1 3296 6 181 3.43 3.27 9 152 5200 17 22 14399
toyota ガソリン 前輪駆動 フロント 4 95.7 166.3 64.4 52.8 2122 4 98 3.19 3.03 9 70 4800 28 34 8358
toyota ディーゼル 前輪駆動 フロント 4 102.4 175.6 66.5 54.9 2480 4 110 3.27 3.35 22.5 73 4500 30 33 10698
subaru ガソリン 前輪駆動 フロント 4 97 173.5 65.4 53 2455 4 108 3.62 2.64 9 94 5200 25 31 10198
subaru ガソリン 4WD フロント 4 96.9 173.6 65.4 54.9 2650 4 108 3.62 2.64 7.7 111 4800 23 23 11694
plymouth ガソリン 前輪駆動 フロント 4 93.7 167.3 63.8 50.8 1989 4 90 2.97 3.23 9.4 68 5500 31 38 6692
peugot ディーゼル 後輪駆動 フロント 4 114.2 198.9 68.4 58.7 3430 4 152 3.7 3.52 21 95 4150 25 25 13860
subaru ガソリン 4WD フロント 4 97 172 65.4 54.3 2510 4 108 3.62 2.64 7.7 111 4800 24 29 11259
toyota ガソリン 前輪駆動 フロント 4 95.7 166.3 64.4 52.8 2140 4 98 3.19 3.03 9 70 4800 28 34 9258
toyota ガソリン 4WD フロント 4 95.7 169.7 63.6 59.1 2290 4 92 3.05 3.03 9 62 4800 27 32 7898
volvo ガソリン 後輪駆動 フロント 4 109.1 188.8 68.9 55.5 3062 4 141 3.78 3.15 9.5 114 5400 19 25 22625
isuzu ガソリン 後輪駆動 フロント 4 94.3 170.7 61.8 53.5 2337 4 111 3.31 3.23 8.5 78 4800 24 29 6785
volvo ガソリン 後輪駆動 フロント 4 109.1 188.8 68.9 55.5 3012 6 173 3.58 2.87 8.8 134 5500 18 23 21485
mitsubishi ガソリン 前輪駆動 フロント 4 96.3 172.4 65.4 51.6 2403 4 110 3.17 3.46 7.5 116 5500 23 30 9279
dodge ガソリン 前輪駆動 フロント 4 93.7 157.3 63.8 50.6 1989 4 90 2.97 3.23 9.4 68 5500 31 38 6692
mitsubishi ガソリン 前輪駆動 フロント 2 93.7 157.3 64.4 50.8 1944 4 92 2.97 3.23 9.4 68 5500 31 38 6189
nissan ガソリン 前輪駆動 フロント 4 97.2 173.4 65.2 54.7 2302 4 120 3.33 3.47 8.5 97 5200 27 34 9549
dodge ガソリン 前輪駆動 フロント 2 95.9 173.2 66.3 50.2 2811 4 156 3.6 3.9 7 145 5000 19 24 12964
volvo ガソリン 後輪駆動 フロント 4 104.3 188.8 67.2 57.5 3034 4 141 3.78 3.15 9.5 114 5400 23 28 13415
mitsubishi ガソリン 前輪駆動 フロント 2 96.3 173 65.4 49.4 2370 4 110 3.17 3.46 7.5 116 5500 23 30 9959
honda ガソリン 前輪駆動 フロント 2 96.5 167.5 65.2 53.3 2236 4 110 3.15 3.58 9 86 5800 27 33 7895
audi ガソリン 前輪駆動 フロント 4 105.8 192.7 71.4 55.7 2954 5 136 3.19 3.4 8.5 110 5500 19 25 18920
volkswagen ガソリン 前輪駆動 フロント 4 97.3 171.7 65.5 55.7 2275 4 109 3.19 3.4 9 85 5250 27 34 8495
chevrolet ガソリン 前輪駆動 フロント 2 88.4 141.1 60.3 53.2 1488 3 61 2.91 3.03 9.5 48 5100 47 53 5151
mazda ディーゼル 後輪駆動 フロント 4 104.9 175 66.1 54.4 2700 4 134 3.43 3.64 22 72 4200 31 39 18344
toyota ガソリン 後輪駆動 フロント 2 94.5 168.7 64 52.6 2169 4 98 3.19 3.03 9 70 4800 29 34 8058
toyota ガソリン 前輪駆動 フロント 4 102.4 175.6 66.5 53.9 2458 4 122 3.31 3.54 8.7 92 4200 27 32 11248
audi ガソリン 前輪駆動 フロント 4 105.8 192.7 71.4 55.7 2844 5 136 3.19 3.4 8.5 110 5500 19 25 17710
toyota ガソリン 後輪駆動 フロント 2 98.4 176.2 65.6 52 2714 4 146 3.62 3.5 9.3 116 4800 24 30 11549
honda ガソリン 前輪駆動 フロント 2 93.7 150 64 52.6 1940 4 92 2.91 3.41 9.2 76 6000 30 34 6529
dodge ガソリン 前輪駆動 フロント 2 93.7 157.3 63.8 50.8 2128 4 98 3.03 3.39 7.6 102 5500 24 30 7957


CarPrice_predict.csv

メーカー 使用燃料 駆動方式 エンジン位置 ドア数 ホイールベース 車両全長 車両全幅 車両全高 車両重量 エンジン気筒数 エンジンサイズ エンジン内径 エンジン行程 エンジン圧縮比 エンジン最高出力 エンジン回転数 都市部走行燃費 高速道路走行燃費
honda ガソリン 前輪駆動 フロント 4 96.5 175.4 62.5 54.1 2372 4 110 3.15 3.58 9 86 5800 27 33

pythonで株価取得してみよ

#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os
import numpy as np
import pandas as pd
import pandas.tools.plotting as plotting
import datetime as dt
import argparse

parser = argparse.ArgumentParser(description='This is a program to get stock price.')
parser.add_argument('-d', '--date', help='start date', required=True)
parser.add_argument('-c', '--code', help='stock code', required=True)
parse = parser.parse_args()

def get_quote(code, start=None, end=None, interval='d'):
    base = 'http://info.finance.yahoo.co.jp/history/?code={0}.T&{1}&{2}&tm={3}&p={4}'
    #start, end = web._sanitize_dates(start, end)
    start = pd.to_datetime(start)
    if end == None:
        end = pd.to_datetime(pd.datetime.now())
    else :
        end = pd.to_datetime(end)
    start = 'sy={0}&sm={1}&sd={2}'.format(start.year, start.month, start.day)
    end = 'ey={0}&em={1}&ed={2}'.format(end.year, end.month, end.day)
    p = 1
    results = []

    if interval not in ['d', 'w', 'm', 'v']:
        raise ValueError("Invalid interval: valid values are 'd', 'w', 'm' and 'v'")

    while True:
        url = base.format(code, start, end, interval, p)
        tables = pd.read_html(url, header=0)
        if len(tables) < 2 or len(tables[1]) == 0:
            break
        results.append(tables[1])
        p += 1
    result = pd.concat(results, ignore_index=True)

    result.columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
    if interval == 'm':
        result['Date'] = pd.to_datetime(result['Date'], format='%Y年%m月')
    else:
        result['Date'] = pd.to_datetime(result['Date'], format='%Y年%m月%d日')
    result = result.set_index('Date')
    result = result.sort_index()
    return result

def main():
    start = parse.date
    code = parse.code
    t = get_quote(code, start=start)
    print(t)

if __name__ == '__main__':
    main()

Pythonでメール送信ツール作ってみよ

#!/usr/bin/python
# -*- coding: utf-8 -*-
import smtplib
import os
import argparse
import mimetypes

from email import Encoders
from email.Utils import formatdate
from email.Header import Header
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase  import MIMEBase
from email.MIMEImage import MIMEImage
from email.MIMEAudio import MIMEAudio

parser = argparse.ArgumentParser(description='This is a program to send a mail.')
parser.add_argument('-f', '--from_addr', help='From Address',     required=True)
parser.add_argument('-t', '--to_addr',   help='To Address',       required=True)
parser.add_argument('-s', '--subject',   help='Subject',          required=True)
parser.add_argument('-m', '--mta',       help='SMTP Server',      required=False, default='localhost')
parser.add_argument('-a', '--attach',    help='Attachment Files', required=False, default=[],    action='append')
parser.add_argument('-S', '--spam',      help='Send a SPAM mail', required=False, default=False, action='store_true')
parse = parser.parse_args()

def read_file(f):
    try:
        with open(f, 'r') as fh:
            data = fh.read()
    except:
        print('Error: can not open ' + f)
        exit()
    return data

def set_attach(mp, files):
    for f in files:
        # 添付ファイルデータを読み込む
        data = read_file(f)

        # Content-Typeヘッダに添付ファイルのメディアタイプをセット
        # http://docs.python.jp/2/library/mimetypes.html
        # http://docs.python.jp/2/library/email-examples.html
        ctype, encording = mimetypes.guess_type(f)

        # メディアタイプを判定出来ない場合、以下を設定
        if ctype is None or encording is not None:
            ctype = 'application/octet-stream'

        # タイプとサブタイプ
        mtype, msub = ctype.split('/')
        if mtype == 'text':
             mime = MIMEText(data, _subtype=msub)
        elif mtype == 'image':
             mime = MIMEImage(data, _subtype=msub)
        elif mtype == 'audio':
             mime = MIMEAudio(data, _subtype=msub)
        else:
             mime = MIMEBase(mtype, msub)
             mime.set_payload(data)
             Encoders.encode_base64(mime)

        f = os.path.basename(f)
        mime.add_header('Content-Disposition','attachment', filename=f)
        mp.attach(mime)

    return mp

def create_message(d):
    cs = 'UTF-8'
    body = '''
これはテストメールです。

'''
    if d['spam']:
        body = 'XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X'

    msg = MIMEText(body, 'plain', cs)
    if d['attach']:
        mp = MIMEMultipart()
        mp.attach(msg)
        msg = set_attach(mp, d['attach'])

    msg['Subject'] = Header(d['subject'], cs)
    msg['From'] = d['from']
    msg['To'] = d['to']
    msg['Date'] = formatdate(localtime=True)

    d['msg'] = msg
    return d

def send(d):
    s = smtplib.SMTP(d['mta'])
    s.sendmail(d['from'], [d['to']], d['msg'].as_string())
    s.close()

def get_args():
    d = dict()
    d['from'] = parse.from_addr
    d['to'] = parse.to_addr
    d['subject'] = parse.subject
    d['mta'] = parse.mta
    d['attach'] = parse.attach
    d['spam'] = parse.spam
    return d

def main():
    d = get_args()
    d = create_message(d)
    send(d)

if __name__ == '__main__':
    main() 

webスクレイピングやってみよ

#!/usr/bin/python
# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup

# アクセスするURL
url = "http://www.nikkei.com/markets/kabu/"

# URLにアクセスする htmlが帰ってくる → <html><head><title>経済、株価、ビジネス、政治のニュース:日経電子版</title></head><body....
html = urllib2.urlopen(url)

# htmlをBeautifulSoupで扱う
soup = BeautifulSoup(html, "html.parser")

# span要素全てを摘出する→全てのspan要素が配列に入ってかえされます→[<span class="m-wficon triDown"></span>, <span class="l-h...
span = soup.find_all("span")

# print時のエラーとならないように最初に宣言しておきます。
nikkei_heikin = ""
# for分で全てのspan要素の中からClass="mkc-stock_prices"となっている物を探します
for tag in span:
    # classの設定がされていない要素は、tag.get("class").pop(0)を行うことのできないでエラーとなるため、tryでエラーを回避する
    try:
        # tagの中からclass="n"のnの文字列を摘出します。複数classが設定されている場合があるので
        # get関数では配列で帰ってくる。そのため配列の関数pop(0)により、配列の一番最初を摘出する
        # <span class="hoge" class="foo">  →   ["hoge","foo"]  →   hoge
        string_ = tag.get("class").pop(0)

        # 摘出したclassの文字列にmkc-stock_pricesと設定されているかを調べます
        if string_ in "mkc-stock_prices":
            # mkc-stock_pricesが設定されているのでtagで囲まれた文字列を.stringであぶり出します
            nikkei_heikin = tag.string
            # 摘出が完了したのでfor分を抜けます
            break
    except:
        # パス→何も処理を行わない
        pass

# 摘出した日経平均株価を出力します。
print nikkei_heikin

Postfix設定ファイルを見てみよ

Postfix 設定パラメータ

#parameter

意味

queue_directory

Postfix トップレベルキューディレクトリの場所。これは chroot されて 走っている Postfix デーモンプロセスのルートディレクトリです。

command_directory

全ての Postfix 管理コマンドの場所。

daemon_directory

Postfix サポートプログラムおよびデーモンプログラムがあるディレクトリ。 これらは人間によって直接呼び出されるべきではありません。ディレクトリは root が所有しなければいけません。

data_directory

Postfix書き込み可能なデータファイル(キャッシュ、乱数)の場所を指定します。 このディレクトリはmail_ownerアカウントが所有している必要があります。

mail_owner

Postfix キューおよびほとんどの Postfix デーモンプロセスを所有する UNIX システムアカウント。他のアカウントとグループを共有せず、システムの 他のファイルやシステムを所有しないユーザアカウント名を指定します。 特に、nobody や daemon を指定しないでください。「専用のユーザIDと グループIDを使ってください。」

unknown_local_recipient_reject_code

受信者アドレスがローカルで、$local_recipient_maps がその受信者に マッチしない検索テーブルのリストを指定していた場合に、Postfix SMTP サーバが応答する数字のコード。ドメインが $mydestination や $proxy_interfaces、$inet_interfaces にマッチする場合に、受信者 アドレスをローカルと見なします。

デフォルトの設定は 550 (メールを拒否します) ですが、最初は 450 を使って local_recipient_maps 設定が問題ないかどうか確認する時間を取ると より安全です。

alias_database

"newaliases" や "sendmail -bi" で更新される、local(8) 配送のエイリアスデータベース。

$alias_maps で指定されるテーブル全てがローカルファイルである必要は ないため、これは別の設定パラメータになっています。

例:
alias_database = hash:/etc/aliases
alias_database = hash:/etc/mail/aliases

debug_peer_level

リモートクライアントまたはサーバが debug_peer_list パラメータの パターンにマッチした場合の、冗長ログレベルの増分。
(デフォルト: 2)

debugger_command

Postfix デーモンプログラムが -D オプション付きで呼ばれたときに 実行される外部コマンド。

処理が進む前にデバッガを装着するために、"command .. & sleep 5" を 使ってください。X ベースのデバッガを使うのであれば、Postfix を 起動する前に XAUTHORITY 環境変数を設定していることを確認してください。

例:
debugger_command =
    PATH=/usr/bin:/usr/X11R6/bin
    xxgdb $daemon_directory/$process_name $process_id & sleep 5

sendmail_path

Postfix sendmail(1) コマンドの場所を指定している Sendmail 互換機能。 このコマンドは Postfix キューにメールを投函するのに使われます。

newaliases_path

Postfix newaliases(1) コマンドの場所を指定している Sendmail 互換機能。 このコマンドは local(8) aliases(5) データベースを再構築するのに 使われます。

mailq_path

Postfix mailq(1) コマンドがインストールされた場所を指定する Sendmail 互換機能。このコマンドは Postfix メールキューをリストアップするのに 使われます。

setgid_group

set-gid Postfix コマンドおよびグループ書き込み可能な Postfix ディレクトリを所有するグループ。このパラメータ値を変更した場合、 "post-install set-permissions" を再び実行する必要があります。
(デフォルト: postdrop)

html_directory

Postfix サブシステムや機能に関する構築方法や設定方法、操作方法が 書かれた Postfix HTML ファイルの場所。

manpage_directory

Postfix マニュアルページがインストールされた場所。

sample_directory

Postfix 設定例ファイルがあるディレクトリ名。
(デフォルト: /etc/postfix)

readme_directory

Postfix サブシステムや機能に関する構築方法や設定方法、操作方法が 書かれた Postfix README ファイルの場所。

myhostname

このメールシステムのインターネットホスト名。デフォルトでは gethostname() から得た完全修飾ドメイン名を使います。$mydomain は 他の多くの設定パラメータのデフォルト値として使われます。

例:
myhostname = host.domain.tld

mydestination

$local_transport メール配送 transport を使って配送されるドメインの リスト。デフォルトではこれは /etc/passwd および /etc/aliases の 全ての受信者を検索する Postfix local(8) 配送エージェントです。 SMTP サーバは受信者アドレスを $local_recipient_maps で確認し、 存在しない受信者を拒否します。ADDRESS_CLASS_README ファイルの ローカルドメインクラスも参照してください。

デフォルトの mydestination 値はローカルマシンの名前だけを指定して います。メールドメインゲートウェイ上では、$mydomain も含む べきでしょう。

$local_transport 配送方法は、メールシステムの user@[the.net.work.address] (IP アドレスは inet_interfaces および proxy_interfaces パラメータで指定されているもの) 宛のメールアドレスでも 選ばれます。

警告:
バーチャルドメインの名前は指定しないでください - これらの ドメインは別の場所で指定されます。詳細情報は VIRTUAL_README を 参照してください。

このマシンがバックアップ MX ホストになっているドメイン名は 指定しないでください。バックアップ MX ホストをセットアップする方法は STANDARD_CONFIGURATION_README を参照してください。

デフォルトでは、Postfix SMTP サーバは local_recipient_maps パラメータにリストアップされていない受信者宛のメールを拒否します。 local_recipient_maps や unknown_local_recipient_reject_code パラメータの記述は postconf(5) マニュアルを参照してください。

ユーザ名、"/file/name" または "type:table" パターンを空白やカンマで 区切ったリストを指定します。リストは左から右へとマッチし、最初に マッチしたところで検索を止めます。リストから name を除外するには、 "!name" を指定します。"/file/name" パターンはその内容で置き換えられます; "type:table" 検索テーブルは name が検索キーにマッチするとマッチします (検索結果は無視されます)。次の行を空白で始めることで長い行を継続します。

例:
mydestination = $myhostname, localhost.$mydomain $mydomain
mydestination = $myhostname, localhost.$mydomain www.$mydomain, ftp.$mydomain
(デフォルト: $myhostname, localhost.$mydomain, localhost)

inet_interfaces

このメールシステムがメールを受け取るネットワークインターフェース アドレス。デフォルトでは、マシン上でアクティブな全てのインターフェースを ソフトウェアは要求します。このパラメータは user@[ip.address] 宛の メールの配送も制御します。

プロキシやアドレス変換を通って転送されてくるネットワークアドレスに ついては、proxy_interfaces パラメータも参照してください。

注意: このパラメータを変更したら Postfix を stop してから start する 必要があります。
(デフォルト: all)

inet_protocols

サポートされている場合はIPv4IPv6を有効にする。
(デフォルト: all)

mydomain

このメールシステムのインターネットドメイン名。デフォルトでは $myhostname から最初の要素を引いたものを使います。$mydomain は 他の多くの設定パラメータのデフォルト値として使われます。

例:
mydomain = domain.tld

mynetworks

"よそ者" よりも多くの権限を持つ "信頼された" SMTP クライアントの リスト。

特に、"信頼された" SMTP クライアントは Postfix を通したメールの 中継が許可されます。postconf(5) マニュアルの smtpd_recipient_restrictions の記述を参照してください。

"信頼された" ネットワークアドレスのリストは手動で指定することも Postfix に指定させること (これがデフォルトです) もできます。 詳細な情報は mynetworks_style パラメータの記述を参照してください。

代わりに mynetworks リストを手動で指定することもできます。その場合、 Postfix は mynetworks_style の設定を無視します。

network/netmask パターンを空白やカンマで区切ったリストを指定します。 netmask にはホストアドレスのネットワーク部分のビット数を指定します。 "/file/name" や "type:table" パターンを指定することもできます。 "/file/name" パターンはその内容で置き換えられます; "type:table" 検索テーブルはテーブルエントリが検索文字列にマッチすると マッチします (検索結果は無視されます)。次の行を空白で始めることで 長い行を継続します。

例:
mynetworks = 168.100.189.0/28, 127.0.0.0/8
mynetworks = $config_directory/mynetworks
mynetworks = hash:/etc/postfix/network_table

alias_maps

local(8) 配送で使われるエイリアスデータベース。文法の詳細は aliases(5) を参照してください。

デフォルトのリストはシステムに依存します。NIS を持つシステムでは、 デフォルトではローカルのエイリアスデータベースを検索し、それから NIS エイリアスデータベースを検索します。

エイリアスデータベースを変更したら、"postalias /etc/aliases" (またはシステムがメールエイリアスファイルを保存している場所) を 走らせるか、単に "newaliases" を走らせて必要な DBM または DB ファイルを作ってください。

例:
alias_maps = hash:/etc/aliases, nis:mail.aliases
alias_maps = hash:/etc/aliases

owner_request_special

アドレスのローカル部分が owner-listname および listname-request と なっているものを特別扱いします: recipient_delimiter が "-" に なっていても、そのようなアドレスを分割しません。この機能は メーリングリストに便利です。
(デフォルト: yes)

message_size_limit

エンベロープ情報を含む、バイト単位のメッセージの最大サイズ。
(デフォルト: 10240000)

mailbox_size_limit

エンベロープ情報を含む、バイト単位のメッセージの最大サイズ。
(デフォルト: 10240000)

smtpd_recipient_restrictions

Postfix SMTP サーバが RCPT TO コマンドの場面で適用するアクセス制限。

デフォルトでは、Postfix SMTP サーバは以下のものを受け取ります:

IP アドレスが $mynetworks にマッチするクライアントからのメール、 または:
送信者指定のルーティング ((user@elsewhere@domain) を含むアドレス宛 以外で $relay_domains にマッチするリモートの配送先へのメール、または:
$inet_interfaces や $proxy_interfaces、$mydestination、 $virtual_alias_domains、$virtual_mailbox_domains にマッチする、 ローカル配送先へのメール。
重要: このパラメータの設定を変更したら、少なくとも以下のどれか 一つの制限を指定しなければいけません。そうしないと、Postfix は メールの受信を拒否してしまいます:

    reject, defer, defer_if_permit, reject_unauth_destination
制限のリストをカンマまたは空白で区切って指定します。次の行を空白で 始めることで長い行を継続します。制限は指定された順に適用されます; 最初にマッチした制限が勝ちます。

以下の制限は RCPT TO コマンドで受け取る受信者アドレスに特有です。

check_recipient_access type:table
指定された access(5) データベースで RCPT TO アドレスやドメイン、 親ドメイン、localpart@ を検索し、対応する action を実行します。
check_recipient_mx_access type:table
指定された access(5) データベースで RCPT TO アドレスの MX ホストを 検索し、対応する action を実行します。注意: 安全上の理由から "OK" という結果は許されません。特定のホストをブラックリストから外すには、 代わりに DUNNO を使ってください。この機能は Postfix 2.1 以降で使えます。
check_recipient_ns_access type:table
指定された access(5) データベースで RCPT TO アドレスの DNS サーバを 検索し、対応する action を実行します。注意: 安全上の理由から "OK" という結果は許されません。特定のホストをブラックリストから外すには、 代わりに DUNNO を使ってください。この機能は Postfix 2.1 以降で使えます。
permit_auth_destination
以下のうち一つを満たした場合に、要求を許可します:
Postfix がメールを転送する場合: 解決された RCPT TO アドレスが $relay_domains またはそのサブドメインにマッチし、送信者指定の ルーティング (user@elsewhere@domain) を含まない場合、
Postfix が最終配送先の場合: 解決された RCPT TO アドレスが $mydestination や $inet_interfaces、$proxy_interfaces、 $virtual_alias_domains、$virtual_mailbox_domains にマッチし、 送信者指定のルーティング (user@elsewhere@domain) を含まない場合。
permit_mx_backup
ローカルメールシステムが RCPT TO アドレスの MX ホストの場合に、 要求を許可します。これはローカルメールシステムが最終配送先の場合も 含みます。しかし SMTP サーバは、送信者指定のルーティング情報 (例: user@elsewhere@domain) 付きのアドレスを持つメールは転送しません。 一次 MX ホストがネットワークブロックのリストにマッチすることを 要求するには、オプションの permit_mx_backup_networks を使ってください。
注意: Postfix バージョン 2.0 より前のバージョンでは、 permit_mx_backup の使用は推奨されません: 一時的に DNS 検索に問題が あった場合にメールを拒否するかもしれません。
reject_non_fqdn_recipient
RCPT TO アドレスが RFC で要求されているような完全修飾ドメイン 形式ではない場合に、要求を拒否します。
non_fqdn_reject_code パラメータには拒否された要求に対する応答コードを指定します (デフォルト: 504)。
reject_rhsbl_recipient rbl_domain=d.d.d.d
RCPT TO ドメインrbl_domain 以下の A レコード "d.d.d.d" でリストアップされている場合に、要求を拒否します (Postfix バージョン 2.1 以降のみ)。"=d.d.d.d" が 指定されていないと、逆にしたクライアントネットワークアドレスが rbl_domain 以下のいずれかの A レコードでリストアップされている 場合に、要求を拒否します。 .br maps_rbl_reject_code パラメータには要求を拒否する際の応答コードを (デフォルト: 554)、default_rbl_reply にはデフォルトのサーバ応答を、 そして rbl_reply_maps パラメータには rbl_domain でインデックス化 されたサーバ応答を持つテーブルを指定します。この機能は Postfix 2.0 以降で使えます。
reject_unauth_destination
以下のどれか一つに当てはまらない場合に、要求を拒否します:
Postfix がメールを転送する場合: 解決された RCPT TO アドレスが $relay_domains またはそのサブドメインにマッチし、送信者指定の ルーティング (user@elsewhere@domain) を含まない場合、
Postfix が最終配送先の場合: 解決された RCPT TO アドレスが $mydestination や $inet_interfaces、$proxy_interfaces、 $virtual_alias_domains、$virtual_mailbox_domains にマッチし、 送信者指定のルーティング (user@elsewhere@domain) を含まない場合。
relay_domains_reject_code パラメータには、拒否された要求に対する 応答コードを指定します (デフォルト: 554)。
reject_unknown_recipient_domain
RCPT TO アドレスに DNS A または MX レコードがなく、Postfix がその 受信者アドレスの最終配送先ではない場合に、要求を拒否します。
unknown_address_reject_code パラメータには、拒否された要求に対する 応答コードを指定します (デフォルト: 450)。一時的な DNS エラーの 場合には、応答は常に 450 です。
reject_unlisted_recipient (Postfix 2.0 の名前: check_recipient_maps)
RCPT TO アドレスがドメインクラスに対する有効な受信者リストにない場合に、 要求を拒否します。詳細は smtpd_reject_unlisted_recipient の記述を 参照してください。この機能は Postfix 2.1 以降で使えます。
reject_unverified_recipient
RCPT TO アドレスがバウンスするとわかっている場合や、受信者アドレスの 配送先に到達できない場合に、要求を拒否します。アドレス検証情報は verify(8) サーバによって管理されます; 詳細は ADDRESS_VERIFICATION_README ファイルを参照してください。
unverified_recipient_reject_code パラメータには、アドレスがバウンスするとわかっている場合の応答を 指定します (デフォルト: 450, 変えても安全だという自信がある場合には 550 に変えてください)。 Postfix は一時的な問題でプローブが失敗した 場合には 450 で応答します。この機能は Postfix 2.1 以降で使えます。
この場面で有効な他の制限:

Generic SMTP コマンドのどの場面でも使える 一般的な制限は smtpd_client_restrictions に記述されています。
SMTP コマンドに特有の制限は smtpd_client_restrictions や smtpd_helo_restrictions、smtpd_sender_restrictions に記述されています。
例:
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
(デフォルト: permit_mynetworks, reject_unauth_destination)

smtpd_recipient_limit

Postfix SMTP サーバがメッセージ配送要求ごとに受け付ける、最大の 受信者数。
(デフォルト: 1000)

fallback_relay

見つからなかったり到達できない SMTP 配送先への、オプションのリレー ホストのリスト。

デフォルトでは、配送先が見つからない場合にはメールは送信者に返され、 配送先に到達できない場合には配送が遅延されます。

fallback relay は SMTP による配送先でなければいけません。ドメイン、 ホスト、host:port、[host]:port、[address] または [address]:port を 指定します; [host] の形式は MX 検索を無効にします。複数の SMTP 配送先を指定すると、Postfix は指定された順でそれらを試します。
(デフォルト: empty)

transport_maps

受信者アドレスから (メッセージ配送 transport、next-hop 配送先) への マッピングを持つ、オプションの検索テーブル。詳細は transport(5) を 参照してください。

ゼロ個以上の "type:table" 検索テーブルを指定してください。この機能を ローカルファイルで使うのであれば、変更後に "postmap /etc/postfix/transport" を実行してください。

例:
transport_maps = dbm:/etc/postfix/transport
transport_maps = hash:/etc/postfix/transport
(デフォルト: empty)

smtp_helo_name

SMTP EHLO または HELO コマンドで送るためのホスト名。

デフォルト値はマシンのホスト名です。ホスト名または [ip.add.re.ss] を 指定します。

全ての SMTP クライアントに対しては main.cf ファイルでこの情報を指定 できますし、もしくは特定のクライアントに対しては master.cf ファイルで 指定できます。例:

  /etc/postfix/master.cf:
        mysmtp ... smtp -o smtp_helo_name=foo.bar.com
(デフォルト: $myhostname)

awkコマンド使ってみよ

<ファイル操作>

  • 文法

 awk (オプション) ファイル名

  • オプション

 -F 文字  区切り文字を指定
 -f     awk処理のパターンを記述したプログラムファイルを指定

  • 実行例

 ▼ 第3フィールドを表示
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 $ cat awk_test.txt
 AAAAAAA BBBBBBB ccccccc EEEEEEE
 $ awk '{print $3}' awk_test.txt
 ccccccc
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 ▼ 小文字の行を検索して表示
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 $ cat awk_test.txt
 AAAAAAA
 BBBBBBB
 ccccccc
 EEEEEEE
 $ awk '/^[a-z]/ {print}' awk_test.txt
 ccccccc
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 ▼ 第3フィールド(数値)が5より大きい行を検索して表示
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 $ cat awk_test.txt
 AAA BBB 2
 ccc ddd 7
 eee fff 5
 ggg hhh 9
 $ awk '$3 > 5' awk_test.txt
 ccc ddd 7
 ggg hhh 9
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー