一個韭菜用Python採集,清洗和分析中證指數
Python 用來做數據分析和清洗很方便。網上面最多的數據就是股市相關數據了。 我花了一些時間做了中證指數採集和分析。 分享是最好的投資,所以把整個過程分享出來給大家看看
前段時間發現Python 是個很好玩的東西。作數據採集和數據清洗特別方面。
首先,展示一下結果。
以市盈率小於50的指數為樣本
1. 市場波動和指數當日交易規模的相關性
言歸整體,本文是用中證的指數信息,還分享如何用Python 採集,清洗和分析指數信息。
三部曲:
數據從哪裡來:
我直接從中證公司的網站下載了公開數據。行情走勢
這個指數數據每日更新。所以拿到了這個數據,就獲得了每日的中證公司發布的指數信息。 裡面包含,日期,股指代碼, 開盤,最高,最低,收盤,漲跌,漲跌率,成交量,成交金額,股指市值,市盈率,股息率等數據。 詳細的數據格式在 中證指數數據文件服務規範。
一。數據怎麼採集:
阿里雲Centos + Linux 腳本。每日定時下載。從4月份開始採集,到現在差不多快30個交易日了,一共採集了30個文件。
腳本如下:
. crontab 每周1到周5 晚上20:30分下載
30 20 * * 1-5 /home/username/index/download_dailyindex.sh
. wget 腳本下載
#!/usr/bin/bash
INDEX_Directory=/home/username/index/
DATE=$(date +%Y_%m_%d_%H%M_W%U)
TodayFile=${INDEX_Directory}${DATE}.txt
wget -b -O$TodayFile ftp://115.29.204.48/webdata/ashare_perf.txt
二. 數據怎麼清洗:
2.1 Linux 預處理
環境:阿里雲 Centos 7.2
整理數據頭:
head -n 26 >csi_heads.txt
Linux 命令 不定期整合文件內容:(例如:從4月份到5月底整合了一次)
tail -q -n +28 /home/username/index/2017* >> csi_w14-w20.txt
將Csi_heads.txt 和csi_w14-w20.txt文件 拷貝到 Python Jupyter 的index 目錄下
2.2 Python 深度處理
環境: Python 3.6.0 |Anaconda 4.3.1 + Jupyter
1。導入數據
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import csiindex
%matplotlib inline
csi_data = load_index_data()
low_PE_csi = csi_data[csi_data["P/E1"]<=50]
load_index_data 函數在 csiindex.py 中定義了。 csiindex.py 內容為:
import pandas as pd
import numpy as np
def load_index_data(location="index/csi_w14-w20.txt"):
#load txt file with file name, only import the head from index/csi_heads.csv"
# 此處csi_head 有額外的處理,增加了列頭,為了簡便起見,不再贅述。
csi_heads = pd.read_csv("index/csi_heads.csv",)
typelist = dict(zip(csi_heads.loc[1:16]["column_name"],csi_heads.loc[1:16]["type"]))
csi_data = pd.read_csv("index/csi_w14-w20.txt",
header=None,
delimiter="|",
names=csi_heads["column_name"][0:16],
usecols=csi_heads["column_name"][0:16],
index_col=["Date"],
parse_dates=["Date"])
#strip while space from index code 清理空格
csi_data["Index Code"]= csi_data["Index Code"].map(str.strip)
#convert the data to numeric format 轉換成數字型
for i in csi_heads.loc[2:15,"column_name"]:
c_head=i
csi_data[c_head] = pd.to_numeric(csi_data[c_head],errors ="coerce")
return csi_data
到這裡,中證指數的每日股指信息就成了Python 的Pandas Dataframe了。 可以非常方便的分析和處理了。
三. 數據分析
簡單來說
1.看看有哪些列
2.看看某指數的歷史行情(4月到5月),以中證紅利為例3.看看某日指數的市盈率和股息率的頻數分布filter = csi_data["Index Code"]=="000922"
csi_data.loc[filter,["Close"]].plot()
csi_0519 = csi_data.loc[20170519]
csi_0519["P/E1"].plot(kind="hist")
從這張圖上看出5月19日這個絕大多數的股指市盈率是10~50倍之間。
csi_0519 = csi_data.loc[20170519]
csi_0519["D/P1"].plot(kind="hist")
從這張圖上可以看出5月19日這天,絕大多數的股指的股息率是0.5%~3%
知乎上面的大牛很多。 這篇文章內容比較淺顯, 分析比較淺薄,還望多多指正。
我不是做數據研究也不是搞投資的。分析中證指數信息完全是處於興趣愛好和分享是對自己最好的投資的觀點進行。 當然,如果能讓自己脫韭菜就更好了。
數據分析,數據模型和決策或者說商務統計這一方面的網上案例和相關書籍很多,自己也學過一些,所以從這方面下手。發布「一個韭菜用Python採集,清洗和分析中證指數」
註:
。 在初學了Python後, 原本想看看項目管理方面,有沒有相關的大數據分析案例,沒有找到參考。
。之前有想過用Python分析資治通鑒。 結果發現自然語言的處理,難度遠遠超出想像,基本上放棄了。
如果有上面兩個話題(項目管理,或歷史書的時間線)數據分析,有大牛感興趣,多多交流。
推薦閱讀:
※測試比較 Hive, impala 和 shark/spark 的性能,可以從哪些具體方面入手?
※CCAI人工智慧大會華山論劍的碎筆之一
※有哪些「神奇」的數據獲取方式?
※獨家 | 一文讀懂推薦系統知識體系(附學習資料)