<jupyter_start><jupyter_text><jupyter_code>def import_test():
    print("All Functions Imported!")
def page_preprocessing(df_page):
    df_page.drop(["ページ"],axis=1,inplace=True)
    
    print('page preprocessed!')
def value_preprocessing(df_value):
    df_value['価格'].replace('応談', np.nan, inplace=True)
    df_value['価格'] = df_value['価格'].astype('float64')
    
    print('value preprocessed!')
def total_preprocessing(df_total):
    df_total['総額'] = df_total['総額'].map(lambda x : x[4:])
    df_total['総額'] = df_total['総額'].map(lambda x : x.split("万")[0])
    df_total['総額'].replace('非課税', '', inplace=True)
    df_total['総額'].mask(df_total['総額']=="", df_total['価格'], inplace=True)
    df_total['総額'] = df_total['総額'].astype('float64')
    df_total.drop(['価格'], axis=1, inplace=True)
    
    df_total.dropna(how='any', inplace=True) #なぜか代入じゃなくてinplaceにしたら変更された
    
    total_index = df_total[df_total['総額'] >= 1000].index
    df_total.drop(total_index, inplace=True)
    
    print('total preprocessed!')
def name_preprocessing(df_name):
    from sklearn.preprocessing import LabelEncoder
    global LE_name
    
    name_lists = [
        "２ＷＤ"
        ,"４ＷＤ"
        ,"右ハンドル"
        ,"左ハンドル"
        ,"未使用車バック"
        ,"未登録車"
        ,"未使用車"
        ,"未登録"
        ,"登録済"
        ,"届出済"
        ,"届け出済"
        ,"届け出済み"
        ,"シートヒーター"
        ,"福祉車両"
        ,"６６０"
        ,"ワンセグ"
        ,"特別仕様車"
        ,"地デジナビＴＶカメラ"
        ,"ディーゼル車"
        ,"３ペダル"
        ,"平ボディ"
        ,"１０尺"
        ,"ｔ積"
        ,"５速"
        ,"ＭＴＡ"
        ,"スマートキー"
        ,"新車"
        ,"長野ダイハツ販売"
        ,"認定中古車"
        ,"オートマ"
        ,"ＡＴ"
        ,"ＭＴ"
        ,"５ＭＴ"
        ,"６ＭＴ"
        ,"エアコン"
        ,"助手席エアバック"
        ,"助手席エアバッグ"
        ,"保証付き"
        ,"システム"
        ,"ブレーキ"
        ,"両側"
        ,"電動"
        ,"スライドドア"
        ,"前後"
        ,"衝突"
        ,"被害"
        ,"軽減"
        ,"センサー"
        ,"付"
        ,"全方位"
        ,"カメラ"
        ,"キーレス"
        ,"フルセグナビ"
        ,"モニター"
        ,"両側パワスラ"
        ,"両側電動ドア"
        ,"保証書"
        ,"ＥＴＣ"
        ,"Ｂカメラ"
        ,"サンルーフ"
        ,"デジタルミラ−"
        ,"レーダー"
        ,"禁煙車"
        ,"試乗車"
        ,"自社車"
        ,"パワースライドドア"
        ,"パワーウインドウ"
        ,"岡モータース"
        ,"走行距離４０ｋｍ"
        ,"アイドリングストップ"
        ,"バック パワー アイドリングスト"
        ,"修復歴無"
        ,"寒冷地仕様"
        ,"新型"
        ,"ワンオーナー"
        ,"エアロメッキＬＥＤ１５アルミ"
        ,"コンプリートカスタムデモカー"
        ,"搭載！"
        ,"９インチ純正ナビき"
        ,"オートライト"
        ,"運転席助手席"
        ,"９インチナビＴＶバックデュアル"
        ,"本革"
        ,"シート"
        ,"リアゲート"
        ,"クルーズコントロール"
        ,"スズキセーフティサポート"
        ,"ＡＣ１００Ｖ 防止 クルーズ パワスラ シ"
        ,"海外仕様"
        ,"．"
        ,"標準"
        ,"（３０ｋｗｈ）"
        ,"（先進快適ＰＫＧ）"
        ,"※元レンタカー"
        ,"Ｖｅｒ"
        ,"片側パワスラ  ＡＡＣ ステリモ"
        ,"パワステ"
        ,"パワスラ"
        ,"仕様"
        ,"片側"
        ,"、Ｗキャブ６人乗り、ディーゼル、、即納可能、尿素無しモデル"
        ,"ユーザー買取車 ＬＥＤコンフォートパッケージ 前席 ＢＴ接続 ビルトイン"
        ,"７人乗り"
        ,"障害物"
        ,"ピラーレス"
        ,"ナビ装着パッケージ"
        ,"リアワイド"
        ,"リモートコントロールスイッチ"
        ,"フロン"
        ,"純正オーディオ"
        ,"地デジナビ純正バック"
    ]

    change_lists = {
        "ＩＩＩ":"３"
        ,"ＩＩ":"２"
        ,"冷凍車":"冷凍"
        ,"新明和製":"新明和"
        ,"Ｅｄ":"エディション"
        ,"ヤリス ヤリス":"ヤリス"
        ,"ライズ ライズ":"ライズ"
        ,"ＫＣ パワステ農繁":"ＫＣパワステ農繁"
        ,"ＭＯＤＥ":"モード"
        ,"＿":"-"
        ,"‐":"−"
        ,"−Ｍ":"Ｍ"
        ,"アルファード アルファード":"アルファード"
        ,"ジムニー ジムニー":"ジムニー"
        ,"Ｔｒａｉｌｈａｗｋ":"トレイルホーク"
        ," 農繁":"農繁"
        ,"２０２１ｙモデル":"２０２１年モデル"
        ,"Ｒ Ｔ":"ＲＴ"
        ,"Ｃｕｓｔｏｍ":"カスタム"
        ,"Ｌ ホンダセンシング":"Ｌホンダセンシング"
        ,"Ａｄｖｅｎｔｕｒｅ":"アドベンチャー"
        ,"Ａｄｖａｎｃｅ":"アドバンス"
    }
    
    df_name['車名'] = df_name['車名'].str.translate(str.maketrans({"・":" ","／":" "}))
    
    for name_list in name_lists:
        df_name['車名'] = df_name['車名'].str.replace(name_list, '')
        
    for change_list in change_lists:
        df_name['車名'] = df_name['車名'].str.replace(change_list, change_lists[change_list])
    
    df_name['車名'] = df_name['車名'].str.rstrip(' ')
    
    LE_name = LabelEncoder()
    LE_name.fit(df_name['車名'])
    df_name['車名'] = LE_name.transform(df_name['車名'])
    
    print('name preprocessed!')
