Big data (8): explicación detallada de la aplicación básica de Pandas (5)

Introducción a la columna

Combinando mi propia experiencia y materiales internos para resumir los tutoriales de Python, de 3 a 5 capítulos por día, al menos 1 mes, podré completar el aprendizaje de Python de manera integral y realizar un desarrollo práctico. ¡Definitivamente se convertirá en un jefe! ¡Vamos! ¡enrollar!

Para todos los artículos, visite la columna: "Tutorial de pila completa de Python (0 conceptos básicos)"
y recomiende la actualización más reciente: "Explicación detallada de las preguntas de la entrevista de alta frecuencia en la prueba de Dachang". Esta columna proporciona respuestas detalladas a las preguntas de la entrevista relacionadas con la alta frecuencia. -Pruebas frecuentes en los últimos años, combinadas con su propia Años de experiencia laboral, así como con la orientación de pares líderes resumidos. ¡Su objetivo es ayudar a los estudiantes en pruebas y Python a aprobar la entrevista sin problemas y obtener una oferta satisfactoria!



Explicación detallada de la aplicación básica de Pandas (5)

Aplicaciones de marcos de datos

cálculo de ventana

DataFrameLos métodos de objetos rollingnos permiten colocar datos en la ventana y luego podemos usar funciones para operar y procesar los datos en la ventana. Por ejemplo, si hemos obtenido los datos recientes de una determinada acción y queremos hacer una media móvil de 5 días y una media móvil de 10 días, primero debemos configurar la ventana y luego realizar el cálculo. Podemos utilizar una biblioteca de terceros pandas-datareaderpara obtener los datos de una acción específica dentro de un cierto período de tiempo, y las operaciones específicas son las siguientes.

Instale pandas-datareaderbibliotecas de terceros.

pip install pandas-datareader

Obtenga datos bursátiles recientes de Baidu (código bursátil: BIDU) del sitio web de Stooq pandas-datareaderproporcionado por .get_data_stooq

import pandas_datareader as pdr

baidu_df = pdr.get_data_stooq('BIDU', start='2021-11-22', end='2021-12-7')
baidu_df.sort_index(inplace=True)
baidu_df

producción:

inserte la descripción de la imagen aquí

DataFrameHay cinco columnas arriba Open,,,,, respectivamente , que representan el precio de apertura, el precio más alto, el precio más bajo, el precio de cierre y el volumen de negociación de las acciones Highdel código. A continuación Low, realizaremos cálculos de ventana en los datos de las acciones de Baidu.CloseVolume

baidu_df.rolling(5).mean()

producción:

Los datos en la Closecolumna anterior son el promedio móvil de 5 días que necesitamos. Por supuesto, también podemos usar el siguiente método para calcular directamente el promedio móvil de 5 días en el objeto Closecorrespondiente a la columna .Series

baidu_df.Close.rolling(5).mean()

producción:

Date
2021-11-22        NaN
2021-11-23        NaN
2021-11-24        NaN
2021-11-26        NaN
2021-11-29    150.608
2021-11-30    151.014
2021-12-01    150.682
2021-12-02    150.196
2021-12-03    147.062
2021-12-06    146.534
2021-12-07    146.544
Name: Close, dtype: float64

Juicio de relevancia

En estadística, normalmente utilizamos la covarianza (covarianza) para medir la variación conjunta de dos variables aleatorias. Si la variable XXLos valores más grandes de X están relacionados principalmente con otra variableYYValores mayores de Y corresponden a valores menores de ambas, entonces las dos variables tienden a comportarse de manera similar y la covarianza es positiva. Si los valores más grandes de una variable corresponden en su mayoría a valores más pequeños de la otra, las dos variables tienden a exhibir comportamientos opuestos, con una covarianza negativa. En pocas palabras, el signo de la covarianza muestra cómo se relacionan dos variables. La varianza es un caso especial de covarianza, la covarianza de una variable consigo misma.

cov ( X , Y ) = E ( ( X − μ ) ( Y − υ ) ) = E ( X ⋅ Y ) − μ υ cov(X,Y) = E((X − \mu)(Y − \upsilon )) = E(X \cdot Y) - \mu\upsilonco v ( X ,)=y (( xm ) ( Y))=mi ( X)músculo

