python数据分析011_数据分析流程
一.确定分析目标
1.数据分析的大忌是不知道分析方向和目的,拿着一堆数据不知所措。一切数据分析都是以业务为核心目的,而不是以数据为目的。所以,我们应该先定分析的目标,然后在处理数据。
二.处理数据
1.查看数据情况
- import pandas as pd
- data = pd.read_csv('/data/course_data/data_analysis/analyse_spider.csv',encoding='GBK')
- print(data.shape)
- data.info()
2.删除缺失值: 数据的缺失值在很大程度上会影响数据的分析结果,如果某一个字段缺失值超过一半的时候,我们就可以将这个字段删除了,因为缺失过多就没有业务意义了。
注意:并不是,只要含有有缺失值的时候,我们就要将数据删除,如果数据量比较少、缺失值不多,并且对我们的分析指标没有实际影响时,我们就可以将其保留。
- import pandas as pd
- data = pd.read_csv('/data/course_data/data_analysis/analyse_spider.csv',encoding='GBK')
- # 删除businessZones列数据
- data.drop(['businessZones'],axis=1, inplace=True) #删除整列
- # 删除含有NaN的数据
- data.dropna(inplace=True) #删除空值
- data.info()
3.删除重复数据: 使用data.duplicated()方法判断每一行是否重复,然后使用data.duplicated()[data.duplicated()==True]取出重复行,最后使用len()计算重复的数据。
- # 计算重复的数据数
- print(len(data.duplicated()[data.duplicated()==True]))
- # 删除重复数据
- data.drop_duplicates(inplace=True)
4.整理目标数据
a.字段拆分
- import pandas as pd
- data = pd.read_csv('/data/course_data/data_analysis/analyse_spider.csv',encoding='GBK')
- # 删除businessZones列数据
- data.drop(['businessZones'],axis=1, inplace=True)
- data.dropna(inplace=True)
- # 删除重复数据
- data.drop_duplicates(inplace=True)
- # 定义拆分的函数
- def split_salary(salary,method):
- # 获取'-'索引值
- position = salary.upper().find('-')
- if position != -1: #salary值是15k-25k形式
- low_salary = salary[:position-1]
- high_salary= salary[position+1:len(salary)-1]
- else: #salary值是15k以上形式
- low_salary = salary[:salary.upper().find('K')]
- high_salary= low_salary
- # 根据参数用以判断返回的值
- if method == 'low':
- return low_salary
- elif method == 'high':
- return high_salary
- elif method == 'avg':
- return (int(low_salary) + int(high_salary))/2
- # 赋值
- data['low_salary']=data.salary.apply(split_salary,method='low').astype('int')
- data['high_salary']=data.salary.apply(split_salary,method='high').astype('int')
- data['avg_salary']=data.salary.apply(split_salary,method='avg')
b.去除文字
- # 由于最高温度和最低温度两列数据类型都是带有"℃"符号的字符串,方便计算我需要去除“℃”,并将数据类型转化成int
- df["最高温度"] = df["最高温度"].str.replace("℃", "").astype('int')
- df["最低温度"] = df["最低温度"].str.replace("℃", "").astype('int')
三.绘图分析
- import matplotlib.pyplot as plt
- from matplotlib import font_manager
- my_font = font_manager.FontProperties(fname='/data/course_data/data_analysis/STSONG.TTF')
- sns.set(style='dark')
- groups = data.groupby(by='education')
- xticks = []
- for group_name,group_df in groups:
- xticks.append(group_name)
- plt.bar(group_name,group_df.avg_salary.mean())
- plt.xticks(xticks,fontproperties=my_font)
- plt.show()
四.绘图小知识
1.以日期(2020-05-20)为索引时, 按月份取数据
- # 在读取日期的时候,利用parse_dates()方法将“日期”这列数据类型转换成datetime类型,这样方便我们可以根据时间获取数据
- df = pd.read_csv('/data/course_data/data_analysis/BJ_tianqi.csv',parse_dates=['日期'])
- # 方便分组计算,我们可以添加月份列
- df['月份'] = df['日期'].dt.to_period("M")
2.df分组后取最大最小值
- dict1 = {
- "最高温度":'max',
- "最低温度":'min'
- }
- df_group = df.groupby(by='月份').agg(dict1)
- print(df_group)
例如:
- df.groupby('A').agg('min')
- df.groupby('A').agg(['min', 'max'])
- df.groupby('A').B.agg(['min', 'max'])
- df.groupby('A').agg({'B': ['min', 'max'], 'C': 'sum'})