1、调查数据。某公司对财务部门人员是否抽烟进行调查,结果为:否,否,否, 是,是,否,否,是,否,是,否,否,是,是,否,是,否,否,是,是。
1)请用value_count函数统计人数,并绘制条图,按颜色区分是否。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import scipy.stats as st
df_1 = pd.DataFrame({'是否':['否','否','否','是','是','否','否','是','否','是','否','否','是','是','否','是','否','否','是','是']})
df_a=df_1['是否'].value_counts()
print(df_1['是否'].value_counts())
print('总数:{}'.format(df_1['是否'].count()))
plt.rcParams['font.sans-serif'] =['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
plt.xticks(range(2),['是','否'],fontsize=14)
x=range(len(df_a))
plt.bar(x=x,height=df_a,width=0.6,alpha=0.5, color=['blue', 'red'])
plt.ylim([0,13])
plt.title("某公司财务部门人员是否抽烟调查",fontsize=15)
for x,y in enumerate(df_a):
plt.text(x,y+0.8,'%s' %round(y,1),ha='center',fontsize=13)
plt.show()
2)请用自定义函数tab生成频数表和频数图。
2、工资数据。上述企业财务部员工的月工资数据如下:
2050,2100,2200,2300,2350,2450,2500,2700,2900, 2850,3500,3800,2600,3000,3300,3200,4000,3100,4200,3500。
1)试用mean、median、var、sd函数求数据的均值、中位数、方差、标准差。
2)绘制该数据的散点图和直方图,应用hist函数构建自己的计量频数表函数。
3)请用自定义函数freq生成频数表和频数图。
import pandas as pd
import matplotlib.pyplot as plt
# 设置全局字体(超级重要!!!!!!!!不然会有乱码)
plt.rcParams['font.family'] = 'Microsoft YaHei'
# 数据处理
str_data = "2050,2100,2200,2300,2350,2450,2500,2700,2900,2850,3500,3800,2600,3000,3300,3200,4000,3100,4200,3500"
data_list = str_data.split(",")
df = pd.DataFrame(data_list, dtype='float')
# 均值、中位数、方差、标准差
mean_value = df[0].mean()
median_value = df[0].median()
variance_value = df[0].var()
std_deviation = df[0].std()
print("Mean:", mean_value)
print("Median:", median_value)
print("Variance:", variance_value)
print("Standard Deviation:", std_deviation)
# 绘制散点图
workers = list(range(1, len(df) + 1))
plt.scatter(workers, df[0])
plt.xlabel('工人')
plt.ylabel('工资')
plt.title('企业财务部员工的月工资数据散点图')
plt.xticks(workers)
plt.show()
# 绘制直方图
plt.hist(df[0], bins=len(df), density=True)
plt.xlabel('工资区间')
plt.ylabel('频率')
plt.title('企业财务部员工的月工资数据直方图')
plt.show()
# 自定义计量数据的频数表生成函数
def frequency_table(data):
freq_counts = pd.value_counts(data)
freq_table = pd.DataFrame(freq_counts, columns=['频数'])
return freq_table
# 自定义频数图绘制函数
def plot_frequency(data):
plt.hist(data, bins=len(data), histtype='bar', rwidth=0.8)
plt.xlabel('工资区间')
plt.ylabel('频数')
plt.title('企业财务部员工的月工资数据频数直方图')
plt.show()
# 示例数据
wage_list = [2050, 2100, 2200, 2300, 2350, 2450, 2500, 2700, 2900, 2850, 3500, 3800, 2600, 3000, 3300, 3200, 4000, 3100, 4200, 3500]
# 调用自定义函数生成频数表和频数图
freq_table = frequency_table(wage_list)
print(freq_table)
plot_frequency(wage_list)