1. 程式人生 > >Python資料分析之股票資料

Python資料分析之股票資料

最近股市比較火,我7月初上車了,現在已經下了。中間雖然吃了點肉,但下車的時候都虧進去了,最後連點湯都沒喝著。

這篇文章我們就用python對股票資料做個簡單的分析。資料集是從1999年到2016年上海證券交易所的1095只股票。

共1000個檔案。

我們的分析思路大致如下:

  • 每年新發股票數
  • 目前市值最大的公司有哪些
  • 股票一段時間的漲跌幅如何
  • 牛市的時候,個股表現如何

首先匯入模組

import pandas as pd
import numpy as np
import os
import seaborn as sns
import matplotlib.pyplot as plt
# 繪圖顯示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

pandas讀檔案

file_list = os.listdir('./data/a-share/')

pieces = []
for file_name in file_list:
    path = './data/a-share/%s' % file_name
    file = pd.read_csv(path, encoding ='gb2312')
    pieces.append(file)
    
shares = pd.concat(pieces)

使用read_csv讀檔案的時候需要指定檔案編碼encoding ='gb2312'。將各個檔案的DataFrame合併後,將索引重置一下,並預覽一下資料

shares.reset_index(inplace=True, drop=True)
shares.head()

這裡我們最關注的列是日期程式碼簡稱收盤價

按照分析思路,我們首先來看看上市公司的總數

len(shares['程式碼'].unique())

對股票程式碼去重、計數可以看到一共有1095家上市公司。那我們再看看每年新增的上市公司有多少家

# 計算每隻股票的最早交易時間(即:上市時間)
shares_min_date = shares.groupby('簡稱').agg({'日期':'min'})
shares_min_date['上市年份'] = shares_min_date['日期'].apply(lambda x: str(x)[:4])

# 每年上市公司的數量
shares_min_date.groupby('上市年份').count().plot()

可以看到,多的時候每年60-80家,而05年-13年這段時間上市後的公司特別少,尤其是13年只有1家,原因是13年暫停了IPO。

下面我們再來看看資料集中最新的時間點(2016-06-08),市值較大的公司有哪些

shares_market_value = shares[shares['日期'] == '2016-06-08'][['簡稱', '總市值(元)']].sort_values(by='總市值(元)', ascending=False)

# 市值最大的公司 top10
tmp_df = shares_market_value.head(10)

# 畫圖
sns.barplot(x=tmp_df['總市值(元)'], y=tmp_df['簡稱'])

截至16年6月8號,工商銀行(愛存不存)的市值最高1.5萬億,不愧是宇宙第一大行。並且能發現市值前十的公司大部分是銀行。

下面再來看看,從11.06.09 - 16.06.085年時間裡個股漲跌情況。起點選11.06.09的原因是這一天包含了900左右只股票,樣本較大。然後,我們抽取這兩天股票的收盤價,計算漲跌幅

shares_110609 = shares[shares['日期'] == '2011-06-09'][['程式碼', '簡稱', '收盤價(元)']]
shares_160609 = shares[shares['日期'] == '2016-06-08'][['程式碼', '收盤價(元)']]

# 按照股票程式碼將2天資料關聯
shares_price = shares_110609.merge(shares_160609, on='程式碼')
shares_price

一共有879只股票

# 多少家股票是上漲的
shares_price[shares_price['漲跌幅(%)'] > 0].count()
# 多少家股票是上漲的
shares_price[shares_price['漲跌幅(%)'] < 0].count()

可以看到,上漲的股票627只,佔比71%。那我們再來看看,上漲的股票,漲幅分佈情況

bins = np.array([0, 40, 70, 100, 1700])
# 股價上漲的公司
shares_up = shares_price[shares_price['漲跌幅(%)'] > 0]
# 按漲幅進行分組
shares_up['label'] = pd.cut(shares_up['漲跌幅(%)'], bins)
# 分組統計
up_label_count = shares_up[['label', '程式碼']].groupby('label').count()
up_label_count['佔比'] = up_label_count['程式碼'] / up_label_count.sum().values
sns.barplot(x=up_label_count['佔比'], y=up_label_count.index)

漲幅分佈還是比較極端的,雖然上漲的股票總體比較高,但上漲的股票中有30%只股票漲幅不足40%,也就是平均一年漲8%,如果理財年收益10%算及格的話,8%明顯偏低了。再加上跌的股票,收益率低於10%的股票大於50%,所以股市的錢也不是那麼好掙的。

