🐳 我正在和鲸社区参加“商业数据分析训练营活动” https://www.heywhale.com/home/competition/6487de6649463ee38dbaf58b ,以下是我的学习笔记:
学习主题:Python商业数据存取
日期:2023.9.6
关键概念/知识点:
- 读取数据时随机预览信息
- 读取指定列数据
- tushare库
- DataReader包
- 为数据增加列
- 数据可视化
- 数据分组和聚合
掌握的新函数/方法:
- data_csv.sample()
- data_csv[[‘列名’, ‘列名’]]
代码举例
读取数据时随机预览信息:
data_csv.sample(10) # 随机获取10条信息
读取指定列数据:
data_csv[['open', 'close']] # 获取open和close列
Tushare是一个免费、开源的python财经数据接口包,它拥有丰富的数据内容,比如股票、基金、期货、数据货币等行情数据。Tushare返回的绝大部分的数据格式都是pandas中DataFrame类型。
- 安装tushare库
# !pip install tushare -i https://pypi.douban.com/simple/ #从指定镜像下载安装工具包,镜像URL可自行修改
- 导入tushare库
import tushare as ts
- 获取股票数据
# ts.get_hist_data( )函数来获取历史股票数据。现我们需要获取吉电股份的历史数据,查询吉电股份的代码为000875
data = ts.get_hist_data('000875')
data.tail(3)
DataReader包
- 安装datareader库
# !pip install pandas_datareader -i https://mirrors.cloud.tencent.com/pypi/simple/ # 从指定镜像下载安装工具包,镜像URL可自行修改
- 导入datareader库
import pandas_datareader.data as web
import datetime
- 获取股票数据
# stock = web.DataReader(股票代码,股票网站,开始时间,结束时间)
web.DataReader('005380', 'naver', start='2023-01-01', end='2023-01-04')
为数据增加列:
计算DataFrame数据中增加涨/跌序列,其中涨/跌=(当日Close-上一日Close)/上一日Close,主要步骤如下:
1、添加一列“change”,该列存储当日股票价格与前一日收盘价格的涨跌数值,即当日Close价格-上一日Close价格;
2、填充缺失值,缺失值用涨跌数值的均值代替;
3、计算涨跌幅度。pct_change()方法是从第二项开始向前做减法后再除以第一项。
# DF数据中涨/跌序列,涨/跌=(当日Close-上一日Close)/上一日Close
# 添加一列change,该列存储当日股票价格与前一日收盘价格的涨跌数值,即当日Close价格-上一日Close价格
change = stock.Close.diff()
stock['Change'] = change
stock.head()
# 缺失的数值用涨跌值的均值代替
stock['Change'].fillna(change.mean(),inplace=True)
stock.head()
# 计算涨跌幅度:pct_change()。从第二项开始向前做减法后再除以第一项,计算即可得到涨跌幅序列
# 下面两代码思想和运行的结果一致
# stock['pct_change'] = (stock['Change'] / stock['Close'].shift(1))
stock['pct_change'] = stock.Close.pct_change()
stock.head()
数据可视化:
# 导入绘图包
import matplotlib.pyplot as plt
# 设置图片标题
plt.title(
"{} 至{}的DJI的Close数据图".format(
start.strftime('%Y-%m-%d'),
end.strftime('%Y-%m-%d')))
# 对收盘价close列进行绘制,设置大小并有图例
stock['Close'].plot(legend=True, figsize=(10, 4))
plt.show()
数据分组:
grouped = stock_data.groupby('ts_code')
聚合分析:
常见的聚合函数:
# 按列“ts_code”分组,使用mean()函数计算分组中收盘价列“close”的平均值
grouped['close'].mean()
# 按列“ts_code”列分组,用max()和min()函数计算分组中收盘价列“close”的最大值、最小值
print(grouped['close'].max())
print(grouped['close'].min())
# 对多个列开盘价和收盘价应用agg聚合函数统计不同股票的均值、最大值和最小值
aggregated = grouped['open', 'close'].agg(['mean', 'max', 'min'])
# 对收盘价统计均值、对成交量统计和,对涨跌幅统计范围
# 定义聚合函数,计算最大值和最小值之间的差值
def spread(series):
return series.max() - series.min()
aggregator = {'close': 'mean', 'vol': 'sum', 'pct_chg': spread}
aggregated = grouped.agg(aggregator)
# 筛选分组中指定列vol列最大值的行数据
# 定义top函数,选取每列最大值
def top(df, column='vol'):
return df.sort_values(by=column, ascending=True)[-1:]
# 进行分组。
# as_index=False代表不将分组键作为索引;group_keys=False可以重新索引,而不采取分组键所形成的索引
stock_data_max = stock_data.groupby(
'ts_code',
as_index=False,
group_keys=False).apply(top)
关键总结:
通过简单实例学习了数据分析的全流程,即数据读取、数据预览、数据清洗、数据保存,另外在学习过程中,也看到了数据可视化能够清晰的反映数据的变化情况,以及根据实际需要对数据进行分组、聚合分析等。
… …
问题/困惑:
对于分组与聚合操作在实际的应用中不熟练,需要多加练习。
下一步计划:
通过练习掌握数据的分组与聚合操作
参考资料/相关资源链接:
Pandas文档:https://pandas.pydata.org/docs/