3 データの読み込みと操作

Author
Affiliation

𠮷田政之

近畿大学経営学部

Published

2026/04/23

Modified

2026/04/17

1 ノートブックを立ち上げる

この間のノートブックをダブルクリックする。

セルの下にアウトプットが表示されているが、それは過去のものである。これが残るのはいいところでもあり悪いところでもある。

  • いいところ:毎回実行しなくても (計算を待たなくても) 結果が見れる
  • 悪いところ:今、何を実行したのか分からない

2 必要なパッケージを読み込む

Code
import pandas as pd

3 ドライブをマウントする

google driveのデータにアクセスできるようにするやつ。

Code
df = pd.read_csv("drive/MyDrive/自分で作ったフォルダの名前/findata.csv", encoding="cp932")
df.head()
銘柄コード 会社名 売上高 売上原価 販管費 当期純利益 総資産 負債 有利子負債 純資産 現金及び預金 売上債権 棚卸資産 仕入債務 法人税等
0 2664 カワチ薬品 268205 211068 52563 3869 183303 91422 32019 91880 25924 3073 29846 38390 1918
1 2730 エディオン 686284 488119 182786 8944 369547 200541 65930 169005 8227 34530 111703 47130 4579
2 3048 ビックカメラ 844029 607947 209025 17122 365605 209839 95576 155765 21967 32968 106731 47222 8382
3 3088 マツモトキヨシホールディングス 558879 389673 135639 22755 315161 110290 0 204871 51618 20905 70362 65612 11662
4 3098 ココカラファイン 390963 286311 90939 9067 158179 70368 300 87810 18009 20329 46522 42907 5570

4 データの基本情報の確認

4.1 データのサイズ

Code
df.shape
(18, 15)

4.2 列の名前

Code
df.columns
Index(['銘柄コード', '会社名', '売上高', '売上原価', '販管費', '当期純利益', '総資産', '負債', '有利子負債',
       '純資産', '現金及び預金', '売上債権', '棚卸資産', '仕入債務', '法人税等'],
      dtype='str')

5 一つの列だけ抜き出す、選択する

さっき確認した列の名前を[""]で挟む。

Code
df["売上高"]
0      268205
1      686284
2      844029
3      558879
4      390963
5      695268
6      268161
7      557999
8      673238
9      501890
10     246391
11     457047
12     391726
13      64291
14     679132
15     268385
16    1573873
17     564215
Name: 売上高, dtype: int64

6 条件で絞り込む

df.loc[条件文] とする。

ex. 「(データに含まれる企業のうち)売上高100,000百万円以上の企業」という条件なら

Code
df.loc[df["売上高"] > 1000000]
銘柄コード 会社名 売上高 売上原価 販管費 当期純利益 総資産 負債 有利子負債 純資産 現金及び預金 売上債権 棚卸資産 仕入債務 法人税等
16 9831 ヤマダ電機 1573873 1135758 399351 29779 1175568 586827 310948 588740 52040 31071 297357 65550 11084

7 データの結合

データソースが複数に渡る場合など、元のデータが複数あることがある。例えば、年度ごとにデータがあるときは、2002.csv, 2003.csv, 2004.csvみたいに複数のファイルにデータがまたがっていたりする。株価のデータはyahooファイナンスから持ってきたが、財務データは手打ちしてそれぞれstock.csvfinancial.csvという場合もある。

こういう場合は、それらのデータを結合してから分析に進む事が多い。

ここでは、例として業種データを持ってきたとしよう。これをdf_indとしてオブジェクトに保存する。

さっきと同じdfという名前にしてしまうと上書きされてしまい、先程の財務データが消えてしまうので注意。

Code
df_ind = pd.read_csv("drive/MyDrive/自分で作ったフォルダの名前/inddata.csv", encoding="cp932")
df_ind.head()
銘柄コード 会社名 業界
0 9831 ヤマダ電機 家電
1 3048 ビックカメラ 家電
2 3141 ウエルシアホールディングス ドラッグストア
3 2730 エディオン 家電
4 8282 ケーズホールディングス 家電

今から財務データ (df) と業界データ (df_ind) を結合したい。

結合するときは2つのデータフレームに共通の列が必要になる。今回だと「銘柄コード」と「会社名」が使える。

