暗記メーカー
ログイン
Python データ分析
  • 柴原弘輝

  • 問題数 40 • 11/18/2023

    記憶度

    完璧

    6

    覚えた

    14

    うろ覚え

    0

    苦手

    0

    未解答

    0

    アカウント登録して、解答結果を保存しよう

    問題一覧

  • 1

    numpy.random.rand

    ### フラッシュカード: `numpy.random.rand` **解説**: - `numpy.random.rand`は、0から1の範囲で一様分布に従う乱数を生成するNumPyの関数です。 - この関数は、指定された形状の配列にランダムな値を埋めて返します。 - `rand`は主に、ランダムなサンプリングや初期化に使われ、統計的シミュレーションや機械学習のアルゴリズムで頻繁に使用されます。 **コード例**: ```python import numpy as np # 3x2の配列にランダムな値を生成 random_array = np.random.rand(3, 2) ``` **結果**: - `random_array`は、3行2列の配列で、各要素は0から1の範囲のランダムな値です。

  • 2

    分散正規化の計算方法と実装方法について説明してください。

    ### フラッシュカード: 分散正規化(Variance Normalization) **問題文**: 分散正規化の計算方法と実装方法について説明してください。 **解説**: - 分散正規化は、データセットの特徴量を平均0、分散1に変換するプロセスです。 - 計算方法は、各特徴量からその平均を引き、標準偏差で割ることで行います。 - 数式で表すと、正規化された値 \( x_{\text{norm}} \) は \( x_{\text{norm}} = \frac{x - \mu}{\sigma} \) で計算されます。ここで \( \mu \) は平均、\( \sigma \) は標準偏差です。 - この正規化は、特徴量のスケールを統一し、機械学習モデルの性能を向上させるのに役立ちます。 **実装方法**: ```python import numpy as np # サンプルデータ data = np.array([1, 2, 3, 4, 5]) # 平均と標準偏差の計算 mean = np.mean(data) std = np.std(data) # 分散正規化 normalized_data = (data - mean) / std ``` **結果**: - `normalized_data`は、元のデータ`data`を平均0、分散1に変換した配列です。

  • 3

    x = [1, 2, 3] y = [4, 5, 6] plt.subplot(121) plt.scatter(x, y) plt.subplot(122) plt.bar(x, y) このコードの実行結果を表示してください

    上記のコードを実行した結果、2つのサブプロットが含まれる図が生成されました。 1. 最初のサブプロット(左側)は、点 (x, y) をプロットした散布図です。ここでは、x = [1, 2, 3] と y = [4, 5, 6] の値が使用されています。 2. 二番目のサブプロット(右側)は、x に対する y の値を示す棒グラフです。棒グラフも同じ x と y の値を使用しています。 これらのサブプロットは、同じデータセットを異なるビジュアル表現で示しています。散布図は個々のデータポイントの関係を視覚的に表現し、棒グラフは各 x 値に対する y の量を比較するのに適しています。

  • 4

    以下のコードを実行した後、どのような結果が得られますか? ```python df = pd.DataFrame({ 'A列': ['a', 'b', 'a'], 'B列': [0, 1, 2]}, index=['1行', '2行', '3行']) pd.get_dummies(df['A列']) ```

    ### フラッシュカード: `pd.get_dummies(df['A列'])` **問題文**: 以下のコードを実行した後、どのような結果が得られますか? ```python df = pd.DataFrame({ 'A列': ['a', 'b', 'a'], 'B列': [0, 1, 2]}, index=['1行', '2行', '3行']) pd.get_dummies(df['A列']) ``` **解説**: - `pd.get_dummies(df['A列'])`は、DataFrame `df`の「A列」に対してワンホットエンコーディングを適用します。 - ワンホットエンコーディングでは、カテゴリカルな値(この例では'a'と'b')が、それぞれのカテゴリに対応する新しい列に変換されます。 - 各行において、対応するカテゴリの列は1に、それ以外の列は0になります。 - この操作により、元の「A列」のカテゴリカルな値が、新しいダミー変数の列に置き換えられたDataFrameが生成されます。 **コード例**: ```python import pandas as pd df = pd.DataFrame({ 'A列': ['a', 'b', 'a'], 'B列': [0, 1, 2]}, index=['1行', '2行', '3行']) dummies = pd.get_dummies(df['A列']) ``` **結果**: - `dummies`は、「a」と「b」の各カテゴリに対応する新しい列が含まれるDataFrameです。

  • 5

    ベクトルの線形変換とは?

    ### フラッシュカード: ベクトルの線形変換 **解説**: - ベクトルの線形変換は、一つのベクトルを別のベクトルに変換する数学的操作です。 - 線形変換は、行列を用いて表現されることが多く、ベクトルに行列を乗算することで行われます。 - この変換は、ベクトルのスケーリング(拡大・縮小)、回転、平行移動などを含む幅広い操作を表します。 - 線形変換は、ベクトル空間内でのオブジェクトの位置や形状を変更するのに用いられ、コンピュータグラフィックスやデータ分析など多くの分野で重要です。 **コード例(2次元ベクトルの線形変換)**: ```python import numpy as np import matplotlib.pyplot as plt # 元のベクトル v = np.array([2, 1]) # 線形変換を表す行列 A = np.array([[1, 2], [2, 1]]) # 線形変換の適用 v_transformed = np.dot(A, v) # 元のベクトルと変換後のベクトルをプロット plt.arrow(0, 0, v[0], v[1], head_width=0.05, head_length=0.1, fc='blue', ec='blue') plt.arrow(0, 0, v_transformed[0], v_transformed[1], head_width=0.05, head_length=0.1, fc='red', ec='red') plt.xlim(0, 5) plt.ylim(0, 5) plt.grid() plt.show() ``` **結果**: - 青色の矢印が元のベクトル、赤色の矢印が線形変換後のベクトルを表します。 - この変換により、ベクトルは空間内で新しい位置と方向に移動します。

  • 6

    scipy.sparse`形式とPandasのDataFrame形式のメモリ使用量にはどのような違いがありますか?

    ### フラッシュカード: `scipy.sparse`形式とDataFrame形式のメモリ使用量 **問題文**: `scipy.sparse`形式とPandasのDataFrame形式のメモリ使用量にはどのような違いがありますか? **解説**: - `scipy.sparse`は、疎行列(ほとんどの要素がゼロの行列)を効率的に扱うための形式です。疎行列の場合、`scipy.sparse`は必要な非ゼロ要素のみを格納し、メモリ使用量を大幅に削減します。 - 対照的に、PandasのDataFrameは、すべてのデータ(ゼロを含む)を格納します。これにより、疎行列の場合、DataFrameは`scipy.sparse`に比べてメモリ使用量が多くなります。 - したがって、多くのゼロ要素を含む大規模なデータセットを扱う場合、`scipy.sparse`はメモリ効率が良く、DataFrameよりも適しています。 **コード例**: ```python import numpy as np import pandas as pd from scipy import sparse # 大規模な疎行列の生成 data = sparse.random(1000, 1000, density=0.01) # 疎行列をDataFrameに変換 df = pd.DataFrame(data.toarray()) # メモリ使用量の比較 sparse_memory = data.data.nbytes df_memory = df.memory_usage(deep=True).sum() ``` **結果**: - `sparse_memory`は`scipy.sparse`形式の行列のメモリ使用量です。 - `df_memory`は同じデータをDataFrame形式で格納した際のメモリ使用量です。DataFrameの方がメモリ使用量が大きいことが一般的です。

  • 7

    サポートベクターマシン(SVM)における動径基底関数(RBF)カーネルの使い方は何ですか?

    ### フラッシュカード: サポートベクターマシンの動径基底関数(RBF) **問題文**: サポートベクターマシン(SVM)における動径基底関数(RBF)カーネルの使い方は何ですか? **解説**: - 動径基底関数(RBF)カーネルは、サポートベクターマシン(SVM)で使用される一般的なカーネルの一つです。 - RBFカーネルは、非線形分類問題に対して効果的で、特にデータが線形に分離できない場合によく使用されます。 - RBFカーネルは、データポイント間の距離に基づいて計算され、カーネルの「幅」を決定するパラメータ`gamma`を持ちます。 - Scikit-learnの`SVC`クラスでSVMモデルを作成する際に、`kernel='rbf'`と指定することでRBFカーネルを使用できます。 - `gamma`パラメータの調整は、モデルの性能に大きな影響を与えるため重要です。 **コード例**: ```python from sklearn import svm from sklearn.datasets import make_circles from sklearn.model_selection import train_test_split # 非線形データの生成 X, y = make_circles(n_samples=100, noise=0.05) # 訓練データとテストデータに分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) # RBFカーネルを使用したSVMモデルの作成と訓練 clf = svm.SVC(kernel='rbf', gamma=0.5) clf.fit(X_train, y_train) # テストデータに対する予測 predictions = clf.predict(X_test) ``` **結果**: - 作成されたSVMモデル`clf`は、RBFカーネルを使用して非線形データに対して訓練されます。 - `predictions`は、テストデータに対するモデルの予測結果です。

  • 8

    NumPyの`arr.flatten()`メソッドはどのような動作をしますか?

    ### フラッシュカード: `arr.flatten()` **問題文**: NumPyの`arr.flatten()`メソッドはどのような動作をしますか? **解説**: - `arr.flatten()`メソッドは、NumPy配列`arr`を1次元配列に変換します。 - このメソッドは、多次元配列のすべての要素を含む新しい1次元配列を生成し、元の配列は変更されません。 - `flatten()`によって生成される新しい配列は、元の配列のコピーであるため、この新しい配列を変更しても元の配列には影響しません。 - これは、多次元データを平坦化(フラット化)する際に使用されます。 **コード例**: ```python import numpy as np # 2次元配列の作成 arr = np.array([[1, 2, 3], [4, 5, 6]]) # 配列を1次元に変換 flattened_arr = arr.flatten() ``` **結果**: - `flattened_arr`は、`arr`のすべての要素を含む新しい1次元配列です。この例では `[1, 2, 3, 4, 5, 6]` になります。

  • 9

    ROC(受信者操作特性)曲線

    ### フラッシュカード: ROC(受信者操作特性)曲線 **解説**: - ROC(受信者操作特性)曲線は、分類問題の性能を評価するためのツールです。 - ROC曲線は、真陽性率(TPR, True Positive Rate)と偽陽性率(FPR, False Positive Rate)の関係をプロットしたものです。 - TPRはy軸に、FPRはx軸に表示され、曲線下の面積(AUC, Area Under the Curve)が大きいほど、分類器の性能が良いことを示します。 - ROC曲線は、異なる閾値での分類器の性能を比較し、感度と特異度のトレードオフを視覚化します。 **コード例**: ```python import numpy as np from sklearn.metrics import roc_curve, auc from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split # 人工的な分類データの生成 X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42) # 訓練データとテストデータに分割 X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42) # ランダムフォレスト分類器の訓練 classifier = RandomForestClassifier() classifier.fit(X_train, y_train) # テストデータの予測確率を計算 y_pred_prob = classifier.predict_proba(X_test)[:, 1] # ROC曲線の計算 fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob) roc_auc = auc(fpr, tpr) ``` **結果**: - `fpr`, `tpr`, `thresholds` はROC曲線を描くための偽陽性率、真陽性率、閾値の配列。 - `roc_auc` はROC曲線下の面積を示し、分類器の性能を表す指標です。

  • 10

    Pandasの`pop`メソッドはどのように機能しますか?

    ### フラッシュカード: Pandasの`pop`メソッド **問題文**: Pandasの`pop`メソッドはどのように機能しますか? **解説**: - Pandasの`pop`メソッドは、DataFrameから指定された列を削除し、その列を返します。 - このメソッドは、列をDataFrameから「取り出し」(pop)、それを別の変数に格納する場合に使用されます。 - 使用された後、指定された列は元のDataFrameから削除されます。 - `pop`メソッドは、データの再配置や特定の列の操作に便利です。 **コード例**: ```python import pandas as pd # サンプルデータフレームの作成 df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) # 列'A'の取り出し column_a = df.pop('A') ``` **結果**: - `column_a`には列'A'のデータが格納されます。 - DataFrame `df`からは列'A'が削除され、列'B'のみが残ります。

  • 11

    Scikit-learnの`SVC`クラスで`kernel='poly'`オプションを使用する場合、どのような特性がありますか?

    ### フラッシュカード: `SVC(kernel='poly')` **問題文**: Scikit-learnの`SVC`クラスで`kernel='poly'`オプションを使用する場合、どのような特性がありますか? **解説**: - `SVC(kernel='poly')`は、サポートベクターマシン(SVM)で多項式カーネルを使用するための設定です。 - 多項式カーネルは、データの特徴をより高次元空間にマッピングすることで、非線形の関係を捉えることができます。 - `kernel='poly'`を使用すると、SVMは元の特徴の高次の多項式を基にして分類の決定境界を作成します。 - このカーネルは、特にデータが単純な線形分離ではなく、より複雑なパターンを示す場合に有効です。 - 重要なハイパーパラメータには、多項式の次数(`degree`)、カーネル係数(`coef0`)があります。 **コード例**: ```python from sklearn.svm import SVC from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split # サンプルデータの生成 X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, random_state=42) # 訓練データとテストデータに分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 多項式カーネルを使用したSVMモデルの作成 clf = SVC(kernel='poly', degree=3) clf.fit(X_train, y_train) # テストデータに対する予測 predictions = clf.predict(X_test) ``` **結果**: - 作成された`clf`モデルは、多項式カーネルを使用して訓練され、テストデータに対する予測を行います。

  • 12

    Scikit-learnの`train_test_split`関数は、デフォルトでどのような分割比率を使用し、データをどのように分割しますか?

    ### フラッシュカード: `train_test_split`関数の分割比率とデータの分割方法 **問題文**: Scikit-learnの`train_test_split`関数は、デフォルトでどのような分割比率を使用し、データをどのように分割しますか? **解説**: - `train_test_split`関数は、データセットを訓練セットとテストセットに分割するために使用されます。 - デフォルトの分割比率は、訓練セットが75%、テストセットが25%です。 - この関数はランダムにデータを分割しますが、`random_state`パラメータを設定することで、分割の再現性を保証できます。 - 分割比率は`test_size`または`train_size`パラメータを使用して調整可能です。 **コード例**: ```python from sklearn.model_selection import train_test_split import numpy as np # サンプルデータの生成 X, y = np.arange(10).reshape((5, 2)), range(5) # データの分割 X_train, X_test, y_train, y_test = train_test_split(X, y) ``` **結果**: - `X_train`と`y_train`は、元のデータセットの約75%を含む訓練セットです。 - `X_test`と`y_test`は、残り約25%を含むテストセットです。

  • 13

    df[ : , 1] このコードの何が問題か?

    間の , が問題 :ならよい [ : : 1 ] ◾️ df[数字:数字] スライスで指定した行(全列)が返ります。 指定する数字はインデックスです。 df[:数字]やdf[数字:]のように、始点と終点だけを指定することも可能です(Python標準と同じで終点の行は含みません)。 df[数字, 数字]のように、カンマを使って行と列を両方指定することはできません。

  • 14

    `numpy.random.uniform` と `numpy.random.randint` の違い

    ### フラッシュカード: `numpy.random.uniform` と `numpy.random.randint` の違い **解説**: - **`numpy.random.uniform`**: - `numpy.random.uniform`関数は、指定された範囲内で一様分布に従う実数値の乱数を生成します。 - パラメータには、乱数生成の下限値と上限値を指定します。生成される数値は、下限値以上、上限値未満です。 - **`numpy.random.randint`**: - `numpy.random.randint`関数は、指定された範囲内で一様分布に従う整数値の乱数を生成します。 - パラメータには、乱数生成の最小値と最大値(最大値は排他的)を指定します。生成される数値は整数です。 **コード例**: ```python import numpy as np # 0から1の範囲で一様分布に従う実数値の乱数生成(uniform) uniform_array = np.random.uniform(0, 1, 5) # 1から10の範囲で一様分布に従う整数値の乱数生成(randint) randint_array = np.random.randint(1, 10, 5) ``` **結果**: - `uniform_array`は、0から1の範囲で一様分布に従って生成された実数値の乱数を含む配列です。 - `randint_array`は、1から10の範囲で一様分布に従って生成された整数値の乱数を含む配列です。

  • 15

    以下のコードが返す値は何ですか? ```python arr = np.array([[1, 1, 1], [3, 3, 3]]) arr.mean() ```

    ### フラッシュカード: `arr.mean()` **問題文**: 以下のコードが返す値は何ですか? ```python arr = np.array([[1, 1, 1], [3, 3, 3]]) arr.mean() ``` **解説**: - `arr.mean()`は、NumPy配列`arr`の全ての要素の平均値を計算します。 - このメソッドは、配列内の数値の合計を要素の総数で割ることで平均を求めます。 - 上記のコードでは、`arr`は6つの要素を持つ2次元配列で、その全要素の平均値が計算されます。 **コード例**: ```python import numpy as np arr = np.array([[1, 1, 1], [3, 3, 3]]) mean_value = arr.mean() ``` **結果**: - `mean_value`は`arr`の全要素の平均値です。この例では、値は2になります。

  • 16

    Matplotlibのhistメソッドでビン(棒)の数を指定しなかった場合はどうなる?

    Matplotlibのhistメソッドでビン(棒)の数を指定しなかった場合は、デフォルトの10になります。最適な数が自動で決められることはありません。ビンの数を指定する場合は、「ax.hist(x, bins=25)」のようにhistメソッドの引数で設定します。

  • 17

    matplotの「label」「ticks」「minorticks_on」「grid」「lim」とは?

    画像のとおり