def color_preprocessing(df_color):
    df_color_columns = {"ブラック":2
                        ,"黒":2
                        ,"クロ":2
                        ,"ブラツク":2
                        ,"ＢＬＡＣＫ":2
                        ,"Ｘ０７":2
                        ,"ダーク":2
                        ,"ネロ":2
                        ,"カンナディフチーレ":2
                        ,"ＮＥＲＯ":2
                        ,"フラック":2
                        ,"ライノー":2
                        ,"プレミアムグラマー":2
                        ,"ホワイト":3
                        ,"シロ":3
                        ,"白":3
                        ,"ＷＨＩＴＥ":3
                        ,"Ｗｈｉｔｅ":3
                        ,"ヴアンコアヴス":3
                        ,"ソニッククオーツ":3
                        ,"パール":5
                        ,"Ｗ２５":5
                        ,"Ｗ２４":5
                        ,"ＺＶＲ":5
                        ,"シルバー":7
                        ,"シルバ−":7
                        ,"ブラウン":11
                        ,"茶":11
                        ,"ブロンズ":11
                        ,"ブロンド":11
                        ,"ブロンゾ":11
                        ,"チャ":11
                        ,"モカ":11
                        ,"マロン":11
                        ,"エボニー":11
                        ,"ビターショコラ":11
                        ,"アンドラ":11
                        ,"ブルー":13
                        ,"ブル−":13
                        ,"ブル ポディオ":13
                        ,"アオ":13
                        ,"青":13
                        ,"Ｂｌｕ":13
                        ,"Ｂ８２":13
                        ,"ＺＹＷ":13
                        ,"ミツドナイトブル":13
                        ,"ジーンズ":13
                        ,"ミズイロ":17
                        ,"水色":17
                        ,"ソーダ":17
                        ,"アクア":17
                        ,"モーニングミスト":17
                        ,"ターコイズ":17
                        ,"チーフＣ／Ｃ":17
                        ,"アイボリー":19
                        ,"レッド":23
                        ,"アカ":23
                        ,"赤":23
                        ,"ロッソアバルト":23
                        ,"マグマ":23
                        ,"Ｍａｇｍａ":23
                        ,"Ａｍｏｒｅ":23
                        ,"Ａｂａｒｔｈ":23
                        ,"スナッズベリー":23
                        ,"Ｒ７５":23
                        ,"ファイアー":23
                        ,"ＲＥＤ":23
                        ,"Ｒｅｄ":23
                        ,"エネルギア":23
                        ,"リッド":23
                        ,"ベージュ":29
                        ,"グリーン":31
                        ,"緑":31
                        ,"ミドリ":31
                        ,"ＧＲＥＥＮ":31
                        ,"Ｇｒｅｅｎ":31
                        ,"グレー":37
                        ,"灰":37
                        ,"ＧＲＥＹ":37
                        ,"Ｇｒｅｙ":37
                        ,"ストームベイ":37
                        ,"ストーム・ベイ":37
                        ,"ＧＲＡＮＩＴＥ ＣＲＹＳＴＡＬ ＭＥＴ． Ｃ／Ｃ":37
                        ,"Ｓ４２":37
                        ,"グリジオ":37
                        ,"ＧＲＩＧＩＯ":37
                        ,"グレイ":37
                        ,"サロス":37
                        ,"アルミニウム":37
                        ,"セメント":37
                        ,"プレミアムサンライ":37
                        ,"グリ シャーク":37
                        ,"ピンク":41
                        ,"Ｒ７４":41
                        ,"パープル":43
                        ,"ムラサキ":43
                        ,"紫":43
                        ,"ウィスパー":43
                        ,"Ｈｅｌｌｒａｉｓｉｎ":43
                        ,"プルーン":43
                        ,"オレンジ":47
                        ,"ダイダイ":47
                        ,"ゴーマンゴー":47
                        ,"オランジュ":47
                        ,"ナチョ":47
                        ,"ＯＧ":47
                        ,"エメラルド":53
                        ,"イエロー":59
                        ,"キ":59
                        ,"黄":59
                        ,"レモン":59
                        ,"モデナ":59
                        ,"ジョンシリウス":59
                        ,"アイボ":59
                        ,"カーキ":61
                        ,"ワイン":67
                        ,"ガン":71
                        ,"ツートン":73
                        ,"紺":79
                        ,"コン":79
                        ,"ノクターン":79
                        ,"アンヴィル":79
                        ,"ローズ":83
                        ,"マゼンタ":89
                        ,"ミント":97
                        ,"ボルドー":101
                        ,"オキサイド":103
                        ,"ゴールド":107
                        ,"オル":107
                        ,"金":107
                        ,"サンド":107
                        ,"サーブル":109
                        ,"チタニウムフラッシュ":113
                        ,"特色":127
                        ,"ルージュ":131
                        ,"クリーム":137
                        ,"ブラキッシュ":139
                        ,"メタルストリーム":149
                        ,"ブランナクレ":151
                        ,"バイオレット":157
                        ,"カッパー":163
                        ,"コッパー":163
                        ,"コッパ−":163
                        ,"グリジオカンポボーロ":167
                        ,"セラミック":173
                        ,"ソノタ":179
                        ,"Ｗ２４ Ｘ Ｔ３２":181
                        ,"クリムゾン":191
                        ,"マルーン":193
                        ,"ルリ":197
                        ,"グリジオレコード":199
                        ,"ソニッククォーツ":211
                        ,"バーチ":223
                        ,"オリーブ":227
                        ,"グラファイト":229
                        ,"グラナイト":233
                        ,"チタニウム":239
                        ,"チタニュウム":239
                        ,"マケナ":241
                        ,"シトロン":251
                        ,"Ｓ２８":257
                        ,"アンバー":263
                        ,"ネロスコルピオーネ":269
                        ,"アルタンス":271
                        ,"プラチナム":277
                        ,"ノアール":281
                        ,"ロッソコルサ":283
                        ,"プラチナ":293
                        ,"シアン":307
                        ,"ピーチ":311
                        ,"バニラ":313
                        ,"ガレナ":317
                        ,"ビアンコ":331
                        ,"Ｂｉａｎｃｏ":331
                        ,"スカーレット":337
                        ,"スカ−レット":337
                        ,"オルビザンタン":347
                        ,"クレヨン":349
                        ,"アメジスト":353
                        ,"Ｃａｍｐｏｖｏｌｏ":359
                        ,"Ｒｅｃｏｒｄ":367
                        ,"コーラル":373
                        ,"タングステン":379
                        ,"Ｒ６７":383
                        ,"メタル":389
                        ,"Ｒ５９":397
                        ,"シェリー":401
                        ,"Ｒ７４":409
                        ,"ブラン ナクレ":419
                        ,"各色":421
                        ,"ホライズンシー":431

                        #形容詞
                        ,"メタリック":547
                        ,"マイカ":557
                        ,"クリスタル":563
                        ,"スチール":569
                        ,"スティール":571
                        ,"ディープ":577
                        ,"クール":587
                        ,"スパークル":593
                        ,"ミッドナイト":601
                        ,"ガラスフレーク":607
                        ,"ライト":613
                        ,"スカイ":619
                        ,"ＩＩ":631
                        ,"Ｍ":641
                        ,"ブライト":643
                        ,"シャイン":647
                        ,"アーバン":653
                        ,"スパークル":659
                        ,"ソニック":661
                        ,"スポーティー":673
                        ,"コバルト":677
                       }
    
    df_color['色'] = df_color['色'].str.translate(str.maketrans({"\u3000":" "}))
    df_color['色数字'] = 1
    for df_color_column in df_color_columns:
        df_color['色数字'] = df_color['色数字'].mask(df_color['色'].str.contains(df_color_column), df_color['色数字'] * df_color_columns[df_color_column])
    df_color['色'] = df_color['色数字']
    df_color.drop(['色数字'], axis=1, inplace=True)
    
    print('color preprocessed!')