Si XXX Y Y Y es estadísticamente independiente, entonces la covarianza de los dos es 0, porque enXXX Y Y Cuando Y es independiente:

E ( X ⋅ Y ) = E ( X ) ⋅ E ( Y ) = μ υ E(X \cdot Y) = E(X) \cdot E(Y) = \mu\upsilonmi ( X)=mi ( X )E(Y)=músculo

La magnitud de la covarianza depende del tamaño de las variables y normalmente no es fácil de interpretar, pero la magnitud de la covarianza en la forma normal puede mostrar la fuerza de la relación lineal entre las dos variables. En estadística, el coeficiente de correlación momento-producto de Pearson es la forma normal de covarianza, que se utiliza para medir dos variables XXX Y Y El grado de correlación entre Y-1 (correlación lineal), con valores entre y1.

ρ X , Y = c o v ( X , Y ) σ X σ Y \rho{X,Y} = \frac {cov(X, Y)} {\sigma_{X}\sigma_{Y}} ρ X ,Y=pagXpagYco v ( X ,Y )

Estime la covarianza y la desviación estándar de la muestra y podrá obtener el coeficiente de Pearson muestral, generalmente con la letra griega ρ \rhodijo .

ρ = ∑ i = 1 norte ( X i − X ˉ ) ( Y i − Y ˉ ) ∑ i = 1 norte ( X i − X ˉ ) 2 ∑ i = 1 n ( Y i − Y ˉ ) 2 \rho = \frac {\sum_{i=1}^{n}(X_i - \bar{X})(Y_i - \bar{Y})} {\sqrt{\sum_{i=1}^{n}(X_i - \bar{X})^2} \sqrt{\sum_{i=1}^{n}(Y_i - \bar{Y})^2}}r=yo = 1norte( XyoXˉ )2 yo = 1norte( YyoYˉ )2 yo = 1norte( XyoXˉ)(YyoYˉ )

Usamos ρ \rhoSe siguen los dos pasos siguientes al juzgar la correlación de indicadores por el valor de ρ .

  1. Determine si los indicadores están correlacionados positivamente, negativamente o no.
    • Cuando $ \rho \gt 0 $, se considera que las variables están correlacionadas positivamente, es decir, las tendencias de ambas son consistentes.
    • Cuando $ \rho \lt 0 $, se considera que las variables están correlacionadas negativamente, es decir, las tendencias de ambas son opuestas.
    • Cuando $\rho = 0$, se considera que las variables no están correlacionadas, pero eso no significa que los dos indicadores sean estadísticamente independientes.
  2. Determinar el grado de correlación entre indicadores.
    • Cuando el valor absoluto de $\rho$ está entre $[0.6,1]$, se considera que las variables están fuertemente correlacionadas.
    • Cuando el valor absoluto de $\rho $ está entre $[0.1,0.6)$, se considera que las variables están débilmente correlacionadas.
    • Cuando el valor absoluto de $\rho$ está entre $[0,0.1)$, se considera que no existe correlación entre variables.

El coeficiente de correlación de Pearson se aplica a:

  1. Existe una relación lineal entre las dos variables y ambas son datos continuos.
  2. La población de dos variables tiene una distribución normal, o casi normal y unimodal.
  3. Las observaciones de dos variables están emparejadas y cada par de observaciones es independiente del otro.

DataFramecovEl método y método del objeto corrse utilizan para calcular la covarianza y el coeficiente de correlación respectivamente. El valor predeterminado del corrprimer parámetro del método es para indicar el cálculo del coeficiente de correlación de Pearson, además también se puede especificar u obtener el Coeficiente de Kendall o coeficiente de correlación de rango de Speier Mann.methodpearsonkendallspearman

A continuación, boston_house_price.csvobtenemos el famoso conjunto de datos de precios de la vivienda de Boston del archivo nombrado para crear uno DataFrame. Usamos correl método para calcular cuáles de los factores que pueden afectar los precios de la vivienda 13están correlacionados positiva o negativamente con los precios de la vivienda. El código es el siguiente.

boston_df = pd.read_csv('data/csv/boston_house_price.csv')
boston_df.corr()

Nota : Si necesita el archivo CSV en el ejemplo anterior, puede obtenerlo a través de la siguiente dirección de disco en la nube de Baidu y los datos están en el directorio de "Análisis de datos de aprendizaje desde cero". Enlace: https://pan.baidu.com/s/1rQujl5RQn9R7PadB2Z5g_g , código de extracción: e7b4.

