利用pandas库进行数据分析(四)

一.对CSV文件进行简单的数据处理和分析

# coding=utf-8
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np

# 设置pandas的显示选项,以便更好地查看数据
pd.set_option('display.max_rows', 500)  # 设置最多显示的行数
pd.set_option('display.max_columns', 1000)  # 设置最多显示的列数
pd.set_option('display.width', 1000)  # 设置显示的宽度

# 定义文件路径
file_path = '911.csv'
# 读取csv文件
df = pd.read_csv(file_path)

# 从'title'列中提取分类信息,并去重
temp_list = df['title'].str.split(':').tolist()
cate_list = list(set([i[0] for i in temp_list]))
print(cate_list)

# 创建一个全为0的DataFrame,列名为分类名称
zeros_df = pd.DataFrame(np.zeros((df.shape[0], len(cate_list))), columns=cate_list)

# 遍历分类名称列表
for cate in cate_list:
    # 如果'title'列包含该分类名称,则在对应的列中将相应行的值设为1
    zeros_df[cate][df['title'].str.contains(cate)] = 1

# 计算每列的和,即每个分类的总数
sum_ret = zeros_df.sum(axis=0)
print(sum_ret)

以下是代码的主要步骤:

1. 导入必要的库:pandas用于数据处理,matplotlib用于绘图,numpy用于数值计算。

2. 设置pandas的显示选项,以便更好地查看数据。

3. 定义文件路径,并读取CSV文件到一个pandas DataFrame中。

4. 从'title'列中提取分类信息,并去重得到一个分类列表。

5. 创建一个全为0的DataFrame,列名为分类名称,行数与原始DataFrame相同。

6. 遍历分类名称列表,对于每个分类,如果'title'列包含该分类名称,则在对应的列中将相应行的值设为1。

7. 计算每列的和,即每个分类的总数,并打印出来。

# coding=utf-8
import pandas as pd
import numpy as np

# 设置pandas的显示选项,以便更好地查看数据
pd.set_option('display.max_rows', 500)  # 设置最多显示的行数
pd.set_option('display.max_columns', 1000)  # 设置最多显示的列数
pd.set_option('display.width', 1000)  # 设置显示的宽度

# 定义文件路径
file_path = '911.csv'
# 读取csv文件
df = pd.read_csv(file_path)

# 从'title'列中提取分类信息,并创建一个新的列'cate'来存储分类
temp_list = df['title'].str.split(':').tolist()
cate_list = [i[0] for i in temp_list]  # 提取分类名称
df['cate'] = pd.DataFrame(np.array(cate_list).reshape((df.shape[0], 1)))  # 创建新列'cate'并赋值

# 打印前5行数据
# print(df.head(5))

# 按'cate'列分组,并计算每个组的'title'列的数量
cate_count = df.groupby('cate').count()['title']
print(cate_count)

# 打印每个分类的数量
print(cate_count)

以下是代码的主要步骤:

1. 导入必要的库:pandas用于数据处理,numpy用于数值计算。

2. 设置pandas的显示选项,以便更好地查看数据。

3. 定义文件路径,并读取CSV文件到一个pandas DataFrame中。

4. 从'title'列中提取分类信息,并创建一个新的列'cate'来存储分类。

5. 使用`groupby`方法按照'cate'列进行分组,然后对每个分组使用`count`方法计算'title'列的数量。

6. 打印每个分类的数量。

二.分析CSV文件中的911电话记录,以了解电话数量随时间的变化趋势

# coding=utf-8
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np

# 设置pandas的显示选项,以便更好地查看数据
pd.set_option('display.max_rows', 500)  # 设置最多显示的行数
pd.set_option('display.max_columns', 1000)  # 设置最多显示的列数
pd.set_option('display.width', 1000)  # 设置显示的宽度

# 定义文件路径
file_path = '911.csv'
# 读取csv文件
df = pd.read_csv(file_path)