def year_preprocessing(df_year):
    df_year['年式'] = df_year['年式'].map(lambda x : x.split('(')[1]) #平成〇〇年対策
    df_year['年式'] = df_year['年式'].map(lambda x : x[:-3])
    df_year['年式'] = df_year['年式'].astype('int')
    
    print('year preprocessed!')
def distance_preprocessing(df_distance):
    import re
    df_distance['走行距離'] = df_distance['走行距離'].str.translate(str.maketrans({"k":"", "m":"", ".":"", "−":"0", "－":"0"}))
    df_distance['走行距離'] = df_distance['走行距離'].map(lambda x : x.replace('万',"000"))
    #df_distance['走行距離'] = df_distance['走行距離'].map(lambda x : re.sub('\D',"0",x))
    df_distance['走行距離'][df_distance['走行距離']==""] = -1
    df_distance['走行距離'] = df_distance['走行距離'].astype("float")
    
    print('distance preprocessed!')
def area_preprocessing(df_area):
    from sklearn.preprocessing import LabelEncoder
    global LE_area
    LE_area = LabelEncoder()
    LE_area.fit(df_area['地域'])
    df_area['地域'] = LE_area.transform(df_area['地域'])
    
    print('area preprocessed!')
def inspection_preprocessing(df_inspection):
    df_inspection['車検'] = df_inspection['車検'].str.translate(str.maketrans({"/":""}))
    df_inspection['車検'][df_inspection['車検']=='車検整備付'] = 202507
    df_inspection['車検'][df_inspection['車検']=='新車未登録'] = 202607
    df_inspection['車検'][df_inspection['車検']=='車検整備なし'] = 197107
    df_inspection['車検'][df_inspection['車検']==''] = 0
    df_inspection['車検'] = df_inspection['車検'].astype('float') #やはりケチらずにfloatにした
    df_inspection['車検'] = df_inspection['車検'] - 202107
    
    print('inspection preprocessed!')
