python中pandas进行数据分析与可视化(3)

1.创建数据源

在前几篇博客中,都是手动创建少量数据充当数据源,这次通过随机生成,让数据量多一些

# 导入所有需要的库
import pandas as pd
import numpy.random as np
import openpyxl
import xlrd
import matplotlib.pyplot as plt

#创建一些测试数据用来分析
# 设置种子
np.seed(111)
# 生成测试数据的函数
def CreateDataSet(Number=1):
    Output = []
    for i in range(Number):
        # 创建一个按周计算的日期范围(每周一起始)
        rng = pd.date_range(start='1/1/2019', end='12/31/2022',freq='W-MON') #freq表示日期的频率
        # 创建一些随机数
        data = np.randint(low=25, high=1000, size=len(rng))
        # 状态池
        status = [1, 2, 3]
        # 创建一个随机的状态列表
        random_status = [status[np.randint(low=0, high=len(status))] for i in range(len(rng))]
        # 城市的列表
        states = ['BJ','bj','SH','SHANGHAI','SZ','TJ','CQ','GZ']
        # 创建一个城市的随机列表
        random_states = [states[np.randint(low=0, high=len(states))] for i in range(len(rng))]
        Output.extend(zip(random_states, random_status, data, rng))
        return Output

dataset = CreateDataSet(4)
print(dataset)
df = pd.DataFrame(data=dataset, columns=['State','Status','CustomerCount','StatusDate'])
print(df.info)

在这里插入图片描述
在这里插入图片描述

2.保存至excel

如果不指定保存的文件路径,就会默认保存到当前路径下

# 结果保存到 Excel 中。 需要 openpyxl 包
df.to_excel('Lesson3.xlsx', index=False) #不保存索引,但是保存列名(column header)

在这里插入图片描述

3.读取excel

不仅可以将DataFrame对象保存为excel,也可以将excel文件以DataFrame对象形式读取出来

# 文件的位置
Location = r'./Lesson3.xlsx'
# 读取第一个页签(sheet),并指定索引列是 StatusDate
df = pd.read_excel(Location, sheet_name=0, index_col='StatusDate') # 需要 xlrd 包
print(df.dtypes)
print(df.index)
print(df.head())

在这里插入图片描述
在这里插入图片描述

4.数据清洗

当我们获取了df这份数据之后,我们可以按指定规则对其进行清洗,随便举几个例子

  1. 确保 state 列都是大写
  2. 只选择 Status = 1 的那些记录
  3. 对 State 列中的 SHANGHAI 和 SH,都合并为 SH

4.1 确保 state 列都是大写

可以先查看一下当前数据里State列是否都是大写

# 快速看一下 State 列中的大小写情况
print(df['State'].unique())

在这里插入图片描述
根据返回的结果,可以发现存在部分小写的数据,这时候就可以进行处理

# 清洗 State 列,全部转换为大写
df['State'] = df.State.apply(lambda x: x.upper())
print(df['State'].unique())

在这里插入图片描述
这时候就会发现都已经变成了大写的数据

4.2 只选择 Status = 1 的那些记录

观察数据可以发现Status的值有多种,我们可以对其进行筛选,只选择为1的内容

# 只保留 Status == 1
mask = df['Status'] == 1
df = df[mask]
print(df['Status'].unique())

在这里插入图片描述

4.3 对 State 列中的 SHANGHAI 和 SH,都合并为 SH

因为在设定中,SHANGHAISH为同一座城市,所以可以将二者进行统一

# 将 SHANGHAI 转换为 SH
mask = df.State == 'SHANGHAI' #找出 State 列是 SHANGHAI 的所有记录
df['State'][mask] = 'SH' # 对 State 列是 SHANGHAI 的所有记录,将其替换为 SH
print(df['State'].unique())

在这里插入图片描述

5.数据可视化

在经历了数据清洗,现在就可以将数据进行可视化展示

plt.figure(figsize=(15, 5))
plt.plot(df['StatusDate'], df['CustomerCount'])
plt.show()

在这里插入图片描述
但因为这份数据涉及多个城市,所以可以单独只展示一座城市的数据

#只展示 BJ 数据
sortdf = df[df['State']=='BJ'].sort_index(axis=0)
plt.plot(sortdf['StatusDate'], sortdf['CustomerCount'])
plt.show()

在这里插入图片描述
这份数据不仅包含多个城市,还涉及多个时间段,所以可以先按StateStatusDate求和进行数据展示

# 先 reset_index,然后按照 State 和 StatusDate 来做分组 (groupby)
Daily = df.reset_index().groupby(['State','StatusDate']).sum()
print(Daily.head())

在这里插入图片描述
因为indexStatus字段在这份数据里并不重要,所以可以对其进行删除

#去掉 Status 和 index
del Daily['index']
del Daily['Status']
print(Daily.head())

在这里插入图片描述
此时如果想要展示汇总之后的数据,则需要注意一点,
StateStatusDate现在是索引列,不是常规列,所以没有办法直接当作图表的x轴,不然会报错

#绘制求和后的折线图
Daily.plot(x='StatusDate',y='CustomerCount')
plt.show()

在这里插入图片描述
解决方式也很简单,去除索引列就可以了

#绘制求和后的折线图 这里需要先去除索引,不然无法获取 StatusDate 列
Daily.reset_index().plot(x='StatusDate',y='CustomerCount')
plt.show()

在这里插入图片描述
与上面类似,这里也可以指定城市进行数据展示

