学习目标:
从0-1的数据分析实战
学习内容:
1、 数据分析
2、 数据汇总
学习产出:
1.1.数据可视化
# 导入matplotlib中的pyplot
import matplotlib.pyplot as plt
# 为了使matplotlib图形能够内联显示
%matplotlib inline
# 导入词云库
from wordcloud import WordCloud,ImageColorGenerator
#按州总捐款数和总捐款人数柱状图
# 各州总捐款数可视化
st_amt = c_itcont.groupby('STATE').sum().sort_values("TRANSACTION_AMT",ascending=False)[:10]
st_amt=pd.DataFrame(st_amt, columns=['TRANSACTION_AMT'])
st_amt.plot(kind='bar')
# 各州捐款总人数可视化,取前10个州的数据
st_amt = c_itcont.groupby('STATE').size().sort_values(ascending=False).head(10)
st_amt.plot(kind='bar')
# 从所有数据中取出支持拜登的数据
biden = c_itcont[c_itcont['CAND_NAME']=='BIDEN, JOSEPH R JR']
# 统计各州对拜登的捐款总数
biden_state = biden.groupby('STATE').sum().sort_values("TRANSACTION_AMT", ascending=False).head(10)
# 饼图可视化各州捐款数据占比
biden_state.plot.pie(figsize=(10, 10),autopct='%0.2f%%',subplots=True)
# 首先下载图片模型,这里提供的是已经处理好的图片,有兴趣的选手可以自己写代码进行图片处理
# 处理结果:需要将人图像和背景颜色分离,并纯色填充,词云才会只显示在人图像区域
# 拜登原图:https://img.alicdn.com/tfs/TB1pUcwmZVl614jSZKPXXaGjpXa-689-390.jpg
# 拜登处理后图片:https://img.alicdn.com/tfs/TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg
# 特朗普原图:https://img.alicdn.com/tfs/TB1D0l4pBBh1e4jSZFhXXcC9VXa-298-169.jpg
# 特朗普处理后图片:https://img.alicdn.com/tfs/TB1BoowmZVl614jSZKPXXaGjpXa-298-169.jpg
# 这里我们先下载处理后的图片
!wget https://img.alicdn.com/tfs/TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg
# 由于下载图片文件名过长,我们对文件名进行重命名
import os
os.rename('TB10Jx4pBBh1e4jSZFhXXcC9VXa-689-390.jpg', 'biden.jpg')
# 在4.2 热门候选人拜登在各州的获得的捐赠占比 中我们已经取出了所有支持拜登的人的数据,存在变量:biden中
# 将所有捐赠者姓名连接成一个字符串
data = ' '.join(biden["NAME"].tolist())
# 读取图片文件
bg = plt.imread("biden.jpg")
# 生成
wc = WordCloud(# FFFAE3
background_color="white", # 设置背景为白色,默认为黑色
width=890, # 设置图片的宽度
height=600, # 设置图片的高度
mask=bg, # 画布
margin=10, # 设置图片的边缘
max_font_size=100, # 显示的最大的字体大小
random_state=20, # 为每个单词返回一个PIL颜色
).generate_from_text(data)
# 图片背景
bg_color = ImageColorGenerator(bg)
# 开始画图
plt.imshow(wc.recolor(color_func=bg_color))
# 为云图去掉坐标轴
plt.axis("off")
# 画云图,显示
# 保存云图
wc.to_file("biden_wordcloud.png")
# 按州总捐款热力地图
import seaborn as sns
st_amt2 = c_itcont.groupby('STATE').sum().sort_values("TRANSACTION_AMT",ascending=False)[:10]
st_amt2 = pd.DataFrame(st_amt, columns=['TRANSACTION_AMT'])
sns.heatmap(st_amt2, cmap='Blues', annot=True, fmt='.0f')
# 收到捐赠额最多的两位候选人的总捐赠额变化趋势
'''
参赛选手自由发挥、补充
第一个补充捐赠额变化趋势图的参赛选手可以获得天池杯子一个
'''
first = c_itcont.groupby("CAND_NAME").sum().sort_values("TRANSACTION_AMT",ascending=False).index[0]
second = c_itcont.groupby("CAND_NAME").sum().sort_values("TRANSACTION_AMT",ascending=False).index[1]
x = list(c_itcont[c_itcont['CAND_NAME'] == first].groupby("TRANSACTION_DT")['TRANSACTION_AMT'].sum().index)
y1 = list(c_itcont[c_itcont['CAND_NAME'] == first].groupby("TRANSACTION_DT")['TRANSACTION_AMT'].sum())
y2 = list(c_itcont[c_itcont['CAND_NAME'] == second].groupby("TRANSACTION_DT")['TRANSACTION_AMT'].sum())
fig = plt.figure(figsize=(15, 8), dpi=80)
plt.xticks(rotation=40)
plt.xlabel('date')
plt.ylabel('money')
plt.plot(x, y1, label=first, color='red')
plt.plot(x, y2, label=second, color='blue')
plt.legend(loc='upper left')
plt.grid(alpha=0.2)
plt.title('Recruitment of two major candidates')
# 其他可视化方向
#得到捐资额最高的两位候选人biden和trump的捐资额趋势图
trump=c_itcont[c_itcont['CAND_NAME']=='TRUMP, DONALD J.']
biden_amt=biden.groupby('TRANSACTION_DT').sum().sort_values('TRANSACTION_DT',ascending=True)
trump_amt=trump.groupby('TRANSACTION_DT').sum().sort_values('TRANSACTION_DT',ascending=True)
fig,ax=plt.subplots(figsize=(15,6))
ax.plot(biden_amt,drawstyle='steps-post',label="Biden")
ax.plot(trump_amt,drawstyle='steps-post',label="Trump")
plt.title("AMT Tendency Chart")
plt.xlabel('Date')
plt.ylabel('AMT')
plt.xticks(rotation=30)
plt.tick_params(axis='x', labelsize=10)
plt.legend(loc='upper left',frameon=False)
plt.grid(alpha=0.2)
plt.show()
数据及代码源于"AI训练营Python-阿里云天池及其它参赛人员代码"