# 将'timeStamp'列转换为pandas的日期时间格式
df['timeStamp'] = pd.to_datetime(df['timeStamp'])
# 将'timeStamp'列设置为DataFrame的索引
df.set_index('timeStamp', inplace=True)

# 按月对数据进行重采样,并统计'title'列的数量,即每月电话次数
count_by_month = df.resample('M').count()['title']
print(count_by_month)

# 准备绘图数据
_x = count_by_month.index  # 获取重采样后的索引(即每个月份)
_y = count_by_month.values  # 获取每个月的电话次数
# 将日期格式化为字符串,以便在图表中显示
_x = [i.strftime('%Y-%m-%d') for i in _x]

# 设置图表大小
plt.figure(figsize=(20, 8), dpi=80)

# 绘制电话次数随时间变化的折线图
plt.plot(range(len(_x)), _y, label='911 call count', color='b', linewidth=2)
# 设置x轴刻度,并旋转45度以便更好地阅读
plt.xticks(range(len(_x)), _x, rotation=45)
# 显示图表
plt.show()

以下是代码的主要步骤:

1. 导入必要的库:pandas用于数据处理,matplotlib用于绘图,numpy用于数值计算。

2. 设置pandas的显示选项,以便更好地查看数据。

3. 定义文件路径,并读取CSV文件到一个pandas DataFrame中。

4. 将'timeStamp'列转换为pandas的日期时间格式,并设置为DataFrame的索引。

5. 使用`resample`方法按月对数据进行重采样,并使用`count`方法统计'title'列的数量,即每月电话次数。

6. 准备绘图数据:获取重采样后的索引(即每个月份)和每个月的电话次数。

7. 设置图表大小,并绘制电话次数随时间变化的折线图。

8. 在x轴上设置刻度,并旋转45度以便更好地阅读日期标签。

9. 显示图表。

效果如下:

三.分析'911.csv'数据集中不同类型的紧急电话随时间的变化趋势

# coding=utf-8
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np

# 读取911数据的CSV文件
df = pd.read_csv('911.csv')
# 将'timeStamp'列转换为pandas的日期时间格式
df['timeStamp'] = pd.to_datetime(df['timeStamp'])

# 从'title'列中提取分类信息,并创建一个新的列'cate'来存储分类
temp_list = df['title'].str.split(':').tolist()
cate_list = [i[0] for i in temp_list]
df['cate'] = pd.DataFrame(np.array(cate_list).reshape((df.shape[0], 1)))
# 将'timeStamp'列设置为DataFrame的索引
df.set_index('timeStamp', inplace=True)

# 设置图表大小
plt.figure(figsize=(20, 8), dpi=80)

# 按'cate'列进行分组,并对每个分组进行处理
for group_name, group_data in df.groupby('cate'):
    # 对每个分组按月进行电话次数的统计
    count_by_month = group_data.resample('M').count()['title']

    # 准备绘图数据
    _x = count_by_month.index  # 获取重采样后的索引(即每个月份)
    _y = count_by_month.values  # 获取每个月的电话次数
    # 将日期格式化为字符串,以便在图表中显示
    _x = [i.strftime('%Y-%m-%d') for i in _x]

    # 绘制每种类型的电话次数随时间变化的折线图
    plt.plot(range(len(_x)), _y, label=group_name)

# 设置x轴刻度,并旋转45度以便更好地阅读
plt.xticks(range(len(_x)), _x, rotation=45)
# 显示图例
plt.legend(loc='best')
# 显示图表
plt.show()

1.先读取CSV文件,并将'timeStamp'列转换为日期时间格式,并设置为DataFrame的索引。

2.从'title'列中提取分类信息,并创建一个新的列'cate'来存储分类。

3.代码按'cate'列进行分组,并对每个分组进行按月统计电话次数的操作。

4.代码绘制每种类型的电话次数随时间变化的折线图,并显示图例。 

效果如下:

代码涉及的911.csv如下

911.zip 文件大小:23.8 M|icon-default.png?t=N7T8https://wwt.lanzoum.com/ioADb1obzpli 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NJU_AI_NB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值