#绘制 指定城市 BJ 的 折线图 这里需要先去除索引,不然无法获取 StatusDate 列
Daily.loc['BJ'].reset_index().plot(x='StatusDate',y='CustomerCount')
plt.show()

在这里插入图片描述

python中pandas进行数据分析与可视化(4)

1.创建数据源

在有了前几篇的内容基础之后,本次会简单介绍一些DataFrame里的增删改查操作

# 导入需要的库
import pandas as pd

# 创建数据集
d = [0,1,2,3,4,5,6,7,8,9]
# 创建一个 dataframe
df = pd.DataFrame(d)
print(df)

在这里插入图片描述

2.增删改

# 修改列名
df.columns = ['Rev']
print(df)

在这里插入图片描述

# 增加一列
df['NewCol'] = 5
print(df)

在这里插入图片描述

# 修改一下新增加的这一列的值
df['NewCol'] = df['NewCol'] + 1
print(df)

在这里插入图片描述

# 让我们增加几列。 当使用 dataframe 没有的列时,dataframe 自动增加这个新列
df['test'] = 3
df['col'] = df['Rev']
print(df)

在这里插入图片描述

# 如果有需要,可以改变索引(index)的名字
i = ['a','b','c','d','e','f','g','h','i','j']
df.index = i
print(df)

在这里插入图片描述

3.查

# 使用 *loc,我们可以选择 dataframe 中的部分数据
print(df.loc['a'])

在这里插入图片描述

# df.loc[起始索引(包含):终止索引(包含)]
print(df.loc['a':'d'])

在这里插入图片描述

# df.iloc[起始索引(包含):终止索引(不包含)]
print(df.iloc[0:3])

在这里插入图片描述

# 也可以通过列名选择一列的值
print(df['Rev'])

在这里插入图片描述

#选择多列
print(df[['Rev', 'test']])

在这里插入图片描述

# df.loc[行范围, 列范围]
print(df.loc['a':'d','Rev'])

在这里插入图片描述

# 选择 top-N 个记录 (默认是 5 个)
print(df.head())

在这里插入图片描述

# 选择 bottom-N 个记录 (默认是 5 个)
print(df.tail())

在这里插入图片描述

python中pandas进行数据分析与可视化(5)

1.创建数据源

本次快速熟悉一下stackunstack两个函数

# 导入库
import pandas as pd

# 小数聚集
d = {'one':[1,1],'two':[2,2]}
i = ['a','b']
# 创建一个 dataframe
df = pd.DataFrame(data = d, index = i)
print(df)
print(df.index)

在这里插入图片描述

2.STACK

# 把列(column)放置到索引位置
stack = df.stack()
print(stack)
print(stack.index)

在这里插入图片描述

3.unstack

unstack = df.unstack()
print(unstack)
print(unstack.index)

在这里插入图片描述
用 T (转置),我们可以把列和索引交换位置

transpose = df.T
print(transpose)
print(transpose.index)

在这里插入图片描述

python中pandas进行数据分析与可视化(6)

1.创建数据源

和之前一样,需要先创建一个数据集,作为数据源

import pandas as pd

# 小数聚集
d = {'one':[1,1,1,1,1],
'two':[2,2,2,2,2],
'letter':['a','a','b','b','c']}
# 创建一个 dataframe
df = pd.DataFrame(d)
print(df)

在这里插入图片描述

2.分组求和

针对上面创建的数据集进行分组求和处理

# 创建一个 groupby 对象
one = df.groupby('letter')
# 在分组上应用 sum() 函数
print(one.sum())

在这里插入图片描述
我们会发现用来做聚合的字段会被默认作为索引字段

#聚合的字段会被默认列为索引
letterone = df.groupby(['letter','one']).sum()
print(letterone)
print(letterone.index)

在这里插入图片描述
如果要避免这种情况,可以通过下面这种方式进行处理

#不把用来分组的列名字作为索引
letterone = df.groupby(['letter','one'], as_index=False).sum()
print(letterone)
print(letterone.index)

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,我了解了。对于你的问题,我可以给你一个简单的数据分析可视化案例,使用PythonPandas和Matplotlib库。 首先,我们需要准备一个数据集。这里我选用了一个名为“tips”的数据集,它记录了一家餐厅的不同顾客在用餐时的消费金额、小费、性别、是否吸烟、用餐时间等信息。你可以在Seaborn库找到这个数据集。 接下来,我们可以使用Pandas库将数据集导入到Python,并进行一些简单的数据处理。例如,我们可以计算不同性别的平均小费金额: ```python import pandas as pd # 导入数据集 tips = pd.read_csv("https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv") # 计算不同性别的平均小费金额 tips.groupby("sex")["tip"].mean() ``` 结果如下: ``` sex Female 2.833448 Male 3.089618 Name: tip, dtype: float64 ``` 接下来,我们可以使用Matplotlib库将这些数据可视化。例如,我们可以绘制不同性别的平均小费金额柱状图: ```python import matplotlib.pyplot as plt # 绘制不同性别的平均小费金额柱状图 tips.groupby("sex")["tip"].mean().plot(kind="bar") # 设置图形标题和坐标轴标签 plt.title("Average Tip by Gender") plt.xlabel("Gender") plt.ylabel("Tip") # 显示图形 plt.show() ``` 结果如下: ![Average Tip by Gender](https://i.imgur.com/5XjVwUH.png) 这只是一个简单的数据分析可视化案例,你可以根据自己的需求和数据集进行更复杂的数据分析可视化

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孟意昶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值