Python

E101 python コード


コードはAIによって作成されたものです。

ファイル操作

拡張子を変更

拡張子を変更するには、以下のように Python コードを書けます:

import os

filename, file_extension = os.path.splitext('original_file_name.txt')
new_file_name = filename + '.new_extension'
os.rename('original_file_name.txt', new_file_name)

このコードでは、まず os.path.splitext 関数を使って、元のファイル名と拡張子を分割します。次に、新しいファイル名を作成します。最後に、os.rename 関数を使って、元のファイル名を新しいファイル名に変更します。

フォルダ内のファイル一覧

以下は、特定のフォルダ内のファイル一覧を取得する Python コードです:

import os

folder = '/path/to/folder'

for filename in os.listdir(folder):
    print(filename)

このコードでは、os.listdir 関数を使って、指定されたフォルダ内のファイル名一覧を取得します。その後、for ループを使って、一つずつ取り出して処理を行います。

サブフォルダも

以下は、特定のフォルダ(サブフォルダも含む)内のファイル一覧を取得する Python コードです:

import os

folder = '/path/to/folder'

for root, dirs, files in os.walk(folder):
    for filename in files:
        print(os.path.join(root, filename))

このコードでは、os.walk 関数を使って、指定されたフォルダ内(サブフォルダも含む)を再帰的に巡回します。os.walk 関数は、各フォルダ内のサブフォルダ、サブフォルダ内のファイル名、そしてファイル名を返します。その後、内側の for ループを使って、各ファイル名を処理します。

テキストファイルの読み込み

以下は、テキストファイルを読み込む Python コードです:

with open('file.txt', 'r') as file:
    content = file.read()
    print(content)

このコードでは、open 関数を使ってテキストファイルを開きます。with 文を使っているので、このコードブロックが終了したときに自動的にファイルが閉じられます。'r' オプションは読み取りモードを示しています。読み取った内容は、file.read() メソッドを使って変数 content に格納されます。最後に、print 関数を使って、読み込んだ内容を表示します。

関数

数学

tanh 関数

tanh関数(双曲線正接関数)は、ニューラルネットワークの活性化関数としてよく使用される関数です。入力値を-1から1の範囲に収める働きがあり、シグモイド関数と比較して勾配消失問題が起こりにくいという特徴があります。

  • ニューラルネットワークの活性化関数: 入力層と隠れ層、隠れ層と出力層の間で、tanh関数を用いて非線形変換を行うことで、より複雑なパターンを学習することができます。
  • 信号処理: 音声信号や画像信号の処理において、tanh関数はノイズ除去や特徴抽出に利用されることがあります。

Pythonの math.tanh を使って、いくつかの値の tanh を計算します。

import math

# tanhの計算
x_values = [-2, -1, 0, 1, 2]
tanh_values = [math.tanh(x) for x in x_values]

print("x values:", x_values)
print("tanh(x):", tanh_values)

出力

x values: [-2, -1, 0, 1, 2]
tanh(x): [-0.9640275800758169, -0.7615941559557649, 0.0, 0.7615941559557649, 0.9640275800758169]

numpy を使用すると、複数の値に対して効率的に計算ができます。

import numpy as np

# 数値範囲を生成
x = np.linspace(-3, 3, 100)  # -3から3まで100点を生成
tanh_values = np.tanh(x)

