python jupyter快速运行片段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python jupyter快速运行片段相关的知识,希望对你有一定的参考价值。
# データ分析からモデル作成までの一通りの流れを踏んだ。
import numpy as np
import scipy as sp
import pandas as pd
import seaborn as sns
import IPython.display import display # 表示を整えるため
sns.set()
%matplotlib inline
%precision 3
# 可能なら、型指定して読み込む。メモリ効率が良い。
df = pd.read_csv("/path/to/file")
"""
1. データの傾向確認
"""
# 欠損値の確認
df.isnull().sum()
# 要約統計量とデータ数の確認
df.describe() # 数/平均/標準偏差(バラツキの大きさ)/最小/パーセンタイル(累積相対度数)/最大
# データ型の確認
df.info()
# 各属性で値が何種類あるか
df.nunique()
# df["property"].nunique() で実際の種類数が確認できる
# df["property"].value_counts() で各値のcountを確認できる
"""
1.1. モデル選び
"""
# モデル選びのチートシート1(データをみる前から決めてるかもしれなけど。)
# https://www.salesanalytics.co.jp/column/no00136/
"""
1.5. 正しいデータ型に変換
"""
# カテゴリデータ(測れない)は型をcategoryに変換
df["property"] = df["property"].astype('category')
# まとめてカテゴリデータに変換(カテゴリデータとなる条件を指定して。例えば値の種類数が100以下はカテゴリデータとか。)
import numpy as np
for column in df.columns:
if df[column].nunique() < 100 and df[column].dtype == np.dtype('O'):
df[column] = df[column].astype('category')
# 日付をdateに変換
df["date"] = pd.to_datetime(df["date"])
"""
1.6. 複数データの分割
"""
# 複数のパラメータが入ってる属性を、パラメータ毎に分割し、分割したものを元のデータフレームに結合する例
#language_worked_with = df.LanguageWorkedWith.str.split(';',expand=True)
#languages = set()
#for values in language_worked_with.values:
# for value in values:
# if isinstance(value, str):
# languages.add(value)
#languages = sorted(list(languages))
#def language_dummy_variable(languages):
# def _(x):
# x = set(x.tolist())
# return pd.Series([
# True if language in x else False
# for language in languages
# ])
# return _
#sorted_language_worked_with = language_worked_with.apply(language_dummy_variable(languages), axis=1)
#sorted_language_worked_with.columns = ['languageWorkedWith_' + language for language in languages]
#元のデータフレームと結合
#df = pd.concat([df, sorted_language_worked_with], axis=1)
"""
1.7. 複数のパラメータをまとめる
"""
# 4種類ある回答を3種類にまとめ直す例
#def student_yes_or_no(x):
# if isinstance(x, float):
# return 'Unknown'
# elif x == 'No':
# return 'No'
# else:
# return 'Yes'
#df['Student_converted'] = df.Student.map(student_yes_or_no)
"""
2. 相関関係がありそうな変数を選ぶ
"""
# ポイントは2つ。目的変数と相関関係が強い変数を見つける。説明変数同士で相関関係が強いものを見つける
# 数値で確認
# ※ 相関係数の一覧を出して、相関関係が高い変数(1または-1に近いもの)を選ぶ
df.corr()
# グラフで確認
sns.pairplot(df) # ヒストグラムと散布図を複数属性との組みあわで表示
column = "相関関係があると判断した変数"
"""
3. 正規分布に従っているか確認する
"""
# 2で決めた変数の分布の形をみる。正規分布に従っていれば、この後の学習で使う説明変数(x)とする
sns.distplot(df[column]) # sns.distplot(df[13], bins=XX) のようにビン数をXXで指定可能
# 箱ひげ図でデータのバラツキを確認する
df[["確認したい属性",...]].boxplot()
"""
4. 外れ値の除去(3σ法)
"""
mean = df.mean()
sigma = df.std()
_df = df
for c in _df.select_dtypes(include='number').columns:
low = mean[c] - 3 * sigma[c]
high = mean[c] + 3 * sigma[c]
_df = _df[(_df[c] > low) & (_df[c] < high)]
# 2で決めた変数の分布を確認し、外れ値の影響が減ったことを確認する
sns.distplot(df[column])
sns.distplot(_df[column])
"""
5. データの分割
"""
# 説明変数(入力)と目的変数(出力)に分割
# ※ 最後の列が目的変数だとした場合は以下のようになる
X = _df.iloc[:, :-1]
# ※ 重回帰分析の場合、解析結果を見てからでいいが、結果がおもしくない場合は、
# 説明変数同士の相関係数が高いものを一つずつ外して検証を繰り返す。
# 相関関係の高い変数が多重共線性を起こしている可能性があるため。
y = _df.iloc[:,-1]
# 訓練データと検証データに分割
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1) # random_stateは乱数のシードを固定
"""
6. スケーリング (正規化)
"""
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# scalerの学習(平均と標準偏差を計算)
scaler.fit(X_train)
# scaling
# NOTE: テストデータは、スケーラーやモデル学習の中には含めないこと
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
"""
7. 訓練
"""
# 重回帰分析の例
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
# 複数のモデルを使って収まりの良いものを使うのがよろしい。
from sklearn.linear_model import LogisticRegression # ロジスティック回帰
from sklearn.linear_model import LinearRegression # 重回帰分析
from sklearn.svm import LinearSVC # SVM
from sklearn.tree import DecisionTreeClassifier # 決定木
from sklearn.neighbors import KNeighborsClassifier # K-NM
from sklearn.ensemble import RandomForestClassifier # ランダムフォレスト
for model in [LogisticRegression(), LinearRegression(), LinearSVC(), DecisionTreeClassifier(), KNeighborsClassifier(n_neighbors=5), RandomForestClassifier()]:
fit_model = model.fit(X_train_std, y_train)
print("train:", fit_model.__class__.__name__, fit_model.score(X_train_std, y_train))
print("test:", fit_model.__class__.__name__, fit_model.score(X_test_std, y_test))
"""
8. 検証(予測精度の確認)
"""
# 扱う問題によって評価値も異なるため、チートシート参照する。
# https://pompom168.hatenablog.com/entry/2019/04/11/080000
# 決定係数(正解率)の確認
## 訓練データで検証
model.score(X_train, y_train)
## 検証データで検証
model.score(X_test, y_test)
# 分類確認が目的の場合には適合率や再現率も確認する
# from sklearn.metrics import classification_report
# Y_pred = clf.predict(X_test)
# print (classification_report(Y_test, Y_pred, target_names=wine.target_names))
"""
9. 考察
"""
np.set_printoptions(precision=3, suppress=True) # 有効桁数の指定 + 指数関数での表示が禁止
# 重みをみて、大きい値が結果に作用したと考える
model.coef_
"""
10. 予測値の算出(y_hat)
"""
x = X.iloc[0, :] # これは予測したいデータパターンを用意する?
y_hat = model.predict([x]) # 大カッコ無いとエラーになるらしい
"""
11. モデルの保存と読み込み
"""
# モデルの保存
from sklearn.externals import joblib
joblib.dump(model, "model.pkl")
# モデルの読み込み。これは、必須では無い。
model_new = joblib.load("model.pkl")
"""
XX. データ加工と抽出
"""
# 日時系 Tips
## 日時で集計
df = pd.read_csv("/path/to/file", index_col="<グルーピンしたい日付属性>", parse_dates=True)
df["count"] = 1 # 集計のために必要
df = df.resample("M").sum() # 年の場合はY, 週の場合はW
## 標準規格ではない日付フォーマットの場合
parser = lambda date: pd.to_datetime(date, format='%Y年%m月%d日')
df_jp = pd.read_csv('data/src/sample_date_jp.csv', index_col='date', parse_dates=True, date_parser=parser)
## datetimeに変換
df['Date'] = pd.to_datetime(df['Date'])
## 期間指定
import datetime as dt
df["_time"] = pd.to_datetime(df["_time"])
df = df[(dt.datetime(2015,1,1) < df["_time"]) & (df["_time"] <= dt.datetime(2018,12,31))]
## HTML表示する
display(df)
以上是关于python jupyter快速运行片段的主要内容,如果未能解决你的问题,请参考以下文章
如何在Python中快速画图——使用Jupyter notebook的魔法函数(magic function)matplotlib inline
python3工作环境部署+spyder3+jupyter notebook
python jupyter notebook 怎么运行程序