数据分析项目实战day2

目录

1.人口数据分析

1.导入并查看相关文件信息

2.进行数据操作

2.政治献金数据分析

1.读取数据查看相关信息

2.进行数据操作

3.用户消费数据分析

1.数据预处理

2.按月进行分析

​ 3.用户个体消费分析

​​​​​​​

1.人口数据分析

1.导入并查看相关文件信息

数据分析项目实战day2

state表示州的全称,abbreviation表示缩写。

数据分析项目实战day2

state表示州 areas表示所占面积。

数据分析项目实战day2

state表示州,age表示调查人口的年龄,year表示统计年份,population表示人口数量。

2.进行数据操作

将人口数据和各州简称数据合并。

数据分析项目实战day2

上图中有两列缩写,删除其中一列。

数据分析项目实战day2

将state空值对应的简称找到

数据分析项目实战day2

对简称进行去重

数据分析项目实战day2

给为空的state补上正确的值,从而去除nan。

数据分析项目实战day2

利用之前判别是否存在nan检测操作是否成功。

数据分析项目实战day2

将面积数据进行合并

数据分析项目实战day2

数据分析项目实战day2

找出2010年全部年龄人口数据

数据分析项目实战day2

数据分析项目实战day2

完整代码如下:

import numpy as np
import pandas as pd
from pandas.core.indexes.base import Index

abb=pd.read_csv("state-abbrevs.csv")#state表示州全称 abbreviation表示缩写
#print(abb)
area=pd.read_csv("state-areas.csv")#state表示州 areas表示所占面积
#print(area)
pop=pd.read_csv("state-population.csv")#state表示州,age表示调查人口的年龄,year表示统计年份,population表示人口数量。 
#print(pop)
#将人口数据和各州简称数据合并
abb_pop=pd.merge(abb,pop,left_on='abbreviation',right_on='state/region',how='outer')
print(abb_pop.head(5))
abb_pop.drop(labels="abbreviation",axis=1,inplace=True)
print(abb_pop.head(5))

#定位state中nan
abb_pop_nan=abb_pop.loc[abb_pop['state'].isnull()]
abb_pop_statenan=abb_pop_nan['state/region']
#print(abb_pop_statenan)
abb_pop_statenan=abb_pop_statenan.unique()
# print(abb_pop_statenan)

#为空值补上正确的值
#取出USA对应行数据
USA_nan=abb_pop.loc[abb_pop['state/region']=='USA']
PR_nan=abb_pop.loc[abb_pop['state/region']=='PR']
Indexs1=USA_nan.index
Indexs2=PR_nan.index
print(USA_nan)
#获取USA为空对应的行索引并完成赋值
abb_pop.loc[Indexs1,'state']='United States'
abb_pop.loc[Indexs2,'state']='Paraná'
print(abb_pop)

#检测填充nan是否成功
abb_pop_nan=abb_pop.loc[abb_pop['state'].isnull()]
abb_pop_statenan=abb_pop_nan['state/region']
print(abb_pop_statenan)
abb_pop_statenan=abb_pop_statenan.unique()
print(abb_pop_statenan)

#再将面积数据进行合并
abb_pop_area=pd.merge(abb_pop,area,how='outer')
print(abb_pop_area)
#去除面积中含有nan的行
area_nan=abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()]
Indexs3=area_nan.index
abb_pop_area.drop(labels=Indexs3,axis=0,inplace=True)
print(abb_pop_area)

#找出2010年全民数据
total_date_2010=abb_pop_area[abb_pop_area['ages']=='total']
total_date_2010=total_date_2010[total_date_2010['year']==2010]
print(total_date_2010)

#计算各州人口密度 排序并找出人口密度最高
abb_pop_area['density']=abb_pop_area['population']/abb_pop_area['area (sq. mi)']
print(abb_pop_area)
abb_pop_area=abb_pop_area.sort_values(by='density',axis=0,ascending=False)
print(abb_pop_area.head(1))

2.政治献金数据分析

1.读取数据查看相关信息

数据分析项目实战day2

数据分析项目实战day2

数据分析项目实战day2

数据分析项目实战day2

2.进行数据操作

将所有空值填充为NOT PROVIDE。

数据分析项目实战day2

将捐赠金额小于等于0的数据删除。

数据分析项目实战day2

新建一列显示候选人所对应的党派。

数据分析项目实战day2

统计不同党派出现的次数

数据分析项目实战day2

统计各个党派收到的献金总数

数据分析项目实战day2

查看具体每天的献金总数

数据分析项目实战day2

查看老兵主要支持谁

数据分析项目实战day2

完整代码如下

import numpy as np
import pandas as pd

parties = {'Bachmann, Michelle': 'Republican',
           'Cain, Herman': 'Republican',
           'Gingrich, Newt': 'Republican',
           'Huntsman, Jon': 'Republican',
           'Johnson, Gary Earl': 'Republican',
           'McCotter, Thaddeus G': 'Republican',
           'Obama, Barack': 'Democrat',
           'Paul, Ron': 'Republican',
           'Pawlenty, Timothy': 'Republican',
           'Perry, Rick': 'Republican',
           "Roemer, Charles E. 'Buddy' III": 'Republican',
           'Romney, Mitt': 'Republican',
           'Santorum, Rick': 'Republican'}

df=pd.read_csv("usa_election.txt")
print(df.head(5))
print(df.info())
print(df.describe())