def repair_preprocessing(df_repair):
    import re
    df_repair['修復歴'] = df_repair['修復歴'].str.translate(str.maketrans({"な":"0","あ":"1"}))
    df_repair['修復歴'] = df_repair['修復歴'].map(lambda x : re.sub("\D", "", x))
    df_repair['修復歴'] = df_repair['修復歴'].astype('int')
    
    print('repair preprocessed!')
def unused_preprocessing(df_unused):
    df_unused['未使用車'] = df_unused['未使用車'].str.translate(str.maketrans({"−":"0", "－":"0", "○":"1"}))
    df_unused['未使用車'] = df_unused['未使用車'].astype('int')
    
    print('unused preprocessed!')
def oneowner_preprocessing(df_oneowner):
    df_oneowner['ワンオーナー'] = df_oneowner['ワンオーナー'].str.translate(str.maketrans({"−":"0", "－":"0", "○":"1"}))
    df_oneowner['ワンオーナー'] = df_oneowner['ワンオーナー'].astype('int')
    
    print('oneowner preprocessed!')
def nosmoking_preprocessing(df_nosmoking):
    df_nosmoking['禁煙車'] = df_nosmoking['禁煙車'].str.translate(str.maketrans({"−":"0", "－":"0", "○":"1"}))
    df_nosmoking['禁煙車'] = df_nosmoking['禁煙車'].astype('int')
    
    print('nosmoking preprocessed!')
def guarantee_preprocessing(df_guarantee):
    #import re
    
    #保証なし、保証付き(有償)、保証付き(無料)を識別する保証フラグ
    df_guarantee['保証フラグ'] = 0
    df_guarantee['保証フラグ'] = df_guarantee['保証フラグ'].mask(df_guarantee['保証'].str.contains('有償'), 1)
    df_guarantee['保証フラグ'] = df_guarantee['保証フラグ'].mask(df_guarantee['保証'].str.contains('無料'), 2)
    
    #無料保証の期間(期限)、距離を特徴量として確保
    df_guarantee['保証期間'] = df_guarantee['保証'].map(lambda x : x.split(" ")[1] if (('期限' in x) or ('期間' in x)) else 0)
    df_guarantee['保証距離'] = df_guarantee['保証'].map(lambda x : x.split(" ")[2] if ('距離' in x) else 0)
    
    #保証期間と保証距離に無制限等の変数の数値化等を施す
    for name in ['保証期間','保証距離']:
        df_guarantee[name] = df_guarantee[name].map(lambda x : re.sub("\D", "", str(x)))
        df_guarantee[name].replace('', '999999', inplace=True)
        df_guarantee[name] = df_guarantee[name].astype('int')
        
    #保証期間は年と月に分けて計算し、最終的に何ヶ月保証期間があるかに直す
    df_guarantee['保証期間'] = df_guarantee['保証期間'].map(lambda x : (int(str(x)[:4])-2021)*12 + (int(str(x)[4:])-7) if ((int(str(x)[:4]) - 2021) > 0) or (((int(str(x)[:4]) - 2021) == 0) and (int(str(x)[4:]) - 7 >= 0)) else x)
    df_guarantee['保証期間'] = df_guarantee['保証期間'].map(lambda x : (-1) * ((2021-int(str(x)[:4]))*12 + (7-int(str(x)[4:]))) if (x > 1000) else x)
    
    #保証はいらない(保証は大切)
    df_guarantee.drop(['保証'], axis=1, inplace=True)
    
    print('guarantee preprocessed!')
def kkkcom_preprocessing_over(df):
    #df.reset_index(inplace=True, drop=True)
    page_preprocessing(df)
    value_preprocessing(df)
    total_preprocessing(df)
    name_preprocessing(df)
    color_preprocessing(df)
    year_preprocessing(df)
    distance_preprocessing(df)
    area_preprocessing(df)
    inspection_preprocessing(df)
    repair_preprocessing(df)
    unused_preprocessing(df)
    oneowner_preprocessing(df)
    nosmoking_preprocessing(df)
    guarantee_preprocessing(df)
