2013/11/02

[MATLAB] 用CSV讀檔分析財務報表

MATLAB是個很方便的工具,尤其可以讀入CSV檔,來分析大量的資料,甚至可以替我們塞選出前幾排名的資料。

利用 csvread函數來達到此功能
M = csvread(filename)
M = csvread(filename,row,col)
M = csvread(filename,row,col,csvRange)

以下以財務報表來舉例,首先去公開資訊觀測站下載上市公司102年Q2的綜合損益表的CSV檔案,然後透過MATLAB來分析毛利率、營業利益率以及淨利率,選擇營業收入在$100,000,000以上的公司,挑選出各前10名作為代表。如下圖




然後因為MATLAB csv讀中文字及符號上會有問題,因此要把原本的檔案做處理

因為公司代號的部分,不是用數字方式儲存,從文字檔的部分可以看到是一個字串

所以,把公司代號選取,按滑鼠右鍵選儲存格格式

把數值類別改為數值
接著把公司名稱用隨便的數字取代
再來也把不是數字的"--"部分也取代掉
然後就可以用這個CSV檔案來讀檔了

如果沒經過以上處理,在MATLAB讀檔就會看到以下錯誤訊息
Mismatch between file and format string.
Trouble reading number from file (row 1, field 1) ==> "1101


然後財務報表中三個基本的數字比率定義如下

毛利率 = 營業毛利 / 營業收入
營業利益率 = 淨額營業利益 / 營業收入
稅後淨利率 = 淨利/營業收入


利用MATLAB來計算這三個結果,底下為參考的MATLAB程式碼
close all; clear all; clc

filename = 't163sb04_20131102_224909526.csv';
length = 777;
% 讀入公司代號、營業收入、營業毛利(毛損)、
% 淨額營業利益(損失)、本期淨利(淨損)
company = csvread(filename,1,0,[1,0,length,0]);
Gross_Sales = csvread(filename,1,2,[1,2,length,2]);
Net_Sales = csvread(filename,1,7,[1,7,length,7]);
Operating_Income = csvread(filename,1,10,[1,10,length,10]);
Net_Income = csvread(filename,1,17,[1,17,length,17]);

% 計算毛利率、營業利益率、稅後淨利率
Net_Sales_r = Net_Sales./Gross_Sales;
Operating_Income_r = Operating_Income./Gross_Sales;
Net_Income_r = Net_Income./Gross_Sales;

% 挑選收入大於NT $100,000,000
m_t1 = Net_Sales_r(Gross_Sales>100*10^6);
m_t2 = Operating_Income_r(Gross_Sales>100*10^6);
m_t3 = Net_Income_r(Gross_Sales>100*10^6);
% 依次排序
m_t1_sort = sort(m_t1,'descend');
m_t2_sort = sort(m_t2,'descend');
m_t3_sort = sort(m_t3,'descend');

% 選前10名
for i = 1:10
% 毛利率
All_pro(i,1) = company(find(Net_Sales_r==m_t1_sort(i)));
% 營業利益率
All_pro(i,2) = company(find(Operating_Income_r==m_t2_sort(i)));
% 稅後淨利率
All_pro(i,3) = company(find(Net_Income_r==m_t3_sort(i)));
end;
All_pro


就可以得到計算出來的結果了。
由左到右,分別是毛利率、營業利益率以及淨利率;由上到下,為排名從第1到第10名的公司計算結果。透過這個方式就可以很快的計算出102年Q2各前10名的公司代號了。

沒有留言:

張貼留言