#将所有空值填充为NOT PROVIDE
df.fillna(value='NOT PROVIDE',inplace=True)
print(df)
#将捐赠金额小于等于0的数据删除
indexs1=df.loc[df['contb_receipt_amt']<=0].index df.drop(labels="indexs1,axis=0,inplace=True)" # print(df) #新建一列显示候选人所对应的党派 df['party']="df['cand_nm'].map(parties)" print(df['party'].value_counts()) #统计各个党派收到的献金总数 party_sum="df.groupby(by='party')['contb_receipt_amt'].sum()" print(party_sum) party_sum_day="df.groupby(by=['party','contb_receipt_dt'])['contb_receipt_amt'].sum()" print(party_sum_day) df_old="df.loc[df['contbr_occupation']=='DISABLED" veteran'] #根据候选人分组 再求和排序 df_old_donate="df_old.groupby(by='cand_nm')['contb_receipt_amt'].sum()" print(df_old_donate.head(1))< code></=0].index>

3.用户消费数据分析

1.数据预处理

数据分析项目实战day2

发现数据的列索引存在问题,进行修改。

数据分析项目实战day2

查看数据信息,发现没有空值。

数据分析项目实战day2

将购买日期转换为时间类型。

数据分析项目实战day2

在数据新增月份列。

数据分析项目实战day2

2.按月进行分析

求出每月用户花费的总金额。因为数据跨越了两年,所以不进行刚才的月份合并操作。

数据分析项目实战day2

绘制折线图。

数据分析项目实战day2

数据分析项目实战day2

数据分析项目实战day2

求出每一个用户花费金额。

数据分析项目实战day2

统计每一个用户消费次数。

数据分析项目实战day2

绘制散点图。

数据分析项目实战day2

绘制每个用户消费总金额直方图 金额在1200内 。

数据分析项目实战day2

完整代码如下:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#&#x7528;&#x4EE5;&#x6B63;&#x5E38;&#x663E;&#x793A;&#x4E2D;&#x6587;
plt.rcParams['font.sans-serif']=['SimHei'] #&#x7528;&#x6765;&#x6B63;&#x5E38;&#x663E;&#x793A;&#x4E2D;&#x6587;&#x6807;&#x7B7E;
plt.rcParams['axes.unicode_minus']=False #&#x7528;&#x6765;&#x6B63;&#x5E38;&#x663E;&#x793A;&#x8D1F;&#x53F7;

#&#x4FEE;&#x6539;&#x5217;&#x7D22;&#x5F15;&#xFF0C;name&#x4E2D;&#x4ECE;&#x5DE6;&#x5230;&#x53F3;&#x4F9D;&#x6B21;&#x4E3A;&#x7528;&#x6237;ID &#x8D2D;&#x4E70;&#x65E5;&#x671F; &#x8D2D;&#x4E70;&#x6570;&#x91CF; &#x8D2D;&#x4E70;&#x91D1;&#x989D;
df=pd.read_csv('CDNOW_master.txt',header=None,sep='\s+',names=['user_id','order_date','order_num','order_amount'])
#print(df)
print(df.info())

#&#x8F6C;&#x6362;&#x65F6;&#x95F4;&#x683C;&#x5F0F;
df['order_date']=pd.to_datetime(df['order_date'],format='%Y%m%d')

#&#x5728;&#x6570;&#x636E;&#x65B0;&#x589E;&#x6708;&#x4EFD;&#x5217;
df['month']=df['order_date'].astype('datetime64[M]')
df['month']=[i.month for i in df["month"]]

#&#x7EDF;&#x8BA1;&#x6BCF;&#x4E2A;&#x6708;&#x82B1;&#x8D39; &#x548C;&#x8D2D;&#x4E70;&#x4EA7;&#x54C1;
df_monthly_cost=df.groupby(by='month')['order_amount'].sum()
df_monthly_buy_num=df.groupby(by='month')['order_num'].sum()
print(df_monthly_cost)
print(df_monthly_buy_num)

#&#x4F5C;&#x56FE;
plt.figure(figsize=(20,8),dpi=80)
plt.plot(df_monthly_cost,label='&#x6BCF;&#x6708;&#x82B1;&#x8D39;&#x91D1;&#x989D;')
plt.plot(df_monthly_buy_num,label='&#x6BCF;&#x6708;&#x8D2D;&#x4E70;&#x4EA7;&#x54C1;&#x6570;')
plt.legend(loc='best')
plt.show()

#&#x57FA;&#x4E8E;&#x7528;&#x6237;&#x8FDB;&#x884C;&#x5206;&#x7EC4;
#&#x6C42;&#x6BCF;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x6D88;&#x8D39;&#x603B;&#x91D1;&#x989D;
df_per_user_amount=df.groupby(by='user_id')['order_amount'].sum()
#&#x6C42;&#x6BCF;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x6D88;&#x8D39;&#x603B;&#x6B21;&#x6570;
df_per_user_num=df.groupby(by='user_id').count()['order_num']

print(df_per_user_num)
plt.figure(figsize=(20,8),dpi=80)
plt.scatter(df_per_user_num,df_per_user_amount)
plt.xlabel('&#x8D2D;&#x4E70;&#x6B21;&#x6570;')
plt.ylabel('&#x8D2D;&#x4E70;&#x91D1;&#x989D;')
plt.show()

#&#x7ED8;&#x5236;&#x6BCF;&#x4E2A;&#x7528;&#x6237;&#x6D88;&#x8D39;&#x603B;&#x91D1;&#x989D;&#x76F4;&#x65B9;&#x56FE; &#x91D1;&#x989D;&#x5728;1200&#x5185;
df_per_user_amount_1=df.groupby(by='user_id').sum().query('order_amount<=1200')["order_amount"] # print(df_per_user_amount_1) plt.figure(figsize="(20,8),dpi=80)" plt.hist(df_per_user_amount_1) plt.xlabel('消费金额') plt.ylabel('用户数量') plt.show() < code></=1200')["order_amount"]>

Original: https://blog.csdn.net/kongqing23/article/details/122337298
Author: kongqing23
Title: 数据分析项目实战day2

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/678944/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球