# 結果を表示
print("tanh values:", tanh_values)
tanh values: [-0.99505475 -0.99441927 -0.99370237 -0.99289372 -0.99198164 -0.99095304
-0.98979315 -0.98848543 -0.98701125 -0.98534972 -0.98347742 -0.98136808
-0.97899231 -0.97631723 -0.97330609 -0.96991794 -0.96610713 -0.96182292
-0.957009 -0.95160305 -0.94553625 -0.93873281 -0.93110961 -0.92257576
-0.91303239 -0.90237242 -0.89048062 -0.87723379 -0.86250123 -0.84614559
-0.82802407 -0.80799012 -0.78589571 -0.76159416 -0.73494368 -0.70581156
-0.67407906 -0.63964681 -0.6024408 -0.56241851 -0.51957511 -0.47394928
-0.4256282 -0.37475137 -0.32151274 -0.26616074 -0.20899596 -0.15036626
-0.09065948 -0.03029376 0.03029376 0.09065948 0.15036626 0.20899596
0.26616074 0.32151274 0.37475137 0.4256282 0.47394928 0.51957511
0.56241851 0.6024408 0.63964681 0.67407906 0.70581156 0.73494368
0.76159416 0.78589571 0.80799012 0.82802407 0.84614559 0.86250123
0.87723379 0.89048062 0.90237242 0.91303239 0.92257576 0.93110961
0.93873281 0.94553625 0.95160305 0.957009 0.96182292 0.96610713
0.96991794 0.97330609 0.97631723 0.97899231 0.98136808 0.98347742
0.98534972 0.98701125 0.98848543 0.98979315 0.99095304 0.99198164
0.99289372 0.99370237 0.99441927 0.99505475]

matplotlib を使用して、tanh 関数のグラフを描画します。

import numpy as np
import matplotlib.pyplot as plt

# x軸の範囲
x = np.linspace(-3, 3, 100)
y = np.tanh(x)

# グラフを描画
plt.figure(figsize=(8, 4))
plt.plot(x, y, label="tanh(x)", color="blue")
plt.title("Hyperbolic Tangent Function")
plt.xlabel("x")
plt.ylabel("tanh(x)")
plt.axhline(0, color="black", linewidth=0.5, linestyle="--")
plt.axvline(0, color="black", linewidth=0.5, linestyle="--")
plt.grid(alpha=0.3)
plt.legend()
plt.show()

配列積

import numpy as np

# 2行2列の行列を定義
matrix_a = np.array([[2, 7], [1, 8]])
matrix_b = np.array([[2, 8], [1, 3]])

# 行列積を計算
result = np.dot(matrix_a, matrix_b)

# 結果を表示
print("Matrix A:")
print(matrix_a)
print("\nMatrix B:")
print(matrix_b)
print("\nMatrix A × Matrix B:")
print(result)

出力

Matrix A:
[[2 7]
[1 8]]

Matrix B:
[[2 8]
[1 3]]

Matrix A × Matrix B:
[[11 37]
[10 32]]

Python 3.5以降では、@ 演算子を使って行列積を簡単に書けます。

result = matrix_a @ matrix_b
print(result)

回帰処理

与えられた二次関数 y = 3x^2 + 1を回帰処理して解を得るコードの例です。このコードでは、まずデータを生成し、それに対して二次回帰を行います。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

# データ生成
np.random.seed(0)
x = np.linspace(-10, 10, 100).reshape(-1, 1)  # 入力データ
y = 3 * x**2 + 1  # 真の関数
y_noise = y + np.random.normal(0, 10, y.shape)  # ノイズ付きデータ

# 特徴量の拡張(2次項を追加)
poly = PolynomialFeatures(degree=2, include_bias=False)
x_poly = poly.fit_transform(x)

# 回帰モデルを作成してフィッティング
model = LinearRegression()
model.fit(x_poly, y_noise)

# 回帰結果を取得
y_pred = model.predict(x_poly)

# 結果表示
print("回帰係数:", model.coef_)
print("切片:", model.intercept_)

# プロット
plt.figure(figsize=(8, 6))
plt.scatter(x, y_noise, color='gray', label='Noisy Data')
plt.plot(x, y, color='blue', label='True Function')
plt.plot(x, y_pred, color='red', linestyle='--', label='Fitted Curve')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('Polynomial Regression')
plt.show()
  1. データ生成:
    • x は -10 から 10 の範囲のデータを生成。
    • y は真の関数 y=3x2+1y = 3x^2 + 1y=3x2+1 で計算されます。
    • y_noise にはガウス分布に従うノイズを加えています。
  2. 特徴量の拡張:
    • PolynomialFeatures を使用して、データを二次項に拡張します。
  3. 回帰処理:
    • LinearRegression を用いてモデルを作成し、データにフィットさせます。
  4. 結果表示:
    • モデルの係数や切片を表示します。
    • 元の関数、ノイズ付きデータ、回帰後の曲線をプロットします。
