python数据分析-Matplotlib绘图实例以及金融数据分析应用

news2024/11/17 13:50:44

通过学习扩展库matplotlib及背后的理论知识进行数据分析和可视化,重点以案例分析为主,通过实际案例演示相关理论和Python语言的应用。

读取文件countries-aggregated.csv数据,其中'Date':日期, 'Country':国家, 'Confirmed'、 'Recovered'、 'Deaths':当日累计确诊、康复、死亡人数,完成以下任务

  1. 查询中国、美国(US)的累计确诊人数,并画出折线图。
  2. 新增一列每日新增数量,并画出箱线图
  3. 查询2020/5/4日确诊病例在1万以上的国家中死亡率(死亡人数/确诊人数)排名前十的国家,并画出柱状图。
  4. 画出2020/5/4日中国、美国(US)、英国(United Kingdom)当日累计确诊人数、康复人数、死亡人数的饼图,设置为子图形式。
import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
df = pd.read_csv('countries-aggregated.csv')

# (1)查询中国、美国(US)的累计确诊人数,并画出折线图 

china_us_confirmed = df[df['Country'].isin(['China', 'US'])][['Date', 'Country', 'Confirmed']]
china_us_confirmed_pivot = china_us_confirmed.pivot(index='Date', columns='Country', values='Confirmed')

plt.figure(figsize=(10, 6))
china_us_confirmed_pivot.plot()
plt.title('Cumulative Confirmed Cases in China and US')
plt.xlabel('Date')
plt.ylabel('Confirmed Cases')
plt.legend(title='Country')
plt.grid(True)
plt.show()

(2)新增一列每日新增数量,并画出箱线图

plt.figure(figsize=(10, 6))
df.boxplot(column='Daily New Cases', by='Country', grid=False, rot=90)
plt.title('Box Plot of Daily New Cases by Country')
plt.suptitle('')
plt.xlabel('Country')
plt.ylabel('Daily New Cases')
plt.show()

(3)查询2020/5/4日确诊病例在1万以上的国家中死亡率(死亡人数/确诊人数)排名前十的国家

data_2020_05_04 = df[df['Date'] == '2020-05-04']
data_2020_05_04 = data_2020_05_04[data_2020_05_04['Confirmed'] > 10000]
data_2020_05_04['Death Rate'] = data_2020_05_04['Deaths'] / data_2020_05_04['Confirmed']
top_10_death_rate = data_2020_05_04.nlargest(10, 'Death Rate')[['Country', 'Death Rate']]

plt.figure(figsize=(10, 6))
plt.bar(top_10_death_rate['Country'], top_10_death_rate['Death Rate'])
plt.title('Top 10 Countries by Death Rate on 2020-05-04')
plt.xlabel('Country')
plt.ylabel('Death Rate')
plt.xticks(rotation=45)
plt.show()

(4)画出2020/5/4日中国、美国(US)、英国(United Kingdom)当日累计确诊人数、康复人数、死亡人数的饼图

data_2020_05_04_selected = data_2020_05_04[data_2020_05_04['Country'].isin(['China', 'US', 'United Kingdom'])]

fig, axes = plt.subplots(1, 3, figsize=(18, 6))

for ax, country in zip(axes, data_2020_05_04_selected['Country']):
    country_data = data_2020_05_04_selected[data_2020_05_04_selected['Country'] == country]
    sizes = [country_data['Confirmed'].values[0], country_data['Recovered'].values[0], country_data['Deaths'].values[0]]
    labels = ['Confirmed', 'Recovered', 'Deaths']
    ax.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140)
    ax.set_title(f'{country} Cases on 2020-05-04')

plt.show()

继续使用函数绘制

(1)找出100年中的元旦节

# 生成100年的时间序列
dates = pd.Series(pd.date_range('1924-01-01', '2024-12-31'))

