今天第一次使用pandas和matplotlib处理数据,以下纪录一些使用心得:
1、首先第一步就是要导入一些使用包:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
要把csv或者excel文件读取出来:
pa = pd.read_csv('E:/练习数据/patient.csv')
这里需要注意,我们直接复制出来的文件路径格式一般都是 \ ,这里我们要转换成 / ;
2 、由于我的文件列数过多,所以在notebook中显示不完全,如果要显示所有列,那就需要在开头进行一些设置:
pd.set_option('display.max_columns',None)
主要用到的就是set_option方法,具体用法可以参考其他文章;
3、之后就进入到了数据清理阶段:
首先删除不需要的列:
pa.drop(['病人卡号','病人姓名','省份','城市','咨询医生','类型','type_message'], axis=1, inplace=True)
这里使用drop方法,参数方面axis默认为0,是删除行,置为1是删除列,inplace参数表示是否需要把处理之后的数据替换掉原来的数据;
另外一种删除方法是删除连续的多列:
pa.drop(pa.columns[8:30],axis=1,inplace=True)
这里使用了索引,表示删除第8到30列;
把几列拿出来求和,得到新的列在加入的表中,这种使用场景比如说计算每个学生各科的总分:
sum_columns = pa.iloc[:,8:30]
def f(x):
return x.sum()
feiyong = sum_columns.apply(f,axis=1)
pa['总费用'] = feiyong
这部分牵涉到的知识点:iloc的使用、apply函数的使用、还有如何增加一列新的数值到表中,算是稍微复杂点的应用了;
数值的替换都可以用replace:
pa = pa.replace(['初诊','复诊'],[1,0])
pa = pa.replace(['自然门诊'],['企划'])
更改列明要用到rename:
pa.rename(columns={'咨询人员':'医生'},inplace=True)
里面要传入columns和inplace作为参数;
还有一个重要的知识点就是把一列分成两列,再添加到表中:
bingzhong = pa.病种.str.split('-',expand=True)
bingzhong.columns = ['大病种','小病种']
#数据清洗 添加两列到原来的表中
pa = pa.join(bingzhong)
这里用到的是str.split,里面两个参数,第一个是使用什么符号来分裂,这个符号必须是每一个数据都包含的,之后要给两个新的列添加列名,之后使用join把新的Dataframe添加到原来的表中。
分组统计:
zhuzhuang = pa.groupby(by=['医院'])['总费用'].sum().sort_values(ascending=False)
cz1 = pa.groupby(by=['医院'])['初复诊','总费用'].sum() #统计两列
使用groupyby里面要传入by参数,后面可以做统计,然后排序,这个参数后来会成为Series中的index,如果要把得到的Series转化成Dataframe可以使用下面这个函数
cz1 = cz1.reset_index() #把groupy之后生成的series变成dataframe
对某一列的值进行加减乘除运算:
cz1['总费用']=cz1['总费用']/10000
使用round设置保存几位小数:
cz1 = cz1.round({'总费用':0}) #对某一列保留几位小数
数据筛选:
cz2 = cz1[(cz1.初复诊>100)&(cz1.总费用>1)]
3、数据可视化
zhexian.plot(figsize=(12,6))
plt.xticks(fontsize=10)
plt.xlabel('Datatime')
plt.ylabel('Money')
plt.title('money of datatime')
plt.show()
直接使用.plot,默认就是折线图,figsize参数可以指定画出的图片大小,xticks主要设置坐标轴的显示,比如说字号,xlabel,ylabel,title分别设置标题;
zhuzhuang.plot(kind='bar',figsize=(15,8))
plt.xticks(rotation=45,fontsize=15)
plt.yticks(fontsize=14)
plt.show()
除了figsize参数之外还传进去一个kind表示图像的类型‘bar’表示柱状图,
fig, ax = plt.subplots()
ax.scatter(cz2['初复诊'],cz2['总费用'])
ax.set_xlabel('nums')
ax.set_ylabel('money')
ax.set_title('Hahahha Wocao')
plt.show()
这里使用一个新的画图方法ax,散点图要传进去两列数值,来描述两列的关系,设置图名称的方式也和之前有所不同
fig, ax = plt.subplots()
ax.boxplot(cz2['总费用'])
plt.show()
箱线图描述一列数据中,数据分布情况。
以上就是这部分的内容,后续再学习中继续补充。