大数据分析与可视化 之 实验10 Pandas实现数据分析

发布时间 2023-12-30 20:15:17作者: Ivan丶c

实验10 Pandas实现数据分析

实验学时:2学时
实验类型:验证
实验要求:必修

一、实验目的

  1. 掌握Pandas的字符串函数。
  2. 掌握Pandas 统计汇总函数。
  3. 掌握Pandas排序、分组、合并与级联函数。
  4. 能利用上述函数进行综合数据分析。

二、实验要求

通过编程实现使用Pandas字符串函数进行文本处理,使用统计、汇总、排序、分组函数进行综合数据分析。

三、实验内容

任务1. 根据实验7任务3中对2018年厦门天气数据文件Xiamen_2018.csv进行数据清洗后得到的数据,作如下数据分析:
(1)分析2018年厦门市白天和晚上都是晴天的天数、白天和晚上都是雨天的天数。
(2)分析2018年厦门市全年最高温和最低温均不超过10的天数。
(3)分析2018年厦门市全年最高温超过30的天数。
(4)分析2018年厦门市全年空气质量为优的天数。
用Python编写程序实现。

任务2. 利用tushare模块导出2022年股票代码为“000001”的股票数据,按周汇总计算每周开盘价(monday_open)均值、收盘价(friday_close)均值、最高价(week_high)的日期、最低价(week_low)日期。用Python编写程序实现。

test10.py

import tushare as ts
import pandas as pd


def task1():
    data = pd.read_csv('cleaned_xiamen_2018.csv', parse_dates=['日期'],
                       date_parser=lambda x: pd.to_datetime(x, format='%Y年%m月%d日'))

    # (1) 分析白天和晚上都是晴天的天数、白天和晚上都是雨天的天数
    sunny_days = data[(data['日间天气'] == '晴') & (data['夜间天气'] == '晴')]
    rainy_days = data[(data['日间天气'].str.contains('雨')) & (data['夜间天气'].str.contains('雨'))]
    print('(1) 白天和晚上都是晴天的天数:', len(sunny_days))
    print('(1) 白天和晚上都是雨天的天数:', len(rainy_days))

    # (2) 分析全年最高温和最低温均不超过10的天数
    low_temperature_days = data[(data['当日最高温度'] <= 10) & (data['当日最低温度'] <= 10)]
    print('(2) 最高温和最低温均不超过10的天数:', len(low_temperature_days))

    # (3) 分析全年最高温超过30的天数
    high_temperature_days = data[data['当日最高温度'] > 30]
    print('(3) 最高温超过30的天数:', len(high_temperature_days))

    # (4) 分析全年空气质量为优的天数
    good_air_days = data[data['质量等级'] == '优']
    print('(4) 空气质量为优的天数:', len(good_air_days))


def task2():
    # tushare账户token
    ts.set_token('添加自己的token')
    # 初始化tushare pro接口
    pro = ts.pro_api()
    # 获取000001股票代码的2022年日线数据
    stock_data = pro.daily(ts_code='000001.SZ', start_date='20220101', end_date='20221231')
    # 转换日期列为日期类型
    stock_data['trade_date'] = pd.to_datetime(stock_data['trade_date'])
    # 将日期列设置为索引
    stock_data.set_index('trade_date', inplace=True)
    # 按周汇总计算
    weekly_summary = stock_data.resample('W-Mon').agg({
        'open': 'mean',  # 周一开盘价均值
        'close': 'mean',  # 周五收盘价均值
        'high': 'max',  # 最高价日期
        'low': 'min'  # 最低价日期
    })
    # 重命名列
    weekly_summary.columns = ['monday_open', 'friday_close', 'week_high_date', 'week_low_date']
    # 打印结果
    print(weekly_summary)


if __name__ == '__main__':
    task1()
    task2()