def all_plot(df_final):
    import matplotlib.pyplot as plt
    import japanize_matplotlib
    #from sklearn.linear_model import LinearRegression
    
    y = df_final['総額']
    columns = ['総額','色','年式','走行距離','地域','車検','修復歴','未使用車','ワンオーナー'
              ,'禁煙車','保証フラグ','保証期間','保証距離'
              ]
    
    fig, ax = plt.subplots(len(columns),1,figsize=(40,30*len(columns)))
    plt.rcParams["font.size"] = 30
    
    #model_lr = LinearRegression()

    for i,column in enumerate(columns):
        x = df_final[column]
        
        ax[i].set_title(column)

        ax[i].scatter(x,y)
        
        #model_lr.fit(x,y)
        #ax[i].plot(x, model_lr.predict(x), color='black')
        
        print(column,'の相関係数：',x.corr(y))
        
    plt.show()
def mission_preprocessing(df_mission):
    from sklearn.preprocessing import LabelEncoder
    
    names = [("ワゴンＲ","CVT"),("タント Ｘ　ＳＡ","CVT"),("アルト Ｌ","CVT"),("ムーヴ Ｌ","CVT"),("スペーシア","CVT"),("ハスラー","CVT"),("ルークス Ｘ","CVT")
             ,("ＱＸ８０ プロアクティブ","AT"),("ピクシスバン クルーズ","AT"),("ジープ・チェロキー","AT")
             ,("パナメーラ ＧＴＳ","MT"),("Ｎ−ＶＡＮ＋スタイル","MT")]
    for car,mission in names:
        df_mission['ミッション'][(df_mission['ミッション']=='') & (df_mission['車名'].str.contains(car))] = mission
        
    global LE_mission
    LE_mission = LabelEncoder()
    LE_mission.fit(df_mission['ミッション'])
    df_mission['ミッション'] = LE_mission.transform(df_mission['ミッション'])
    
    print('mission preprocessed!')
def drive_preprocessing(df_drive):
    df_drive['駆動方式'] = df_drive['駆動方式'].map(lambda x : x[:1])
    df_drive['駆動方式'] = df_drive['駆動方式'].astype('int')
    
    print('drive preprocessed!')
def displacement_preprocessing(df_displacement):
    df_displacement['排気量'] = df_displacement['排気量'].map(lambda x : x[:-2])
    df_displacement['排気量'].replace('', '0', inplace=True)
    df_displacement['排気量'] = df_displacement['排気量'].astype('int')
    
    print('displacement preprocessed!')
def door_preprocessing(df_door):
    df_door['ドア数'] = df_door['ドア数'].map(lambda x :x[:-2])
    df_door['ドア数'].replace('', '0', inplace=True)
    df_door['ドア数'] = df_door['ドア数'].astype('int')
    
    print('door preprocessed!')
def capacity_preprocessing(df_capacity):
    df_capacity['乗車定員'] = df_capacity['乗車定員'].str.translate(str.maketrans({"名":"","以":"","上":""}))
    df_capacity['乗車定員'][df_capacity['乗車定員']==''] = 0
    df_capacity['乗車定員'] = df_capacity['乗車定員'].astype('int')
    
    print('capacity preprocessed!')
def fuel_preprocessing(df_fuel):
    from sklearn.preprocessing import LabelEncoder
    global LE_fuel
    LE_fuel = LabelEncoder()
    LE_fuel.fit(df_fuel['燃料'])
    df_fuel['燃料'] = LE_fuel.transform(df_fuel['燃料'])
    
    print('fuel preprocessed!')
def handle_preprocessing(df_handle):
    from sklearn.preprocessing import LabelEncoder
    global LE_handle
    LE_handle = LabelEncoder()
    LE_handle.fit(df_handle['ハンドル'])
    df_handle['ハンドル'] = LE_handle.transform(df_handle['ハンドル'])
    
    print('handle preprocessed!')
def number_preprocessing(df_number):
    nums = {'（下3桁）':""
            ,'BVF':"-1"
            ,'4M-':"-2"
            ,'36L':"-3"
            ,'40A':"-4"
            ,'25-':"-5"
            ,'5S-':"-6"
            ,'RF-':"-7"
            ,'KL-':"-8"
            ,'FF-':"-9"
           }
    
    for num in nums:
        df_number['車台番号'] = df_number['車台番号'].map(lambda x : x.replace(num, nums[num]))
        
    df_number['車台番号'] = df_number['車台番号'].astype('int')
    
    print('number preprocessed!')
def record_preprocessing(df_record):
    df_record['記録簿'] = df_record['記録簿'].map(lambda x : 0 if (x=='') else 1)
    
    print('record preprocessed!')
def recycle_preprocessing(df_recycle):
    from sklearn.preprocessing import LabelEncoder
    global LE_recycle
    LE_recycle = LabelEncoder()
    LE_recycle.fit(df_recycle['リサイクル料'])
    df_recycle['リサイクル料'] = LE_recycle.transform(df_recycle['リサイクル料'])
    
    print('recycle preprocessed!')
def maintenance_preprocessing(df_maintenance):
    df_maintenance['整備フラグ'] = 0
    df_maintenance['整備フラグ'] = df_maintenance['整備フラグ'].mask(df_maintenance['整備']=='法定整備付', 1)
    df_maintenance['整備フラグ'] = df_maintenance['整備フラグ'].mask(df_maintenance['整備']=='法定整備なし', 2)
    
    df_maintenance['整備費'] = 0
    df_maintenance['整備費'] = df_maintenance['整備'].map(lambda x : x[9:-2] if ('整備費' in x) else '0')
    
    df_maintenance['整備費'] = df_maintenance['整備費'].str.translate(str.maketrans({",":""}))
    df_maintenance['整備費'] = df_maintenance['整備費'].astype('int')
    
    del df_maintenance['整備']
    
    print('maintenance preprocessed!')
