stock_prices.csv
时间: 2023-10-04 18:05:32 浏览: 194
stock_prices.csv 是示例代码中使用的历史股票价格数据,可以通过以下代码创建并保存为 CSV 文件:
```python
import pandas as pd
import numpy as np
# 创建示例数据
dates = pd.date_range(start='2020-01-01', end='2021-01-01')
prices = np.random.normal(loc=100, scale=10, size=len(dates))
df = pd.DataFrame({'Date': dates, 'Close': prices})
# 保存为 CSV 文件
df.to_csv('stock_prices.csv', index=False)
```
上述代码创建了一个包含随机股票价格数据的 Pandas DataFrame,并将其保存为 stock_prices.csv 文件。可以根据需要修改数据生成代码,以适应不同的测试场景。
相关问题
根据钉钉群提供的“stock_name.csv”文件,利用Python软件随机选取20只股票,并且剔除ST股票,通过图书馆的CSMAR数据库或者其他数据库来源,调取2020年1月1日至2023年5月10日股票日收盘价数据,确保这20只股票都有完
整的历史数据。以下是实现的步骤:
1. 读取 "stock_name.csv" 文件,获取所有的股票代码。
2. 随机选择 20 只股票代码,同时剔除 ST 股票代码。
3. 到 CSMAR 数据库或其他数据库中查询这 20 只股票代码的历史股票收盘价数据。
4. 确保这些股票在 2020 年 1 月 1 日至 2023 年 5 月 10 日之间都有完整的收盘价数据。
下面是一个示例代码,你可以根据自己的需求进行修改:
```python
import pandas as pd
import numpy as np
import random
import datetime
# 读取股票代码文件
df_stock = pd.read_csv('stock_name.csv', header=None, names=['code'])
# 剔除 ST 股票
df_stock = df_stock[~df_stock['code'].str.contains('ST')]
# 随机选择 20 只股票
random.seed(123)
codes = random.sample(df_stock['code'].tolist(), 20)
# 获取股票历史收盘价数据
start_date = datetime.date(2020, 1, 1)
end_date = datetime.date(2023, 5, 10)
prices = pd.DataFrame()
for code in codes:
# 查询股票收盘价数据
# 这里用 df 表示查询结果,假设有两列:日期和收盘价
df = query_stock_price_from_database(code, start_date, end_date)
# 确保数据完整
if len(df) == (end_date - start_date).days + 1:
# 重命名列名,并添加到 prices 数据框中
df = df.rename(columns={'date': '日期', 'price': code})
prices = pd.concat([prices, df[code]], axis=1)
# 输出最终的股票收盘价数据
print(prices)
```
需要注意的是,这里的 `query_stock_price_from_database` 函数需要根据具体的数据库和查询方式进行编写。在这个函数中,需要输入股票代码、起始日期和终止日期,输出对应的股票收盘价数据。
从 multi_stock_data.csv 中选择平均交易量前五的股票,使用柱状图表示每支股票的交易量,并为每根柱子标出具体的数值。 创建一个双轴图表,左侧 y 轴表示某支股票的每日收盘价(折线图),右侧 y 轴表示其每日交易量(柱状图),选择过去 30 天的数据来绘制图表
首先,我们需要加载`multi_stock_data.csv`数据,计算每支股票的交易量平均值,并根据平均交易量排序选取前五名。接下来,我们将使用matplotlib库创建所需的图形。
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist.axislines as axislines
# 加载数据
df = pd.read_csv('multi_stock_data.csv')
# 计算每支股票的交易量平均值
average_volume = df.groupby('ts_code')['volume'].mean().sort_values(ascending=False)[:5]
# 选择前五名股票的交易量数据
selected_stocks = average_volume.index.tolist()
# 创建数据框,只包含选定股票过去30天的数据
past_30_days = df[(df['ts_code'].isin(selected_stocks)) & (df['date'] >= df['date'].max() - pd.DateOffset(days=30))]
# 双轴图表
fig = plt.figure(figsize=(10, 7))
host = host_subplot(111)
ax2 = host.twinx()
for stock in selected_stocks:
daily_closing_prices = past_30_days[past_30_days['ts_code'] == stock]['close_price']
daily_volume = past_30_days[past_30_days['ts_code'] == stock]['volume']
host.set_xlabel("日期")
host.set_ylabel(f"{stock}收盘价", color='blue')
ax2.set_ylabel(f"{stock}交易量", color='green')
# 折线图
host.plot(daily_closing_prices.index, daily_closing_prices.values, label=stock + '收盘价', color='blue')
# 柱状图
ax2.bar(daily_closing_prices.index, daily_volume.values, width=1, alpha=0.5, label=stock + '交易量', color='green')
# 标记每根柱子的具体数值
for i, vol in enumerate(ax2.patches):
ax2.text(vol.get_x() + vol.get_width() / 2., vol.get_height(), int(vol.get_height()), ha='center', va='bottom')
host.yaxis.label.set_color('blue')
ax2.yaxis.label.set_color('green')
plt.xticks(rotation=45) # 旋转x轴标签以避免重叠
legend = host.legend(loc="upper left")
host.axis["left"].set_axisline_style("-|>")
host.axis["right"].set_axisline_style("-|>")
host.axis["top"].set_visible(False)
host.axis["bottom"].set_label_position("zero") # 将底部y轴刻度标签置于零线上方
plt.show()
```
这个代码首先计算每支股票的平均交易量,然后选择前五名股票进行30天内的数据处理。双轴图表中,左侧是收盘价的折线图,右侧是交易量的柱状图,每个柱子都标注了具体的数值。通过mpl_toolkits中的功能,调整了两条y轴的样式以便区分。
阅读全文