producción:

inserte la descripción de la imagen aquí


El coeficiente de correlación de Spearman no es tan estricto como el coeficiente de correlación de Pearson para las condiciones de los datos, siempre que los valores observados de las dos variables sean datos graduados emparejados o datos graduados transformados a partir de datos observados de variables continuas, independientemente de las dos variables La distribución general La forma y el tamaño de la muestra se pueden estudiar con el coeficiente de correlación de rangos de Spearman. Calculamos el coeficiente de correlación de Spearman de la siguiente manera.

boston_df.corr('spearman')

producción:

En Notebook o JupyterLab, podemos PRICEagregar un color degradado a la columna y usar el color para mostrar visualmente las columnas que están correlacionadas negativamente, correlacionadas positivamente y no correlacionadas con el precio de la vivienda. El método de propiedades del DataFrameobjeto puede completar esta operación. El código es el siguiente.stylebackground_gradient

boston_df.corr('spearman').style.background_gradient('RdYlBu', subset=['PRICE'])

El color del representante en el código anterior RdYlBues el siguiente: cuanto más cerca esté el valor de los datos del coeficiente de correlación 1, más cerca estará el color del rojo; cuanto más cerca esté el valor de los datos 1, más cerca estará el color del azul; el valor de los datos en 0el archivo adjunto es amarillo.

plt.get_cmap('RdYlBu')

inserte la descripción de la imagen aquí

Aplicación del índice

Echemos un vistazo Indexnuevamente al tipo, que proporciona servicios de indexación para objetos Seriesy . Los tipos comúnmente utilizados son los siguientes.DataFrameIndex

Índice de rango (RangeIndex)

código:

sales_data = np.random.randint(400, 1000, 12)
month_index = pd.RangeIndex(1, 13, name='月份')
ser = pd.Series(data=sales_data, index=month_index)
ser

producción:

月份
1     703
2     705
3     557
4     943
5     961
6     615
7     788
8     985
9     921
10    951
11    874
12    609
dtype: int64

Índice categórico

código:

cate_index = pd.CategoricalIndex(
    ['苹果', '香蕉', '苹果', '苹果', '桃子', '香蕉'],
    ordered=True,
    categories=['苹果', '香蕉', '桃子']
)
ser = pd.Series(data=amount, index=cate_index)
ser

producción:

苹果    6
香蕉    6
苹果    7
苹果    6
桃子    8
香蕉    6
dtype: int64

código:

ser.groupby(level=0).sum()

producción:

苹果    19
香蕉    12
桃子     8
dtype: int64

Índice multinivel (MultiIndex)

código:

ids = np.arange(1001, 1006)
sms = ['期中', '期末']
index = pd.MultiIndex.from_product((ids, sms), names=['学号', '学期'])
courses = ['语文', '数学', '英语']
scores = np.random.randint(60, 101, (10, 3))
df = pd.DataFrame(data=scores, columns=courses, index=index)
df

Explicación : El código anterior utiliza MultiIndexel método de clase from_product, que construye un índice multinivel a través del producto cartesiano de dos conjuntos de datos ids.sms

producción:

             语文 数学 英语
学号	学期			
1001  期中	93	77	60
      期末	93	98	84
1002  期中	64	78	71
      期末	70	71	97
1003  期中	72	88	97
      期末	99	100	63
1004  期中	80	71	61
      期末	91	62	72
1005  期中	82	95	67
      期末	84	78	86

código:

# 计算每个学生的成绩,期中占25%,期末占75%
df.groupby(level=0).agg(lambda x: x.values[0] * 0.25 + x.values[1] * 0.75)

producción:

        语文    数学    英语
学号			
1001	93.00	92.75	78.00
1002	68.50	72.75	90.50
1003	92.25	97.00	71.50
1004	88.25	64.25	69.25
1005	83.50	82.25	81.25

