1.创建数据源
matplotlib
库是用于数据可视化,pandas
则是用于数据分析,在导入这两个包之后,我们可以手工创建两个数据,其表示的是在某一年里,不同名称的新生儿数量,比如被叫做Bob
的新生儿有968位
import matplotlib.pyplot as plt
import pandas as pd #导入pandas的常规做法
#创建数据 初始数据集: 婴儿名字和对应的出生数量
names = ['Bob','Jessica','Mary','John','Mel']
births = [968, 155, 77, 578, 973]
之后可以用zip
函数将这两个列表合并在一起,获取一个更容易理解的列表
BabyDataSet = list(zip(names, births))
print(BabyDataSet)
2.数据源表格化
因为在数据分析的时候,往往会使用表格的形式进行处理,所以我们需要先把数据源转换成表格的形式,这里会用到DataFrame
对象,我们可以把这个对象理解为包含了BabyDataset
的内容而格式非常象一个 sql 表格或者 Excel 的数据表
df = pd.DataFrame(data = BabyDataSet, columns=['Names', 'Births'])
print(df)
3.数据保存
此时我们可以将df
里的表格数据存储为csv
文件,这样可以进行文件共享,这里用到了index
和header
两个参数,可以用来控制是否要导出表头和序号
#数据导出 两个参数分别用于决定是否要导出序号和表头
df.to_csv('births1880.csv', index=False, header=False)
这里如果不指定导出文件的路径,那就会默认导出到和当前这个python
文件相同路径下
4.数据读取
如果我们从其他人那里获取了一个csv
文件,也同样可以通过pandas
获取里面的数据
Location = r'./births1880.csv' #从 这个python文件 当前的位置读取 csv 文件
df = pd.read_csv(Location,names=['Names','Births'])
print(df)
同样的,如果不指定获取文件的路径,那也就是会在当前路径下去获取文件
5.确认数据类型
因为这份数据是在某一年里,不同名称的新生儿数量,所以按道理来说,Births
这个字段的值就不应该有小数,我们可以提前通过dtypes
来看到每个字段的类型
# 查看每一列的数据类型
print(df.dtypes)
# 查看 Births 列的数据类型
print(df.Births.dtype)
6.数据分析-获取最大值
如果当前想要获取Births
里的最大值,可以直接通过DataFrame
对象里的max
函数获取
print(df['Births'].max())
但这种方法只能获取最大的那个数值,没有办法知道对应的Names
是什么,所以可以改用对Births
排序的方法,再取第一条记录,就可以同时获取所有信息了
Sorted = df.sort_values(['Births'], ascending=False)
print(Sorted.head(1))
7.数据可视化
之前有写过一篇使用matplotlib
绘制可视化图形的博客,这里对其稍作修改,就可以使用,如果对下面这段数据可视化的逻辑有不理解对地方,可以参考python数据分析-matplotlib绘制折线图
# 绘图
# df['Births'].plot()
df['Births'].plot.bar() #这里改用的条形图更直观
# Births 中的最大值
MaxValue = df['Births'].max()
# 找到对应的 Names 值
MaxName = df['Names'][df['Births'] == df['Births'].max()].values
# 准备要显示的文本
Text = str(MaxValue) + " - " + MaxName
# 将文本显示在图形中
plt.annotate(Text, xy=(1, MaxValue), xytext=(8, 0),
xycoords=('axes fraction', 'data'), textcoords='offset points')
print("The most popular name")
df[df['Births'] == df['Births'].max()]
plt.show()
print(df[df['Births'] == df['Births'].max()])