# (1)找出100年中的元旦节
new_years_days = dates[(dates.dt.month == 1) & (dates.dt.day == 1)]
new_years_days

(2)计算出元旦节分别为星期一到星期日的天数

new_years_days_weekday_counts = new_years_days.dt.day_name().value_counts().sort_index()

# 打印元旦节分别为星期一到星期日的天数
print("元旦节分别为星期一到星期日的天数:")
print(new_years_days_weekday_counts)

(3)绘制元旦节分别为星期一到星期日的天数数量的柱状图

plt.title('Count of New Year\'s Days from Monday to Sunday (1924-2024)')
plt.xlabel('Day of the Week')
plt.ylabel('Count')
plt.xticks(rotation=45)
plt.grid(True)
plt.show()

本次实验涉及多个数据分析任务,从数据读取、基本信息查询到复杂的条件筛选和可视化展示,我们全面实践了数据分析的各个环节。在处理疫情数据时,我们学会了如何提取关键数据并使用适当的可视化工具呈现分析结果,使得复杂的数据变得直观易懂。在时间序列分析中,我们掌握了如何生成和分析长时间跨度的数据,并从中提取有意义的信息。整体而言,本次实验不仅提高了我们的数据处理和分析能力,还增强了我们在实际问题中应用这些技能的信心,为将来应对更复杂的数据分析任务打下了坚实的基础。 

Matplotlib绘图融合金融数据分析应用,本文选择sh.600171数据
(1)筛选出收盘价高于开盘价的交易日期。
(2)绘制日K线图。
(3)比较该股票收益率(对数收益率和简单收益率均可,二选一)和沪深300指数收益率,并绘制对应图形。

data_list = []
while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)

#### 结果集输出到csv文件 ####   
result.to_csv("history_A_stock_k_data.csv", index=False)
print(result)

#### 登出系统 ####
bs.logout()
df_filtered = df[df['close'] > df['open']]
print(df_filtered)

筛选收盘价高于开盘价的交易日期

df_filtered = df[df['close'] > df['open']]
print(df_filtered)

绘制日K线图

from matplotlib.ticker import MaxNLocator
df['date_num'] = df['date'].map(mdates.date2num)
ohlc = df[['date_num', 'open', 'high', 'low', 'close']]

fig, ax = plt.subplots(figsize=(10, 6))

for idx, row in ohlc.iterrows():
    color = 'green' if row['close'] >= row['open'] else 'red'
    ax.plot([row['date_num'], row['date_num']], [row['low'], row['high']], color='black')
    ax.add_patch(plt.Rectangle((row['date_num'] - 0.2, row['open']), 0.4, row['close'] - row['open'], 
                               edgecolor=color, facecolor=color, linewidth=1.0))

ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
ax.xaxis.set_major_locator(MaxNLocator(10))
plt.xticks(rotation=45)
plt.title('日K线图')
plt.xlabel('日期')
plt.ylabel('价格')
plt.grid(True)
plt.show()

继续使用函数绘制

 

# 绘图
plt.figure(figsize=(10, 6))
plt.plot(df['Year'], df['China'], marker='o', linestyle='-', color='b', label='中国')
plt.plot(df['Year'], df['USA'], marker='o', linestyle='-', color='r', label='美国')

plt.title('2000-2022年通货膨胀率(按消费者价格指数衡量)')
plt.xlabel('年份')
plt.ylabel('通货膨胀率')
plt.xticks(range(2000, 2023, 2))
plt.grid(True)
plt.legend()
plt.tight_layout()

plt.show()

 

在本次实验中,我们选择了一家上市公司,获取了其2024年1月1日至今的日线股票价格数据,并完成了多个分析任务。通过这些任务,我们熟练掌握了金融数据的处理与可视化技巧。

首先,我们筛选出收盘价高于开盘价的交易日期。这一过程帮助我们识别出股票价格在一天内上涨的交易日,并理解了如何从大规模的时间序列数据中提取特定条件下的子集。这一步骤也展示了数据过滤和条件筛选的重要性,特别是在金融数据分析中。