def judgement_preprocessing(df_judgement):
    df_judgement['修復レベル'] = 0
    for num, name in enumerate(['無','軽度','中度','重度']):
        df_judgement['修復レベル'] = df_judgement['修復レベル'].mask(df_judgement['ID車両(グー鑑定)'].str.contains(name), num+1)
        
    df_judgement['外装'] = df_judgement['ID車両(グー鑑定)'].map(lambda x : int(x[3:4]) if ('鑑定日' in x) else 0)

    df_judgement['内装'] = df_judgement['ID車両(グー鑑定)'].map(lambda x : int(x[8:9]) if ('鑑定日' in x) else 0)
    
    df_judgement['鑑定日'] = df_judgement['ID車両(グー鑑定)'].map(lambda x : x[-11:-1] if ('鑑定日' in x) else "0")
    df_judgement['鑑定日'] = df_judgement['鑑定日'].str.translate(str.maketrans({"-":""}))
    df_judgement['鑑定日'] = df_judgement['鑑定日'].astype('int')
    
    del df_judgement['ID車両(グー鑑定)']
    
    print('judgement preprocessed!')
def lwhwf_preprocessing(df_lwhwf):
    lwhwf_names = ["全長","全幅","全高","車両重量","燃費"]
    lwhwf_dtypes = ['int','int','int','int','float']
    for lwhwf_name,lwhwf_dtype  in zip(lwhwf_names,lwhwf_dtypes):
        df_lwhwf[lwhwf_name] = df_lwhwf[lwhwf_name].map(lambda x : x[:-4] if ("※" in str(x)) else "0")
        df_lwhwf[lwhwf_name] = df_lwhwf[lwhwf_name].str.translate(str.maketrans({",":"","k":"","m":""}))
        df_lwhwf[lwhwf_name] = df_lwhwf[lwhwf_name].astype(lwhwf_dtype)
        
    print('lwhwf preprocessed!')
def usingfuel_preprocessing(df_usingfuel):
    from sklearn.preprocessing import LabelEncoder
    df_usingfuel['使用燃料'][df_usingfuel['使用燃料']==''] = "0"
    global LE_usingfuel
    LE_usingfuel = LabelEncoder()
    LE_usingfuel.fit(df_usingfuel['使用燃料'])
    df_usingfuel['使用燃料'] = LE_usingfuel.transform(df_usingfuel['使用燃料'])
    
    print('usingfuel preprocessed!')
def kkkcom_preprocessing_under(df):
    mission_preprocessing(df)
    drive_preprocessing(df)
    displacement_preprocessing(df)
    door_preprocessing(df)
    capacity_preprocessing(df)
    fuel_preprocessing(df)
    handle_preprocessing(df)
    number_preprocessing(df)
    record_preprocessing(df)
    recycle_preprocessing(df)
    maintenance_preprocessing(df)
    judgement_preprocessing(df)
    lwhwf_preprocessing(df)
    usingfuel_preprocessing(df)
   
def option_preprocessing(df_option):
    row_names = [
        "エアコン"
        ,"パワーステアリング"
        ,"パワーウィンドウ"
        ,"キーレスエントリー"
        ,"エアバッグ"
        ,"ABS"
        ,"アルミホイール"
        ,"盗難防止システム"
        ,"バックモニターカメラ"
        ,"ベンチシート"
        ,"フルフラット"
        ,"CDデッキ"
        ,"カーナビ"
        ,"テレビ"
        ,"ETC"
        ,"両側スライドドア両側電動"
        ,"両側スライドドア"
        ,"スライドドア電動あり"
        ,"スライドドア"
        ,"寒冷地仕様"
        ,"パワーシート"
        ,"本革シート"
        ,"サンルーフ"
        ,"ディスチャージドランプ"
        ,"エアロパーツ"
        ,"3列シート"
        ,"ウォークスルー"
        ,"ローダウン"
        ,"福祉車両"
    ]
    
    import re
    df_option['オプション'] = df_option['オプション'].str.translate(str.maketrans({r"(":"",r")":"","（":""}))
    
    for row_name in row_names:
        df_option[row_name] = df_option['オプション'].map(lambda x : 1 if (row_name in x) else 0)
        df_option['オプション'] = df_option['オプション'].str.replace(row_name, '')
        
    del df_option['オプション']
    
    print('option preprocessed!')
def erace_preprocessing(df_erace):
    eraces = [
        '全長'
        ,'全幅'
        ,'全高'
        ,'車両重量'
        ,'車台番号'
        ,'内装'
        ,'外装'
        ,'鑑定日'
        ,'リサイクル料'
        ,'整備フラグ'
        ,'整備費'
        ,'色'
    ]
    for erace in eraces:
        del df_erace[erace]
    
    print('erace preprocessed!')
def merge_preprocessing(df_merge):
    m1 = ['エアコン','パワーステアリング','エアバッグ','パワーウィンドウ','キーレスエントリー','ABS','保証フラグ']
    m2 = ['CDデッキ','カーナビ','テレビ','ETC','バックモニターカメラ']
    m3 = ['パワーシート','本革シート','サンルーフ']
    m4 = ['3列シート','ウォークスルー','両側スライドドア両側電動']

    for i, ms in enumerate([m1,m2,m3,m4]):
        name = 'm' + str(i)
        df_merge[name] = 0
        for m in ms:
            df_merge[name] += df_merge[m]
            del df_merge[m]
            
    print('merge preprocessed!')
