python数据处理实例-python数据分析实例(1)
1.获取数据:
想要获得道指30只成分股的最新股价
importrequestsimportreimportpandas as pddefretrieve_dji_list():try:
r= requests.get('https://money.cnn.com/data/dow30/')exceptConnectionError as err:print(err)
search_pattern= re.compile('class="wsod_symbol">(.*?).*?(.*?).*? .*?class="wsod_stream">(.*?)')
dji_list_in_text=re.findall(search_pattern, r.text)
dji_list=[]for item indji_list_in_text:
dji_list.append([item[0], item[1], float(item[2])])returndji_list
dji_list=retrieve_dji_list()
djidf=pd.DataFrame(dji_list)print(djidf)
整理数据, 改变列名, index等
cols=['code','name','lasttrade']
djidf.columns=cols #改变列名
djidf.index=range(1,len(djidf)+1)
最后结果为:
数据的选择
djidf.code #获取code列+index
djidf['code'] #获取code列 , 两者同功能
djidf.loc[1:5,] #前5行
djidf.loc[:,['code','lasttrade']] #所有行
djidf.loc[1:5,['code','lasttrade']] #1-5行, loc表示标签index
djidf.loc[1,['code','lasttrade']] #1行
djidf.at[1,'lasttrade'] #只有一个值的时候可以用at
djidf.iloc[2:4,[0,2]] #表示物理文职, 并且4取不到, 就只有第三行第四行
djidf.iat[1,2] #单个值
简单的数据筛选: 平均股价, 股价大于180的公司名
djidf.lasttrade.mean() # 121.132
djidf[djidf.lasttrade>=180].name
找到股价前三名的公司 , 降序排列
tempdf=djidf.sort_values(by='lasttrade',ascending=False)
tempdf[:3].name
如何根据index排序呢? 专门有函数sort_index()
df=pd.DataFrame(np.random.randn(3,3),index=['c','b','a'],columns=list('xyz'))
df.sort_index()#根据index 进行排序
*获取AXP公司过去一年的股价数据获取
importrequestsimportreimportjsonimportpandas as pdfrom datetime importdatedefretrieve_quotes_historical(stock_code):
quotes=[]
url= 'https://finance.yahoo.com/quote/%s/history?p=%s' %(stock_code, stock_code)try:
r=requests.get(url)exceptConnectionError as err:print(err)
m= re.findall('"HistoricalPriceStore":{"prices":(.*?),"isPending"', r.text)ifm:
quotes= json.loads(m[0]) #m = ['[{...},{...},...]']
quotes = quotes[::-1] #原先数据为date最新的在最前面
return [item for item in quotes if not 'type' initem]
quotes= retrieve_quotes_historical('AXP')
list1=[]for i inrange(len(quotes)):
x=date.fromtimestamp(quotes[i]['date'])
y=date.strftime(x,'%Y-%m-%d')
list1.append(y)
quotesdf_ori=pd.DataFrame(quotes,index=list1)
quotesdf_m= quotesdf_ori.drop(['adjclose'], axis = 1) #删除adjclose列
quotesdf=quotesdf_m.drop(['date'],axis=1)print(quotesdf)
上述需要对时间进行处理, 将时间转为'%Y-%m-%d'的格式, 并且将这个时间作为一个list 成为quotesdf的index.
数据的筛选
quotesdf[(quotesdf.index>='2017-03-01') & (quotesdf.index<='2017-03-31')]
quotesdf[(quotesdf.index>='2017-11-30') & (quotesdf.index<='2018-03-31')&(quotesdf.close>=90)]
简单计算
(1) 统计AXP股价涨跌的天数 (close>open)
len(quotesdf.close>quotesdf.open)
(2) 相邻两天的涨跌
importnumpy as np
status=np.sign(np.diff(quotesdf.close))
status#250 的长度, 比quotesdf 少1
status[np.where(status==1)].size #np.where(status==1)是由下标构成的array#
上述统计还可以直接用describe函数, 得到基本统计信息
importpandas as pdimportnumpy as np
index_df= pd.DataFrame(np.random.rand(3,3), index=['a','b','c'], columns=['index_1','index_2','index_3'])
index_df.describe()#超级强大
(3) 统计2018一月的交易日天数
t=quotesdf[(quotesdf.index>='2018-01-01') & (quotesdf.index<'2018-02-01')]
len(t) #21
进一步, 如何统计近一年每个月的交易日天数?
统计每个月的出现天数就行了, 如何提取月份信息? 要把时间的字符串转化为 时间格式,
importtime
list2=[]for i inrange(len(quotesdf)):
temp=time.strptime(quotesdf.index[i],'%Y-%m-%d')
list2.append(temp.tm_mon)#取月份
tempdf=quotesdf.copy()
tempdf['month']=list2 #新增一列月份的数据
print(tempdf['month'].value_counts()) #计算每个月的出现次数
注意:
strptime 将字符串格式化为time结构, time 中会包含年份, 月份等信息
strftime 将time 结构格式化一个字符串, 之前生成quotesdf中用到过
上述方法略微麻烦, 如何快速知道每个月的交易日天数? groupby
#统计每一月的股票开盘天数
x=tempdf.groupby('month').count()#统计近一年每个月的成交量
tempdf.groupby('month').sum().volume#先每个月进行求和, 但是这些对其他列也进行了求和, 属于无效计算, 如何避免?
tempdf.groupby('month').volume.sum() #交换顺序即可
引申: 一般groupby 与apply 在一起用. 具体不展开了
deff(df):returndf.age.count()
data_df.groupby('taste of mooncake').apply(f)
(二) 合并DataFrame: append, concat, join
#append
p=quotesdf[:2]
q=quotesdf['2018-01-01':'2018-01-05']
p.append(q)#concat
pieces=[tempdf[:5],tempdf[len(tempdf)-5:]]
pd.concat(pieces)
两个结构不同的DataFrame 如何合并?
piece1=quotesdf[0:3]
piece2=tempdf[:3]
pd.concat([piece1,piece2],ignore_index=True)
piece2有month 但是piece1中没有这个字段
join函数中的各种参数, 可以用来实现SQL的各种合并功能.
#join 两个dataframe要有共同的字段(列名)#djidf: code/name#AKdf: volume/code/month#合并之后的字段: code/name/volume/month
pd.merge(djidf.drop(['lasttrade'],axis=1),AKdf, on='code')
python数据处理实例-python数据分析实例(1)相关推荐
- python数据处理实例-Python数据处理numpy.median的实例讲解
numpy模块下的median作用为: 计算沿指定轴的中位数 返回数组元素的中位数 其函数接口为: median(a, axis=None, out=None, overwrite_input=Fal ...
- python大数据分析实例-用Python整合的大数据分析实例
用Python进行数据分析的好处是,它的数据分析库目前已经很全面了,有NumPy.pandas.SciPy.scikit-learn.StatsModels,还有深度学习.神经网络的各类包.基本上能满 ...
- python预测药_Python数据分析实例-药品销售分析
学习了Python的各种基础语法和常用包后,你是否对如何使用Python在实际工作中进行数据分析一头雾水?如果是,今天这篇文章一定能带给你一些用数据分析解决实际问题的思路. 数据分析的目的决定了你的分 ...
- python药学应用_Python数据分析实例一:医院药品销售数据
前面已经分享过python的基础语法,以及数据分析领域最常用的两个包:Numpy和Pandas(戳下面的链接),下面将用一个实际案例:<朝阳医院2018年销售数据.xlsx>和大家分享一下 ...
- python人口统计_python数据分析实例-人口统计折线图
一.前言 最近一直在学python数据科学的相关课程,主要看了<数据科学入门>这本动物书,但这本书是真的只入个门,把数据科学相关的各方面知识介绍了一下,真的只是介绍了一下,想要系统地学习还 ...
- Python对股票模型数据分析实例
一.交易准则 在开始之前,我们应该了解最基础的交易系统是什么样,明白自己的交易准则是什么,确定一个自己的交易依据.比如以下六个方面: 1)市场----买卖什么 2)头寸规模----买卖多少 3)入市- ...
- python和stata哪个数据分析实例,STATA数据分析案例:Zoutendijk可行方向法
适用于线性约束和非线性不等式约束的非线性规划的两种算法. 1. 线性约束的情形: minf(X) 满足 其中A和E分别是m×n和l×n阶矩阵,b和e分别是m和l维列向量.Zoutendijk可行方向法 ...
- python列表姓氏_python数据分析实例(六) 中国姓氏数据
bokeh联动柱状图,Excel空间柱状图.空间热力图,Echarts空间柱状图,常用函数: df['工作地_省'] = df['工作地'].str.split('省').str[0] df['工作地 ...
- python数据分析实例_python数据分析实例3-商铺数据加载及存储
商铺数据加载及存储 在data文件夹存放有商铺数据.csv文件,路径:path = '../data/商铺数据.csv' 要求: 1.成功读取"商铺数据.csv"文件,并展示打印出 ...
- Python数据处理040:数据分析之Excel文件
本文将会讲解Pandas对excel文件的处理; 讲解内容如下: Python数据分析之Excel文件 1.Pandas安装 2.文件的读取及其写入 3.数据的操作 4.数据的筛选 5.数据的删除 思 ...
最新文章
- 黯然微信小程序杂记(三):微信小程序实现倒计时功能 附讲解教学 附源码
- (转)一个古老的编程游戏:Python Challenge全通攻略
- WordCount单词计数
- Cool!15个创意的 CSS3 文本效果【下篇】
- npm install 报错 npm WARN tar ENOENT: no such file or directory, open... 解决方式
- SAP UI5 应用开发教程之五十五 - 如何将本地 SAP UI5 应用通过 Node.js Express 部署到公网上
- AT2368-[AGC013B]Hamiltonish Path【构造】
- 对广义表L=((a,b),c,d)进行操作tail(head(L))的结果是
- Django项目调用外部程序soffice报错subprocess.CalledProcessError: Command 'soffice --headless --convert-to pdf
- VMware ESXi 为虚拟机分配usb设备(硬盘)
- xcode 9.0 iOS 11
- 初中数学最全几何模型_初中数学几何模型大全+经典题型(含答案)
- mui+hbuilder 将图片压缩并转变为base64 与改变图片尺寸大小来减小图片文件大小
- 和华明诚:店铺推广要注意哪些事项
- Windows11/10
- 腾讯云运维tca题库
- 中国石油大学《催化原理》第三阶段在线作业
- camera调试名词及问题策略
- 高手勿进!写给初中级程序员以及还在大学修炼的“准程序员”的成长秘籍
- 飞速创新更新IPO招股书:计划募资约14亿元,向伟为实际控制人