一.对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如下