Índice de fecha y hora (DatetimeIndex)

  1. A través de date_range()funciones, podemos crear un índice de fecha y hora, el código se muestra a continuación.

    código:

    pd.date_range('2021-1-1', '2021-6-1', periods=10)
    

    producción:

    DatetimeIndex(['2021-01-01 00:00:00', '2021-01-17 18:40:00',
                   '2021-02-03 13:20:00', '2021-02-20 08:00:00',
                   '2021-03-09 02:40:00', '2021-03-25 21:20:00',
                   '2021-04-11 16:00:00', '2021-04-28 10:40:00',
                   '2021-05-15 05:20:00', '2021-06-01 00:00:00'],
                  dtype='datetime64[ns]', freq=None)
    

    código:

    pd.date_range('2021-1-1', '2021-6-1', freq='W')
    

    producción:

    DatetimeIndex(['2021-01-03', '2021-01-10', '2021-01-17', '2021-01-24',
                   '2021-01-31', '2021-02-07', '2021-02-14', '2021-02-21',
                   '2021-02-28', '2021-03-07', '2021-03-14', '2021-03-21',
                   '2021-03-28', '2021-04-04', '2021-04-11', '2021-04-18',
                   '2021-04-25', '2021-05-02', '2021-05-09', '2021-05-16',
                   '2021-05-23', '2021-05-30'],
                  dtype='datetime64[ns]', freq='W-SUN')
    
  2. A través DateOffsetdel tipo podemos configurar la diferencia horaria y DatetimeIndexrealizar cálculos, las operaciones específicas son las siguientes.

    código:

    index = pd.date_range('2021-1-1', '2021-6-1', freq='W')
    index - pd.DateOffset(days=2)
    

    producción:

    DatetimeIndex(['2021-01-01', '2021-01-08', '2021-01-15', '2021-01-22',
                   '2021-01-29', '2021-02-05', '2021-02-12', '2021-02-19',
                   '2021-02-26', '2021-03-05', '2021-03-12', '2021-03-19',
                   '2021-03-26', '2021-04-02', '2021-04-09', '2021-04-16',
                   '2021-04-23', '2021-04-30', '2021-05-07', '2021-05-14',
                   '2021-05-21', '2021-05-28'],
                  dtype='datetime64[ns]', freq=None)
    

    código:

    index + pd.DateOffset(days=2)
    

    producción:

    DatetimeIndex(['2021-01-05', '2021-01-12', '2021-01-19', '2021-01-26',
                   '2021-02-02', '2021-02-09', '2021-02-16', '2021-02-23',
                   '2021-03-02', '2021-03-09', '2021-03-16', '2021-03-23',
                   '2021-03-30', '2021-04-06', '2021-04-13', '2021-04-20',
                   '2021-04-27', '2021-05-04', '2021-05-11', '2021-05-18',
                   '2021-05-25', '2021-06-01'],
                  dtype='datetime64[ns]', freq=None)
    
  3. Los datos se pueden DatatimeIndexmanipular utilizando los métodos asociados al tipo, que incluyen:

    • shift()Método: al mover los datos hacia adelante o hacia atrás en el tiempo, todavía tomamos los datos de acciones de Baidu anteriores como ejemplo y el código es el siguiente.

      código:

      baidu_df.shift(3, fill_value=0)
      

      producción:

      código:

      baidu_df.shift(-1, fill_value=0)
      

      producción:

    • asfreq()Método: especifique una frecuencia de tiempo para extraer los datos correspondientes, el código es el siguiente.

      código:

      baidu_df.asfreq('5D')
      

      producción:

inserte la descripción de la imagen aquí

código:

       baidu_df.asfreq('5D', method='ffill')
- `resample()`方法:基于时间对数据进行重采样,相当于根据时间周期对数据进行了分组操作,代码如下所示。

    代码:

    ```python
    baidu_df.resample('1M').mean()
    ```

> **说明**:上面的代码中,`W`表示一周,`5D`表示`5`天,`1M`表示`1`个月。
  1. conversión de zona horaria

    • Obtenga información de zona horaria.

      import pytz
      
      pytz.common_timezones
      
    • tz_localize()Método: localizar la fecha y hora.

      código:

      baidu_df = baidu_df.tz_localize('Asia/Chongqing')
      baidu_df
      

      producción:

    • tz_convert()Método: convertir zona horaria.

      código:

      baidu_df.tz_convert('America/New_York')
      

      producción:

Supongo que te gusta

Origin blog.csdn.net/ml202187/article/details/132707836
Recomendado
Clasificación