题目:读入棒球比赛数据game_logs.csv为gl对象,分析比赛日的分布情况和比赛时长的分布情况。其中,重点在于体验利用category类型大幅压缩内存占用空间 ① gl.info(memory_usage='deep')可以显示对象gl占用的内存大小; ② 用describe()函数查看各列数据的情况。 ③ 对freq=全部数量/唯一值数量 > 200 的object列,使用category类型;否则不使用category类型 ④ 比较转换列部分,转换前后的内存占用情况,如图所示: ⑤ 在read_csv函数中指定dtype=column_types参数,并查看读入对象的内存占用情况 ⑥ 用pivot_table分析比赛日的分布情况(一周七天的比例)的逐年变化 ⑦ 用pivot_table分析比赛时长的逐年变化
时间: 2024-02-24 15:58:59 浏览: 227
使用Python对棒球赛数据集进行分析.zip
好的,我已经记录下来了。现在开始回答你的问题:
首先,我需要确认一下你的问题,你想问如何读入棒球比赛数据game_logs.csv为gl对象,并利用category类型大幅压缩内存占用空间,同时分析比赛日的分布情况和比赛时长的分布情况,对吗?
如果是的话,我可以依次回答你的问题:
1. 读入棒球比赛数据game_logs.csv为gl对象:
可以使用 pandas 库的 read_csv 函数来读取 csv 文件,代码如下:
```python
import pandas as pd
# 读取csv文件
gl = pd.read_csv('game_logs.csv')
```
2. 分析比赛日的分布情况和比赛时长的分布情况:
可以使用 pandas 库的 pivot_table 函数来对数据进行透视,代码如下:
```python
# 比赛日的分布情况
day_of_week = pd.pivot_table(gl, values='date', index='year', columns='day_of_week', aggfunc='count')
day_of_week = day_of_week.div(day_of_week.sum(axis=1), axis=0)
print(day_of_week)
# 比赛时长的分布情况
game_length = pd.pivot_table(gl, values='length_minutes', index='year', columns=None, aggfunc='mean')
print(game_length)
```
其中,day_of_week 表示每周七天的比例,game_length 表示比赛时长的平均值。
3. 利用category类型大幅压缩内存占用空间:
可以使用 pandas 库的 astype 函数将一些列的数据类型转换为 category 类型,代码如下:
```python
# 对freq > 200的object列使用category类型
column_types = dict()
for col in gl.columns:
if gl[col].dtype == 'object':
if gl[col].nunique() / gl[col].count() < 1/200:
column_types[col] = 'category'
gl = gl.astype(column_types)
```
4. 比较转换列部分,转换前后的内存占用情况:
可以使用 pandas 库的 info 函数来查看对象的内存占用情况,代码如下:
```python
# 转换前的内存占用情况
gl.info(memory_usage='deep')
# 转换后的内存占用情况
gl.astype(column_types).info(memory_usage='deep')
```
5. 在read_csv函数中指定dtype=column_types参数,并查看读入对象的内存占用情况:
可以在 read_csv 函数中指定 dtype 参数来指定每列的数据类型,代码如下:
```python
# 指定dtype参数
gl = pd.read_csv('game_logs.csv', dtype=column_types)
# 查看内存占用情况
gl.info(memory_usage='deep')
```
6. 用pivot_table分析比赛日的分布情况(一周七天的比例)的逐年变化:
可以使用 pandas 库的 pivot_table 函数来对数据进行透视,代码如下:
```python
# 一周七天的比例的逐年变化
day_of_week_year = pd.pivot_table(gl, values='date', index='year', columns='day_of_week', aggfunc='count')
day_of_week_year = day_of_week_year.div(day_of_week_year.sum(axis=1), axis=0)
print(day_of_week_year)
```
其中,day_of_week_year 表示每周七天的比例的逐年变化。
7. 用pivot_table分析比赛时长的逐年变化:
可以使用 pandas 库的 pivot_table 函数来对数据进行透视,代码如下:
```python
# 比赛时长的逐年变化
game_length_year = pd.pivot_table(gl, values='length_minutes', index='year', columns=None, aggfunc='mean')
print(game_length_year)
```
其中,game_length_year 表示比赛时长的逐年变化。
阅读全文