Code
df2 = pd.merge(df, df_ind, on=["銘柄コード", "会社名"])
df2.head()
銘柄コード 会社名 売上高 売上原価 販管費 当期純利益 総資産 負債 有利子負債 純資産 現金及び預金 売上債権 棚卸資産 仕入債務 法人税等 業界
0 2664 カワチ薬品 268205 211068 52563 3869 183303 91422 32019 91880 25924 3073 29846 38390 1918 ドラッグストア
1 2730 エディオン 686284 488119 182786 8944 369547 200541 65930 169005 8227 34530 111703 47130 4579 家電
2 3048 ビックカメラ 844029 607947 209025 17122 365605 209839 95576 155765 21967 32968 106731 47222 8382 家電
3 3088 マツモトキヨシホールディングス 558879 389673 135639 22755 315161 110290 0 204871 51618 20905 70362 65612 11662 ドラッグストア
4 3098 ココカラファイン 390963 286311 90939 9067 158179 70368 300 87810 18009 20329 46522 42907 5570 ドラッグストア

8 新しい列の作成

生のデータには、売上高や費用といった数字は入っているが、分析で使いたい指標(例:収益性の指標)は自分で計算して作る必要がある。

df["作成する列名"] = 計算式 という形で追加していく。

ここではROA(総資産利益率)を作成する。ROAは企業が持っている資産をどれだけ効率よく利益に変えているかを示す指標で、業種をまたいで企業の収益性を比較するときによく使われる。

\[\text{ROA} = \frac{\text{営業利益}}{\text{総資産}}\]

元のデータには営業利益の列がないので、まず売上高・売上原価・販管費から計算する。

Code
df2["営業利益"] = df2["売上高"] - df2["売上原価"] - df2["販管費"]
df2["roa"] = df2["営業利益"] / df2["総資産"]
df2.head(1)
銘柄コード 会社名 売上高 売上原価 販管費 当期純利益 総資産 負債 有利子負債 純資産 現金及び預金 売上債権 棚卸資産 仕入債務 法人税等 業界 営業利益 roa
0 2664 カワチ薬品 268205 211068 52563 3869 183303 91422 32019 91880 25924 3073 29846 38390 1918 ドラッグストア 4574 0.024953

9 グループごとの処理

ROAの全体平均を出すだけでは、業界によって収益構造が異なることが見えない。例えば、ドラッグストアと家電量販店では事業モデルが違うので、同じROAでも中身が異なる可能性がある。業界ごとに比較することで、そうした違いを把握できる。

まず全体の平均を確認する。平均値を計算する関数はmean()

Code
df2["roa"].mean()
np.float64(0.07647512547987917)

これだとデータ全体の平均値は計算できるが、グループごと(ex. 業界別)の平均値は計算できない。

方法1: データを絞り込む方法でドラッグストアで絞ったデータと家電で絞ったデータの2つ作成して、それぞれで平均値を計算する。

方法2: groupby()を使う。

Code
df2.groupby("業界")["roa"].mean()
業界
ドラッグストア    0.099098
家電         0.048197
Name: roa, dtype: float64

10 ROAの分解

ROAは「売上高利益率 × 総資産回転率」に分解できる(デュポン分析)。

\[\text{ROA} = \underbrace{\frac{\text{営業利益}}{\text{売上高}}}_{\text{売上高利益率}} \times \underbrace{\frac{\text{売上高}}{\text{総資産}}}_{\text{総資産回転率}}\]

同じROAでも、高い利益率で少ない取引をこなす(例:高級品)タイプと、薄利でも大量に売る(例:ディスカウントストア)タイプでは戦略が全く異なる。分解することで、業界ごとにどちらのパターンで収益を上げているかが見えてくる。

Code
df2["売上高利益率"] = df2["営業利益"] / df2["売上高"]
df2["総資産回転率"] = df2["売上高"] / df2["総資産"]

df2.groupby("業界")[["roa", "売上高利益率", "総資産回転率"]].mean().reset_index()
業界 roa 売上高利益率 総資産回転率
0 ドラッグストア 0.099098 0.049713 2.005484
1 家電 0.048197 0.025310 1.828446