當然也有踩狗屎運的時候,比如買到了下面這些股票並且長期持有

# 漲幅最大的公司
tmp_df = shares_up.sort_values(by='漲跌幅(%)', ascending=False)[:8]
sns.barplot(y=tmp_df['簡稱'], x=tmp_df['漲跌幅(%)'])

金證股份持有5年後可以翻16倍。

同樣的方式,我們可以看看股票跌幅分佈

因為程式碼類似,這裡就不貼了。從資料上將近70%的股票5年後跌幅在0-40%的區間。

最後一個有意思的資料,我們看看牛市的時候個股漲跌是怎麼樣的。我們選擇14.06.3015.06.08這兩天個股的漲跌情況。分析思路跟上面類似,我就直接說資料了。

牛市期間99.6%的股票都是漲的,也就是說個股基本都在上漲。來看看漲幅分佈

可以看到,86%只股票翻了一番,所以牛市來了,基本上閉著眼選股都能掙錢。也不知道這種大牛市什麼時候能再來一次,當然了,牛市來了能不能把握住是個大問題。

我的分析就到這裡了,其實分析有意思的資料還有很多,比如結合一些市盈率等其他維度進行分析,有興趣的朋友可以自行探索,我覺得還有一個更有挑戰性的分析是預測個股的走勢,雖然實踐上不可行,但從學習角度來看還是挺值得研究的,如果大家點贊較多,我下週考慮寫一下。

資料和原始碼已經打包,公眾號回覆關鍵字股票即可。

歡迎公眾號 「渡碼」 輸出別地兒看不到的乾貨。

相關推薦

Python資料分析股票資料

最近股市比較火,我7月初上車了,現在已經下了。中間雖然吃了點肉,但下車的時候都虧進去了,最後連點湯都沒喝著。 這篇文章我們就用python對股票資料做個簡單的分析。資料集是從1999年到2016年上海證券交易所的1095只股票。 共1000個檔案。 我們的分析思路大致如下: 每年新發股票數目前市值最大的

Python網路爬蟲股票資料Scrapy爬蟲例項介紹,實現與優化!(未成功生成要爬取的內容!)

結果TXT文本里面竟然沒有內容!cry~ 編寫程式: 步驟: 1. 建立工程和Spider模板 2. 編寫Spider 3. 編寫ITEM Pipelines 程式碼:成功建立 D:\>cd pycodes D:\pycodes>

資料分析股票市場價格分析

