数学建模准备(美赛)

1.准备工作:

编程环境准备:

  • pip list 查看:导入的包
  • pip install pandas:可以导入pandas包,也可以是其他的。需要的包有如下:
from pandas import read_csv,to_csv
from pyecharts import Bar,Line,Pie,Scatter

文件准备:

  • 使用office,将数据以此方式存储打开,并另存为CSV文件
  • 使用记事本打开,另存为编码方式为utf-8.
  • 读取CSV文件(导出数据命令如下)
from pandas import read_csv

df=read_csv("f://one.csv",sep=",")
print(df)

2.数据处理:

数据导入导出:

导入
import pandas as pd
df=pd.read_csv("f://one.csv",sep=",")
print(df)

导出
df.to_csv("g://one.csv",sep=",")

行:

df1=df[df.one==2016114284]
printf(df1)

列:

改列名:
df.columns=['one','two']

新增一列:
df['three']=0

删一列:
del df['three']
print(df)

注意的是,当涉及到,表结构变化的时候,列的引用要使用,【】,且“ columnname”,加引号。 

 

数据类型转换:

查看数据类型:
print(df.two.dtypes)

转换数据类型:
df.two=df.two.astype(int)
print(df.two)

或者是:
df.two=df.two.astype(object)
print(df.two)

数据的处理:

  • 数值型数据处理:
计算数值:
df['three']=df.one*df.two

筛选数值:
df=df[df.one>=100]
print(df)
  • 非数值型数据处理:
1.拆:
df2=df.one.str.split('\t',1,True)

2.合:多列合为一列:
df['three']=df.one+df.two
表记录的合并:df1=df1.append(df2.ignore_index=True)
表格的合并:df=pandas.merge(df1,df2,left_on='one',right_on='four')

3.取:# df1.two=df1.two.str.slice(2,5)

4.去:df.one=df.one.str.strip()

注意:对于数据的处理时,数值的比较容易,需要注意的是字符串的处理。 而且,要加上=进行赋值

数据清洗:

重复:则删
df=df1.drop_duplicates()

缺失:则以均值代替
df1=df1.fillna(df1.mean())

注意:这是对表格的操作,而不是对某一列的操作。

分段:

bins=[df1.two.min()-1,500,df1.two.max()+1]

labels=['500以下','500以上']

df1['four']=pandas.cut(df1.two,bins,labels=labels)

注意:分段的目的是为了下一步的分组 

3.数据统计:

基本的统计:

import pandas as pd
df=pd.read_csv("f://one.csv",sep=",")
print(df)
描述
print(df.chinese.describe())
求和,数量,均值
print(df.chinese.sum())
print(df.chinese.size)
print(df.chinese.mean())
最值
print(df.chinese.max())
print(df.chinese.min())
方差,标准差
print(df.chinese.std())
print(df.chinese.var())

注意:针对的是某一列 

分组:

from pandas import read_csv
import pyecharts
df=read_csv("f://one.csv",sep=",")
df1=df.groupby(by=["sex"]).agg({  "chinese":['sum','size','mean' ]   })                        
print(df1)

如果是两个的话,就是
df1=df.groupby(by=["sex"]).agg({  "chinese":['sum','size','mean' ],
                                  "math": ['sum', "size", 'mean']
   })     


注意:这是统计某一列和另一列的关系。

思路:原始数据(DataFrame系列)---统计表--数据结构格式化(DataFrame系列)。

当数据非常多的时候,是不可能直接在原始数据直接作图的,需要通过统计得到统计图。然而,得到的统计图的数据结构就变了

不和刚开始的一样,我们需要处理转变统计图的数据结构。最后的表格我们容易使用程序访问特定的列。。。

数据结构发生了什么变化呢?

原始数据的数据结构是由若干的列构成的,程序很容易任意一列。属于Series系列。

统计的另一个目的是为了让数据量减少,减少到可以在图形上显示。所以,常用的思想是分组,聚合。然而,此操作得到的

结果数据结构改变了。属于DataFrame系列。程序访问数据不易操作。

如何将统计表的数据结构恢复到原来的格式。思想是,数据不变,创建一个表格,填充数据。

数学建模准备(美赛)_第1张图片

第一个 是统计表,第二个是原始数据格式的表格样式。

建立一个dataframe结构的表
df4=DataFrame()
提取df1的核心数据,并以列检索,(如果不转置就是以行检索)
df2=df1.values.T
填充数据。
df4["sex"]=df1.index.values
df4["sum"]=df2[0]
df4["sizse"]=df2[1]
df4["mean"]=df2[2]
print(df4)

 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

访问DataFrame的形状
print(df4.shape)

访问DataFrame的行索引 ,列表形式输出
print(df4.index.values)

访问DataFrame的列索引,列表形式输出
print(df4.columns.values)

访问DataFrame的核心数据,列表形式输出。
print(df4.values)

数据透视表:

 

4.作图:(pycharts)使用这个库,视觉效果好。

 

import pandas as pd
from pyecharts import Bar,Line,Pie,Scatter
from pandas import read_csv
import pyecharts
df=read_csv("f://one.csv",sep=",")
print(df)
--------------------------------------------------------------------------
柱状图:
bar=Bar("mean-subject")
bar.add("mean",
        ['chinese','math','English'],
        [df.chinese.mean(),df.math.mean(),df.English.mean()],
        mark_point=['min','max'],mark_line=['average'])
bar.render("g://bar.html")
--------------------------------------------------------------------------
折线图:
line=Line("mean-subject")
line.add("mean",
         ['chinese', 'math', 'English'],
         [df.chinese.mean(), df.math.mean(), df.English.mean()],
         )
line.render("g://line.html")
--------------------------------------------------------------------------
饼图:
pie=Pie("mean-subject")
pie.add("mean",
        ['chinese', 'math', 'English'],
        [df.chinese.mean(), df.math.mean(), df.English.mean()]
        ,is_label_show=True)
pie.render("g://pie.html")
--------------------------------------------------------------------------
散点图
scatter=Scatter("mean-subject")
scatter.add("mean",
            ['10','20','30'],
            [df.chinese.mean(), df.math.mean(), df.English.mean()]
            )
scatter.render("g://scatter.html")

注意:散点图的坐标都是数值。

 

 

完整的程序:

import pandas as pd
from pyecharts import Bar,Line,Pie,Scatter
from pandas import DataFrame
from pandas import read_csv
import pyecharts
# 读取原始表
df=read_csv("f://one.csv",sep=",")
print(df)

# 分段之后的表
bins=[0,60,100]
labels=["fail","pass"]
df["seven"]=pd.cut(df.math,bins,labels=labels)
print(df)

# 分组之后的表
df1=df.groupby(by=["seven"]).agg({"math":["sum","mean","size"]})
print(df1)

# 格式转换之后的表
df5=pd.DataFrame()
df2=df1.values.T
df5["sum"]=df2[0]
df5["mean"]=df2[1]
df5["size"]=df2[2]
df5["seven"]=df1.index.values
print(df5)

# 作图:
bar=Bar("first bar")
bar.add("good",df5["seven"],df5["size"])
bar.render("g://bar.html")

 

你可能感兴趣的:(python)