python分析患者数据:pandas 和matplotlib

使用python进行数据清洗及可视化

今天第一次使用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()

箱线图描述一列数据中,数据分布情况。

以上就是这部分的内容,后续再学习中继续补充。

你可能感兴趣的:(pandas,python,pandas,matplotlib)