1.如何從網際網路上尋找資料 資料獲取通常分為兩種: 第一種:主動獲取。我們有很多種方式去網際網路上獲取我們想要的資料。常用的就是爬蟲。(例如:http://github.com/xiaopeng163/bili-spider,就是一哥們寫的爬蟲專案。爬取 B站全站視訊資訊) 第二種:被動方式

Python資料分析pandas資料視覺化 python

Python資料視覺化常用的是matplotlib庫,matplotlib是底層庫,今天學了pandas的資料視覺化,相對於matplotlib庫來說,簡單許多。 折線圖 %matplotlib inline import numpy as np import

資料分析Pandas——資料結構

資料結構介紹 Pandas的資料物件中都包含最基本的屬性,如資料型別,索引,標籤等。 要使用Pandas的資料結構首先需要引入pandas和numpy: In [1]: import numpy as np In [2]: import pandas

python股票資料分析

一、初識PandasPandas 是基於 NumPy 的一個非常好用的庫,它有兩種自己獨有的基本資料結構Series (一維)和 DataFrame(二維),它們讓資料操作更簡單了。雖然Pandas有著兩種資料結構,但它依然是 Python 的一個庫,所以,Python 中有

「機器學習」Python資料分析Numpy進階

請點選此處輸入圖片描述 進階 廣播法則(rule) 廣播法則能使通用函式有意義地處理不具有相同形狀的輸入。 廣播第一法則是,如果所有的輸入陣列維度不都相同,一個“1”將被重複地新增在維度較小的陣列上直至所有的陣列擁有一樣的維度。 廣播第二法則確定長度為1的陣列沿著特

「機器學習」Python資料分析Numpy

請點選此處輸入圖片描述 NumPy的主要物件是同種元素的多維陣列。這是一個所有的元素都是一種型別、通過一個正整數元組索引的元素表格(通常是元素是數字)。在NumPy中維度(dimensions)叫做軸(axes),軸的個數叫做秩(rank)。 例如,在3D空間一個點的座標[1,

Python資料分析讀取檔案 python 程式語言

Python的資料分析,大部分的教程都是想講numpy,再講Dataframe,再講讀取檔案。但我看書的時候,前面二章看的實在頭暈,所以,我們還是通過讀取檔案來開始我們的Python資料分析吧。 讀取CSV 讀取csv通過read_csv讀取python程式語言學習QQ群 5152672

python資料分析numpy

(1)在numpy中呼叫numpy.lookfor('keyword')檢視numpy中的所有關鍵字及函式; (2)numpy中的操作物件是array(矩陣),且array中的資料都為相同型別; (3)用numpy.genfromtxt()函式讀.txt檔案; (4)生成矩陣:用numpy.arange

利用Python進行資料分析第七章 記錄2 資料規整化:清理、轉換、合併、重塑

索引上的合併 DataFrame中傳入引數left_index=True或者right_index=True(或者兩個都傳入),表示DataFrame的index(索引)被用作兩個DataFrame連線的連線鍵,如下: dataframe1 = DataFrame({'key':

利用Python進行資料分析第七章記錄 資料規整化:清理、轉換、合併、重塑

合併資料集: pandas物件中的資料可以通過一些內建的方式進行合併: pandas.merge可根據一個或多個鍵將不同DataFrame中的行連線起來。SQL或其它關係型資料庫的使用者對此應該會比較熟悉,因為它實現的就是資料庫的連線操作。 pandas.concat可以沿著一條軸將多個

Python Pandas 做資料分析玩轉 Excel 報表分析

Python Pandas 是大資料分析的基礎,這裡將分享和Excel報表相關的分析技巧,都是工作中的實戰內容。 本場 Chat 主要內容: Excel、CSV 資料的讀、寫、儲存; DataFrame 的 Index、Columns 相關操作; loc、iloc、XS 和 Mul

Python資料分析numpy的使用

在完成了自己的一個小目標後,想繼續往資料探勘和資料分析的方向前進,接下來會陸陸續續的完成學習筆記,方便日後的回顧。在之前的部落格裡有一篇關於numpy的使用:https://blog.csdn.net/totoro1745/article/details/79243465,這裡是進行相關

python資料分析你不知道的bra

  曾經,我把目光放在你身體上四分位的地方,發現了世界的美好。。。 之後,山水流轉,時光荏苒,不再從前。。。 此一文,獻給過往。 先上張圖:好奇怪,為什麼是這麼個比例[皺眉] 這篇文章分為兩個部分,python爬蟲和資料分析。爬取京東bra一些資料,並進行分析

資料分析Python資料匯入

'''資料匯入''' import pandas as pda i=pda.read_csv('E:/programCode/jd.csv',encoding='gb18030') i.describe() #按照某一列進行排序 i.sort_values(by='238')#2

Python資料分析numpy包

numpy使用示例 前言 示例程式碼 參考資料 前言 numpy,全稱numeric python,是一個由多維陣列物件和用於處理陣列的例程集合組成的庫,是python資料分析中最基礎

Python資料分析路| 入門起航篇

資料分析準備工作 1.資料分析工具 工欲善其事,必先利其器,網上有很多關於資料分析的文章,相信大家一定聽過R語言和Python之爭,而且各有千秋,R語言在學術界更流行,但是在做專案上面我個人比較喜歡Python,Python更通用,更簡潔,文件也很多,而且有大量的庫特別是Google,Fac

【MOOC】Python資料分析與展示-北京理工大學-【第〇周】資料分析前奏

課程內容導學 主題思想 與一組資料相關的那些事兒: 如何理解一組資料表達的含義 有損地提取資料特徵 內容組織 全課程包括: • 8個內容單元,共12個單元 • 全課程總長4周,每週3個單元 • 每週包含一個實戰型例項 程式

python資料分析matplotlib繪圖

matplotlib繪圖 Series和DataFrame都有一個用於生成各類圖表的plot方法。預設情況下,它們所生成的是線形圖 %matplotlib inline 是IPython 中的一個魔法函式。 以下命令都是在瀏覽器中輸入。 cmd命令視窗輸