1. R語言中使用as.Date想轉變日期的形式 as.Date(x,format ("%Y%d%m")
在我們日常所遇到的數據分析任務中,會遇到很多與日期時間掛鉤的數據,比如本月每日的銷售額和網頁一天內每個時間節點的點擊量。這類型的數據大多數為時間序列,而時間序列分析在日常中也是很常見的。現在我們先來聊一下R語言中關於日期時間的處理,之後有時間的話就學習一些有關時間序列分析的方法。
一、日期函數as.Date()函數
R中自帶的函數as.Date首先和大家介紹一下它的日常用法,第一個就是我們使用as.Date來返回日期數據形式,且默認的格式為年-月-日,format參數用於識別輸入的日期按照那種數據邏輯輸入,比如下面數據是以"*年*月*日"的邏輯輸入:
> as.Date("2019年9月28日", format = "%Y年%m月%d日")
[1] "2019-09-28"
其中我們看到上面%Y等等的字元,其實是日期格式的一種字元形式,常用的格式如下:
第二個用法就是我們給定起點日期,再輸入延後天數,就可以輸出對應的日期:
> as.Date(31,origin ='2019-01-01')
[1] "2019-02-01"
二、時間函數POSIXct與POSIXlt
(1).POSIXIt主要特點:作用是打散時間,把時間分成年、月、日、時、分、秒,並進行存儲我們可以結合unclass()函數,從而提取日期時間信息。比如:
> unclass(as.POSIXlt('2018-9-7 8:12:23'))
$sec
[1] 23
$min
[1] 12
$hour
[1] 8
$mday
[1] 7
$mon
[1] 8
$year
[1] 118
$wday
[1] 5
$yday
[1] 249
$isdst
[1] 0
$zone
[1] "CST"
$gmtoff
[1] NA
我們輸入帶時間的日期數據,利用unclass和as.POSIXlt函數就可以返回秒、分、時、日、該年已過月數、已過年數(從1900起)、星期幾、該天對應該年的第幾天,時區等等。
(2).POSIXct 是以1970年1月1號8點開始的以秒進行存儲,如果是負數,則是之前的日期時間;正數則是之後,比如:
> unclass(as.POSIXct('1970-1-1 8:00:20'))
[1] 20
attr(,"tzone")
[1] ""
三、日期時間的運算
(1).日期相減,得到相差的天數
> as.Date("2019-10-01") - as.Date('2019-9-26')
Time difference of 5 days
(2).帶時間的日期相減,得到相差數(可以指定units參數為"secs","mins","hours","days")
> difftime('2019-10-1 10:00:00',"2019-10-1 6:00:00",units="hours")
Time difference of 4 hours
2. 如何在r語言中抓取股票數據並分析論文
用quantomd包
然後getsymbols函數
分析論文 要看你研究方向
如果是看影響因素 一般回歸就行
如果看股票波動和預測 可能需要時間序列
3. 如何用R語言的quantmod包獲取一系列股票的歷史日線數據
我舉個例子供你參考:
> install.packages('quantmod') # 安裝安裝quantmod包
> require(quantmod)#引用quantmod包
> getSymbols("GOOG",src="yahoo",from="2013-01-01", to='2013-04-24') #從雅虎財經獲取google的股票數據
> chartSeries(GOOG,up.col='red',dn.col='green') #顯示K線圖
4. 如何用R語言提取股票行情數據
最上邊一行菜單欄倒數第二個「高級」-「關聯任務定義」-選取最右邊從上到下第二個按鈕,找到2009年決算任務安裝路徑-確定。 然後 最上邊一行菜單欄正數第二個「錄入」-「上年數據提取」即可 提取完了,注意修改與去年不同的科目代碼!
5. R語言quantmod包下載的股票數據中如何確定某一數據的日期
篩選到這個行,然後輸出
6. 如何編程從免費股票軟體中提取實時數據
自己寫程序的話,一種方法是從已提供的信息源,例如webservice獲取數據。還有種辦法就是去連接提供即時信息的網頁硬解析。
代碼舉例如下:
Created on Thu Jul 23 09:17:27 2015
@author: jet
"""
DAY_PRICE_COLS = ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20', 'turnover']
DAY_PRICE_URL = '%sapi.finance.%s/%s/?code=%s&type=last'
INDEX_KEY = ['SH', 'SZ', 'HS300', 'SZ50', 'GEB', 'SMEB']
INDEX_LIST = {'SH': 'sh000001', 'SZ': 'sz399001', 'HS300': 'sz399300',
'SZ50': 'sh000016', 'GEB': 'sz399006', 'SMEB': 'sz399005'}
INDEX_DAY_PRICE_COLS= ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20']
K_TYPE_KEY = ['D', 'W', 'M']
K_TYPE_MIN_KEY = ['5', '15', '30', '60']
K_TYPE = {'D': 'akdaily', 'W': 'akweekly', 'M': 'akmonthly'}
MIN_PRICE_URL = '%sapi.finance.%s/akmin?scode=%s&type=%s'
PAGE_TYPE = {'http': 'http://', 'ftp': 'ftp://'}
PAGE_DOMAIN = {'sina': 'sina.com.cn', 'ifeng': 'ifeng.com'}
URL_ERROR_MSG = '獲取失敗,請檢查網路狀態,或者API埠URL已經不匹配!'
get_hist_data.py
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 23 09:15:40 2015
@author: jet
"""
import const as ct
import pandas as pd
import json
from urllib2 import urlopen,Request
def get_hist_data(code = None, start = None, end = None, ktype = 'D'):
"""
功能:
獲取個股歷史交易數據
--------
輸入:
--------
code:string
股票代碼 比如:601989
start:string
開始日期 格式:YYYY-MM-DD 為空時取到API所提供的最早日期數據
end:string
結束日期 格式:YYYY-MM-DD 為空時取到最近一個交易日數據
ktype:string(default=D, 函數內部自動統一為大寫)
數據類型 D=日K線,W=周K線,M=月K線,5=5分鍾,15=15分鍾
30=30分鍾,60=60分鍾
輸出:
--------
DataFrame
date 日期
open 開盤價
high 最高價
close 收盤價
low 最低價
chg 漲跌額
p_chg 漲跌幅
ma5 5日均價
ma10 10日均價
ma20 20日均價
vma5 5日均量
vma10 10日均量
vma20 20日均量
turnover換手率(指數無此項)
"""
code = code_to_APIcode(code.upper())
ktype = ktype.upper()
url = ''
url = get_url(ktype, code)
print(url)
js = json.loads(ping_API(url))
cols = []
if len(js['record'][0]) == 14:
cols = ct.INDEX_DAY_PRICE_COLS
else:
cols = ct.DAY_PRICE_COLS
df = pd.DataFrame(js['record'], columns=cols)
if ktype in ct.K_TYPE_KEY:
df = df.applymap(lambda x:x.replace(u',', u''))
for col in cols[1:]:
df[col]=df[col].astype(float)
if start is not None:
df = df [df.date >= start]
if end is not None:
df = df[df.date <= end]
df = df.set_index('date')
return df
def code_to_APIcode(code):
"""
功能:
驗證輸入的股票代碼是否正確,若正確則返回API對應使用的股票代碼
"""
print(code)
if code in ct.INDEX_KEY:
return ct.INDEX_LIST[code]
else:
if len(code) != 6:
raise IOError('code input error!')
else:
return 'sh%s'%code if code[:1] in ['5', '6'] else 'sz%s'%code
def get_url(ktype, code):
"""
功能:
驗證輸入的K線類型是否正確,若正確則返回url
"""
if ktype in ct.K_TYPE_KEY:
url = ct.DAY_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
ct.K_TYPE[ktype], code)
return url
elif ktype in ct.K_TYPE_MIN_KEY:
url = ct.MIN_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
code, ktype)
return url
else:
raise IOError('ktype input error!')
def ping_API(url):
"""
功能:
向API發送數據請求,若鏈接正常返回數據
"""
text = ''
try:
req = Request(url)
text = urlopen(req,timeout=10).read()
if len(text) < 15:
raise IOError('no data!')
except Exception as e:
print(e)
else:
return text
#測試入口
print(get_hist_data('601989','2015-07-11','2015-07-22'))
7. 怎樣用python提取不同股票csv里特定時間段的數據
用pandas庫,
import pandas as pd
data = pd.read_csv('train.csv')
train_data = data.values[0:TRAIN_NUM,1:]
train_label = data.values[0:TRAIN_NUM,0]
study.163.com/course/courseMain.htm?courseId=1000035
機器學習正好講了這個手寫識別的例子!
8. 如何編程從免費股票軟體中提取實時數據
自己寫程序的話,一種方法是從已提供的信息源,例如webservice獲取數據。還有種辦法就是去連接提供即時信息的網頁硬解析。
代碼舉例如下:
Created on Thu Jul 23 09:17:27 2015
@author: jet
"""
DAY_PRICE_COLS = ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20', 'turnover']
DAY_PRICE_URL = '%sapi.finance.%s/%s/?code=%s&type=last'
INDEX_KEY = ['SH', 'SZ', 'HS300', 'SZ50', 'GEB', 'SMEB']
INDEX_LIST = {'SH': 'sh000001', 'SZ': 'sz399001', 'HS300': 'sz399300',
'SZ50': 'sh000016', 'GEB': 'sz399006', 'SMEB': 'sz399005'}
INDEX_DAY_PRICE_COLS= ['date', 'open', 'high', 'close', 'low', 'volume',
'chg', '%chg', 'ma5', 'ma10', 'ma20',
'vma5', 'vma10', 'vma20']
K_TYPE_KEY = ['D', 'W', 'M']
K_TYPE_MIN_KEY = ['5', '15', '30', '60']
K_TYPE = {'D': 'akdaily', 'W': 'akweekly', 'M': 'akmonthly'}
MIN_PRICE_URL = '%sapi.finance.%s/akmin?scode=%s&type=%s'
PAGE_TYPE = {'http': 'http://', 'ftp': 'ftp://'}
PAGE_DOMAIN = {'sina': 'sina.com.cn', 'ifeng': 'ifeng.com'}
URL_ERROR_MSG = '獲取失敗,請檢查網路狀態,或者API埠URL已經不匹配!'
get_hist_data.py
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 23 09:15:40 2015
@author: jet
"""
import const as ct
import pandas as pd
import json
from urllib2 import urlopen,Request
def get_hist_data(code = None, start = None, end = None, ktype = 'D'):
"""
功能:
獲取個股歷史交易數據
--------
輸入:
--------
code:string
股票代碼 比如:601989
start:string
開始日期 格式:YYYY-MM-DD 為空時取到API所提供的最早日期數據
end:string
結束日期 格式:YYYY-MM-DD 為空時取到最近一個交易日數據
ktype:string(default=D, 函數內部自動統一為大寫)
數據類型 D=日K線,W=周K線,M=月K線,5=5分鍾,15=15分鍾
30=30分鍾,60=60分鍾
輸出:
--------
DataFrame
date 日期
open 開盤價
high 最高價
close 收盤價
low 最低價
chg 漲跌額
p_chg 漲跌幅
ma5 5日均價
ma10 10日均價
ma20 20日均價
vma5 5日均量
vma10 10日均量
vma20 20日均量
turnover換手率(指數無此項)
"""
code = code_to_APIcode(code.upper())
ktype = ktype.upper()
url = ''
url = get_url(ktype, code)
print(url)
js = json.loads(ping_API(url))
cols = []
if len(js['record'][0]) == 14:
cols = ct.INDEX_DAY_PRICE_COLS
else:
cols = ct.DAY_PRICE_COLS
df = pd.DataFrame(js['record'], columns=cols)
if ktype in ct.K_TYPE_KEY:
df = df.applymap(lambda x:x.replace(u',', u''))
for col in cols[1:]:
df[col]=df[col].astype(float)
if start is not None:
df = df [df.date >= start]
if end is not None:
df = df[df.date <= end]
df = df.set_index('date')
return df
def code_to_APIcode(code):
"""
功能:
驗證輸入的股票代碼是否正確,若正確則返回API對應使用的股票代碼
"""
print(code)
if code in ct.INDEX_KEY:
return ct.INDEX_LIST[code]
else:
if len(code) != 6:
raise IOError('code input error!')
else:
return 'sh%s'%code if code[:1] in ['5', '6'] else 'sz%s'%code
def get_url(ktype, code):
"""
功能:
驗證輸入的K線類型是否正確,若正確則返回url
"""
if ktype in ct.K_TYPE_KEY:
url = ct.DAY_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
ct.K_TYPE[ktype], code)
return url
elif ktype in ct.K_TYPE_MIN_KEY:
url = ct.MIN_PRICE_URL % (ct.PAGE_TYPE['http'], ct.PAGE_DOMAIN['ifeng'],
code, ktype)
return url
else:
raise IOError('ktype input error!')
def ping_API(url):
"""
功能:
向API發送數據請求,若鏈接正常返回數據
"""
text = ''
try:
req = Request(url)
text = urlopen(req,timeout=10).read()
if len(text) < 15:
raise IOError('no data!')
except Exception as e:
print(e)
else:
return text
#測試入口
print(get_hist_data('601989','2015-07-11','2015-07-22'))
9. 如何用R語言在數據中提取指定列數據,並且形成一個新的數據表
1、分析數據表:通過瀏覽「入庫明細」表,我們可能看到入庫明細表中,作為提取記錄的條件零件號在A列。
需要提取的記錄,入庫日期在H列、入庫單號在O列、最後生產批號在L列、入庫前庫存數在Q列。為DC000496ZL的記錄有5條(截圖中的4條是指上面有4條)。
2、列出提取條件及項目:在sheet1中,將A列放置提取條件(即零件號)。在B、C、D、E列分別寫上提取項目名稱:入庫日期、入庫單號、最後生產批號、入庫前庫存數。
3、寫公式:在最後入庫日期項目下B2中輸入公式:=MAX((入庫明細!$A$2:$A$26=$A2)*(入庫明細!$H$2:$H$26)),這是一個數組公式,請用三鍵確認(ctrl+shift+enter)。
搜索
免費自學excel教程全套
excel另一列數據提取
自動抓取數據excel表
表格技巧大全
excel100個常用技巧
新手怎麼做財務報表
10. 怎樣用r語言 分時間段 取數據
方法
1
不管是讀取數據還是寫入,R都是在工作路徑中完成的。所以首先我們要知道我們的R所在的工作路徑是在哪裡。使用getwd()函數來獲取我們的工作路徑。
2
下面查看工作路徑裡面有哪些文件,使用dir()函數
3
如果你所想導入的數據並不在你當前的工作路徑中,有兩種方法可以解決。第一種就是把數據文件放到工作路徑中,第二種方法就是更改工作路徑。更改