python对某⼀列数据求占⽐_⽤python进⾏数据分析的套路经过⼀段时间的学习,总结⼀下⽬前所学知识,在⽤python进⾏数据分析的过程中所⽤到的函数及分析过程。
第⼀步 导⼊包
常⽤的包有以下这些:
1.⽤于处理数据的包
import pandas as pd
import numpy as np
pandas 和numpy基本包含了对数据处理的所有操作
2.⽤于数据可视化的包
import matplotlib.pyplot as plt
import seabron as sns
matplotlib.pyplot包⽤于基本的数据可视化,画柱,线,点图的时候⽤
seabron中的headmap⽤来画热⼒图
3.连接数据库的包
import pymysql
第⼆步 导⼊数据
1.导⼊数据的话⼀般考虑csv类型
<_csv('C:/Users/10136/Desktop/comma_sep1.csv ')#保存数据
2.从数据库导⼊数据
#导⼊包
import pymysql
连接数据库
t(host='localhost',port=3306,
user='root',password='123456',db='brazilian',charset='utf8')#db为数据库名
query='select * from new_orders_merged'#编写SQL语句
sql_ad_sql(query,conn)#执⾏SQL语句,从数据库中导⼊名为new_orders_merged的表
第三步 数据处理
1.查看数据基本结构
查看⾏和列时可以⽤data.shape
查看每列数据类型⽤data.dtypes
查看数据的前5⾏⽤data.head()
2.处理缺失值
查看数据是否有缺失值
可以⽤data.insnull(),会列出所有数据的bool类型,有缺失值为True
data.isnull().any()#显⽰有缺失值的列的bool类型,有缺失值为True
data[data.isnull().values==True]#显⽰所有带有缺失值的⾏列,适⽤于缺失值较少的数据
data.isnull().sum()#查看每列缺失值的个数,可以根据结果对怎样处理缺失值做出判断
删除缺失值
如果缺失值相对样本数据影响不⼤,对缺失值可以采⽤删除处理
data.dropna()#这是对样本中所有缺失值所在的⾏进⾏删除
data.dropna(subset=['列名'])#这是对指定列的缺失值删除所在⾏
data.dropna(how='any/all',axis=0)#删除缺失值所对应的⾏,any是指只要有缺失值则对整⾏删除,all是指当整⾏都是缺失值则对其删除。
填充缺失值
如果删除缺失值对样本影响较⼤,可以采⽤填充的⽅式补充缺失值
data.fillna('')#可以把所有缺失值补充为统⼀值*
data['列名']fillna()#针对某⼀列进⾏补充
data['列名']fillna(data['列名'].mean())#以这列的平均值作为补充
data['列名']fillna(data['列名'].interpolate())#以缺失值上下数的平均值进⾏补充
data.fillna(axis=1,method='ffill')#以缺失值同⾏前⼀列的值进⾏补充,axis=0是以缺失值同列上⾯⼀⾏的值进⾏补充。
3.处理重复值
删除重复值
data.drop_duplicates(keep='first/last'/False)#first :保留第⼀⾏重复值,last:保留最后⼀⾏重复值,False:不保留重复值,删除所有重复的数据
4.处理异常值
如果数据中有某⼀列的数据有异常,可以选择性的筛选滤去这些异常值
#⽅法1
app=app.iloc[np.where(app["CNT_CHILDREN"]<5)]
#⽅法2
app=app[app["CNT_CHILDREN"]<5]
#⽅法3
d=pd.Series(app['CNT_CHILDREN']).unique()
list1 = [i for i in d if i <=5]
app=app[app.CNT_CHILDREN.isin(list1)]⾸先我们要对数据进⾏聚合操作
df.describe().applymap(lambda x:'%.2f'%x).T
data.describe().round(2).T #与上⾯相同
#查看数据的最⼩值,最⼤值,四分位数,标准差,平均数,数据数量等
#applymap()执⾏函数
然后根据数据的业务情况,分析数据的异常值,⽐如最⼤值,最⼩值是否符合业务情况,然后再对异常值进⾏相应的处理
#对把数据数值化⽅便分析
##分别查看department列和salary列唯⼀值有多少个
df1=pd.Series(df['department']).unique()#Series创建⼀维数组
df2=pd.Series(df['salary']).unique()
##把两列的值转化为数值
df['department'].replace(list(df1),np.arange(10),inplace=True)
df['salary'].replace(list(df2),[0,1,2],inplace=True)
连接数据表
app_(app,cre,on='客户号',how='inner')
第四步 数据分析
1.对列重命名
2.查看⼀列数据的唯⼀值
pd.Series(data['列名']).unique()#⽤来查看⼀列数据有多少不同值,适合查询类别较少的数据
3.对列进⾏移动
有时候为了分析⽅便,可以适当对某些列进⾏前移或删除
front=data['列名']#先把这⼀列赋予⼀个值
data.drop(labels='列名',axis=1,inplace=True)#删除原列的数据
data.insert(0,'列名',front)#把这⼀列插⼊到列序为0的位置
4.常⽤的⼀些数据操作排序
data.sort_values(by='列名',ascending=True, inplace=False)#注意指定列,升序降序问题分组
pd.cut(data['列名'],[1,30,60,100],labels=['⼩','中','⼤'])
loc()结合cut可以添加新列
给数据添加列
data.assign(新列名=np.log(data['列名']))求某⼀列中各种值的占⽐
df['left'].value_counts()/df['left'].count()
#value_counts是分类求出这⼀列数据不同值的计数量
4.连接数据库进⾏数据分析
从数据库引⼊数据的常规操做
import pymysql
#使⽤cursor()⽅法获取数据库的操作游标
cursor= conn.cursor()
sql='''SELECT product_category_name AS "SPU",COUNT(DISTINCT(product_id)) AS "SKU数" FROM new_orders_merged
GROUP BY product_category_name
ORDER BY SKU数 DESC;
'''
#读取查询结果并转成列表
ret=cursor.fetchall()#读取查询结果
ret_list=[i for i in ret]
#将列表转为datafarm形式
ret_data=pd.DataFrame(ret_list,index=None,columns=['SPU','SKU数'])
ret_data=ret_data.set_index('SPU')
5.设置显⽰问题
设置显⽰结果的最⼤⾏列
pd.set_option('display.max_columns',10)#最⼤显⽰多少列
pd.set_option('display.max_rows',100)#最⼤显⽰多少⾏
设置现在图表中的中⽂字体
#⽅法1
mysql删除重复的数据保留一条
from matplotlib import font_manager
#设置中⽂字体
my_font=font_manager.FontProperties(fname='C:/Windows/',size=18)
#⽅法2
from pylab import mpl
第五步 数据可视化
1.热⼒图
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
#导⼊数据并分组
ad_csv('week.csv')
#df.columns=['week','hours','counts']
#做成数据透视表
df=pd.pivot_table(df,index='week',columns='hours',values='counts')
print(df)
#画热⼒图
plt.figure(figsize=(16,8))#画布
ax=sns.heatmap(df,annot=True,fmt='d',cmap='Blues')#annot是显⽰每个数据,fmt是显⽰⽅式
ax.set_xlabel('⼩时',size=14)#X轴标签
ax.set_ylabel('星期',size=14)#Y轴标签
ax.set_title('客户购买频数图',size=18)#标题
plt.savefig('customers_.png',dpi=1000,bbox_inches='tight')#保存图⽚
⾸先导⼊的数据形式如下:
在进⾏画图之前要对数据进⾏处理,利⽤pivot_table()函数把原数据的⾏列转换成画图时数据的⾏、列和数据值,这时的数据形式就是画图
时的数据形式,呈现如下:
然后就是画热⼒图,结果呈现如下:
当数据为多列时,可以⽤df.corr()求出每列的相关系数,然后画出热⼒图
sns.(),cmap="BuGn");
plt.title('Heatmap of Correlation Matrix')
结果如下
2.饼图
left_rate=df['left'].value_counts()/df['left'].count()#饼图的数据类型
#⽤饼状图表⽰
left_rate.plot.pie(labels = ['在职','离职'],autopct = '%.2f%%',figsize=(8,8))
plt.axis('equal') #将坐标系设置为正⽅形,也就是使饼状图为圆形
plt.title('在职,离职员⼯⽐例')
plt.savefig('scatr.png',dpi=1000)
plt.show()#不能放到前⾯,否则保存不了图⽚
结果如下:
3.柱状图
#crosstab是数据交叉表,计算数据因⼦的频率值,对⽐数据透视表pivot_table()
depart_salary_sstab(index=df['department'],columns=df['salary'])
print(depart_salary_table)
#两种数据叠加在⼀起显⽰stacked=Ture
depart_salary_table.plot(kind="bar",figsize=(10,10),stacked=True)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论