Hier mein Code:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: stock.py
# Purpose: historical share prices are downloaded from the Internet
#
# Author: Thomas Graeber
#
# Created: 11/11/2020
# License: n/a
#-------------------------------------------------------------------------------
"""
historical share prices are downloaded from the Internet
individual values are saved in a pandas dataframe
1 main class that, beside constructor, contains 5 functions:
constructor (__init__)
- querys table with the Ariva Security Number
and gets Securitynumber from it
- builds the ariva-URL
- calls the private functions:
_request_site
_create_dataframe
_edit_dataframe
3 private functions:
_request_site
makes request
In: url
Out: request_result
_create_dataframe
creates dataframe containing result
In: request_result
Out: stock_data
_edit_dataframe
does 5 operations on the dataframe
In: stock_data
Out: stock_data_finished
2 public functions:
print_dataframe
In: stock_data_finished
to_excel
In: stock_data_finished
"""
import pandas as pd
import requests
import io
import datetime
# main class
class Stock():
def __init__(self, start_date, end_date, isin):
"""
constructor (__init__) - builds the ariva-URL
In:
security-number, start-date, end-date
Out:
URL
"""
# create pandas dataframe from Excel-file
isin_table = pd.read_excel('data/AllMArkets.xls')
# query dataframe
result = isin_table.query('ISIN == @isin')
# get secu from query-result
secu = result.iloc[0]['Ariva Security Number']
self.url = 'http://www.ariva.de/quote/historic/historic.csv?secu=%d&boerse_id=6&clean_split=1&clean_payout=0&clean_bezug=1&min_time=%s&max_time=%s&trenner=%s3B&go=Download' % (secu, start_date, end_date, chr(37))
self._request_site()
self._create_dataframe()
self._edit_dataframe()
# private functions
def _request_site(self):
"""
makes the http-request
In:
URL
Out:
request-result
"""
self.request_result = requests.get(self.url)
def _create_dataframe(self):
"""
creates a pandas-dataframe containing the request-result
In:
request_result
Out:
stock-data (dataframe)
"""
urlData = self.request_result.content
self.stock_data = pd.read_csv(io.StringIO(urlData.decode('utf-8')),
sep=";", thousands='.')
def _edit_dataframe(self):
"""
does 5 operations on the dataframe
+ removes the column 'Volumen'
+ translates the column names into English
+ inverts the rows
+ resets the index
+ removes the old index
In:
stock-data
Out:
stock-data finished
"""
# remove column 'Volumen' (the special value 'Volumen' isn't necessary, the number/quantity is
# called 'volume' from now on)
stock_data = self.stock_data.drop(columns=['Volumen'])
# translate column names
stock_data.columns = ['date', 'open', 'high', 'low', 'close', 'volume']
# invert rows
stock_data = stock_data.iloc[::-1]
# reset index
stock_data = stock_data.reset_index()
# remove old index
self.stock_data_finished = stock_data.drop(columns=['index'])
# public functions
def print_dataframe(self):
print(self.stock_data_finished)
def to_excel(self):
"""
writes the requested data to a csv-file
In:
stock_data_finished
"""
self.stock_data_finished.to_excel('results/stock.xlsx')
def main():
start_date = datetime.date(2016, 1, 14)
end_date = datetime.date(2017, 1, 14)
apple = Stock(start_date, end_date, isin='US0378331005')
apple.print_dataframe()
apple.to_excel()
if __name__ == "__main__":
main()
Ich habe versucht, das Modul pandas upzudaten, erhielt dabei jedoch:
ERROR: Could not install packages due to an OSError: [WinError 5] Zugriff verweigert: 'C:\\Users\\User\\anaconda3\\Lib\\site-packages\\~andas\\_libs\\algos.cp311-win_amd64.pyd'
Consider using the `--user` option or check the permissions.
Erbitte Hilfe!