最后,我们绘制了该股票的日K线图。通过K线图,我们能够直观地展示股票价格的开盘价、收盘价、最高价和最低价,并观察到股票价格的波动趋势。K线图作为一种常用的金融数据可视化工具,不仅提供了全面的价格信息,还帮助我们进行技术分析,识别市场趋势和价格模式。

通过本次实验,我们深入实践了金融数据和经济数据的处理与分析,掌握了多种数据处理和可视化技巧。在股票数据分析中,我们学习了如何筛选特定条件下的交易日、绘制日K线图以及计算和比较收益率。这些技能在实际金融分析中具有重要应用价值。在通货膨胀率数据分析中,我们通过数据整理和折线图绘制,直观展示和比较了中国和美国的通胀趋势。这一过程不仅增强了我们对经济数据分析的理解,也提升了我们的数据可视化能力。总体而言,本次实验提高了我们在数据处理、分析和可视化方面的综合能力,为将来从事更复杂的数据分析工作奠定了坚实的基础。

 数据和完整代码

创作不易,希望大家多点赞关注评论!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1809109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

格式化后硬盘数据能恢复吗?硬盘数据恢复这样做!

硬盘是电脑中必备的数据存储设备,另外还有移动硬盘。移动硬盘存储空间非常大、性价比高、便于携带,给我们带来和很多便利。但是和其他存储设备一样,各种硬盘也会出现各种问题,比如常见的格式化硬盘导致数据丢失的问题。 怎么样恢复…

【Linux系统化学习】网络层——IP协议

目录 IP协议 协议头格式 两个问题 网段划分 IP地址的分类 CIDR网段划分(无分类编址) 特殊的IP地址 IP地址的数量限制 私有IP地址和公网IP地址 路由 路由表的查询 IP协议 应用层、运输层上两层协议我们只考虑的是通信的双方对应层,…

MQ解决的问题

系统中MQ能解决哪些问题? 1.不同语言的程序使用MQ通信 2.分布式,微服务,之间的通信,实现服务质检解耦 3.高并发实现销峰作用 4.实现异步,提高用户体验。

Java的自动装箱和自动拆箱

自动装箱和拆箱在Java开发中的应用与注意事项 在Java开发中,自动装箱(Autoboxing)和自动拆箱(Unboxing)是指基本数据类型与其对应的包装类之间的自动转换。这些特性可以使代码更加简洁和易读,但在实际项目…

类和对象的学习总结(一)

面向对象和面向过程编程初步认识 C语言是面向过程的,关注过程(分析求解问题的步骤) 例如:外卖,关注点菜,接单,送单等 C是面向对象的,关注对象,把一件事拆分成不同的对象&…

机器学习笔记——支持向量机

支持向量机 参数模型对分布需要假设(这也是与非参数模型的区别之一)间隔最大化,形式转化为凸二次规划问题 最大化间隔 间隔最大化是意思:对训练集有着充分大的确信度来分类训练数据,最难以分的点也有足够大的信度将…

-31-()

在终端运行时消除输入空格对程序的影响可以使用{在scanf后加“getchar()”或者在scanf(“空格%d”,&a)} 按位与和移位操作符只能用于整数且都要转位二进制后进行相应操作 不创建临时变量,实现两个数的交换:1——使用加减法&…

插卡式仪器模块:数据记录模块(插卡式)

• 32 位分辨率 • 250 KSPS 采样率 • 可以同时并且连续地记录两个通道的电压输入 • 实时上传原始数据至 PC 端 通道22输入阻抗电压22 kΩ10 MΩ电流0.2 Ω输入范围电压 250 mV 4.5 V电流1.5 A耦合DCDC带宽450 Hz385 HzADC 分辨率32 Bits24 Bits采样率10 kSPS250 kSPS测量…

