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)相关推荐

  1. python数据处理实例-Python数据处理numpy.median的实例讲解

    numpy模块下的median作用为: 计算沿指定轴的中位数 返回数组元素的中位数 其函数接口为: median(a, axis=None, out=None, overwrite_input=Fal ...

  2. python大数据分析实例-用Python整合的大数据分析实例

    用Python进行数据分析的好处是,它的数据分析库目前已经很全面了,有NumPy.pandas.SciPy.scikit-learn.StatsModels,还有深度学习.神经网络的各类包.基本上能满 ...

  3. python预测药_Python数据分析实例-药品销售分析

    学习了Python的各种基础语法和常用包后,你是否对如何使用Python在实际工作中进行数据分析一头雾水?如果是,今天这篇文章一定能带给你一些用数据分析解决实际问题的思路. 数据分析的目的决定了你的分 ...

  4. python药学应用_Python数据分析实例一:医院药品销售数据

    前面已经分享过python的基础语法,以及数据分析领域最常用的两个包:Numpy和Pandas(戳下面的链接),下面将用一个实际案例:<朝阳医院2018年销售数据.xlsx>和大家分享一下 ...

  5. python人口统计_python数据分析实例-人口统计折线图

    一.前言 最近一直在学python数据科学的相关课程,主要看了<数据科学入门>这本动物书,但这本书是真的只入个门,把数据科学相关的各方面知识介绍了一下,真的只是介绍了一下,想要系统地学习还 ...

  6. Python对股票模型数据分析实例

    一.交易准则 在开始之前,我们应该了解最基础的交易系统是什么样,明白自己的交易准则是什么,确定一个自己的交易依据.比如以下六个方面: 1)市场----买卖什么 2)头寸规模----买卖多少 3)入市- ...

  7. python和stata哪个数据分析实例,STATA数据分析案例:Zoutendijk可行方向法

    适用于线性约束和非线性不等式约束的非线性规划的两种算法. 1. 线性约束的情形: minf(X) 满足 其中A和E分别是m×n和l×n阶矩阵,b和e分别是m和l维列向量.Zoutendijk可行方向法 ...

  8. python列表姓氏_python数据分析实例(六) 中国姓氏数据

    bokeh联动柱状图,Excel空间柱状图.空间热力图,Echarts空间柱状图,常用函数: df['工作地_省'] = df['工作地'].str.split('省').str[0] df['工作地 ...

  9. python数据分析实例_python数据分析实例3-商铺数据加载及存储

    商铺数据加载及存储 在data文件夹存放有商铺数据.csv文件,路径:path = '../data/商铺数据.csv' 要求: 1.成功读取"商铺数据.csv"文件,并展示打印出 ...

  10. Python数据处理040:数据分析之Excel文件

    本文将会讲解Pandas对excel文件的处理; 讲解内容如下: Python数据分析之Excel文件 1.Pandas安装 2.文件的读取及其写入 3.数据的操作 4.数据的筛选 5.数据的删除 思 ...

最新文章

  1. 黯然微信小程序杂记(三):微信小程序实现倒计时功能 附讲解教学 附源码
  2. (转)一个古老的编程游戏:Python Challenge全通攻略
  3. WordCount单词计数
  4. Cool!15个创意的 CSS3 文本效果【下篇】
  5. npm install 报错 npm WARN tar ENOENT: no such file or directory, open... 解决方式
  6. SAP UI5 应用开发教程之五十五 - 如何将本地 SAP UI5 应用通过 Node.js Express 部署到公网上
  7. AT2368-[AGC013B]Hamiltonish Path【构造】
  8. 对广义表L=((a,b),c,d)进行操作tail(head(L))的结果是
  9. Django项目调用外部程序soffice报错subprocess.CalledProcessError: Command 'soffice --headless --convert-to pdf
  10. VMware ESXi 为虚拟机分配usb设备(硬盘)
  11. xcode 9.0 iOS 11
  12. 初中数学最全几何模型_初中数学几何模型大全+经典题型(含答案)
  13. mui+hbuilder 将图片压缩并转变为base64 与改变图片尺寸大小来减小图片文件大小
  14. 和华明诚:店铺推广要注意哪些事项
  15. Windows11/10
  16. 腾讯云运维tca题库
  17. 中国石油大学《催化原理》第三阶段在线作业
  18. camera调试名词及问题策略
  19. 高手勿进!写给初中级程序员以及还在大学修炼的“准程序员”的成长秘籍
  20. 飞速创新更新IPO招股书:计划募资约14亿元,向伟为实际控制人

热门文章

  1. 动态域名作为dga的做法
  2. metasploit 一款开源的渗透测试框架
  3. python 2 3 读写中文文件 使用codecs最方便
  4. 使用isolation forest进行dns网络流量异常检测
  5. python 的进程池不可嵌套
  6. 第三次Python作业———林东
  7. 项目小白斩获蘑菇街暑期实习offer的面试过程
  8. PHP中的traits
  9. 定时备份FTP+Mysql到云服务器
  10. Datagridview 去掉单元格焦点虚框 和设置单元格不能被选中