本文所有代码思路均为董付国老师所有,其他为笔者整理以及听课笔记(本文可能非全部内容,后面学困了学废了打不动代码了)
pandas结合matplotlib进行数据可视化
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#df=pd.DataFrame(np.random.randn(1000,2), #1000行2列随机数
# columns=['B','C']).cumsum() #创建DataFrame
#df['A']=pd.Series(list(range(len(df)))) #创建索引
#plt.figure()
#df.plot(x='A') #A列作为X轴数据 折线图
#plt.show()
df=pd.DataFrame(np.random.rand(10,4),
columns=['a','b','c','d'])
#df.plot(kind='bar') #柱状图
#df.plot(kind='barh') #水平柱状图
#df.plot(kind='barh',stacked=True) #水平堆叠柱状图
#plt.show()
例子:模拟转盘抽奖游戏,统计不同奖项的获奖概率
import numpy as np
import pandas as pd
#模拟转盘100000次
data=np.random.ranf(100000)
#奖项等级划分
category=(0.0,0.08,0.3,1.0)
labels=('一等奖','二等奖','三等奖')
#对模拟数据进行划分
result=pd.cut(data,category,labels=labels)
#统计每个奖项的获奖次数
result=pd.value_counts(result)
#查看结果
print(result)
电影导演演员统计每个演员的参演电影数量
import numpy as np
import pandas as pd
df=pd.read_excel('电影导演演员.xlsx') #从excel中提取数据
print(df)
pairs=[]
for i in range(len(df)): #遍历每一行数据
actors=df.at[i,'演员'].split(',') #获取当前行的演员清单
for actor in actors: #遍历每一个演员
pair=(actor,df.at[i,'电影名称'])
pairs.append(pair)
pairs=sorted(pairs,key=lambda item:int(item[0][2:]))#按演员编号进行排列
print(pairs)
index=[item[0] for item in pairs]
data=[item[1] for item in pairs]
df1=pd.DataFrame({'演员':index,'电影名称':data})
result=df1.groupby('演员',as_index=False).count() #按演员列进行分组 统计每个演员的参演电影数量
result.columns=['演员','参演电影数量']
print(result)
print(result.nlargest(3,'参演电影数量'))
饭店营业额模拟,自己生成数据
import csv
import random
import datetime
fn='data.csv'
with open(fn,'w',encoding='cp936') as fp:
wr=csv.writer(fp) #创建csv写入器
wr.writerow(['日期','销量']) #写入表头
startDate=datetime.date(2021,1,1)
#生成365个模拟数据,可以根据需要进行调整
for i in range(365):
amount=300+i*5+random.randrange(100)
wr.writerow([str(startDate),amount])
startDate=startDate+datetime.timedelta(days=1)
import pandas as pd
import matplotlib.pyplot as plt #画图用的库
plt.rcParams['font.sans-serif']=['simhei'] #设置字体,使得可显示中文
#读取数据,丢弃缺失值
df=pd.read_csv('data.csv',encoding='cp936')
df=df.dropna()
#生成并保存营业额折线图
plt.figure()
df.plot(x='日期')
plt.savefig('first.jpg')
#plt.savefig('first2.jpg',dpi=300)
#按月统计 生成并保存柱状图
plt.figure()
from copy import deepcopy
df1=deepcopy(df)
#df1['moonth']=df1['日期'].map(lambda x:x[:x.rindex('-')])
df1['month']=df1['日期'].str.slice(0,7)#切下来前七个数
df1=df1.groupby(by='month',as_index=False).sum() #按月求和
df1.plot(x='month',kind='bar')
plt.savefig('second.jpg')
#查找涨幅最大的月份,写入文件
df2=df1.drop('month',axis=1).diff() #每一行减上一行
m=df2['销量'].nlargest(1).keys()[0] #求销量最大的那个月对应的行标签
with open('maxMonth.txt','w') as fp:
fp.write(df1.loc[m,'month'])
#按季度统计,生成并保存饼状图
plt.figure()
one=df1[:3]['销量'].sum()
two=df1[3:6]['销量'].sum()
three=df1[6:9]['销量'].sum()
four=df1[9:12]['销量'].sum()
plt.pie([one,two,three,four],
labels=['one','two','three','four'])
plt.savefig('third.jpg')