【最新鸿蒙应用开发】——类Web开发范式1——生命周期

兼容JS的类Web开发范式 类Web命令式开发的生命周期 1. 应用生命周期 1.1. app.js 每个应用可以在app.js自定义应用级生命周期的实现逻辑,包括: onCreate:在应用生成时被调用的生命周期函数。 onDestroy:在应用销毁时被调用的生…

高德地图简单实现点标,和区域绘制

高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart 百度搜索高德地图开发平台 注册高德地图开发账号 在应用管理中 我的应用中 添加一个Key 点击提交 进入高德地图开发文档:https://lbs.amap.com/api/javascript-api/guide/abc/quickstart …

详解FedProx:FedAvg的改进版 Federated optimization in heterogeneous networks

FedProx:2020 FedAvg的改进 论文:《Federated Optimization in Heterogeneous Networks》 引用量:4445 源码地址: 官方实现(tensorflow)https://github.com/litian96/FedProx 几个pytorch实现:…

【激光雷达】

激光雷达 机械式360扫描雷达半固态激光雷达二维扫描一维扫描 固态激光雷达OPA固态激光雷达( 光学相控阵技术)Flash激光雷达 FMCW 激光雷达 激光雷达技术在近几年可以说是蓬勃发展,新能源汽车的大量使用,给雷达技术的发展提供了肥沃…

C++系统编程篇——linux编译器 gcc/g++(链接动静态库)

linux编译器-gcc/g (1)g安装(gcc一般自带,g需要下载) sudo yum install -y gcc-c g --version gcc用于编译C语言代码,g用于编译C代码 (2)程序翻译过程 选项“-o”是指目标文件…

Python的else子句7个妙用,原来还能这样用,整挺好!

## 1、条件语句else基础 🔄 1.1 简单else的常规操作 在Python中,else子句通常跟在if或一系列if-elif之后,提供一个“否则”的情况处理路径。如果前面的所有条件都不满足 ,程序就会执行这里的代码块。例如 ,检查一个数…

目标检测(R-CNN)系列(Pytorch 26)

一 R-CNN 除了之前描述的单发多框检测之外,区域卷积神经网络(region‐based CNN或regions with CNN features, R‐CNN)(Girshick et al., 2014)也是将深度模型应用于目标检测的开创性工作之一。下面介绍R‐CNN及其一 系列改进方法…

【JavaEE】Spring Boot MyBatis详解(一)

一.MyBatis的基本概念与相关配置. 1.基本概念 MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由apache迁移到了google code,并且改名为MyBatis. 2013年11月迁移到Github.持久层…

吴恩达2022机器学习专项课程C2W3:2.25 理解方差和偏差(诊断方差偏差正则化偏差方案)

目录 引言名词替代影响模型偏差和方差的因素1.多项式阶数2.正则化参数 判断是否有高偏差或高方差1.方法一:建立性能基准水平2.方法二:建立学习曲线 总结 引言 机器学习系统开发的典型流程是从一个想法开始,然后训练模型。初次训练的结果通常…

SpringSecurity入门(四)

18、权限管理/授权 18.1、针对url配置 配置SecurityConfig package com.wanqi.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.bu…

基于STM32的595级联的Proteus仿真

文章目录 一、595级联1.题目要求2.思路3.仿真图3.1 未仿真时3.2 模式A3.2 模式B3.3 故障模式 二、总结 一、595级联 1.题目要求 STM32单片机,以及三个LED灯对应红黄绿灯,IIC的OLED显示屏,温湿度传感器DHT11,两个独立按键和两个5…

复数乘法IP核的使用

一、IP核解析 在这张图片中,我们看到的是一个“Complex Multiplier (6.0)” IP 核的配置界面。以下是各个配置参数的详细说明: 1.1 Multiplier Construction Use LUTs: 选择这个选项时,乘法器将使用查找表(LUTs)来实现…