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!
Directorio de artículos
Explicación detallada de la aplicación básica de Pandas (5)
Aplicaciones de marcos de datos
cálculo de ventana
DataFrame
Los métodos de objetos rolling
nos 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-datareader
para 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-datareader
bibliotecas de terceros.
pip install pandas-datareader
Obtenga datos bursátiles recientes de Baidu (código bursátil: BIDU) del sitio web de Stooq pandas-datareader
proporcionado 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:
DataFrame
Hay 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 High
del código. A continuación Low
, realizaremos cálculos de ventana en los datos de las acciones de Baidu.Close
Volume
baidu_df.rolling(5).mean()
producción:
Los datos en la Close
columna 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 Close
correspondiente 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 ,Sí )=y (( x−m ) ( Y−tú ))=mi ( X⋅Sí )−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⋅Sí )=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( Xyo−Xˉ )2∑yo = 1norte( Yyo−Yˉ )2∑yo = 1norte( Xyo−Xˉ)(Yyo−Yˉ )
Usamos ρ \rhoSe siguen los dos pasos siguientes al juzgar la correlación de indicadores por el valor de ρ .
- 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.
- 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:
- Existe una relación lineal entre las dos variables y ambas son datos continuos.
- La población de dos variables tiene una distribución normal, o casi normal y unimodal.
- Las observaciones de dos variables están emparejadas y cada par de observaciones es independiente del otro.
DataFrame
cov
El método y método del objeto corr
se utilizan para calcular la covarianza y el coeficiente de correlación respectivamente. El valor predeterminado del corr
primer 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.method
pearson
kendall
spearman
A continuación, boston_house_price.csv
obtenemos el famoso conjunto de datos de precios de la vivienda de Boston del archivo nombrado para crear uno DataFrame
. Usamos corr
el método para calcular cuáles de los factores que pueden afectar los precios de la vivienda 13
está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:
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 PRICE
agregar 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 DataFrame
objeto puede completar esta operación. El código es el siguiente.style
background_gradient
boston_df.corr('spearman').style.background_gradient('RdYlBu', subset=['PRICE'])
El color del representante en el código anterior RdYlBu
es 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 0
el archivo adjunto es amarillo.
plt.get_cmap('RdYlBu')
Aplicación del índice
Echemos un vistazo Index
nuevamente al tipo, que proporciona servicios de indexación para objetos Series
y . Los tipos comúnmente utilizados son los siguientes.DataFrame
Index
Í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
MultiIndex
el método de clasefrom_product
, que construye un índice multinivel a través del producto cartesiano de dos conjuntos de datosids
.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)
-
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')
-
A través
DateOffset
del tipo podemos configurar la diferencia horaria yDatetimeIndex
realizar 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)
-
Los datos se pueden
DatatimeIndex
manipular 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:
-
código:
baidu_df.asfreq('5D', method='ffill')
- `resample()`方法:基于时间对数据进行重采样,相当于根据时间周期对数据进行了分组操作,代码如下所示。
代码:
```python
baidu_df.resample('1M').mean()
```
> **说明**:上面的代码中,`W`表示一周,`5D`表示`5`天,`1M`表示`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:
-