回帰係数: [[-0.14866343  3.12949995]]
切片: [-2.80579037]

与えられたデータの回帰分析

番号 身長x 体重y
1 153.3 45.5
2 164.9 56.0
3 168.1 55.0
4 151.5 52.8
5 157.8 55.6
6 156.7 50.8
7 161.1 56.4

以下は、指定されたデータを使用して単回帰分析を行う Python コードです。このコードでは、scikit-learn を使用して単回帰モデルを作成し、結果を可視化します。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# データの準備
x = np.array([153.3, 164.9, 168.1, 151.5, 157.8, 156.7, 161.1]).reshape(-1, 1)  # 身長 (特徴量)
y = np.array([45.5, 56.0, 55.0, 52.8, 55.6, 50.8, 56.4])  # 体重 (目的変数)

# 単回帰モデルの作成
model = LinearRegression()
model.fit(x, y)

# 回帰直線の計算
x_pred = np.linspace(x.min(), x.max(), 100).reshape(-1, 1)  # プロット用の x 値
y_pred = model.predict(x_pred)  # 回帰直線上の y 値

# 結果の表示
print("回帰係数 (slope):", model.coef_[0])
print("切片 (intercept):", model.intercept_)
print("決定係数 (R^2):", model.score(x, y))

# プロット
plt.figure(figsize=(8, 6))
plt.scatter(x, y, color='blue', label='データ点')  # データ点のプロット
plt.plot(x_pred, y_pred, color='red', label='回帰直線')  # 回帰直線
plt.xlabel('身長 (cm)')
plt.ylabel('体重 (kg)')
plt.title('単回帰分析: 身長と体重の関係')
plt.legend()
plt.grid()
plt.show()

データの準備:

  • x に身長、y に体重のデータを代入。x は形状を (n_samples, 1) にリシェイプします。

回帰モデルの作成:

  • LinearRegression を使用してモデルを作成し、データにフィットさせます。

回帰直線の計算:

  • モデルで予測した回帰直線をプロット用に計算します。

結果の表示:

  • 回帰係数(傾き)、切片、決定係数(モデルの良さを示すR^2値)を表示します。

プロット:

  • データ点と回帰直線をグラフに描画します。

ステップ関数

u(x) = 0 (x < 0 )
1(x ≧ 0)

ステップ関数は、特定の条件に応じて値を分岐させる簡単な関数のことです。たとえば、入力値がある閾値を超えた場合に値を切り替える「ヘヴィサイドのステップ関数」などがあります。

import numpy as np
import matplotlib.pyplot as plt

def step_function(x):
    return np.where(x >= 0, 1, 0)

# x軸の値を定義
x = np.linspace(-10, 10, 100)
y = step_function(x)

# プロット
plt.plot(x, y, label="Step Function")
plt.title("Step Function")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.axhline(0, color='black', linewidth=0.5, linestyle="--")
plt.axvline(0, color='black', linewidth=0.5, linestyle="--")
plt.grid()
plt.legend()
plt.show()

シグモイド関数

シグモイド関数(sigmoid function)は、入力値を0から1の範囲にマッピングするS字型の関数です。特に、機械学習やニューラルネットワークでよく使われる関数の1つです。数式は次の通りです:σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}σ(x)=1+e−x1​

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# x軸の値を生成
x = np.linspace(-10, 10, 100)
y = sigmoid(x)

# プロット
plt.plot(x, y, label="Sigmoid Function")
plt.title("Sigmoid Function")
plt.xlabel("x")
plt.ylabel("σ(x)")
plt.axhline(0, color='black', linewidth=0.5, linestyle="--")
plt.axhline(1, color='black', linewidth=0.5, linestyle="--")
plt.axvline(0, color='black', linewidth=0.5, linestyle="--")
plt.grid()
plt.legend()
plt.show()

滑らかなので微分が使えます。誤差逆伝搬法を用いてネットワークのパラメータを効率的に学習することができます。

コメント