def kkkcom_preprocessing(df_final):
    import warnings
    import numpy as np
    import pandas as pd
    warnings.simplefilter('ignore')
    option_preprocessing(df_final)
    kkkcom_preprocessing_under(df_final)
    kkkcom_preprocessing_over(df_final)
    erace_preprocessing(df_final)
    merge_preprocessing(df_final)
    
    print('ALL PREPROCESSING COMPLITED!')
#xgboost,lightgbm,ランダムフォレストのアンサンブルで任意データ予測関数作り
def kkkcom_prediction():
    import xgboost as xgb
    import lightgbm as lgb
    import pandas as pd
    import pickle
    from pprint import pprint
    from time import sleep
    
    columns = ['車名', '地域', '年式', '走行距離', '車検', '修復歴'
               , '未使用車', 'ワンオーナー', '禁煙車', 'ミッション', '駆動方式'
               , '排気量', 'ドア数', '乗車定員', '燃料', 'ハンドル', '記録簿'
               , '燃費', '使用燃料', 'エアコン', 'パワーステアリング', 'パワーウィンドウ'
               , 'キーレスエントリー', 'エアバッグ', 'ABS', 'アルミホイール', '盗難防止システム'
               , 'バックモニターカメラ', 'ベンチシート', 'フルフラット', 'CDデッキ', 'カーナビ'
               , 'テレビ', 'ETC', '両側スライドドア両側電動', '両側スライドドア'
               , 'スライドドア電動あり', 'スライドドア', '寒冷地仕様', 'パワーシート'
               , '本革シート', 'サンルーフ', 'ディスチャージドランプ', 'エアロパーツ'
               , '3列シート', 'ウォークスルー', 'ローダウン', '福祉車両', '修復レベル'
               , '保証フラグ', '保証期間', '保証距離'
              ]
    
    #車名と地域を取得する
    with open('Car_LE_name.pickle', mode='rb') as fp:
        LE_n = pickle.load(fp)
    with open('Car_LE_area.pickle', mode='rb') as fp:
        LE_a = pickle.load(fp)
    
    #inputメソッドで任意データを入力する
    #基本編
    pprint(sorted(LE_n.classes_))
    sleep(0.1)
    name = input('上記の選択肢より、車の種類を選んでください>')
    pprint(sorted(LE_a.classes_))
    area = input('上記の選択肢より、地域を入力してください>')
    
    year = int(input('年式を入力してください(ex. 2021)>'))
    distance = int(input('走行距離を入力してください(単位：km)(ex. 10km->10)>'))
    inspection = float(input('次回車検日時を入力してください(ex 2021年7月->202107)(車検整備付：202507、新車未登録：202607、不明：0)>')) - 202107
    repair = int(input('修復歴の有無を入力してください(修復歴がある：1、修復歴がない：0)>'))
    unused = int(input('未使用かどうかを入力してください(未使用車である：1、未使用車でない：0)>'))
    oneowner = int(input('ワンオーナー車かどうかを入力してください(ワンオーナー車である：1、ワンオーナー車でない：0)>'))
    nosmoking = int(input('禁煙車かどうかを入力してください(禁煙車である：1、禁煙車でない：0)>'))
    mission = int(input('ミッションを入力してください(AT:1、CVT:2、MT:3)>'))
    drive = int(input('駆動方式を入力してください(2WD:2、4WD:4)>'))
    displacement = int(input('排気量を入力してください(ex. 660cc->660)>'))
    door = int(input('ドア数を入力してください(ex. 4個->4)>'))
    capacity = int(input('乗車定員を入力してください(ex. 4人->4)>'))
    fuel = int(input('燃料を入力してください(その他：0、ガソリン：1、ディーゼル：2)>'))
    handle = int(input('ハンドルを入力してください(右ハンドル：0、左ハンドル：1)>'))
    record = int(input('記録簿の有無を入力してください(有り：1、無し：0)>'))
    fuelconsumption = float(input('燃費を入力してください(単位：km/L)(ex. 27.4km/L->27.4)>'))
    usingfuel = int(input('使用燃料を入力してください(その他：0、ディーゼル：1、ハイオク：2、レギュラー：3)>'))
    repair_lv = int(input('過去の傷の修復レベルを入力してください(無傷：0、軽度：1、中度：2、重度：3)>'))
    is_gua = int(input('保証フラグを入力してください(保証無し：0、有償保証付き：1、無償保証付き：2)>'))
    gua_span = int(input('保証期間を入力してください(単位：ヶ月)(ex. 12ヶ月->12)>'))
    gua_dist = int(input('保証距離を入力してください(単位：km)(ex. 10km->10、無制限->999999)>'))
    
    #オプション編
    print(
        '------------------------------------------------------------------------------------------',
        "\n",
        'ここからはオプションについて入力します。装備がある場合は「1」を、ない場合は「0」を入力してください。',
        "\n",
        '------------------------------------------------------------------------------------------'
    )
    aircon = int(input('エアコンを入力してください>'))
    power_s = int(input('パワーステアリングを入力してください>'))
    power_w = int(input('パワーウィンドウを入力してください>'))
    keyless = int(input('キーレスエントリーを入力してください>'))
    airbag = int(input('エアバッグを入力してください>'))
    absabs = int(input('ABSを入力してください>'))
    al_w = int(input('アルミホイールを入力してください>'))
    nosteal = int(input('盗難防止システムを入力してください>'))
    bmc = int(input('バックモニターカメラを入力してください>'))
    bs = int(input('ベンチシートを入力してください>'))
    ff = int(input('フルフラットを入力してください>'))
    cd = int(input('CDデッキを入力してください>'))
    navi = int(input('カーナビを入力してください>'))
    tv = int(input('テレビを入力してください>'))
    etc = int(input('ETCを入力してください>'))
    bothslide_e = int(input('両側スライドドア(両側電動)を入力してください>'))
    bothslide = int(input('両側スライドドアを入力してください>'))
    slide_e = int(input('スライドドア電動ありを入力してください>'))
    slide = int(input('スライドドアを入力してください>'))
    cold = int(input('寒冷地仕様を入力してください>'))
    power_seat = int(input('パワーシートを入力してください>'))
    leather = int(input('本革シートを入力してください>'))
    sun = int(input('サンルーフを入力してください>'))
    dcl = int(input('ディスチャージドランプを入力してください>'))
    aero = int(input('エアロパーツを入力してください>'))
    seat_3 = int(input('3列シートを入力してください>'))
    walk = int(input('ウォークスルーを入力してください>'))
    low = int(input('ローダウンを入力してください>'))
    welfare = int(input('福祉車両を入力してください>'))

    
    d_try = {
        "車名":name
        ,"年式":year
        ,"走行距離":distance
        ,"地域":area
        ,"車検":inspection
        ,"修復歴":repair
        ,"未使用車":unused
        ,"ワンオーナー":oneowner
        ,"禁煙車":nosmoking
        ,"ミッション":mission
        ,"駆動方式":drive
        ,"排気量":displacement
        ,"ドア数":door
        ,"乗車定員":capacity
        ,"燃料":fuel
        ,"ハンドル":handle
        ,"記録簿":record
        ,"燃費":fuelconsumption
        ,"使用燃料":usingfuel
        
        ,"エアコン":aircon
        ,"パワーステアリング":power_s
        ,"パワーウィンドウ":power_w
        ,"キーレスエントリー":keyless
        ,"エアバッグ":airbag
        ,"ABS":absabs
        ,"アルミホイール":al_w
        ,"盗難防止システム":nosteal
        ,"バックモニターカメラ":bmc
        ,"ベンチシート":bs
        ,"フルフラット":ff
        ,"CDデッキ":cd
        ,"カーナビ":navi
        ,"テレビ":tv
        ,"ETC":etc
        ,"両側スライドドア両側電動":bothslide_e
        ,"両側スライドドア":bothslide
        ,"スライドドア電動あり":slide_e
        ,"スライドドア":slide
        ,"寒冷地仕様":cold
        ,"パワーシート":power_seat
        ,"本革シート":leather
        ,"サンルーフ":sun
        ,"ディスチャージドランプ":dcl
        ,"エアロパーツ":aero
        ,"3列シート":seat_3
        ,"ウォークスルー":walk
        ,"ローダウン":low
        ,"福祉車両":welfare
        ,"修復レベル":repair_lv
        ,"保証フラグ":is_gua
        ,"保証期間":gua_span
        ,"保証距離":gua_dist
    }
    
    #ユーザに入力情報を表示する
    global df_try
    df_try = pd.DataFrame(d_try, index=['own'])
    display(df_try)
    
    #入力したデータを予測に使えるように整形する
    df_try['車名'] = LE_name.transform(df_try['車名'])
    df_try['地域'] = LE_area.transform(df_try['地域'])
    merge_preprocessing(df_try)
    display(df_try)
    
    #予め保存しておいたモデルを読み込む
    with open('Carmodel_xgb.pickle', mode='rb') as fp:
        Carmodel_xgb = pickle.load(fp)
    with open('Carmodel_lgb.pickle', mode='rb') as fp:
        Carmodel_lgb = pickle.load(fp)

    #種々のモデルにデータを入力して予測させる
    pred_xgb = Carmodel_xgb.predict(xgb.DMatrix(df_try))
    pred_lgb = Carmodel_lgb.predict(df_try)
    
    #平均をとる・加重平均をとる等の方法で最終的な予測値を決定する
    pred_final = (pred_xgb + pred_lgb) / 2
    
    #体裁を整えて予測結果を出力する
    print('あなたの車の売値相場は',pred_final,'万円です！')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.17307572257943693, 'fraction_numerical': 0.026250078032336602, 'mean_word_length': 1.7925564368517388, 'pattern_counts': {'":': 317, '<': 5, '<?xml version=': 0, '>': 70, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '170876', 'license': 'MIT', 'n_tokens_mistral': 15217, 'n_tokens_neox': 14468, 'n_words': 1485, 'path': 'jupyter notebook/UsedCar_functions.ipynb', 'repo_name': 'ARAN-ai-python/UsedcarValuePrediction_AI', 'size': '32038'}